Animation Editors: Visibility Toggles for Datablocks now work
authorJoshua Leung <aligorith@gmail.com>
Sun, 16 Aug 2009 02:43:06 +0000 (02:43 +0000)
committerJoshua Leung <aligorith@gmail.com>
Sun, 16 Aug 2009 02:43:06 +0000 (02:43 +0000)
source/blender/editors/animation/anim_channels_defines.c
source/blender/editors/animation/anim_filter.c

index c6e1dffbb30138221655d05cbfa2cf309dc36d02..25e3c112389a3fbde9ce6f1c4dbe0b5eddac01fa 100644 (file)
@@ -1903,10 +1903,6 @@ void ANIM_channel_draw (bAnimContext *ac, bAnimListElem *ale, float yminc, float
        else
                selected= 0;
        
-       /* enable correct blending mode for icons to work... */
-       glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
-       glEnable(GL_BLEND);
-       
        /* step 1) draw backdrop ...........................................  */
        if (acf->draw_backdrop)
                acf->draw_backdrop(ac, ale, yminc, ymaxc);
@@ -1954,8 +1950,6 @@ void ANIM_channel_draw (bAnimContext *ac, bAnimListElem *ale, float yminc, float
                }
        }
        
-       glDisable(GL_BLEND); /* End of blending with background (text now gets drawn) */
-       
        /* step 5) draw name ............................................... */
        if (acf->name) {
                char name[256]; /* hopefully this will be enough! */
@@ -1981,10 +1975,6 @@ void ANIM_channel_draw (bAnimContext *ac, bAnimListElem *ale, float yminc, float
        // TODO: when drawing sliders, make those draw instead of these toggles if not enough space
        
        if (v2d) {
-               /* set blending again, as text drawing may clear it */
-               glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
-               glEnable(GL_BLEND);
-               
                /* protect... */
                if (acf->has_setting(ac, ale, ACHANNEL_SETTING_PROTECT)) {
                        /* just skip - drawn as widget now */
@@ -1995,8 +1985,6 @@ void ANIM_channel_draw (bAnimContext *ac, bAnimListElem *ale, float yminc, float
                        /* just skip - drawn as widget now */
                        offset += ICON_WIDTH;
                }
-               
-               glDisable(GL_BLEND); /* End of blending with background */
        }
 }
 
@@ -2058,7 +2046,11 @@ static void draw_setting_widget (bAnimContext *ac, bAnimListElem *ale, bAnimChan
                case ACHANNEL_SETTING_MUTE: /* muted eye */
                        //icon= ((enabled)? ICON_MUTE_IPO_ON : ICON_MUTE_IPO_OFF);
                        icon= ICON_MUTE_IPO_OFF;
-                       tooltip= "Do channel(s) contribute to result."; // XXX
+                       
+                       if (ale->type == ALE_FCURVE) 
+                               tooltip= "Does F-Curve contribute to result.";
+                       else
+                               tooltip= "Do channels contribute to result.";
                        break;
                        
                default:
index 4797c7946a423d248440d6904bb2dfc2a0d9ca09..37c8aeac13a0507afb58be3c7487cae313e78fef 100644 (file)
@@ -374,27 +374,29 @@ short ANIM_animdata_get_context (const bContext *C, bAnimContext *ac)
  */
 #define ANIMDATA_FILTER_CASES(id, adtOk, nlaOk, driversOk, keysOk) \
        {\
-               if (filter_mode & ANIMFILTER_ANIMDATA) {\
-                       if ((id)->adt) {\
-                               adtOk\
-                       }\
-               }\
-               else if (ads->filterflag & ADS_FILTER_ONLYNLA) {\
-                       if (ANIMDATA_HAS_NLA(id)) {\
-                               nlaOk\
-                       }\
-                       else if (!(ads->filterflag & ADS_FILTER_NLA_NOACT) && ANIMDATA_HAS_KEYS(id)) {\
-                               nlaOk\
-                       }\
-               }\
-               else if (ads->filterflag & ADS_FILTER_ONLYDRIVERS) {\
-                       if (ANIMDATA_HAS_DRIVERS(id)) {\
-                               driversOk\
-                       }\
-               }\
-               else {\
-                       if (ANIMDATA_HAS_KEYS(id)) {\
-                               keysOk\
+               if ((id)->adt) {\
+                       if (!(filter_mode & ANIMFILTER_CURVEVISIBLE) || !((id)->adt->flag & ADT_CURVES_NOT_VISIBLE)) {\
+                               if (filter_mode & ANIMFILTER_ANIMDATA) {\
+                                       adtOk\
+                               }\
+                               else if (ads->filterflag & ADS_FILTER_ONLYNLA) {\
+                                       if (ANIMDATA_HAS_NLA(id)) {\
+                                               nlaOk\
+                                       }\
+                                       else if (!(ads->filterflag & ADS_FILTER_NLA_NOACT) && ANIMDATA_HAS_KEYS(id)) {\
+                                               nlaOk\
+                                       }\
+                               }\
+                               else if (ads->filterflag & ADS_FILTER_ONLYDRIVERS) {\
+                                       if (ANIMDATA_HAS_DRIVERS(id)) {\
+                                               driversOk\
+                                       }\
+                               }\
+                               else {\
+                                       if (ANIMDATA_HAS_KEYS(id)) {\
+                                               keysOk\
+                                       }\
+                               }\
                        }\
                }\
        }
@@ -1465,6 +1467,14 @@ static int animdata_filter_dopesheet (ListBase *anim_data, bDopeSheet *ads, int
                                worOk= !(ads->filterflag & ADS_FILTER_NOWOR);)
                }
                
+               /* if only F-Curves with visible flags set can be shown, check that 
+                * datablocks haven't been set to invisible 
+                */
+               if (filter_mode & ANIMFILTER_CURVEVISIBLE) {
+                       if ((sce->adt) && (sce->adt->flag & ADT_CURVES_NOT_VISIBLE))
+                               sceOk= worOk= 0;
+               }
+               
                /* check if not all bad (i.e. so there is something to show) */
                if ( !(!sceOk && !worOk) ) {
                        /* add scene data to the list of filtered channels */
@@ -1481,7 +1491,7 @@ static int animdata_filter_dopesheet (ListBase *anim_data, bDopeSheet *ads, int
                        Key *key= ob_get_key(ob);
                        short actOk=1, keyOk=1, dataOk=1, matOk=1, partOk=1;
                        
-                       /* firstly, check if object can be included, by the following fanimors:
+                       /* firstly, check if object can be included, by the following factors:
                         *      - if only visible, must check for layer and also viewport visibility
                         *      - if only selected, must check if object is selected 
                         *      - there must be animation data to edit
@@ -1495,6 +1505,14 @@ static int animdata_filter_dopesheet (ListBase *anim_data, bDopeSheet *ads, int
                                if (ob->restrictflag & OB_RESTRICT_VIEW) continue;
                        }
                        
+                       /* if only F-Curves with visible flags set can be shown, check that 
+                        * datablock hasn't been set to invisible 
+                        */
+                       if (filter_mode & ANIMFILTER_CURVEVISIBLE) {
+                               if ((ob->adt) && (ob->adt->flag & ADT_CURVES_NOT_VISIBLE))
+                                       continue;
+                       }
+                       
                        /* additionally, dopesheet filtering also affects what objects to consider */
                        if (ads->filterflag) {
                                /* check selection and object type filters */