diff options
Diffstat (limited to 'source/blender/editors/space_image/image_edit.c')
-rw-r--r-- | source/blender/editors/space_image/image_edit.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/source/blender/editors/space_image/image_edit.c b/source/blender/editors/space_image/image_edit.c index 38c9604d14b..35834857423 100644 --- a/source/blender/editors/space_image/image_edit.c +++ b/source/blender/editors/space_image/image_edit.c @@ -291,6 +291,34 @@ void ED_image_point_pos__reverse(SpaceImage *sima, ARegion *ar, const float co[2 r_co[1] = (co[1] * height * zoomy) + (float)sy; } +/** + * This is more a user-level functionality, for going to next/prev used slot, + * Stepping onto the last unused slot too. + */ +bool ED_image_slot_cycle(struct Image *image, int direction) +{ + const int cur = image->render_slot; + int i, slot; + + BLI_assert(ELEM(direction, -1, 1)); + + for (i = 1; i < IMA_MAX_RENDER_SLOT; i++) { + slot = (cur + ((direction == -1) ? -i : i)) % IMA_MAX_RENDER_SLOT; + if (slot < 0) slot += IMA_MAX_RENDER_SLOT; + + if (image->renders[slot] || slot == image->last_render_slot) { + image->render_slot = slot; + break; + } + } + + if (i == IMA_MAX_RENDER_SLOT) { + image->render_slot = ((cur == 1) ? 0 : 1); + } + + return (cur != image->render_slot); +} + void ED_space_image_scopes_update(const struct bContext *C, struct SpaceImage *sima, struct ImBuf *ibuf, bool use_view_settings) { Scene *scene = CTX_data_scene(C); |