diff options
author | Germano Cavalcante <germano.costa@ig.com.br> | 2022-08-08 17:00:10 +0300 |
---|---|---|
committer | Germano Cavalcante <germano.costa@ig.com.br> | 2022-08-08 17:00:10 +0300 |
commit | 47f433c7767b74b3ca8af2db3c6d2e05ac6e7e7e (patch) | |
tree | 094ba4eccb073257a302a65eda8ed6eea557c6cc /source | |
parent | e22628c70bf221acf084e20373da9d40ebc2bfa8 (diff) | |
parent | b72eddac6190353714745756dcc335f98cda1369 (diff) |
Merge branch 'blender-v3.3-release'
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/blenkernel/BKE_image.h | 18 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/image.cc | 25 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/image_save.cc | 10 | ||||
-rw-r--r-- | source/blender/editors/transform/transform.c | 7 | ||||
-rw-r--r-- | source/blender/editors/transform/transform_mode_resize.c | 1 | ||||
-rw-r--r-- | source/blender/editors/transform/transform_mode_rotate.c | 1 | ||||
-rw-r--r-- | source/blender/editors/transform/transform_mode_translate.c | 28 |
7 files changed, 58 insertions, 32 deletions
diff --git a/source/blender/blenkernel/BKE_image.h b/source/blender/blenkernel/BKE_image.h index 202479675b0..eb43ce823ac 100644 --- a/source/blender/blenkernel/BKE_image.h +++ b/source/blender/blenkernel/BKE_image.h @@ -237,11 +237,13 @@ void BKE_image_ensure_viewer_views(const struct RenderData *rd, */ void BKE_image_user_frame_calc(struct Image *ima, struct ImageUser *iuser, int cfra); int BKE_image_user_frame_get(const struct ImageUser *iuser, int cfra, bool *r_is_in_range); -void BKE_image_user_file_path(struct ImageUser *iuser, struct Image *ima, char *path); -void BKE_image_user_file_path_ex(struct ImageUser *iuser, - struct Image *ima, +void BKE_image_user_file_path(const struct ImageUser *iuser, const struct Image *ima, char *path); +void BKE_image_user_file_path_ex(const struct Main *bmain, + const struct ImageUser *iuser, + const struct Image *ima, char *path, - bool resolve_udim); + const bool resolve_udim, + const bool resolve_multiview); void BKE_image_editors_update_frame(const struct Main *bmain, int cfra); /** @@ -259,15 +261,15 @@ struct RenderPass *BKE_image_multilayer_index(struct RenderResult *rr, struct Im /** * Sets index offset for multi-view files. */ -void BKE_image_multiview_index(struct Image *ima, struct ImageUser *iuser); +void BKE_image_multiview_index(const struct Image *ima, struct ImageUser *iuser); /** * For multi-layer images as well as for render-viewer * and because rendered results use fake layer/passes, don't correct for wrong indices here. */ -bool BKE_image_is_multilayer(struct Image *ima); -bool BKE_image_is_multiview(struct Image *ima); -bool BKE_image_is_stereo(struct Image *ima); +bool BKE_image_is_multilayer(const struct Image *ima); +bool BKE_image_is_multiview(const struct Image *ima); +bool BKE_image_is_stereo(const struct Image *ima); struct RenderResult *BKE_image_acquire_renderresult(struct Scene *scene, struct Image *ima); void BKE_image_release_renderresult(struct Scene *scene, struct Image *ima); diff --git a/source/blender/blenkernel/intern/image.cc b/source/blender/blenkernel/intern/image.cc index 5c0cb3c57bc..d915a9db76c 100644 --- a/source/blender/blenkernel/intern/image.cc +++ b/source/blender/blenkernel/intern/image.cc @@ -794,7 +794,7 @@ bool BKE_image_has_opengl_texture(Image *ima) return false; } -static int image_get_tile_number_from_iuser(Image *ima, const ImageUser *iuser) +static int image_get_tile_number_from_iuser(const Image *ima, const ImageUser *iuser) { BLI_assert(ima != nullptr && ima->tiles.first); ImageTile *tile = static_cast<ImageTile *>(ima->tiles.first); @@ -3651,7 +3651,7 @@ RenderPass *BKE_image_multilayer_index(RenderResult *rr, ImageUser *iuser) return rpass; } -void BKE_image_multiview_index(Image *ima, ImageUser *iuser) +void BKE_image_multiview_index(const Image *ima, ImageUser *iuser) { if (iuser) { bool is_stereo = BKE_image_is_stereo(ima) && (iuser->flag & IMA_SHOW_STEREO); @@ -3672,7 +3672,7 @@ void BKE_image_multiview_index(Image *ima, ImageUser *iuser) /* if layer or pass changes, we need an index for the imbufs list */ /* note it is called for rendered results, but it doesn't use the index! */ -bool BKE_image_is_multilayer(Image *ima) +bool BKE_image_is_multilayer(const Image *ima) { if (ELEM(ima->source, IMA_SRC_FILE, IMA_SRC_SEQUENCE, IMA_SRC_TILED)) { if (ima->type == IMA_TYPE_MULTILAYER) { @@ -3687,13 +3687,13 @@ bool BKE_image_is_multilayer(Image *ima) return false; } -bool BKE_image_is_multiview(Image *ima) +bool BKE_image_is_multiview(const Image *ima) { ImageView *view = static_cast<ImageView *>(ima->views.first); return (view && (view->next || view->name[0])); } -bool BKE_image_is_stereo(Image *ima) +bool BKE_image_is_stereo(const Image *ima) { return BKE_image_is_multiview(ima) && (BLI_findstring(&ima->views, STEREO_LEFT_NAME, offsetof(ImageView, name)) && @@ -5093,14 +5093,19 @@ void BKE_image_user_id_eval_animation(Depsgraph *depsgraph, ID *id) image_walk_id_all_users(id, skip_nested_nodes, depsgraph, image_user_id_eval_animation); } -void BKE_image_user_file_path(ImageUser *iuser, Image *ima, char *filepath) +void BKE_image_user_file_path(const ImageUser *iuser, const Image *ima, char *filepath) { - BKE_image_user_file_path_ex(iuser, ima, filepath, true); + BKE_image_user_file_path_ex(G_MAIN, iuser, ima, filepath, true, true); } -void BKE_image_user_file_path_ex(ImageUser *iuser, Image *ima, char *filepath, bool resolve_udim) +void BKE_image_user_file_path_ex(const Main *bmain, + const ImageUser *iuser, + const Image *ima, + char *filepath, + const bool resolve_udim, + const bool resolve_multiview) { - if (BKE_image_is_multiview(ima)) { + if (resolve_multiview && BKE_image_is_multiview(ima)) { ImageView *iv = static_cast<ImageView *>(BLI_findlink(&ima->views, iuser->view)); if (iv->filepath[0]) { BLI_strncpy(filepath, iv->filepath, FILE_MAX); @@ -5133,7 +5138,7 @@ void BKE_image_user_file_path_ex(ImageUser *iuser, Image *ima, char *filepath, b } } - BLI_path_abs(filepath, ID_BLEND_PATH_FROM_GLOBAL(&ima->id)); + BLI_path_abs(filepath, ID_BLEND_PATH(bmain, &ima->id)); } bool BKE_image_has_alpha(Image *image) diff --git a/source/blender/blenkernel/intern/image_save.cc b/source/blender/blenkernel/intern/image_save.cc index fec1bc8cd1a..d366e9362e8 100644 --- a/source/blender/blenkernel/intern/image_save.cc +++ b/source/blender/blenkernel/intern/image_save.cc @@ -144,13 +144,9 @@ bool BKE_image_save_options_init(ImageSaveOptions *opts, opts->im_format.color_management = R_IMF_COLOR_MANAGEMENT_FOLLOW_SCENE; - if (ibuf->name[0] == '\0' || ima->source == IMA_SRC_TILED) { - BLI_strncpy(opts->filepath, ima->filepath, sizeof(opts->filepath)); - BLI_path_abs(opts->filepath, ID_BLEND_PATH_FROM_GLOBAL(&ima->id)); - } - else { - BLI_strncpy(opts->filepath, ibuf->name, sizeof(opts->filepath)); - } + /* Compute filepath, but don't resolve multiview and UDIM which are handled + * by the image saving code itself. */ + BKE_image_user_file_path_ex(bmain, iuser, ima, opts->filepath, false, false); /* sanitize all settings */ diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c index 7567fd0a91d..bb1776e2756 100644 --- a/source/blender/editors/transform/transform.c +++ b/source/blender/editors/transform/transform.c @@ -1008,13 +1008,6 @@ int transformEvent(TransInfo *t, const wmEvent *event) t->redraw |= TREDRAW_HARD; handled = true; } - else if (t->options & (CTX_MOVIECLIP | CTX_MASK)) { - restoreTransObjects(t); - - t->flag ^= T_ALT_TRANSFORM; - t->redraw |= TREDRAW_HARD; - handled = true; - } } else { if (t->mode == TFM_TRANSLATION) { diff --git a/source/blender/editors/transform/transform_mode_resize.c b/source/blender/editors/transform/transform_mode_resize.c index 70599c3577c..fc569f5cf67 100644 --- a/source/blender/editors/transform/transform_mode_resize.c +++ b/source/blender/editors/transform/transform_mode_resize.c @@ -282,6 +282,7 @@ void initResize(TransInfo *t, float mouse_dir_constraint[3]) { t->mode = TFM_RESIZE; t->transform = applyResize; + t->handleEvent = NULL; t->tsnap.applySnap = ApplySnapResize; t->tsnap.distance = ResizeBetween; diff --git a/source/blender/editors/transform/transform_mode_rotate.c b/source/blender/editors/transform/transform_mode_rotate.c index a7207b36578..ece9fe8855f 100644 --- a/source/blender/editors/transform/transform_mode_rotate.c +++ b/source/blender/editors/transform/transform_mode_rotate.c @@ -351,6 +351,7 @@ void initRotation(TransInfo *t) t->mode = TFM_ROTATION; t->transform = applyRotation; + t->handleEvent = NULL; t->transform_matrix = applyRotationMatrix; t->tsnap.applySnap = ApplySnapRotation; t->tsnap.distance = RotationBetween; diff --git a/source/blender/editors/transform/transform_mode_translate.c b/source/blender/editors/transform/transform_mode_translate.c index 8f6ec7bd98f..32c2e5e3bb0 100644 --- a/source/blender/editors/transform/transform_mode_translate.c +++ b/source/blender/editors/transform/transform_mode_translate.c @@ -56,6 +56,8 @@ struct TranslateCustomData { struct { enum eTranslateRotateMode rotate_mode; } prev; + + const wmKeyMapItem *move_kmi; }; /** \} */ @@ -170,6 +172,27 @@ static void transdata_elem_translate_fn(void *__restrict iter_data_v, /** \} */ /* -------------------------------------------------------------------- */ +/** \name Events to Move Clip and Mask + * \{ */ + +static eRedrawFlag translate_handleEvent(struct TransInfo *t, const wmEvent *event) +{ + BLI_assert(t->options & (CTX_MOVIECLIP | CTX_MASK)); + struct TranslateCustomData *custom_data = t->custom.mode.data; + const wmKeyMapItem *kmi = custom_data->move_kmi; + if (kmi && event->type == kmi->type && event->val == kmi->val) { + /* Toggles the handle offset effect. */ + restoreTransObjects(t); + + t->flag ^= T_ALT_TRANSFORM; + return TREDRAW_HARD; + } + return TREDRAW_NOTHING; +} + +/** \} */ + +/* -------------------------------------------------------------------- */ /** \name Transform (Translation) * \{ */ @@ -614,6 +637,11 @@ void initTranslation(TransInfo *t) custom_data->prev.rotate_mode = TRANSLATE_ROTATE_OFF; t->custom.mode.data = custom_data; t->custom.mode.use_free = true; + + if (t->keymap && (t->options & (CTX_MOVIECLIP | CTX_MASK))) { + custom_data->move_kmi = WM_modalkeymap_find_propvalue(t->keymap, TFM_MODAL_TRANSLATE); + t->handleEvent = translate_handleEvent; + } } /** \} */ |