GTK: Eliminate direct references to gdk event struct members in prep for moving to GTK4.
This commit is contained in:
parent
0d26ca17f7
commit
e7c0c1665f
@ -517,8 +517,12 @@ protected:
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool on_motion_notify_event(GdkEventMotion *gdk_event) override {
|
bool on_motion_notify_event(GdkEventMotion *gdk_event) override {
|
||||||
if(process_pointer_event(MouseEvent::Type::MOTION,
|
double x,y;
|
||||||
gdk_event->x, gdk_event->y, gdk_event->state))
|
GdkModifierType state;
|
||||||
|
gdk_event_get_coords((GdkEvent*)gdk_event, &x, &y);
|
||||||
|
gdk_event_get_state((GdkEvent*)gdk_event, &state);
|
||||||
|
|
||||||
|
if(process_pointer_event(MouseEvent::Type::MOTION, x, y, state))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
return Gtk::GLArea::on_motion_notify_event(gdk_event);
|
return Gtk::GLArea::on_motion_notify_event(gdk_event);
|
||||||
@ -526,51 +530,79 @@ protected:
|
|||||||
|
|
||||||
bool on_button_press_event(GdkEventButton *gdk_event) override {
|
bool on_button_press_event(GdkEventButton *gdk_event) override {
|
||||||
MouseEvent::Type type;
|
MouseEvent::Type type;
|
||||||
if(gdk_event->type == GDK_BUTTON_PRESS) {
|
GdkEventType gdk_type;
|
||||||
|
gdk_type = gdk_event_get_event_type((GdkEvent*)gdk_event);
|
||||||
|
|
||||||
|
if(gdk_type == GDK_BUTTON_PRESS) {
|
||||||
type = MouseEvent::Type::PRESS;
|
type = MouseEvent::Type::PRESS;
|
||||||
} else if(gdk_event->type == GDK_2BUTTON_PRESS) {
|
} else if(gdk_type == GDK_2BUTTON_PRESS) {
|
||||||
type = MouseEvent::Type::DBL_PRESS;
|
type = MouseEvent::Type::DBL_PRESS;
|
||||||
} else {
|
} else {
|
||||||
return Gtk::GLArea::on_button_press_event(gdk_event);
|
return Gtk::GLArea::on_button_press_event(gdk_event);
|
||||||
}
|
}
|
||||||
|
double x,y;
|
||||||
|
gdk_event_get_coords((GdkEvent*)gdk_event, &x, &y);
|
||||||
|
GdkModifierType state;
|
||||||
|
gdk_event_get_state((GdkEvent*)gdk_event, &state);
|
||||||
|
guint button;
|
||||||
|
gdk_event_get_button((GdkEvent*)gdk_event, &button);
|
||||||
|
|
||||||
if(process_pointer_event(type, gdk_event->x, gdk_event->y,
|
if(process_pointer_event(type, x, y, state, button))
|
||||||
gdk_event->state, gdk_event->button))
|
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
return Gtk::GLArea::on_button_press_event(gdk_event);
|
return Gtk::GLArea::on_button_press_event(gdk_event);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool on_button_release_event(GdkEventButton *gdk_event) override {
|
bool on_button_release_event(GdkEventButton *gdk_event) override {
|
||||||
if(process_pointer_event(MouseEvent::Type::RELEASE,
|
double x,y;
|
||||||
gdk_event->x, gdk_event->y,
|
gdk_event_get_coords((GdkEvent*)gdk_event, &x, &y);
|
||||||
gdk_event->state, gdk_event->button))
|
GdkModifierType state;
|
||||||
|
gdk_event_get_state((GdkEvent*)gdk_event, &state);
|
||||||
|
guint button;
|
||||||
|
gdk_event_get_button((GdkEvent*)gdk_event, &button);
|
||||||
|
if(process_pointer_event(MouseEvent::Type::RELEASE, x, y, state, button))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
return Gtk::GLArea::on_button_release_event(gdk_event);
|
return Gtk::GLArea::on_button_release_event(gdk_event);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool on_scroll_event(GdkEventScroll *gdk_event) override {
|
bool on_scroll_event(GdkEventScroll *gdk_event) override {
|
||||||
|
double dx, dy;
|
||||||
|
GdkScrollDirection dir;
|
||||||
|
// for gtk4 ??
|
||||||
|
// gdk_scroll_event_get_deltas((GdkEvent*)gdk_event, &dx, &dy);
|
||||||
|
// gdk_scroll_event_get_direction((GdkEvent*)gdk_event, &dir);
|
||||||
|
gdk_event_get_scroll_direction((GdkEvent*)gdk_event, &dir);
|
||||||
|
gdk_event_get_scroll_deltas((GdkEvent*)gdk_event, &dx, &dy);
|
||||||
|
|
||||||
double delta;
|
double delta;
|
||||||
if(gdk_event->delta_y < 0 || gdk_event->direction == GDK_SCROLL_UP) {
|
if(dy < 0 || dir == GDK_SCROLL_UP) {
|
||||||
delta = 1;
|
delta = 1;
|
||||||
} else if(gdk_event->delta_y > 0 || gdk_event->direction == GDK_SCROLL_DOWN) {
|
} else if(dy > 0 || dir == GDK_SCROLL_DOWN) {
|
||||||
delta = -1;
|
delta = -1;
|
||||||
} else {
|
} else {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
double x,y;
|
||||||
|
gdk_event_get_coords((GdkEvent*)gdk_event, &x, &y);
|
||||||
|
GdkModifierType state;
|
||||||
|
gdk_event_get_state((GdkEvent*)gdk_event, &state);
|
||||||
|
|
||||||
if(process_pointer_event(MouseEvent::Type::SCROLL_VERT,
|
if(process_pointer_event(MouseEvent::Type::SCROLL_VERT,
|
||||||
gdk_event->x, gdk_event->y,
|
x, y, state, 0, delta))
|
||||||
gdk_event->state, 0, delta))
|
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
return Gtk::GLArea::on_scroll_event(gdk_event);
|
return Gtk::GLArea::on_scroll_event(gdk_event);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool on_leave_notify_event(GdkEventCrossing *gdk_event) override {
|
bool on_leave_notify_event(GdkEventCrossing *gdk_event) override {
|
||||||
if(process_pointer_event(MouseEvent::Type::LEAVE,
|
double x,y;
|
||||||
gdk_event->x, gdk_event->y, gdk_event->state))
|
gdk_event_get_coords((GdkEvent*)gdk_event, &x, &y);
|
||||||
|
GdkModifierType state;
|
||||||
|
gdk_event_get_state((GdkEvent*)gdk_event, &state);
|
||||||
|
|
||||||
|
if(process_pointer_event(MouseEvent::Type::LEAVE, x, y, state))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
return Gtk::GLArea::on_leave_notify_event(gdk_event);
|
return Gtk::GLArea::on_leave_notify_event(gdk_event);
|
||||||
@ -580,22 +612,28 @@ protected:
|
|||||||
KeyboardEvent event = {};
|
KeyboardEvent event = {};
|
||||||
event.type = type;
|
event.type = type;
|
||||||
|
|
||||||
|
GdkModifierType state;
|
||||||
|
gdk_event_get_state((GdkEvent*)gdk_event, &state);
|
||||||
|
|
||||||
Gdk::ModifierType mod_mask = get_modifier_mask(Gdk::MODIFIER_INTENT_DEFAULT_MOD_MASK);
|
Gdk::ModifierType mod_mask = get_modifier_mask(Gdk::MODIFIER_INTENT_DEFAULT_MOD_MASK);
|
||||||
if((gdk_event->state & mod_mask) & ~(GDK_SHIFT_MASK|GDK_CONTROL_MASK)) {
|
if((state & mod_mask) & ~(GDK_SHIFT_MASK|GDK_CONTROL_MASK)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
event.shiftDown = (gdk_event->state & GDK_SHIFT_MASK) != 0;
|
event.shiftDown = (state & GDK_SHIFT_MASK) != 0;
|
||||||
event.controlDown = (gdk_event->state & GDK_CONTROL_MASK) != 0;
|
event.controlDown = (state & GDK_CONTROL_MASK) != 0;
|
||||||
|
|
||||||
char32_t chr = gdk_keyval_to_unicode(gdk_keyval_to_lower(gdk_event->keyval));
|
guint keyval;
|
||||||
|
gdk_event_get_keyval((GdkEvent*)gdk_event, &keyval);
|
||||||
|
|
||||||
|
char32_t chr = gdk_keyval_to_unicode(gdk_keyval_to_lower(keyval));
|
||||||
if(chr != 0) {
|
if(chr != 0) {
|
||||||
event.key = KeyboardEvent::Key::CHARACTER;
|
event.key = KeyboardEvent::Key::CHARACTER;
|
||||||
event.chr = chr;
|
event.chr = chr;
|
||||||
} else if(gdk_event->keyval >= GDK_KEY_F1 &&
|
} else if(keyval >= GDK_KEY_F1 &&
|
||||||
gdk_event->keyval <= GDK_KEY_F12) {
|
keyval <= GDK_KEY_F12) {
|
||||||
event.key = KeyboardEvent::Key::FUNCTION;
|
event.key = KeyboardEvent::Key::FUNCTION;
|
||||||
event.num = gdk_event->keyval - GDK_KEY_F1 + 1;
|
event.num = keyval - GDK_KEY_F1 + 1;
|
||||||
} else {
|
} else {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -697,8 +735,11 @@ public:
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
bool on_key_press_event(GdkEventKey *gdk_event) override {
|
bool on_key_press_event(GdkEventKey *gdk_event) override {
|
||||||
|
guint keyval;
|
||||||
|
gdk_event_get_keyval((GdkEvent*)gdk_event, &keyval);
|
||||||
|
|
||||||
if(is_editing()) {
|
if(is_editing()) {
|
||||||
if(gdk_event->keyval == GDK_KEY_Escape) {
|
if(keyval == GDK_KEY_Escape) {
|
||||||
return _gl_widget.event((GdkEvent *)gdk_event);
|
return _gl_widget.event((GdkEvent *)gdk_event);
|
||||||
} else {
|
} else {
|
||||||
_entry.event((GdkEvent *)gdk_event);
|
_entry.event((GdkEvent *)gdk_event);
|
||||||
@ -841,7 +882,11 @@ protected:
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool on_window_state_event(GdkEventWindowState *gdk_event) override {
|
bool on_window_state_event(GdkEventWindowState *gdk_event) override {
|
||||||
_is_fullscreen = gdk_event->new_window_state & GDK_WINDOW_STATE_FULLSCREEN;
|
// window state event is superseded by GdkWindow::state on GTK4
|
||||||
|
GdkWindowState new_window_state;
|
||||||
|
new_window_state = gdk_event->new_window_state;
|
||||||
|
|
||||||
|
_is_fullscreen = new_window_state & GDK_WINDOW_STATE_FULLSCREEN;
|
||||||
if(_receiver->onFullScreen) {
|
if(_receiver->onFullScreen) {
|
||||||
_receiver->onFullScreen(_is_fullscreen);
|
_receiver->onFullScreen(_is_fullscreen);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user