From 8396fc5022093e4630d9f247f8a8a219092f7f2d Mon Sep 17 00:00:00 2001 From: Jehan Date: Tue, 23 Mar 2021 23:40:01 +0100 Subject: [PATCH] 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[PREVIEW_SIZE * PREVIEW_SIZE * 4]; - guchar u8_buf[PREVIEW_SIZE * PREVIEW_SIZE * 4]; - gint i, j; + gfloat *buf; + guchar *u8_buf; + gint i, j; + + if (preview_size > 0) + size = preview_size; + + 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);