[qwaq] Add combined move and resize method

This fixes the hall of mirrors bug (needed to move, resize, then move
the window).
This commit is contained in:
Bill Currie 2020-03-25 14:39:37 +09:00
parent 42f20f200d
commit e554202c24
3 changed files with 34 additions and 4 deletions

View file

@ -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;

View file

@ -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;

View file

@ -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;