Explorar o código

fix has_origin assertion

David Rose %!s(int64=20) %!d(string=hai) anos
pai
achega
152ad1a173

+ 14 - 6
panda/src/display/graphicsWindow.cxx

@@ -583,18 +583,25 @@ set_properties_now(WindowProperties &properties) {
     } else {
     } else {
       reshape_props.set_size(_properties.get_x_size(), _properties.get_y_size());
       reshape_props.set_size(_properties.get_x_size(), _properties.get_y_size());
     }
     }
+
     if (properties.has_origin() && !is_fullscreen()) {
     if (properties.has_origin() && !is_fullscreen()) {
       reshape_props.set_origin(properties.get_x_origin(), properties.get_y_origin());
       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());
       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() ||
     if (reshape_props.get_x_size() != _properties.get_x_size() ||
         reshape_props.get_y_size() != _properties.get_y_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_x_size(),
                              reshape_props.get_y_size())) {
                              reshape_props.get_y_size())) {
         system_changed_size(reshape_props.get_x_size(), 
         system_changed_size(reshape_props.get_x_size(), 
@@ -660,7 +667,8 @@ reset_window(bool swapchain) {
 //               or false if there was a problem.
 //               or false if there was a problem.
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
 bool GraphicsWindow::
 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;
   return false;
 }
 }
 
 

+ 1 - 1
panda/src/display/graphicsWindow.h

@@ -93,7 +93,7 @@ protected:
   virtual bool open_window();
   virtual bool open_window();
   virtual void reset_window(bool swapchain);
   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);
                                   int x_size, int y_size);
 
 
   // It is an error to call any of the following methods from any
   // It is an error to call any of the following methods from any

+ 18 - 6
panda/src/windisplay/winGraphicsWindow.cxx

@@ -546,10 +546,13 @@ fullscreen_restored(WindowProperties &) {
 //               or false if there was a problem.
 //               or false if there was a problem.
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
 bool WinGraphicsWindow::
 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()) {
   if (!is_fullscreen()) {
     // Compute the appropriate size and placement for the window,
     // Compute the appropriate size and placement for the window,
     // including decorations.
     // 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);
             x_origin + x_size, y_origin + y_size);
     WINDOWINFO wi;
     WINDOWINFO wi;
     GetWindowInfo(_hWnd, &wi);
     GetWindowInfo(_hWnd, &wi);
-    AdjustWindowRectEx(&view_rect, wi.dwStyle, false, wi.dwExStyle);
+    AdjustWindowRectEx(&view_rect, wi.dwStyle, FALSE, wi.dwExStyle);
+
+    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, view_rect.left, view_rect.top,
+    SetWindowPos(_hWnd, NULL, x_origin, y_origin,
                  view_rect.right - view_rect.left,
                  view_rect.right - view_rect.left,
                  view_rect.bottom - view_rect.top,
                  view_rect.bottom - view_rect.top,
                  SWP_NOZORDER | SWP_NOMOVE | SWP_NOSENDCHANGING);
                  SWP_NOZORDER | SWP_NOMOVE | SWP_NOSENDCHANGING);

+ 1 - 1
panda/src/windisplay/winGraphicsWindow.h

@@ -67,7 +67,7 @@ protected:
   virtual void fullscreen_minimized(WindowProperties &properties);
   virtual void fullscreen_minimized(WindowProperties &properties);
   virtual void fullscreen_restored(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);
                                   int x_size, int y_size);
 
 
   virtual void handle_reshape();
   virtual void handle_reshape();