[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [43851] trunk/blender/source/blender: Fix #27213: editing color ramp "Pos:" number value did not update the ramp

Brecht Van Lommel brechtvanlommel at pandora.be
Thu Feb 2 15:07:35 CET 2012


Revision: 43851
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=43851
Author:   blendix
Date:     2012-02-02 14:07:24 +0000 (Thu, 02 Feb 2012)
Log Message:
-----------
Fix #27213: editing color ramp "Pos:" number value did not update the ramp
properly, when moving the current point before another.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_texture.h
    trunk/blender/source/blender/blenkernel/intern/texture.c
    trunk/blender/source/blender/editors/interface/interface_handlers.c
    trunk/blender/source/blender/editors/interface/interface_templates.c

Modified: trunk/blender/source/blender/blenkernel/BKE_texture.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_texture.h	2012-02-02 13:35:19 UTC (rev 43850)
+++ trunk/blender/source/blender/blenkernel/BKE_texture.h	2012-02-02 14:07:24 UTC (rev 43851)
@@ -69,9 +69,9 @@
 struct ColorBand *add_colorband(int rangetype);
 int do_colorband(const struct ColorBand *coba, float in, float out[4]);
 void colorband_table_RGBA(struct ColorBand *coba, float **array, int *size);
-int vergcband(const void *a1, const void *a2);
 struct CBData *colorband_element_add(struct ColorBand *coba, float position);
 int colorband_element_remove(struct ColorBand *coba, int index);
+void colorband_update_sort(struct ColorBand *coba);
 
 void default_tex(struct Tex *tex);
 struct Tex *add_texture(const char *name);

Modified: trunk/blender/source/blender/blenkernel/intern/texture.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/texture.c	2012-02-02 13:35:19 UTC (rev 43850)
+++ trunk/blender/source/blender/blenkernel/intern/texture.c	2012-02-02 14:07:24 UTC (rev 43851)
@@ -478,6 +478,26 @@
 	return 0;
 }
 
+void colorband_update_sort(ColorBand *coba)
+{
+	int a;
+	
+	if(coba->tot<2)
+		return;
+	
+	for(a=0; a<coba->tot; a++)
+		coba->data[a].cur= a;
+
+	qsort(coba->data, coba->tot, sizeof(CBData), vergcband);
+
+	for(a=0; a<coba->tot; a++) {
+		if(coba->data[a].cur==coba->cur) {
+			coba->cur= a;
+			break;
+		}
+	}
+}
+
 CBData *colorband_element_add(struct ColorBand *coba, float position)
 {
 	int a;
@@ -503,18 +523,8 @@
 	coba->tot++;
 	coba->cur = coba->tot-1;
 
-	for(a = 0; a < coba->tot; a++)
-		coba->data[a].cur = a;
+	colorband_update_sort(coba);
 
-	qsort(coba->data, coba->tot, sizeof(CBData), vergcband);
-
-	for(a = 0; a < coba->tot; a++) {
-		if(coba->data[a].cur == coba->cur) {
-			coba->cur = a;
-			break;
-		}
-	}
-
 	return coba->data + coba->cur;
 }
 

Modified: trunk/blender/source/blender/editors/interface/interface_handlers.c
===================================================================
--- trunk/blender/source/blender/editors/interface/interface_handlers.c	2012-02-02 13:35:19 UTC (rev 43850)
+++ trunk/blender/source/blender/editors/interface/interface_handlers.c	2012-02-02 14:07:24 UTC (rev 43851)
@@ -3607,31 +3607,6 @@
 }
 
 
-static int verg_colorband(const void *a1, const void *a2)
-{
-	const CBData *x1=a1, *x2=a2;
-	
-	if( x1->pos > x2->pos ) return 1;
-	else if( x1->pos < x2->pos) return -1;
-	return WM_UI_HANDLER_CONTINUE;
-}
-
-static void ui_colorband_update(ColorBand *coba)
-{
-	int a;
-	
-	if(coba->tot<2) return;
-	
-	for(a=0; a<coba->tot; a++) coba->data[a].cur= a;
-		qsort(coba->data, coba->tot, sizeof(CBData), verg_colorband);
-	for(a=0; a<coba->tot; a++) {
-		if(coba->data[a].cur==coba->cur) {
-			coba->cur= a;
-			break;
-		}
-	}
-}
-
 static int ui_numedit_but_COLORBAND(uiBut *but, uiHandleButtonData *data, int mx)
 {
 	float dx;
@@ -3644,7 +3619,7 @@
 	data->dragcbd->pos += dx;
 	CLAMP(data->dragcbd->pos, 0.0f, 1.0f);
 	
-	ui_colorband_update(data->coba);
+	colorband_update_sort(data->coba);
 	data->dragcbd= data->coba->data + data->coba->cur;	/* because qsort */
 	
 	data->draglastx= mx;

Modified: trunk/blender/source/blender/editors/interface/interface_templates.c
===================================================================
--- trunk/blender/source/blender/editors/interface/interface_templates.c	2012-02-02 13:35:19 UTC (rev 43850)
+++ trunk/blender/source/blender/editors/interface/interface_templates.c	2012-02-02 14:07:24 UTC (rev 43851)
@@ -1305,7 +1305,17 @@
 	rna_update_cb(C, cb_v, NULL);
 }
 
+static void colorband_update_cb(bContext *UNUSED(C), void *bt_v, void *coba_v)
+{
+	uiBut *bt= bt_v;
+	ColorBand *coba= coba_v;
 
+	/* sneaky update here, we need to sort the colorband points to be in order,
+	   however the RNA pointer then is wrong, so we update it */
+	colorband_update_sort(coba);
+	bt->rnapoin.data = coba->data + coba->cur;
+}
+
 /* offset aligns from bottom, standard width 300, height 115 */
 static void colorband_buttons_large(uiLayout *layout, uiBlock *block, ColorBand *coba, int xoffs, int yoffs, RNAUpdateCb *cb)
 {
@@ -1348,7 +1358,11 @@
 		PointerRNA ptr;
 		RNA_pointer_create(cb->ptr.id.data, &RNA_ColorRampElement, cbd, &ptr);
 		row= uiLayoutRow(layout, 0);
+
 		uiItemR(row, &ptr, "position", 0, "Pos", ICON_NONE);
+		bt= block->buttons.last;
+		uiButSetFunc(bt, colorband_update_cb, bt, coba);
+
 		uiItemR(row, &ptr, "color", 0, "", ICON_NONE);
 	}
 




More information about the Bf-blender-cvs mailing list