Page MenuHome

kbdslotnav2.patch

kbdslotnav2.patch

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

Mime Type
text/x-diff
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
be/bb/09990222f1d76cb6b5f81a4b3712

Event Timeline