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

Ton Roosendaal ton at blender.org
Thu May 21 19:09:06 CEST 2009


Revision: 20321
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=20321
Author:   ton
Date:     2009-05-21 19:09:06 +0200 (Thu, 21 May 2009)

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

Interface draw fixes:

- Red cursor for text edit widget was in wrong location
- Selection for text edit widget too
- Number slider text edit was too far too the left
- Number slider 'fill' was drawing outside boundaries.
  (Matt: note I just interpolated rounding value :)

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/editors/interface/interface_handlers.c
    branches/blender2.5/blender/source/blender/editors/interface/interface_widgets.c

Modified: branches/blender2.5/blender/source/blender/editors/interface/interface_handlers.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/interface/interface_handlers.c	2009-05-21 15:36:16 UTC (rev 20320)
+++ branches/blender2.5/blender/source/blender/editors/interface/interface_handlers.c	2009-05-21 17:09:06 UTC (rev 20321)
@@ -804,6 +804,7 @@
 static void ui_textedit_set_cursor_pos(uiBut *but, uiHandleButtonData *data, short x)
 {
 	uiStyle *style= U.uistyles.first;	// XXX pass on as arg
+	int startx= but->x1;
 	char *origstr;
 
 	uiStyleFontSet(&style->widget);
@@ -813,7 +814,11 @@
 	BLI_strncpy(origstr, but->drawstr, data->maxlen+1);
 	but->pos= strlen(origstr)-but->ofs;
 	
-	while((BLF_width(origstr+but->ofs) + but->x1) > x) {
+	/* XXX solve generic */
+	if(but->type==NUM || but->type==NUMSLI)
+		startx += 20;
+	
+	while((BLF_width(origstr+but->ofs) + startx) > x) {
 		if (but->pos <= 0) break;
 		but->pos--;
 		origstr[but->pos+but->ofs] = 0;

Modified: branches/blender2.5/blender/source/blender/editors/interface/interface_widgets.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/interface/interface_widgets.c	2009-05-21 15:36:16 UTC (rev 20320)
+++ branches/blender2.5/blender/source/blender/editors/interface/interface_widgets.c	2009-05-21 17:09:06 UTC (rev 20321)
@@ -732,12 +732,69 @@
 	}
 }
 
-static void widget_draw_text(uiFontStyle *fstyle, uiBut *but, rcti *rect)
+static void widget_draw_text(uiFontStyle *fstyle, uiWidgetColors *wcol, uiBut *but, rcti *rect)
 {
 //	int transopts;
 	char *cpoin = NULL;
 	
-//	ui_rasterpos_safe(x, y, but->aspect);
+	uiStyleFontSet(fstyle);
+	
+	if(but->editstr || (but->flag & UI_TEXT_LEFT))
+		fstyle->align= UI_STYLE_TEXT_LEFT;
+	else
+		fstyle->align= UI_STYLE_TEXT_CENTER;			
+		
+	/* text button selection and cursor */
+	if(but->editstr && but->pos != -1) {
+		short t, pos, ch;
+		short selsta_tmp, selend_tmp, selsta_draw, selwidth_draw;
+		
+		if ((but->selend - but->selsta) > 0) {
+			/* XXX weak, why is this? (ton) */
+			t= but->str[0]?1:-2;
+			
+			/* text button selection */
+			selsta_tmp = but->selsta + strlen(but->str);
+			selend_tmp = but->selend + strlen(but->str);
+			
+			if(but->drawstr[0]!=0) {
+				ch= but->drawstr[selsta_tmp];
+				but->drawstr[selsta_tmp]= 0;
+				
+				selsta_draw = BLF_width(but->drawstr+but->ofs) + t;
+				
+				but->drawstr[selsta_tmp]= ch;
+				
+				ch= but->drawstr[selend_tmp];
+				but->drawstr[selend_tmp]= 0;
+				
+				selwidth_draw = BLF_width(but->drawstr+but->ofs) + t;
+				
+				but->drawstr[selend_tmp]= ch;
+				
+				glColor3ubv(wcol->item);
+				glRects(rect->xmin+selsta_draw+1, rect->ymin+2, rect->xmin+selwidth_draw+1, rect->ymax-2);
+			}
+		} else {
+			/* text cursor */
+			pos= but->pos+strlen(but->str);
+			if(pos >= but->ofs) {
+				if(but->drawstr[0]!=0) {
+					ch= but->drawstr[pos];
+					but->drawstr[pos]= 0;
+					
+					t= BLF_width(but->drawstr+but->ofs) + 1;
+					
+					but->drawstr[pos]= ch;
+				}
+				else t= 1;
+				
+				glColor3ub(255,0,0);
+				glRects(rect->xmin+t, rect->ymin+2, rect->xmin+t+2, rect->ymax-2);
+			}
+		}
+	}
+	//	ui_rasterpos_safe(x, y, but->aspect);
 //	if(but->type==IDPOIN) transopts= 0;	// no translation, of course!
 //	else transopts= ui_translate_buttons();
 	
@@ -747,11 +804,7 @@
 		if(cpoin) *cpoin= 0;		
 	}
 	
-	if(but->editstr || (but->flag & UI_TEXT_LEFT))
-		fstyle->align= UI_STYLE_TEXT_LEFT;
-	else
-		fstyle->align= UI_STYLE_TEXT_CENTER;			
-	
+	glColor3ubv(wcol->text);
 	uiStyleFontDraw(fstyle, rect, but->drawstr+but->ofs);
 
 	/* part text right aligned */
@@ -766,8 +819,6 @@
 /* draws text and icons for buttons */
 static void widget_draw_text_icon(uiFontStyle *fstyle, uiWidgetColors *wcol, uiBut *but, rcti *rect)
 {
-	short t, pos, ch;
-	short selsta_tmp, selend_tmp, selsta_draw, selwidth_draw;
 	
 	if(but==NULL) return;
 	
@@ -782,58 +833,7 @@
 		widget_draw_icon(but, (BIFIconID) (but->icon+but->iconadd), 0, rect);
 	}
 	else {
-		
-		/* text button selection and cursor */
-		if(but->editstr && but->pos != -1) {
-			
-			if ((but->selend - but->selsta) > 0) {
-				/* text button selection */
-				selsta_tmp = but->selsta + strlen(but->str);
-				selend_tmp = but->selend + strlen(but->str);
 				
-				if(but->drawstr[0]!=0) {
-					ch= but->drawstr[selsta_tmp];
-					but->drawstr[selsta_tmp]= 0;
-					
-					uiStyleFontSet(fstyle);
-
-					selsta_draw = BLF_width(but->drawstr+but->ofs) + 3;
-					
-					but->drawstr[selsta_tmp]= ch;
-					
-					
-					ch= but->drawstr[selend_tmp];
-					but->drawstr[selend_tmp]= 0;
-					
-					selwidth_draw = BLF_width(but->drawstr+but->ofs) + 3;
-					
-					but->drawstr[selend_tmp]= ch;
-					
-					glColor3ubv(wcol->item);
-					glRects(rect->xmin+selsta_draw+1, rect->ymin+2, rect->xmin+selwidth_draw+1, rect->ymax-2);
-				}
-			} else {
-				/* text cursor */
-				pos= but->pos+strlen(but->str);
-				if(pos >= but->ofs) {
-					if(but->drawstr[0]!=0) {
-						ch= but->drawstr[pos];
-						but->drawstr[pos]= 0;
-						
-						uiStyleFontSet(fstyle);
-
-						t= BLF_width(but->drawstr+but->ofs) + 3;
-						
-						but->drawstr[pos]= ch;
-					}
-					else t= 3;
-					
-					glColor3ub(255,0,0);
-					glRects(rect->xmin+t, rect->ymin+2, rect->xmin+t+2, rect->ymax-2);
-				}
-			}
-		}
-		
 		if(but->type==BUT_TOGDUAL) {
 			int dualset= 0;
 			if(but->pointype==SHO)
@@ -860,8 +860,7 @@
 			else if(but->flag & UI_TEXT_LEFT)
 				rect->xmin += 5;
 			
-			glColor3ubv(wcol->text);
-			widget_draw_text(fstyle, but, rect);
+			widget_draw_text(fstyle, wcol, but, rect);
 			
 		}
 		/* if there's no text label, then check to see if there's an icon only and draw it */
@@ -1378,7 +1377,6 @@
 	double value;
 	float offs, fac;
 	char outline[3];
-	int slideralign;
 	
 	widget_init(&wtb);
 	widget_init(&wtb1);
@@ -1399,9 +1397,11 @@
 	fac= (value-but->softmin)*(rect1.xmax - rect1.xmin - offs)/(but->softmax - but->softmin);
 	
 	rect1.xmax= rect1.xmin + fac + offs;
-	slideralign = roundboxalign;
-	slideralign &= ~(2|4);
-	round_box_edges(&wtb1, slideralign, &rect1, offs);
+	if(rect1.xmax + offs > rect->xmax)
+		offs*= (rect1.xmax + offs - rect->xmax)/offs;
+	else 
+		offs= 0.0f;
+	round_box_edges(&wtb1, roundboxalign, &rect1, offs);
 	
 	VECCOPY(outline, wcol->outline);
 	VECCOPY(wcol->outline, wcol->item);
@@ -1417,6 +1417,10 @@
 	wtb.inner= 0;
 	widgetbase_draw(&wtb, wcol);
 	
+	/* text space */
+	rect->xmin += (rect->ymax-rect->ymin);
+	rect->xmax -= (rect->ymax-rect->ymin);
+	
 }
 
 static void widget_swatch(uiBut *but, uiWidgetColors *wcol, rcti *rect, int state, int roundboxalign)





More information about the Bf-blender-cvs mailing list