Merge branch 'master' into sdl2.0
This commit is contained in:
commit
ad6bf2ec83
144 changed files with 10287 additions and 8719 deletions
144
src/tuxpaint.c
144
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 - March 16, 2022
|
||||
June 14, 2002 - March 17, 2022
|
||||
*/
|
||||
|
||||
#include "platform.h"
|
||||
|
|
@ -2128,6 +2128,7 @@ static int do_new_dialog_add_colors(SDL_Surface * *thumbs, int num_files, int *d
|
|||
char * *d_exts, int *white_in_palette);
|
||||
static int do_color_picker(void);
|
||||
static void draw_color_picker_crosshairs(int color_picker_left, int color_picker_top, int color_picker_val_left, int color_picker_val_top);
|
||||
static void set_color_picker_crosshair_size(void);
|
||||
static void draw_color_picker_values(int l, int t);
|
||||
static void draw_color_picker_palette_and_values(int color_picker_left, int color_picker_top, int color_picker_val_left, int color_picker_val_top);
|
||||
static void render_color_picker_palette(void);
|
||||
|
|
@ -22479,12 +22480,6 @@ static int do_color_picker(void)
|
|||
draw_color_picker_values(color_picker_val_left, color_picker_val_top);
|
||||
|
||||
|
||||
/* Draw crosshairs */
|
||||
|
||||
draw_color_picker_crosshairs(color_picker_left, color_picker_top, color_picker_val_left, color_picker_val_top);
|
||||
|
||||
|
||||
|
||||
/* Determine spot for example color: */
|
||||
|
||||
color_example_dest.x = color_picker_left + img_color_picker->w + 2 + img_back->w + 2;
|
||||
|
|
@ -22545,6 +22540,27 @@ static int do_color_picker(void)
|
|||
SDL_Flip(screen);
|
||||
|
||||
|
||||
/* Draw crosshairs */
|
||||
|
||||
/* (N.B. - We do this the first time _after_ flipping the entire screen,
|
||||
so we avoid updating parts of the screen where the crosshairs
|
||||
extend past the rainbow rectangle or value slider, since this
|
||||
function does not (yet) do any clipping) */
|
||||
draw_color_picker_crosshairs(color_picker_left, color_picker_top, color_picker_val_left, color_picker_val_top);
|
||||
|
||||
dest.x = color_picker_left;
|
||||
dest.y = color_picker_top;
|
||||
dest.w = img_color_picker->w;
|
||||
dest.h = img_color_picker->h;
|
||||
SDL_UpdateRect(screen, dest.x, dest.y, dest.w, dest.h);
|
||||
|
||||
dest.x = color_picker_val_left;
|
||||
dest.y = color_picker_val_top;
|
||||
dest.w = img_back->w;
|
||||
dest.h = img_color_picker_val->h;
|
||||
SDL_UpdateRect(screen, dest.x, dest.y, dest.w, dest.h);
|
||||
|
||||
|
||||
/* Let the user pick a color, or go back: */
|
||||
|
||||
done = 0;
|
||||
|
|
@ -22671,6 +22687,8 @@ static int do_color_picker(void)
|
|||
|
||||
/* Hovering over a value from the slider */
|
||||
|
||||
do_setcursor(cursor_hand);
|
||||
|
||||
y = event.button.y - color_picker_val_top;
|
||||
tmp_color_picker_v = color_picker_v;
|
||||
color_picker_v = y;
|
||||
|
|
@ -22848,6 +22866,7 @@ static void render_color_picker_palette(void)
|
|||
int x, y;
|
||||
Uint8 r, g, b;
|
||||
void (*putpixel) (SDL_Surface *, int, int, Uint32);
|
||||
SDL_Event event;
|
||||
|
||||
putpixel = putpixels[img_color_picker->format->BytesPerPixel];
|
||||
for (y = 0; y < img_color_picker->h; y++)
|
||||
|
|
@ -22862,9 +22881,48 @@ static void render_color_picker_palette(void)
|
|||
SDL_MapRGBA(img_color_picker->format, r, g, b, 255));
|
||||
}
|
||||
}
|
||||
|
||||
while (SDL_PollEvent(&event) && event.type == SDL_MOUSEMOTION)
|
||||
{
|
||||
/* Eat further motion events that may've been generated while
|
||||
we re-rendered the palette (so we don't spin tons of cycles
|
||||
rendering it more than we really need) */
|
||||
}
|
||||
|
||||
SDL_PushEvent(&event);
|
||||
}
|
||||
|
||||
|
||||
/* Length & thickness should be odd numbers, so the
|
||||
center of the crosshair is positioned precisely */
|
||||
int CROSSHAIR_LENGTH, CROSSHAIR_THICKNESS, CROSSHAIR_BORDER;
|
||||
|
||||
static void set_color_picker_crosshair_size(void) {
|
||||
CROSSHAIR_LENGTH = (int) (11 * button_scale);
|
||||
CROSSHAIR_LENGTH /= 2;
|
||||
CROSSHAIR_LENGTH *= 2;
|
||||
CROSSHAIR_LENGTH++;
|
||||
|
||||
if (CROSSHAIR_LENGTH < 3)
|
||||
CROSSHAIR_LENGTH = 3;
|
||||
|
||||
|
||||
CROSSHAIR_THICKNESS = (int) (button_scale);
|
||||
CROSSHAIR_THICKNESS /= 2;
|
||||
CROSSHAIR_THICKNESS *= 2;
|
||||
CROSSHAIR_THICKNESS++;
|
||||
|
||||
if (CROSSHAIR_THICKNESS < 1)
|
||||
CROSSHAIR_THICKNESS = 1;
|
||||
|
||||
CROSSHAIR_BORDER = CROSSHAIR_THICKNESS / 2;
|
||||
if (CROSSHAIR_BORDER < 1)
|
||||
CROSSHAIR_BORDER = 1;
|
||||
|
||||
DEBUG_PRINTF("Crosshair will be %d in size, with %d thickness, and a %d border\n",
|
||||
CROSSHAIR_LENGTH, CROSSHAIR_THICKNESS, CROSSHAIR_BORDER);
|
||||
}
|
||||
|
||||
static void draw_color_picker_crosshairs(int color_picker_left, int color_picker_top, int color_picker_val_left, int color_picker_val_top)
|
||||
{
|
||||
SDL_Rect dest;
|
||||
|
|
@ -22872,64 +22930,67 @@ static void draw_color_picker_crosshairs(int color_picker_left, int color_picker
|
|||
|
||||
/* Hue/Saturation (the big rectangle) */
|
||||
|
||||
dest.x = color_picker_x + color_picker_left - 3;
|
||||
dest.y = color_picker_y + color_picker_top - 1;
|
||||
dest.w = 7;
|
||||
dest.h = 3;
|
||||
dest.x = color_picker_x + color_picker_left - (CROSSHAIR_LENGTH - 1) / 2 - CROSSHAIR_BORDER;
|
||||
dest.y = color_picker_y + color_picker_top - (CROSSHAIR_THICKNESS - 1) / 2 - CROSSHAIR_BORDER;
|
||||
dest.w = CROSSHAIR_LENGTH + CROSSHAIR_BORDER * 2;
|
||||
dest.h = CROSSHAIR_THICKNESS + CROSSHAIR_BORDER * 2;
|
||||
|
||||
SDL_FillRect(screen, &dest, SDL_MapRGB(screen->format, 0, 0, 0));
|
||||
|
||||
dest.x = color_picker_x + color_picker_left - 1;
|
||||
dest.y = color_picker_y + color_picker_top - 3;
|
||||
dest.w = 3;
|
||||
dest.h = 7;
|
||||
dest.x = color_picker_x + color_picker_left - (CROSSHAIR_THICKNESS - 1) / 2 - CROSSHAIR_BORDER;
|
||||
dest.y = color_picker_y + color_picker_top - (CROSSHAIR_LENGTH - 1) / 2 - CROSSHAIR_BORDER;
|
||||
dest.w = CROSSHAIR_THICKNESS + CROSSHAIR_BORDER * 2;
|
||||
dest.h = CROSSHAIR_LENGTH + CROSSHAIR_BORDER * 2;
|
||||
|
||||
SDL_FillRect(screen, &dest, SDL_MapRGB(screen->format, 0, 0, 0));
|
||||
|
||||
dest.x = color_picker_x + color_picker_left - 2;
|
||||
dest.y = color_picker_y + color_picker_top;
|
||||
dest.w = 5;
|
||||
dest.h = 1;
|
||||
|
||||
dest.x = color_picker_x + color_picker_left - (CROSSHAIR_LENGTH - 1) / 2;
|
||||
dest.y = color_picker_y + color_picker_top - (CROSSHAIR_THICKNESS - 1) / 2;
|
||||
dest.w = CROSSHAIR_LENGTH;
|
||||
dest.h = CROSSHAIR_THICKNESS;
|
||||
|
||||
SDL_FillRect(screen, &dest, SDL_MapRGB(screen->format, 255, 255, 255));
|
||||
|
||||
dest.x = color_picker_x + color_picker_left;
|
||||
dest.y = color_picker_y + color_picker_top - 2;
|
||||
dest.w = 1;
|
||||
dest.h = 5;
|
||||
dest.x = color_picker_x + color_picker_left - (CROSSHAIR_THICKNESS - 1) / 2;
|
||||
dest.y = color_picker_y + color_picker_top - (CROSSHAIR_LENGTH - 1) / 2;
|
||||
dest.w = CROSSHAIR_THICKNESS;
|
||||
dest.h = CROSSHAIR_LENGTH;
|
||||
|
||||
SDL_FillRect(screen, &dest, SDL_MapRGB(screen->format, 255, 255, 255));
|
||||
|
||||
|
||||
|
||||
/* Value (the slider) */
|
||||
|
||||
ctr_x = color_picker_val_left + img_back->w / 2;
|
||||
|
||||
dest.x = ctr_x - 3;
|
||||
dest.y = color_picker_v + color_picker_val_top - 1;
|
||||
dest.w = 7;
|
||||
dest.h = 3;
|
||||
dest.x = ctr_x - (CROSSHAIR_LENGTH - 1) / 2 - CROSSHAIR_BORDER;
|
||||
dest.y = color_picker_v + color_picker_val_top - (CROSSHAIR_THICKNESS - 1) / 2 - CROSSHAIR_BORDER;
|
||||
dest.w = CROSSHAIR_LENGTH + CROSSHAIR_BORDER * 2;
|
||||
dest.h = CROSSHAIR_THICKNESS + CROSSHAIR_BORDER * 2;
|
||||
|
||||
SDL_FillRect(screen, &dest, SDL_MapRGB(screen->format, 0, 0, 0));
|
||||
|
||||
dest.x = ctr_x - 1;
|
||||
dest.y = color_picker_v + color_picker_val_top - 3;
|
||||
dest.w = 3;
|
||||
dest.h = 7;
|
||||
dest.x = ctr_x - (CROSSHAIR_THICKNESS - 1) / 2 - CROSSHAIR_BORDER;
|
||||
dest.y = color_picker_v + color_picker_val_top - (CROSSHAIR_LENGTH - 1) / 2 - CROSSHAIR_BORDER;
|
||||
dest.w = CROSSHAIR_THICKNESS + CROSSHAIR_BORDER * 2;
|
||||
dest.h = CROSSHAIR_LENGTH + CROSSHAIR_BORDER * 2;
|
||||
|
||||
SDL_FillRect(screen, &dest, SDL_MapRGB(screen->format, 0, 0, 0));
|
||||
|
||||
dest.x = ctr_x - 2;
|
||||
dest.y = color_picker_v + color_picker_val_top;
|
||||
dest.w = 5;
|
||||
dest.h = 1;
|
||||
|
||||
dest.x = ctr_x - (CROSSHAIR_LENGTH - 1) / 2;
|
||||
dest.y = color_picker_v + color_picker_val_top - (CROSSHAIR_THICKNESS - 1) / 2;
|
||||
dest.w = CROSSHAIR_LENGTH;
|
||||
dest.h = CROSSHAIR_THICKNESS;
|
||||
|
||||
SDL_FillRect(screen, &dest, SDL_MapRGB(screen->format, 255, 255, 255));
|
||||
|
||||
dest.x = ctr_x;
|
||||
dest.y = color_picker_v + color_picker_val_top - 2;
|
||||
dest.w = 1;
|
||||
dest.h = 5;
|
||||
dest.x = ctr_x - (CROSSHAIR_THICKNESS - 1) / 2;
|
||||
dest.y = color_picker_v + color_picker_val_top - (CROSSHAIR_LENGTH - 1) / 2;
|
||||
dest.w = CROSSHAIR_THICKNESS;
|
||||
dest.h = CROSSHAIR_LENGTH;
|
||||
|
||||
SDL_FillRect(screen, &dest, SDL_MapRGB(screen->format, 255, 255, 255));
|
||||
}
|
||||
|
|
@ -26691,8 +26752,8 @@ static void setup_colors(void)
|
|||
NUM_COLORS++;
|
||||
|
||||
/* Add "Color Picker" color: */
|
||||
|
||||
color_names[NUM_COLORS] = strdup(gettext("Pick a color. The square shows all hues at varying levels of saturation. Use the slider to change the value."));
|
||||
/* (This is an attempt to describe an HSV color picker in extremely basic terms!) */
|
||||
color_names[NUM_COLORS] = strdup(gettext("Pick a color. Hues go top to bottom. Saturation/intensity goes left (pale) to right (pure). Value (lightness/darkness): grey bar."));
|
||||
color_hexes[NUM_COLORS] = (Uint8 *) malloc(sizeof(Uint8) * 3);
|
||||
color_hexes[NUM_COLORS][0] = 255;
|
||||
color_hexes[NUM_COLORS][1] = 255;
|
||||
|
|
@ -27263,6 +27324,7 @@ static void setup(void)
|
|||
/* (Need to do this after native screen resolution is handled) */
|
||||
|
||||
setup_screen_layout();
|
||||
set_color_picker_crosshair_size();
|
||||
|
||||
/* Set window icon and caption: */
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue