acme
Foundational cross-platform layer of the ca2 framework
Loading...
Searching...
No Matches
display.h
1//
2// Created by camilo on 21/02/2022 23:09 <3ThomasBorregaardSorensen!!
3//
4#pragma once
5
6
7#include "acme/user/micro/display.h"
8#include "event_listener.h"
9#include <xcb/xcb.h>
10#include <xcb/xcb_atom.h>
11#include "acme/operating_system/xcb/_.h"
12// dnf install xcb-util-image-devel
13#include <xcb/xcb_image.h>
14#include <xcb/render.h>
15// apt install libx11-xcb-dev
16#include <X11/Xlib-xcb.h>
17
18
19#define _NET_WM_STATE_REMOVE 0 // remove/unset property
20#define _NET_WM_STATE_ADD 1 // add/set property
21#define _NET_WM_STATE_TOGGLE 2 // toggle property
22
23
24
25namespace xcb
26{
27
28namespace nano
29{
30 namespace user
31 {
32 template < typename TYPE >
33 using visual_id_map = map_base < xcb_visualid_t, TYPE >;
34
35 using visual_pictformat_map = visual_id_map < xcb_render_pictformat_t >;
36
37 using visual_depth_map = visual_id_map < uint32_t >;
38
39 template < typename TYPE >
40 using pictformat_map = map_base < xcb_render_pictformat_t, TYPE >;
41
42 using pictformat_info_map = pictformat_map < const xcb_render_pictforminfo_t * >;
43
44
45
46 class window;
47
48
49 class display :
50 virtual public ::acme::windowing::display,
51 virtual public event_listener
52 {
53 public:
54
55
56 bool m_bUnhook;
57 void * m_pX11Display;
58 xcb_connection_t * m_pconnection;
59 pointer_array < event_listener > m_happeninglistenera;
60 pointer_array < micro::interchange > m_windowa;
61 xcb_window_t m_windowActive;
62 //::procedure_array m_routineaPost;
63 xcb_depth_t * m_pdepth;
64 xcb_visualtype_t * m_pvisualtype;
65 xcb_screen_t * m_pscreen;
66 xcb_colormap_t m_colormap;
67 xcb_window_t m_windowRoot;
68 xcb_window_t m_windowHelper;
69 xcb_atom_t m_atoma[::x11::e_atom_count];
70
71 acme::malloc < xcb_render_query_pict_formats_reply_t * > m_prender_query_pict_formats_reply2;
72 visual_pictformat_map m_mapVisualPictFormat;
73 visual_depth_map m_mapVisualDepth;
74 //map_base < xcb_visualid_t, FbConfigInfo * > m_mapVisualFbConfig;
75 pictformat_info_map m_mapFormatInfo;
76
77 static display * g_p;
78
79
80 display();
81 ~display() override;
82
83
84 static display * get();
85
86
87 virtual xcb_atom_t intern_atom(const ::scoped_string & scopedstrAtomName, bool bCreate = true);
88 virtual xcb_atom_t intern_atom(::x11::enum_atom eatom, bool bCreate = true);
89
90
91 virtual long _window_get_long_property(xcb_window_t window, xcb_atom_t property, xcb_atom_t type);
92 virtual ::e_status _change_window_property(xcb_window_t window, xcb_atom_t property, xcb_atom_t type, ::i32 mode, ::i32 format, ::i32 nelements, const void * data);
93
94
95
96 virtual xcb_window_t _get_active_window();
97
98
99
100 ::e_status _select_input(xcb_window_t window, ::i32 iInput);
101
102
103 //void wait_timer_or_event();
104
105 static display * get(::particle * pparticle, bool bBranch = true, void * pX11Display = nullptr, void * pXcbConnection = nullptr);
106
107 bool message_loop_step();
108 void message_loop();
109
110 void init_task() override;
111
112 void run() override;
113
114
115 bool is_branch_current() const override;
116
117
118 void add_listener(event_listener * plistener);
119 void add_window(micro::interchange * pwindow);
120
121 void erase_listener(event_listener * plistener);
122 void erase_window(micro::interchange * pwindow);
123
124 bool _on_event(xcb_generic_event_t * pevent) override;
125
126 virtual bool xcb_event(xcb_generic_event_t * pevent);
127
128 virtual bool xcb_posted();
129
130 //void aaa_display_post(const ::procedure & procedure) override;
131 //void aaa_display_send(const ::procedure & procedure);
132 //bool aaa_display_posted_routine_step();
133
134
135 virtual ::e_status _request_check(xcb_void_cookie_t cookie);
136
137
138 ::e_status _send_client_event(xcb_window_t window1, xcb_window_t window2, xcb_atom_t atom, ::u32 numArgs, ...);
139
140 ::e_status _send_client_event_v(xcb_window_t window1, xcb_window_t window2, xcb_atom_t atom, ::u32 numArgs, va_list argList);
141
142
143 virtual ::e_status _set_active_window(xcb_window_t window);
144
145
146 virtual ::e_status _map_window(xcb_window_t window);
147 virtual ::e_status _unmap_window(xcb_window_t window);
148 virtual ::e_status _raise_window(xcb_window_t window);
149 virtual ::e_status _lower_window(xcb_window_t window);
150
151
152 virtual comparable_array < xcb_atom_t > _list_atom(xcb_window_t window, xcb_atom_t atomList);
153 virtual bool _has_net_wm_state(xcb_window_t window, xcb_atom_t propertyItem);
154 virtual bool _list_has_atom(xcb_window_t window, xcb_atom_t propertyList, xcb_atom_t propertyItem);
155 virtual ::e_status _list_add_atom(xcb_window_t window, xcb_atom_t atomList, xcb_atom_t atomFlag);
156 virtual ::e_status _list_erase_atom(xcb_window_t window, xcb_atom_t atomList, xcb_atom_t atomFlag);
157
158 virtual ::e_status _clear_net_wm_state(xcb_window_t window);
159
160 virtual ::e_status _add_net_wm_state_below(xcb_window_t window);
161 virtual ::e_status _add_net_wm_state_above(xcb_window_t window);
162 virtual ::e_status _add_net_wm_state_hidden(xcb_window_t window);
163 virtual ::e_status _add_net_wm_state(xcb_window_t window, ::x11::enum_atom eatomNetWmState);
164 virtual ::e_status _mapped_add_net_wm_state(xcb_window_t window, ::x11::enum_atom eatomNetWmState);
165 virtual ::e_status _unmapped_add_net_wm_state(xcb_window_t window, ::x11::enum_atom eatomNetWmState);
166
167 virtual ::e_status _erase_net_wm_state_below(xcb_window_t window);
168 virtual ::e_status _erase_net_wm_state_above(xcb_window_t window);
169 virtual ::e_status _erase_net_wm_state_hidden(xcb_window_t window);
170 virtual ::e_status _erase_net_wm_state(xcb_window_t window, ::x11::enum_atom eatomNetWmState);
171 virtual ::e_status _mapped_erase_net_wm_state(xcb_window_t window, ::x11::enum_atom eatomNetWmState);
172 virtual ::e_status _unmapped_erase_net_wm_state(xcb_window_t window, ::x11::enum_atom eatomNetWmState);
173
174
175
176 virtual ::e_status _destroy_window(xcb_window_t window);
177
178
179 virtual ::e_status _move_window(xcb_window_t window, ::i32 x, ::i32 y);
180
181
182 virtual ::e_status _set_mouse_capture(xcb_window_t window);
183 virtual ::e_status _release_mouse_capture();
184
185
186 virtual ::e_status _get_window_attributes(xcb_get_window_attributes_reply_t * pattributes, xcb_window_t window);
187 virtual ::e_status _get_window_geometry(xcb_get_geometry_reply_t * pgeometry, xcb_window_t window);
188
189
190 virtual ::e_status _set_nodecorations(xcb_window_t window, ::i32 bMap);
191
192
193 void kick_idle() override;
194
195
196 ::i32_size get_main_screen_size() override;
197
198
199 };
200 } // namespace user
201} // namespace nano
202
203} // namespace xcb
204
205
206
Definition display.h:19
Definition atom.h:237
Definition e_status.h:30
Definition event_listener.h:16
virtual::e_status _set_nodecorations(xcb_window_t window, ::i32 bMap)
must be run in x11 thread (user thread)
Definition display.cpp:1909
virtual::e_status _erase_net_wm_state_above(xcb_window_t window)
must be run in x11 thread (user thread)
Definition display.cpp:1673
virtual::e_status _erase_net_wm_state_hidden(xcb_window_t window)
must be run in x11 thread (user thread)
Definition display.cpp:1691
virtual::e_status _unmapped_add_net_wm_state(xcb_window_t window, ::x11::enum_atom eatomNetWmState)
must be run in x11 thread (user thread)
Definition display.cpp:1612
virtual::e_status _clear_net_wm_state(xcb_window_t window)
must be run in x11 thread (user thread)
Definition display.cpp:1433
virtual::e_status _add_net_wm_state_above(xcb_window_t window)
must be run in x11 thread (user thread)
Definition display.cpp:1477
virtual::e_status _mapped_add_net_wm_state(xcb_window_t window, ::x11::enum_atom eatomNetWmState)
must be run in x11 thread (user thread)
Definition display.cpp:1555
virtual::e_status _add_net_wm_state_below(xcb_window_t window)
must be run in x11 thread (user thread)
Definition display.cpp:1455
virtual::e_status _add_net_wm_state(xcb_window_t window, ::x11::enum_atom eatomNetWmState)
must be run in x11 thread (user thread)
Definition display.cpp:1521
virtual::e_status _erase_net_wm_state_below(xcb_window_t window)
must be run in x11 thread (user thread)
Definition display.cpp:1655
virtual::e_status _add_net_wm_state_hidden(xcb_window_t window)
must be run in x11 thread (user thread)
Definition display.cpp:1499
Definition window.h:24