Revision: 18653
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=18653
Author:   nicholasbishop
Date:     2009-01-24 17:59:55 +0100 (Sat, 24 Jan 2009)

Log Message:
-----------
Added back old sculptmode FKEY radial control. (Moved fullscreen to F11KEY for 
now.)

Notes:
* So far, only size mode ported and tested, still strength and rotation to do
* Brought this back for sculptmode first, still to do are particle edit, 
vpaint, wpaint, texpaint, and I guess image paint?
* Changed the wm paint cursor slightly, to take a customdata pointer.
* Still need to bring back brush texture display in the cursor

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/editors/sculpt/sculpt.c
    branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_ops.c
    branches/blender2.5/blender/source/blender/editors/space_view3d/vpaint.c
    branches/blender2.5/blender/source/blender/windowmanager/WM_api.h
    branches/blender2.5/blender/source/blender/windowmanager/WM_types.h
    branches/blender2.5/blender/source/blender/windowmanager/intern/wm_draw.c
    
branches/blender2.5/blender/source/blender/windowmanager/intern/wm_operators.c
    branches/blender2.5/blender/source/blender/windowmanager/wm.h

Modified: branches/blender2.5/blender/source/blender/editors/sculpt/sculpt.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/sculpt/sculpt.c  
2009-01-24 14:24:59 UTC (rev 18652)
+++ branches/blender2.5/blender/source/blender/editors/sculpt/sculpt.c  
2009-01-24 16:59:55 UTC (rev 18653)
@@ -1366,13 +1366,61 @@
        }
 }
 
-/**** Operator for applying a stroke (various attributes including mouse path)
-      using the current brush. ****/
-static int sculpt_brush_stroke_poll(bContext *C)
+static int sculpt_poll(bContext *C)
 {
-       return G.f & G_SCULPTMODE && CTX_wm_area(C)->spacetype == SPACE_VIEW3D;
+       return G.f & G_SCULPTMODE && CTX_wm_area(C)->spacetype == SPACE_VIEW3D 
&&
+               CTX_wm_region(C)->regiontype == RGN_TYPE_WINDOW;
 }
 
+static int sculpt_radial_control_invoke(bContext *C, wmOperator *op, wmEvent 
*event)
+{
+       Brush *br = CTX_data_scene(C)->toolsettings->sculpt->brush;
+       int mode = RNA_int_get(op->ptr, "mode");
+       float original_value;
+
+       if(mode == WM_RADIALCONTROL_SIZE)
+               original_value = br->size;
+       else if(mode == WM_RADIALCONTROL_STRENGTH)
+               original_value = br->alpha;
+       /*else if(mode == WM_RADIALCONTROL_ANGLE)
+         original_value = br->rotation;*/
+
+       RNA_float_set(op->ptr, "initial_value", original_value);
+       return WM_radial_control_invoke(C, op, event);
+}
+
+static int sculpt_radial_control_exec(bContext *C, wmOperator *op)
+{
+       Brush *br = CTX_data_scene(C)->toolsettings->sculpt->brush;
+       int mode = RNA_int_get(op->ptr, "mode");
+       float new_value = RNA_float_get(op->ptr, "new_value");
+
+       if(mode == WM_RADIALCONTROL_SIZE)
+               br->size = new_value;
+       else if(mode == WM_RADIALCONTROL_STRENGTH)
+               br->alpha = new_value;
+       /*else if(mode == WM_RADIALCONTROL_ANGLE)
+         br->rotation = new_value;*/
+
+       return OPERATOR_FINISHED;
+}
+
+/**** Radial control ****/
+static void SCULPT_OT_radial_control(wmOperatorType *ot)
+{
+       WM_OT_radial_control_partial(ot);
+
+       ot->name= "Sculpt Radial Control";
+       ot->idname= "SCULPT_OT_radial_control";
+
+       ot->invoke= sculpt_radial_control_invoke;
+       ot->exec= sculpt_radial_control_exec;
+       ot->poll= sculpt_poll;
+}
+
+/**** Operator for applying a stroke (various attributes including mouse path)
+      using the current brush. ****/
+
 static void sculpt_load_mats(bglMats *mats, ViewContext *vc)
 {
        float cpy[4][4];
@@ -1688,7 +1736,7 @@
        ot->invoke= sculpt_brush_stroke_invoke;
        ot->modal= sculpt_brush_stroke_modal;
        ot->exec= sculpt_brush_stroke_exec;
-       ot->poll= sculpt_brush_stroke_poll;
+       ot->poll= sculpt_poll;
 
        /* properties */
        RNA_def_collection_runtime(ot->srna, "stroke", 
&RNA_OperatorStrokeElement, "Stroke", "");
@@ -1712,7 +1760,7 @@
 /**** Toggle operator for turning sculpt mode on or off ****/
 
 /* XXX: The code for drawing all the paint cursors is really the same, would 
be better to unify them */
-static void draw_paint_cursor(bContext *C, int x, int y)
+static void draw_paint_cursor(bContext *C, int x, int y, void *customdata)
 {
        Sculpt *sd= CTX_data_tool_settings(C)->sculpt;
        
@@ -1760,7 +1808,7 @@
 
                /* Activate visible brush */
                ts->sculpt->session->cursor =
-                       WM_paint_cursor_activate(CTX_wm_manager(C), 
sculpt_brush_stroke_poll, draw_paint_cursor);
+                       WM_paint_cursor_activate(CTX_wm_manager(C), 
sculpt_poll, draw_paint_cursor, NULL);
 
 
 
@@ -1796,6 +1844,7 @@
 
 void ED_operatortypes_sculpt()
 {
+       WM_operatortype_append(SCULPT_OT_radial_control);
        WM_operatortype_append(SCULPT_OT_brush_stroke);
        WM_operatortype_append(SCULPT_OT_toggle_mode);
 }

Modified: 
branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_ops.c
===================================================================
--- 
branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_ops.c    
    2009-01-24 14:24:59 UTC (rev 18652)
+++ 
branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_ops.c    
    2009-01-24 16:59:55 UTC (rev 18653)
@@ -98,6 +98,10 @@
        WM_keymap_verify_item(keymap, "VIEW3D_OT_wpaint", LEFTMOUSE, KM_PRESS, 
0, 0);
 
        WM_keymap_verify_item(keymap, "SCULPT_OT_brush_stroke", LEFTMOUSE, 
KM_PRESS, 0, 0);
+
+       RNA_enum_set(WM_keymap_verify_item(keymap, "SCULPT_OT_radial_control", 
FKEY, KM_PRESS, 0, 0)->ptr, "mode", WM_RADIALCONTROL_SIZE);
+       //RNA_enum_set(WM_keymap_verify_item(keymap, 
"SCULPT_OT_radial_control", FKEY, KM_PRESS, KM_SHIFT, 0)->ptr, "mode", 
WM_RADIALCONTROL_STRENGTH);
+       //RNA_enum_set(WM_keymap_verify_item(keymap, 
"SCULPT_OT_radial_control", FKEY, KM_PRESS, KM_CTRL, 0)->ptr, "mode", 
WM_RADIALCONTROL_ANGLE);
        
        WM_keymap_verify_item(keymap, "VIEW3D_OT_cursor3d", ACTIONMOUSE, 
KM_PRESS, 0, 0);
        

