[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [19734] branches/blender2.5/blender/source /blender: 2.5

Ton Roosendaal ton at blender.org
Wed Apr 15 16:43:56 CEST 2009


Revision: 19734
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=19734
Author:   ton
Date:     2009-04-15 16:43:54 +0200 (Wed, 15 Apr 2009)

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

Fixed & upgraded tooltips to new drawing system.
Also fixed small error in menu shadows. Rounding of shadow below
menu went wrong.

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/blenfont/intern/blf_internal.c
    branches/blender2.5/blender/source/blender/editors/interface/interface.c
    branches/blender2.5/blender/source/blender/editors/interface/interface_intern.h
    branches/blender2.5/blender/source/blender/editors/interface/interface_regions.c
    branches/blender2.5/blender/source/blender/editors/interface/interface_style.c
    branches/blender2.5/blender/source/blender/editors/interface/interface_widgets.c

Modified: branches/blender2.5/blender/source/blender/blenfont/intern/blf_internal.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenfont/intern/blf_internal.c	2009-04-15 13:50:56 UTC (rev 19733)
+++ branches/blender2.5/blender/source/blender/blenfont/intern/blf_internal.c	2009-04-15 14:43:54 UTC (rev 19734)
@@ -262,9 +262,9 @@
 			descent= d;
 	}
 	box->xmin = (float)0;
-	box->ymin = (float)-descent;
-	box->xmax = (float)length;
-	box->ymax = (float)ascent;
+	box->ymin = (float)-descent * font->aspect;
+	box->xmax = (float)length * font->aspect;
+	box->ymax = (float)ascent * font->aspect;
 }
 
 float blf_internal_width(FontBLF *font, char *str)

Modified: branches/blender2.5/blender/source/blender/editors/interface/interface.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/interface/interface.c	2009-04-15 13:50:56 UTC (rev 19733)
+++ branches/blender2.5/blender/source/blender/editors/interface/interface.c	2009-04-15 14:43:54 UTC (rev 19734)
@@ -574,7 +574,7 @@
 
 /* ************** BLOCK DRAWING FUNCTION ************* */
 
