Revision: 19504
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=19504
Author:   ton
Date:     2009-04-02 17:01:11 +0200 (Thu, 02 Apr 2009)

Log Message:
-----------
2.5

Some more work on UI drawing code, added a generic structure
for how widgets will be defined. It's still a wrapper on top
of old buttons. Docs follow still.

Some visual improvements;

- more button types supported (check render buttons)
- pressed state is shown
- better 'panel' triangle AA, and new divider style

Still a lot of work here. I expect the next days/weeks to
be much more coding too, had to catch up with a lot of other
Blender stuff. There's more (excitement) going on than code. :)

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/editors/include/UI_interface.h
    
branches/blender2.5/blender/source/blender/editors/interface/interface_intern.h
    
branches/blender2.5/blender/source/blender/editors/interface/interface_layout.c
    
branches/blender2.5/blender/source/blender/editors/interface/interface_panel.c
    
branches/blender2.5/blender/source/blender/editors/interface/interface_widgets.c

Modified: 
branches/blender2.5/blender/source/blender/editors/include/UI_interface.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/include/UI_interface.h   
2009-04-02 14:38:40 UTC (rev 19503)
+++ branches/blender2.5/blender/source/blender/editors/include/UI_interface.h   
2009-04-02 15:01:11 UTC (rev 19504)
@@ -110,26 +110,28 @@
 #define UI_PNL_UNSTOW  256
 #define UI_PNL_SCALE   512
 
-/* warning the first 4 flags are internal */
+/* warning the first 6 flags are internal */
 /* but->flag */
-#define UI_TEXT_LEFT   16
-#define UI_ICON_LEFT   32
-#define UI_ICON_RIGHT  64
+#define UI_TEXT_LEFT   64
+#define UI_ICON_LEFT   128
+#define UI_ICON_RIGHT  256
        /* control for button type block */
-#define UI_MAKE_TOP            128
-#define UI_MAKE_DOWN   256
-#define UI_MAKE_LEFT   512
-#define UI_MAKE_RIGHT  1024
-       /* dont draw hilite on mouse over */
-#define UI_NO_HILITE   2048
+#define UI_MAKE_TOP            512
+#define UI_MAKE_DOWN   1024
+#define UI_MAKE_LEFT   2048
+#define UI_MAKE_RIGHT  4096
+
        /* button align flag, for drawing groups together */
-#define UI_BUT_ALIGN           (15<<12)
-#define UI_BUT_ALIGN_TOP       (1<<12)
-#define UI_BUT_ALIGN_LEFT      (1<<13)
-#define UI_BUT_ALIGN_RIGHT     (1<<14)
-#define UI_BUT_ALIGN_DOWN      (1<<15)
-#define UI_BUT_DISABLED                (1<<16)
+#define UI_BUT_ALIGN           (15<<14)
+#define UI_BUT_ALIGN_TOP       (1<<14)
+#define UI_BUT_ALIGN_LEFT      (1<<15)
+#define UI_BUT_ALIGN_RIGHT     (1<<16)
+#define UI_BUT_ALIGN_DOWN      (1<<17)
 
+#define UI_BUT_DISABLED                (1<<18)
+/* dont draw hilite on mouse over */
+#define UI_NO_HILITE           (1<<19)
+
 /* Button types, bits stored in 1 value... and a short even!
 - bits 0-4:  bitnr (0-31)
 - bits 5-7:  pointer type

Modified: 
branches/blender2.5/blender/source/blender/editors/interface/interface_intern.h
===================================================================
--- 
branches/blender2.5/blender/source/blender/editors/interface/interface_intern.h 
    2009-04-02 14:38:40 UTC (rev 19503)
+++ 
branches/blender2.5/blender/source/blender/editors/interface/interface_intern.h 
    2009-04-02 15:01:11 UTC (rev 19504)
@@ -55,6 +55,8 @@
 #define UI_MOUSE_OVER  2
 #define UI_ACTIVE              4
 #define UI_HAS_ICON            8
+#define UI_TEXTINPUT   16
+
 /* warn: rest of uiBut->flag in UI_interface.h */
 
 /* internal panel drawing defines */
