Third widget commit ;)
authorWilliam Reynish <william@reynish.com>
Mon, 14 Sep 2009 12:28:59 +0000 (12:28 +0000)
committerWilliam Reynish <william@reynish.com>
Mon, 14 Sep 2009 12:28:59 +0000 (12:28 +0000)
Thanks to Broken for finding the bug.

source/blender/editors/interface/interface_widgets.c

index 2385b5ad15c145bbfa5ec38b2e765da57c701ca1..90b2c920613406bb5b7581443ad9146f2a25e0bf 100644 (file)
@@ -129,17 +129,21 @@ static float jit[8][2]= {{0.468813 , -0.481430}, {-0.155755 , -0.352820},
 {0.219306 , -0.238501},  {-0.393286 , -0.110949}, {-0.024699 , 0.013908}, 
 {0.343805 , 0.147431}, {-0.272855 , 0.269918}, {0.095909 , 0.388710}};
 
-static float num_tria_vert[19][2]= {
+static float num_tria_vert[3][2]= { 
+{-0.352077, 0.532607}, {-0.352077, -0.549313}, {0.330000, -0.008353}};
+
+static int num_tria_face[1][3]= {
+{0, 1, 2}};
+
+static float scroll_circle_vert[16][2]= {
 {0.382684, 0.923879}, {0.000001, 1.000000}, {-0.382683, 0.923880}, {-0.707107, 0.707107},
 {-0.923879, 0.382684}, {-1.000000, 0.000000}, {-0.923880, -0.382684}, {-0.707107, -0.707107},
 {-0.382683, -0.923880}, {0.000000, -1.000000}, {0.382684, -0.923880}, {0.707107, -0.707107},
-{0.923880, -0.382684}, {1.000000, -0.000000}, {0.923880, 0.382683}, {0.707107, 0.707107}, 
-{-0.352077, 0.532607}, {-0.352077, -0.549313}, {0.729843, -0.008353}};
+{0.923880, -0.382684}, {1.000000, -0.000000}, {0.923880, 0.382683}, {0.707107, 0.707107}};
 
-static int num_tria_face[19][3]= {
-{13, 14, 18}, {17, 5, 6}, {12, 13, 18}, {17, 6, 7}, {15, 18, 14}, {16, 4, 5}, {16, 5, 17}, {18, 11, 12}, 
-{18, 17, 10}, {18, 10, 11}, {17, 9, 10}, {15, 0, 18}, {18, 0, 16}, {3, 4, 16}, {8, 9, 17}, {8, 17, 7}, 
-{2, 3, 16}, {1, 2, 16}, {16, 0, 1}};
+static int scroll_circle_face[14][3]= {
+{0, 1, 2}, {2, 0, 3}, {3, 0, 15}, {3, 15, 4}, {4, 15, 14}, {4, 14, 5}, {5, 14, 13}, {5, 13, 6}, 
+{6, 13, 12}, {6, 12, 7}, {7, 12, 11}, {7, 11, 8}, {8, 11, 10}, {8, 10, 9}};
 
 static float menu_tria_vert[6][2]= {
 {-0.41, 0.16}, {0.41, 0.16}, {0, 0.82}, 
@@ -451,15 +455,50 @@ static void widget_num_tria(uiWidgetTrias *tria, rcti *rect, float triasize, cha
                i2=0; i1= 1;
        }       
        
-       for(a=0; a<19; a++) {
+       for(a=0; a<3; a++) {
                tria->vec[a][0]= sizex*num_tria_vert[a][i1] + centx;
                tria->vec[a][1]= sizey*num_tria_vert[a][i2] + centy;
        }
        
-       tria->tot= 19;
+       tria->tot= 1;
        tria->index= num_tria_face;
 }
 
+static void widget_scroll_circle(uiWidgetTrias *tria, rcti *rect, float triasize, char where)
+{
+       float centx, centy, sizex, sizey, minsize;
+       int a, i1=0, i2=1;
+       
+       minsize= MIN2(rect->xmax-rect->xmin, rect->ymax-rect->ymin);
+       
+       /* center position and size */
+       centx= (float)rect->xmin + 0.5f*minsize;
+       centy= (float)rect->ymin + 0.5f*minsize;
+       sizex= sizey= -0.5f*triasize*minsize;
+
+       if(where=='r') {
+               centx= (float)rect->xmax - 0.5f*minsize;
+               sizex= -sizex;
+       }       
+       else if(where=='t') {
+               centy= (float)rect->ymax - 0.5f*minsize;
+               sizey= -sizey;
+               i2=0; i1= 1;
+       }       
+       else if(where=='b') {
+               sizex= -sizex;
+               i2=0; i1= 1;
+       }       
+       
+       for(a=0; a<16; a++) {
+               tria->vec[a][0]= sizex*scroll_circle_vert[a][i1] + centx;
+               tria->vec[a][1]= sizey*scroll_circle_vert[a][i2] + centy;
+       }
+       
+       tria->tot= 14;
+       tria->index= scroll_circle_face;
+}
+
 static void widget_trias_draw(uiWidgetTrias *tria)
 {
        int a;
@@ -1736,12 +1775,12 @@ void uiWidgetScrollDraw(uiWidgetColors *wcol, rcti *rect, rcti *slider, int stat
                        wcol->item[3]= 255;
                        
                        if(horizontal) {
-                               widget_num_tria(&wtb.tria1, slider, 0.6f, 'l');
-                               widget_num_tria(&wtb.tria2, slider, 0.6f, 'r');
+                               widget_scroll_circle(&wtb.tria1, slider, 0.6f, 'l');
+                               widget_scroll_circle(&wtb.tria2, slider, 0.6f, 'r');
                        }
                        else {
-                               widget_num_tria(&wtb.tria1, slider, 0.6f, 'b');
-                               widget_num_tria(&wtb.tria2, slider, 0.6f, 't');
+                               widget_scroll_circle(&wtb.tria1, slider, 0.6f, 'b');
+                               widget_scroll_circle(&wtb.tria2, slider, 0.6f, 't');
                        }
                }
                widgetbase_draw(&wtb, wcol);