Revision: 48387
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=48387
Author:   vino
Date:     2012-06-28 20:48:18 +0000 (Thu, 28 Jun 2012)
Log Message:
-----------
Added additional manipulators for scaling/translating in two dimensions at 
once, and added mouseover highlighting for the manipulator handles.

Modified Paths:
--------------
    branches/soc-2012-bratwurst/source/blender/editors/include/ED_transform.h
    
branches/soc-2012-bratwurst/source/blender/editors/space_view3d/view3d_edit.c
    
branches/soc-2012-bratwurst/source/blender/editors/space_view3d/view3d_intern.h
    branches/soc-2012-bratwurst/source/blender/editors/space_view3d/view3d_ops.c
    
branches/soc-2012-bratwurst/source/blender/editors/transform/transform_manipulator.c
    branches/soc-2012-bratwurst/source/blender/makesdna/DNA_view3d_types.h

Modified: 
branches/soc-2012-bratwurst/source/blender/editors/include/ED_transform.h
===================================================================
--- branches/soc-2012-bratwurst/source/blender/editors/include/ED_transform.h   
2012-06-28 20:07:09 UTC (rev 48386)
+++ branches/soc-2012-bratwurst/source/blender/editors/include/ED_transform.h   
2012-06-28 20:48:18 UTC (rev 48387)
@@ -152,6 +152,7 @@
 
 int BIF_do_manipulator(struct bContext *C, struct wmEvent *event, struct 
wmOperator *op);
 void BIF_draw_manipulator(const struct bContext *C);
+int BIF_test_manipulator_mouseover(const struct bContext *C, struct wmEvent 
*event);
 
 /* Snapping */
 

Modified: 
branches/soc-2012-bratwurst/source/blender/editors/space_view3d/view3d_edit.c
===================================================================
--- 
branches/soc-2012-bratwurst/source/blender/editors/space_view3d/view3d_edit.c   
    2012-06-28 20:07:09 UTC (rev 48386)
+++ 
branches/soc-2012-bratwurst/source/blender/editors/space_view3d/view3d_edit.c   
    2012-06-28 20:48:18 UTC (rev 48387)
@@ -524,6 +524,41 @@
                ED_region_tag_redraw(ar);
 }
 
+static int viewmouseover_invoke(bContext *C, wmOperator *op, wmEvent *event)
+{
+       if (BIF_test_manipulator_mouseover(C, event)) {
+               ARegion *ar= CTX_wm_region(C);
+               ED_region_tag_redraw(ar);
+       }
+
+       return OPERATOR_PASS_THROUGH;
+}
+
+static int viewmouseover_poll(bContext *C)
+{
+       View3D *v3d = CTX_wm_view3d(C);
+
+       if (v3d->twtype & 
(V3D_MANIP_TRANSLATE|V3D_MANIP_ROTATE|V3D_MANIP_SCALE))
+               return 1;
+
+       return 0;
+}
+
+void VIEW3D_OT_mouseover(wmOperatorType *ot)
+{
+       /* identifiers */
+       ot->name= "Mouseover (internal)";
+       ot->description = "Check for mouseover events";
+       ot->idname= "VIEW3D_OT_mouseover";
+
+       /* api callbacks */
+       ot->invoke= viewmouseover_invoke;
+       ot->poll= viewmouseover_poll;
+
+       /* flags */
+       ot->flag= OPTYPE_INTERNAL;
+}
+
 /* ************************** viewrotate **********************************/
 
 #define COS45 0.7071068

Modified: 
branches/soc-2012-bratwurst/source/blender/editors/space_view3d/view3d_intern.h
===================================================================
--- 
branches/soc-2012-bratwurst/source/blender/editors/space_view3d/view3d_intern.h 
    2012-06-28 20:07:09 UTC (rev 48386)
+++ 
branches/soc-2012-bratwurst/source/blender/editors/space_view3d/view3d_intern.h 
    2012-06-28 20:48:18 UTC (rev 48387)
@@ -72,6 +72,7 @@
 void view3d_operatortypes(void);
 
 /* view3d_edit.c */
+void VIEW3D_OT_mouseover(struct wmOperatorType *ot);
 void VIEW3D_OT_zoom(struct wmOperatorType *ot);
 void VIEW3D_OT_dolly(struct wmOperatorType *ot);
 void VIEW3D_OT_zoom_camera_1_to_1(struct wmOperatorType *ot);

