[Bf-blender-cvs] [f7c57c5cd6a] greasepencil-object: Fix problem with sculpt cursor
Antonio Vazquez
noreply at git.blender.org
Fri Jun 23 15:51:59 CEST 2017
Commit: f7c57c5cd6ac335342411f2f6488427816a9d8ab
Author: Antonio Vazquez
Date: Fri Jun 23 09:22:03 2017 +0200
Branches: greasepencil-object
https://developer.blender.org/rBf7c57c5cd6ac335342411f2f6488427816a9d8ab
Fix problem with sculpt cursor
The cursor was not set when switch between object in different modes.
===================================================================
M source/blender/editors/gpencil/gpencil_brush.c
M source/blender/editors/gpencil/gpencil_intern.h
M source/blender/editors/gpencil/gpencil_utils.c
M source/blender/editors/include/ED_gpencil.h
M source/blender/editors/space_view3d/view3d_select.c
===================================================================
diff --git a/source/blender/editors/gpencil/gpencil_brush.c b/source/blender/editors/gpencil/gpencil_brush.c
index 146c6eafca6..3fdfd4a65c5 100644
--- a/source/blender/editors/gpencil/gpencil_brush.c
+++ b/source/blender/editors/gpencil/gpencil_brush.c
@@ -78,6 +78,7 @@
#include "GPU_immediate.h"
#include "GPU_immediate_util.h"
+#include "ED_gpencil.h"
#include "gpencil_intern.h"
/* ************************************************ */
@@ -1014,57 +1015,6 @@ static bool gpsculpt_brush_apply_clone(bContext *C, tGP_BrushEditData *gso)
}
/* ************************************************ */
-/* Cursor drawing */
-
-/* Helper callback for drawing the cursor itself */
-static void gp_brush_drawcursor(bContext *C, int x, int y, void *UNUSED(customdata))
-{
- GP_EditBrush_Data *brush = gpsculpt_get_brush(CTX_data_scene(C));
-
- if (brush) {
- Gwn_VertFormat *format = immVertexFormat();
- unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
- immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
-
- glEnable(GL_LINE_SMOOTH);
- glEnable(GL_BLEND);
-
- /* Inner Ring: Light color for action of the brush */
- /* TODO: toggle between add and remove? */
- immUniformColor4ub(255, 255, 255, 200);
- imm_draw_circle_wire(pos, x, y, brush->size, 40);
-
- /* Outer Ring: Dark color for contrast on light backgrounds (e.g. gray on white) */
- immUniformColor3ub(30, 30, 30);
- imm_draw_circle_wire(pos, x, y, brush->size + 1, 40);
-
- immUnbindProgram();
-
- glDisable(GL_BLEND);
- glDisable(GL_LINE_SMOOTH);
- }
-}
-
-/* Turn brush cursor in on/off */
-void ED_gpencil_toggle_brush_cursor(bContext *C, bool enable)
-{
- GP_BrushEdit_Settings *gset = gpsculpt_get_settings(CTX_data_scene(C));
-
- if (gset->paintcursor && !enable) {
- /* clear cursor */
- WM_paint_cursor_end(CTX_wm_manager(C), gset->paintcursor);
- gset->paintcursor = NULL;
- }
- else if (enable) {
- /* enable cursor */
- gset->paintcursor = WM_paint_cursor_activate(CTX_wm_manager(C),
- NULL,
- gp_brush_drawcursor, NULL);
- }
-}
-
-
-/* ************************************************ */
/* Header Info for GPencil Sculpt */
static void gpsculpt_brush_header_set(bContext *C, tGP_BrushEditData *gso)
diff --git a/source/blender/editors/gpencil/gpencil_intern.h b/source/blender/editors/gpencil/gpencil_intern.h
index 2a258c52200..98adebf779a 100644
--- a/source/blender/editors/gpencil/gpencil_intern.h
+++ b/source/blender/editors/gpencil/gpencil_intern.h
@@ -121,9 +121,6 @@ bool gp_smooth_stroke_thickness(bGPDstroke *gps, int i, float inf);
void gp_subdivide_stroke(bGPDstroke *gps, const int new_totpoints);
void gp_randomize_stroke(bGPDstroke *gps, bGPDbrush *brush);
-/* set sculpt cursor */
-void ED_gpencil_toggle_brush_cursor(struct bContext *C, bool enable);
-
/* Layers Enums -------------------------------------- */
struct EnumPropertyItem *ED_gpencil_layers_enum_itemf(struct bContext *C, struct PointerRNA *ptr, struct PropertyRNA *prop, bool *r_free);
diff --git a/source/blender/editors/gpencil/gpencil_utils.c b/source/blender/editors/gpencil/gpencil_utils.c
index 760633c003b..59c7e9274c7 100644
--- a/source/blender/editors/gpencil/gpencil_utils.c
+++ b/source/blender/editors/gpencil/gpencil_utils.c
@@ -69,6 +69,9 @@
#include "ED_view3d.h"
#include "ED_object.h"
+#include "GPU_immediate.h"
+#include "GPU_immediate_util.h"
+
#include "gpencil_intern.h"
/* ******************************************************** */
@@ -1287,3 +1290,54 @@ void ED_gp_get_drawing_reference(ToolSettings *ts, View3D *v3d, Scene *scene, Ob
}
}
/* ******************************************************** */
+/* Cursor drawing */
+
+/* Helper callback for drawing the cursor itself */
+static void gp_brush_drawcursor(bContext *C, int x, int y, void *UNUSED(customdata))
+{
+ Scene *scene = CTX_data_scene(C);
+ GP_BrushEdit_Settings *gset = &scene->toolsettings->gp_sculpt;
+ GP_EditBrush_Data *brush = &gset->brush[gset->brushtype];
+
+ if (brush) {
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
+ glEnable(GL_LINE_SMOOTH);
+ glEnable(GL_BLEND);
+
+ /* Inner Ring: Light color for action of the brush */
+ /* TODO: toggle between add and remove? */
+ immUniformColor4ub(255, 255, 255, 200);
+ imm_draw_circle_wire(pos, x, y, brush->size, 40);
+
+ /* Outer Ring: Dark color for contrast on light backgrounds (e.g. gray on white) */
+ immUniformColor3ub(30, 30, 30);
+ imm_draw_circle_wire(pos, x, y, brush->size + 1, 40);
+
+ immUnbindProgram();
+
+ glDisable(GL_BLEND);
+ glDisable(GL_LINE_SMOOTH);
+ }
+}
+
+/* Turn brush cursor in on/off */
+void ED_gpencil_toggle_brush_cursor(bContext *C, bool enable)
+{
+ Scene *scene = CTX_data_scene(C);
+ GP_BrushEdit_Settings *gset = &scene->toolsettings->gp_sculpt;
+
+ if (gset->paintcursor && !enable) {
+ /* clear cursor */
+ WM_paint_cursor_end(CTX_wm_manager(C), gset->paintcursor);
+ gset->paintcursor = NULL;
+ }
+ else if (enable) {
+ /* enable cursor */
+ gset->paintcursor = WM_paint_cursor_activate(CTX_wm_manager(C),
+ NULL,
+ gp_brush_drawcursor, NULL);
+ }
+}
diff --git a/source/blender/editors/include/ED_gpencil.h b/source/blender/editors/include/ED_gpencil.h
index 8e75aeda03b..cc9f9b0dd8b 100644
--- a/source/blender/editors/include/ED_gpencil.h
+++ b/source/blender/editors/include/ED_gpencil.h
@@ -212,4 +212,7 @@ void ED_gp_project_stroke_to_plane(struct Object *ob, struct RegionView3D *rv3d,
void ED_gp_project_point_to_plane(struct Object *ob, struct RegionView3D *rv3d, const float origin[3], const int axis, char type, struct bGPDspoint *pt);
void ED_gp_get_drawing_reference(struct ToolSettings *ts, struct View3D *v3d, struct Scene *scene, struct Object *ob, struct bGPDlayer *gpl, char align_flag, float vec[3]);
+/* set sculpt cursor */
+void ED_gpencil_toggle_brush_cursor(struct bContext *C, bool enable);
+
#endif /* __ED_GPENCIL_H__ */
diff --git a/source/blender/editors/space_view3d/view3d_select.c b/source/blender/editors/space_view3d/view3d_select.c
index c8fbbde8a15..69068fbb0f7 100644
--- a/source/blender/editors/space_view3d/view3d_select.c
+++ b/source/blender/editors/space_view3d/view3d_select.c
@@ -91,6 +91,7 @@
#include "ED_screen.h"
#include "ED_sculpt.h"
#include "ED_mball.h"
+#include "ED_gpencil.h"
#include "UI_interface.h"
@@ -1604,13 +1605,18 @@ static bool ed_object_select_pick(
/* set cursor */
if (basact->object->mode == OB_MODE_GPENCIL_PAINT) {
WM_cursor_modal_set(CTX_wm_window(C), BC_PAINTBRUSHCURSOR);
+ ED_gpencil_toggle_brush_cursor(C, false);
}
- else if (basact->object->mode == OB_MODE_GPENCIL_PAINT) {
+ else if (basact->object->mode == OB_MODE_GPENCIL_SCULPT) {
WM_cursor_modal_set(CTX_wm_window(C), BC_CROSSCURSOR);
+ /* first disable to avoid duplicate cursors */
+ ED_gpencil_toggle_brush_cursor(C, false);
+ ED_gpencil_toggle_brush_cursor(C, true);
}
else {
/* TODO: maybe is better use restore */
WM_cursor_modal_set(CTX_wm_window(C), CURSOR_STD);
+ ED_gpencil_toggle_brush_cursor(C, false);
}
/* set workspace mode */
BKE_workspace_object_mode_set(CTX_wm_workspace(C), basact->object->mode);
More information about the Bf-blender-cvs
mailing list