Commit: 11ae190f002afebb831768f7efffef8cea0f1ff1
Author: Julian Eisel
Date:   Fri Oct 7 01:24:17 2016 +0200
Branches: temp_manipulators_core
https://developer.blender.org/rB11ae190f002afebb831768f7efffef8cea0f1ff1

Apply patch on blender2.8 branch

Ended up just deleting temp_manipulators_core branch and recreating it from 
blender2.8 branch. Applied D2232 on it then.

===================================================================

M       source/blender/blenkernel/BKE_screen.h
M       source/blender/blenkernel/intern/screen.c
M       source/blender/blenlib/BLI_math_vector.h
M       source/blender/blenlib/intern/math_vector.c
M       source/blender/blenloader/intern/readfile.c
M       source/blender/editors/interface/resources.c
M       source/blender/editors/screen/screen_edit.c
M       source/blender/editors/space_api/spacetypes.c
M       source/blender/makesdna/DNA_screen_types.h
M       source/blender/makesdna/DNA_userdef_types.h
M       source/blender/makesdna/DNA_view3d_types.h
M       source/blender/windowmanager/CMakeLists.txt
M       source/blender/windowmanager/WM_api.h
M       source/blender/windowmanager/WM_types.h
M       source/blender/windowmanager/intern/wm_event_system.c
M       source/blender/windowmanager/intern/wm_init_exit.c
M       source/blender/windowmanager/intern/wm_operators.c
A       source/blender/windowmanager/manipulators/WM_manipulator_api.h
A       source/blender/windowmanager/manipulators/WM_manipulator_types.h
A       
source/blender/windowmanager/manipulators/intern/manipulator_library/manipulator_library_intern.h
A       
source/blender/windowmanager/manipulators/intern/manipulator_library/manipulator_library_utils.c
A       source/blender/windowmanager/manipulators/intern/wm_manipulator.c
A       source/blender/windowmanager/manipulators/intern/wm_manipulator_intern.h
A       source/blender/windowmanager/manipulators/intern/wm_manipulatorgroup.c
A       source/blender/windowmanager/manipulators/intern/wm_manipulatormap.c
A       source/blender/windowmanager/manipulators/wm_manipulator_wmapi.h
M       source/blender/windowmanager/wm.h
M       source/blender/windowmanager/wm_event_system.h
M       source/blender/windowmanager/wm_event_types.h

===================================================================

diff --git a/source/blender/blenkernel/BKE_screen.h 
b/source/blender/blenkernel/BKE_screen.h
index 14e978b..010810a 100644
--- a/source/blender/blenkernel/BKE_screen.h
+++ b/source/blender/blenkernel/BKE_screen.h
@@ -49,6 +49,7 @@ struct bScreen;
 struct uiLayout;
 struct uiList;
 struct wmKeyConfig;
+struct wmManipulatorMap;
 struct wmNotifier;
 struct wmWindow;
 struct wmWindowManager;
@@ -96,6 +97,9 @@ typedef struct SpaceType {
        /* on startup, define dropboxes for spacetype+regions */
        void (*dropboxes)(void);
 
+       /* initialize manipulator-map-types and manipulator-group-types with 
the region */
+       void (*manipulators)(void);
+
        /* return context data */
        int (*context)(const struct bContext *, const char *, struct 
bContextDataResult *);
 
@@ -284,6 +288,8 @@ void BKE_spacedata_id_unref(struct ScrArea *sa, struct 
SpaceLink *sl, struct ID
 struct ARegion *BKE_area_region_copy(struct SpaceType *st, struct ARegion *ar);
 void            BKE_area_region_free(struct SpaceType *st, struct ARegion *ar);
 void            BKE_screen_area_free(struct ScrArea *sa);
+/* Manipulator-maps of a region need to be freed with the region. Uses 
callback to avoid low-level call. */
+void BKE_region_callback_free_manipulatormap_set(void (*callback)(struct 
wmManipulatorMap *));
 
 struct ARegion *BKE_area_find_region_type(struct ScrArea *sa, int type);
 struct ARegion *BKE_area_find_region_active_win(struct ScrArea *sa);
diff --git a/source/blender/blenkernel/intern/screen.c 
b/source/blender/blenkernel/intern/screen.c
index 857bd54..1482056 100644
--- a/source/blender/blenkernel/intern/screen.c
+++ b/source/blender/blenkernel/intern/screen.c
@@ -180,6 +180,7 @@ ARegion *BKE_area_region_copy(SpaceType *st, ARegion *ar)
        BLI_listbase_clear(&newar->panels_category_active);
        BLI_listbase_clear(&newar->ui_lists);
        newar->swinid = 0;
+       newar->manipulator_map = NULL;
        newar->regiontimer = NULL;
        
        /* use optional regiondata callback */
@@ -288,6 +289,17 @@ void BKE_spacedata_id_unref(struct ScrArea *sa, struct 
SpaceLink *sl, struct ID
        }
 }
 
+
+/**
+ * Avoid bad-level calls to #WM_manipulatormap_delete.
+ */
+static void (*region_free_manipulatormap_callback)(struct wmManipulatorMap *) 
= NULL;
+
+void BKE_region_callback_free_manipulatormap_set(void (*callback)(struct 
wmManipulatorMap *))
+{
+       region_free_manipulatormap_callback = callback;
+}
+
 /* not region itself */
 void BKE_area_region_free(SpaceType *st, ARegion *ar)
 {
@@ -337,6 +349,8 @@ void BKE_area_region_free(SpaceType *st, ARegion *ar)
                        MEM_freeN(uilst->properties);
                }
        }
