[gimp] plug-ins: tweak the pattern preview size relatively to the scale ratio.
- From: Jehan <jehanp src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] plug-ins: tweak the pattern preview size relatively to the scale ratio.
- Date: Wed, 24 Mar 2021 00:13:47 +0000 (UTC)
commit 8396fc5022093e4630d9f247f8a8a219092f7f2d
Author: Jehan <jehan girinstud io>
Date: Tue Mar 23 23:40:01 2021 +0100
plug-ins: tweak the pattern preview size relatively to the scale ratio.
Avoiding having tiny preview areas on displays with bigger scale ratio.
plug-ins/common/qbist.c | 46 ++++++++++++++++++++++++++++++----------------
1 file changed, 30 insertions(+), 16 deletions(-)
---
diff --git a/plug-ins/common/qbist.c b/plug-ins/common/qbist.c
index 193165c2cb..cc052747d1 100644
--- a/plug-ins/common/qbist.c
+++ b/plug-ins/common/qbist.c
@@ -118,7 +118,7 @@ static gboolean dialog_run (void);
static void dialog_new_variations (GtkWidget *widget,
gpointer data);
static void dialog_update_previews (GtkWidget *widget,
- gpointer data);
+ gint preview_size);
static void dialog_select_preview (GtkWidget *widget,
ExpInfo *n_info);
@@ -597,13 +597,22 @@ dialog_new_variations (GtkWidget *widget,
static void
dialog_update_previews (GtkWidget *widget,
- gpointer data)
+ gint preview_size)
{
static const Babl *fish = NULL;
+ static gint size = -1;
+
+ gfloat *buf;
+ guchar *u8_buf;
+ gint i, j;
+
+ if (preview_size > 0)
+ size = preview_size;
- gfloat buf[PREVIEW_SIZE * PREVIEW_SIZE * 4];
- guchar u8_buf[PREVIEW_SIZE * PREVIEW_SIZE * 4];
- gint i, j;
+ g_return_if_fail (size > 0);
+
+ buf = g_new (gfloat, size * size * 4);
+ u8_buf = g_new (guchar, size * size * 4);
if (! fish)
fish = babl_fish (babl_format ("R'G'B'A float"),
@@ -613,20 +622,23 @@ dialog_update_previews (GtkWidget *widget,
{
optimize (&info[(j + 5) % 9]);
- for (i = 0; i < PREVIEW_SIZE; i++)
+ for (i = 0; i < size; i++)
{
- qbist (&info[(j + 5) % 9], buf + i * PREVIEW_SIZE * 4,
- 0, i, PREVIEW_SIZE, PREVIEW_SIZE, PREVIEW_SIZE, 1);
+ qbist (&info[(j + 5) % 9], buf + i * size * 4,
+ 0, i, size, size, size, 1);
}
- babl_process (fish, buf, u8_buf, PREVIEW_SIZE * PREVIEW_SIZE);
+ babl_process (fish, buf, u8_buf, size * size);
gimp_preview_area_draw (GIMP_PREVIEW_AREA (preview[j]),
- 0, 0, PREVIEW_SIZE, PREVIEW_SIZE,
+ 0, 0, size, size,
GIMP_RGBA_IMAGE,
u8_buf,
- PREVIEW_SIZE * 4);
+ size * 4);
}
+
+ g_free (buf);
+ g_free (u8_buf);
}
static void
@@ -636,7 +648,7 @@ dialog_select_preview (GtkWidget *widget,
memcpy (last_info, info, sizeof (info));
info[0] = *n_info;
dialog_new_variations (widget, NULL);
- dialog_update_previews (widget, NULL);
+ dialog_update_previews (widget, -1);
}
/* File I/O stuff */
@@ -730,7 +742,7 @@ dialog_undo (GtkWidget *widget,
memcpy (temp_info, info, sizeof (info));
memcpy (info, last_info, sizeof (info));
- dialog_update_previews (NULL, NULL);
+ dialog_update_previews (NULL, -1);
memcpy (last_info, temp_info, sizeof (info));
}
@@ -770,7 +782,7 @@ dialog_load (GtkWidget *widget,
g_free (name);
dialog_new_variations (NULL, NULL);
- dialog_update_previews (NULL, NULL);
+ dialog_update_previews (NULL, -1);
}
gtk_widget_destroy (dialog);
@@ -834,6 +846,7 @@ dialog_run (void)
GtkWidget *bbox;
GtkWidget *button;
GtkWidget *grid;
+ gint preview_size;
gint i;
gboolean run;
@@ -871,6 +884,7 @@ dialog_run (void)
dialog_new_variations (NULL, NULL);
memcpy (last_info, info, sizeof (info));
+ preview_size = gtk_widget_get_scale_factor (grid) * PREVIEW_SIZE;
for (i = 0; i < 9; i++)
{
button = gtk_button_new ();
@@ -883,7 +897,7 @@ dialog_run (void)
(gpointer) & (info[(i + 5) % 9]));
preview[i] = gimp_preview_area_new ();
- gtk_widget_set_size_request (preview[i], PREVIEW_SIZE, PREVIEW_SIZE);
+ gtk_widget_set_size_request (preview[i], preview_size, preview_size);
gtk_container_add (GTK_CONTAINER (button), preview[i]);
gtk_widget_show (preview[i]);
}
@@ -928,7 +942,7 @@ dialog_run (void)
NULL);
gtk_widget_show (dialog);
- dialog_update_previews (NULL, NULL);
+ dialog_update_previews (NULL, preview_size);
run = (gimp_dialog_run (GIMP_DIALOG (dialog)) == GTK_RESPONSE_OK);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]