Beginnings of stamp control interface. (Display only; partial, at that!)
This commit is contained in:
parent
8955d1a28c
commit
fa1fe602ce
1 changed files with 182 additions and 35 deletions
215
src/tuxpaint.c
215
src/tuxpaint.c
|
|
@ -262,7 +262,7 @@ void win32_perror(const char *str)
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
LANG_CA, /* Catalan */
|
LANG_CA, /* Catalan */
|
||||||
LANG_CZ, /* Czech */
|
LANG_CS, /* Czech */
|
||||||
LANG_DA, /* Danish */
|
LANG_DA, /* Danish */
|
||||||
LANG_DE, /* German */
|
LANG_DE, /* German */
|
||||||
LANG_EL, /* Greek */
|
LANG_EL, /* Greek */
|
||||||
|
|
@ -287,8 +287,8 @@ enum {
|
||||||
LANG_PT, /* Portuguese */
|
LANG_PT, /* Portuguese */
|
||||||
LANG_RO, /* Romanian */
|
LANG_RO, /* Romanian */
|
||||||
LANG_RU, /* Russian */
|
LANG_RU, /* Russian */
|
||||||
LANG_SE, /* Swedish */
|
|
||||||
LANG_SK, /* Slovak */
|
LANG_SK, /* Slovak */
|
||||||
|
LANG_SV, /* Swedish */
|
||||||
LANG_TA, /* Tamil */
|
LANG_TA, /* Tamil */
|
||||||
LANG_TR, /* Turkish */
|
LANG_TR, /* Turkish */
|
||||||
LANG_WA, /* Walloon */
|
LANG_WA, /* Walloon */
|
||||||
|
|
@ -298,7 +298,7 @@ enum {
|
||||||
|
|
||||||
const char * lang_prefixes[NUM_LANGS] = {
|
const char * lang_prefixes[NUM_LANGS] = {
|
||||||
"ca",
|
"ca",
|
||||||
"cz",
|
"cs",
|
||||||
"da",
|
"da",
|
||||||
"de",
|
"de",
|
||||||
"el",
|
"el",
|
||||||
|
|
@ -323,8 +323,8 @@ const char * lang_prefixes[NUM_LANGS] = {
|
||||||
"pt",
|
"pt",
|
||||||
"ro",
|
"ro",
|
||||||
"ru",
|
"ru",
|
||||||
"se",
|
|
||||||
"sk",
|
"sk",
|
||||||
|
"sv",
|
||||||
"ta",
|
"ta",
|
||||||
"tr",
|
"tr",
|
||||||
"wa",
|
"wa",
|
||||||
|
|
@ -360,9 +360,18 @@ int lang_use_right_to_left[] = {
|
||||||
typedef struct info_type {
|
typedef struct info_type {
|
||||||
int colorable;
|
int colorable;
|
||||||
int tintable;
|
int tintable;
|
||||||
|
int mirrorable;
|
||||||
|
int flipable;
|
||||||
} info_type;
|
} info_type;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct state_type {
|
||||||
|
int mirrored;
|
||||||
|
int flipped;
|
||||||
|
int size;
|
||||||
|
} state_type;
|
||||||
|
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
SAVE_OVER_PROMPT,
|
SAVE_OVER_PROMPT,
|
||||||
SAVE_OVER_ALWAYS,
|
SAVE_OVER_ALWAYS,
|
||||||
|
|
@ -416,6 +425,7 @@ SDL_Surface * img_brushes[MAX_BRUSHES];
|
||||||
SDL_Surface * img_stamps[MAX_STAMPS];
|
SDL_Surface * img_stamps[MAX_STAMPS];
|
||||||
char * txt_stamps[MAX_STAMPS];
|
char * txt_stamps[MAX_STAMPS];
|
||||||
info_type * inf_stamps[MAX_STAMPS];
|
info_type * inf_stamps[MAX_STAMPS];
|
||||||
|
state_type * state_stamps[MAX_STAMPS];
|
||||||
#ifndef NOSOUND
|
#ifndef NOSOUND
|
||||||
Mix_Chunk * snd_stamps[MAX_STAMPS];
|
Mix_Chunk * snd_stamps[MAX_STAMPS];
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -3395,23 +3405,23 @@ void show_usage(FILE * f, char * prg)
|
||||||
"\n"
|
"\n"
|
||||||
"Usage: %s {--usage | --help | --version | --copying}\n"
|
"Usage: %s {--usage | --help | --version | --copying}\n"
|
||||||
"\n"
|
"\n"
|
||||||
" %s [--windowed | --fullscreen] [--640x480 | --800x600]\n"
|
" %s [--windowed | --fullscreen] [--640x480 | --800x600]\n"
|
||||||
" %s [--sound | --nosound] [--quit | --noquit]\n"
|
" %s [--sound | --nosound] [--quit | --noquit]\n"
|
||||||
" %s [--print | --noprint] [--complexshapes | --simpleshapes]\n"
|
" %s [--print | --noprint] [--complexshapes | --simpleshapes]\n"
|
||||||
" %s [--mixedcase | --uppercase] [--fancycursors | --nofancycursors]\n"
|
" %s [--mixedcase | --uppercase] [--fancycursors | --nofancycursors]\n"
|
||||||
" %s [--mouse | --keyboard] [--dontgrab | --grab]\n"
|
" %s [--mouse | --keyboard] [--dontgrab | --grab]\n"
|
||||||
" %s [--noshortcuts | --shortcuts] [--wheelmouse | --nowheelmouse]\n"
|
" %s [--noshortcuts | --shortcuts] [--wheelmouse | --nowheelmouse]\n"
|
||||||
" %s [--outlines | --nooutlines] [--stamps | --nostamps]\n"
|
" %s [--outlines | --nooutlines] [--stamps | --nostamps]\n"
|
||||||
" %s [--wheelmouse | --nowheelmouse]\n"
|
" %s [--wheelmouse | --nowheelmouse]\n"
|
||||||
" %s [--saveoverask | --saveover | --saveovernew]\n"
|
" %s [--saveoverask | --saveover | --saveovernew]\n"
|
||||||
" %s [--savedir DIRECTORY]\n"
|
" %s [--savedir DIRECTORY]\n"
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
" %s [--printcfg | --noprintcfg]\n"
|
" %s [--printcfg | --noprintcfg]\n"
|
||||||
#endif
|
#endif
|
||||||
" %s [--printdelay=SECONDS]\n"
|
" %s [--printdelay=SECONDS]\n"
|
||||||
" %s [--lang LANGUAGE | --locale LOCALE]\n"
|
" %s [--lang LANGUAGE | --locale LOCALE | --lang help]\n"
|
||||||
" %s [--nosysconfig]\n"
|
" %s [--nosysconfig]\n"
|
||||||
/* " %s [--record FILE | --playback FILE]\n" */
|
/* " %s [--record FILE | --playback FILE]\n" */
|
||||||
"\n",
|
"\n",
|
||||||
prg, prg,
|
prg, prg,
|
||||||
blank, blank, blank,
|
blank, blank, blank,
|
||||||
|
|
@ -3955,13 +3965,10 @@ void setup(int argc, char * argv[])
|
||||||
else if (strcmp(argv[i], "--help") == 0 ||
|
else if (strcmp(argv[i], "--help") == 0 ||
|
||||||
strcmp(argv[i], "-h") == 0)
|
strcmp(argv[i], "-h") == 0)
|
||||||
{
|
{
|
||||||
printf("\n");
|
|
||||||
show_version();
|
show_version();
|
||||||
printf("\n");
|
|
||||||
show_usage(stdout, (char *) getfilename(argv[0]));
|
show_usage(stdout, (char *) getfilename(argv[0]));
|
||||||
|
|
||||||
printf(
|
printf(
|
||||||
"\n"
|
|
||||||
"See: " DOC_PREFIX "README.txt\n"
|
"See: " DOC_PREFIX "README.txt\n"
|
||||||
"\n");
|
"\n");
|
||||||
exit(0);
|
exit(0);
|
||||||
|
|
@ -4715,6 +4722,7 @@ void setup(int argc, char * argv[])
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (num_stamps == 0)
|
if (num_stamps == 0)
|
||||||
{
|
{
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
|
|
@ -4739,6 +4747,25 @@ void setup(int argc, char * argv[])
|
||||||
img_stamp_thumbs[i] = NULL;
|
img_stamp_thumbs[i] = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
state_stamps[i] = malloc(sizeof(state_type));
|
||||||
|
|
||||||
|
if (inf_stamps[i] == NULL)
|
||||||
|
{
|
||||||
|
inf_stamps[i] = malloc(sizeof(info_type));
|
||||||
|
inf_stamps[i]->tintable = 0;
|
||||||
|
inf_stamps[i]->colorable = 0;
|
||||||
|
inf_stamps[i]->mirrorable = 1;
|
||||||
|
inf_stamps[i]->flipable = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mirrorstamps && inf_stamps[i]->mirrorable)
|
||||||
|
state_stamps[i]->mirrored = 1;
|
||||||
|
else
|
||||||
|
state_stamps[i]->mirrored = 0;
|
||||||
|
|
||||||
|
state_stamps[i]->flipped = 0;
|
||||||
|
state_stamps[i]->size = 100;
|
||||||
|
|
||||||
show_progress_bar();
|
show_progress_bar();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -5529,7 +5556,7 @@ void draw_fonts(void)
|
||||||
|
|
||||||
void draw_stamps(void)
|
void draw_stamps(void)
|
||||||
{
|
{
|
||||||
int i, off_y, max, stamp;
|
int i, off_y, max, stamp, most;
|
||||||
SDL_Rect dest;
|
SDL_Rect dest;
|
||||||
SDL_Surface * img;
|
SDL_Surface * img;
|
||||||
|
|
||||||
|
|
@ -5539,12 +5566,19 @@ void draw_stamps(void)
|
||||||
draw_image_title(TITLE_STAMPS, WINDOW_WIDTH - 96);
|
draw_image_title(TITLE_STAMPS, WINDOW_WIDTH - 96);
|
||||||
|
|
||||||
|
|
||||||
|
/* How many can we show? */
|
||||||
|
|
||||||
|
most = 10;
|
||||||
|
if (disable_stamp_controls)
|
||||||
|
most = 14;
|
||||||
|
|
||||||
|
|
||||||
/* Do we need scrollbars? */
|
/* Do we need scrollbars? */
|
||||||
|
|
||||||
if (num_stamps > 14 + TOOLOFFSET)
|
if (num_stamps > most + TOOLOFFSET)
|
||||||
{
|
{
|
||||||
off_y = 24;
|
off_y = 24;
|
||||||
max = 12 + TOOLOFFSET;
|
max = (most - 2) + TOOLOFFSET;
|
||||||
|
|
||||||
dest.x = WINDOW_WIDTH - 96;
|
dest.x = WINDOW_WIDTH - 96;
|
||||||
dest.y = 40;
|
dest.y = 40;
|
||||||
|
|
@ -5558,10 +5592,14 @@ void draw_stamps(void)
|
||||||
SDL_BlitSurface(img_scroll_up_off, NULL, screen, &dest);
|
SDL_BlitSurface(img_scroll_up_off, NULL, screen, &dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
dest.x = WINDOW_WIDTH - 96;
|
dest.x = WINDOW_WIDTH - 96;
|
||||||
dest.y = 40 + 24 + ((6 + TOOLOFFSET / 2) * 48);
|
dest.y = 40 + 24 + ((6 + TOOLOFFSET / 2) * 48);
|
||||||
|
|
||||||
if (stamp_scroll < num_stamps - 12 - TOOLOFFSET)
|
if (!disable_stamp_controls)
|
||||||
|
dest.y = dest.y - (48 * 2);
|
||||||
|
|
||||||
|
if (stamp_scroll < num_stamps - (most - 2) - TOOLOFFSET)
|
||||||
{
|
{
|
||||||
SDL_BlitSurface(img_scroll_down, NULL, screen, &dest);
|
SDL_BlitSurface(img_scroll_down, NULL, screen, &dest);
|
||||||
}
|
}
|
||||||
|
|
@ -5573,7 +5611,7 @@ void draw_stamps(void)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
off_y = 0;
|
off_y = 0;
|
||||||
max = 14 + TOOLOFFSET;
|
max = most + TOOLOFFSET;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -5617,6 +5655,107 @@ void draw_stamps(void)
|
||||||
SDL_BlitSurface(img, NULL, screen, &dest);
|
SDL_BlitSurface(img, NULL, screen, &dest);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Draw stamp controls: */
|
||||||
|
|
||||||
|
if (!disable_stamp_controls)
|
||||||
|
{
|
||||||
|
/* Show mirror button: */
|
||||||
|
|
||||||
|
dest.x = WINDOW_WIDTH - 96;
|
||||||
|
dest.y = 40 + ((5 + TOOLOFFSET / 2) * 48);
|
||||||
|
|
||||||
|
if (inf_stamps[cur_stamp]->mirrorable)
|
||||||
|
{
|
||||||
|
if (state_stamps[cur_stamp]->mirrored)
|
||||||
|
SDL_BlitSurface(img_btn_down, NULL, screen, &dest);
|
||||||
|
else
|
||||||
|
SDL_BlitSurface(img_btn_up, NULL, screen, &dest);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
SDL_BlitSurface(img_btn_off, NULL, screen, &dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
dest.x = WINDOW_WIDTH - 96 + (48 - img_magics[MAGIC_MIRROR]->w) / 2;
|
||||||
|
dest.y = (40 + ((5 + TOOLOFFSET / 2) * 48) +
|
||||||
|
(48 - img_magics[MAGIC_MIRROR]->h) / 2);
|
||||||
|
|
||||||
|
SDL_BlitSurface(img_magics[MAGIC_MIRROR], NULL, screen, &dest);
|
||||||
|
|
||||||
|
|
||||||
|
/* Show flip button: */
|
||||||
|
|
||||||
|
dest.x = WINDOW_WIDTH - 48;
|
||||||
|
dest.y = 40 + ((5 + TOOLOFFSET / 2) * 48);
|
||||||
|
|
||||||
|
if (inf_stamps[cur_stamp]->flipable)
|
||||||
|
{
|
||||||
|
if (state_stamps[cur_stamp]->flipped)
|
||||||
|
SDL_BlitSurface(img_btn_down, NULL, screen, &dest);
|
||||||
|
else
|
||||||
|
SDL_BlitSurface(img_btn_up, NULL, screen, &dest);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
SDL_BlitSurface(img_btn_off, NULL, screen, &dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
dest.x = WINDOW_WIDTH - 48 + (48 - img_magics[MAGIC_FLIP]->w) / 2;
|
||||||
|
dest.y = (40 + ((5 + TOOLOFFSET / 2) * 48) +
|
||||||
|
(48 - img_magics[MAGIC_FLIP]->h) / 2);
|
||||||
|
|
||||||
|
SDL_BlitSurface(img_magics[MAGIC_FLIP], NULL, screen, &dest);
|
||||||
|
|
||||||
|
|
||||||
|
/* Show shrink button: */
|
||||||
|
|
||||||
|
dest.x = WINDOW_WIDTH - 96;
|
||||||
|
dest.y = 40 + ((6 + TOOLOFFSET / 2) * 48);
|
||||||
|
|
||||||
|
if (1)
|
||||||
|
{
|
||||||
|
if (1)
|
||||||
|
SDL_BlitSurface(img_btn_down, NULL, screen, &dest);
|
||||||
|
else
|
||||||
|
SDL_BlitSurface(img_btn_up, NULL, screen, &dest);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
SDL_BlitSurface(img_btn_off, NULL, screen, &dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
//dest.x = WINDOW_WIDTH - 96 + (48 - img_magics[MAGIC_MIRROR]->w) / 2;
|
||||||
|
//dest.y = (40 + ((5 + TOOLOFFSET / 2) * 48) +
|
||||||
|
// (48 - img_magics[MAGIC_MIRROR]->h) / 2);
|
||||||
|
|
||||||
|
//SDL_BlitSurface(img_magics[MAGIC_MIRROR], NULL, screen, &dest);
|
||||||
|
|
||||||
|
|
||||||
|
/* Show grow button: */
|
||||||
|
|
||||||
|
dest.x = WINDOW_WIDTH - 48;
|
||||||
|
dest.y = 40 + ((6 + TOOLOFFSET / 2) * 48);
|
||||||
|
|
||||||
|
if (1)
|
||||||
|
{
|
||||||
|
if (1)
|
||||||
|
SDL_BlitSurface(img_btn_down, NULL, screen, &dest);
|
||||||
|
else
|
||||||
|
SDL_BlitSurface(img_btn_up, NULL, screen, &dest);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
SDL_BlitSurface(img_btn_off, NULL, screen, &dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
//dest.x = WINDOW_WIDTH - 48 + (48 - img_magics[MAGIC_FLIP]->w) / 2;
|
||||||
|
//dest.y = (40 + ((5 + TOOLOFFSET / 2) * 48) +
|
||||||
|
// (48 - img_magics[MAGIC_FLIP]->h) / 2);
|
||||||
|
|
||||||
|
//SDL_BlitSurface(img_magics[MAGIC_FLIP], NULL, screen, &dest);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -7303,6 +7442,8 @@ info_type * loadinfo(char * fname)
|
||||||
|
|
||||||
inf.colorable = 0;
|
inf.colorable = 0;
|
||||||
inf.tintable = 0;
|
inf.tintable = 0;
|
||||||
|
inf.mirrorable = 1;
|
||||||
|
inf.flipable = 1;
|
||||||
|
|
||||||
|
|
||||||
/* Load info! */
|
/* Load info! */
|
||||||
|
|
@ -7343,6 +7484,10 @@ info_type * loadinfo(char * fname)
|
||||||
inf.colorable = 1;
|
inf.colorable = 1;
|
||||||
else if (strcmp(buf, "tintable") == 0)
|
else if (strcmp(buf, "tintable") == 0)
|
||||||
inf.tintable = 1;
|
inf.tintable = 1;
|
||||||
|
else if (strcmp(buf, "nomirror") == 0)
|
||||||
|
inf.mirrorable = 0;
|
||||||
|
else if (strcmp(buf, "noflip") == 0)
|
||||||
|
inf.flipable = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
while (!feof(fi));
|
while (!feof(fi));
|
||||||
|
|
@ -7848,22 +7993,25 @@ void cleanup(void)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for ( i = 0; i < MAX_STAMPS; ++i )
|
for (i = 0; i < MAX_STAMPS; i++)
|
||||||
{
|
{
|
||||||
if ( txt_stamps[i] )
|
if (txt_stamps[i])
|
||||||
{
|
{
|
||||||
free(txt_stamps[i]);
|
free(txt_stamps[i]);
|
||||||
txt_stamps[i] = NULL;
|
txt_stamps[i] = NULL;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
for ( i = 0; i < MAX_STAMPS; ++i )
|
if (inf_stamps[i])
|
||||||
{
|
|
||||||
if ( inf_stamps[i] )
|
|
||||||
{
|
{
|
||||||
free(inf_stamps[i]);
|
free(inf_stamps[i]);
|
||||||
inf_stamps[i] = NULL;
|
inf_stamps[i] = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (state_stamps[i])
|
||||||
|
{
|
||||||
|
free(state_stamps[i]);
|
||||||
|
state_stamps[i] = NULL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
free_surface_array( img_brushes, MAX_BRUSHES );
|
free_surface_array( img_brushes, MAX_BRUSHES );
|
||||||
|
|
@ -10285,7 +10433,6 @@ int stamp_tintable(int stamp)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void rgbtohsv(Uint8 r8, Uint8 g8, Uint8 b8, float *h, float *s, float *v)
|
void rgbtohsv(Uint8 r8, Uint8 g8, Uint8 b8, float *h, float *s, float *v)
|
||||||
{
|
{
|
||||||
float rgb_min, rgb_max, delta, r, g, b;
|
float rgb_min, rgb_max, delta, r, g, b;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue