diff options
Diffstat (limited to 'source/blender/editors/gpencil')
-rw-r--r-- | source/blender/editors/gpencil/gpencil_buttons.c | 22 | ||||
-rw-r--r-- | source/blender/editors/gpencil/gpencil_paint.c | 15 |
2 files changed, 29 insertions, 8 deletions
diff --git a/source/blender/editors/gpencil/gpencil_buttons.c b/source/blender/editors/gpencil/gpencil_buttons.c index cc4a05c3421..e719d9ab392 100644 --- a/source/blender/editors/gpencil/gpencil_buttons.c +++ b/source/blender/editors/gpencil/gpencil_buttons.c @@ -227,6 +227,7 @@ static void draw_gpencil_panel (bContext *C, uiLayout *layout, bGPdata *gpd, Poi PointerRNA gpd_ptr; bGPDlayer *gpl; uiLayout *col, *row; + short v3d_stroke_opts_on = 0; /* make new PointerRNA for Grease Pencil block */ RNA_id_pointer_create((ID *)gpd, &gpd_ptr); @@ -255,17 +256,24 @@ static void draw_gpencil_panel (bContext *C, uiLayout *layout, bGPdata *gpd, Poi /* label */ uiItemL(col, "Drawing Settings:", 0); - /* 'stick to view' option */ + /* check whether advanced 3D-View drawing space options can be used */ + if (CTX_wm_view3d(C)) { + if (gpd->flag & (GP_DATA_DEPTH_STROKE|GP_DATA_DEPTH_VIEW)) + v3d_stroke_opts_on = 1; + } + + /* drawing space options */ row= uiLayoutRow(col, 1); - uiItemEnumR_string(row, &gpd_ptr, "draw_mode", "VIEW", NULL, 0); - uiItemEnumR_string(row, &gpd_ptr, "draw_mode", "CURSOR", NULL, 0); + uiItemEnumR_string(row, &gpd_ptr, "draw_mode", "VIEW", NULL, 0); + uiItemEnumR_string(row, &gpd_ptr, "draw_mode", "CURSOR", NULL, 0); row= uiLayoutRow(col, 1); - uiItemEnumR_string(row, &gpd_ptr, "draw_mode", "SURFACE", NULL, 0); - uiItemEnumR_string(row, &gpd_ptr, "draw_mode", "STROKE", NULL, 0); + uiLayoutSetActive(row, v3d_stroke_opts_on); + uiItemEnumR_string(row, &gpd_ptr, "draw_mode", "SURFACE", NULL, 0); + uiItemEnumR_string(row, &gpd_ptr, "draw_mode", "STROKE", NULL, 0); row= uiLayoutRow(col, 0); - uiLayoutSetActive(row, (gpd->flag & (GP_DATA_DEPTH_STROKE|GP_DATA_DEPTH_VIEW)) ? 1:0); - uiItemR(row, &gpd_ptr, "use_stroke_endpoints", 0, NULL, 0); + uiLayoutSetActive(row, v3d_stroke_opts_on); + uiItemR(row, &gpd_ptr, "use_stroke_endpoints", 0, NULL, 0); } diff --git a/source/blender/editors/gpencil/gpencil_paint.c b/source/blender/editors/gpencil/gpencil_paint.c index 59c9150fc14..c4df1bde1c2 100644 --- a/source/blender/editors/gpencil/gpencil_paint.c +++ b/source/blender/editors/gpencil/gpencil_paint.c @@ -1096,7 +1096,20 @@ static void gp_paint_initstroke (tGPsdata *p, short paintmode) #endif case SPACE_IMAGE: { - p->gpd->sbuffer_sflag |= GP_STROKE_2DSPACE; + SpaceImage *sima= (SpaceImage *)p->sa->spacedata.first; + + /* only set these flags if the image editor doesn't have an image active, + * otherwise user will be confused by strokes not appearing after they're drawn + * + * Admittedly, this is a bit hacky, but it works much nicer from an ergonomic standpoint! + */ + if ELEM(NULL, sima, sima->image) { + /* make strokes be drawn in screen space */ + p->gpd->sbuffer_sflag &= ~GP_STROKE_2DSPACE; + p->gpd->flag &= ~GP_DATA_VIEWALIGN; + } + else + p->gpd->sbuffer_sflag |= GP_STROKE_2DSPACE; } break; } |