Revision: 23482
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=23482
Author:   aligorith
Date:     2009-09-25 12:52:29 +0200 (Fri, 25 Sep 2009)

Log Message:
-----------
Graph Editor: Drawing + Selection Tweaks

* Deselect all now selects/deselects F-Curves too

* Tangents of unselected F-Curves now draw 'faded' like the curves they belong 
to. This experimental change is quite subtle, but can be made stronger still if 
people want.

* Cleaned up some old comments in the code too...

Modified Paths:
--------------
    trunk/blender/source/blender/editors/space_graph/graph_draw.c
    trunk/blender/source/blender/editors/space_graph/graph_select.c

Modified: trunk/blender/source/blender/editors/space_graph/graph_draw.c
===================================================================
--- trunk/blender/source/blender/editors/space_graph/graph_draw.c       
2009-09-25 10:24:42 UTC (rev 23481)
+++ trunk/blender/source/blender/editors/space_graph/graph_draw.c       
2009-09-25 10:52:29 UTC (rev 23482)
@@ -91,6 +91,26 @@
 extern void gl_round_box(int mode, float minx, float miny, float maxx, float 
maxy, float rad);
 
 /* *************************** */
+/* Utility Drawing Defines */
+
+/* determine the alpha value that should be used when 
+ * drawing components for some F-Curve (fcu)
+ *     - selected F-Curves should be more visible than partially visible ones
+ */
+#define drawFCurveFade(fcu) ( ((fcu)->flag & FCURVE_SELECTED)? 1.0f : 0.5f )
+
+/* set the colour for some point from some value given packed into an int 
+ *     - intV: integer value containing color info packed into an int
+ *     - alpha: float value describing the 
+ */
+#define cpackA(intVC, alpha) \
+       { \
+               float _cpackCol[3]; \
+               cpack_to_rgb(intVC, &_cpackCol[0], &_cpackCol[1], 
&_cpackCol[2]); \
+               glColor4f(_cpackCol[0], _cpackCol[1], _cpackCol[2], alpha); \
+       }
+
+/* *************************** */
 /* F-Curve Modifier Drawing */
 
 /* Envelope -------------- */
@@ -258,22 +278,20 @@
 /* helper func - set color to draw F-Curve data with */
 static void set_fcurve_vertex_color (SpaceIpo *sipo, FCurve *fcu, short sel)
 {
-#if 0
-               if (sipo->showkey) {
-                       if (sel) UI_ThemeColor(TH_TEXT_HI);
-                       else UI_ThemeColor(TH_TEXT);
-               } 
-#endif
-               if ((fcu->flag & FCURVE_PROTECTED)==0) {
-                       /* Curve's points are being edited */
-                       if (sel) UI_ThemeColor(TH_VERTEX_SELECT); 
-                       else UI_ThemeColor(TH_VERTEX);
-               } 
-               else {
-                       /* Curve's points cannot be edited */
-                       if (sel) UI_ThemeColor(TH_TEXT_HI);
-                       else UI_ThemeColor(TH_TEXT);
-               }
+       /* Fade the 'intensity' of the vertices based on the selection of the 
curves too */
+       int alphaOffset= (int)((drawFCurveFade(fcu) - 1.0f) * 255);
+       
+       /* Set color of curve vertex based on state of curve (i.e. 'Edit' Mode) 
*/
+       if ((fcu->flag & FCURVE_PROTECTED)==0) {
+               /* Curve's points ARE BEING edited */
+               if (sel) UI_ThemeColorShadeAlpha(TH_VERTEX_SELECT, 0, 
alphaOffset); 
+               else UI_ThemeColorShadeAlpha(TH_VERTEX, 0, alphaOffset);
+       } 
+       else {
+               /* Curve's points CANNOT BE edited */
+               if (sel) UI_ThemeColorShadeAlpha(TH_TEXT_HI, 0, alphaOffset);
+               else UI_ThemeColorShadeAlpha(TH_TEXT, 0, alphaOffset);
+       }
 }
 
 
@@ -322,7 +340,7 @@
        if ((sipo->flag & SIPO_NOHANDLES) || (fcu->flag & FCURVE_PROTECTED) || 
(fcu->flag & FCURVE_INT_VALUES))
                return;
        