Modified: 
branches/blender2.5/blender/source/blender/editors/space_view3d/vpaint.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_view3d/vpaint.c    
2009-01-24 14:24:59 UTC (rev 18652)
+++ branches/blender2.5/blender/source/blender/editors/space_view3d/vpaint.c    
2009-01-24 16:59:55 UTC (rev 18653)
@@ -1069,7 +1069,7 @@
        return 0;
 }
 
-static void wp_drawcursor(bContext *C, int x, int y)
+static void wp_drawcursor(bContext *C, int x, int y, void *customdata)
 {
        ToolSettings *ts= CTX_data_tool_settings(C);
        
@@ -1118,7 +1118,7 @@
                if(wp==NULL)
                        wp= scene->toolsettings->wpaint= new_vpaint(1);
                
-               wp->paintcursor = WM_paint_cursor_activate(CTX_wm_manager(C), 
wp_poll, wp_drawcursor);
+               wp->paintcursor = WM_paint_cursor_activate(CTX_wm_manager(C), 
wp_poll, wp_drawcursor, NULL);
                
                mesh_octree_table(ob, NULL, NULL, 's');
                
@@ -1501,7 +1501,7 @@
        return 0;
 }
 
-static void vp_drawcursor(bContext *C, int x, int y)
+static void vp_drawcursor(bContext *C, int x, int y, void *customdata)
 {
        ToolSettings *ts= CTX_data_tool_settings(C);
        
@@ -1559,7 +1559,7 @@
                if(vp==NULL)
                        vp= scene->toolsettings->vpaint= new_vpaint(0);
                
-               vp->paintcursor = WM_paint_cursor_activate(CTX_wm_manager(C), 
vp_poll, vp_drawcursor);
+               vp->paintcursor = WM_paint_cursor_activate(CTX_wm_manager(C), 
vp_poll, vp_drawcursor, NULL);
        }
        
        if (me)

Modified: branches/blender2.5/blender/source/blender/windowmanager/WM_api.h
===================================================================
--- branches/blender2.5/blender/source/blender/windowmanager/WM_api.h   
2009-01-24 14:24:59 UTC (rev 18652)
+++ branches/blender2.5/blender/source/blender/windowmanager/WM_api.h   
2009-01-24 16:59:55 UTC (rev 18653)
@@ -67,7 +67,7 @@
 void           WM_cursor_wait          (struct wmWindow *win, int val);
 void           WM_timecursor           (struct wmWindow *win, int nr);
 