@@ -344,5 +346,8 @@
 /* interface_handlers.c */
 extern void ui_button_active_cancel(const struct bContext *C, uiBut *but);
 
+/* interface_widgets.c */
+void ui_draw_anti_tria(float x1, float y1, float x2, float y2, float x3, float 
y3);
+
 #endif
 

Modified: 
branches/blender2.5/blender/source/blender/editors/interface/interface_layout.c
===================================================================
--- 
branches/blender2.5/blender/source/blender/editors/interface/interface_layout.c 
    2009-04-02 14:38:40 UTC (rev 19503)
+++ 
branches/blender2.5/blender/source/blender/editors/interface/interface_layout.c 
    2009-04-02 15:01:11 UTC (rev 19504)
@@ -871,8 +871,6 @@
        if(x) *x= layout->x;
        if(y) *y= layout->y;
        
-       /* XXX temp, migration flag for drawing code */
-       uiBlockSetFlag(block, UI_BLOCK_2_50);
 }
 
 void ui_layout_free(uiLayout *layout)
@@ -941,6 +939,10 @@
 
                if(pt->draw && (!pt->poll || pt->poll(C))) {
                        block= uiBeginBlock(C, ar, pt->idname, UI_EMBOSS, 
UI_HELV);
+                       
+                       /* XXX temp, migration flag for drawing code */
+                       uiBlockSetFlag(block, UI_BLOCK_2_50);
+                       
                        w= (ar->type->minsizex)? ar->type->minsizex-22: 
UI_PANEL_WIDTH-22;
 
                        if(uiNewPanel(C, ar, block, pt->name, pt->name, x, y, 
w, 0)) {

Modified: 
branches/blender2.5/blender/source/blender/editors/interface/interface_panel.c
===================================================================
--- 
branches/blender2.5/blender/source/blender/editors/interface/interface_panel.c  
    2009-04-02 14:38:40 UTC (rev 19503)
+++ 
branches/blender2.5/blender/source/blender/editors/interface/interface_panel.c  
    2009-04-02 15:01:11 UTC (rev 19504)
@@ -453,37 +453,14 @@
        return block;
 }
 
-static void ui_draw_anti_tria(float x1, float y1, float x2, float y2, float 
x3, float y3)
-{
-       // we draw twice, anti polygons not widely supported...
-       glBegin(GL_POLYGON);
-       glVertex2f(x1, y1);
-       glVertex2f(x2, y2);
-       glVertex2f(x3, y3);
-       glEnd();
-       
-       /* set antialias line */
-       glEnable( GL_LINE_SMOOTH );
-       glEnable( GL_BLEND );
-
-       glBegin(GL_LINE_LOOP);
-       glVertex2f(x1, y1);
-       glVertex2f(x2, y2);
-       glVertex2f(x3, y3);
-       glEnd();
-       
-       glDisable( GL_LINE_SMOOTH );
-       glDisable( GL_BLEND );
-}
-
 /* triangle 'icon' for panel header */
 void ui_draw_tria_icon(float x, float y, float aspect, char dir)
 {
        if(dir=='h') {
-               ui_draw_anti_tria( x, y+1, x, y+10.0, x+8, y+6.25);
+               ui_draw_anti_tria( x-1, y, x-1, y+11.0, x+9, y+6.25);
        }
        else {
-               ui_draw_anti_tria( x-2, y+9,  x+8-2, y+9, x+4.25-2, y+1);       
+               ui_draw_anti_tria( x-3, y+10,  x+8-1, y+10, x+4.25-2, y);       
        }
 }
 
@@ -679,7 +656,7 @@
        glDisable(GL_BLEND);
 }
 
-void ui_draw_panel(ARegion *ar, uiBlock *block)
+static void ui_draw_panel_old(ARegion *ar, uiBlock *block)
 {
        Panel *panel= block->panel;
        int ofsx;
@@ -860,6 +837,108 @@
                ui_draw_tria_icon(block->minx+6+ofsx, block->maxy+5, 
block->aspect, 'v');
 }
 
