diff --git a/ruamoko/qwaq/qwaq-view.h b/ruamoko/qwaq/qwaq-view.h index b8d61d1f0..db4862929 100644 --- a/ruamoko/qwaq/qwaq-view.h +++ b/ruamoko/qwaq/qwaq-view.h @@ -65,6 +65,7 @@ enum { -redraw; -move: (Point) delta; -resize: (Extent) delta; +-move:(Point)dpos andResize:(Extent)dsize; -grow: (Extent) delta; -handleEvent: (qwaq_event_t *) event; -takeFocus; diff --git a/ruamoko/qwaq/qwaq-view.r b/ruamoko/qwaq/qwaq-view.r index 76a6fd532..3300a0d05 100644 --- a/ruamoko/qwaq/qwaq-view.r +++ b/ruamoko/qwaq/qwaq-view.r @@ -220,6 +220,13 @@ updateScreenCursor (View *view) return self; } +-move:(Point)dpos andResize:(Extent)dsize +{ + [self move: dpos]; + [self resize: dsize]; + return self; +} + -grow: (Extent) delta { Point dpos = {}; @@ -241,8 +248,7 @@ updateScreenCursor (View *view) } int save_state = state; state &= ~sfDrawn; - [self move: dpos]; - [self resize: dsize]; + [self move: dpos andResize: dsize]; state = save_state; [self redraw]; return self; diff --git a/ruamoko/qwaq/qwaq-window.r b/ruamoko/qwaq/qwaq-window.r index 561e306f6..37eb76918 100644 --- a/ruamoko/qwaq/qwaq-window.r +++ b/ruamoko/qwaq/qwaq-window.r @@ -126,8 +126,7 @@ } int save_state = state; state &= ~sfDrawn; - [self resize: {ds.x, ds.y}]; - [self move: dp]; + [self move:dp andResize:{ds.x, ds.y}]; state = save_state; [self redraw]; } @@ -137,6 +136,30 @@ return self; } +-move:(Point)dpos andResize:(Extent)dsize +{ + int save_state = state; + state &= ~sfDrawn; + + Point pos = self.pos; + Extent size = self.size; + [super resize: dsize]; + [super move: dpos]; + // need to move the panel both before and after the resize to avoid + // HoM effects or window/panel possition errors + move_panel (panel, xpos, ypos); + [(id)textContext resizeTo: self.size]; + replace_panel (panel, [(id)textContext window]); + move_panel (panel, xpos, ypos); + + dsize = {self.size.width - size.width, self.size.height - size.height}; + [objects resize:dsize]; + + state = save_state; + [self redraw]; + return self; +} + -move: (Point) delta { int save_state = state;