[Bf-blender-cvs] [ac4057b95a5] master: Gizmo: use pivot center for UV gizmos
Campbell Barton
noreply at git.blender.org
Thu Jan 9 06:43:20 CET 2020
Commit: ac4057b95a5b20c4903308881193e291266f87db
Author: Campbell Barton
Date: Thu Jan 9 13:56:45 2020 +1100
Branches: master
https://developer.blender.org/rBac4057b95a5b20c4903308881193e291266f87db
Gizmo: use pivot center for UV gizmos
===================================================================
M source/blender/editors/include/ED_transform.h
M source/blender/editors/include/ED_uvedit.h
M source/blender/editors/space_image/space_image.c
M source/blender/editors/transform/transform_gizmo_2d.c
M source/blender/editors/uvedit/uvedit_ops.c
===================================================================
diff --git a/source/blender/editors/include/ED_transform.h b/source/blender/editors/include/ED_transform.h
index 29bac9df93a..d53ad7c4229 100644
--- a/source/blender/editors/include/ED_transform.h
+++ b/source/blender/editors/include/ED_transform.h
@@ -29,6 +29,7 @@
struct Object;
struct bContext;
struct wmKeyConfig;
+struct wmMsgBus;
struct wmOperatorType;
void ED_keymap_transform(struct wmKeyConfig *keyconf);
@@ -165,28 +166,11 @@ void VIEW3D_GGT_xform_shear(struct wmGizmoGroupType *gzgt);
/* *** transform_gizmo_extrude_3d.c *** */
void VIEW3D_GGT_xform_extrude(struct wmGizmoGroupType *gzgt);
-/* Transform: Axis/Cage */
-bool ED_widgetgroup_gizmo2d_xform_poll(const struct bContext *C, struct wmGizmoGroupType *gzgt);
-void ED_widgetgroup_gizmo2d_xform_setup(const struct bContext *C, struct wmGizmoGroup *gzgroup);
-void ED_widgetgroup_gizmo2d_xform_setup_no_cage(const struct bContext *C,
- struct wmGizmoGroup *gzgroup);
-void ED_widgetgroup_gizmo2d_xform_refresh(const struct bContext *C, struct wmGizmoGroup *gzgroup);
-void ED_widgetgroup_gizmo2d_xform_draw_prepare(const struct bContext *C,
- struct wmGizmoGroup *gzgroup);
-
-/* Resize: Axis */
-bool ED_widgetgroup_gizmo2d_resize_poll(const struct bContext *C, struct wmGizmoGroupType *gzgt);
-void ED_widgetgroup_gizmo2d_resize_setup(const struct bContext *C, struct wmGizmoGroup *gzgroup);
-void ED_widgetgroup_gizmo2d_resize_refresh(const struct bContext *C, struct wmGizmoGroup *gzgroup);
-void ED_widgetgroup_gizmo2d_resize_draw_prepare(const struct bContext *C,
- struct wmGizmoGroup *gzgroup);
-
-/* Rotate: Axis */
-bool ED_widgetgroup_gizmo2d_rotate_poll(const struct bContext *C, struct wmGizmoGroupType *gzgt);
-void ED_widgetgroup_gizmo2d_rotate_setup(const struct bContext *C, struct wmGizmoGroup *gzgroup);
-void ED_widgetgroup_gizmo2d_rotate_refresh(const struct bContext *C, struct wmGizmoGroup *gzgroup);
-void ED_widgetgroup_gizmo2d_rotate_draw_prepare(const struct bContext *C,
- struct wmGizmoGroup *gzgroup);
+/* Generic 2D transform gizmo callback assignment. */
+void ED_widgetgroup_gizmo2d_xform_callbacks_set(struct wmGizmoGroupType *gzgt);
+void ED_widgetgroup_gizmo2d_xform_no_cage_callbacks_set(struct wmGizmoGroupType *gzgt);
+void ED_widgetgroup_gizmo2d_resize_callbacks_set(struct wmGizmoGroupType *gzgt);
+void ED_widgetgroup_gizmo2d_rotate_callbacks_set(struct wmGizmoGroupType *gzgt);
#define SNAP_INCREMENTAL_ANGLE DEG2RAD(5.0)
diff --git a/source/blender/editors/include/ED_uvedit.h b/source/blender/editors/include/ED_uvedit.h
index 1f50770eef6..1debdee53e9 100644
--- a/source/blender/editors/include/ED_uvedit.h
+++ b/source/blender/editors/include/ED_uvedit.h
@@ -50,8 +50,6 @@ bool ED_uvedit_minmax(const struct Scene *scene,
struct Object *obedit,
float min[2],
float max[2]);
-bool ED_uvedit_center(
- const struct Scene *scene, Image *ima, struct Object *obedit, float cent[2], char mode);
void ED_uvedit_select_all(struct BMesh *bm);
bool ED_uvedit_minmax_multi(const struct Scene *scene,
@@ -67,6 +65,12 @@ bool ED_uvedit_center_multi(const struct Scene *scene,
float r_cent[2],
char mode);
+bool ED_uvedit_center_from_pivot(struct SpaceImage *sima,
+ struct Scene *scene,
+ struct ViewLayer *view_layer,
+ float r_center[2],
+ char mode);
+
bool ED_object_get_active_image(struct Object *ob,
int mat_nr,
struct Image **r_ima,
diff --git a/source/blender/editors/space_image/space_image.c b/source/blender/editors/space_image/space_image.c
index 2f93be8ae38..57560c560d7 100644
--- a/source/blender/editors/space_image/space_image.c
+++ b/source/blender/editors/space_image/space_image.c
@@ -470,11 +470,7 @@ static void IMAGE_GGT_gizmo2d(wmGizmoGroupType *gzgt)
gzgt->gzmap_params.spaceid = SPACE_IMAGE;
gzgt->gzmap_params.regionid = RGN_TYPE_WINDOW;
- gzgt->poll = ED_widgetgroup_gizmo2d_xform_poll;
- gzgt->setup = ED_widgetgroup_gizmo2d_xform_setup;
- gzgt->setup_keymap = WM_gizmogroup_setup_keymap_generic_maybe_drag;
- gzgt->refresh = ED_widgetgroup_gizmo2d_xform_refresh;
- gzgt->draw_prepare = ED_widgetgroup_gizmo2d_xform_draw_prepare;
+ ED_widgetgroup_gizmo2d_xform_callbacks_set(gzgt);
}
static void IMAGE_GGT_gizmo2d_translate(wmGizmoGroupType *gzgt)
@@ -488,11 +484,7 @@ static void IMAGE_GGT_gizmo2d_translate(wmGizmoGroupType *gzgt)
gzgt->gzmap_params.spaceid = SPACE_IMAGE;
gzgt->gzmap_params.regionid = RGN_TYPE_WINDOW;
- gzgt->poll = ED_widgetgroup_gizmo2d_xform_poll;
- gzgt->setup = ED_widgetgroup_gizmo2d_xform_setup_no_cage;
- gzgt->setup_keymap = WM_gizmogroup_setup_keymap_generic_maybe_drag;
- gzgt->refresh = ED_widgetgroup_gizmo2d_xform_refresh;
- gzgt->draw_prepare = ED_widgetgroup_gizmo2d_xform_draw_prepare;
+ ED_widgetgroup_gizmo2d_xform_no_cage_callbacks_set(gzgt);
}
static void IMAGE_GGT_gizmo2d_resize(wmGizmoGroupType *gzgt)
@@ -506,11 +498,7 @@ static void IMAGE_GGT_gizmo2d_resize(wmGizmoGroupType *gzgt)
gzgt->gzmap_params.spaceid = SPACE_IMAGE;
gzgt->gzmap_params.regionid = RGN_TYPE_WINDOW;
- gzgt->poll = ED_widgetgroup_gizmo2d_resize_poll;
- gzgt->setup = ED_widgetgroup_gizmo2d_resize_setup;
- gzgt->setup_keymap = WM_gizmogroup_setup_keymap_generic_maybe_drag;
- gzgt->refresh = ED_widgetgroup_gizmo2d_resize_refresh;
- gzgt->draw_prepare = ED_widgetgroup_gizmo2d_resize_draw_prepare;
+ ED_widgetgroup_gizmo2d_resize_callbacks_set(gzgt);
}
static void IMAGE_GGT_gizmo2d_rotate(wmGizmoGroupType *gzgt)
@@ -524,11 +512,7 @@ static void IMAGE_GGT_gizmo2d_rotate(wmGizmoGroupType *gzgt)
gzgt->gzmap_params.spaceid = SPACE_IMAGE;
gzgt->gzmap_params.regionid = RGN_TYPE_WINDOW;
- gzgt->poll = ED_widgetgroup_gizmo2d_rotate_poll;
- gzgt->setup = ED_widgetgroup_gizmo2d_rotate_setup;
- gzgt->setup_keymap = WM_gizmogroup_setup_keymap_generic_maybe_drag;
- gzgt->refresh = ED_widgetgroup_gizmo2d_rotate_refresh;
- gzgt->draw_prepare = ED_widgetgroup_gizmo2d_rotate_draw_prepare;
+ ED_widgetgroup_gizmo2d_rotate_callbacks_set(gzgt);
}
static void IMAGE_GGT_navigate(wmGizmoGroupType *gzgt)
diff --git a/source/blender/editors/transform/transform_gizmo_2d.c b/source/blender/editors/transform/transform_gizmo_2d.c
index e76ece987df..dc8d820b075 100644
--- a/source/blender/editors/transform/transform_gizmo_2d.c
+++ b/source/blender/editors/transform/transform_gizmo_2d.c
@@ -44,6 +44,7 @@
#include "WM_api.h"
#include "WM_types.h"
#include "wm.h" /* XXX */
+#include "WM_message.h"
#include "ED_image.h"
#include "ED_screen.h"
@@ -52,15 +53,56 @@
#include "transform.h" /* own include */
+/* -------------------------------------------------------------------- */
+/** \name Shared Callback's
+ */
+
+static void gizmo2d_pivot_point_message_subscribe(struct wmGizmoGroup *gzgroup,
+ struct wmMsgBus *mbus,
+ /* Additional args. */
+ bScreen *screen,
+ ScrArea *sa,
+ ARegion *ar)
+{
+ wmMsgSubscribeValue msg_sub_value_gz_tag_refresh = {
+ .owner = ar,
+ .user_data = gzgroup->parent_gzmap,
+ .notify = WM_gizmo_do_msg_notify_tag_refresh,
+ };
+
+ switch (sa->spacetype) {
+ case SPACE_IMAGE: {
+ SpaceImage *sima = sa->spacedata.first;
+ PointerRNA ptr;
+ RNA_pointer_create(&screen->id, &RNA_SpaceImageEditor, sima, &ptr);
+ {
+ extern PropertyRNA rna_SpaceImageEditor_pivot_point;
+ extern PropertyRNA rna_SpaceImageEditor_cursor_location;
+ const PropertyRNA *props[] = {
+ &rna_SpaceImageEditor_pivot_point,
+ (sima->around == V3D_AROUND_CURSOR) ? &rna_SpaceImageEditor_cursor_location : NULL,
+ };
+ for (int i = 0; i < ARRAY_SIZE(props); i++) {
+ if (props[i] == NULL) {
+ continue;
+ }
+ WM_msg_subscribe_rna(mbus, &ptr, props[i], &msg_sub_value_gz_tag_refresh, __func__);
+ }
+ }
+ break;
+ }
+ }
+}
+
+/** \} */
+
/* -------------------------------------------------------------------- */
/** \name Arrow / Cage Gizmo Group
*
* Defines public functions, not the gizmo it's self:
*
- * - #ED_widgetgroup_gizmo2d_xform_setup
- * - #ED_widgetgroup_gizmo2d_xform_refresh
- * - #ED_widgetgroup_gizmo2d_xform_draw_prepare
- * - #ED_widgetgroup_gizmo2d_xform_poll
+ * - #ED_widgetgroup_gizmo2d_xform_callbacks_set
+ * - #ED_widgetgroup_gizmo2d_xform_no_cage_callbacks_set
*
* \{ */
@@ -150,12 +192,13 @@ static void gizmo2d_calc_bounds(const bContext *C, float *r_center, float *r_min
ScrArea *sa = CTX_wm_area(C);
if (sa->spacetype == SPACE_IMAGE) {
SpaceImage *sima = sa->spacedata.first;
+ Scene *scene = CTX_data_scene(C);
ViewLayer *view_layer = CTX_data_view_layer(C);
Image *ima = ED_space_image(sima);
uint objects_len = 0;
Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data_with_uvs(
view_layer, NULL, &objects_len);
- if (!ED_uvedit_minmax_multi(CTX_data_scene(C), ima, objects, objects_len, r_min, r_max)) {
+ if (!ED_uvedit_minmax_multi(scene, ima, objects, objects_len, r_min, r_max)) {
zero_v2(r_min);
zero_v2(r_max);
}
@@ -168,6 +211,18 @@ static void gizmo2d_calc_bounds(const bContext *C, float *r_center, float *r_min
mid_v2_v2v2(r_center, r_min, r_max);
}
+static void gizmo2d_calc_center(const bContext *C, float r_center[2])
+{
+ ScrArea *sa = CTX_wm_area(C);
+ zero_v2(r_center);
+ if (sa->spacetype == SPACE_IMAGE) {
+ SpaceImage *sima = sa->spacedata.first;
+ Scene *scene = CTX_data_scene(C);
+ ViewLayer *view_la
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list