Blender V4.3
transform_mode_edge_seq_slide.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2001-2002 NaN Holding BV. All rights reserved.
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
9#include <cstdlib>
10
11#include "MEM_guardedalloc.h"
12
13#include "BLI_blenlib.h"
14#include "BLI_math_vector.h"
15
16#include "BKE_unit.hh"
17
18#include "ED_screen.hh"
19
20#include "RNA_access.hh"
21
22#include "WM_api.hh"
23#include "WM_types.hh"
24
25#include "UI_interface.hh"
26
27#include "BLT_translation.hh"
28
29#include "transform.hh"
30#include "transform_convert.hh"
31#include "transform_mode.hh"
32#include "transform_snap.hh"
33
34/* -------------------------------------------------------------------- */
38static void headerSeqSlide(TransInfo *t, const float val[2], char str[UI_MAX_DRAW_STR])
39{
40 char tvec[NUM_STR_REP_LEN * 3];
41 size_t ofs = 0;
42
43 if (hasNumInput(&t->num)) {
44 outputNumInput(&(t->num), tvec, &t->scene->unit);
45 }
46 else {
47 BLI_snprintf(&tvec[0], NUM_STR_REP_LEN, "%.0f, %.0f", val[0], val[1]);
48 }
49
50 ofs += BLI_snprintf_rlen(
51 str + ofs, UI_MAX_DRAW_STR - ofs, IFACE_("Sequence Slide: %s%s"), &tvec[0], t->con.text);
52}
53
54static void applySeqSlideValue(TransInfo *t, const float val[2])
55{
56 int i;
57
59 TransData *td = tc->data;
60 for (i = 0; i < tc->data_len; i++, td++) {
61 if (td->flag & TD_SKIP) {
62 continue;
63 }
64
65 madd_v2_v2v2fl(td->loc, td->iloc, val, td->factor);
66 }
67 }
68}
69
70static void applySeqSlide(TransInfo *t)
71{
72 char str[UI_MAX_DRAW_STR];
73 float values_final[3] = {0.0f};
74
75 if (applyNumInput(&t->num, values_final)) {
76 if (t->con.mode & CON_APPLY) {
77 if (t->con.mode & CON_AXIS0) {
78 mul_v2_v2fl(values_final, t->spacemtx[0], values_final[0]);
79 }
80 else {
81 mul_v2_v2fl(values_final, t->spacemtx[1], values_final[0]);
82 }
83 }
84 }
85 else {
86 copy_v2_v2(values_final, t->values);
87 transform_snap_mixed_apply(t, values_final);
89
90 if (t->con.mode & CON_APPLY) {
91 t->con.applyVec(t, nullptr, nullptr, values_final, values_final);
92 }
93 }
94
95 values_final[0] = floorf(values_final[0] + 0.5f);
96 values_final[1] = floorf(values_final[1] + 0.5f);
97 copy_v2_v2(t->values_final, values_final);
98
101
102 recalc_data(t);
103
105}
106
110
112{
113 SeqSlideParams *ssp = MEM_cnew<SeqSlideParams>(__func__);
114 t->custom.mode.data = ssp;
115 t->custom.mode.use_free = true;
116 PropertyRNA *prop = RNA_struct_find_property(op->ptr, "use_restore_handle_selection");
117 if (op != nullptr && prop != nullptr) {
119 }
120
121 initMouseInputMode(t, &t->mouse, INPUT_VECTOR);
122
123 t->idx_max = 1;
124 t->num.flag = 0;
125 t->num.idx_max = t->idx_max;
126
127 t->snap[0] = floorf(t->scene->r.frs_sec / t->scene->r.frs_sec_base);
128 t->snap[1] = 10.0f;
129
130 copy_v3_fl(t->num.val_inc, t->snap[0]);
131 t->num.unit_sys = t->scene->unit.system;
132 /* Would be nice to have a time handling in units as well
133 * (supporting frames in addition to "natural" time...). */
134 t->num.unit_type[0] = B_UNIT_NONE;
135 t->num.unit_type[1] = B_UNIT_NONE;
136}
137
139{
140 if ((U.sequencer_editor_flag & USER_SEQ_ED_SIMPLE_TWEAKING) == 0) {
141 return false;
142 }
143 SeqSlideParams *ssp = static_cast<SeqSlideParams *>(t->custom.mode.data);
144 if (ssp == nullptr) {
145 return false;
146 }
148}
149
153 /*flags*/ 0,
154 /*init_fn*/ initSeqSlide,
155 /*transform_fn*/ applySeqSlide,
156 /*transform_matrix_fn*/ nullptr,
157 /*handle_event_fn*/ nullptr,
158 /*snap_distance_fn*/ nullptr,
160 /*draw_fn*/ nullptr,
161};
@ B_UNIT_NONE
Definition BKE_unit.hh:106
MINLINE void madd_v2_v2v2fl(float r[2], const float a[2], const float b[2], float f)
MINLINE void copy_v2_v2(float r[2], const float a[2])
MINLINE void copy_v3_fl(float r[3], float f)
MINLINE void mul_v2_v2fl(float r[2], const float a[2], float f)
size_t BLI_snprintf_rlen(char *__restrict dst, size_t dst_maxncpy, const char *__restrict format,...) ATTR_NONNULL(1
size_t BLI_snprintf(char *__restrict dst, size_t dst_maxncpy, const char *__restrict format,...) ATTR_NONNULL(1
#define IFACE_(msgid)
@ USER_SEQ_ED_SIMPLE_TWEAKING
#define NUM_STR_REP_LEN
void outputNumInput(NumInput *n, char *str, const UnitSettings *unit_settings)
Definition numinput.cc:88
bool applyNumInput(NumInput *n, float *vec)
Definition numinput.cc:190
bool hasNumInput(const NumInput *n)
Definition numinput.cc:171
void ED_area_status_text(ScrArea *area, const char *str)
Definition area.cc:803
Read Guarded memory(de)allocation.
#define UI_MAX_DRAW_STR
unsigned int U
Definition btGjkEpa3.h:78
#define floorf(x)
#define str(s)
PropertyRNA * RNA_struct_find_property(PointerRNA *ptr, const char *identifier)
bool RNA_property_boolean_get(PointerRNA *ptr, PropertyRNA *prop)
short idx_max
float val_inc[NUM_MAX_ELEMENTS]
int unit_type[NUM_MAX_ELEMENTS]
short flag
struct RenderData r
struct UnitSettings unit
char text[50]
Definition transform.hh:347
void(* applyVec)(const TransInfo *t, const TransDataContainer *tc, const TransData *td, const float in[3], float r_out[3])
Definition transform.hh:360
eTConstraint mode
Definition transform.hh:351
TransCustomData mode
Definition transform.hh:423
unsigned int use_free
Definition transform.hh:410
float snap[2]
Definition transform.hh:561
float values[4]
Definition transform.hh:624
short idx_max
Definition transform.hh:559
NumInput num
Definition transform.hh:540
TransCustomDataContainer custom
Definition transform.hh:676
Scene * scene
Definition transform.hh:654
MouseInput mouse
Definition transform.hh:543
float values_final[4]
Definition transform.hh:632
TransCon con
Definition transform.hh:534
float spacemtx[3][3]
Definition transform.hh:592
ScrArea * area
Definition transform.hh:651
struct PointerRNA * ptr
@ CON_APPLY
Definition transform.hh:193
@ CON_AXIS0
Definition transform.hh:195
void initMouseInputMode(TransInfo *t, MouseInput *mi, MouseInputMode mode)
#define FOREACH_TRANS_DATA_CONTAINER(t, th)
Definition transform.hh:854
void recalc_data(TransInfo *t)
conversion and adaptation of different datablocks to a common struct.
void transform_convert_sequencer_channel_clamp(TransInfo *t, float r_val[2])
@ TD_SKIP
transform modes used by different operators.
static void headerSeqSlide(TransInfo *t, const float val[2], char str[UI_MAX_DRAW_STR])
static void applySeqSlide(TransInfo *t)
static void initSeqSlide(TransInfo *t, wmOperator *op)
TransModeInfo TransMode_seqslide
bool transform_mode_edge_seq_slide_use_restore_handle_selection(const TransInfo *t)
static void applySeqSlideValue(TransInfo *t, const float val[2])
void transform_snap_mixed_apply(TransInfo *t, float *vec)
void transform_snap_sequencer_apply_seqslide(TransInfo *t, float *vec)