Holiday coding log :)
[blender.git] / source / blender / editors / include / ED_anim_api.h
index f4d922dba3ca33683d528a7b4283d40aa908be71..551d3041398525f1cfbf4a85e570fcf8179e1761 100644 (file)
@@ -89,15 +89,16 @@ typedef struct bAnimContext {
 
 /* Main Data container types */
 typedef enum eAnimCont_Types {
-       ANIMCONT_NONE = 0,      /* invalid or no data */
-       ANIMCONT_ACTION,        /* action (bAction) */
-       ANIMCONT_SHAPEKEY,      /* shapekey (Key) */
-       ANIMCONT_GPENCIL,       /* grease pencil (screen) */
-       ANIMCONT_DOPESHEET,     /* dopesheet (bDopesheet) */
-       ANIMCONT_FCURVES,       /* animation F-Curves (bDopesheet) */
-       ANIMCONT_DRIVERS,       /* drivers (bDopesheet) */
-       ANIMCONT_NLA,           /* nla (bDopesheet) */
-       ANIMCONT_CHANNEL        /* animation channel (bAnimListElem) */
+       ANIMCONT_NONE      = 0, /* invalid or no data */
+       ANIMCONT_ACTION    = 1, /* action (bAction) */
+       ANIMCONT_SHAPEKEY  = 2, /* shapekey (Key) */
+       ANIMCONT_GPENCIL   = 3, /* grease pencil (screen) */
+       ANIMCONT_DOPESHEET = 4, /* dopesheet (bDopesheet) */
+       ANIMCONT_FCURVES   = 5, /* animation F-Curves (bDopesheet) */
+       ANIMCONT_DRIVERS   = 6, /* drivers (bDopesheet) */
+       ANIMCONT_NLA       = 7, /* nla (bDopesheet) */
+       ANIMCONT_CHANNEL   = 8, /* animation channel (bAnimListElem) */
+       ANIMCONT_MASK      = 9  /* mask dopesheet */
 } eAnimCont_Types;
 
 /* --------------- Channels -------------------- */
@@ -160,6 +161,9 @@ typedef enum eAnim_ChannelType {
        
        ANIMTYPE_GPDATABLOCK,
        ANIMTYPE_GPLAYER,
+
+       ANIMTYPE_MASKDATABLOCK,
+       ANIMTYPE_MASKLAYER,
        
        ANIMTYPE_NLATRACK,
        ANIMTYPE_NLAACTION,
@@ -173,6 +177,7 @@ typedef enum eAnim_KeyType {
        ALE_NONE = 0,       /* no keyframe data */
        ALE_FCURVE,         /* F-Curve */
        ALE_GPFRAME,        /* Grease Pencil Frames */
+       ALE_MASKLAY,        /* Mask */
        ALE_NLASTRIP,       /* NLA Strips */
 
        ALE_ALL,            /* All channels summary */
@@ -227,28 +232,28 @@ typedef enum eAnimFilter_Flags {
 
 /* Dopesheet only */
 /* 'Scene' channels */
-#define SEL_SCEC(sce) ((sce->flag & SCE_DS_SELECTED))
-#define EXPANDED_SCEC(sce) ((sce->flag & SCE_DS_COLLAPSED) == 0)
+#define SEL_SCEC(sce) (CHECK_TYPE_INLINE(sce, Scene), ((sce->flag & SCE_DS_SELECTED)))
+#define EXPANDED_SCEC(sce) (CHECK_TYPE_INLINE(sce, Scene), ((sce->flag & SCE_DS_COLLAPSED) == 0))
 /* 'Sub-Scene' channels (flags stored in Data block) */
-#define FILTER_WOR_SCED(wo) ((wo->flag & WO_DS_EXPAND))
+#define FILTER_WOR_SCED(wo) (CHECK_TYPE_INLINE(wo, World), (wo->flag & WO_DS_EXPAND))
 /* 'Object' channels */
-#define SEL_OBJC(base) ((base->flag & SELECT))
-#define EXPANDED_OBJC(ob) ((ob->nlaflag & OB_ADS_COLLAPSED) == 0)
+#define SEL_OBJC(base)          (CHECK_TYPE_INLINE(base, Base), ((base->flag & SELECT)))
+#define EXPANDED_OBJC(ob)       (CHECK_TYPE_INLINE(ob, Object), ((ob->nlaflag & OB_ADS_COLLAPSED) == 0))
 /* 'Sub-object' channels (flags stored in Data block) */
-#define FILTER_SKE_OBJD(key) ((key->flag & KEY_DS_EXPAND))
-#define FILTER_MAT_OBJD(ma) ((ma->flag & MA_DS_EXPAND))
-#define FILTER_LAM_OBJD(la) ((la->flag & LA_DS_EXPAND))
-#define FILTER_CAM_OBJD(ca) ((ca->flag & CAM_DS_EXPAND))
-#define FILTER_CUR_OBJD(cu) ((cu->flag & CU_DS_EXPAND))
-#define FILTER_PART_OBJD(part) ((part->flag & PART_DS_EXPAND))
-#define FILTER_MBALL_OBJD(mb) ((mb->flag2 & MB_DS_EXPAND))
-#define FILTER_ARM_OBJD(arm) ((arm->flag & ARM_DS_EXPAND))
-#define FILTER_MESH_OBJD(me) ((me->flag & ME_DS_EXPAND))
-#define FILTER_LATTICE_OBJD(lt) ((lt->flag & LT_DS_EXPAND))
-#define FILTER_SPK_OBJD(spk) ((spk->flag & SPK_DS_EXPAND))
+#define FILTER_SKE_OBJD(key)    (CHECK_TYPE_INLINE(key, Key), ((key->flag & KEY_DS_EXPAND)))
+#define FILTER_MAT_OBJD(ma)     (CHECK_TYPE_INLINE(ma, Material), ((ma->flag & MA_DS_EXPAND)))
+#define FILTER_LAM_OBJD(la)     (CHECK_TYPE_INLINE(la, Lamp), ((la->flag & LA_DS_EXPAND)))
+#define FILTER_CAM_OBJD(ca)     (CHECK_TYPE_INLINE(ca, Camera), ((ca->flag & CAM_DS_EXPAND)))
+#define FILTER_CUR_OBJD(cu)     (CHECK_TYPE_INLINE(cu, Curve), ((cu->flag & CU_DS_EXPAND)))
+#define FILTER_PART_OBJD(part)  (CHECK_TYPE_INLINE(part, ParticleSettings), ((part->flag & PART_DS_EXPAND)))
+#define FILTER_MBALL_OBJD(mb)   (CHECK_TYPE_INLINE(mb, MetaBall), ((mb->flag2 & MB_DS_EXPAND)))
+#define FILTER_ARM_OBJD(arm)    (CHECK_TYPE_INLINE(arm, bArmature), ((arm->flag & ARM_DS_EXPAND)))
+#define FILTER_MESH_OBJD(me)    (CHECK_TYPE_INLINE(me, Mesh), ((me->flag & ME_DS_EXPAND)))
+#define FILTER_LATTICE_OBJD(lt) (CHECK_TYPE_INLINE(lt, Lattice), ((lt->flag & LT_DS_EXPAND)))
+#define FILTER_SPK_OBJD(spk)    (CHECK_TYPE_INLINE(spk, Speaker), ((spk->flag & SPK_DS_EXPAND)))
 /* Variable use expanders */
-#define FILTER_NTREE_DATA(ntree) ((ntree->flag & NTREE_DS_EXPAND))
-#define FILTER_TEX_DATA(tex) ((tex->flag & TEX_DS_EXPAND))
+#define FILTER_NTREE_DATA(ntree) (CHECK_TYPE_INLINE(ntree, bNodeTree), ((ntree->flag & NTREE_DS_EXPAND)))
+#define FILTER_TEX_DATA(tex)     (CHECK_TYPE_INLINE(tex, Tex), ((tex->flag & TEX_DS_EXPAND)))
 
 /* 'Sub-object/Action' channels (flags stored in Action) */
 #define SEL_ACTC(actc) ((actc->flag & ACT_SELECTED))
@@ -279,6 +284,15 @@ typedef enum eAnimFilter_Flags {
 #define EDITABLE_GPL(gpl) ((gpl->flag & GP_LAYER_LOCKED) == 0)
 #define SEL_GPL(gpl) (gpl->flag & GP_LAYER_SELECT)
 
+/* Mask Only */
+/* Grease Pencil datablock settings */
+#define EXPANDED_MASK(mask) (mask->flag & MASK_ANIMF_EXPAND)
+/* Grease Pencil Layer settings */
+#define EDITABLE_MASK(masklay) ((masklay->flag & MASK_LAYERFLAG_LOCKED) == 0)
+#define SEL_MASKLAY(masklay) (masklay->flag & SELECT)
+
+
+
 /* NLA only */
 #define SEL_NLT(nlt) (nlt->flag & NLATRACK_SELECTED)
 #define EDITABLE_NLT(nlt) ((nlt->flag & NLATRACK_PROTECTED) == 0)
@@ -286,34 +300,34 @@ typedef enum eAnimFilter_Flags {
 /* -------------- Channel Defines -------------- */
 
 /* channel heights */
-#define ACHANNEL_FIRST          -16
-#define ACHANNEL_HEIGHT         16
-#define ACHANNEL_HEIGHT_HALF    8
-#define ACHANNEL_SKIP           2
+#define ACHANNEL_FIRST          (-0.8f * U.widget_unit)
+#define ACHANNEL_HEIGHT         (0.8f * U.widget_unit)
+#define ACHANNEL_HEIGHT_HALF    (0.4f * U.widget_unit)
+#define ACHANNEL_SKIP           (0.1f * U.widget_unit)
 #define ACHANNEL_STEP           (ACHANNEL_HEIGHT + ACHANNEL_SKIP)
 
 /* channel widths */
-#define ACHANNEL_NAMEWIDTH      200
+#define ACHANNEL_NAMEWIDTH      (10 * U.widget_unit)
 
 /* channel toggle-buttons */
-#define ACHANNEL_BUTTON_WIDTH   16
+#define ACHANNEL_BUTTON_WIDTH   (0.8f * U.widget_unit)
 
 
 /* -------------- NLA Channel Defines -------------- */
 
 /* NLA channel heights */
 // XXX: NLACHANNEL_FIRST isn't used?
-#define NLACHANNEL_FIRST                -16
-#define NLACHANNEL_HEIGHT(snla)         ((snla && (snla->flag & SNLA_NOSTRIPCURVES)) ? 16 : 24)
-#define NLACHANNEL_HEIGHT_HALF(snla)    ((snla && (snla->flag & SNLA_NOSTRIPCURVES)) ?  8 : 12)
-#define NLACHANNEL_SKIP                 2
+#define NLACHANNEL_FIRST                (-0.8f * U.widget_unit)
+#define NLACHANNEL_HEIGHT(snla)         ((snla && (snla->flag & SNLA_NOSTRIPCURVES)) ? (0.8f * U.widget_unit) : (1.2f * U.widget_unit))
+#define NLACHANNEL_HEIGHT_HALF(snla)    ((snla && (snla->flag & SNLA_NOSTRIPCURVES)) ? (0.4f * U.widget_unit) : (0.6f * U.widget_unit))
+#define NLACHANNEL_SKIP                 (0.1f * U.widget_unit)
 #define NLACHANNEL_STEP(snla)           (NLACHANNEL_HEIGHT(snla) + NLACHANNEL_SKIP)
 
 /* channel widths */
-#define NLACHANNEL_NAMEWIDTH        200
+#define NLACHANNEL_NAMEWIDTH                   (10 * U.widget_unit)
 
 /* channel toggle-buttons */
-#define NLACHANNEL_BUTTON_WIDTH 16
+#define NLACHANNEL_BUTTON_WIDTH                        (0.8f * U.widget_unit)
 
 /* ---------------- API  -------------------- */
 
@@ -341,20 +355,20 @@ short ANIM_animdata_context_getdata(bAnimContext *ac);
 
 /* flag-setting behavior */
 typedef enum eAnimChannels_SetFlag {
-       ACHANNEL_SETFLAG_CLEAR = 0,     /* turn off */
-       ACHANNEL_SETFLAG_ADD,           /* turn on */
-       ACHANNEL_SETFLAG_INVERT,        /* on->off, off->on */
-       ACHANNEL_SETFLAG_TOGGLE         /* some on -> all off // all on */
+       ACHANNEL_SETFLAG_CLEAR  = 0,     /* turn off */
+       ACHANNEL_SETFLAG_ADD    = 1,     /* turn on */
+       ACHANNEL_SETFLAG_INVERT = 2,     /* on->off, off->on */
+       ACHANNEL_SETFLAG_TOGGLE = 3      /* some on -> all off // all on */
 } eAnimChannels_SetFlag;
 
 /* types of settings for AnimChannels */
 typedef enum eAnimChannel_Settings {
-       ACHANNEL_SETTING_SELECT = 0,
-       ACHANNEL_SETTING_PROTECT,           // warning: for drawing UI's, need to check if this is off (maybe inverse this later)
-       ACHANNEL_SETTING_MUTE,
-       ACHANNEL_SETTING_EXPAND,
-       ACHANNEL_SETTING_VISIBLE,           /* only for Graph Editor */
-       ACHANNEL_SETTING_SOLO               /* only for NLA Tracks */
+       ACHANNEL_SETTING_SELECT   = 0,
+       ACHANNEL_SETTING_PROTECT  = 1, /* warning: for drawing UI's, need to check if this is off (maybe inverse this later) */
+       ACHANNEL_SETTING_MUTE     = 2,
+       ACHANNEL_SETTING_EXPAND   = 3,
+       ACHANNEL_SETTING_VISIBLE  = 4,  /* only for Graph Editor */
+       ACHANNEL_SETTING_SOLO     = 5   /* only for NLA Tracks */
 } eAnimChannel_Settings;
 
 
@@ -509,7 +523,7 @@ short ANIM_fmodifiers_paste_from_buf(ListBase *modifiers, short replace);
 int getname_anim_fcurve(char *name, struct ID *id, struct FCurve *fcu);
 
 /* Automatically determine a color for the nth F-Curve */
-void getcolor_fcurve_rainbow(int cur, int tot, float *out);
+void getcolor_fcurve_rainbow(int cur, int tot, float out[3]);
 
 /* ----------------- NLA-Mapping ----------------------- */
 /* anim_draw.c */