From 152ad1a1734567792c3dca2601bac4655723f2dc Mon Sep 17 00:00:00 2001 From: David Rose Date: Tue, 10 Jan 2006 18:57:54 +0000 Subject: [PATCH] fix has_origin assertion --- panda/src/display/graphicsWindow.cxx | 20 ++++++++++++------ panda/src/display/graphicsWindow.h | 2 +- panda/src/windisplay/winGraphicsWindow.cxx | 24 ++++++++++++++++------ panda/src/windisplay/winGraphicsWindow.h | 2 +- 4 files changed, 34 insertions(+), 14 deletions(-) diff --git a/panda/src/display/graphicsWindow.cxx b/panda/src/display/graphicsWindow.cxx index 6f73a0d507..751bb3c2a2 100644 --- a/panda/src/display/graphicsWindow.cxx +++ b/panda/src/display/graphicsWindow.cxx @@ -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; } diff --git a/panda/src/display/graphicsWindow.h b/panda/src/display/graphicsWindow.h index 0d432fa614..08b7f70f3e 100644 --- a/panda/src/display/graphicsWindow.h +++ b/panda/src/display/graphicsWindow.h @@ -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 diff --git a/panda/src/windisplay/winGraphicsWindow.cxx b/panda/src/windisplay/winGraphicsWindow.cxx index 049265c5cf..b47546ad95 100644 --- a/panda/src/windisplay/winGraphicsWindow.cxx +++ b/panda/src/windisplay/winGraphicsWindow.cxx @@ -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); diff --git a/panda/src/windisplay/winGraphicsWindow.h b/panda/src/windisplay/winGraphicsWindow.h index abe7f59303..529c007a45 100644 --- a/panda/src/windisplay/winGraphicsWindow.h +++ b/panda/src/windisplay/winGraphicsWindow.h @@ -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();