Modified: 
branches/soc-2012-bratwurst/source/blender/editors/space_view3d/view3d_ops.c
===================================================================
--- 
branches/soc-2012-bratwurst/source/blender/editors/space_view3d/view3d_ops.c    
    2012-06-28 20:07:09 UTC (rev 48386)
+++ 
branches/soc-2012-bratwurst/source/blender/editors/space_view3d/view3d_ops.c    
    2012-06-28 20:48:18 UTC (rev 48387)
@@ -57,6 +57,7 @@
 
 void view3d_operatortypes(void)
 {
+       WM_operatortype_append(VIEW3D_OT_mouseover);
        WM_operatortype_append(VIEW3D_OT_rotate);
        WM_operatortype_append(VIEW3D_OT_move);
        WM_operatortype_append(VIEW3D_OT_zoom);
@@ -145,6 +146,8 @@
 
        WM_keymap_verify_item(keymap, "VIEW3D_OT_smoothview", TIMER1, KM_ANY, 
KM_ANY, 0);
        
+       WM_keymap_add_item(keymap, "VIEW3D_OT_mouseover", MOUSEMOVE, 0, 0, 0);
+
        WM_keymap_add_item(keymap, "VIEW3D_OT_rotate", MOUSEPAN, 0, KM_ALT, 0);
        WM_keymap_add_item(keymap, "VIEW3D_OT_rotate", MOUSEROTATE, 0, 0, 0);
        WM_keymap_add_item(keymap, "VIEW3D_OT_move", MOUSEPAN, 0, 0, 0);

Modified: 
branches/soc-2012-bratwurst/source/blender/editors/transform/transform_manipulator.c
===================================================================
--- 
branches/soc-2012-bratwurst/source/blender/editors/transform/transform_manipulator.c
        2012-06-28 20:07:09 UTC (rev 48386)
+++ 
branches/soc-2012-bratwurst/source/blender/editors/transform/transform_manipulator.c
        2012-06-28 20:48:18 UTC (rev 48387)
@@ -84,23 +84,31 @@
 
 /* return codes for select, and drawing flags */
 
-#define MAN_TRANS_X     1
-#define MAN_TRANS_Y     2
-#define MAN_TRANS_Z     4
-#define MAN_TRANS_C     7
+#define MAN_TRANS_X            (1<<0)
+#define MAN_TRANS_Y            (1<<1)
+#define MAN_TRANS_Z            (1<<2)
+#define MAN_TRANS_C            (MAN_TRANS_X|MAN_TRANS_Y|MAN_TRANS_Z)
 
-#define MAN_ROT_X       8
-#define MAN_ROT_Y       16
-#define MAN_ROT_Z       32
-#define MAN_ROT_V       64
-#define MAN_ROT_T       128
-#define MAN_ROT_C       248
+#define MAN_ROT_X              (1<<3)
+#define MAN_ROT_Y              (1<<4)
+#define MAN_ROT_Z              (1<<5)
+#define MAN_ROT_V              (1<<6)
+#define MAN_ROT_T              (1<<7)
+#define MAN_ROT_C              
(MAN_ROT_X|MAN_ROT_Y|MAN_ROT_Z|MAN_ROT_V|MAN_ROT_T)
 
-#define MAN_SCALE_X     256
-#define MAN_SCALE_Y     512
-#define MAN_SCALE_Z     1024
-#define MAN_SCALE_C     1792
+#define MAN_SCALE_X            (1<<8)
+#define MAN_SCALE_Y            (1<<9)
+#define MAN_SCALE_Z            (1<<10)
+#define MAN_SCALE_C            (MAN_SCALE_X|MAN_SCALE_Y|MAN_SCALE_Z)
 
+#define MAN_TRANS_XY   (1<<11)
+#define MAN_TRANS_YZ   (1<<12)
+#define MAN_TRANS_XZ   (1<<13)
+
+#define MAN_SCALE_XY   (1<<14)
+#define MAN_SCALE_YZ   (1<<15)
+#define MAN_SCALE_XZ   (1<<16)
+
 /* color codes */
 
 #define MAN_RGB     0
@@ -749,7 +757,7 @@
  * moving: in transform theme color
  * else the red/green/blue
  */
-static void manipulator_setcolor(View3D *v3d, char axis, int colcode, unsigned 
char alpha)
+static void manipulator_setcolor(View3D *v3d, char axis, int colcode, unsigned 
char alpha, int manipulator)
 {
        unsigned char col[4] = {0};
        col[3] = alpha;
@@ -776,15 +784,34 @@
                                }
                                break;
                        case 'X':
-                               col[0] = 220;
+                               if (manipulator & v3d->twhighlight) {
+                                       col[0]= 255;
+                                       col[1]= 200;
+                                       col[2]= 200;
+                               }
+                               else
+                                       col[0]= 220;
                                break;
                        case 'Y':
-                               col[1] = 220;
+                               if (manipulator & v3d->twhighlight) {
+                                       col[0]= 200;
+                                       col[1]= 255;
+                                       col[2]= 200;
+                               }
+                               else
+                                       col[1]= 220;
                                break;
                        case 'Z':
-                               col[0] = 30;
-                               col[1] = 30;
-                               col[2] = 220;
+                               if (manipulator & v3d->twhighlight) {
+                                       col[0]= 200;
+                                       col[1]= 200;
+                                       col[2]= 255;
+                               }
+                               else {
+                                       col[0]= 30;
+                                       col[1]= 30;
+                                       col[2]= 220;
+                               }
                                break;
                        default:
                                BLI_assert(!"invalid axis arg");
@@ -800,7 +827,7 @@
 
        /* axes */
        if (flagx) {
-               manipulator_setcolor(v3d, 'X', colcode, 
axisBlendAngle(rv3d->twangle[0]));
+               manipulator_setcolor(v3d, 'X', colcode, 
axisBlendAngle(rv3d->twangle[0]), flagx);
                if (flagx & MAN_SCALE_X) glLoadName(MAN_SCALE_X);
                else if (flagx & MAN_TRANS_X) glLoadName(MAN_TRANS_X);
                glBegin(GL_LINES);
@@ -811,7 +838,7 @@
        if (flagy) {
                if (flagy & MAN_SCALE_Y) glLoadName(MAN_SCALE_Y);
                else if (flagy & MAN_TRANS_Y) glLoadName(MAN_TRANS_Y);
-               manipulator_setcolor(v3d, 'Y', colcode, 
axisBlendAngle(rv3d->twangle[1]));
+               manipulator_setcolor(v3d, 'Y', colcode, 
axisBlendAngle(rv3d->twangle[1]), flagy);
                glBegin(GL_LINES);
                glVertex3f(0.0f, 0.2f, 0.0f);
                glVertex3f(0.0f, 1.0f, 0.0f);
@@ -820,7 +847,7 @@
        if (flagz) {
                if (flagz & MAN_SCALE_Z) glLoadName(MAN_SCALE_Z);
                else if (flagz & MAN_TRANS_Z) glLoadName(MAN_TRANS_Z);
-               manipulator_setcolor(v3d, 'Z', colcode, 
axisBlendAngle(rv3d->twangle[2]));
+               manipulator_setcolor(v3d, 'Z', colcode, 
axisBlendAngle(rv3d->twangle[2]), flagz);
                glBegin(GL_LINES);
                glVertex3f(0.0f, 0.0f, 0.2f);
                glVertex3f(0.0f, 0.0f, 1.0f);
@@ -949,7 +976,7 @@
                                /* axis */
                                if ((drawflags & MAN_ROT_X) || (moving && 
(drawflags & MAN_ROT_Z))) {
                                        preOrthoFront(ortho, rv3d->twmat, 2);
-                                       manipulator_setcolor(v3d, 'X', colcode, 
255);
+                                       manipulator_setcolor(v3d, 'X', colcode, 
255, MAN_ROT_Z);
                                        glBegin(GL_LINES);
                                        glVertex3f(0.2f, 0.0f, 0.0f);
                                        glVertex3f(1.0f, 0.0f, 0.0f);
@@ -958,7 +985,7 @@
                                }
                                if ((drawflags & MAN_ROT_Y) || (moving && 
(drawflags & MAN_ROT_X))) {
                                        preOrthoFront(ortho, rv3d->twmat, 0);
-                                       manipulator_setcolor(v3d, 'Y', colcode, 
255);
+                                       manipulator_setcolor(v3d, 'Y', colcode, 
255, MAN_ROT_X);
                                        glBegin(GL_LINES);
                                        glVertex3f(0.0f, 0.2f, 0.0f);
                                        glVertex3f(0.0f, 1.0f, 0.0f);
@@ -967,7 +994,7 @@
                                }
                                if ((drawflags & MAN_ROT_Z) || (moving && 
(drawflags & MAN_ROT_Y))) {
                                        preOrthoFront(ortho, rv3d->twmat, 1);
-                                       manipulator_setcolor(v3d, 'Z', colcode, 
255);
+                                       manipulator_setcolor(v3d, 'Z', colcode, 
255, MAN_ROT_Y);
                                        glBegin(GL_LINES);
                                        glVertex3f(0.0f, 0.0f, 0.2f);
                                        glVertex3f(0.0f, 0.0f, 1.0f);
@@ -984,7 +1011,7 @@
                if (drawflags & MAN_ROT_Z) {
                        preOrthoFront(ortho, matt, 2);
                        if (G.f & G_PICKSEL) glLoadName(MAN_ROT_Z);
-                       manipulator_setcolor(v3d, 'Z', colcode, 255);
+                       manipulator_setcolor(v3d, 'Z', colcode, 255, MAN_ROT_Z);
                        drawcircball(GL_LINE_LOOP, unitmat[3], 1.0, unitmat);
                        postOrtho(ortho);
                }
@@ -993,7 +1020,7 @@
                        preOrthoFront(ortho, matt, 0);
                        if (G.f & G_PICKSEL) glLoadName(MAN_ROT_X);
                        glRotatef(90.0, 0.0, 1.0, 0.0);
-                       manipulator_setcolor(v3d, 'X', colcode, 255);
+                       manipulator_setcolor(v3d, 'X', colcode, 255, MAN_ROT_X);
                        drawcircball(GL_LINE_LOOP, unitmat[3], 1.0, unitmat);
                        glRotatef(-90.0, 0.0, 1.0, 0.0);
                        postOrtho(ortho);
@@ -1003,7 +1030,7 @@
                        preOrthoFront(ortho, matt, 1);
                        if (G.f & G_PICKSEL) glLoadName(MAN_ROT_Y);
                        glRotatef(-90.0, 1.0, 0.0, 0.0);
-                       manipulator_setcolor(v3d, 'Y', colcode, 255);
+                       manipulator_setcolor(v3d, 'Y', colcode, 255, MAN_ROT_Y);
                        drawcircball(GL_LINE_LOOP, unitmat[3], 1.0, unitmat);
                        glRotatef(90.0, 1.0, 0.0, 0.0);
                        postOrtho(ortho);
@@ -1019,7 +1046,7 @@
                if (drawflags & MAN_ROT_Z) {
                        preOrthoFront(ortho, rv3d->twmat, 2);
                        if (G.f & G_PICKSEL) glLoadName(MAN_ROT_Z);
-                       manipulator_setcolor(v3d, 'Z', colcode, 255);
+                       manipulator_setcolor(v3d, 'Z', colcode, 255, MAN_ROT_Z);
                        partial_doughnut(cusize / 4.0f, 1.0f, 0, 48, 8, 48);
                        postOrtho(ortho);
                }
@@ -1028,7 +1055,7 @@
                        preOrthoFront(ortho, rv3d->twmat, 0);
                        if (G.f & G_PICKSEL) glLoadName(MAN_ROT_X);
                        glRotatef(90.0, 0.0, 1.0, 0.0);
-                       manipulator_setcolor(v3d, 'X', colcode, 255);
+                       manipulator_setcolor(v3d, 'X', colcode, 255, MAN_ROT_X);
                        partial_doughnut(cusize / 4.0f, 1.0f, 0, 48, 8, 48);
                        glRotatef(-90.0, 0.0, 1.0, 0.0);
                        postOrtho(ortho);
@@ -1038,7 +1065,7 @@
                        preOrthoFront(ortho, rv3d->twmat, 1);
                        if (G.f & G_PICKSEL) glLoadName(MAN_ROT_Y);
                        glRotatef(-90.0, 1.0, 0.0, 0.0);

@@ 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