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);
        }
 

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to