Commit: 4ce4f57acffc230087c1b9be43829ff3e1434ef3
Author: Antony Riakiotakis
Date:   Wed Oct 1 11:10:06 2014 +0200
Branches: wiggly-widgets
https://developer.blender.org/rB4ce4f57acffc230087c1b9be43829ff3e1434ef3

Refactoring of manipulator code to use selection evaluation and codes
that can be shared with other widgets.

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

M       source/blender/editors/include/ED_transform.h
M       source/blender/editors/transform/transform_manipulator.c
M       source/blender/windowmanager/WM_api.h
M       source/blender/windowmanager/WM_types.h
M       source/blender/windowmanager/intern/wm_widgets.c

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

diff --git a/source/blender/editors/include/ED_transform.h 
b/source/blender/editors/include/ED_transform.h
index 7dc7e84..9c0b8cc 100644
--- a/source/blender/editors/include/ED_transform.h
+++ b/source/blender/editors/include/ED_transform.h
@@ -153,7 +153,7 @@ void Transform_Properties(struct wmOperatorType *ot, int 
flags);
 /* view3d manipulators */
 
 int BIF_do_manipulator(struct bContext *C, const struct wmEvent *event, struct 
wmWidget *widget);
-void BIF_manipulator_render_3d_intersect(const struct bContext *C, struct 
wmWidget *widget);
+void BIF_manipulator_render_3d_intersect(const struct bContext *C, struct 
wmWidget *widget, int selectionbase);
 void BIF_draw_manipulator(const struct bContext *C, struct wmWidget 
*customdata);
 bool BIF_manipulator_poll(const struct bContext *C, struct wmWidget 
*customdata);
 
diff --git a/source/blender/editors/transform/transform_manipulator.c 
b/source/blender/editors/transform/transform_manipulator.c
index 952342b..f638e53 100644
--- a/source/blender/editors/transform/transform_manipulator.c
+++ b/source/blender/editors/transform/transform_manipulator.c
@@ -76,7 +76,7 @@
 
 #include "GPU_select.h"
 
-/* return codes for select, and drawing flags */
+/* drawing flags */
 
 #define MAN_TRANS_X            (1 << 0)
 #define MAN_TRANS_Y            (1 << 1)
@@ -95,6 +95,27 @@
 #define MAN_SCALE_Z            (1 << 10)
 #define MAN_SCALE_C            (MAN_SCALE_X | MAN_SCALE_Y | MAN_SCALE_Z)
 
+/* return codes for select */
+enum {
+       MAN_SEL_TRANS_X = 0,
+       MAN_SEL_TRANS_Y,
+       MAN_SEL_TRANS_Z,
+       
+       MAN_SEL_ROT_X,
+       MAN_SEL_ROT_Y,
+       MAN_SEL_ROT_Z,
+       MAN_SEL_ROT_V,
+       MAN_SEL_ROT_T,
+
+       MAN_SEL_SCALE_X,
+       MAN_SEL_SCALE_Y,
+       MAN_SEL_SCALE_Z,
+       
+       /* those two stay at the end so the rest can be inferred with 
bitshifting */
+       MAN_SEL_SCALE_C,
+       MAN_SEL_TRANS_C,
+};
+
 /* color codes */
 
 #define MAN_RGB     0
@@ -855,15 +876,15 @@ static void manipulator_axis_order(RegionView3D *rv3d, 
int r_axis_order[3])
 /* viewmatrix should have been set OK, also no shademode! */
 static void draw_manipulator_axes_single(View3D *v3d, RegionView3D *rv3d, int 
colcode,
                                          int flagx, int flagy, int flagz, int 
axis,
-                                         const bool is_picksel)
+                                         const int selectionbase)
 {
        switch (axis) {
                case 0:
                        /* axes */
                        if (flagx) {
-                               if (is_picksel) {
-                                       if      (flagx & MAN_SCALE_X) 
GPU_select_load_id(MAN_SCALE_X);
-                                       else if (flagx & MAN_TRANS_X) 
GPU_select_load_id(MAN_TRANS_X);
+                               if (selectionbase != -1) {
+                                       if      (flagx & MAN_SCALE_X) 
GPU_select_load_id(selectionbase + MAN_SEL_SCALE_X);
+                                       else if (flagx & MAN_TRANS_X) 
GPU_select_load_id(selectionbase + MAN_SEL_TRANS_X);
                                }
                                else {
                                        manipulator_setcolor(v3d, 'X', colcode, 
axisBlendAngle(rv3d->tw_idot[0]));
@@ -876,9 +897,9 @@ static void draw_manipulator_axes_single(View3D *v3d, 
RegionView3D *rv3d, int co
                        break;
                case 1:
                        if (flagy) {
-                               if (is_picksel) {
-                                       if      (flagy & MAN_SCALE_Y) 
GPU_select_load_id(MAN_SCALE_Y);
-                                       else if (flagy & MAN_TRANS_Y) 
GPU_select_load_id(MAN_TRANS_Y);
+                               if (selectionbase != -1) {
+                                       if      (flagy & MAN_SCALE_Y) 
GPU_select_load_id(selectionbase + MAN_SEL_SCALE_Y);
+                                       else if (flagy & MAN_TRANS_Y) 
GPU_select_load_id(selectionbase + MAN_SEL_TRANS_Y);
                                }
                                else {
                                        manipulator_setcolor(v3d, 'Y', colcode, 
axisBlendAngle(rv3d->tw_idot[1]));
@@ -891,9 +912,9 @@ static void draw_manipulator_axes_single(View3D *v3d, 
RegionView3D *rv3d, int co
                        break;
                case 2:
                        if (flagz) {
-                               if (is_picksel) {
-                                       if      (flagz & MAN_SCALE_Z) 
GPU_select_load_id(MAN_SCALE_Z);
-                                       else if (flagz & MAN_TRANS_Z) 
GPU_select_load_id(MAN_TRANS_Z);
+                               if (selectionbase != -1) {
+                                       if      (flagz & MAN_SCALE_Z) 
GPU_select_load_id(selectionbase + MAN_SEL_SCALE_Z);
+                                       else if (flagz & MAN_TRANS_Z) 
GPU_select_load_id(selectionbase + MAN_SEL_TRANS_Z);
                                }
                                else {
                                        manipulator_setcolor(v3d, 'Z', colcode, 
axisBlendAngle(rv3d->tw_idot[2]));
@@ -908,11 +929,11 @@ static void draw_manipulator_axes_single(View3D *v3d, 
RegionView3D *rv3d, int co
 }
 static void draw_manipulator_axes(View3D *v3d, RegionView3D *rv3d, int colcode,
                                   int flagx, int flagy, int flagz,
-                                  const int axis_order[3], const bool 
is_picksel)
+                                  const int axis_order[3], const int 
selectionbase)
 {
        int i;
        for (i = 0; i < 3; i++) {
-               draw_manipulator_axes_single(v3d, rv3d, colcode, flagx, flagy, 
flagz, axis_order[i], is_picksel);
+               draw_manipulator_axes_single(v3d, rv3d, colcode, flagx, flagy, 
flagz, axis_order[i], selectionbase);
        }
 }
 
@@ -937,7 +958,7 @@ static void postOrtho(const bool ortho)
 
 static void draw_manipulator_rotate(
         View3D *v3d, RegionView3D *rv3d, const int drawflags, const int combo,
-        const bool is_moving, const bool is_picksel)
+        const bool is_moving, const int selectionbase)
 {
        double plane[4];
        float matt[4][4];
@@ -971,7 +992,7 @@ static void draw_manipulator_rotate(
 
        /* Screen aligned help circle */
        if (arcs) {
-               if (is_picksel == false) {
+               if (selectionbase == -1) {
                        UI_ThemeColorShade(TH_BACK, -30);
                        drawcircball(GL_LINE_LOOP, unitmat[3], size, unitmat);
                }
@@ -979,7 +1000,7 @@ static void draw_manipulator_rotate(
 
        /* Screen aligned trackball rot circle */
        if (drawflags & MAN_ROT_T) {
-               if (is_picksel) GPU_select_load_id(MAN_ROT_T);
+               if (selectionbase != -1) GPU_select_load_id(selectionbase + 
MAN_SEL_ROT_T);
                else UI_ThemeColor(TH_TRANSFORM);
 
                drawcircball(GL_LINE_LOOP, unitmat[3], 0.2f * size, unitmat);
@@ -987,7 +1008,7 @@ static void draw_manipulator_rotate(
 
        /* Screen aligned view rot circle */
        if (drawflags & MAN_ROT_V) {
-               if (is_picksel) GPU_select_load_id(MAN_ROT_V);
+               if (selectionbase != -1) GPU_select_load_id(selectionbase + 
MAN_SEL_ROT_V);
                else UI_ThemeColor(TH_TRANSFORM);
                drawcircball(GL_LINE_LOOP, unitmat[3], 1.2f * size, unitmat);
 
@@ -1027,7 +1048,7 @@ static void draw_manipulator_rotate(
 
        /* axes */
        if (arcs == 0) {
-               if (!is_picksel) {
+               if (selectionbase == -1) {
                        if ((combo & V3D_MANIP_SCALE) == 0) {
                                /* axis */
                                if ((drawflags & MAN_ROT_X) || (is_moving && 
(drawflags & MAN_ROT_Z))) {
@@ -1066,7 +1087,7 @@ static void draw_manipulator_rotate(
                /* Z circle */
                if (drawflags & MAN_ROT_Z) {
                        preOrthoFront(ortho, matt, 2);
-                       if (is_picksel) GPU_select_load_id(MAN_ROT_Z);
+                       if (selectionbase != -1) 
GPU_select_load_id(selectionbase + MAN_SEL_ROT_Z);
                        else manipulator_setcolor(v3d, 'Z', colcode, 255);
                        drawcircball(GL_LINE_LOOP, unitmat[3], 1.0, unitmat);
                        postOrtho(ortho);
@@ -1074,7 +1095,7 @@ static void draw_manipulator_rotate(
                /* X circle */
                if (drawflags & MAN_ROT_X) {
                        preOrthoFront(ortho, matt, 0);
-                       if (is_picksel) GPU_select_load_id(MAN_ROT_X);
+                       if (selectionbase != -1) 
GPU_select_load_id(selectionbase + MAN_SEL_ROT_X);
                        else manipulator_setcolor(v3d, 'X', colcode, 255);
                        glRotatef(90.0, 0.0, 1.0, 0.0);
                        drawcircball(GL_LINE_LOOP, unitmat[3], 1.0, unitmat);
@@ -1084,7 +1105,7 @@ static void draw_manipulator_rotate(
                /* Y circle */
                if (drawflags & MAN_ROT_Y) {
                        preOrthoFront(ortho, matt, 1);
-                       if (is_picksel) GPU_select_load_id(MAN_ROT_Y);
+                       if (selectionbase != -1) 
GPU_select_load_id(selectionbase + MAN_SEL_ROT_Y);
                        else manipulator_setcolor(v3d, 'Y', colcode, 255);
                        glRotatef(-90.0, 1.0, 0.0, 0.0);
                        drawcircball(GL_LINE_LOOP, unitmat[3], 1.0, unitmat);
@@ -1101,7 +1122,7 @@ static void draw_manipulator_rotate(
                /* Z circle */
                if (drawflags & MAN_ROT_Z) {
                        preOrthoFront(ortho, rv3d->twmat, 2);
-                       if (is_picksel) GPU_select_load_id(MAN_ROT_Z);
+                       if (selectionbase != -1) 
GPU_select_load_id(selectionbase + MAN_SEL_ROT_Z);
                        else manipulator_setcolor(v3d, 'Z', colcode, 255);
                        partial_doughnut(cusize / 4.0f, 1.0f, 0, 48, 8, 48);
                        postOrtho(ortho);
@@ -1109,7 +1130,7 @@ static void draw_manipulator_rotate(
                /* X circle */
                if (drawflags & MAN_ROT_X) {
                        preOrthoFront(ortho, rv3d->twmat, 0);
-                       if (is_picksel) GPU_select_load_id(MAN_ROT_X);
+                       if (selectionbase != -1) 
GPU_select_load_id(selectionbase + MAN_SEL_ROT_X);
                        else manipulator_setcolor(v3d, 'X', colcode, 255);
                        glRotatef(90.0, 0.0, 1.0, 0.0);
                        partial_doughnut(cusize / 4.0f, 1.0f, 0, 48, 8, 48);
@@ -1119,7 +1140,7 @@ static void draw_manipulator_rotate(
                /* Y circle */
                if (drawflags & MAN_ROT_Y) {
                        preOrthoFront(ortho, rv3d->twmat, 1);
-                       if (is_picksel) GPU_select_load_id(MAN_ROT_Y);
+                       if (selectionbase != -1) 
GPU_select_load_id(selectionbase + MAN_SEL_ROT_Y);
                        else manipulator_setcolor(v3d, 'Y', colcode, 255);
                        glRotatef(-90.0, 1.0, 0.0, 0.0);
                        partial_doughnut(cusize / 4.0f, 1.0f, 0, 48, 8, 48);
@@ -1136,7 +1157,7 @@ static void draw_manipulator_rotate(
                if (drawflags & MAN_ROT_Z) {
                        preOrthoFront(ortho, rv3d->twmat, 2);
                        glPushMatrix();
-                       if (is_picksel) GPU_select_load_id(MAN_ROT_Z);
+                       if (selectionbase != -1) 
GPU_select_load_id(selectionbase + MAN_SEL_ROT_Z);
                        else manipulator_setcolor(v3d, 'Z', colcode, 255);
 
                        partial_doughnut(0.7f * cusize, 1.0f, 31, 33, 8, 64);
@@ -1149,7 +1170,7 @@ static void draw_manipulator_rotate(
                if (drawflags & MAN_ROT_Y) {
                        preOrthoFront(ortho, rv3d->twmat, 1);
                        glPushMatrix();
-                       if (is_picksel) GPU_select_load_id(MAN_ROT_Y);
+                       if (selectionbase != -1) 
GPU_select_load_id(selectionbase + MAN_SEL_ROT_Y);
                        else manipulator_setcolor(v3d, 'Y', colcode, 255);
 
                        glRotatef(90.0, 1.0, 0.0, 0.0);
@@ -1164,7 +1185,7 @@ static void draw_manipulator_rotate(
                if (drawflags & MAN_ROT_X) {
                        preOrthoFront(ortho, rv3d->twmat, 0);
                        glPushMatrix();
-                       if (is_picksel) GPU_select_load_id(MAN_ROT_X);
+                       if (selectionbase != -1) 
GPU_select_load_id(MAN_SEL_ROT_X);
                        else manipulator_setcolor(v3d, 'X', colcode, 255);
 
                        glRotatef(-90.0, 0.0, 1.0, 0.0);
@@ -1247,7 +1268,7 @@ static void drawsolidcube(float size)
 
 static void draw_manipulator_scale(
         View3D *v3d, RegionView3D *rv3d, const int drawflags, const int combo, 
const int colcode,
-        const bool is_mo

@@ Diff output truncated at 10240 characters. @@

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

Reply via email to