fix has_origin assertion

This commit is contained in:
David Rose 2006-01-10 18:57:54 +00:00
parent eabae807bd
commit 152ad1a173
4 changed files with 34 additions and 14 deletions

View File

@ -583,18 +583,25 @@ set_properties_now(WindowProperties &properties) {
} else {
reshape_props.set_size(_properties.get_x_size(), _properties.get_y_size());
}
if (properties.has_origin() && !is_fullscreen()) {
reshape_props.set_origin(properties.get_x_origin(), properties.get_y_origin());
} else {
} else if (_properties.has_origin()) {
reshape_props.set_origin(_properties.get_x_origin(), _properties.get_y_origin());
}
bool has_origin = reshape_props.has_origin();
int x_origin = 0, y_origin = 0;
if (has_origin) {
x_origin = reshape_props.get_x_origin();
y_origin = reshape_props.get_y_origin();
}
if (reshape_props.get_x_size() != _properties.get_x_size() ||
reshape_props.get_y_size() != _properties.get_y_size() ||
reshape_props.get_x_origin() != _properties.get_x_origin() ||
reshape_props.get_y_origin() != _properties.get_y_origin()) {
if (do_reshape_request(reshape_props.get_x_origin(),
reshape_props.get_y_origin(),
(has_origin && (x_origin != _properties.get_x_origin() ||
y_origin != _properties.get_y_origin()))) {
if (do_reshape_request(x_origin, y_origin, has_origin,
reshape_props.get_x_size(),
reshape_props.get_y_size())) {
system_changed_size(reshape_props.get_x_size(),
@ -660,7 +667,8 @@ reset_window(bool swapchain) {
// or false if there was a problem.
////////////////////////////////////////////////////////////////////
bool GraphicsWindow::
do_reshape_request(int x_origin, int y_origin, int x_size, int y_size) {
do_reshape_request(int x_origin, int y_origin, bool has_origin,
int x_size, int y_size) {
return false;
}

View File

@ -93,7 +93,7 @@ protected:
virtual bool open_window();
virtual void reset_window(bool swapchain);
virtual bool do_reshape_request(int x_origin, int y_origin,
virtual bool do_reshape_request(int x_origin, int y_origin, bool has_origin,
int x_size, int y_size);
// It is an error to call any of the following methods from any

View File

@ -546,10 +546,13 @@ fullscreen_restored(WindowProperties &) {
// or false if there was a problem.
////////////////////////////////////////////////////////////////////
bool WinGraphicsWindow::
do_reshape_request(int x_origin, int y_origin, int x_size, int y_size) {
windisplay_cat.info()
<< "Got reshape request (" << x_origin << ", " << y_origin
<< ", " << x_size << ", " << y_size << ")\n";
do_reshape_request(int x_origin, int y_origin, bool has_origin,
int x_size, int y_size) {
if (windisplay_cat.is_debug()) {
windisplay_cat.debug()
<< "Got reshape request (" << x_origin << ", " << y_origin
<< ", " << has_origin << ", " << x_size << ", " << y_size << ")\n";
}
if (!is_fullscreen()) {
// Compute the appropriate size and placement for the window,
// including decorations.
@ -558,9 +561,18 @@ do_reshape_request(int x_origin, int y_origin, int x_size, int y_size) {
x_origin + x_size, y_origin + y_size);
WINDOWINFO wi;
GetWindowInfo(_hWnd, &wi);
AdjustWindowRectEx(&view_rect, wi.dwStyle, false, wi.dwExStyle);
AdjustWindowRectEx(&view_rect, wi.dwStyle, FALSE, wi.dwExStyle);
SetWindowPos(_hWnd, NULL, view_rect.left, view_rect.top,
if (_properties.has_origin()) {
x_origin = view_rect.left;
y_origin = view_rect.top;
} else {
x_origin = CW_USEDEFAULT;
y_origin = CW_USEDEFAULT;
}
SetWindowPos(_hWnd, NULL, x_origin, y_origin,
view_rect.right - view_rect.left,
view_rect.bottom - view_rect.top,
SWP_NOZORDER | SWP_NOMOVE | SWP_NOSENDCHANGING);

View File

@ -67,7 +67,7 @@ protected:
virtual void fullscreen_minimized(WindowProperties &properties);
virtual void fullscreen_restored(WindowProperties &properties);
virtual bool do_reshape_request(int x_origin, int y_origin,
virtual bool do_reshape_request(int x_origin, int y_origin, bool has_origin,
int x_size, int y_size);
virtual void handle_reshape();