acme
Foundational cross-platform layer of the ca2 framework
Loading...
Searching...
No Matches
interaction.h
1//
2// // Created from micro::interchange by
3// // camilo on 2024-10-05 16:52 <3ThomasBorregaardSorensen!!
4// Created by camilo on 31/01/2022 14:32 <3ThomasBorregaardSorensen!!
5// renamed interchange from interchange by camilo on
6// 2024-09-26 15:37 <3ThomasBorregaardSorensen!!
7//
8// // // Merged from (acme)windowing and (acme)windowing_system by
9// // camilo on 2024-10-05 11:07 <3ThomasBorregaardSorensen!!
10// // (acme)windowing_system::windowing_system
11// // ---->windowing::windowing_base
12// // // ---->micro::user
13// // (acme)windowing::window_base
14// // ---->micro::interchange
15//
16// Child merged into interaction on 2024-10-05 05:15 <3ThomasBorregaardSorensen!!
17// Created by camilo on 2022-01-21 05:10 PM <3ThomasBorregaardSorensen
18//
19
20#pragma once
21
22
23//#include "acme/user/user/interaction_base.h"
24
25
26
27#include "acme/prototype/geometry2d/shift.h"
28#include "acme/user/user/element.h"
29#include "acme/user/user/drag_client.h"
30
31#ifdef WINDOWS_DESKTOP
32#include "acme/operating_system/windows/_window_class.h"
33#endif
34
35
36namespace acme
37{
38
39
40 namespace user
41 {
42
43
44 class CLASS_DECL_ACME interaction :
45 virtual public ::user::element,
46 virtual public ::user::drag_client,
47 virtual public ::source,
48 virtual public ::user::check,
49 virtual public ::user::text
50 {
51 public:
52
53 union
54 {
55 struct
56 {
57 bool m_bChild : 1;
58 bool m_bMessageOnlyWindow : 1;
59 bool m_bHover : 1;
60 bool m_bHasOwnWindow : 1;
61 bool m_bWindowCreated : 1;
62 };
63 ::u32 m_uFlagsAcmeUserInteraction;
64 };
65
66 ::pointer < ::acme::windowing::window > m_pacmewindowingwindow;
67 ::pointer < ::acme::user::interaction > m_pacmeuserinteractionParent;
68 ::pointer < ::acme::user::interaction > m_pacmeuserinteractionOwner;
69 ::pointer <::pointer_array < ::acme::user::interaction >> m_pacmeuserinteractionaChildren;
70 ::pointer <::pointer_array < ::acme::user::interaction >> m_pacmeuserinteractionaChildrenToDestroy;
71
76 //::pointer<::acme::timer_array> m_ptimerarray;
77
78 bool m_bDefaultNcHitTest;
79 bool m_bNanoPaint;
80
81#ifdef WINDOWS_DESKTOP
82// ::i32 m_iStyle;
83// ::i32 m_iExStyle;
84 void * m_pHICON_Big;
85 void * m_pHICON_Small;
86 ::windows::window_class m_windowclassThis;
87#endif
88
89 //bool m_bMinimizeBox;
90 //bool m_bMaximizeBox;
91 //bool m_bResizeable;
92 //bool m_bTopMost;
93 //bool m_bStartCentered;
94 //bool m_bArbitraryPositioning;
95
96
97
98
99
100
101 interaction();
102 interaction(const interaction &) = delete;
103 ~interaction();
104
105 //::payload do_synchronously(const class time & timeWait = ::time::infinity()) override;
106 //void do_asynchronously() override;
107
108
109 //virtual ::micro::theme * nano_user_theme();
110
111 //virtual enum_font nano_user_font();
112
113 void create_window() override;
114
115 void _create_window() override;
116
117 virtual void create_window_object();
118
119 virtual void on_create_window_object();
120
121 virtual void set_window(::acme::windowing::window * pwindow);
122
123 void destroy_window() override;
124
125 virtual void set_children_to_destroy_unlocked();
126
127 bool is_host_top_level() override;
128
129 virtual bool is_window();
130
131 virtual void on_dialog_result(const ::payload & payloadResult);
132
133 virtual ::i32_rectangle initial_frame_rectangle();
134
135 //virtual void set_timer(uptr uEvent, const class ::time& millisElapse, const ::procedure& procedure = {}, bool bPeriodic = true);
136 //virtual void kill_timer(uptr uEvent);
137
138
139 //virtual class ::timer_task *procedure_timer();
140
141 //virtual void add_timer(::i32 iTimer, const class ::time & time, const ::procedure_timer_callback & callback = {}, ::timer_task * ptimer = nullptr);
142 //virtual void erase_timer(::i32 iTimer);
143
144 virtual ::i64 get_style_for_creating_window();
145 virtual ::i64 get_ex_style_for_creating_window();
146
147 virtual bool on_add_child(::acme::user::interaction * pacmeuserinteractionChild);
148
149
150 virtual ::micro::theme * micro_theme();
151
152#ifdef WINDOWS_DESKTOP
153
154 virtual bool _on_window_procedure(::lresult & lresult, ::u32 message, ::wparam wparam, ::lparam lparam);
155 virtual ::windows::window_class _get_window_class();
156
157#endif
158 //void show_window() override;
159
160 //void hide_window() override;
161
162 //void message_loop() override;
163
164 //void draw(::nano::graphics::context * pnanodevice) override;
165
166 //void on_draw(::nano::graphics::context * pnanodevice) override;
167
168 //void draw(::nano::graphics::context * pnanodevice);
169
170 virtual void _on_draw(::nano::graphics::context * pnanodevice);
171
172 virtual void on_window_paint(::nano::graphics::context * pgraphicscontext);
173
174 //virtual void on_char(::i32 iChar);
175
176 //bool is_active() override;
177 //void set_active() override;
178
179 //virtual void draw_children(::nano::graphics::context * pnanodevice);
180
181 //void delete_drawing_objects() override;
182 //bool get_dark_mode() override;
183
184 //void create_drawing_objects() override;
185 //void update_drawing_objects() override;
186
187 //::i32_point try_absolute_mouse_position(const ::i32_point & point) override;
188
189
190 virtual ::i32_point origin();
191
192 //virtual ::payload get_result();
193
194 //void on_mouse_move(::user::mouse * pmouse) override;
195 //void on_left_button_down(::user::mouse * pmouse) override;
196 //void on_left_button_up(::user::mouse * pmouse) override;
197 //void on_click(const ::payload & payload, ::user::mouse * pmouse) override;
198 //void on_right_button_down(::user::mouse * pmouse) override;
199 //void on_right_button_up(::user::mouse * pmouse) override;
200 //void on_right_click(const ::payload & payload, ::user::mouse * pmouse) override;
201
202 //::micro::child * hit_test(::user::mouse * pmouse, ::user::e_zorder ezorder) override;
203 //virtual ::acme::user::interaction * hit_test(::user::mouse * pmouse, ::user::e_zorder ezorder);
204 //virtual ::acme::user::interaction * on_hit_test(const ::i32_point & point, ::user::e_zorder ezorder);
205 //virtual void add_child(::acme::user::interaction * pchild);
206 //virtual ::acme::user::interaction * get_child_by_id(const ::atom & atom);
207
208 virtual ::acme::user::interaction * acme_hit_test(::user::mouse * pmouse, ::user::e_zorder ezorder);
209 virtual ::acme::user::interaction * on_acme_hit_test(const ::i32_point & point, ::user::e_zorder ezorder);
210
211 virtual ::i32_rectangle get_client_rectangle();
212 virtual ::i32_size get_window_minimum_size();
213
214
217 //virtual void on_draw(::nano::graphics::context * pnanodevice);
218 //virtual void on_char(::i32 iChar);
219 virtual void set_keyboard_focus() override;
220 virtual bool is_keyboard_focusable();
221 virtual bool has_keyboard_focus();
222 //virtual void on_mouse_move(::user::mouse * pmouse);
223 void set_mouse_capture() override;
224 bool is_mouse_captured() override;
225 bool has_mouse_capture() override;
226 void release_mouse_capture() override;
227
228
229 virtual bool on_window_mouse_move(const ::i32_point & point, const ::i32_point & pointAbsolute);
230
231 virtual void on_mouse_enter();
232 virtual void back_on_mouse_move(::user::mouse * pmouse);
233 virtual void fore_on_mouse_move(::user::mouse * pmouse);
234 virtual void on_mouse_leave();
235
236
237 //virtual void discard_all_cursor_rectangles();
238 //virtual void add_cursor_rectangle(const ::i32_rectangle & rectangle, ::enum_cursor ecursor);
239 //virtual void on_set_cursor_rectangles();
240 //virtual void invalidate_cursor_rectangles();
241
242 //virtual void resize_to_fit();
243
244
245 //virtual void display_temporary_file_with_text(const ::scoped_string & scopedstr);
246
247 //
248// Created by camilo on 2024-09-26 18:50 Odense Time <3ThomasBorregaardSorensen!!
249//
250// micro::window_interface Created by camilo on 31/01/2022 22:37 <3ThomasBorregaardSorensen!!
251// From micro::window_interface merged at ::acme::user::interaction by
252// camilo on 2024-0926 15:01 <3ThomasBorregaardSorensen!!
253//
254//#pragma once
255
256
257 //namespace operating_system
258 //{
259
260
261 // class a_system_menu_item;
262 // class a_system_menu;
263
264
265 //} // namespace operating_system
266
267
268
269 //namespace user
270 //{
271
272
273 // class CLASS_DECL_ACME interaction_base :
274 // /* virtual public ::user::element,
275 // virtual public ::user::drag_client,
276 // virtual public ::conversation_message,
277 // virtual public ::source,
278 // virtual public ::user::check,
279 // virtual public ::user::text*/
280 // {
281
282 // public:
283
284 /* bool m_bMinimizeBox;
285 bool m_bMaximizeBox;
286 bool m_bResizeable;
287 bool m_bTopMost;
288 bool m_bStartCentered;
289 bool m_bArbitraryPositioning;
290
291
292 ::pointer < ::acme::windowing::window > m_pnanowindowingwindow;
293 ::pointer < ::acme::user::interaction > m_pacmeuserinteractionParent;
294*/
295
296 // interaction_base();
297 /* ~interaction_base() override;*/
298
299 virtual ::pointer < ::operating_system::a_system_menu > create_system_menu(bool bContextual = true);
300
301
302 void handle(::topic * ptopic, ::handler_context * phandlercontext) override;
303
304
306 //void do_asynchronously() override;
307 //::payload do_synchronously(const class time & timeWait) override;
308
309
310 virtual bool is_child_interaction();
311
312 ::acme::user::interaction * acme_user_interaction() override;
313 ::acme::windowing::window * acme_windowing_window() override;
314 ::operating_system::window operating_system_window() override;
315
316 virtual ::acme::user::interaction * acme_user_parent();
317
318 ::acme::windowing::window * owner_window();
319
320
321 //virtual ::collection::count nano_user_button_count();
322 //virtual ::micro::button * nano_user_button_at(::collection::index i);
323
324
325
326
327 // //
328 // // Created by camilo on 31/01/2022 22:37 <3ThomasBorregaardSorensen!!
329 // //
330 // #pragma once
331 //
332 //
333 // //#include "acme/prototype/geometry2d/_geometry2d.h"
334 // ////#include "acme/prototype/prototype/object.h"
335 // ///
336 // #include "acme/prototype/geometry2d/shift.h"
337 // #include "acme/user/user/element.h"
338 // #include "user/user/interaction_base.h"
339 //
340 //
341 // namespace nano
342 // {
343 //
344 //
345 // namespace user
346 // {
347 //
348 //
349 // class CLASS_DECL_ACME window_interface :
350 // virtual public ::acme::user::interaction
351 // {
352 // public:
353
354
355 void on_initialize_particle() override;
356
357 //virtual void create_window();
358
359 //virtual void show();
360
361 //void hide() override;
362
363 //virtual void message_loop();
364
365 virtual void implementation_message_loop_step();
366
367 //virtual void draw(::nano::graphics::context * pnanodevice);
368
369 //virtual void on_draw(::nano::graphics::context * pnanodevice);
370
371 //virtual void on_char(::i32 iChar);
372
373 //virtual bool is_active();
374 //virtual void set_active();
375
376 //virtual void draw_children(::nano::graphics::context * pnanodevice);
377
378 //virtual void delete_drawing_objects();
379 //virtual bool get_dark_mode();
380
381 //virtual void create_drawing_objects();
382 //virtual void update_drawing_objects();
383
384 //virtual ::i32_point origin();
385
386 //virtual bool defer_perform_entire_reposition_process();
387
388
389 // virtual ::pointer < ::operating_system::a_system_menu > create_system_menu();
390 //
391 // //bool defer_perform_entire_reposition_process(::user::mouse * pmouse) override;
392 //
393 // //bool defer_perform_entire_resizing_process(::experience::enum_frame eframeSizing, ::user::mouse * pmouse) override;
394 //
395 // virtual bool defer_perform_entire_reposition_process(::user::mouse * pmouse);
396 //
397 // virtual bool defer_perform_entire_resizing_process(::experience::enum_frame eframeSizing, ::user::mouse * pmouse);
398
399
400 virtual ::shift_int host_to_client();
401 virtual ::shift_int client_to_host();
402
403 virtual ::shift_int absolute_to_client();
404 virtual ::shift_int client_to_absolute();
405
406 //virtual ::i32_point try_absolute_mouse_position(const ::i32_point & point);
407
408 // drag_client
409 void drag_set_capture() override;
410 bool on_drag_start(::i32_point & point, ::user::mouse * pmouse, ::item * pitem) override;
411 ::i32_point drag_mouse_cursor_position(::item * pitem, const ::i32_point & point) override;
412 bool drag_shift(::item * pitem, ::user::mouse * pmouse) override;
413 bool drag_hover(::item * pitem) override;
414 void drag_release_capture() override;
415 void drag_set_cursor(::item * pitem, ::user::mouse * pmouse) override;
416
417
418 // virtual ::micro::child * nano_user_hit_test(::user::mouse * pmouse, ::user::e_zorder ezorder);
419 // virtual ::micro::child * nano_user_on_hit_test(const ::i32_point & point, ::user::e_zorder ezorder);
420 // virtual void nano_user_add_child(::micro::child * pchild);
421
422 //virtual ::payload get_result();
423 //void add_button(const ::scoped_string & scopedstrText, enum_dialog_result edialogresult, ::i8 chLetter);
424
425 void display(::e_display edisplay, const ::user::activation& useractivation) override;
426
427 virtual void display_temporary_file_with_text(const ::scoped_string & scopedstr);
428
429 //virtual void on_mouse_move(::user::mouse * pmouse);
430 //virtual void on_left_button_down(::user::mouse * pmouse);
431 //virtual void on_left_button_up(::user::mouse * pmouse);
432 //virtual void on_click(const ::payload & payload, ::user::mouse * pmouse);
433 //virtual void on_right_button_down(::user::mouse * pmouse);
434 //virtual void on_right_button_up(::user::mouse * pmouse);
435 //virtual void on_right_click(const ::payload & payload, ::user::mouse * pmouse);
436
437
438 //virtual LRESULT window_procedure(UINT message, WPARAM wparam, LPARAM lparam);
439
440 void set_position(const ::i32_point & point) override;
441
442 void destroy() override;
443
444 void post_redraw(bool bAscendants = true) override;
445
446 void redraw() override;
447
448 //virtual void get_client_rectangle(::i32_rectangle & rectangle);
449 ::i32_rectangle get_window_rectangle() override;
450
451 ::i32_rectangle get_rectangle() override;
452
453 //void set_mouse_capture() override;
454
455 //bool has_mouse_capture() override;
456
457 //void release_mouse_capture() override;
458
459 void set_cursor(enum_cursor ecursor) override;
460
461 virtual void synchronize_composited_nano_window();
462
463 //void run_modal_loop() override;
464
465 virtual bool is_popup_window() const;
466
467
468 // Text Edit
469 void get_text_selection(character_count & iBeg, character_count & iEnd) const override;
470 virtual void get_text_selection(character_count & iBeg, character_count & iEnd, character_count & iComposingStart, character_count & iComposingEnd) const;
471 virtual ::collection::index plain_edit_sel_to_column(::draw2d::graphics_pointer & pgraphics, character_count iSel);
472 virtual ::collection::index plain_edit_sel_to_column_x(::draw2d::graphics_pointer & pgraphics, character_count iSel, ::i32 & x);
473 virtual ::collection::index plain_edit_sel_to_line(::draw2d::graphics_pointer & pgraphics, character_count iSel);
474 virtual ::collection::index plain_edit_sel_to_line_x(::draw2d::graphics_pointer & pgraphics, character_count iSel, ::i32 & x);
475 virtual character_count plain_edit_line_column_to_sel(::draw2d::graphics_pointer & pgraphics, ::collection::index iLine, ::collection::index iColumn);
476 virtual character_count plain_edit_line_x_to_sel(::draw2d::graphics_pointer & pgraphics, ::collection::index iLine, ::i32 x);
477 virtual ::collection::index plain_edit_char_to_line(::draw2d::graphics_pointer & pgraphics, character_count iSel);
478
479
480 ::trace_statement & raw_trace_statement_prefix(::trace_statement & statement) const override;
481
482 //virtual void create_interaction(::user::interaction * puserinteractionParent, const ::atom & atom = nullptr);
483
484
485 //virtual void create_control(::user::interaction * puserinteractionParent, const ::atom & atom);
486
487
488 //virtual void on_position_window();
489 //virtual void on_size_window();
490
491 bool is_window_zoomed() override;
492 //void window_minimize() override;
493 //void window_maximize() override; // m_pwindow->m_puserinteraction->display(::e_display_zoomed);
494 //void window_full_screen() override; // m_pwindow->m_puserinteraction->display(::e_display_full_screen);
495 //void window_restore() override; // m_pwindow->m_puserinteraction->display(::e_display_normal);
496 //void window_close() override;
497
498 // void set_mouse_capture() override;
499 // bool is_mouse_captured() override;
500 // bool has_mouse_capture() override;
501 // void release_mouse_capture() override;
502
503
504 void _on_window_simple_action(const_char_pointer pszActionName, ::user::activation_token * puseractivationtoken) override;
505
506
507 //
508 // };
509 //
510 //
511 //
512 //
513 // } // namespace user
514 //
515 //
516 // } // namespace nano
517 //
518 //
519 //
520
521 // };
522
523
524 //} // user
525
526 void main_post(const ::procedure & procedure) override;
527
528
529 virtual bool should_use_desktop_ambient_like_control_box() const;
530
531
532 virtual void on_control_box_close();
533 virtual void on_control_box_minimize();
534 virtual void on_control_box_zoom();
535
536
537
538
539
540 void on_window_size(const ::i32_size & size) override;
541 void on_window_set_focus() override;
542 void on_window_show(bool bShow, int iDetail) override;
543 bool on_window_activate(::i32 iActivate, bool bMinimized, const ::operating_system::window & operatingsystemwindow) override;
544 bool on_window_mouse_activate(::i32 & iResult, const ::operating_system::window & operatingsystemwindowTop, ::i32 iHitTest, ::i32 iMessage) override;
545
546
547 bool is_window_visible() override;
548 bool is_window_iconic() override;
549 ::f32 get_window_scale() override;
550
551
552 ::i32_point screen_to_window_client(const ::i32_point & point) override;
553 ::i32_rectangle screen_to_window_client(const ::i32_rectangle & rectangle) override;
554 ::i32_point window_client_to_screen(const ::i32_point & point) override;
555 ::i32_rectangle window_client_to_screen(const ::i32_rectangle & rectangle) override;
556
557 void post_message(::user::enum_message eusermessage, wparam wparam = {}, lparam lparam = {}) override;
558
559 void set_active_window() override;
560 void set_window_text(const ::scoped_string & scopedstrString) override;
561 void set_window_style(::i32 iStyle) override;
562 ::i64 get_window_style() override;
563 void show_window(::i32 iShowFlags) override;
564 void set_window_position(const ::operating_system::window & operatingsystemwindow, const ::i32_point & point, const ::i32_size & size, ::i32 iSetWindowPosFlags) override;
565 void window_invalidate_rect(const ::i32_rectangle * prectangle, bool bErase) override;
566 void update_window() override;
567 void redraw_window(const ::i32_rectangle * prectangle, void * pHRGN, ::i32 iRedrawFlags) override;
568 void window_set_focus() override;
569 void set_foreground_window(::user::activation_token * puseractivationtoken) override;
570 ::i32_rectangle window_get_client_rect() override;
571 ::i32_rectangle get_window_rect() override;
572 bool defer_update_system_menu() override;
573 void dump_operating_system_child_window_hierarchy() override;
574
575
576
577 };
578
579
580 } // namespace user
581
582
583} // namespace acme
584
585
586
Definition acme_message.h:16
Definition interaction.h:50
virtual void set_keyboard_focus() override
Child.
Definition interaction.cpp:120
Definition window.h:50
Definition lparam.h:9
Definition context.h:24
Definition topic.h:17
Definition _window_class.h:11
Definition wparam.h:10
include "aura/graphics/image/context.h"
Definition aaaa__defer.h:32