[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [22856] branches/blender2.5/blender/source /blender/editors: Grease Pencil: UI (i.e.

Joshua Leung aligorith at gmail.com
Sat Aug 29 08:50:33 CEST 2009


Revision: 22856
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=22856
Author:   aligorith
Date:     2009-08-29 08:50:32 +0200 (Sat, 29 Aug 2009)

Log Message:
-----------
Grease Pencil: UI (i.e. Panel) for Settings

Restored the UI for access to the GP layers. 

There are still a few minor bugs here:
* Wrong icons on the toggles - even when they're enabled, they only show a single state
* The ID-template doesn't seem to be showing up. Dunno what's going wrong there...

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/editors/gpencil/gpencil_buttons.c
    branches/blender2.5/blender/source/blender/editors/gpencil/gpencil_edit.c
    branches/blender2.5/blender/source/blender/editors/gpencil/gpencil_intern.h
    branches/blender2.5/blender/source/blender/editors/gpencil/gpencil_ops.c
    branches/blender2.5/blender/source/blender/editors/gpencil/gpencil_paint.c
    branches/blender2.5/blender/source/blender/editors/include/ED_gpencil.h
    branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_buttons.c

Modified: branches/blender2.5/blender/source/blender/editors/gpencil/gpencil_buttons.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/gpencil/gpencil_buttons.c	2009-08-29 01:54:10 UTC (rev 22855)
+++ branches/blender2.5/blender/source/blender/editors/gpencil/gpencil_buttons.c	2009-08-29 06:50:32 UTC (rev 22856)
@@ -47,11 +47,11 @@
 #include "BKE_gpencil.h"
 #include "BKE_utildefines.h"
 
-#include "PIL_time.h"
-
 #include "WM_api.h"
 #include "WM_types.h"
 
+#include "RNA_access.h"
+
 #include "BIF_gl.h"
 #include "BIF_glutil.h"
 
@@ -76,259 +76,195 @@
 /* ------- Callbacks ----------- */
 /* These are just 'dummy wrappers' around gpencil api calls */
 
-#if 0
-// XXX
+
 /* make layer active one after being clicked on */
-void gp_ui_activelayer_cb (void *gpd, void *gpl)
+void gp_ui_activelayer_cb (bContext *C, void *gpd, void *gpl)
 {
 	gpencil_layer_setactive(gpd, gpl);
 	
-	scrarea_queue_winredraw(curarea);
-	allqueue(REDRAWACTION, 0);
+	WM_event_add_notifier(C, NC_SCREEN|ND_GPENCIL|NA_EDITED, NULL); // XXX please work!
 }
 
-/* rename layer and set active */
-void gp_ui_renamelayer_cb (void *gpd_arg, void *gpl_arg)
+/* delete 'active' layer */
+void gp_ui_dellayer_cb (bContext *C, void *gpd, void *gpl)
 {
-	bGPdata *gpd= (bGPdata *)gpd_arg;
-	bGPDlayer *gpl= (bGPDlayer *)gpl_arg;
-	
-	BLI_uniquename(&gpd->layers, gpl, "GP_Layer", '.', offsetof(bGPDlayer, info[0]), 128);
-	gpencil_layer_setactive(gpd, gpl);
-	
-	scrarea_queue_winredraw(curarea);
-	allqueue(REDRAWACTION, 0);
-}
-
-/* add a new layer */
-void gp_ui_addlayer_cb (void *gpd, void *dummy)
-{
-	gpencil_layer_addnew(gpd);
-	
-	scrarea_queue_winredraw(curarea);
-	allqueue(REDRAWACTION, 0);
-}
-
-/* delete active layer */
-void gp_ui_dellayer_cb (void *gpd, void *dummy)
-{
+	/* make sure the layer we want to remove is the active one */
+	gpencil_layer_setactive(gpd, gpl); 
 	gpencil_layer_delactive(gpd);
 	
-	scrarea_queue_winredraw(curarea);
-	allqueue(REDRAWACTION, 0);
+	WM_event_add_notifier(C, NC_SCREEN|ND_GPENCIL|NA_EDITED, NULL); // XXX please work!
 }
 
-/* delete last stroke of active layer */
-void gp_ui_delstroke_cb (void *gpd, void *gpl)
-{
-	bGPDframe *gpf= gpencil_layer_getframe(gpl, CFRA, 0);
-	
-	if (gpf) {
-		if (gpf->framenum != CFRA) return;
-
-		gpencil_layer_setactive(gpd, gpl);
-		gpencil_frame_delete_laststroke(gpl, gpf);
-		
-		scrarea_queue_winredraw(curarea);
-	}
-}
-
-/* delete active frame of active layer */
-void gp_ui_delframe_cb (void *gpd, void *gpl)
-{
-	bGPDframe *gpf= gpencil_layer_getframe(gpl, CFRA, 0);
-	
-	gpencil_layer_setactive(gpd, gpl);
-	gpencil_layer_delframe(gpl, gpf);
-	
-	scrarea_queue_winredraw(curarea);
-	allqueue(REDRAWACTION, 0);
-}
-
-/* convert the active layer to geometry */
-void gp_ui_convertlayer_cb (void *gpd, void *gpl)
-{
-	gpencil_layer_setactive(gpd, gpl);
-	gpencil_convert_menu();
-	
-	scrarea_queue_winredraw(curarea);
-}
-#endif
-
 /* ------- Drawing Code ------- */
 
-#if 0
-/* XXX */
 /* draw the controls for a given layer */
-static void gp_drawui_layer (uiBlock *block, bGPdata *gpd, bGPDlayer *gpl, short *xco, short *yco)
+static void gp_drawui_layer (uiLayout *layout, bGPdata *gpd, bGPDlayer *gpl)
 {
+	uiLayout *box=NULL, *split=NULL;
+	uiLayout *col=NULL, *subcol=NULL;
+	uiLayout *row=NULL, *subrow=NULL;
+	uiBlock *block;
 	uiBut *but;
-	short active= (gpl->flag & GP_LAYER_ACTIVE);
-	short width= 314;
-	short height;
-	int rb_col;
+	PointerRNA ptr;
 	
+	/* make pointer to layer data */
+	RNA_pointer_create((ID *)gpd, &RNA_GPencilLayer, gpl, &ptr);
+	
 	/* unless button has own callback, it adds this callback to button */
+	block= uiLayoutGetBlock(layout);
 	uiBlockSetFunc(block, gp_ui_activelayer_cb, gpd, gpl);
 	
-	/* draw header */
-	{
-		uiBlockSetEmboss(block, UI_EMBOSSN);
-		
-		/* rounded header */
-		if (active) uiBlockSetCol(block, TH_BUT_ACTION);
-			rb_col= (active)?-20:20;
-			uiDefBut(block, ROUNDBOX, B_REDR, "", *xco-8, *yco-2, width, 24, NULL, 5.0, 0.0, 15.0, (float)(rb_col-20), ""); 
-		if (active) uiBlockSetCol(block, TH_AUTO);
-		
-		/* lock toggle */
-		uiDefIconButBitI(block, ICONTOG, GP_LAYER_LOCKED, B_REDR, ICON_UNLOCKED,	*xco-7, *yco-1, 20, 20, &gpl->flag, 0.0, 0.0, 0, 0, "Layer cannot be modified");
-	}
+	/* draw header ---------------------------------- */
+	/* get layout-row + UI-block for header */
+	box= uiLayoutBox(layout);
 	
+	row= uiLayoutRow(box, 0);
+	block= uiLayoutGetBlock(row); // err...
+	
+	uiBlockSetEmboss(block, UI_EMBOSSN);
+	
+	/* left-align ............................... */
+	subrow= uiLayoutRow(row, 1);
+	uiLayoutSetAlignment(subrow, UI_LAYOUT_ALIGN_LEFT);
+	
+	/* active */
+	uiItemR(subrow, "", ICON_RADIOBUT_OFF, &ptr, "active", UI_ITEM_R_TOGGLE); // XXX we need to set it to toggle to get icon
+	
+	/* locked */
+	uiItemR(subrow, "", ICON_UNLOCKED, &ptr, "locked", UI_ITEM_R_TOGGLE); // XXX we need to set it to toggle to get icon
+	
 	/* when layer is locked or hidden, only draw header */
 	if (gpl->flag & (GP_LAYER_LOCKED|GP_LAYER_HIDE)) {
 		char name[256]; /* gpl->info is 128, but we need space for 'locked/hidden' as well */
 		
-		height= 0;
-		
 		/* visibility button (only if hidden but not locked!) */
 		if ((gpl->flag & GP_LAYER_HIDE) && !(gpl->flag & GP_LAYER_LOCKED))
-			uiDefIconButBitI(block, ICONTOG, GP_LAYER_HIDE, B_REDR, ICON_RESTRICT_VIEW_OFF,	*xco+12, *yco-1, 20, 20, &gpl->flag, 0.0, 0.0, 0, 0, "Visibility of layer");
+			uiItemR(subrow, "", ICON_RESTRICT_VIEW_OFF, &ptr, "hide", UI_ITEM_R_TOGGLE); // XXX we need to set it to toggle to get icon
 		
 		/* name */
 		if (gpl->flag & GP_LAYER_HIDE)
 			sprintf(name, "%s (Hidden)", gpl->info);
 		else
 			sprintf(name, "%s (Locked)", gpl->info);
-		uiDefBut(block, LABEL, 1, name,	*xco+35, *yco, 240, 20, NULL, 0.0, 0.0, 0, 0, "Short description of what this layer is for (optional)");
+		uiItemL(subrow, name, 0);
 			
 		/* delete button (only if hidden but not locked!) */
 		if ((gpl->flag & GP_LAYER_HIDE) & !(gpl->flag & GP_LAYER_LOCKED)) {
-			but= uiDefIconBut(block, BUT, B_REDR, ICON_X, *xco+(width-30), *yco, 19, 19, NULL, 0.0, 0.0, 0.0, 0.0, "Delete layer");
-			uiButSetFunc(but, gp_ui_dellayer_cb, gpd, NULL);
+			/* right-align ............................... */
+			subrow= uiLayoutRow(row, 1);
+			uiLayoutSetAlignment(subrow, UI_LAYOUT_ALIGN_RIGHT);
+			block= uiLayoutGetBlock(subrow); // XXX... err...
+			
+			but= uiDefIconBut(block, BUT, 0, ICON_X, 0, 0, UI_UNIT_X, UI_UNIT_Y, NULL, 0.0, 0.0, 0.0, 0.0, "Delete layer");
+			uiButSetFunc(but, gp_ui_dellayer_cb, gpd, gpl);
 		}	
 		uiBlockSetEmboss(block, UI_EMBOSS);
 	}
 	else {
-		height= 97;
+		/* draw rest of header -------------------------------- */
+		/* visibility button */
+		uiItemR(subrow, "", ICON_RESTRICT_VIEW_OFF, &ptr, "hide", UI_ITEM_R_TOGGLE); // XXX we need to set it to toggle to get icon
 		
-		/* draw rest of header */
-		{
-			/* visibility button */
-			uiDefIconButBitI(block, ICONTOG, GP_LAYER_HIDE, B_REDR, ICON_RESTRICT_VIEW_OFF,	*xco+12, *yco-1, 20, 20, &gpl->flag, 0.0, 0.0, 0, 0, "Visibility of layer");
+		uiBlockSetEmboss(block, UI_EMBOSS);
+		
+		/* name */
+		uiItemR(subrow, "", 0, &ptr, "info", 0);
+		
+		/* delete 'button' */
+		uiBlockSetEmboss(block, UI_EMBOSSN);
+			/* right-align ............................... */
+			subrow= uiLayoutRow(row, 1);
+			uiLayoutSetAlignment(subrow, UI_LAYOUT_ALIGN_RIGHT);
+			block= uiLayoutGetBlock(subrow); // XXX... err...
 			
-			uiBlockSetEmboss(block, UI_EMBOSS);
-			
-			/* name */
-			but= uiDefButC(block, TEX, B_REDR, "Info:",	*xco+36, *yco, 240, 19, gpl->info, 0, 127, 0, 0, "Short description of what this layer is for (optional)");
-			uiButSetFunc(but, gp_ui_renamelayer_cb, gpd, gpl);
-			
-			/* delete 'button' */
-			uiBlockSetEmboss(block, UI_EMBOSSN);
-			
-			but= uiDefIconBut(block, BUT, B_REDR, ICON_X, *xco+(width-30), *yco, 19, 19, NULL, 0.0, 0.0, 0.0, 0.0, "Delete layer");
-			uiButSetFunc(but, gp_ui_dellayer_cb, gpd, NULL);
-			
-			uiBlockSetEmboss(block, UI_EMBOSS);
-		}
+			but= uiDefIconBut(block, BUT, 0, ICON_X, 0, 0, UI_UNIT_X, UI_UNIT_Y, NULL, 0.0, 0.0, 0.0, 0.0, "Delete layer");
+			uiButSetFunc(but, gp_ui_dellayer_cb, gpd, gpl);
+		uiBlockSetEmboss(block, UI_EMBOSS);
 		
-		/* draw backdrop */
-		if (active) uiBlockSetCol(block, TH_BUT_ACTION);
-			uiDefBut(block, ROUNDBOX, B_DIFF, "", *xco-8, *yco-height, width, height-1, NULL, 5.0, 0.0, 12.0, (float)rb_col, ""); 
-		if (active) uiBlockSetCol(block, TH_AUTO);
 		
-		/* draw settings */
-		{
-			/* color */
-			uiBlockBeginAlign(block);
-				uiDefButF(block, COL, B_REDR, "",		*xco, *yco-26, 150, 19, gpl->color, 0, 0, 0, 0, "Color to use for all strokes on this Grease Pencil Layer");
-				uiDefButF(block, NUMSLI, B_REDR, "Opacity: ",		*xco,*yco-45,150,19, &gpl->color[3], 0.3f, 1.0f, 0, 0, "Visibility of stroke (0.3 to 1.0)");
-			uiBlockEndAlign(block);
+		/* new backdrop ----------------------------------- */
+		box= uiLayoutBox(layout);
+		split= uiLayoutSplit(box, 0.5f);
+		
+		
+		/* draw settings ---------------------------------- */
+		/* left column ..................... */
+		col= uiLayoutColumn(split, 0);
+		
+		/* color */
+		subcol= uiLayoutColumn(col, 1);
+			uiItemR(subcol, "", 0, &ptr, "color", 0);
+			uiItemR(subcol, NULL, 0, &ptr, "opacity", UI_ITEM_R_SLIDER);
 			
-			/* stroke thickness */
-			uiDefButS(block, NUMSLI, B_REDR, "Thickness:",	*xco, *yco-75, 150, 20, &gpl->thickness, 1, 10, 0, 0, "Thickness of strokes (in pixels)");
-			
-			/* debugging options */
-			if (G.f & G_DEBUG) {
-				uiDefButBitI(block, TOG, GP_LAYER_DRAWDEBUG, B_REDR, "Show Points", *xco, *yco-95, 150, 20, &gpl->flag, 0, 0, 0, 0, "Show points which form the strokes");
-			}
-			
-			/* onion-skinning */
-			uiBlockBeginAlign(block);
-				uiDefButBitI(block, TOG, GP_LAYER_ONIONSKIN, B_REDR, "Onion-Skin", *xco+160, *yco-26, 140, 20, &gpl->flag, 0, 0, 0, 0, "Ghost frames on either side of frame");
-				uiDefButS(block, NUMSLI, B_REDR, "GStep:",	*xco+160, *yco-46, 140, 20, &gpl->gstep, 0, 120, 0, 0, "Max number of frames on either side of active frame to show (0 = just 'first' available sketch on either side)");
-			uiBlockEndAlign(block);
-			
-			/* options */
-			uiBlockBeginAlign(block);
-				if (curarea->spacetype == SPACE_VIEW3D) {
-					but= uiDefBut(block, BUT, B_REDR, "Convert to...", *xco+160, *yco-75, 140, 20, NULL, 0, 0, 0, 0, "Converts this layer's strokes to geometry (Hotkey = Alt-Shift-C)");

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list