マウスオーバー効果の完了

This commit is contained in:
2026-01-22 00:06:09 +09:00
parent dd3be3a555
commit e273c38ade
4 changed files with 21 additions and 2 deletions

View File

@@ -384,6 +384,14 @@ redraw:
control_expose(window, labels, &(SuwaButton){0});
}
void reset_mouse_hover(SuwaWindow *window, CtrlLabels *labels) {
if (!lasthover) return;
lasthover->hovered = 0;
lasthover = NULL;
window->event = (XEvent){.type = Expose};
control_expose(window, labels, &(SuwaButton){0});
}
void handle_mouse_hover(SuwaWindow *window, CtrlLabels *labels, int mx, int my) {
SuwaButton *btn = find_button_at(window, mx, my);
if (!btn) return;

View File

@@ -47,4 +47,5 @@ void control_expose(SuwaWindow *window, CtrlLabels *labels, SuwaButton *button);
void handle_button_press(SuwaWindow *window, CtrlLabels *labels, int mx, int my);
void handle_button_release(SuwaWindow *window, CtrlLabels *labels, int mx, int my);
void handle_key_press(SuwaWindow *window, CtrlLabels *labels);
void reset_mouse_hover(SuwaWindow *window, CtrlLabels *labels);
void handle_mouse_hover(SuwaWindow *window, CtrlLabels *labels, int mx, int my);

View File

@@ -334,6 +334,8 @@ __attribute__((unused)) static SuwaWindow suwaui_create_window(int x, int y, int
| KeyPressMask
| PointerMotionMask
| Button1MotionMask
| EnterWindowMask
| LeaveWindowMask
// | StructureNotifyMask
);

10
main.c
View File

@@ -113,7 +113,10 @@ int main() {
case MotionNotify:
Time now = window.event.xmotion.time;
if (now - lasthovertime < 40) break;
if (now - lasthovertime > 80) {
reset_mouse_hover(&window, &lbl);
lasthovertime = now;
}
Window root, child;
int root_x, root_y,
win_x, win_y;
@@ -121,9 +124,14 @@ int main() {
XQueryPointer(window.display, window.xwindow, &root, &child,
&root_x, &root_y, &win_x, &win_y, &mask);
if (window.event.xmotion.state == 0) break;
if (window.event.xmotion.state == 0) {
break;
}
handle_mouse_hover(&window, &lbl, win_x, win_y);
break;
case LeaveNotify:
reset_mouse_hover(&window, &lbl);
break;
case ClientMessage:
// WM_DELETE_WINDOW
break;