Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source/blender/blenkernel/BKE_fcurve.h3
-rw-r--r--source/blender/blenkernel/intern/fcurve.c13
-rw-r--r--source/blender/editors/animation/anim_ops.c2
-rw-r--r--source/blender/editors/animation/keyframing.c128
-rw-r--r--source/blender/editors/include/ED_keyframing.h5
-rw-r--r--source/blender/editors/include/UI_interface.h6
-rw-r--r--source/blender/editors/interface/interface.c4
-rw-r--r--source/blender/editors/interface/interface_anim.c121
-rw-r--r--source/blender/editors/interface/interface_handlers.c18
-rw-r--r--source/blender/editors/interface/interface_intern.h6
-rw-r--r--source/blender/editors/interface/interface_layout.c2
-rw-r--r--source/blender/editors/interface/interface_panel.c7
-rw-r--r--source/blender/editors/interface/interface_widgets.c75
-rw-r--r--source/blender/editors/space_buttons/space_buttons.c4
14 files changed, 382 insertions, 12 deletions
diff --git a/source/blender/blenkernel/BKE_fcurve.h b/source/blender/blenkernel/BKE_fcurve.h
index 9503c569e8b..63ecc9d548a 100644
--- a/source/blender/blenkernel/BKE_fcurve.h
+++ b/source/blender/blenkernel/BKE_fcurve.h
@@ -116,6 +116,9 @@ void copy_fcurves(ListBase *dst, ListBase *src);
/* find matching F-Curve in the given list of F-Curves */
struct FCurve *list_find_fcurve(ListBase *list, const char rna_path[], const int array_index);
+/* test if there is a keyframe at cfra */
+int on_keyframe_fcurve(struct FCurve *fcu, float cfra);
+
/* get the time extents for F-Curve */
void calc_fcurve_range(struct FCurve *fcu, float *min, float *max);
diff --git a/source/blender/blenkernel/intern/fcurve.c b/source/blender/blenkernel/intern/fcurve.c
index 3fa9457d86e..acdaec63c3b 100644
--- a/source/blender/blenkernel/intern/fcurve.c
+++ b/source/blender/blenkernel/intern/fcurve.c
@@ -171,6 +171,19 @@ FCurve *list_find_fcurve (ListBase *list, const char rna_path[], const int array
return NULL;
}
+int on_keyframe_fcurve(FCurve *fcu, float cfra)
+{
+ BezTriple *bezt;
+ int i;
+
+ bezt= fcu->bezt;
+ for (i=0; i<fcu->totvert; i++, bezt++)
+ if(IS_EQ(bezt->vec[1][0], cfra))
+ return 1;
+
+ return 0;
+}
+
/* Calculate the extents of F-Curve's data */
void calc_fcurve_bounds (FCurve *fcu, float *xmin, float *xmax, float *ymin, float *ymax)
{
diff --git a/source/blender/editors/animation/anim_ops.c b/source/blender/editors/animation/anim_ops.c
index 15a4babf90a..991349d3ed8 100644
--- a/source/blender/editors/animation/anim_ops.c
+++ b/source/blender/editors/animation/anim_ops.c
@@ -382,6 +382,8 @@ void ED_operatortypes_anim(void)
WM_operatortype_append(ANIM_OT_delete_keyframe);
WM_operatortype_append(ANIM_OT_insert_keyframe_menu);
//WM_operatortype_append(ANIM_OT_delete_keyframe_menu);
+ WM_operatortype_append(ANIM_OT_insert_keyframe_button);
+ WM_operatortype_append(ANIM_OT_delete_keyframe_button);
WM_operatortype_append(ANIM_OT_delete_keyframe_old); // xxx remove?
WM_operatortype_append(ANIM_OT_keyingset_add_new);
diff --git a/source/blender/editors/animation/keyframing.c b/source/blender/editors/animation/keyframing.c
index 0206de12c82..17b1794765a 100644
--- a/source/blender/editors/animation/keyframing.c
+++ b/source/blender/editors/animation/keyframing.c
@@ -2367,6 +2367,134 @@ void ANIM_OT_delete_keyframe_old (wmOperatorType *ot)
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
}
+
+/* Insert Key Button Operator ------------------------ */
+
+static int insert_key_button_exec (bContext *C, wmOperator *op)
+{
+ Scene *scene= CTX_data_scene(C);
+ PointerRNA ptr;
+ PropertyRNA *prop;
+ char *path;
+ float cfra= (float)CFRA; // XXX for now, don't bother about all the yucky offset crap
+ short success= 0;
+ int a, index, length, all= RNA_boolean_get(op->ptr, "all");
+
+ /* try to insert keyframe using property retrieved from UI */
+ uiAnimContextProperty(C, &ptr, &prop, &index);
+
+ if(ptr.data && prop && RNA_property_animateable(ptr.data, prop)) {
+ path= RNA_path_from_ID_to_property(&ptr, prop);
+
+ if(path) {
+ if(all) {
+ length= RNA_property_array_length(&ptr, prop);
+
+ if(length) index= 0;
+ else length= 1;
+ }
+ else
+ length= 1;
+
+ for(a=0; a<length; a++)
+ success+= insertkey(ptr.id.data, NULL, path, index+a, cfra, 0);
+
+ MEM_freeN(path);
+ }
+ }
+
+ if(success) {
+ /* send updates */
+ ED_anim_dag_flush_update(C);
+
+ /* for now, only send ND_KEYS for KeyingSets */
+ WM_event_add_notifier(C, ND_KEYS, NULL);
+ }
+
+ return (success)? OPERATOR_FINISHED: OPERATOR_CANCELLED;
+}
+
+void ANIM_OT_insert_keyframe_button (wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name= "Insert Keyframe";
+ ot->idname= "ANIM_OT_insert_keyframe_button";
+
+ /* callbacks */
+ ot->exec= insert_key_button_exec;
+ ot->poll= modify_key_op_poll;
+
+ /* flags */
+ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+
+ /* properties */
+ RNA_def_boolean(ot->srna, "all", 1, "All", "Insert a keyframe for all element of the array.");
+}
+
+/* Delete Key Button Operator ------------------------ */
+
+static int delete_key_button_exec (bContext *C, wmOperator *op)
+{
+ Scene *scene= CTX_data_scene(C);
+ PointerRNA ptr;
+ PropertyRNA *prop;
+ char *path;
+ float cfra= (float)CFRA; // XXX for now, don't bother about all the yucky offset crap
+ short success= 0;
+ int a, index, length, all= RNA_boolean_get(op->ptr, "all");
+
+ /* try to insert keyframe using property retrieved from UI */
+ uiAnimContextProperty(C, &ptr, &prop, &index);
+
+ if(ptr.data && prop) {
+ path= RNA_path_from_ID_to_property(&ptr, prop);
+
+ if(path) {
+ if(all) {
+ length= RNA_property_array_length(&ptr, prop);
+
+ if(length) index= 0;
+ else length= 1;
+ }
+ else
+ length= 1;
+
+ for(a=0; a<length; a++)
+ success+= deletekey(ptr.id.data, NULL, path, index+a, cfra, 0);
+
+ MEM_freeN(path);
+ }
+ }
+
+
+ if(success) {
+ /* send updates */
+ ED_anim_dag_flush_update(C);
+
+ /* for now, only send ND_KEYS for KeyingSets */
+ WM_event_add_notifier(C, ND_KEYS, NULL);
+ }
+
+ return (success)? OPERATOR_FINISHED: OPERATOR_CANCELLED;
+}
+
+void ANIM_OT_delete_keyframe_button (wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name= "Delete Keyframe";
+ ot->idname= "ANIM_OT_delete_keyframe_button";
+
+ /* callbacks */
+ ot->exec= delete_key_button_exec;
+ ot->poll= modify_key_op_poll;
+
+ /* flags */
+ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+
+ /* properties */
+ RNA_def_boolean(ot->srna, "all", 1, "All", "Delete keyfames from all elements of the array.");
+}
+
/* ******************************************* */
/* KEYFRAME DETECTION */
diff --git a/source/blender/editors/include/ED_keyframing.h b/source/blender/editors/include/ED_keyframing.h
index 16e0dbc8c35..5e4e0d4a44d 100644
--- a/source/blender/editors/include/ED_keyframing.h
+++ b/source/blender/editors/include/ED_keyframing.h
@@ -94,6 +94,11 @@ void ANIM_OT_insert_keyframe_menu(struct wmOperatorType *ot);
void ANIM_OT_delete_keyframe_menu(struct wmOperatorType *ot); // xxx unimplemented yet
void ANIM_OT_delete_keyframe_old(struct wmOperatorType *ot); // xxx rename and keep?
+/* Keyframe managment operators for UI buttons. */
+
+void ANIM_OT_insert_keyframe_button(struct wmOperatorType *ot);
+void ANIM_OT_delete_keyframe_button(struct wmOperatorType *ot);
+
/* ************ Auto-Keyframing ********************** */
/* Notes:
* - All the defines for this (User-Pref settings and Per-Scene settings)
diff --git a/source/blender/editors/include/UI_interface.h b/source/blender/editors/include/UI_interface.h
index 1509f2df652..5bba2d3fda0 100644
--- a/source/blender/editors/include/UI_interface.h
+++ b/source/blender/editors/include/UI_interface.h
@@ -131,6 +131,8 @@ typedef struct uiPopupBlockHandle uiPopupBlockHandle;
#define UI_BUT_DISABLED (1<<18)
/* dont draw hilite on mouse over */
#define UI_NO_HILITE (1<<19)
+#define UI_BUT_ANIMATED (1<<20)
+#define UI_BUT_ANIMATED_KEY (1<<21)
/* Button types, bits stored in 1 value... and a short even!
- bits 0-4: bitnr (0-31)
@@ -626,5 +628,9 @@ typedef void (*uiPanelCreateFunc)(const struct bContext *C, uiLayout *layout);
void uiRegionPanelLayout(const struct bContext *C, struct ARegion *ar, int vertical, char *context);
void uiRegionHeaderLayout(const struct bContext *C, struct ARegion *ar);
+/* Animation */
+
+void uiAnimContextProperty(const struct bContext *C, struct PointerRNA *ptr, struct PropertyRNA **prop, int *index);
+
#endif /* UI_INTERFACE_H */
diff --git a/source/blender/editors/interface/interface.c b/source/blender/editors/interface/interface.c
index aef0094db22..6f20d695e86 100644
--- a/source/blender/editors/interface/interface.c
+++ b/source/blender/editors/interface/interface.c
@@ -33,6 +33,7 @@
#include "DNA_ID.h"
#include "DNA_listBase.h"
+#include "DNA_scene_types.h"
#include "DNA_screen_types.h"
#include "DNA_texture_types.h"
#include "DNA_userdef_types.h"
@@ -591,6 +592,7 @@ void ui_menu_block_set_keymaps(const bContext *C, uiBlock *block)
void uiEndBlock(const bContext *C, uiBlock *block)
{
uiBut *but;
+ Scene *scene= CTX_data_scene(C);
/* inherit flags from 'old' buttons that was drawn here previous, based
* on matching buttons, we need this to make button event handling non
@@ -612,6 +614,8 @@ void uiEndBlock(const bContext *C, uiBlock *block)
/* only update soft range while not editing */
if(but->rnaprop && !(but->editval || but->editstr || but->editvec))
ui_set_but_soft_range(but, ui_get_but_val(but));
+
+ ui_but_anim_flag(but, (scene)? scene->r.cfra: 0.0f);
}
if(block->oldblock) {
diff --git a/source/blender/editors/interface/interface_anim.c b/source/blender/editors/interface/interface_anim.c
new file mode 100644
index 00000000000..75fe8331184
--- /dev/null
+++ b/source/blender/editors/interface/interface_anim.c
@@ -0,0 +1,121 @@
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "MEM_guardedalloc.h"
+
+#include "DNA_anim_types.h"
+#include "DNA_scene_types.h"
+#include "DNA_screen_types.h"
+
+#include "BLI_listbase.h"
+
+#include "BKE_animsys.h"
+#include "BKE_context.h"
+#include "BKE_fcurve.h"
+
+#include "RNA_access.h"
+#include "RNA_types.h"
+
+#include "UI_interface.h"
+
+#include "WM_api.h"
+#include "WM_types.h"
+
+#include "interface_intern.h"
+
+void ui_but_anim_flag(uiBut *but, float cfra)
+{
+ but->flag &= ~(UI_BUT_ANIMATED|UI_BUT_ANIMATED_KEY);
+
+ if(but->rnaprop && but->rnapoin.id.data) {
+ AnimData *adt= BKE_animdata_from_id(but->rnapoin.id.data);
+ FCurve *fcu;
+ char *path;
+
+ if(adt && adt->action && adt->action->curves.first) {
+ /* XXX this function call can become a performance bottleneck */
+ path= RNA_path_from_ID_to_property(&but->rnapoin, but->rnaprop);
+
+ if(path) {
+ fcu= list_find_fcurve(&adt->action->curves, path, but->rnaindex);
+
+ if(fcu) {
+ but->flag |= UI_BUT_ANIMATED;
+
+ if(on_keyframe_fcurve(fcu, cfra))
+ but->flag |= UI_BUT_ANIMATED_KEY;
+ }
+
+ MEM_freeN(path);
+ }
+ }
+ }
+}
+
+void uiAnimContextProperty(const bContext *C, struct PointerRNA *ptr, struct PropertyRNA **prop, int *index)
+{
+ ARegion *ar= CTX_wm_region(C);
+ uiBlock *block;
+ uiBut *but;
+
+ if(ar) {
+ for(block=ar->uiblocks.first; block; block=block->next) {
+ for(but=block->buttons.first; but; but= but->next) {
+ if(but->active && but->rnapoin.id.data) {
+ *ptr= but->rnapoin;
+ *prop= but->rnaprop;
+ *index= but->rnaindex;
+ return;
+ }
+ }
+ }
+ }
+}
+
+void ui_but_anim_insert_keyframe(bContext *C)
+{
+ /* this operator calls uiAnimContextProperty above */
+ WM_operator_name_call(C, "ANIM_OT_insert_keyframe_button", WM_OP_INVOKE_DEFAULT, NULL);
+}
+
+void ui_but_anim_delete_keyframe(bContext *C)
+{
+ /* this operator calls uiAnimContextProperty above */
+ WM_operator_name_call(C, "ANIM_OT_delete_keyframe_button", WM_OP_INVOKE_DEFAULT, NULL);
+}
+
+void ui_but_anim_menu(bContext *C, uiBut *but)
+{
+ uiMenuItem *head;
+ int length;
+
+ if(but->rnapoin.data && but->rnaprop) {
+ head= uiPupMenuBegin(RNA_property_ui_name(&but->rnapoin, but->rnaprop), 0);
+
+ length= RNA_property_array_length(&but->rnapoin, but->rnaprop);
+
+ if(but->flag & UI_BUT_ANIMATED_KEY) {
+ if(length) {
+ uiMenuItemBooleanO(head, "Delete Keyframes", 0, "ANIM_OT_delete_keyframe_button", "all", 1);
+ uiMenuItemBooleanO(head, "Delete Single Keyframe", 0, "ANIM_OT_delete_keyframe_button", "all", 0);
+ }
+ else {
+ uiMenuItemBooleanO(head, "Delete Keyframe", 0, "ANIM_OT_delete_keyframe_button", "all", 0);
+ }
+ }
+ else if(RNA_property_animateable(&but->rnapoin, but->rnaprop)) {
+ if(length) {
+ uiMenuItemBooleanO(head, "Insert Keyframes", 0, "ANIM_OT_insert_keyframe_button", "all", 1);
+ uiMenuItemBooleanO(head, "Insert Single Keyframe", 0, "ANIM_OT_insert_keyframe_button", "all", 0);
+ }
+ else {
+ uiMenuItemBooleanO(head, "Insert Keyframe", 0, "ANIM_OT_insert_keyframe_button", "all", 0);
+ }
+ }
+
+ uiPupMenuEnd(C, head);
+ }
+}
+
diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c
index c76f6a11b29..6fc0ad37ee3 100644
--- a/source/blender/editors/interface/interface_handlers.c
+++ b/source/blender/editors/interface/interface_handlers.c
@@ -2593,12 +2593,28 @@ static int ui_do_button(bContext *C, uiBlock *block, uiBut *but, wmEvent *event)
if(but->flag & UI_BUT_DISABLED)
return WM_UI_HANDLER_BREAK;
- /* handle copy-paste */
if(data->state == BUTTON_STATE_HIGHLIGHT) {
+ /* handle copy-paste */
if(ELEM(event->type, CKEY, VKEY) && event->val==KM_PRESS && (event->ctrl || event->oskey)) {
ui_but_copy_paste(C, but, data, (event->type == CKEY)? 'c': 'v');
return WM_UI_HANDLER_BREAK;
}
+ /* handle keyframeing */
+ else if(event->type == IKEY && event->val == KM_PRESS) {
+ if(event->alt)
+ ui_but_anim_delete_keyframe(C);
+ else
+ ui_but_anim_insert_keyframe(C);
+
+ ED_region_tag_redraw(CTX_wm_region(C));
+
+ return WM_UI_HANDLER_BREAK;
+ }
+ /* handle menu */
+ else if(event->type == RIGHTMOUSE && event->val == KM_PRESS) {
+ ui_but_anim_menu(C, but);
+ return WM_UI_HANDLER_BREAK;
+ }
}
/* verify if we can edit this button */
diff --git a/source/blender/editors/interface/interface_intern.h b/source/blender/editors/interface/interface_intern.h
index 0b415be84b2..ff185e9997c 100644
--- a/source/blender/editors/interface/interface_intern.h
+++ b/source/blender/editors/interface/interface_intern.h
@@ -350,5 +350,11 @@ extern void ui_button_active_cancel(const struct bContext *C, uiBut *but);
void ui_draw_anti_tria(float x1, float y1, float x2, float y2, float x3, float y3);
void ui_draw_menu_back(uiBlock *block);
+/* interface_anim.c */
+void ui_but_anim_flag(uiBut *but, float cfra);
+void ui_but_anim_insert_keyframe(struct bContext *C);
+void ui_but_anim_delete_keyframe(struct bContext *C);
+void ui_but_anim_menu(struct bContext *C, uiBut *but);
+
#endif
diff --git a/source/blender/editors/interface/interface_layout.c b/source/blender/editors/interface/interface_layout.c
index 11978f99e2b..31eab12021c 100644
--- a/source/blender/editors/interface/interface_layout.c
+++ b/source/blender/editors/interface/interface_layout.c
@@ -910,7 +910,7 @@ void uiLayoutEnd(const bContext *C, uiBlock *block, uiLayout *layout, int *x, in
ui_layout_free(layout);
}
-/* Utilities */
+/************************ Utilities ************************/
void uiRegionPanelLayout(const bContext *C, ARegion *ar, int vertical, char *context)
{
diff --git a/source/blender/editors/interface/interface_panel.c b/source/blender/editors/interface/interface_panel.c
index 2609bb9e2e4..ded1baa7747 100644
--- a/source/blender/editors/interface/interface_panel.c
+++ b/source/blender/editors/interface/interface_panel.c
@@ -115,12 +115,9 @@ static int panels_re_align(ScrArea *sa, ARegion *ar)
if(sa->spacetype==SPACE_BUTS && ar->regiontype == RGN_TYPE_WINDOW) {
SpaceButs *sbuts= sa->spacedata.first;
- if(sbuts->align) {
- if(sbuts->re_align || sbuts->mainbo!=sbuts->mainb || sbuts->tabo!=sbuts->tab[sbuts->mainb]) {
- sbuts->re_align= 0;
+ if(sbuts->align)
+ if(sbuts->re_align || sbuts->mainbo!=sbuts->mainb || sbuts->tabo!=sbuts->tab[sbuts->mainb])
return 1;
- }
- }
return 0;
}
diff --git a/source/blender/editors/interface/interface_widgets.c b/source/blender/editors/interface/interface_widgets.c
index 746c0858acf..783cc0468ae 100644
--- a/source/blender/editors/interface/interface_widgets.c
+++ b/source/blender/editors/interface/interface_widgets.c
@@ -91,6 +91,10 @@ typedef struct uiWidgetColors {
float outline[3];
float inner[4];
float inner_sel[4];
+ float inner_anim[4];
+ float inner_anim_sel[4];
+ float inner_key[4];
+ float inner_key_sel[4];
float item[3];
float text[3];
float text_sel[3];
@@ -805,8 +809,12 @@ static void widget_draw_text_icon(uiBut *but, rcti *rect, float *col)
/*
float outline[3];
- float inner[3];
- float inner_sel[3];
+ float inner[4];
+ float inner_sel[4];
+ float inner_anim[4];
+ float inner_anim_sel[4];
+ float inner_key[4];
+ float inner_key_sel[4];
float item[3];
float text[3];
float text_sel[3];
@@ -819,6 +827,10 @@ static struct uiWidgetColors wcol_num= {
{0.1f, 0.1f, 0.1f},
{0.7f, 0.7f, 0.7f, 1.0f},
{0.6f, 0.6f, 0.6f, 1.0f},
+ {0.45, 0.75, 0.3f, 1.0f},
+ {0.35, 0.65, 0.2f, 1.0f},
+ {0.95, 0.9, 0.4f, 1.0f},
+ {0.85, 0.8, 0.3f, 1.0f},
{0.35f, 0.35f, 0.35f},
{0.0f, 0.0f, 0.0f},
@@ -832,6 +844,10 @@ static struct uiWidgetColors wcol_numslider= {
{0.1f, 0.1f, 0.1f},
{0.7f, 0.7f, 0.7f, 1.0f},
{0.6f, 0.6f, 0.6f, 1.0f},
+ {0.45, 0.75, 0.3f, 1.0f},
+ {0.35, 0.65, 0.2f, 1.0f},
+ {0.95, 0.9, 0.4f, 1.0f},
+ {0.85, 0.8, 0.3f, 1.0f},
{0.5f, 0.5f, 0.5f},
{0.0f, 0.0f, 0.0f},
@@ -845,6 +861,10 @@ static struct uiWidgetColors wcol_text= {
{0.1f, 0.1f, 0.1f},
{0.6f, 0.6f, 0.6f, 1.0f},
{0.6f, 0.6f, 0.6f, 1.0f},
+ {0.45, 0.75, 0.3f, 1.0f},
+ {0.35, 0.65, 0.2f, 1.0f},
+ {0.95, 0.9, 0.4f, 1.0f},
+ {0.85, 0.8, 0.3f, 1.0f},
{0.35f, 0.35f, 0.35f},
{0.0f, 0.0f, 0.0f},
@@ -858,6 +878,10 @@ static struct uiWidgetColors wcol_option= {
{0.0f, 0.0f, 0.0f},
{0.25f, 0.25f, 0.25f, 1.0f},
{0.25f, 0.25f, 0.25f, 1.0f},
+ {0.45, 0.75, 0.3f, 1.0f},
+ {0.35, 0.65, 0.2f, 1.0f},
+ {0.95, 0.9, 0.4f, 1.0f},
+ {0.85, 0.8, 0.3f, 1.0f},
{1.0f, 1.0f, 1.0f},
{0.0f, 0.0f, 0.0f},
@@ -872,6 +896,10 @@ static struct uiWidgetColors wcol_menu= {
{0.0f, 0.0f, 0.0f},
{0.25f, 0.25f, 0.25f, 1.0f},
{0.25f, 0.25f, 0.25f, 1.0f},
+ {0.45, 0.75, 0.3f, 1.0f},
+ {0.35, 0.65, 0.2f, 1.0f},
+ {0.95, 0.9, 0.4f, 1.0f},
+ {0.85, 0.8, 0.3f, 1.0f},
{1.0f, 1.0f, 1.0f},
{1.0f, 1.0f, 1.0f},
@@ -886,6 +914,10 @@ static struct uiWidgetColors wcol_pulldown= {
{0.0f, 0.0f, 0.0f},
{0.25f, 0.25f, 0.25f, 1.0f},
{0.18f, 0.48f, 0.85f, 1.0f},
+ {0.45, 0.75, 0.3f, 1.0f},
+ {0.35, 0.65, 0.2f, 1.0f},
+ {0.95, 0.9, 0.4f, 1.0f},
+ {0.85, 0.8, 0.3f, 1.0f},
{1.0f, 1.0f, 1.0f},
{1.0f, 1.0f, 1.0f},
@@ -900,6 +932,10 @@ static struct uiWidgetColors wcol_menu_item= {
{0.0f, 0.0f, 0.0f},
{0.0f, 0.0f, 0.0f, 0.3},
{0.23f, 0.53f, 0.9f, 0.9f},
+ {0.45, 0.75, 0.3f, 1.0f},
+ {0.35, 0.65, 0.2f, 1.0f},
+ {0.95, 0.9, 0.4f, 1.0f},
+ {0.85, 0.8, 0.3f, 1.0f},
{1.0f, 1.0f, 1.0f},
{1.0f, 1.0f, 1.0f},
@@ -914,6 +950,10 @@ static struct uiWidgetColors wcol_menu_back= {
{0.0f, 0.0f, 0.0f},
{0.0f, 0.0f, 0.0f, 0.6},
{0.18f, 0.48f, 0.85f, 0.8f},
+ {0.45, 0.75, 0.3f, 1.0f},
+ {0.35, 0.65, 0.2f, 1.0f},
+ {0.95, 0.9, 0.4f, 1.0f},
+ {0.85, 0.8, 0.3f, 1.0f},
{1.0f, 1.0f, 1.0f},
{1.0f, 1.0f, 1.0f},
@@ -928,6 +968,10 @@ static struct uiWidgetColors wcol_radio= {
{0.0f, 0.0f, 0.0f},
{0.25f, 0.25f, 0.25f, 1.0f},
{0.34f, 0.5f, 0.76f, 1.0f},
+ {0.45, 0.75, 0.3f, 1.0f},
+ {0.35, 0.65, 0.2f, 1.0f},
+ {0.95, 0.9, 0.4f, 1.0f},
+ {0.85, 0.8, 0.3f, 1.0f},
{1.0f, 1.0f, 1.0f},
{1.0f, 1.0f, 1.0f},
@@ -941,6 +985,10 @@ static struct uiWidgetColors wcol_regular= {
{0.1f, 0.1f, 0.1f},
{0.6f, 0.6f, 0.6f, 1.0f},
{0.4f, 0.4f, 0.4f, 1.0f},
+ {0.45, 0.75, 0.3f, 1.0f},
+ {0.35, 0.65, 0.2f, 1.0f},
+ {0.95, 0.9, 0.4f, 1.0f},
+ {0.85, 0.8, 0.3f, 1.0f},
{0.1f, 0.1f, 0.1f},
{0.0f, 0.0f, 0.0f},
@@ -954,6 +1002,10 @@ static struct uiWidgetColors wcol_regular_shade= {
{0.1f, 0.1f, 0.1f},
{0.6f, 0.6f, 0.6f, 1.0f},
{0.4f, 0.4f, 0.4f, 1.0f},
+ {0.45, 0.75, 0.3f, 1.0f},
+ {0.35, 0.65, 0.2f, 1.0f},
+ {0.95, 0.9, 0.4f, 1.0f},
+ {0.85, 0.8, 0.3f, 1.0f},
{0.1f, 0.1f, 0.1f},
{0.0f, 0.0f, 0.0f},
@@ -971,7 +1023,13 @@ static void widget_state(uiWidgetType *wt, int state)
wt->wcol= *(wt->wcol_theme);
if(state & UI_SELECT) {
- QUATCOPY(wt->wcol.inner, wt->wcol.inner_sel);
+ if(state & UI_BUT_ANIMATED_KEY)
+ QUATCOPY(wt->wcol.inner, wt->wcol.inner_key_sel)
+ else if(state & UI_BUT_ANIMATED)
+ QUATCOPY(wt->wcol.inner, wt->wcol.inner_anim_sel)
+ else
+ QUATCOPY(wt->wcol.inner, wt->wcol.inner_sel)
+
VECCOPY(wt->wcol.text, wt->wcol.text_sel);
/* only flip shade if it's not "pushed in" already */
@@ -979,8 +1037,15 @@ static void widget_state(uiWidgetType *wt, int state)
SWAP(float, wt->wcol.shadetop, wt->wcol.shadedown);
}
}
- else if(state & UI_ACTIVE) /* mouse over? */
- VecMulf(wt->wcol.inner, 1.1f);
+ else {
+ if(state & UI_BUT_ANIMATED_KEY)
+ QUATCOPY(wt->wcol.inner, wt->wcol.inner_key)
+ else if(state & UI_BUT_ANIMATED)
+ QUATCOPY(wt->wcol.inner, wt->wcol.inner_anim)
+
+ if(state & UI_ACTIVE) /* mouse over? */
+ VecMulf(wt->wcol.inner, 1.1f);
+ }
}
/* special case, button that calls pulldown */
diff --git a/source/blender/editors/space_buttons/space_buttons.c b/source/blender/editors/space_buttons/space_buttons.c
index e514b51e29c..2800934ef8a 100644
--- a/source/blender/editors/space_buttons/space_buttons.c
+++ b/source/blender/editors/space_buttons/space_buttons.c
@@ -197,6 +197,10 @@ static void buttons_main_area_draw(const bContext *C, ARegion *ar)
/* scrollers? */
}
+
+ sbuts->re_align= 0;
+ sbuts->mainbo= sbuts->mainb;
+ sbuts->tabo= sbuts->tab[sbuts->mainb];
}
void buttons_operatortypes(void)