diff options
author | Campbell Barton <ideasman42@gmail.com> | 2013-01-16 23:22:15 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2013-01-16 23:22:15 +0400 |
commit | 337695d4967f99edd5163a639d0f7a884fcd27c8 (patch) | |
tree | cfa4b2774866fc14633d987127249903d6229811 | |
parent | 6e7ee2649d108e680d4d25f6f2d382022fd0bb75 (diff) |
draw the brush size with pressure applied (when the tablet is used), nice to see the actual size used.
-rw-r--r-- | source/blender/editors/sculpt_paint/paint_cursor.c | 12 | ||||
-rw-r--r-- | source/blender/windowmanager/WM_api.h | 1 | ||||
-rw-r--r-- | source/blender/windowmanager/intern/wm_event_system.c | 4 | ||||
-rw-r--r-- | source/blender/windowmanager/intern/wm_window.c | 15 |
4 files changed, 32 insertions, 0 deletions
diff --git a/source/blender/editors/sculpt_paint/paint_cursor.c b/source/blender/editors/sculpt_paint/paint_cursor.c index 5f241f0d9cc..ec8d60ce62a 100644 --- a/source/blender/editors/sculpt_paint/paint_cursor.c +++ b/source/blender/editors/sculpt_paint/paint_cursor.c @@ -595,6 +595,18 @@ static void paint_draw_cursor(bContext *C, int x, int y, void *UNUSED(unused)) /* draw brush outline */ glTranslatef(translation[0], translation[1], 0); + + /* draw an inner brush */ + if (BKE_brush_use_size_pressure(scene, brush)) { + const wmWindow *win = CTX_wm_window(C); + const float pressure = WM_cursor_pressure(win); + if (pressure != -1.0f && pressure != 0.0f) { + /* inner at full alpha */ + glutil_draw_lined_arc(0.0, M_PI * 2.0, final_radius * pressure, 40); + /* outer at half alpha */ + glColor4f(outline_col[0], outline_col[1], outline_col[2], outline_alpha * 0.5f); + } + } glutil_draw_lined_arc(0.0, M_PI * 2.0, final_radius, 40); glTranslatef(-translation[0], -translation[1], 0); diff --git a/source/blender/windowmanager/WM_api.h b/source/blender/windowmanager/WM_api.h index eb1aad75a88..1b8bf29d92a 100644 --- a/source/blender/windowmanager/WM_api.h +++ b/source/blender/windowmanager/WM_api.h @@ -131,6 +131,7 @@ void *WM_paint_cursor_activate(struct wmWindowManager *wm, void WM_paint_cursor_end(struct wmWindowManager *wm, void *handle); void WM_cursor_warp (struct wmWindow *win, int x, int y); +float WM_cursor_pressure (const struct wmWindow *win); /* event map */ int WM_userdef_event_map(int kmitype); diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c index d81aa74e138..907a0a34f60 100644 --- a/source/blender/windowmanager/intern/wm_event_system.c +++ b/source/blender/windowmanager/intern/wm_event_system.c @@ -2655,6 +2655,10 @@ static void update_tablet_data(wmWindow *win, wmEvent *event) event->custom = EVT_DATA_TABLET; event->customdata = wmtab; event->customdatafree = 1; + // printf("%s: using tablet %.5f\n", wmtab->Pressure, __func__); + } + else { + // printf("%s: not using tablet\n", __func__); } } diff --git a/source/blender/windowmanager/intern/wm_window.c b/source/blender/windowmanager/intern/wm_window.c index e6a40187bfe..52024897f70 100644 --- a/source/blender/windowmanager/intern/wm_window.c +++ b/source/blender/windowmanager/intern/wm_window.c @@ -1318,6 +1318,21 @@ void WM_cursor_warp(wmWindow *win, int x, int y) } } +/** + * Get the cursor pressure, in most cases you'll want to use wmTabletData from the event + */ +float WM_cursor_pressure(const struct wmWindow *win) +{ + const GHOST_TabletData *td = GHOST_GetTabletData(win->ghostwin); + /* if there's tablet data from an active tablet device then add it */ + if ((td != NULL) && td->Active != GHOST_kTabletModeNone) { + return td->Pressure; + } + else { + return -1.0f; + } +} + /* support for native pixel size */ /* mac retina opens window in size X, but it has up to 2 x more pixels */ int WM_window_pixels_x(wmWindow *win) |