Fix for problem drawing second level popup menus due to recent commit,
[blender.git] / source / blender / windowmanager / intern / wm_subwindow.c
index dc2aca7b15b23001180ade13c4e654527735bb3f..97b3d3e800cd33e9c2a2ef75fb4ad2fe5d93d0bc 100644 (file)
@@ -38,7 +38,7 @@
 #include "DNA_screen_types.h"
 
 #include "BLI_blenlib.h"
-#include "BLI_arithb.h"
+#include "BLI_math.h"
 
 #include "BKE_context.h"
 #include "BKE_global.h"
@@ -66,9 +66,6 @@ typedef struct wmSubWindow {
        
        rcti winrct;
        int swinid;
-       
-       float viewmat[4][4], winmat[4][4];
-       float viewmat1[4][4], winmat1[4][4];
 } wmSubWindow;
 
 
@@ -132,8 +129,17 @@ void wm_subwindow_getmatrix(wmWindow *win, int swinid, float mat[][4])
 {
        wmSubWindow *swin= swin_from_swinid(win, swinid);
 
-       if(swin)
-               Mat4MulMat4(mat, swin->viewmat, swin->winmat);
+       if(swin) {
+               /* used by UI, should find a better way to get the matrix there */
+               if(swinid == win->screen->mainwin) {
+                       int width, height;
+
+                       wm_subwindow_getsize(win, swin->swinid, &width, &height);
+                       orthographic_m4(mat, -0.375, (float)width-0.375, -0.375, (float)height-0.375, -100, 100);
+               }
+               else
+                       glGetFloatv(GL_PROJECTION_MATRIX, (float*)mat);
+       }
 }
 
 /* always sets pixel-precise 2D window/view matrices */
@@ -155,16 +161,13 @@ int wm_subwindow_open(wmWindow *win, rcti *winrct)
        swin->swinid= freewinid;
        swin->winrct= *winrct;
 
-       Mat4One(swin->viewmat);
-       Mat4One(swin->winmat);
-       
        /* and we appy it all right away */
        wmSubWindowSet(win, swin->swinid);
        
        /* extra service */
        wm_subwindow_getsize(win, swin->swinid, &width, &height);
        wmOrtho2(-0.375, (float)width-0.375, -0.375, (float)height-0.375);
-       wmLoadIdentity();
+       glLoadIdentity();
 
        return swin->swinid;
 }
@@ -257,11 +260,9 @@ void wmSubWindowScissorSet(wmWindow *win, int swinid, rcti *srct)
        else
                glScissor(_curswin->winrct.xmin, _curswin->winrct.ymin, width, height);
        
-       glMatrixMode(GL_PROJECTION);
-       glLoadMatrixf(&_curswin->winmat[0][0]);
-       glMatrixMode(GL_MODELVIEW);
-       glLoadMatrixf(&_curswin->viewmat[0][0]);
-       
+       wmOrtho2(-0.375, (float)width-0.375, -0.375, (float)height-0.375);
+       glLoadIdentity();
+
        glFlush();
 }
 
@@ -272,129 +273,22 @@ void wmSubWindowSet(wmWindow *win, int swinid)
        wmSubWindowScissorSet(win, swinid, NULL);
 }
 