-static void ui_fontscale(short *points, float aspect)
+void ui_fontscale(short *points, float aspect)
 {
 	if(aspect < 0.9f || aspect > 1.1f) {
 		float pointsf= *points;

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-15 13:50:56 UTC (rev 19733)
+++ branches/blender2.5/blender/source/blender/editors/interface/interface_intern.h	2009-04-15 14:43:54 UTC (rev 19734)
@@ -273,6 +273,8 @@
 extern int ui_translate_menus(void);
 extern int ui_translate_tooltips(void);
 
+void ui_fontscale(short *points, float aspect);
+
 extern void ui_block_to_window_fl(const struct ARegion *ar, uiBlock *block, float *x, float *y);
 extern void ui_block_to_window(const struct ARegion *ar, uiBlock *block, int *x, int *y);
 extern void ui_block_to_window_rct(const struct ARegion *ar, uiBlock *block, rctf *graph, rcti *winr);

Modified: branches/blender2.5/blender/source/blender/editors/interface/interface_regions.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/interface/interface_regions.c	2009-04-15 13:50:56 UTC (rev 19733)
+++ branches/blender2.5/blender/source/blender/editors/interface/interface_regions.c	2009-04-15 14:43:54 UTC (rev 19734)
@@ -66,11 +66,9 @@
 #define MENU_BUTTON_HEIGHT	20
 #define MENU_SEPR_HEIGHT	6
 #define B_NOP              	-1
-#define MENU_SHADOW_LEFT	-10
-#define MENU_SHADOW_BOTTOM	-10
-#define MENU_SHADOW_RIGHT	10
-#define MENU_SHADOW_TOP		1
-#define MENU_ROUNDED_TOP	5
+#define MENU_SHADOW_SIDE	8
+#define MENU_SHADOW_BOTTOM	10
+#define MENU_TOP			8
 
 /*********************** Menu Data Parsing ********************* */
 
@@ -253,43 +251,21 @@
 /************************* Creating Tooltips **********************/
 
 typedef struct uiTooltipData {
-	rctf bbox;
-	struct BMF_Font *font;
+	rcti bbox;
+	uiFontStyle fstyle;
 	char *tip;
-	float aspect;
 } uiTooltipData;
 
 static void ui_tooltip_region_draw(const bContext *C, ARegion *ar)
 {
-	uiStyle *style= U.uistyles.first;	// XXX pass on as arg
-	uiTooltipData *data;
-	int x1, y1, x2, y2;
+	uiTooltipData *data= ar->regiondata;
 	
-	data= ar->regiondata;
-
-	x1= ar->winrct.xmin;
-	y1= ar->winrct.ymin;
-	x2= ar->winrct.xmax;
-	y2= ar->winrct.ymax;
-
-	/* draw background */
-	glEnable(GL_BLEND);
-	glColor4f(0.15f, 0.15f, 0.15f, 0.85f);
+	ui_draw_menu_back(U.uistyles.first, NULL, &data->bbox);
 	
-	uiSetRoundBox(15);
-	uiRoundBox(data->bbox.xmin, 2, data->bbox.xmax+10, y2-y1-2, 5.0f);
-	
 	/* draw text */
 	glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
-
-	/* set the position for drawing text +6 in from the left edge, and leaving
-	 * an equal gap between the top of the background box and the top of the
-	 * string's bbox, and the bottom of the background box, and the bottom of
-	 * the string's bbox */
-	
-	uiStyleFontSet(&style->widget);
-	BLF_position(5, ((y2-data->bbox.ymax)+(y1+data->bbox.ymin))/2 - data->bbox.ymin - y1, 0.0f);
-	BLF_draw(data->tip);
+	uiStyleFontSet(&data->fstyle);
+	uiStyleFontDraw(&data->fstyle, &data->bbox, data->tip);
 }
 
 static void ui_tooltip_region_free(ARegion *ar)
@@ -308,6 +284,8 @@
 	static ARegionType type;
 	ARegion *ar;
 	uiTooltipData *data;
+	float fonth, fontw, aspect= but->block->aspect;
+	float x1f, x2f, y1f, y2f;
 	int x1, x2, y1, y2, winx, winy, ofsx, ofsy;
 
 	if(!but->tip || strlen(but->tip)==0)
@@ -324,11 +302,14 @@
 	/* create tooltip data */
 	data= MEM_callocN(sizeof(uiTooltipData), "uiTooltipData");
 	data->tip= BLI_strdup(but->tip);
-	data->aspect= but->aspect;
 	
 	/* set font, get bb */
-	uiStyleFontSet(&style->widget);
-	BLF_boundbox(data->tip, &data->bbox);
+	data->fstyle= style->widget; /* copy struct */
+	data->fstyle.align= UI_STYLE_TEXT_CENTER;
+	ui_fontscale(&data->fstyle.points, aspect);
+	uiStyleFontSet(&data->fstyle);
+	fontw= aspect * BLF_width(data->tip);
+	fonth= aspect * BLF_height(data->tip);
 
 	ar->regiondata= data;
 
@@ -336,19 +317,19 @@
 	ofsx= (but->block->panel)? but->block->panel->ofsx: 0;
 	ofsy= (but->block->panel)? but->block->panel->ofsy: 0;
 
-	x1= (but->x1+but->x2)/2 + ofsx;
-	x2= x1+but->aspect*((data->bbox.xmax-data->bbox.xmin) + 8);
-	y2= but->y1-10 + ofsy;
-	y1= y2-but->aspect*((data->bbox.ymax+(data->bbox.ymax-data->bbox.ymin)));
-
-	y2 += 8;
-	x2 += 4;
-
+	x1f= (but->x1+but->x2)/2.0f + ofsx - 16.0f*aspect;
+	x2f= x1f + fontw + 16.0f*aspect;
+	y2f= but->y1 + ofsy - 15.0f*aspect;
+	y1f= y2f - fonth - 10.0f*aspect;
+	
+	/* copy to int, gets projected if possible too */
+	x1= x1f; y1= y1f; x2= x2f; y2= y2f; 
+	
 	if(butregion) {
 		/* XXX temp, region v2ds can be empty still */
 		if(butregion->v2d.cur.xmin != butregion->v2d.cur.xmax) {
-			UI_view2d_to_region_no_clip(&butregion->v2d, x1, y1, &x1, &y1);
-			UI_view2d_to_region_no_clip(&butregion->v2d, x2, y2, &x2, &y2);
+			UI_view2d_to_region_no_clip(&butregion->v2d, x1f, y1f, &x1, &y1);
+			UI_view2d_to_region_no_clip(&butregion->v2d, x2f, y2f, &x2, &y2);
 		}
 
 		x1 += butregion->winrct.xmin;
@@ -374,11 +355,18 @@
 		y1 += 36;
 		y2 += 36;
 	}
+
+	/* widget rect, in region coords */
+	data->bbox.xmin= MENU_SHADOW_SIDE;
+	data->bbox.xmax= x2-x1 + MENU_SHADOW_SIDE;
+	data->bbox.ymin= MENU_SHADOW_BOTTOM;
+	data->bbox.ymax= y2-y1 + MENU_SHADOW_BOTTOM;
 	
-	ar->winrct.xmin= x1;
-	ar->winrct.ymin= y1;
-	ar->winrct.xmax= x2;
-	ar->winrct.ymax= y2;
+	/* region bigger for shadow */
+	ar->winrct.xmin= x1 - MENU_SHADOW_SIDE;
+	ar->winrct.xmax= x2 + MENU_SHADOW_SIDE;
+	ar->winrct.ymin= y1 - MENU_SHADOW_BOTTOM;
+	ar->winrct.ymax= y2 + MENU_TOP;
 
 	/* adds subwindow */
 	ED_region_init(C, ar);
@@ -683,10 +671,10 @@
 	/* the block and buttons were positioned in window space as in 2.4x, now
 	 * these menu blocks are regions so we bring it back to region space.
 	 * additionally we add some padding for the menu shadow or rounded menus */
-	ar->winrct.xmin= block->minx + MENU_SHADOW_LEFT;
-	ar->winrct.xmax= block->maxx + MENU_SHADOW_RIGHT;
-	ar->winrct.ymin= block->miny + MENU_SHADOW_BOTTOM;
-	ar->winrct.ymax= block->maxy + MENU_SHADOW_TOP + MENU_ROUNDED_TOP;
+	ar->winrct.xmin= block->minx - MENU_SHADOW_SIDE;
+	ar->winrct.xmax= block->maxx + MENU_SHADOW_SIDE;
+	ar->winrct.ymin= block->miny - MENU_SHADOW_BOTTOM;
+	ar->winrct.ymax= block->maxy + MENU_TOP;
 
 	block->minx -= ar->winrct.xmin;
 	block->maxx -= ar->winrct.xmin;

Modified: branches/blender2.5/blender/source/blender/editors/interface/interface_style.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/interface/interface_style.c	2009-04-15 13:50:56 UTC (rev 19733)
+++ branches/blender2.5/blender/source/blender/editors/interface/interface_style.c	2009-04-15 14:43:54 UTC (rev 19734)
@@ -128,7 +128,7 @@
 			return font;
 		}
 	}
