From 2ee0080ffd1ea23e822ac34800cbdcaa4ebbadca Mon Sep 17 00:00:00 2001 From: Bill Kendrick Date: Sun, 5 Sep 2021 23:16:20 -0700 Subject: [PATCH] Icons denoting animated/directional on brushes Closes https://sourceforge.net/p/tuxpaint/bugs/183/ --- data/images/ui/brush_anim.png | Bin 0 -> 9193 bytes data/images/ui/brush_dir.png | Bin 0 -> 1075 bytes docs/CHANGES.txt | 12 +++++++++--- src/tuxpaint.c | 31 ++++++++++++++++++++++++++++--- 4 files changed, 37 insertions(+), 6 deletions(-) create mode 100644 data/images/ui/brush_anim.png create mode 100644 data/images/ui/brush_dir.png diff --git a/data/images/ui/brush_anim.png b/data/images/ui/brush_anim.png new file mode 100644 index 0000000000000000000000000000000000000000..1c733608751956aa5d63679c42b95839807b0c62 GIT binary patch literal 9193 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 literal 0 HcmV?d00001 diff --git a/docs/CHANGES.txt b/docs/CHANGES.txt index d90be5ef1..8f51888a8 100644 --- a/docs/CHANGES.txt +++ b/docs/CHANGES.txt @@ -16,8 +16,8 @@ $Id$ style effects!) (Closes https://sourceforge.net/p/tuxpaint/feature-requests/204/) - * Magic Tool Improvememnts: - ------------------------- + * Magic Tool Improvements: + ------------------------ * "Halftone" works much better, drawing large overlapping circles of Cyan, Magenta, Yellow, and Black, based on the average color of the area of the picture being replaced, to give a @@ -25,7 +25,13 @@ $Id$ * "Halftone" can now affect the entire image at once. - * Documentation updates + * Other Improvements: + ------------------- + * Small icons appear on brush selection buttons denoting + when the brush is animated and/or directional. + (Closes https://sourceforge.net/p/tuxpaint/bugs/183/) + + * Documentation updates: --------------------- * Ensured Tux Paint's built-in help ("tuxpaint --help"), Unix manual ("man page"), and command-line option diff --git a/src/tuxpaint.c b/src/tuxpaint.c index c36bea748..95ec2940e 100644 --- a/src/tuxpaint.c +++ b/src/tuxpaint.c @@ -22,7 +22,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA (See COPYING.txt) - June 14, 2002 - August 8, 2021 + June 14, 2002 - September 5, 2021 */ #include "platform.h" @@ -1481,6 +1481,7 @@ static SDL_Surface *img_title, *img_title_credits, *img_title_tuxpaint; static SDL_Surface *img_btn_up, *img_btn_down, *img_btn_off, *img_btn_hold; static SDL_Surface *img_btnsm_up, *img_btnsm_off, *img_btnsm_down, *img_btnsm_hold; static SDL_Surface *img_btn_nav, *img_btnsm_nav; +static SDL_Surface *img_brush_anim, *img_brush_dir; static SDL_Surface *img_prev, *img_next; static SDL_Surface *img_mirror, *img_flip; static SDL_Surface *img_dead40x40; @@ -8819,6 +8820,8 @@ static void draw_brushes(void) if (brush < num_brushes) { + int ui_btn_x, ui_btn_y; + if (brushes_directional[brush]) src.x = (img_brushes_thumbs[brush]->w / abs(brushes_frames[brush])) / 3; else @@ -8829,10 +8832,26 @@ static void draw_brushes(void) src.w = (img_brushes_thumbs[brush]->w / abs(brushes_frames[brush])) / (brushes_directional[brush] ? 3 : 1); src.h = (img_brushes_thumbs[brush]->h / (brushes_directional[brush] ? 3 : 1)); - dest.x = ((i % 2) * button_w) + (WINDOW_WIDTH - r_ttoolopt.w) + ((button_w - src.w) >> 1); - dest.y = ((i / 2) * button_h) + r_ttoolopt.h + ((button_h - src.h) >> 1) + off_y; + ui_btn_x = ((i % 2) * button_w) + (WINDOW_WIDTH - r_ttoolopt.w); + ui_btn_y = ((i / 2) * button_h) + r_ttoolopt.h + off_y; + + dest.x = ui_btn_x + ((button_w - src.w) >> 1); + dest.y = ui_btn_y + ((button_h - src.h) >> 1); SDL_BlitSurface(img_brushes_thumbs[brush], &src, screen, &dest); + + if (brushes_directional[brush]) + { + dest.x = ui_btn_x + button_w - img_brush_dir->w; + dest.y = ui_btn_y + button_h - img_brush_dir->h; + SDL_BlitSurface(img_brush_dir, NULL, screen, &dest); + } + if (brushes_frames[brush] > 1) + { + dest.x = ui_btn_x; + dest.y = ui_btn_y + button_h - img_brush_anim->h; + SDL_BlitSurface(img_brush_anim, NULL, screen, &dest); + } } } } @@ -13098,6 +13117,9 @@ static void cleanup(void) free_surface(&img_btn_nav); free_surface(&img_btnsm_nav); + free_surface(&img_brush_anim); + free_surface(&img_brush_dir); + free_surface(&img_sfx); free_surface(&img_speak); @@ -24884,6 +24906,9 @@ static void setup(void) img_btn_nav = loadimagerb(DATA_PREFIX "images/ui/btn_nav.png"); img_btnsm_nav = loadimagerb(DATA_PREFIX "images/ui/btnsm_nav.png"); + img_brush_anim = loadimagerb(DATA_PREFIX "images/ui/brush_anim.png"); + img_brush_dir = loadimagerb(DATA_PREFIX "images/ui/brush_dir.png"); + img_sfx = loadimagerb(DATA_PREFIX "images/tools/sfx.png"); img_speak = loadimagerb(DATA_PREFIX "images/tools/speak.png");