-void wmLoadMatrix(float mat[][4])
-{
-       if(_curswin==NULL) return;
-       
-       glLoadMatrixf(mat);
-       
-       if (glaGetOneInteger(GL_MATRIX_MODE)==GL_MODELVIEW)
-               Mat4CpyMat4(_curswin->viewmat, mat);
-       else
-               Mat4CpyMat4(_curswin->winmat, mat);
-}
-
-void wmGetMatrix(float mat[][4])
-{
-       if(_curswin==NULL) return;
-       
-       if (glaGetOneInteger(GL_MATRIX_MODE)==GL_MODELVIEW) {
-               Mat4CpyMat4(mat, _curswin->viewmat);
-       } else {
-               Mat4CpyMat4(mat, _curswin->winmat);
-       }
-}
-
-void wmMultMatrix(float mat[][4])
-{
-       if(_curswin==NULL) return;
-       
-       glMultMatrixf((float*) mat);
-       
-       if (glaGetOneInteger(GL_MATRIX_MODE)==GL_MODELVIEW)
-               glGetFloatv(GL_MODELVIEW_MATRIX, (float *)_curswin->viewmat);
-       else
-               glGetFloatv(GL_MODELVIEW_MATRIX, (float *)_curswin->winmat);
-}
-
-static int debugpush= 0;
-
-void wmPushMatrix(void)
-{
-       if(_curswin==NULL) return;
-       
-       if(debugpush)
-               printf("wmPushMatrix error already pushed\n");
-       debugpush= 1;
-       
-       Mat4CpyMat4(_curswin->viewmat1, _curswin->viewmat);
-       Mat4CpyMat4(_curswin->winmat1, _curswin->winmat);
-}
-
-void wmPopMatrix(void)
+void wmFrustum(float x1, float x2, float y1, float y2, float n, float f)
 {
-       if(_curswin==NULL) return;
-       
-       if(debugpush==0)
-               printf("wmPopMatrix error nothing popped\n");
-       debugpush= 0;
-       
-       Mat4CpyMat4(_curswin->viewmat, _curswin->viewmat1);
-       Mat4CpyMat4(_curswin->winmat, _curswin->winmat1);
-       
        glMatrixMode(GL_PROJECTION);
-       glLoadMatrixf(&_curswin->winmat[0][0]);
+       glLoadIdentity();
+       glFrustum(x1, x2, y1, y2, n, f);
        glMatrixMode(GL_MODELVIEW);
-       glLoadMatrixf(&_curswin->viewmat[0][0]);
-       
-}
-
-void wmGetSingleMatrix(float mat[][4])
-{
-       if(_curswin)
-               Mat4MulMat4(mat, _curswin->viewmat, _curswin->winmat);
-}
-
-void wmScale(float x, float y, float z)
-{
-       if(_curswin==NULL) return;
-       
-       glScalef(x, y, z);
-       
-       if (glaGetOneInteger(GL_MATRIX_MODE)==GL_MODELVIEW)
-               glGetFloatv(GL_MODELVIEW_MATRIX, (float *)_curswin->viewmat);
-       else
-               glGetFloatv(GL_MODELVIEW_MATRIX, (float *)_curswin->winmat);
-       
 }
 
-void wmLoadIdentity(void)
+void wmOrtho(float x1, float x2, float y1, float y2, float n, float f)
 {
-       if(_curswin==NULL) return;
-       
-       if (glaGetOneInteger(GL_MATRIX_MODE)==GL_MODELVIEW)
-               Mat4One(_curswin->viewmat);
-       else
-               Mat4One(_curswin->winmat);
-       
+       glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
-}
 
-void wmFrustum(float x1, float x2, float y1, float y2, float n, float f)
-{
-       if(_curswin) {
-
-               glMatrixMode(GL_PROJECTION);
-               glLoadIdentity();
-               glFrustum(x1, x2, y1, y2, n, f);
-
-               glGetFloatv(GL_PROJECTION_MATRIX, (float *)_curswin->winmat);
-               glMatrixMode(GL_MODELVIEW);
-       }
-}
+       glOrtho(x1, x2, y1, y2, n, f);
 
-void wmOrtho(float x1, float x2, float y1, float y2, float n, float f)
-{
-       if(_curswin) {
-               
-               glMatrixMode(GL_PROJECTION);
-               glLoadIdentity();
-               
-               glOrtho(x1, x2, y1, y2, n, f);
-               
-               glGetFloatv(GL_PROJECTION_MATRIX, (float *)_curswin->winmat);
-               glMatrixMode(GL_MODELVIEW);
-       }
+       glMatrixMode(GL_MODELVIEW);
 }
 
 void wmOrtho2(float x1, float x2, float y1, float y2)
@@ -402,10 +296,10 @@ void wmOrtho2(float x1, float x2, float y1, float y2)
        /* prevent opengl from generating errors */
        if(x1==x2) x2+=1.0;
        if(y1==y2) y2+=1.0;
+
        wmOrtho(x1, x2, y1, y2, -100, 100);
 }
 
-
 /* *************************** Framebuffer color depth, for selection codes ********************** */
 
 static int wm_get_colordepth(void)
@@ -434,7 +328,7 @@ static int wm_get_colordepth(void)
 
 /* apple seems to round colors to below and up on some configs */
 
-static unsigned int index_to_framebuffer(int index)
+unsigned int index_to_framebuffer(int index)
 {
        unsigned int i= index;
 
@@ -464,7 +358,7 @@ static unsigned int index_to_framebuffer(int index)
 
 /* this is the old method as being in use for ages.... seems to work? colors are rounded to lower values */
 
-static unsigned int index_to_framebuffer(int index)
+unsigned int index_to_framebuffer(int index)
 {
        unsigned int i= index;
        
@@ -523,17 +417,3 @@ int WM_framebuffer_to_index(unsigned int col)
 
 /* ********** END MY WINDOW ************** */
 
-#if 0 // XXX not used...
-#ifdef WIN32
-static int is_a_really_crappy_nvidia_card(void) {
-       static int well_is_it= -1;
-
-               /* Do you understand the implication? Do you? */
-       if (well_is_it==-1)
-               well_is_it= (strcmp((char*) glGetString(GL_VENDOR), "NVIDIA Corporation") == 0);
-
-       return well_is_it;
-}
-#endif
-#endif // XXX not used...
-