-	return NULL;
+	return U.uifonts.first;
 }
 
 /* *************** draw ************************ */

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-15 13:50:56 UTC (rev 19733)
+++ branches/blender2.5/blender/source/blender/editors/interface/interface_widgets.c	2009-04-15 14:43:54 UTC (rev 19734)
@@ -214,25 +214,22 @@
 
 /* helper call, makes shadow rect, with 'sun' above menu, so only shadow to left/right/bottom */
 /* return tot */
-static int round_box_shadow_edges(float (*vert)[2], rcti *rect, float rad, int roundboxalign, int inner)
+static int round_box_shadow_edges(float (*vert)[2], rcti *rect, float rad, int roundboxalign, float step)
 {
 	float vec[9][2];
 	float minx, miny, maxx, maxy;
 	int a, tot= 0;
 	
-	if(inner) {
-		minx= rect->xmin;
-		miny= rect->ymin;
-		maxx= rect->xmax;
-		maxy= rect->ymax;
-	}
-	else {
-		minx= rect->xmin-rad;
-		miny= rect->ymin-rad;
-		maxx= rect->xmax+rad;
-		maxy= rect->ymax+rad;
-	}
+	rad+= step;
 	
+	if(2.0f*rad > rect->ymax-rect->ymin)
+		rad= 0.5f*(rect->ymax-rect->ymin);
+	
+	minx= rect->xmin-step;
+	miny= rect->ymin-step;
+	maxx= rect->xmax+step;
+	maxy= rect->ymax+step;
+	
 	/* mult */
 	for(a=0; a<9; a++) {
 		vec[a][0]= rad*cornervec[a][0]; 
@@ -300,7 +297,7 @@
 {
 	float vec[9][2], veci[9][2];
 	float minx= rect->xmin, miny= rect->ymin, maxx= rect->xmax, maxy= rect->ymax;
-	float radi= rad - 1.0f; /* rad inner */
+	float radi;				  /* rad inner */
 	float minxi= minx + 1.0f; /* boundbox inner */
 	float maxxi= maxx - 1.0f;
 	float minyi= miny + 1.0f;
@@ -309,6 +306,11 @@
 	float facyi= 1.0f/(maxyi-minyi);
 	int a, tot= 0;
 	
+	if(2.0f*rad > rect->ymax-rect->ymin)
+		rad= 0.5f*(rect->ymax-rect->ymin);
+
+	radi= rad - 1.0f;
+	
 	/* mult */
 	for(a=0; a<9; a++) {
 		veci[a][0]= radi*cornervec[a][0]; 
@@ -1133,17 +1135,21 @@
 	float alpha, alphastep;
 	int step, tot, a;
 	
-	rect1.ymax -= 2.0f*radout;
+	/* prevent tooltips to not show round shadow */
+	if( 2.0f*radout > 0.2f*(rect1.ymax-rect1.ymin) )
+		rect1.ymax -= 0.2f*(rect1.ymax-rect1.ymin);
+	else
+		rect1.ymax -= 2.0f*radout;
 	
 	/* inner part */
-	tot= round_box_shadow_edges(wtb.inner_v, &rect1, radin, roundboxalign & 12, 1);

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list