This commit is contained in:
Nishi 2026-05-02 22:43:54 +09:00
commit ab1dfc2e60
Signed by: nishi
GPG key ID: 27EF69B208EB9343
2 changed files with 30 additions and 2 deletions

View file

@ -219,6 +219,8 @@ struct _MwSubWindow {
int y;
int width;
int height;
MwPoint cursor_start;
MwPoint base;
};
struct _MwMouse {

View file

@ -346,6 +346,17 @@ static MwWidget mwSubWindowGetFrameImpl(MwWidget handle) {
return sw->frame;
}
static void mouse_down(MwWidget handle, void* ptr) {
MwSubWindow sw = handle->internal;
MwMouse* m = ptr;
if(m->button == MwMOUSE_LEFT) {
MwGetCursorCoord(handle, &sw->cursor_start);
sw->base.x = MwGetInteger(handle, MwNx);
sw->base.y = MwGetInteger(handle, MwNy);
}
}
static void func_handler(MwWidget handle, const char* name, void* out, va_list va) {
(void)va;
@ -354,6 +365,21 @@ static void func_handler(MwWidget handle, const char* name, void* out, va_list v
}
}
static void tick(MwWidget handle) {
MwSubWindow sw = handle->internal;
if(handle->pressed) {
MwPoint p;
MwGetCursorCoord(handle, &p);
MwVaApply(handle,
MwNx, sw->base.x + p.x - sw->cursor_start.x,
MwNy, sw->base.y + p.y - sw->cursor_start.y,
NULL);
}
}
MwClassRec MwSubWindowClassRec = {
wcreate, /* create */
destroy, /* destroy */
@ -363,10 +389,10 @@ MwClassRec MwSubWindowClassRec = {
prop_change, /* prop_change */
NULL, /* mouse_move */
NULL, /* mouse_up */
NULL, /* mouse_down */
mouse_down, /* mouse_down */
NULL, /* key */
func_handler, /* execute */
NULL, /* tick */
tick, /* tick */
resize, /* resize */
NULL, /* children_update */
NULL, /* children_prop_change */