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
path: root/source
diff options
context:
space:
mode:
authorGermano Cavalcante <germano.costa@ig.com.br>2022-08-08 17:00:10 +0300
committerGermano Cavalcante <germano.costa@ig.com.br>2022-08-08 17:00:10 +0300
commit47f433c7767b74b3ca8af2db3c6d2e05ac6e7e7e (patch)
tree094ba4eccb073257a302a65eda8ed6eea557c6cc /source
parente22628c70bf221acf084e20373da9d40ebc2bfa8 (diff)
parentb72eddac6190353714745756dcc335f98cda1369 (diff)
Merge branch 'blender-v3.3-release'
Diffstat (limited to 'source')
-rw-r--r--source/blender/blenkernel/BKE_image.h18
-rw-r--r--source/blender/blenkernel/intern/image.cc25
-rw-r--r--source/blender/blenkernel/intern/image_save.cc10
-rw-r--r--source/blender/editors/transform/transform.c7
-rw-r--r--source/blender/editors/transform/transform_mode_resize.c1
-rw-r--r--source/blender/editors/transform/transform_mode_rotate.c1
-rw-r--r--source/blender/editors/transform/transform_mode_translate.c28
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;
+ }
}
/** \} */