BGE fix #20456 - 2.5: mouse position problem (offseted by 1 vertically)
authorDalai Felinto <dfelinto@gmail.com>
Sun, 11 Apr 2010 01:53:21 +0000 (01:53 +0000)
committerDalai Felinto <dfelinto@gmail.com>
Sun, 11 Apr 2010 01:53:21 +0000 (01:53 +0000)
In Blender 2.49 the win width and height were been calculated including an extra pixel (e.g. a fullscreen editor would be (width + 1) by (height + 1) )
In opposite to that, Blender 2.5 window/editor code were fixed to have the exact width,height size.
So although the BGE canvas code was still the same as 2.49 it was producing a wrong result.

I'm also adding some commentaries in the setViewport code. BGE is setting the viewports 1 pixel larger.
the setViewport command is been used as if one should pass (minx, miny, width, height), while it should be (minx, miny, maxx, maxy). I will take care of that later, if any one has extra comments on that, please let me know.

source/gameengine/BlenderRoutines/KX_BlenderCanvas.cpp
source/gameengine/GamePlayer/common/GPC_Canvas.cpp

index 40775f0355b7265513418b2825bbb802116c6ac8..9139d6ea7294c7027293b40ff12a46c52f3fe8b5 100644 (file)
@@ -117,6 +117,11 @@ SetViewPort(
        int x1, int y1,
        int x2, int y2
 ){
+       /*      x1 and y1 are the min pixel coordinate (e.g. 0)
+               x2 and y2 are the max pixel coordinate
+               the width,height is calculated including both pixels
+               therefore: max - min + 1
+       */
        int vp_width = (x2 - x1) + 1;
        int vp_height = (y2 - y1) + 1;
        int minx = m_frame_rect.GetLeft();
@@ -166,7 +171,7 @@ void KX_BlenderCanvas::SetMousePosition(int x,int y)
        int winY = m_frame_rect.GetBottom();
        int winH = m_frame_rect.GetHeight();
        
-       BL_warp_pointer(m_win, winX + x, winY + (winH-y-1));
+       BL_warp_pointer(m_win, winX + x, winY + (winH-y));
 }
 
 
index 3fa27b409285632e43647e139291226174e3c3be..100ab4b72b34703716f4d2a0b9b034718c708f2d 100644 (file)
@@ -100,6 +100,12 @@ void GPC_Canvas::ClearColor(float r, float g, float b, float a)
 
 void GPC_Canvas::SetViewPort(int x1, int y1, int x2, int y2)
 {
+               /*      x1 and y1 are the min pixel coordinate (e.g. 0)
+                       x2 and y2 are the max pixel coordinate
+                       the width,height is calculated including both pixels
+                       therefore: max - min + 1
+               */
+               
                /* XXX, nasty, this needs to go somewhere else,
                 * but where... definitly need to clean up this
                 * whole canvas/rendertools mess.