+
+       region_free_manipulatormap_callback(ar->manipulator_map);
        BLI_freelistN(&ar->ui_lists);
        BLI_freelistN(&ar->ui_previews);
        BLI_freelistN(&ar->panels_category);
diff --git a/source/blender/blenlib/BLI_math_vector.h 
b/source/blender/blenlib/BLI_math_vector.h
index e797a63..fbecffc 100644
--- a/source/blender/blenlib/BLI_math_vector.h
+++ b/source/blender/blenlib/BLI_math_vector.h
@@ -304,6 +304,7 @@ void ortho_basis_v3v3_v3(float r_n1[3], float r_n2[3], 
const float n[3]);
 void ortho_v3_v3(float out[3], const float v[3]);
 void ortho_v2_v2(float out[2], const float v[2]);
 void bisect_v3_v3v3v3(float r[3], const float a[3], const float b[3], const 
float c[3]);
+void rotate_v2_v2fl(float r[2], const float p[2], const float angle);
 void rotate_v3_v3v3fl(float v[3], const float p[3], const float axis[3], const 
float angle);
 void rotate_normalized_v3_v3v3fl(float out[3], const float p[3], const float 
axis[3], const float angle);
 
diff --git a/source/blender/blenlib/intern/math_vector.c 
b/source/blender/blenlib/intern/math_vector.c
index 95d5c9f..90e39da 100644
--- a/source/blender/blenlib/intern/math_vector.c
+++ b/source/blender/blenlib/intern/math_vector.c
@@ -772,6 +772,20 @@ void ortho_v2_v2(float out[2], const float v[2])
 }
 
 /**
+ * Rotate a point \a p by \a angle around origin (0, 0)
+ */
+void rotate_v2_v2fl(float r[2], const float p[2], const float angle)
+{
+       const float co = cosf(angle);
+       const float si = sinf(angle);
+
+       BLI_assert(r != p);
+
+       r[0] = co * p[0] - si * p[1];
+       r[1] = si * p[0] + co * p[1];
+}
+
+/**
  * Rotate a point \a p by \a angle around an arbitrary unit length \a axis.
  * http://local.wasp.uwa.edu.au/~pbourke/geometry/
  */
diff --git a/source/blender/blenloader/intern/readfile.c 
b/source/blender/blenloader/intern/readfile.c
index 4e1eb41..03fcf33 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -6516,6 +6516,7 @@ static void direct_link_region(FileData *fd, ARegion *ar, 
int spacetype)
        ar->type = NULL;
        ar->swap = 0;
        ar->do_draw = 0;
+       ar->manipulator_map = NULL;
        ar->regiontimer = NULL;
        memset(&ar->drawrct, 0, sizeof(ar->drawrct));
 }
diff --git a/source/blender/editors/interface/resources.c 
b/source/blender/editors/interface/resources.c
index 79fa7a7..2f7eb5d 100644
--- a/source/blender/editors/interface/resources.c
+++ b/source/blender/editors/interface/resources.c
@@ -1660,6 +1660,8 @@ void init_userdef_do_versions(void)
                U.tw_size = 25;          /* percentage of window size */
                U.tw_handlesize = 16;    /* percentage of widget radius */
        }
+       if (U.manipulator_scale == 0)
+               U.manipulator_scale = 75;
        if (U.pad_rot_angle == 0.0f)
                U.pad_rot_angle = 15.0f;
        
