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_HORIZ,
33 NEKO_VIEW_SPLIT_VERT,
34};
35
41typedef struct neko_view_slot_ops {
43 void (*exit)(struct neko_view_slot *self);
44
46 void (*event)(struct neko_view *self, gp_event *ev);
47
57 void (*show)(struct neko_view *self);
58
65 void (*hide)(struct neko_view *self);
66
75 void (*remove)(struct neko_view *self);
76
78 void (*repaint)(struct neko_view *self);
79
81 void (*resize)(struct neko_view *self);
83
89typedef struct neko_view_slot {
92
94 struct neko_view *view;
95
97 gp_dlist_head list;
98
99 char priv[];
101
105typedef struct neko_view {
107 gp_size x;
109 gp_size y;
111 gp_size w;
113 gp_size h;
114
115 //TODO: Remove?
116 gp_pixmap buf;
117
119 //TODO Move to ops?
120 void (*slot_exit)(struct neko_view *self);
121
124
126 unsigned int is_shown:1;
127
129 struct neko_view *subviews[2];
131 unsigned int focused_subview;
134
138
139void neko_view_init(neko_view *self,
140 gp_size x, gp_size y, gp_size w, gp_size h);
141
142void neko_subviews_init(neko_view *left, neko_view *right, neko_view *parent, enum neko_view_split_mode mode);
143
152
161
162static inline int neko_view_is_shown(neko_view *self)
163{
164 if (!self)
165 return 0;
166
167 return self->is_shown;
168}
169
178static inline void neko_view_slot_exit(neko_view *self)
179{
180 if (!self)
181 return;
182
183 self->slot = NULL;
184
185 if (self->slot_exit) {
186 GP_DEBUG(1, "Calling slot empty callback view %p", self);
187 self->slot_exit(self);
188 }
189}
190
199void neko_view_update_rect(neko_view *self, gp_coord x, gp_coord y, gp_size w, gp_size h);
200
210
221
228void neko_view_event(neko_view *self, gp_event *ev);
229
235gp_pixmap *neko_view_pixmap(neko_view *self);
236
244void neko_view_resize(neko_view *self, gp_size w, gp_size h);
245
254
255void neko_view_show(neko_view *self);
256
257void neko_view_hide(neko_view *self);
258
259#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.
neko_view_split_mode
A split mode.
Definition neko_view.h:31
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.
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:178
void neko_view_flip(neko_view *self)
Update whole view on the screen.
A view slot ops.
Definition neko_view.h:41
void(* exit)(struct neko_view_slot *self)
Request child exit.
Definition neko_view.h:43
void(* show)(struct neko_view *self)
Show a view slot.
Definition neko_view.h:57
void(* remove)(struct neko_view *self)
Callback for a slot removal.
Definition neko_view.h:75
void(* event)(struct neko_view *self, gp_event *ev)
A child input event.
Definition neko_view.h:46
void(* hide)(struct neko_view *self)
Hide a view slot.
Definition neko_view.h:65
void(* repaint)(struct neko_view *self)
Request full repaint.
Definition neko_view.h:78
void(* resize)(struct neko_view *self)
Resize the child because the view was resized.
Definition neko_view.h:81
A view slot content.
Definition neko_view.h:89
struct neko_view * view
Set to a parent if slot is inserted into a view.
Definition neko_view.h:94
gp_dlist_head list
A list head, used for grouping children into lists.
Definition neko_view.h:97
const neko_view_slot_ops * ops
A neko view child implementation.
Definition neko_view.h:91
View a part of a screen.
Definition neko_view.h:105
gp_size h
A height on the backend pixmap.
Definition neko_view.h:113
void(* slot_exit)(struct neko_view *self)
Called by child when it did exit.
Definition neko_view.h:120
gp_size x
A x offset on the backend pixmap.
Definition neko_view.h:107
unsigned int focused_subview
Currently focused subview.
Definition neko_view.h:131
gp_size w
A width on the backend pixmap.
Definition neko_view.h:111
gp_size y
A y offset on the backend pixmap.
Definition neko_view.h:109
neko_view_slot * slot
What is shown in the view.
Definition neko_view.h:136
enum neko_view_split_mode split_mode
Type of the split.
Definition neko_view.h:133
unsigned int is_shown
Set if view is shown on a screen.
Definition neko_view.h:126
struct neko_view * subviews[2]
A view may be split into two subviews.
Definition neko_view.h:129
struct neko_view * parent
A view parent, NULL for top level view.
Definition neko_view.h:123