[Bf-blender-cvs] [e6802be29a9] temp-vse-preview-transform: Use 0-1 range for origin position
Richard Antalik
noreply at git.blender.org
Fri Sep 10 11:40:19 CEST 2021
Commit: e6802be29a9e0e211d9459681c87902d6430225e
Author: Richard Antalik
Date: Fri Sep 10 11:24:09 2021 +0200
Branches: temp-vse-preview-transform
https://developer.blender.org/rBe6802be29a9e0e211d9459681c87902d6430225e
Use 0-1 range for origin position
===================================================================
M source/blender/blenloader/intern/versioning_300.c
M source/blender/editors/space_sequencer/sequencer_draw.c
M source/blender/editors/transform/transform_convert_sequencer_image.c
M source/blender/editors/transform/transform_gizmo_2d.c
M source/blender/makesrna/intern/rna_sequencer.c
M source/blender/sequencer/SEQ_transform.h
M source/blender/sequencer/intern/render.c
M source/blender/sequencer/intern/strip_transform.c
===================================================================
diff --git a/source/blender/blenloader/intern/versioning_300.c b/source/blender/blenloader/intern/versioning_300.c
index 41d6ac40534..a548de50721 100644
--- a/source/blender/blenloader/intern/versioning_300.c
+++ b/source/blender/blenloader/intern/versioning_300.c
@@ -631,6 +631,12 @@ static bNodeSocket *do_version_replace_float_size_with_vector(bNodeTree *ntree,
return new_socket;
}
+static bool seq_transform_origin_set(Sequence *seq, void *UNUSED(user_data))
+{
+ StripTransform *transform = seq->strip->transform;
+ transform->origin[0] = transform->origin[1] = 0.5f;
+}
+
/* NOLINTNEXTLINE: readability-function-size */
void blo_do_versions_300(FileData *fd, Library *UNUSED(lib), Main *bmain)
{
@@ -1099,6 +1105,10 @@ void blo_do_versions_300(FileData *fd, Library *UNUSED(lib), Main *bmain)
LISTBASE_FOREACH (Scene *, scene, &bmain->scenes) {
SequencerToolSettings *sequencer_tool_settings = SEQ_tool_settings_ensure(scene);
sequencer_tool_settings->pivot_point = V3D_AROUND_CENTER_MEDIAN;
+
+ if (scene->ed != NULL) {
+ SEQ_for_each_callback(&scene->ed->seqbase, seq_transform_origin_set, NULL);
+ }
}
}
}
diff --git a/source/blender/editors/space_sequencer/sequencer_draw.c b/source/blender/editors/space_sequencer/sequencer_draw.c
index ef0979ee592..9b4c075f109 100644
--- a/source/blender/editors/space_sequencer/sequencer_draw.c
+++ b/source/blender/editors/space_sequencer/sequencer_draw.c
@@ -2050,8 +2050,7 @@ static int sequencer_draw_get_transform_preview_frame(Scene *scene)
static void seq_draw_image_origin_and_outline(const bContext *C, Sequence *seq)
{
- Editing *ed = SEQ_editing_get(CTX_data_scene(C));
- if ((seq->flag & SELECT) == 0 && seq != ed->act_seq) {
+ if ((seq->flag & SELECT) == 0) {
return;
}
if (ED_screen_animation_no_scrub(CTX_wm_manager(C))) {
@@ -2060,9 +2059,12 @@ static void seq_draw_image_origin_and_outline(const bContext *C, Sequence *seq)
const StripTransform *transform = seq->strip->transform;
+ float origin[2];
+ SEQ_image_transform_origin_offset_get(CTX_data_scene(C), seq, origin);
+
/* Origin. */
- float x = transform->xofs + transform->origin[0];
- float y = transform->yofs + transform->origin[1];
+ float x = transform->xofs + origin[0];
+ float y = transform->yofs + origin[1];
GPUVertFormat *format = immVertexFormat();
uint pos = GPU_vertformat_attr_add(format, "pos", GPU_COMP_F32, 2, GPU_FETCH_FLOAT);
@@ -2083,9 +2085,19 @@ static void seq_draw_image_origin_and_outline(const bContext *C, Sequence *seq)
(const float[]){transform->xofs, transform->yofs},
transform->rotation,
(const float[]){transform->scale_x, transform->scale_y});
- transform_pivot_set_m3(transform_matrix, transform->origin);
+ transform_pivot_set_m3(transform_matrix, origin);
+
+ float image_size[2];
+ if (strip_elem == NULL) {
+ Scene *scene = CTX_data_scene(C);
+ image_size[0] = scene->r.xsch;
+ image_size[1] = scene->r.ysch;
+ }
+ else {
+ image_size[0] = strip_elem->orig_height;
+ image_size[1] = strip_elem->orig_height;
+ }
- float image_size[2] = {strip_elem->orig_height, strip_elem->orig_height};
mul_v2_fl(image_size, 0.5f);
float a[2] = {image_size[0], image_size[1]};
float b[2] = {image_size[0], -image_size[1]};
@@ -2102,12 +2114,7 @@ static void seq_draw_image_origin_and_outline(const bContext *C, Sequence *seq)
immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
float col[3];
- if (seq == ed->act_seq) {
- UI_GetThemeColor3fv(TH_SEQ_ACTIVE, col);
- }
- else {
- UI_GetThemeColor3fv(TH_SEQ_SELECTED, col);
- }
+ UI_GetThemeColor3fv(TH_SEQ_SELECTED, col);
immUniformColor3fv(col);
immUniform1f("lineWidth", U.pixelsize);
immBegin(GPU_PRIM_LINE_LOOP, 4);
diff --git a/source/blender/editors/transform/transform_convert_sequencer_image.c b/source/blender/editors/transform/transform_convert_sequencer_image.c
index b7f0324fe58..1a4ee0d5b2d 100644
--- a/source/blender/editors/transform/transform_convert_sequencer_image.c
+++ b/source/blender/editors/transform/transform_convert_sequencer_image.c
@@ -51,12 +51,17 @@ typedef struct TransDataSeq {
float orig_rotation;
} TransDataSeq;
-static TransData *SeqToTransData(
- Sequence *seq, TransData *td, TransData2D *td2d, TransDataSeq *tdseq, int vert_index)
+static TransData *SeqToTransData(const Scene *scene,
+ Sequence *seq,
+ TransData *td,
+ TransData2D *td2d,
+ TransDataSeq *tdseq,
+ int vert_index)
{
const StripTransform *transform = seq->strip->transform;
- float vertex[2] = {transform->xofs + transform->origin[0],
- transform->yofs + transform->origin[1]};
+ float origin[2];
+ SEQ_image_transform_origin_offset_get(scene, seq, origin);
+ float vertex[2] = {transform->xofs + origin[0], transform->yofs + origin[1]};
/* Add control vertex, so rotation and scale can be calculated. */
if (vert_index == 1) {
@@ -72,8 +77,8 @@ static TransData *SeqToTransData(
td->loc = td2d->loc;
copy_v3_v3(td->iloc, td->loc);
- td->center[0] = transform->xofs + transform->origin[0];
- td->center[1] = transform->yofs + transform->origin[1];
+ td->center[0] = transform->xofs + origin[0];
+ td->center[1] = transform->yofs + origin[1];
memset(td->axismtx, 0, sizeof(td->axismtx));
td->axismtx[2][2] = 1.0f;
@@ -115,9 +120,9 @@ void createTransSeqImageData(TransInfo *t)
Sequence *seq;
SEQ_ITERATOR_FOREACH (seq, strips) {
- SeqToTransData(seq, td++, td2d++, tdseq++, 0);
- SeqToTransData(seq, td++, td2d++, tdseq++, 1);
- SeqToTransData(seq, td++, td2d++, tdseq++, 2);
+ SeqToTransData(t->scene, seq, td++, td2d++, tdseq++, 0);
+ SeqToTransData(t->scene, seq, td++, td2d++, tdseq++, 1);
+ SeqToTransData(t->scene, seq, td++, td2d++, tdseq++, 2);
}
SEQ_collection_free(strips);
@@ -148,8 +153,10 @@ void recalcData_sequencer_image(TransInfo *t)
TransDataSeq *tdseq = td->extra;
Sequence *seq = tdseq->seq;
StripTransform *transform = seq->strip->transform;
- transform->xofs = round_fl_to_int(loc[0] - transform->origin[0]);
- transform->yofs = round_fl_to_int(loc[1] - transform->origin[1]);
+ float origin[2];
+ SEQ_image_transform_origin_offset_get(t->scene, seq, origin);
+ transform->xofs = round_fl_to_int(loc[0] - origin[0]);
+ transform->yofs = round_fl_to_int(loc[1] - origin[1]);
transform->scale_x = tdseq->orig_scale_x * fabs(len_v2(handle_x));
transform->scale_y = tdseq->orig_scale_y * fabs(len_v2(handle_y));
/* Scaling can cause negative rotation. */
diff --git a/source/blender/editors/transform/transform_gizmo_2d.c b/source/blender/editors/transform/transform_gizmo_2d.c
index 599043ce1e0..a5940bea8f5 100644
--- a/source/blender/editors/transform/transform_gizmo_2d.c
+++ b/source/blender/editors/transform/transform_gizmo_2d.c
@@ -52,6 +52,7 @@
#include "SEQ_iterator.h"
#include "SEQ_sequencer.h"
#include "SEQ_time.h"
+#include "SEQ_transform.h"
#include "transform.h" /* own include */
@@ -290,8 +291,10 @@ static bool gizmo2d_calc_center(const bContext *C, float r_center[2])
Sequence *seq;
SEQ_ITERATOR_FOREACH (seq, strips) {
StripTransform *transform = seq->strip->transform;
- r_center[0] += transform->xofs + transform->origin[0];
- r_center[1] += transform->yofs + transform->origin[1];
+ float origin[2];
+ SEQ_image_transform_origin_offset_get(CTX_data_scene(C), seq, origin);
+ r_center[0] += transform->xofs + origin[0];
+ r_center[1] += transform->yofs + origin[1];
}
r_center[0] /= SEQ_collection_len(strips);
r_center[1] /= SEQ_collection_len(strips);
diff --git a/source/blender/makesrna/intern/rna_sequencer.c b/source/blender/makesrna/intern/rna_sequencer.c
index ba0cf1fdbe3..ab197369b9f 100644
--- a/source/blender/makesrna/intern/rna_sequencer.c
+++ b/source/blender/makesrna/intern/rna_sequencer.c
@@ -1434,7 +1434,7 @@ static void rna_def_strip_transform(BlenderRNA *brna)
prop = RNA_def_property(srna, "origin", PROP_FLOAT, PROP_PIXEL);
RNA_def_property_float_sdna(prop, NULL, "origin");
RNA_def_property_ui_text(prop, "Origin", "Origin of image for transformation");
- RNA_def_property_ui_range(prop, -FLT_MAX, FLT_MAX, 100, 2);
+ RNA_def_property_ui_range(prop, 0, 1, 1, 3);
RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_SequenceTransform_update");
RNA_def_struct_path_func(srna, "rna_SequenceTransform_path");
diff --git a/source/blender/sequencer/SEQ_transform.h b/source/blender/sequencer/SEQ_transform.h
index 1977835f627..9d83359045b 100644
--- a/source/blender/sequencer/SEQ_transform.h
+++ b/source/blender/sequencer/SEQ_transform.h
@@ -60,6 +60,9 @@ void SEQ_transform_offset_after_frame(struct Scene *scene,
struct ListBase *seqbase,
const int delta,
const int timeline_frame);
+void SEQ_image_transform_origin_offset_get(const struct Scene *scene,
+ const struct Sequence *seq,
+ float r_origin[2]);
#ifdef __cplusplus
}
diff --git a/source/blender/sequencer/intern/render.c b/source/blender/sequencer/intern/render.c
index a63cfed4427..2fe4aa2aca6 100644
--- a/source/blender/sequencer/intern/render.c
+++ b/source/blender/sequencer/intern/render.c
@@ -72,6 +72,7 @@
#include "SEQ_render.h"
#include "SEQ_sequencer.h"
#include "SEQ_time.h"
+#include "SEQ_transform.h"
#include "SEQ_utils.h"
#include "effects.h"
@@ -396,7 +397,8 @@ static bool seq_need_scale_to_render_size(const Sequence *seq, bool is_proxy_ima
return false;
}
-static void sequencer_image_crop_transform_matrix(const Sequence *seq,
+static void sequencer_image_crop_transform_matrix(const Scene *scene,
+ const Sequence *seq,
const ImBuf *in,
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list