[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