Tool System: support non-brush tools w/ paint modes

Allows select, gradient tools not to conflict with brush keymap.
This commit is contained in:
2018-05-01 11:22:12 +02:00
parent 1e8021a58a
commit 2c9670b92d
4 changed files with 23 additions and 4 deletions

View File

@@ -273,7 +273,9 @@ static int image_paint_poll(bContext *C)
obact = CTX_data_active_object(C);
if ((obact && obact->mode & OB_MODE_TEXTURE_PAINT) && CTX_wm_region_view3d(C)) {
return 1;
if (WM_toolsystem_active_tool_is_brush(C)) {
return 1;
}
}
else {
SpaceImage *sima = CTX_wm_space_image(C);

View File

@@ -214,8 +214,11 @@ int vertex_paint_poll(bContext *C)
ScrArea *sa = CTX_wm_area(C);
if (sa && sa->spacetype == SPACE_VIEW3D) {
ARegion *ar = CTX_wm_region(C);
if (ar->regiontype == RGN_TYPE_WINDOW)
return 1;
if (ar->regiontype == RGN_TYPE_WINDOW) {
if (WM_toolsystem_active_tool_is_brush(C)) {
return 1;
}
}
}
}
return 0;
@@ -241,7 +244,9 @@ int weight_paint_poll(bContext *C)
{
ARegion *ar = CTX_wm_region(C);
if (ar->regiontype == RGN_TYPE_WINDOW) {
return 1;
if (WM_toolsystem_active_tool_is_brush(C)) {
return 1;
}
}
}
return 0;

View File

@@ -595,6 +595,8 @@ void WM_toolsystem_link(struct bContext *C, struct WorkSpace *workspace);
void WM_toolsystem_set(struct bContext *C, const struct bToolDef *tool);
void WM_toolsystem_init(struct bContext *C);
bool WM_toolsystem_active_tool_is_brush(const struct bContext *C);
/* wm_tooltip.c */
typedef struct ARegion *(*wmTooltipInitFn)(struct bContext *, struct ARegion *, bool *);

View File

@@ -140,3 +140,13 @@ void WM_toolsystem_init(bContext *C)
WM_toolsystem_link(C, workspace);
}
}
/**
* For paint modes to support non-brush tools.
*/
bool WM_toolsystem_active_tool_is_brush(const bContext *C)
{
WorkSpace *workspace = CTX_wm_workspace(C);
/* Will need to become more comprehensive, for now check tool data-block. */
return workspace->tool.data_block[0] != '\0';
}