dw_gui: Applied new findings on Key and Mouse callbacks

This commit is contained in:
korenkonder
2026-02-17 00:52:01 +03:00
parent 14073e37d1
commit 475d2000aa
7 changed files with 359 additions and 297 deletions
+284 -276
View File
File diff suppressed because it is too large Load Diff
+53 -15
View File
@@ -41,6 +41,42 @@ namespace dw {
FLAG_1000000 = 0x1000000,
};
enum InputState {
INPUT_STATE_ALT = 0x10000,
INPUT_STATE_SHIFT = 0x20000,
INPUT_STATE_CTRL = 0x40000,
};
enum MouseInput {
MOUSE_INPUT_DOWN_LEFT = 0x00000001,
MOUSE_INPUT_DOWN_MIDDLE = 0x00000002,
MOUSE_INPUT_DOWN_RIGHT = 0x00000004,
MOUSE_INPUT_TAP_LEFT = 0x00000010,
MOUSE_INPUT_TAP_MIDDLE = 0x00000020,
MOUSE_INPUT_TAP_RIGHT = 0x00000040,
MOUSE_INPUT_RELEASE_LEFT = 0x00000100,
MOUSE_INPUT_RELEASE_MIDDLE = 0x00000200,
MOUSE_INPUT_RELEASE_RIGHT = 0x00000400,
MOUSE_INPUT_DBL_TAP_LEFT = 0x00001000,
MOUSE_INPUT_DBL_TAP_MIDDLE = 0x00002000,
MOUSE_INPUT_DBL_TAP_RIGHT = 0x00004000,
MOUSE_INPUT_100000 = 0x00100000,
MOUSE_INPUT_200000 = 0x00200000,
MOUSE_INPUT_INTERVAL_LEFT = 0x01000000,
MOUSE_INPUT_INTERVAL_MIDDLE = 0x02000000,
MOUSE_INPUT_INTERVAL_RIGHT = 0x04000000,
MOUSE_INPUT_20000000 = 0x20000000,
MOUSE_INPUT_MOVE = 0x40000000,
MOUSE_INPUT_DOWN_MASK = 0x0000000F,
MOUSE_INPUT_TAP_MASK = 0x000000F0,
MOUSE_INPUT_RELEASE_MASK = 0x00000F00,
MOUSE_INPUT_DBL_TAP_MASK = 0x0000F000,
MOUSE_INPUT_INTERVAL_MASK = 0x0F000000,
MOUSE_INPUT_CLICK_MASK = ~(MOUSE_INPUT_MOVE | MOUSE_INPUT_20000000),
};
struct Font {
font_info font;
std::string name;
@@ -144,10 +180,11 @@ namespace dw {
struct KeyCallbackData {
Widget* widget;
int32_t modifier;
int8_t field_C;
int8_t field_D;
int32_t input[2];
InputState state;
uint8_t field_C;
uint8_t char_input;
int32_t key_input;
int32_t joy_input;
KeyCallbackData();
};
@@ -155,8 +192,8 @@ namespace dw {
struct MouseCallbackData {
Widget* widget;
vec2 pos;
int32_t input;
int32_t modifier;
MouseInput input;
InputState state;
MouseCallbackData();
};
@@ -222,6 +259,7 @@ namespace dw {
class Composite;
class Shell;
class Menu;
class MenuItem;
class Control : public Widget {
public:
@@ -389,10 +427,10 @@ namespace dw {
MouseListener();
virtual ~MouseListener();
virtual void Field_8(const Widget::MouseCallbackData& data) = 0;
virtual void Field_10(const Widget::MouseCallbackData& data) = 0;
virtual void Field_18(const Widget::MouseCallbackData& data) = 0;
virtual void Field_20(const Widget::MouseCallbackData& data) = 0;
virtual void OnDoubleTap(const Widget::MouseCallbackData& data) = 0;
virtual void OnTap(const Widget::MouseCallbackData& data) = 0;
virtual void OnInterval(const Widget::MouseCallbackData& data) = 0;
virtual void OnRelease(const Widget::MouseCallbackData& data) = 0;
};
class MouseAdapter : public MouseListener {
@@ -400,10 +438,10 @@ namespace dw {
MouseAdapter();
virtual ~MouseAdapter() override;
virtual void Field_8(const Widget::MouseCallbackData& data) override;
virtual void Field_10(const Widget::MouseCallbackData& data) override;
virtual void Field_18(const Widget::MouseCallbackData& data) override;
virtual void Field_20(const Widget::MouseCallbackData& data) override;
virtual void OnDoubleTap(const Widget::MouseCallbackData& data) override;
virtual void OnTap(const Widget::MouseCallbackData& data) override;
virtual void OnInterval(const Widget::MouseCallbackData& data) override;
virtual void OnRelease(const Widget::MouseCallbackData& data) override;
};
class MouseMoveListener {
@@ -411,7 +449,7 @@ namespace dw {
MouseMoveListener();
virtual ~MouseMoveListener();
virtual void Field_8(const Widget::MouseCallbackData& data) = 0;
virtual void OnMove(const Widget::MouseCallbackData& data) = 0;
};
class Layout {
+1
View File
@@ -7,6 +7,7 @@
#include "../../CRE/light_param/fog.hpp"
#include "../../CRE/light_param.hpp"
#include "../../CRE/render_context.hpp"
#include "../dw.hpp"
extern render_context* rctx_ptr;
-2
View File
@@ -6,7 +6,5 @@
#pragma once
#include "../../KKdLib/default.hpp"
#include "../classes.hpp"
#include "../dw.hpp"
extern void fog_dw_init();
-1
View File
@@ -6,6 +6,5 @@
#pragma once
#include "../../KKdLib/default.hpp"
#include "../classes.hpp"
extern void render_settings_dw_init();
+20 -2
View File
@@ -47,6 +47,19 @@ Bit / Name
40 'B'
...
64 'Z'
66 ???
67 ???
68 ???
69 ???
70 ???
71 ???
72 ???
73 ???
74 ???
75 ???
76 ???
77 ???
80 VK_RETURN
81 VK_SHIFT
@@ -54,6 +67,11 @@ Bit / Name
83 VK_MENU
84 VK_PAUSE (guessed, unsure)
86 ???
87 ???
89 ???
90 ???
91 VK_UP
92 VK_LEFT
93 VK_DOWN
@@ -252,7 +270,7 @@ bool InputState::CheckToggle(int32_t index) const {
return false;
}
bool InputState::GetKey() const {
uint8_t InputState::GetKey() const {
return key;
}
@@ -266,9 +284,9 @@ void InputState::Update(int32_t index, int32_t delta_frame) {
struc_794 v78;
updated = sub_140190A30(&v78, index);
Down |= v78.down;
Tapped |= v78.tapped;
Released |= v78.released;
Down |= v78.down;
if (updated) {
field_80[0] = v78.field_30[0];
+1 -1
View File
@@ -75,7 +75,7 @@ struct InputState {
bool CheckReleased(int32_t index) const;
bool CheckTapped(int32_t index) const;
bool CheckToggle(int32_t index) const;
bool GetKey() const;
uint8_t GetKey() const;
void Update(int32_t index, int32_t delta_frame);
int32_t sub_14018CCC0(int32_t index) const;