-void           *WM_paint_cursor_activate(struct wmWindowManager *wm, int 
(*poll)(struct bContext *C), void (*draw)(struct bContext *C, int, int));
+void           *WM_paint_cursor_activate(struct wmWindowManager *wm, int 
(*poll)(struct bContext *C), void (*draw)(struct bContext *C, int, int, void 
*customdata), void *customdata);
 void           WM_paint_cursor_end(struct wmWindowManager *wm, void *handle);
 
                        /* keymap */
@@ -156,6 +156,10 @@
 struct wmGesture *WM_gesture_new(struct bContext *C, struct wmEvent *event, 
int type);
 void           WM_gesture_end(struct bContext *C, struct wmGesture *gesture);
 
+                       /* radial control operator */
+int            WM_radial_control_invoke(struct bContext *C, struct wmOperator 
*op, struct wmEvent *event);
+void           WM_OT_radial_control_partial(struct wmOperatorType *ot);
+
                        /* OpenGL wrappers, mimicking opengl syntax */
 void           wmSubWindowSet                  (struct wmWindow *win, int 
swinid);
 void           wmSubWindowScissorSet   (struct wmWindow *win, int swinid, 
struct rcti *srct);

Modified: branches/blender2.5/blender/source/blender/windowmanager/WM_types.h
===================================================================
--- branches/blender2.5/blender/source/blender/windowmanager/WM_types.h 
2009-01-24 14:24:59 UTC (rev 18652)
+++ branches/blender2.5/blender/source/blender/windowmanager/WM_types.h 
2009-01-24 16:59:55 UTC (rev 18653)
@@ -229,6 +229,12 @@
        /* customdata for lasso is short array */
 } wmGesture;
 
+/* **************** Radial control *******************/
+typedef enum wmRadialControlMode {
+       WM_RADIALCONTROL_SIZE,
+       WM_RADIALCONTROL_STRENGTH,
+       WM_RADIALCONTROL_ANGLE
+} wmRadialControlMode;
 
 /* ************** custom wmEvent data ************** */
 

Modified: 
branches/blender2.5/blender/source/blender/windowmanager/intern/wm_draw.c
===================================================================
--- branches/blender2.5/blender/source/blender/windowmanager/intern/wm_draw.c   
2009-01-24 14:24:59 UTC (rev 18652)
+++ branches/blender2.5/blender/source/blender/windowmanager/intern/wm_draw.c   
2009-01-24 16:59:55 UTC (rev 18653)
@@ -72,7 +72,7 @@
                        for(pc= wm->paintcursors.first; pc; pc= pc->next) {
                                if(pc->poll(C)) {
                                        ARegion *ar= CTX_wm_region(C);
-                                       pc->draw(C, win->eventstate->x - 
ar->winrct.xmin, win->eventstate->y - ar->winrct.ymin);
+                                       pc->draw(C, win->eventstate->x - 
ar->winrct.xmin, win->eventstate->y - ar->winrct.ymin, pc->customdata);
                                }
                        }
                }

Modified: 
branches/blender2.5/blender/source/blender/windowmanager/intern/wm_operators.c
===================================================================
--- 
branches/blender2.5/blender/source/blender/windowmanager/intern/wm_operators.c  
    2009-01-24 14:24:59 UTC (rev 18652)
+++ 
branches/blender2.5/blender/source/blender/windowmanager/intern/wm_operators.c  
    2009-01-24 16:59:55 UTC (rev 18653)
@@ -26,6 +26,8 @@
  * ***** END GPL LICENSE BLOCK *****
  */
 
+#include <float.h>
+#include <math.h>
 #include <string.h>
 
 #include "DNA_ID.h"
@@ -46,6 +48,9 @@
 #include "BKE_main.h"
 #include "BKE_utildefines.h"
 
+#include "BIF_gl.h"
+#include "BIF_glutil.h" /* for paint cursor */
+
 #include "ED_fileselect.h"
 #include "ED_screen.h"
 
@@ -450,12 +455,14 @@
  - draw(bContext): drawing callback for paint cursor
 */
 
-void *WM_paint_cursor_activate(wmWindowManager *wm, int (*poll)(bContext *C), 
void (*draw)(bContext *C, int, int))
+void *WM_paint_cursor_activate(wmWindowManager *wm, int (*poll)(bContext *C),
+                              void (*draw)(bContext *C, int, int, void 
*customdata), void *customdata)
 {
        wmPaintCursor *pc= MEM_callocN(sizeof(wmPaintCursor), "paint cursor");
        
        BLI_addtail(&wm->paintcursors, pc);
        
+       pc->customdata = customdata;
        pc->poll= poll;
        pc->draw= draw;
        
@@ -866,6 +873,149 @@
 }
 #endif
 
+/* *********************** radial control ****************** */
+
+typedef struct wmRadialControl {
+       float radius;
+       int initial_mouse[2];
+       void *cursor;
+       // XXX: texture data

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