diff --git a/source/blender/editors/screen/screen_edit.c 
b/source/blender/editors/screen/screen_edit.c
index 677a647..3d30f2b 100644
--- a/source/blender/editors/screen/screen_edit.c
+++ b/source/blender/editors/screen/screen_edit.c
@@ -1069,6 +1069,9 @@ static void region_cursor_set(wmWindow *win, int swinid, 
int swin_changed)
                for (ARegion *ar = sa->regionbase.first; ar; ar = ar->next) {
                        if (ar->swinid == swinid) {
                                if (swin_changed || (ar->type && 
ar->type->event_cursor)) {
+                                       if 
(WM_manipulatormap_cursor_set(ar->manipulator_map, win)) {
+                                               return;
+                                       }
                                        ED_region_cursor_set(win, sa, ar);
                                }
                                return;
diff --git a/source/blender/editors/space_api/spacetypes.c 
b/source/blender/editors/space_api/spacetypes.c
index ac6e312..5ff1d75 100644
--- a/source/blender/editors/space_api/spacetypes.c
+++ b/source/blender/editors/space_api/spacetypes.c
@@ -121,12 +121,17 @@ void ED_spacetypes_init(void)
        
        ED_operatortypes_view2d();
        ED_operatortypes_ui();
-       
-       /* register operators */
+
+       /* register types for operators and manipulators */
        spacetypes = BKE_spacetypes_list();
        for (type = spacetypes->first; type; type = type->next) {
-               if (type->operatortypes)
+               /* init manipulator types first, operator-types need them */
+               if (type->manipulators) {
+                       type->manipulators();
+               }
+               if (type->operatortypes) {
                        type->operatortypes();
+               }
        }
 
        /* register internal render callbacks */
diff --git a/source/blender/makesdna/DNA_screen_types.h 
b/source/blender/makesdna/DNA_screen_types.h
index e208ef3..2efb9d1 100644
--- a/source/blender/makesdna/DNA_screen_types.h
+++ b/source/blender/makesdna/DNA_screen_types.h
@@ -265,9 +265,10 @@ typedef struct ARegion {
        ListBase ui_previews;           /* uiPreview */
        ListBase handlers;                      /* wmEventHandler */
        ListBase panels_category;       /* Panel categories runtime */
-       
+
+       struct wmManipulatorMap *manipulator_map; /* manipulator-map of this 
region */
        struct wmTimer *regiontimer; /* blend in/out */
-       
+
        char *headerstr;                        /* use this string to draw info 
*/
        void *regiondata;                       /* XXX 2.50, need spacedata 
equivalent? */
 } ARegion;
diff --git a/source/blender/makesdna/DNA_userdef_types.h 
b/source/blender/makesdna/DNA_userdef_types.h
index 759ebbf..30d81df 100644
--- a/source/blender/makesdna/DNA_userdef_types.h
+++ b/source/blender/makesdna/DNA_userdef_types.h
@@ -490,6 +490,7 @@ typedef struct UserDef {
        short tb_leftmouse, tb_rightmouse;
        struct SolidLight light[3];
        short tw_hotspot, tw_flag, tw_handlesize, tw_size;
+       short manipulator_scale, pad3[3];
        short textimeout, texcollectrate;
        short wmdrawmethod; /* removed wmpad */
        short dragthreshold;
@@ -782,8 +783,6 @@ typedef enum eText_Draw_Options {
        USER_TEXT_DISABLE_AA    = (1 << 0),
 } eText_Draw_Options;
 
-/* tw_flag (transform widget) */
-
 /* gp_settings (Grease Pencil Settings) */
 typedef enum eGP_UserdefSettings {
        GP_PAINT_DOSMOOTH               = (1 << 0),
diff --git a/source/blender/makesdna/DNA_view3d_types.h 
b/source/blender/makesdna/DNA_view3d_types.h
index e1ccfef..1a49667 100644
--- a/source/blender/makesdna/DNA_view3d_types.h
+++ b/source/blender/makesdna/DNA_view3d_types.h
@@ -111,7 +111,7 @@ typedef struct RegionView3D {
        struct wmTimer *smooth_timer;
 
 
-       /* transform widget matrix */
+       /* transform manipulator matrix */
        float twmat[4][4];
 
        float viewquat[4];                      /* view rotation, must be kept 
normalized */
@@ -202,7 +202,7 @@ typedef struct View3D {
        short gridsubdiv;       /* Number of subdivisions in the grid between 
each highlighted grid line */
        char gridflag;
 
-       /* transform widget info */
+       /* transform manipulator info */
        char twtype, twmode, twflag;
        
        short flag3;
diff --git a/source/blender/windowmanager/CMakeLists.txt 
b/source/blender/windowmanager/CMakeLists.txt
index b6245a8..b5c1953 100644
--- a/source/blender/windowmanager/CMakeLists.txt
+++ b/source/blender/windowmanager/CMakeLists.txt
@@ -25,6 +25,8 @@
 
 set(INC
        .
+       manipulators
+       manipulators/intern
        ../blenfont
        ../blenkernel
        ../blenlib
@@ -68,6 +70,10 @@ set(SRC
        intern/wm_subwindow.c
        intern/wm_window.c
        intern/wm_stereo.c
+       manipulators/intern/wm_manipulator.c
+       manipulators/intern/wm_manipulatorgroup.c
+       manipulators/intern/wm_manipulatormap.c
+       manipulators/intern/manipulator_library/manipulator_library_utils.c
 
        WM_api.h
        WM_keymap.h
@@ -80,6 +86,11 @@ set(SRC
        wm_files.h
        wm_subwindow.h
        wm_window.h
+       manipulators/WM_manipulator_api.h
+       manipulators/WM_manipulator_types.h
+       manipulators/wm_manipulator_wmapi.h
+       manipulators/intern/wm_manipulator_intern.h
+       manipulators/intern/manipulator_library/manipulator_library_intern.h
 )
 
 if(WITH_AUDASPACE)
diff --git a/source/blender/windowmanager/WM_api.h 
b/source/blender/windowmanager/WM_api.h
index 2b82f1b..4d159c6 100644
--- a/source/blender/windowmanager/WM_api.h
+++ b/source/blender/windowmanager/WM_api.h
@@ -42,6 +42,9 @@
 #include "WM_keymap.h"
 #include "BLI_compile

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to