Pixels: Support sizes

Two things: The sizes are powers of two (size #2 is 2x2 larger
than size #1; size #3 is 2x2 larger than size #2, and 4x4 larger
than size #1; and so on).  And the sizes are actually related to
the size of the canvas (based on the sqrt of the canvas area).
This commit is contained in:
Bill Kendrick 2023-04-20 22:56:03 -07:00
parent c3a5f6cfc2
commit 59fb2d1a67
2 changed files with 30 additions and 6 deletions

View file

@ -42,6 +42,7 @@ https://tuxpaint.org/
+ Confetti
+ Googly Eyes
+ Negative & Opposite
+ Pixels
+ Puzzle
+ Rainbow & Smooth Rainbow
+ Ripples

View file

@ -23,7 +23,7 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
(See COPYING.txt)
Last updated: February 12, 2023
Last updated: April 20, 2023
*/
#include <stdio.h>
@ -45,11 +45,12 @@ enum
static Mix_Chunk *pixel_snd;
static Uint8 pixels_r, pixels_g, pixels_b;
static int pixel_size = 8;
/* Local function prototype: */
int pixels_init(magic_api * api);
int pixels_init(magic_api * api, Uint32 disabled_features);
Uint32 pixels_api_version(void);
int pixels_get_tool_count(magic_api * api);
SDL_Surface *pixels_get_icon(magic_api * api, int which);
@ -72,9 +73,13 @@ void pixels_switchin(magic_api * api, int which, int mode,
void pixels_switchout(magic_api * api, int which, int mode,
SDL_Surface * canvas);
int pixels_modes(magic_api * api, int which);
Uint8 pixels_accepted_sizes(magic_api * api, int which, int mode);
Uint8 pixels_default_size(magic_api * api, int which, int mode);
void pixels_set_size(magic_api * api, int which, int mode, SDL_Surface * canvas, SDL_Surface * last, Uint8 size, SDL_Rect * update_rect);
// No setup required:
int pixels_init(magic_api * api)
int pixels_init(magic_api * api, Uint32 disabled_features ATTRIBUTE_UNUSED)
{
char fname[1024];
@ -138,9 +143,6 @@ static void do_pixels(void *ptr ATTRIBUTE_UNUSED, int which ATTRIBUTE_UNUSED,
SDL_Surface * last ATTRIBUTE_UNUSED, int x, int y)
{
SDL_Rect dest;
int pixel_size;
pixel_size = 8;
dest.x = (x / pixel_size) * pixel_size;
dest.y = (y / pixel_size) * pixel_size;
@ -237,3 +239,24 @@ int pixels_modes(magic_api * api ATTRIBUTE_UNUSED, int which ATTRIBUTE_UNUSED)
{
return (MODE_PAINT);
}
Uint8 pixels_accepted_sizes(magic_api * api ATTRIBUTE_UNUSED, int which ATTRIBUTE_UNUSED, int mode ATTRIBUTE_UNUSED)
{
return 4;
}
Uint8 pixels_default_size(magic_api * api ATTRIBUTE_UNUSED, int which ATTRIBUTE_UNUSED, int mode ATTRIBUTE_UNUSED)
{
return 1;
}
void pixels_set_size(magic_api * api ATTRIBUTE_UNUSED, int which ATTRIBUTE_UNUSED, int mode ATTRIBUTE_UNUSED, SDL_Surface * canvas, SDL_Surface * last ATTRIBUTE_UNUSED, Uint8 size, SDL_Rect * update_rect ATTRIBUTE_UNUSED)
{
int canv_area_scale;
canv_area_scale = sqrt(canvas->w * canvas->h) / 144;
printf("scale=%d\n", canv_area_scale);
pixel_size = pow(2, size) * canv_area_scale;
}