+/* XXX has follow style definitions still */
+static void ui_draw_panel_style(ARegion *ar, uiBlock *block)
+{
+       Panel *panel= block->panel;
+       int ofsx;
+       char *panelname= panel->drawname[0]?panel->drawname:panel->panelname;
+       
+       if(panel->paneltab) return;
+       
+       /* divider */
+       if(panel->prev) {
+               float minx= block->minx+10;
+               float maxx= block->maxx-10;
+               float y= block->maxy + PNL_HEADER;
+               
+               glEnable(GL_BLEND);
+               glColor4f(0.0f, 0.0f, 0.0f, 0.5f);
+               fdrawline(minx, y, maxx, y);
+               glColor4f(1.0f, 1.0f, 1.0f, 0.25f);
+               fdrawline(minx, y-block->aspect, maxx, y-block->aspect);
+               glDisable(GL_BLEND);
+       }
+       
+       /* title */
+       if(!(panel->flag & PNL_CLOSEDX)) {
+               ofsx= PNL_ICON+8;
+               if(panel->control & UI_PNL_CLOSE) ofsx+= PNL_ICON;
+               UI_ThemeColor(TH_TEXT);
+               ui_rasterpos_safe(4+block->minx+ofsx, block->maxy+2, 
block->aspect);
+               UI_DrawString(block->curfont, panelname, 
ui_translate_buttons());
+       }
+       
+       /* if the panel is minimized vertically:
+               * (------)
+               */
+       if(panel->flag & PNL_CLOSEDY) {
+               
+               
+               /* if it's being overlapped by a panel being dragged */
+               if(panel->flag & PNL_OVERLAP) {
+                       UI_ThemeColor(TH_TEXT_HI);
+                       uiRoundRect(block->minx, block->maxy, block->maxx, 
block->maxy+PNL_HEADER, 8);
+               }
+               
+       }
+       else if(panel->flag & PNL_CLOSEDX) {
+               
+       }
+       /* an open panel */
+       else {
+               
+               /* in some occasions, draw a border */
+               if(panel->flag & PNL_SELECT) {
+                       if(panel->control & UI_PNL_SOLID) uiSetRoundBox(15);
+                       else uiSetRoundBox(3);
+                       
+                       UI_ThemeColorShade(TH_HEADER, -120);
+                       uiRoundRect(block->minx, block->miny, block->maxx, 
block->maxy+PNL_HEADER, 8);
+               }
+               if(panel->flag & PNL_OVERLAP) {
+                       if(panel->control & UI_PNL_SOLID) uiSetRoundBox(15);
+                       else uiSetRoundBox(3);
+                       
+                       UI_ThemeColor(TH_TEXT_HI);
+                       uiRoundRect(block->minx, block->miny, block->maxx, 
block->maxy+PNL_HEADER, 8);
+               }
+               
+               if(panel->control & UI_PNL_SCALE)
+                       ui_draw_panel_scalewidget(block);
+       }
+       
+       /* draw optional close icon */
+       
+       ofsx= 6;
+       if(panel->control & UI_PNL_CLOSE) {
+               
+               ui_draw_x_icon(block->minx+2+ofsx, block->maxy+2);
+               ofsx= 22;
+       }
+       
+       /* draw collapse icon */
+       UI_ThemeColor(TH_TEXT);
+       
+       if(panel->flag & PNL_CLOSEDY)
+               ui_draw_tria_icon(block->minx+6+ofsx, block->maxy+1, 
block->aspect, 'h');
+       else if(panel->flag & PNL_CLOSEDX)
+               ui_draw_tria_icon(block->minx+7, block->maxy+1, block->aspect, 
'h');
+       else
+               ui_draw_tria_icon(block->minx+6+ofsx, block->maxy+1, 
block->aspect, 'v');
+       
+       
+}
+
+
+void ui_draw_panel(ARegion *ar, uiBlock *block)
+{
+       if(block->flag & UI_BLOCK_2_50)
+               ui_draw_panel_style(ar, block);
+       else
+               ui_draw_panel_old(ar, block);
+}
+
 /* ------------ panel alignment ---------------- */
 
 

Modified: 
branches/blender2.5/blender/source/blender/editors/interface/interface_widgets.c
===================================================================
--- 
branches/blender2.5/blender/source/blender/editors/interface/interface_widgets.c
    2009-04-02 14:38:40 UTC (rev 19503)
+++ 
branches/blender2.5/blender/source/blender/editors/interface/interface_widgets.c
    2009-04-02 15:01:11 UTC (rev 19504)
@@ -119,6 +119,57 @@
 } uiWidgetBase;
 
 
+typedef enum {
+       /* standard set */
+       UI_WTYPE_TOGGLE,
+       UI_WTYPE_OPTION,
+       UI_WTYPE_RADIO,
+       UI_WTYPE_NUMBER,
+       UI_WTYPE_SLIDER,
+       UI_WTYPE_EXEC,
+       
+       /* strings */
+       UI_WTYPE_NAME,
+       UI_WTYPE_NAME_LINK,
+       UI_WTYPE_POINTER_LINK,
+       UI_WTYPE_FILENAME,
+       
+       /* menus */
+       UI_WTYPE_MENU_RADIO,
+       UI_WTYPE_MENU_POINTER_LINK,
+       
+       UI_WTYPE_PULLDOWN,
+       UI_WTYPE_MENU_ITEM,
+       
+       /* specials */
+       UI_WTYPE_ICON,
+       UI_WTYPE_SWATCH,
+       UI_WTYPE_RGB_PICKER,
+       UI_WTYPE_NORMAL
+       
+} uiWidgetTypeEnum;
+
+
+/* uiWidgetType: for time being only for visual appearance,
+   later, a handling callback can be added too 
+*/
+typedef struct uiWidgetType {
+       
+       /* pointer to theme color definition */
+       uiWidgetColors *wcol_theme;
+       
+       /* converted colors for state */
+       uiWidgetColors wcol;
+       
+       void (*state)(struct uiWidgetType *, int state);
+       void (*draw)(uiWidgetColors *, rcti *, int state, int roundboxalign);
+       void (*text)(uiBut *, rcti *, float *col);
+       
+} uiWidgetType;
+
+
+/* *********************** draw data ************************** */
+
 static float cornervec[9][2]= {{0.0, 0.0}, {0.195, 0.02}, {0.383, 0.067}, 
{0.55, 0.169}, 
 {0.707, 0.293}, {0.831, 0.45}, {0.924, 0.617}, {0.98, 0.805}, {1.0, 1.0}};
 
@@ -151,8 +202,35 @@
 static int check_tria_face[4][3]= {
 {3, 2, 4}, {3, 4, 5}, {1, 0, 3}, {0, 2, 3}};
 
+/* ************************************************* */
 
+void ui_draw_anti_tria(float x1, float y1, float x2, float y2, float x3, float 
y3)
+{
+       float color[4];
+       int j;
+       
+       glEnable(GL_BLEND);
+       glGetFloatv(GL_CURRENT_COLOR, color);
+       color[3]= 0.125;
+       glColor4fv(color);
+       
+       /* for each AA step */
+       for(j=0; j<8; j++) {
+               glTranslatef(1.0*jit[j][0], 1.0*jit[j][1], 0.0f);
 
+               glBegin(GL_POLYGON);
+               glVertex2f(x1, y1);
+               glVertex2f(x2, y2);
+               glVertex2f(x3, y3);
+               glEnd();
+               
+               glTranslatef(-1.0*jit[j][0], -1.0*jit[j][1], 0.0f);
+       }
+
+       glDisable(GL_BLEND);
+       
+}
+
 static void widget_init(uiWidgetBase *wt)
 {
        wt->totvert= wt->halfwayvert= 0;
@@ -161,7 +239,7 @@
 }
 
 
-static void round_box_edges(uiWidgetBase *wt, int roundboxtype, rcti *rect, 
float rad)
+static void round_box_edges(uiWidgetBase *wt, int roundboxalign, rcti *rect, 
float rad)
 {
        float vec[9][2], veci[9][2];

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to