GitLab repository storage has been migrated to hashed layout. Please contact Infrastructure team if you notice any issues with repositories or hooks.

Commit 8352f356 authored by Michael Natterer's avatar Michael Natterer 😴

app: remove some overengineering from GimpFilterTool

GimpFilterTool::get_settings_ui() is no longer needed, replace
it by a simple utility function in gimpfiltertool-settings.c.

Also, use the GimpFilterOptions functions added earlier, and some
random cleanup.
parent f56df8d7
......@@ -31,9 +31,12 @@
#include "tools-types.h"
#include "operations/gimp-operation-config.h"
#include "core/gimp.h"
#include "core/gimpcontext.h"
#include "core/gimplist.h"
#include "core/gimpsettings.h"
#include "core/gimptoolinfo.h"
#include "widgets/gimpsettingsbox.h"
......@@ -49,61 +52,56 @@
/* local function prototypes */
static gboolean gimp_filter_tool_settings_import (GimpSettingsBox *box,
GFile *file,
GimpFilterTool *filter_tool);
static gboolean gimp_filter_tool_settings_export (GimpSettingsBox *box,
GFile *file,
GimpFilterTool *filter_tool);
static gboolean gimp_filter_tool_settings_import (GimpSettingsBox *box,
GFile *file,
GimpFilterTool *filter_tool);
static gboolean gimp_filter_tool_settings_export (GimpSettingsBox *box,
GFile *file,
GimpFilterTool *filter_tool);
/* public functions */
GtkWidget *
gimp_filter_tool_real_get_settings_ui (GimpFilterTool *filter_tool,
GimpContainer *settings,
const gchar *import_dialog_title,
const gchar *export_dialog_title,
const gchar *file_dialog_help_id,
GFile *default_folder,
GtkWidget **settings_box)
gimp_filter_tool_get_settings_box (GimpFilterTool *filter_tool)
{
GimpToolInfo *tool_info;
GtkWidget *hbox;
GtkWidget *label;
GtkWidget *settings_combo;
tool_info = GIMP_TOOL (filter_tool)->tool_info;
hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
label = gtk_label_new_with_mnemonic (_("Pre_sets:"));
gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
gtk_widget_show (label);
*settings_box = gimp_settings_box_new (tool_info->gimp,
filter_tool->config,
settings,
import_dialog_title,
export_dialog_title,
file_dialog_help_id,
default_folder,
NULL);
gtk_box_pack_start (GTK_BOX (hbox), *settings_box, TRUE, TRUE, 0);
gtk_widget_show (*settings_box);
settings_combo = gimp_settings_box_get_combo (GIMP_SETTINGS_BOX (*settings_box));
gtk_label_set_mnemonic_widget (GTK_LABEL (label), settings_combo);
g_signal_connect (filter_tool->settings_box, "import",
GimpToolInfo *tool_info = GIMP_TOOL (filter_tool)->tool_info;
GType type = G_TYPE_FROM_INSTANCE (filter_tool->config);
GimpContainer *settings;
GFile *default_folder;
GtkWidget *box;
settings =
gimp_operation_config_get_container (tool_info->gimp,
type,
(GCompareFunc) gimp_settings_compare);
if (filter_tool->settings_folder)
default_folder = gimp_directory_file (filter_tool->settings_folder, NULL);
else
default_folder = NULL;
box = gimp_settings_box_new (tool_info->gimp,
filter_tool->config,
settings,
filter_tool->import_dialog_title,
filter_tool->export_dialog_title,
filter_tool->help_id,
default_folder,
NULL);
if (default_folder)
g_object_unref (default_folder);
g_signal_connect (box, "import",
G_CALLBACK (gimp_filter_tool_settings_import),
filter_tool);
g_signal_connect (filter_tool->settings_box, "export",
g_signal_connect (box, "export",
G_CALLBACK (gimp_filter_tool_settings_export),
filter_tool);
return hbox;
return box;
}
gboolean
......
......@@ -21,13 +21,11 @@
#define __GIMP_FILTER_TOOL_SETTINGS_H__
GtkWidget * gimp_filter_tool_real_get_settings_ui (GimpFilterTool *filter_tool,
GimpContainer *settings,
const gchar *import_dialog_title,
const gchar *export_dialog_title,
const gchar *file_dialog_help_id,
GFile *default_folder,
GtkWidget **settings_box);
GtkWidget * gimp_filter_tool_get_settings_box (GimpFilterTool *filter_tool);
/* virtual functions of GimpSettingsTool, don't call directly */
gboolean gimp_filter_tool_real_settings_import (GimpFilterTool *filter_tool,
GInputStream *input,
GError **error);
......
......@@ -24,8 +24,6 @@
#include "config.h"
#include <string.h>
#include <gegl.h>
#include <gtk/gtk.h>
#include <gdk/gdkkeysyms.h>
......@@ -133,8 +131,6 @@ static void gimp_filter_tool_dialog (GimpFilterTool *filter_to
static void gimp_filter_tool_dialog_unmap (GtkWidget *dialog,
GimpFilterTool *filter_tool);
static void gimp_filter_tool_reset (GimpFilterTool *filter_tool);
static GtkWidget * gimp_filter_tool_get_settings_ui
(GimpFilterTool *filter_tool);
static void gimp_filter_tool_create_filter (GimpFilterTool *filter_tool);
......@@ -187,7 +183,6 @@ gimp_filter_tool_class_init (GimpFilterToolClass *klass)
klass->get_operation = NULL;
klass->dialog = NULL;
klass->reset = gimp_filter_tool_real_reset;
klass->get_settings_ui = gimp_filter_tool_real_get_settings_ui;
klass->settings_import = gimp_filter_tool_real_settings_import;
klass->settings_export = gimp_filter_tool_real_settings_export;
}
......@@ -292,6 +287,7 @@ gimp_filter_tool_finalize (GObject *object)
g_object_unref (filter_tool->gui);
filter_tool->gui = NULL;
filter_tool->settings_box = NULL;
filter_tool->region_combo = NULL;
}
G_OBJECT_CLASS (parent_class)->finalize (object);
......@@ -390,11 +386,25 @@ gimp_filter_tool_initialize (GimpTool *tool,
if (filter_tool->config && filter_tool->has_settings)
{
GtkWidget *settings_ui;
GtkWidget *label;
GtkWidget *combo;
hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
gtk_widget_show (hbox);
label = gtk_label_new_with_mnemonic (_("Pre_sets:"));
gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
gtk_widget_show (label);
filter_tool->settings_box =
gimp_filter_tool_get_settings_box (filter_tool);
gtk_box_pack_start (GTK_BOX (hbox), filter_tool->settings_box,
TRUE, TRUE, 0);
gtk_widget_show (filter_tool->settings_box);
settings_ui = gimp_filter_tool_get_settings_ui (filter_tool);
gtk_box_pack_start (GTK_BOX (vbox), settings_ui, FALSE, FALSE, 0);
gtk_widget_show (settings_ui);
combo = gimp_settings_box_get_combo (GIMP_SETTINGS_BOX (filter_tool->settings_box));
gtk_label_set_mnemonic_widget (GTK_LABEL (label), combo);
}
/* The preview and split view toggles */
......@@ -531,59 +541,26 @@ gimp_filter_tool_button_press (GimpTool *tool,
if (state & gimp_get_extend_selection_mask ())
{
GimpAlignmentType alignment;
/* switch side */
switch (options->preview_alignment)
{
case GIMP_ALIGN_LEFT: alignment = GIMP_ALIGN_RIGHT; break;
case GIMP_ALIGN_RIGHT: alignment = GIMP_ALIGN_LEFT; break;
case GIMP_ALIGN_TOP: alignment = GIMP_ALIGN_BOTTOM; break;
case GIMP_ALIGN_BOTTOM: alignment = GIMP_ALIGN_TOP; break;
default:
g_return_if_reached ();
}
g_object_set (options, "preview-alignment", alignment, NULL);
gimp_filter_options_switch_preview_side (options);
}
else if (state & gimp_get_toggle_behavior_mask ())
{
GimpItem *item = GIMP_ITEM (filter_tool->drawable);
GimpAlignmentType alignment;
gdouble position;
GimpItem *item = GIMP_ITEM (filter_tool->drawable);
gdouble pos_x;
gdouble pos_y;
/* switch orientation */
switch (options->preview_alignment)
{
case GIMP_ALIGN_LEFT: alignment = GIMP_ALIGN_TOP; break;
case GIMP_ALIGN_RIGHT: alignment = GIMP_ALIGN_BOTTOM; break;
case GIMP_ALIGN_TOP: alignment = GIMP_ALIGN_LEFT; break;
case GIMP_ALIGN_BOTTOM: alignment = GIMP_ALIGN_RIGHT; break;
default:
g_return_if_reached ();
}
pos_x = ((coords->x - gimp_item_get_offset_x (item)) /
gimp_item_get_width (item));
pos_y = ((coords->y - gimp_item_get_offset_y (item)) /
gimp_item_get_height (item));
if (alignment == GIMP_ALIGN_LEFT ||
alignment == GIMP_ALIGN_RIGHT)
{
position = ((coords->x - gimp_item_get_offset_x (item)) /
gimp_item_get_width (item));
}
else
{
position = ((coords->y - gimp_item_get_offset_y (item)) /
gimp_item_get_height (item));
}
g_object_set (options,
"preview-alignment", alignment,
"preview-position", CLAMP (position, 0.0, 1.0),
NULL);
gimp_filter_options_switch_preview_orientation (options,
pos_x, pos_y);
}
else
{
gimp_guide_tool_start_edit (tool, display,
filter_tool->percent_guide);
filter_tool->preview_guide);
}
}
}
......@@ -969,39 +946,6 @@ gimp_filter_tool_reset (GimpFilterTool *filter_tool)
g_object_thaw_notify (filter_tool->config);
}
static GtkWidget *
gimp_filter_tool_get_settings_ui (GimpFilterTool *filter_tool)
{
GimpTool *tool = GIMP_TOOL (filter_tool);
GimpFilterToolClass *klass = GIMP_FILTER_TOOL_GET_CLASS (filter_tool);
GType type = G_TYPE_FROM_INSTANCE (filter_tool->config);
GimpContainer *settings;
GFile *default_folder;
GtkWidget *settings_ui;
settings =
gimp_operation_config_get_container (tool->tool_info->gimp,
type,
(GCompareFunc) gimp_settings_compare);
if (filter_tool->settings_folder)
default_folder = gimp_directory_file (filter_tool->settings_folder, NULL);
else
default_folder = NULL;
settings_ui = klass->get_settings_ui (filter_tool,
settings,
filter_tool->import_dialog_title,
filter_tool->export_dialog_title,
filter_tool->help_id,
default_folder,
&filter_tool->settings_box);
g_object_unref (default_folder);
return settings_ui;
}
static void
gimp_filter_tool_create_filter (GimpFilterTool *filter_tool)
{
......@@ -1069,7 +1013,7 @@ gimp_filter_tool_add_guide (GimpFilterTool *filter_tool)
GimpOrientationType orientation;
gint position;
if (filter_tool->percent_guide)
if (filter_tool->preview_guide)
return;
item = GIMP_ITEM (filter_tool->drawable);
......@@ -1093,17 +1037,17 @@ gimp_filter_tool_add_guide (GimpFilterTool *filter_tool)
options->preview_position);
}
filter_tool->percent_guide =
filter_tool->preview_guide =
gimp_guide_custom_new (orientation,
image->gimp->next_guide_ID++,
GIMP_GUIDE_STYLE_SPLIT_VIEW);
gimp_image_add_guide (image, filter_tool->percent_guide, position);
gimp_image_add_guide (image, filter_tool->preview_guide, position);
g_signal_connect (filter_tool->percent_guide, "removed",
g_signal_connect (filter_tool->preview_guide, "removed",
G_CALLBACK (gimp_filter_tool_guide_removed),
filter_tool);
g_signal_connect (filter_tool->percent_guide, "notify::position",
g_signal_connect (filter_tool->preview_guide, "notify::position",
G_CALLBACK (gimp_filter_tool_guide_moved),
filter_tool);
}
......@@ -1113,12 +1057,12 @@ gimp_filter_tool_remove_guide (GimpFilterTool *filter_tool)
{
GimpImage *image;
if (! filter_tool->percent_guide)
if (! filter_tool->preview_guide)
return;
image = gimp_item_get_image (GIMP_ITEM (filter_tool->drawable));
gimp_image_remove_guide (image, filter_tool->percent_guide, FALSE);
gimp_image_remove_guide (image, filter_tool->preview_guide, FALSE);
}
static void
......@@ -1129,7 +1073,7 @@ gimp_filter_tool_move_guide (GimpFilterTool *filter_tool)
GimpOrientationType orientation;
gint position;
if (! filter_tool->percent_guide)
if (! filter_tool->preview_guide)
return;
item = GIMP_ITEM (filter_tool->drawable);
......@@ -1152,12 +1096,12 @@ gimp_filter_tool_move_guide (GimpFilterTool *filter_tool)
options->preview_position);
}
if (orientation != gimp_guide_get_orientation (filter_tool->percent_guide) ||
position != gimp_guide_get_position (filter_tool->percent_guide))
if (orientation != gimp_guide_get_orientation (filter_tool->preview_guide) ||
position != gimp_guide_get_position (filter_tool->preview_guide))
{
gimp_guide_set_orientation (filter_tool->percent_guide, orientation);
gimp_guide_set_orientation (filter_tool->preview_guide, orientation);
gimp_image_move_guide (gimp_item_get_image (item),
filter_tool->percent_guide, position, FALSE);
filter_tool->preview_guide, position, FALSE);
}
}
......@@ -1167,15 +1111,15 @@ gimp_filter_tool_guide_removed (GimpGuide *guide,
{
GimpFilterOptions *options = GIMP_FILTER_TOOL_GET_OPTIONS (filter_tool);
g_signal_handlers_disconnect_by_func (G_OBJECT (filter_tool->percent_guide),
g_signal_handlers_disconnect_by_func (G_OBJECT (filter_tool->preview_guide),
gimp_filter_tool_guide_removed,
filter_tool);
g_signal_handlers_disconnect_by_func (G_OBJECT (filter_tool->percent_guide),
g_signal_handlers_disconnect_by_func (G_OBJECT (filter_tool->preview_guide),
gimp_filter_tool_guide_moved,
filter_tool);
g_object_unref (filter_tool->percent_guide);
filter_tool->percent_guide = NULL;
g_object_unref (filter_tool->preview_guide);
filter_tool->preview_guide = NULL;
g_object_set (options,
"preview-split", FALSE,
......@@ -1400,10 +1344,9 @@ gimp_filter_tool_get_operation (GimpFilterTool *filter_tool)
"preview-position", 0.5,
NULL);
if (filter_tool->config)
g_signal_connect_object (filter_tool->config, "notify",
G_CALLBACK (gimp_filter_tool_config_notify),
G_OBJECT (filter_tool), 0);
g_signal_connect_object (filter_tool->config, "notify",
G_CALLBACK (gimp_filter_tool_config_notify),
G_OBJECT (filter_tool), 0);
if (GIMP_TOOL (filter_tool)->drawable)
gimp_filter_tool_create_filter (filter_tool);
......@@ -1456,15 +1399,15 @@ gimp_filter_tool_on_guide (GimpFilterTool *filter_tool,
shell = gimp_display_get_shell (display);
if (filter_tool->filter &&
filter_tool->percent_guide &&
filter_tool->preview_guide &&
gimp_display_shell_get_show_guides (shell))
{
const gint snap_distance = display->config->snap_distance;
GimpOrientationType orientation;
gint position;
orientation = gimp_guide_get_orientation (filter_tool->percent_guide);
position = gimp_guide_get_position (filter_tool->percent_guide);
orientation = gimp_guide_get_orientation (filter_tool->preview_guide);
position = gimp_guide_get_position (filter_tool->preview_guide);
if (orientation == GIMP_ORIENTATION_HORIZONTAL)
{
......
......@@ -57,7 +57,7 @@ struct _GimpFilterTool
GimpDrawableFilter *filter;
GimpGuide *percent_guide;
GimpGuide *preview_guide;
/* dialog */
gboolean overlay;
......@@ -85,14 +85,6 @@ struct _GimpFilterToolClass
void (* dialog) (GimpFilterTool *filter_tool);
void (* reset) (GimpFilterTool *filter_tool);
GtkWidget * (* get_settings_ui) (GimpFilterTool *filter_tool,
GimpContainer *settings,
const gchar *import_dialog_title,
const gchar *export_dialog_title,
const gchar *help_id,
GFile *default_folder,
GtkWidget **settings_box);
gboolean (* settings_import) (GimpFilterTool *filter_tool,
GInputStream *input,
GError **error);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment