Tool System: support non-brush tools w/ paint modes
Allows select, gradient tools not to conflict with brush keymap.
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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 *);
|
||||
|
||||
|
||||
@@ -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';
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user