NekoWM
A gfxprim proxy backend tiling window manager
Loading...
Searching...
No Matches
neko_view.h
Go to the documentation of this file.
1//SPDX-License-Identifier: GPL-2.0-or-later
2/*
3
4 Copyright (c) 2019-2024 Cyril Hrubis <metan@ucw.cz>
5
6 */
7
17#ifndef NEKO_VIEW_H
18#define NEKO_VIEW_H
19
20#include <core/gp_core.h>
21#include <backends/gp_types.h>
22
23struct neko_view;
24struct neko_view_slot;
25
32 NEKO_VIEW_SPLIT_NONE,
33 NEKO_VIEW_SPLIT_HORIZ,
34 NEKO_VIEW_SPLIT_VERT,
35};
36
42typedef struct neko_view_slot_ops {
44 void (*exit)(struct neko_view_slot *self);
45
47 void (*event)(struct neko_view *self, gp_event *ev);
48
58 void (*show)(struct neko_view *self);
59
66 void (*hide)(struct neko_view *self);
67
76 void (*remove)(struct neko_view *self);
77
79 void (*repaint)(struct neko_view *self);
80
82 void (*resize)(struct neko_view *self);
84
90typedef struct neko_view_slot {
93
95 struct neko_view *view;
96
98 gp_dlist_head list;
99
100 char priv[];
102
106typedef struct neko_view {
108 gp_size x;
110 gp_size y;
112 gp_size w;
114 gp_size h;
115
116 //TODO: Remove?
117 gp_pixmap buf;
118
120 //TODO Move to ops?
121 void (*slot_exit)(struct neko_view *self);
122
125
127 unsigned int is_shown:1;
129 unsigned int is_focused:1;
130
132 struct neko_view *subviews[2];
134 unsigned int focused_subview;
137
140
142 char name[32];
144
156 gp_size x, gp_size y, gp_size w, gp_size h,
157 const char *name);
158
159void neko_subviews_init(neko_view *left, neko_view *right, neko_view *parent, enum neko_view_split_mode mode);
160
169
178
185
186static inline int neko_view_is_shown(neko_view *self)
187{
188 if (!self)
189 return 0;
190
191 return self->is_shown;
192}
193
202static inline void neko_view_slot_exit(neko_view *self)
203{
204 if (!self)
205 return;
206
207 self->slot = NULL;
208
209 if (self->slot_exit) {
210 GP_DEBUG(1, "Calling slot empty callback view %p", self);
211 self->slot_exit(self);
212 }
213}
214
223void neko_view_update_rect(neko_view *self, gp_coord x, gp_coord y, gp_size w, gp_size h);
224
234
245
252void neko_view_event(neko_view *self, gp_event *ev);
253
259gp_pixmap *neko_view_pixmap(neko_view *self);
260
268void neko_view_resize(neko_view *self, gp_size w, gp_size h);
269
278
288
298
304static inline void neko_view_focus_in(neko_view *self)
305{
306 gp_event ev = {
307 .type = GP_EV_SYS,
308 .code = GP_EV_SYS_FOCUS,
309 .val = GP_EV_SYS_FOCUS_IN,
310 };
311
312 neko_view_event(self, &ev);
313}
314
320static inline void neko_view_focus_out(neko_view *self)
321{
322 gp_event ev = {
323 .type = GP_EV_SYS,
324 .code = GP_EV_SYS_FOCUS,
325 .val = GP_EV_SYS_FOCUS_OUT,
326 };
327
328 neko_view_event(self, &ev);
329}
330
331#endif /* NEKO_VIEW_H */
void neko_view_repaint(neko_view *self)
Request a view repaint.
gp_pixmap * neko_view_pixmap(neko_view *self)
Returns a pixmap for the view.
static void neko_view_focus_out(neko_view *self)
Sends a focus out event to the view event handler.
Definition neko_view.h:320
void neko_view_init(neko_view *self, gp_size x, gp_size y, gp_size w, gp_size h, const char *name)
Initialize a view.
void neko_view_hide(neko_view *self)
Hides a view from a display.
neko_view_split_mode
A split mode.
Definition neko_view.h:31
void neko_view_show(neko_view *self)
Switches a view shown on a display.
void neko_view_slot_put(neko_view *self, neko_view_slot *slot)
Fills in a slot in a neko view.
void neko_view_event(neko_view *self, gp_event *ev)
Sends an input event to a view child.
void neko_view_update_rect(neko_view *self, gp_coord x, gp_coord y, gp_size w, gp_size h)
Update rectangle in the view on the screen.
void neko_view_resize(neko_view *self, gp_size w, gp_size h)
Resizes the view recursively along with all slots.
neko_view * neko_view_focused_child(neko_view *self)
Returns view focused child.
void neko_view_slot_rem(neko_view *self)
Removes a slot from a view.
int neko_view_is_focused(neko_view *self)
Returns true if view is focused.
static void neko_view_slot_exit(neko_view *self)
Child did exit.
Definition neko_view.h:202
void neko_view_flip(neko_view *self)
Update whole view on the screen.
static void neko_view_focus_in(neko_view *self)
Sends a focus in event to the view event handler.
Definition neko_view.h:304
A view slot ops.
Definition neko_view.h:42
void(* exit)(struct neko_view_slot *self)
Request child exit.
Definition neko_view.h:44
void(* show)(struct neko_view *self)
Show a view slot.
Definition neko_view.h:58
void(* remove)(struct neko_view *self)
Callback for a slot removal.
Definition neko_view.h:76
void(* event)(struct neko_view *self, gp_event *ev)
A child input event.
Definition neko_view.h:47
void(* hide)(struct neko_view *self)
Hide a view slot.
Definition neko_view.h:66
void(* repaint)(struct neko_view *self)
Request full repaint.
Definition neko_view.h:79
void(* resize)(struct neko_view *self)
Resize the child because the view was resized.
Definition neko_view.h:82
A view slot content.
Definition neko_view.h:90
struct neko_view * view
Set to a parent if slot is inserted into a view.
Definition neko_view.h:95
gp_dlist_head list
A list head, used for grouping children into lists.
Definition neko_view.h:98
const neko_view_slot_ops * ops
A neko view child implementation.
Definition neko_view.h:92
View a part of a screen.
Definition neko_view.h:106
gp_size h
A height on the backend pixmap.
Definition neko_view.h:114
void(* slot_exit)(struct neko_view *self)
Called by child when it did exit.
Definition neko_view.h:121
gp_size x
A x offset on the backend pixmap.
Definition neko_view.h:108
unsigned int focused_subview
Currently focused subview.
Definition neko_view.h:134
gp_size w
A width on the backend pixmap.
Definition neko_view.h:112
char name[32]
A view name.
Definition neko_view.h:142
gp_size y
A y offset on the backend pixmap.
Definition neko_view.h:110
neko_view_slot * slot
What is shown in the view.
Definition neko_view.h:139
enum neko_view_split_mode split_mode
Type of the split.
Definition neko_view.h:136
unsigned int is_shown
Set if view is shown on a screen.
Definition neko_view.h:127
struct neko_view * subviews[2]
A view may be split into two subviews.
Definition neko_view.h:132
unsigned int is_focused
Set if the view has focus.
Definition neko_view.h:129
struct neko_view * parent
A view parent, NULL for top level view.
Definition neko_view.h:124