-       /* slightly hacky, but we want to draw unselected points before 
selected ones*/
+       /* slightly hacky, but we want to draw unselected points before 
selected ones */
        for (sel= 0; sel < 2; sel++) {
                BezTriple *bezt=fcu->bezt, *prevbezt=NULL;
                float *fp;
@@ -337,7 +355,7 @@
                                /* only draw first handle if previous segment 
had handles */
                                if ( (!prevbezt && (bezt->ipo==BEZT_IPO_BEZ)) 
|| (prevbezt && (prevbezt->ipo==BEZT_IPO_BEZ)) ) 
                                {
-                                       cpack(col[(unsigned char)bezt->h1]);
+                                       cpackA(col[(unsigned char)bezt->h1], 
drawFCurveFade(fcu));
                                        glBegin(GL_LINE_STRIP); 
                                                glVertex2fv(fp); 
glVertex2fv(fp+3); 
                                        glEnd();
@@ -347,7 +365,7 @@
                                /* only draw second handle if this segment is 
bezier */
                                if (bezt->ipo == BEZT_IPO_BEZ) 
                                {
-                                       cpack(col[(unsigned char)bezt->h2]);
+                                       cpackA(col[(unsigned char)bezt->h2], 
drawFCurveFade(fcu));
                                        glBegin(GL_LINE_STRIP); 
                                                glVertex2fv(fp+3); 
glVertex2fv(fp+6); 
                                        glEnd();
@@ -359,7 +377,7 @@
                                         ( (!prevbezt && 
(bezt->ipo==BEZT_IPO_BEZ)) || (prevbezt && (prevbezt->ipo==BEZT_IPO_BEZ)) ) ) 
                                {
                                        fp= bezt->vec[0];
-                                       cpack(col[(unsigned char)bezt->h1]);
+                                       cpackA(col[(unsigned char)bezt->h1], 
drawFCurveFade(fcu));
                                        
                                        glBegin(GL_LINE_STRIP); 
                                                glVertex2fv(fp); 
glVertex2fv(fp+3); 
@@ -371,7 +389,7 @@
                                         (bezt->ipo == BEZT_IPO_BEZ) )
                                {
                                        fp= bezt->vec[1];
-                                       cpack(col[(unsigned char)bezt->h2]);
+                                       cpackA(col[(unsigned char)bezt->h2], 
drawFCurveFade(fcu));
                                        
                                        glBegin(GL_LINE_STRIP); 
                                                glVertex2fv(fp); 
glVertex2fv(fp+3); 
@@ -410,7 +428,6 @@
        glScalef(1.0f/xscale*hsize, 1.0f/yscale*hsize, 1.0f);
        
        /* anti-aliased lines for more consistent appearance */
-               // XXX needed here?
        glEnable(GL_LINE_SMOOTH);
        glEnable(GL_BLEND);
        
@@ -506,7 +523,6 @@
 }
 
 /* helper func - draw a samples-based F-Curve */
-// TODO: add offset stuff...
 static void draw_fcurve_curve_samples (FCurve *fcu, View2D *v2d)
 {
        FPoint *prevfpt= fcu->fpt;
@@ -647,7 +663,7 @@
                         */
                        
                        /* resol not depending on horizontal resolution 
anymore, drivers for example... */
-                       // XXX need to take into account the scale
+                       // TODO: would be nice to make this depend on the scale 
of the graph too...
                        if (fcu->driver) 
                                resol= 32;
                        else 
@@ -809,7 +825,7 @@
                                /* set whatever color the curve has set 
                                 *      - unselected curves draw less opaque to 
help distinguish the selected ones
                                 */
-                               glColor4f(fcu->color[0], fcu->color[1], 
fcu->color[2], ((sel) ? 1.0f : 0.5f));
+                               glColor4f(fcu->color[0], fcu->color[1], 
fcu->color[2], drawFCurveFade(fcu));
                        }
                        
                        /* anti-aliased lines for less jagged appearance */
@@ -842,6 +858,9 @@
                 *      - if the option to only show controls if the F-Curve is 
selected is enabled, we must obey this
                 */
                if (!(sipo->flag & SIPO_SELCUVERTSONLY) || (fcu->flag & 
FCURVE_SELECTED)) {
+                       /* enable blending to allow fading of curves */
+                       glEnable(GL_BLEND);
+                       
                        if (fcurve_needs_draw_fmodifier_controls(fcu, fcm)) {
                                /* only draw controls if this is the active 
modifier */
                                if ((fcu->flag & FCURVE_ACTIVE) && (fcm)) {
@@ -863,6 +882,9 @@
                                        draw_fcurve_samples(sipo, ar, fcu);
                                }
                        }
+                       
+                       /* restore settings */
+                       glDisable(GL_BLEND);
                }
                
                /* undo mapping of keyframes for drawing if scaled F-Curve */

Modified: trunk/blender/source/blender/editors/space_graph/graph_select.c
===================================================================
--- trunk/blender/source/blender/editors/space_graph/graph_select.c     
2009-09-25 10:24:42 UTC (rev 23481)
+++ trunk/blender/source/blender/editors/space_graph/graph_select.c     
2009-09-25 10:52:29 UTC (rev 23482)
@@ -142,9 +142,13 @@
                /* Keyframes First */
                ANIM_fcurve_keys_bezier_loop(&bed, ale->key_data, NULL, sel_cb, 
NULL);
                
-               /* deactivate the F-Curve, and deselect if deselecting 
keyframes */
+               /* deactivate the F-Curve, and deselect if deselecting 
keyframes.
+                * otherwise select the F-Curve too since we've selected all 
the keyframes
+                */
                if (sel == SELECT_SUBTRACT) 
                        fcu->flag &= ~FCURVE_SELECTED;
+               else
+                       fcu->flag |= FCURVE_SELECTED;
                fcu->flag &= ~FCURVE_ACTIVE;
        }
        
@@ -259,8 +263,9 @@
                /* select the curve too 
                 * NOTE: this should really only happen if the curve got 
touched...
                 */
-               if (selectmode == SELECT_ADD)
+               if (selectmode == SELECT_ADD) {
                        fcu->flag |= FCURVE_SELECTED;
+               }
        }
        
        /* cleanup */


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

Reply via email to