Merge branch 'master' into sdl2.0

This commit is contained in:
Pere Pujal i Carabantes 2022-03-17 20:22:04 +01:00
commit ad6bf2ec83
144 changed files with 10287 additions and 8719 deletions

View file

@ -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: */