diff --git a/ruamoko/qwaq/qwaq-group.h b/ruamoko/qwaq/qwaq-group.h index f9e4bc858..eaa7606eb 100644 --- a/ruamoko/qwaq/qwaq-group.h +++ b/ruamoko/qwaq/qwaq-group.h @@ -20,6 +20,9 @@ -initWithContext: (id) context owner: (View *) owner; -insert: (View *) view; -remove: (View *) view; +-(Rect) rect; +-(Point) origin; +-(Extent) size; -draw; -redraw; -handleEvent: (qwaq_event_t *) event; diff --git a/ruamoko/qwaq/qwaq-group.r b/ruamoko/qwaq/qwaq-group.r index c8af9bf8a..2df05bcba 100644 --- a/ruamoko/qwaq/qwaq-group.r +++ b/ruamoko/qwaq/qwaq-group.r @@ -46,6 +46,30 @@ return self; } +-(Rect) rect +{ + if (owner) { + return [owner rect]; + } + return {[self origin], [self size]}; +} + +-(Point) origin +{ + if (owner) { + return [owner origin]; + } + return {0, 0}; +} + +-(Extent) size +{ + if (owner) { + return [owner size]; + } + return [context size]; +} + static BOOL not_dont_draw (id aView, void *aGroup) { diff --git a/ruamoko/qwaq/qwaq-window.r b/ruamoko/qwaq/qwaq-window.r index 35a0af8b4..2235a82c9 100644 --- a/ruamoko/qwaq/qwaq-window.r +++ b/ruamoko/qwaq/qwaq-window.r @@ -46,9 +46,23 @@ - (void) dragWindow: (Button *) sender { Point delta = [sender delta]; - xpos += delta.x; - ypos += delta.y; - move_panel (panel, xpos, ypos); + Point p = {xpos + delta.x, ypos + delta.y}; + Extent bounds = [owner size]; + if (p.x < 0) { + p.x = 0; + } + if (p.x + xlen > bounds.width) { + p.x = bounds.width - xlen; + } + if (p.y < 0) { + p.y = 0; + } + if (p.y + ylen > bounds.height) { + p.y = bounds.height - ylen; + } + xpos = p.x; + ypos = p.y; + move_panel (panel, p.x, p.y); [owner redraw]; }