From f787cb0f753906ea77ba379aca58614afe59060f Mon Sep 17 00:00:00 2001 From: Bill Kendrick Date: Wed, 9 Feb 2022 22:41:13 -0800 Subject: [PATCH] WIP Label "apply" option Starting work towards https://sourceforge.net/p/tuxpaint/feature-requests/213/ The ability to 'apply' a label to the canvas, making it permanent (as if added using the "Text" tool instead). Removed unused "label rotate" option's code (and hence addressed a bug we didn't relalize when choosing the "Label" tool while in in "--nostampcontrols" mode; the unused "rotate" button would appear). --- data/images/tools/label_apply.png | Bin 0 -> 10131 bytes docs/CHANGES.txt | 6 ++ src/tuxpaint.c | 112 ++++++++++++------------------ 3 files changed, 50 insertions(+), 68 deletions(-) create mode 100644 data/images/tools/label_apply.png diff --git a/data/images/tools/label_apply.png b/data/images/tools/label_apply.png new file mode 100644 index 0000000000000000000000000000000000000000..e42c95115dfca92b2e817035bdbc72613a5c25f3 GIT binary patch literal 10131 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 + * WIP "Label" tool now offers a way to "apply" a label to the + canvas (as if it were 'painted' onto the drawing with the "Text" + tool). + Closes https://sourceforge.net/p/tuxpaint/feature-requests/213/ + Bill Kendrick + * More instruction text are shown (and sound effects play) when using the Label tool. Bill Kendrick diff --git a/src/tuxpaint.c b/src/tuxpaint.c index c79aa876b..5846aed4b 100644 --- a/src/tuxpaint.c +++ b/src/tuxpaint.c @@ -685,7 +685,6 @@ enum LABEL_OFF, LABEL_LABEL, LABEL_SELECT - /* , LABEL_ROTATE */ }; @@ -1536,7 +1535,7 @@ static SDL_Surface *img_grow, *img_shrink; static SDL_Surface *img_magic_paint, *img_magic_fullscreen; static SDL_Surface *img_shapes_corner, *img_shapes_center; static SDL_Surface *img_bold, *img_italic; -static SDL_Surface *img_label, *img_label_select; +static SDL_Surface *img_label_select, *img_label_apply; static SDL_Surface *img_color_picker, *img_color_picker_thumb, *img_paintwell, *img_color_sel, *img_color_mix; static int color_picker_x, color_picker_y; static int color_mixer_reset; @@ -9657,50 +9656,49 @@ static void draw_fonts(void) /* Draw text controls: */ + /* Label controls, if in label tool (always!) */ + + if (cur_tool == TOOL_LABEL) + { + /* "Apply Label" button */ + dest.x = WINDOW_WIDTH - r_ttoolopt.w; + dest.y = r_ttoolopt.h + ((most / gd_toolopt.cols + TOOLOFFSET / gd_toolopt.cols) * button_h); + SDL_BlitSurface(img_btn_off, NULL, screen, &dest); + + /* FIXME: Draw img_label_apply -bjk 2022.02.09 */ + + + /* "Select Label" button */ + dest.x = WINDOW_WIDTH - button_w; + dest.y = r_ttoolopt.h + ((most / gd_toolopt.cols + TOOLOFFSET / gd_toolopt.cols) * button_h); + + if (cur_label == LABEL_SELECT) + SDL_BlitSurface(img_btn_down, NULL, screen, &dest); + + else + { + if (are_labels()) + SDL_BlitSurface(img_btn_up, NULL, screen, &dest); + else + SDL_BlitSurface(img_btn_off, NULL, screen, &dest); + } + + + dest.x = WINDOW_WIDTH - button_w + (button_w - img_label_select->w) / 2; + dest.y = (r_ttoolopt.h + ((most / gd_toolopt.cols + TOOLOFFSET / gd_toolopt.cols) * button_h) + (button_h - img_label_select->h) / 2); + + SDL_BlitSurface(img_label_select, NULL, screen, &dest); + most = most + gd_toolopt.cols; + } + + + /* Size, italic, and bold, only appear when not UI is not being simplified */ if (!disable_stamp_controls) { SDL_Surface *button_color; SDL_Surface *button_body; - if (cur_tool == TOOL_LABEL) - { - - /* disabling rotation as I am not sure how this should be implemented */ - dest.x = WINDOW_WIDTH - r_ttoolopt.w; - dest.y = r_ttoolopt.h + ((most / gd_toolopt.cols + TOOLOFFSET / gd_toolopt.cols) * button_h); - SDL_BlitSurface(img_btn_off, NULL, screen, &dest); - - /* if(cur_label == LABEL_ROTATE) */ - /* SDL_BlitSurface(img_btn_down, NULL, screen, &dest); */ - /* else */ - /* SDL_BlitSurface(img_btn_up, NULL, screen, &dest); */ - - /* dest.x = WINDOW_WIDTH - r_ttoolopt.w + (48 - img_label->w) / 2; */ - /* dest.y = (40 + ((4 + TOOLOFFSET / 2) * 48) + (48 - img_label->h) / 2); */ - - /* SDL_BlitSurface(img_label, NULL, screen, &dest); */ - - dest.x = WINDOW_WIDTH - button_w; - dest.y = r_ttoolopt.h + ((most / gd_toolopt.cols + TOOLOFFSET / gd_toolopt.cols) * button_h); - - if (cur_label == LABEL_SELECT) - SDL_BlitSurface(img_btn_down, NULL, screen, &dest); - - else - { - if (are_labels()) - SDL_BlitSurface(img_btn_up, NULL, screen, &dest); - else - SDL_BlitSurface(img_btn_off, NULL, screen, &dest); - } - - - dest.x = WINDOW_WIDTH - button_w + (button_w - img_label_select->w) / 2; - dest.y = (r_ttoolopt.h + ((most / gd_toolopt.cols + TOOLOFFSET / gd_toolopt.cols) * button_h) + (button_h - img_label_select->h) / 2); - - SDL_BlitSurface(img_label_select, NULL, screen, &dest); - most = most + gd_toolopt.cols; - } + // label_ctrl_y = r_ttoolopt.h + ((most / gd_toolopt.cols + TOOLOFFSET / gd_toolopt.cols) * button_h); /* Show bold button: */ @@ -9734,7 +9732,7 @@ static void draw_fonts(void) SDL_BlitSurface(img_italic, NULL, screen, &dest); most = most + gd_toolopt.cols; - // printf("most %d\n", most); + /* Show shrink button: */ @@ -9783,31 +9781,6 @@ static void draw_fonts(void) SDL_BlitSurface(button_color, NULL, img_grow, NULL); SDL_BlitSurface(img_grow, NULL, screen, &dest); } - else - { - if (cur_tool == TOOL_LABEL) - { - dest.x = WINDOW_WIDTH - r_ttoolopt.w; - dest.y = r_ttoolopt.h + ((most / gd_toolopt.cols + TOOLOFFSET / gd_toolopt.cols) * button_h); - - SDL_BlitSurface(img_btn_up, NULL, screen, &dest); - - dest.x = WINDOW_WIDTH - r_ttoolopt.w + (button_w - img_label->w) / 2; - dest.y = (r_ttoolopt.h + ((most / gd_toolopt.cols + TOOLOFFSET / gd_toolopt.cols) * button_h) + (button_h - img_label->h) / 2); - - SDL_BlitSurface(img_label, NULL, screen, &dest); - - dest.x = WINDOW_WIDTH - button_w; - dest.y = r_ttoolopt.h + ((most / gd_toolopt.cols + TOOLOFFSET / gd_toolopt.cols) * button_h); - - SDL_BlitSurface(img_btn_up, NULL, screen, &dest); - - dest.x = WINDOW_WIDTH - button_w + (button_w - img_label_select->w) / 2; - dest.y = (r_ttoolopt.h + ((most / gd_toolopt.cols + TOOLOFFSET / gd_toolopt.cols) * button_h) + (button_h - img_label_select->h) / 2); - - SDL_BlitSurface(img_label_select, NULL, screen, &dest); - } - } } @@ -13878,6 +13851,9 @@ static void cleanup(void) free_surface(&img_bold); free_surface(&img_italic); + free_surface(&img_label_select); + free_surface(&img_label_apply); + free_surface_array(undo_bufs, NUM_UNDO_BUFS); #ifdef LOW_QUALITY_COLOR_SELECTOR @@ -26721,8 +26697,8 @@ static void setup(void) img_bold = loadimagerb(DATA_PREFIX "images/ui/bold.png"); img_italic = loadimagerb(DATA_PREFIX "images/ui/italic.png"); - img_label = loadimagerb(DATA_PREFIX "images/tools/label.png"); img_label_select = loadimagerb(DATA_PREFIX "images/tools/label_select.png"); + img_label_apply = loadimagerb(DATA_PREFIX "images/tools/label_apply.png"); show_progress_bar(screen);