Page Menu
Home
Search
Configure Global Search
Log In
Files
F10826
kbdslotnav2.patch
Public
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Authored By
Shane Ambler (sambler)
Nov 13 2013, 2:18 PM
Size
7 KB
Subscribers
None
kbdslotnav2.patch
View Options
diff --git a/source/blender/editors/space_image/image_intern.h b/source/blender/editors/space_image/image_intern.h
index c038f58..bc61ac0 100644
--- a/source/blender/editors/space_image/image_intern.h
+++ b/source/blender/editors/space_image/image_intern.h
@@ -78,6 +78,7 @@ void IMAGE_OT_pack(struct wmOperatorType *ot);
void IMAGE_OT_unpack(struct wmOperatorType *ot);
void IMAGE_OT_cycle_render_slot(struct wmOperatorType *ot);
+void IMAGE_OT_select_render_slot(struct wmOperatorType *ot);
void IMAGE_OT_sample(struct wmOperatorType *ot);
void IMAGE_OT_sample_line(struct wmOperatorType *ot);
diff --git a/source/blender/editors/space_image/image_ops.c b/source/blender/editors/space_image/image_ops.c
index 314d5dd..dbdb8be 100644
--- a/source/blender/editors/space_image/image_ops.c
+++ b/source/blender/editors/space_image/image_ops.c
@@ -2038,15 +2038,21 @@ static int cycle_render_slot_exec(bContext *C, wmOperator *op)
{
Image *ima= CTX_data_edit_image(C);
int a, slot, cur= ima->render_slot;
-
- for(a=1; a<IMA_MAX_RENDER_SLOT; a++) {
- slot= (cur+a)%IMA_MAX_RENDER_SLOT;
-
- if(ima->renders[slot] || slot == ima->last_render_slot) {
- ima->render_slot= slot;
- break;
- }
- }
+ int direction= (RNA_int_get(op->ptr, "slot_cycle")>=0)?1:-1;
+
+ for(a=1; a<IMA_MAX_RENDER_SLOT; a++) {
+ slot= cur+(a*direction);
+
+ if(slot >= IMA_MAX_RENDER_SLOT)
+ slot= 0;
+ else if(slot < 0)
+ slot= IMA_MAX_RENDER_SLOT+slot;
+
+ if(ima->renders[slot] || slot == ima->last_render_slot) {
+ ima->render_slot= slot;
+ break;
+ }
+ }
if(a == IMA_MAX_RENDER_SLOT)
ima->render_slot= ((cur == 1)? 0: 1);
@@ -2068,8 +2074,61 @@ void IMAGE_OT_cycle_render_slot(wmOperatorType *ot)
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+
+ /* properties */
+ RNA_def_int(ot->srna, "slot_cycle", 1, -1, 1,
+ "Slot Cycle Direction", "Render Slot cycle direction.", -1, 1);
}
+/******************** goto specific render slot *********************/
+/* make available image slots 10 and use keyoard 1 through 0 to select
+ a specific slot similar to 3d layers */
+
+/* I used a mixture of cycle_render_slot and view_zoom_ratio to do this */
+
+/* select_render_slot_poll -
+ I don't think I need this to be any different from cycle_render_slot_poll
+ but have included a renamed version for completeness */
+static int select_render_slot_poll(bContext *C)
+{
+ Image *ima= CTX_data_edit_image(C);
+
+ return (ima && ima->type == IMA_TYPE_R_RESULT);
+}
+
+static int select_render_slot_exec(bContext *C, wmOperator *op)
+{
+ Image *ima= CTX_data_edit_image(C);
+
+ ima->render_slot = RNA_int_get(op->ptr, "render_slot");
+
+ if(ima->render_slot >= IMA_MAX_RENDER_SLOT )
+ ima->render_slot = 0;
+
+ WM_event_add_notifier(C, NC_IMAGE|ND_DRAW, NULL);
+
+ return OPERATOR_FINISHED;
+}
+
+void IMAGE_OT_select_render_slot(wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name= "Select Render Slot";
+ ot->idname= "IMAGE_OT_select_render_slot";
+
+ /* api callbacks */
+ ot->exec= select_render_slot_exec;
+ ot->poll= select_render_slot_poll;
+
+ /* flags */
+ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+
+ /* properties */
+ RNA_def_int(ot->srna, "render_slot", 0, 0, 9,
+ "Render Slot", "Current render slot.", 0, 9);
+}
+
+
/******************** TODO ********************/
/* XXX notifier? */
diff --git a/source/blender/editors/space_image/space_image.c b/source/blender/editors/space_image/space_image.c
index 0b8a2d8..2aa30ab 100644
--- a/source/blender/editors/space_image/space_image.c
+++ b/source/blender/editors/space_image/space_image.c
@@ -470,7 +470,8 @@ void image_operatortypes(void)
WM_operatortype_append(IMAGE_OT_unpack);
WM_operatortype_append(IMAGE_OT_cycle_render_slot);
-
+ WM_operatortype_append(IMAGE_OT_select_render_slot);
+
WM_operatortype_append(IMAGE_OT_sample);
WM_operatortype_append(IMAGE_OT_sample_line);
WM_operatortype_append(IMAGE_OT_curves_point_set);
@@ -494,8 +495,20 @@ void image_keymap(struct wmKeyConfig *keyconf)
WM_keymap_add_item(keymap, "IMAGE_OT_properties", NKEY, KM_PRESS, 0, 0);
WM_keymap_add_item(keymap, "IMAGE_OT_scopes", PKEY, KM_PRESS, 0, 0);
- WM_keymap_add_item(keymap, "IMAGE_OT_cycle_render_slot", JKEY, KM_PRESS, 0, 0);
-
+ RNA_int_set(WM_keymap_add_item(keymap, "IMAGE_OT_cycle_render_slot", JKEY, KM_PRESS, 0, 0)->ptr, "slot_cycle", 1);
+ RNA_int_set(WM_keymap_add_item(keymap, "IMAGE_OT_cycle_render_slot", HKEY, KM_PRESS, 0, 0)->ptr, "slot_cycle", -1);
+
+ RNA_int_set(WM_keymap_add_item(keymap, "IMAGE_OT_select_render_slot", ONEKEY, KM_PRESS, 0, 0)->ptr, "render_slot", 0);
+ RNA_int_set(WM_keymap_add_item(keymap, "IMAGE_OT_select_render_slot", TWOKEY, KM_PRESS, 0, 0)->ptr, "render_slot", 1);
+ RNA_int_set(WM_keymap_add_item(keymap, "IMAGE_OT_select_render_slot", THREEKEY, KM_PRESS, 0, 0)->ptr, "render_slot", 2);
+ RNA_int_set(WM_keymap_add_item(keymap, "IMAGE_OT_select_render_slot", FOURKEY, KM_PRESS, 0, 0)->ptr, "render_slot", 3);
+ RNA_int_set(WM_keymap_add_item(keymap, "IMAGE_OT_select_render_slot", FIVEKEY, KM_PRESS, 0, 0)->ptr, "render_slot", 4);
+ RNA_int_set(WM_keymap_add_item(keymap, "IMAGE_OT_select_render_slot", SIXKEY, KM_PRESS, 0, 0)->ptr, "render_slot", 5);
+ RNA_int_set(WM_keymap_add_item(keymap, "IMAGE_OT_select_render_slot", SEVENKEY, KM_PRESS, 0, 0)->ptr, "render_slot", 6);
+ RNA_int_set(WM_keymap_add_item(keymap, "IMAGE_OT_select_render_slot", EIGHTKEY, KM_PRESS, 0, 0)->ptr, "render_slot", 7);
+ RNA_int_set(WM_keymap_add_item(keymap, "IMAGE_OT_select_render_slot", NINEKEY, KM_PRESS, 0, 0)->ptr, "render_slot", 8);
+ RNA_int_set(WM_keymap_add_item(keymap, "IMAGE_OT_select_render_slot", ZEROKEY, KM_PRESS, 0, 0)->ptr, "render_slot", 9);
+
keymap= WM_keymap_find(keyconf, "Image", SPACE_IMAGE, 0);
WM_keymap_add_item(keymap, "IMAGE_OT_view_all", HOMEKEY, KM_PRESS, 0, 0);
diff --git a/source/blender/makesdna/DNA_image_types.h b/source/blender/makesdna/DNA_image_types.h
index d1aa3c0..e8973cc 100644
--- a/source/blender/makesdna/DNA_image_types.h
+++ b/source/blender/makesdna/DNA_image_types.h
@@ -73,7 +73,7 @@ typedef struct Image {
struct anim *anim;
struct RenderResult *rr;
- struct RenderResult *renders[8]; /* IMA_MAX_RENDER_SLOT */
+ struct RenderResult *renders[10]; /* IMA_MAX_RENDER_SLOT */
short render_slot, last_render_slot;
short ok, flag;
@@ -128,7 +128,7 @@ typedef struct Image {
/* render */
#define IMA_MAX_RENDER_TEXT 512
-#define IMA_MAX_RENDER_SLOT 8
+#define IMA_MAX_RENDER_SLOT 10 /* shouldn't this be above the image struct and used in renders[]? */
#endif
File Metadata
Details
Mime Type
text/x-diff
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
be/bb/09990222f1d76cb6b5f81a4b3712
Event Timeline
Log In to Comment