import CS gimp-3.0.4-1.el9
This commit is contained in:
parent
742fd41fab
commit
6809eb1ee6
@ -1 +1 @@
|
||||
79324eeafe2b63fe7f2b1637e57b683695af8f05 SOURCES/gimp-2.99.8.tar.bz2
|
||||
f7c52adcf5c8ab3e858ac776d3b7cedd1f94a891 SOURCES/gimp-3.0.4.tar.xz
|
||||
|
||||
2
.gitignore
vendored
2
.gitignore
vendored
@ -1 +1 @@
|
||||
SOURCES/gimp-2.99.8.tar.bz2
|
||||
SOURCES/gimp-3.0.4.tar.xz
|
||||
|
||||
@ -1,25 +0,0 @@
|
||||
diff -up gimp-2.10.14/etc/gimprc.in.cm-system-monitor-profile-by-default gimp-2.10.14/etc/gimprc.in
|
||||
--- gimp-2.10.14/etc/gimprc.in.cm-system-monitor-profile-by-default 2019-10-26 21:46:48.000000000 +0200
|
||||
+++ gimp-2.10.14/etc/gimprc.in 2019-11-04 13:17:23.322750636 +0100
|
||||
@@ -317,9 +317,9 @@
|
||||
|
||||
# Defines the color management behavior. This is a parameter list.
|
||||
#
|
||||
-# (color-management
|
||||
+(color-management
|
||||
# (mode display)
|
||||
-# (display-profile-from-gdk no)
|
||||
+ (display-profile-from-gdk no)
|
||||
# (display-rendering-intent relative-colorimetric)
|
||||
# (display-use-black-point-compensation yes)
|
||||
# (display-optimize yes)
|
||||
@@ -328,7 +328,8 @@
|
||||
# (simulation-optimize yes)
|
||||
# (simulation-gamut-check no)
|
||||
# (out-of-gamut-color (color-rgb 1 0 1))
|
||||
-# (display-module "CdisplayLcms"))
|
||||
+# (display-module "CdisplayLcms")
|
||||
+)
|
||||
|
||||
# Keep a permanent record of all opened and saved files in the Recent
|
||||
# Documents list. Possible values are yes and no.
|
||||
@ -1,12 +0,0 @@
|
||||
diff -up gimp-2.10.18/etc/gimprc.in.no-phone-home-default gimp-2.10.18/etc/gimprc.in
|
||||
--- gimp-2.10.18/etc/gimprc.in.no-phone-home-default 2020-02-23 21:15:47.217777581 +0100
|
||||
+++ gimp-2.10.18/etc/gimprc.in 2020-02-23 21:22:42.416162110 +0100
|
||||
@@ -393,7 +393,7 @@
|
||||
# Check for availability of GIMP updates through background internet queries.
|
||||
# Possible values are yes and no.
|
||||
#
|
||||
-# (check-updates yes)
|
||||
+(check-updates no)
|
||||
|
||||
# Timestamp of the last update check. (null)
|
||||
#
|
||||
@ -1,12 +0,0 @@
|
||||
diff -up gimp-2.10.24/etc/gimprc.in.external-help-browser gimp-2.10.24/etc/gimprc.in
|
||||
--- gimp-2.10.24/etc/gimprc.in.external-help-browser 2021-04-03 00:02:39.312656132 +0200
|
||||
+++ gimp-2.10.24/etc/gimprc.in 2021-04-03 00:03:27.360453285 +0200
|
||||
@@ -836,7 +836,7 @@
|
||||
# Sets the browser used by the help system. Possible values are gimp and
|
||||
# web-browser.
|
||||
#
|
||||
-# (help-browser web-browser)
|
||||
+(help-browser web-browser)
|
||||
|
||||
# When enabled, a search of actions will also return inactive actions.
|
||||
# Possible values are yes and no.
|
||||
@ -0,0 +1,26 @@
|
||||
diff -urNp old/etc/gimprc.in new/etc/gimprc.in
|
||||
--- old/etc/gimprc.in 2025-05-02 16:05:59.766235164 +0200
|
||||
+++ new/etc/gimprc.in 2025-05-02 16:08:52.117193144 +0200
|
||||
@@ -316,9 +316,9 @@
|
||||
|
||||
# Defines the color management behavior. This is a parameter list.
|
||||
#
|
||||
-# (color-management
|
||||
+ (color-management
|
||||
# (mode display)
|
||||
-# (display-profile-from-gdk no)
|
||||
+ (display-profile-from-gdk no)
|
||||
# (display-rendering-intent relative-colorimetric)
|
||||
# (display-use-black-point-compensation yes)
|
||||
# (display-optimize yes)
|
||||
@@ -326,7 +326,9 @@
|
||||
# (simulation-use-black-point-compensation no)
|
||||
# (simulation-optimize yes)
|
||||
# (simulation-gamut-check no)
|
||||
-# (out-of-gamut-color (color-rgb 1 0 1)))
|
||||
+# (out-of-gamut-color (color-rgb 1 0 1))
|
||||
+ (display-module "CdisplayLcms")
|
||||
+)
|
||||
|
||||
# Keep a permanent record of all opened and saved files in the Recent
|
||||
# Documents list. Possible values are yes and no.
|
||||
12
SOURCES/gimp-3.0.2-external-help-browser.patch
Normal file
12
SOURCES/gimp-3.0.2-external-help-browser.patch
Normal file
@ -0,0 +1,12 @@
|
||||
diff -urNp old/etc/gimprc.in new/etc/gimprc.in
|
||||
--- old/etc/gimprc.in 2025-05-02 16:10:40.807797273 +0200
|
||||
+++ new/etc/gimprc.in 2025-05-02 16:12:22.380006468 +0200
|
||||
@@ -824,7 +824,7 @@
|
||||
# Sets the browser used by the help system. Possible values are gimp and
|
||||
# web-browser.
|
||||
#
|
||||
-# (help-browser gimp)
|
||||
+(help-browser web-browser)
|
||||
|
||||
# The maximum number of actions saved in history. This is an integer value.
|
||||
#
|
||||
153
SOURCES/gimp-3.0.4-glib.patch
Normal file
153
SOURCES/gimp-3.0.4-glib.patch
Normal file
@ -0,0 +1,153 @@
|
||||
diff -urNp a/app/core/gimpimage-colormap.c b/app/core/gimpimage-colormap.c
|
||||
--- a/app/core/gimpimage-colormap.c 2025-05-20 09:08:24.351925471 +0200
|
||||
+++ b/app/core/gimpimage-colormap.c 2025-05-20 09:20:42.372348093 +0200
|
||||
@@ -328,9 +328,8 @@ gimp_image_colormap_is_index_used (GimpI
|
||||
num_processors = GIMP_GEGL_CONFIG (image->gimp->config)->num_processors;
|
||||
layers = gimp_image_get_layer_list (image);
|
||||
|
||||
- pool = g_thread_pool_new_full ((GFunc) gimp_image_colormap_thread_is_index_used,
|
||||
+ pool = g_thread_pool_new ((GFunc) gimp_image_colormap_thread_is_index_used,
|
||||
GINT_TO_POINTER (color_index),
|
||||
- (GDestroyNotify) g_free,
|
||||
num_processors, TRUE, NULL);
|
||||
for (iter = layers; iter; iter = g_list_next (iter))
|
||||
{
|
||||
diff -urNp a/app/core/gimpitemlist.c b/app/core/gimpitemlist.c
|
||||
--- a/app/core/gimpitemlist.c 2025-05-20 09:08:24.354925484 +0200
|
||||
+++ b/app/core/gimpitemlist.c 2025-05-20 09:20:03.980745485 +0200
|
||||
@@ -629,7 +629,7 @@ gimp_item_list_get_items_by_glob (GimpIt
|
||||
spec = g_pattern_spec_new (pattern);
|
||||
for (iter = items; iter; iter = iter->next)
|
||||
{
|
||||
- if (g_pattern_spec_match_string (spec, gimp_object_get_name (iter->data)))
|
||||
+ if (g_pattern_match_string (spec, gimp_object_get_name (iter->data)))
|
||||
match = g_list_prepend (match, iter->data);
|
||||
}
|
||||
g_pattern_spec_free (spec);
|
||||
diff -urNp a/app/plug-in/gimpplugin.c b/app/plug-in/gimpplugin.c
|
||||
--- a/app/plug-in/gimpplugin.c 2025-05-20 09:08:24.339925418 +0200
|
||||
+++ b/app/plug-in/gimpplugin.c 2025-05-20 09:19:19.516679552 +0200
|
||||
@@ -403,7 +403,7 @@ gimp_plug_in_close_waitpid (GPid
|
||||
GError *error = NULL;
|
||||
|
||||
if (plug_in->manager->gimp->be_verbose &&
|
||||
- ! g_spawn_check_wait_status (status, &error))
|
||||
+ ! g_spawn_check_exit_status (status, &error))
|
||||
{
|
||||
g_printerr ("Process for plug-in '%s' terminated with error: %s\n",
|
||||
gimp_object_get_name (plug_in),
|
||||
diff -urNp a/app/sanity.c b/app/sanity.c
|
||||
--- a/app/sanity.c 2025-05-20 09:08:24.395925663 +0200
|
||||
+++ b/app/sanity.c 2025-05-20 09:18:48.132179032 +0200
|
||||
@@ -171,7 +171,7 @@ static gchar *
|
||||
sanity_check_glib (void)
|
||||
{
|
||||
#define GLIB_REQUIRED_MAJOR 2
|
||||
-#define GLIB_REQUIRED_MINOR 70
|
||||
+#define GLIB_REQUIRED_MINOR 68
|
||||
#define GLIB_REQUIRED_MICRO 0
|
||||
|
||||
const gchar *mismatch = glib_check_version (GLIB_REQUIRED_MAJOR,
|
||||
diff -urNp a/app/text/gimptext.c b/app/text/gimptext.c
|
||||
--- a/app/text/gimptext.c 2025-05-20 09:08:24.397925671 +0200
|
||||
+++ b/app/text/gimptext.c 2025-05-20 09:16:10.900785765 +0200
|
||||
@@ -827,7 +827,8 @@ gimp_text_serialize_property (GimpConfig
|
||||
|
||||
for (guint i = 0; i < length; ++i)
|
||||
{
|
||||
- PangoAttrFontDesc *attr_font_desc = pango_attribute_as_font_desc ((PangoAttribute*)g_slist_nth_data (list, i));
|
||||
+ PangoAttrFontDesc *attr_font_desc = (((PangoAttribute*)g_slist_nth_data (list, i))->klass->type == PANGO_ATTR_FONT_DESC
|
||||
+ ? (PangoAttrFontDesc *)g_slist_nth_data (list, i) : NULL );
|
||||
|
||||
if (attr_font_desc != NULL)
|
||||
{
|
||||
diff -urNp a/app/text/gimptext-parasite.c b/app/text/gimptext-parasite.c
|
||||
--- a/app/text/gimptext-parasite.c 2025-05-20 09:08:24.397925671 +0200
|
||||
+++ b/app/text/gimptext-parasite.c 2025-05-20 09:15:33.606149497 +0200
|
||||
@@ -131,7 +131,8 @@ gimp_text_from_parasite (const GimpParas
|
||||
|
||||
for (guint i = 0; i < length; ++i)
|
||||
{
|
||||
- PangoAttrFontDesc *attr_font_desc = pango_attribute_as_font_desc ((PangoAttribute*)g_slist_nth_data (list, i));
|
||||
+ PangoAttrFontDesc *attr_font_desc = (((PangoAttribute*)g_slist_nth_data (list, i))->klass->type == PANGO_ATTR_FONT_DESC
|
||||
+ ? (PangoAttrFontDesc *)g_slist_nth_data (list, i) : NULL );
|
||||
|
||||
if (attr_font_desc != NULL)
|
||||
{
|
||||
diff -urNp a/app/xcf/xcf-save.c b/app/xcf/xcf-save.c
|
||||
--- a/app/xcf/xcf-save.c 2025-05-20 09:08:24.399171071 +0200
|
||||
+++ b/app/xcf/xcf-save.c 2025-05-20 09:14:35.628966564 +0200
|
||||
@@ -2389,9 +2389,8 @@ xcf_save_level (XcfInfo *info,
|
||||
* i.e. there is a bug in our code.
|
||||
*/
|
||||
queue = g_async_queue_new_full ((GDestroyNotify) xcf_save_free_job_data);
|
||||
- pool = g_thread_pool_new_full ((GFunc) xcf_save_tile_parallel,
|
||||
+ pool = g_thread_pool_new ((GFunc) xcf_save_tile_parallel,
|
||||
queue,
|
||||
- (GDestroyNotify) xcf_save_free_job_data,
|
||||
num_processors, TRUE, NULL);
|
||||
|
||||
i = 0;
|
||||
diff -urNp a/libgimp/gimpvectorloadprocedure.c b/libgimp/gimpvectorloadprocedure.c
|
||||
--- a/libgimp/gimpvectorloadprocedure.c 2025-05-20 09:08:24.489926072 +0200
|
||||
+++ b/libgimp/gimpvectorloadprocedure.c 2025-05-20 09:13:46.148798654 +0200
|
||||
@@ -370,7 +370,7 @@ gimp_vector_load_procedure_run (GimpProc
|
||||
}
|
||||
}
|
||||
|
||||
- g_prefix_error_literal (&error, _("Vector image loading plug-in failed: "));
|
||||
+ //g_prefix_error_literal (&error, _("Vector image loading plug-in failed: "));
|
||||
}
|
||||
|
||||
/* One or both dimensions are still zero at this point. */
|
||||
diff -urNp a/libgimpbase/gimpchoice.c b/libgimpbase/gimpchoice.c
|
||||
--- a/libgimpbase/gimpchoice.c 2025-05-20 09:08:24.491384100 +0200
|
||||
+++ b/libgimpbase/gimpchoice.c 2025-05-20 09:13:13.230538618 +0200
|
||||
@@ -454,7 +454,7 @@ gimp_param_choice_class_init (GParamSpec
|
||||
klass->value_type = G_TYPE_STRING;
|
||||
klass->finalize = gimp_param_choice_finalize;
|
||||
klass->value_validate = gimp_param_choice_validate;
|
||||
- klass->value_is_valid = gimp_param_choice_value_is_valid;
|
||||
+ //klass->value_is_valid = gimp_param_choice_value_is_valid;
|
||||
klass->values_cmp = gimp_param_choice_values_cmp;
|
||||
}
|
||||
|
||||
diff -urNp a/meson.build b/meson.build
|
||||
--- a/meson.build 2025-05-20 09:08:24.256925056 +0200
|
||||
+++ b/meson.build 2025-05-20 09:12:38.933510408 +0200
|
||||
@@ -432,7 +432,7 @@ gio = dependency('gio-2.0'
|
||||
gio_specific_name = platform_windows ? 'gio-windows-2.0' : 'gio-unix-2.0'
|
||||
gio_specific = dependency(gio_specific_name)
|
||||
|
||||
-glib_minver = '2.70.0'
|
||||
+glib_minver = '2.68.0'
|
||||
glib = dependency('glib-2.0', version: '>='+glib_minver)
|
||||
gi = dependency('gobject-introspection-1.0')
|
||||
|
||||
@@ -443,7 +443,7 @@ gmodule = dependency('gmodule-
|
||||
|
||||
gtk3_minver = '3.24.0'
|
||||
gtk3 = dependency('gtk+-3.0', version: '>='+gtk3_minver)
|
||||
-harfbuzz_minver = '2.8.2'
|
||||
+harfbuzz_minver = '2.7.4'
|
||||
harfbuzz = dependency('harfbuzz', version: '>='+harfbuzz_minver)
|
||||
json_glib_minver = '1.2.6'
|
||||
json_glib = dependency('json-glib-1.0', version: '>='+json_glib_minver)
|
||||
@@ -472,7 +472,7 @@ endif
|
||||
|
||||
conf.set_quoted('MYPAINT_BRUSHES_DIR', mypaint_brushes_dir)
|
||||
|
||||
-pango_minver = '1.50.0'
|
||||
+pango_minver = '1.48.0'
|
||||
if platform_osx
|
||||
pango_macos_recommended_version = '1.55.0'
|
||||
pango_macos_warning='''
|
||||
@@ -1837,6 +1837,8 @@ if is_git_repository
|
||||
endif
|
||||
endif
|
||||
|
||||
+conf.set('G_DEFINE_FINAL_TYPE(TN, t_n, T_P)', 'G_DEFINE_TYPE(TN, t_n, T_P)')
|
||||
+
|
||||
configure_file(
|
||||
output: 'config.h',
|
||||
configuration: conf
|
||||
@ -1,60 +0,0 @@
|
||||
From 4f99f1fcfd892ead19831b5adcd38a99d71214b6 Mon Sep 17 00:00:00 2001
|
||||
From: Jacob Boerema <jgboerema@gmail.com>
|
||||
Date: Fri, 29 Apr 2022 16:40:32 -0400
|
||||
Subject: [PATCH] app: fix #8120 GIMP 2.10.30 crashed when allocate large
|
||||
memory
|
||||
|
||||
GIMP could crash if the information regarding old path properties read
|
||||
from XCF was incorrect. It did not check if xcf_old_path succeeded and
|
||||
kept trying to load more paths even if the last one failed to load.
|
||||
|
||||
Instead we now stop loading paths as soon as that function fails.
|
||||
In case we have a failure here we also try to skip to the next property
|
||||
based on the size of the path property, in hopes that the only problem
|
||||
was this property.
|
||||
---
|
||||
app/xcf/xcf-load.c | 14 +++++++++++---
|
||||
1 file changed, 11 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/app/xcf/xcf-load.c b/app/xcf/xcf-load.c
|
||||
index ac9c4ea248..67bc766390 100644
|
||||
--- a/app/xcf/xcf-load.c
|
||||
+++ b/app/xcf/xcf-load.c
|
||||
@@ -1168,7 +1168,12 @@ xcf_load_image_props (XcfInfo *info,
|
||||
break;
|
||||
|
||||
case PROP_PATHS:
|
||||
- xcf_load_old_paths (info, image);
|
||||
+ {
|
||||
+ goffset base = info->cp;
|
||||
+
|
||||
+ if (! xcf_load_old_paths (info, image))
|
||||
+ xcf_seek_pos (info, base + prop_size, NULL);
|
||||
+ }
|
||||
break;
|
||||
|
||||
case PROP_USER_UNIT:
|
||||
@@ -3035,8 +3040,11 @@ xcf_load_old_paths (XcfInfo *info,
|
||||
xcf_read_int32 (info, &last_selected_row, 1);
|
||||
xcf_read_int32 (info, &num_paths, 1);
|
||||
|
||||
+ GIMP_LOG (XCF, "Number of old paths: %u", num_paths);
|
||||
+
|
||||
while (num_paths-- > 0)
|
||||
- xcf_load_old_path (info, image);
|
||||
+ if (! xcf_load_old_path (info, image))
|
||||
+ return FALSE;
|
||||
|
||||
active_vectors =
|
||||
GIMP_VECTORS (gimp_container_get_child_by_index (gimp_image_get_vectors (image),
|
||||
@@ -3087,7 +3095,7 @@ xcf_load_old_path (XcfInfo *info,
|
||||
}
|
||||
else if (version != 1)
|
||||
{
|
||||
- g_printerr ("Unknown path type. Possibly corrupt XCF file");
|
||||
+ g_printerr ("Unknown path type (version: %u). Possibly corrupt XCF file.\n", version);
|
||||
|
||||
g_free (name);
|
||||
return FALSE;
|
||||
--
|
||||
GitLab
|
||||
@ -1,31 +0,0 @@
|
||||
From 22af0bcfe67c1c86381f33975ca7fdbde6b36b39 Mon Sep 17 00:00:00 2001
|
||||
From: Jacob Boerema <jgboerema@gmail.com>
|
||||
Date: Sun, 5 Jun 2022 15:38:24 -0400
|
||||
Subject: [PATCH] app: fix #8230 crash in gimp_layer_invalidate_boundary when
|
||||
channel is NULL
|
||||
|
||||
gimp_channel_is_empty returns FALSE if channel is NULL. This causes
|
||||
gimp_layer_invalidate_boundary to crash if the mask channel is NULL.
|
||||
|
||||
With a NULL channel gimp_channel_is_empty should return TRUE, just like
|
||||
the similar gimp_image_is_empty does, because returning FALSE here
|
||||
suggests we have a non empty channel.
|
||||
---
|
||||
app/core/gimpchannel.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/app/core/gimpchannel.c b/app/core/gimpchannel.c
|
||||
index 7b6a9851ae..502821ba58 100644
|
||||
--- a/app/core/gimpchannel.c
|
||||
+++ b/app/core/gimpchannel.c
|
||||
@@ -1827,7 +1827,7 @@ gimp_channel_boundary (GimpChannel *channel,
|
||||
gboolean
|
||||
gimp_channel_is_empty (GimpChannel *channel)
|
||||
{
|
||||
- g_return_val_if_fail (GIMP_IS_CHANNEL (channel), FALSE);
|
||||
+ g_return_val_if_fail (GIMP_IS_CHANNEL (channel), TRUE);
|
||||
|
||||
return GIMP_CHANNEL_GET_CLASS (channel)->is_empty (channel);
|
||||
}
|
||||
--
|
||||
GitLab
|
||||
@ -1,371 +0,0 @@
|
||||
diff -urNp a/extensions/goat-exercises/goat-exercise-lua.lua b/extensions/goat-exercises/goat-exercise-lua.lua
|
||||
--- a/extensions/goat-exercises/goat-exercise-lua.lua 2022-03-09 09:39:44.007314944 +0100
|
||||
+++ b/extensions/goat-exercises/goat-exercise-lua.lua 1970-01-01 01:00:00.000000000 +0100
|
||||
@@ -1,184 +0,0 @@
|
||||
-#!/usr/bin/env luajit
|
||||
-
|
||||
--- GIMP - The GNU Image Manipulation Program
|
||||
--- Copyright (C) 1995 Spencer Kimball and Peter Mattis
|
||||
---
|
||||
--- goat-exercise-lua.lua
|
||||
--- Copyright (C) Jehan
|
||||
---
|
||||
--- This program is free software: you can redistribute it and/or modify
|
||||
--- it under the terms of the GNU General Public License as published by
|
||||
--- the Free Software Foundation; either version 3 of the License, or
|
||||
--- (at your option) any later version.
|
||||
---
|
||||
--- This program is distributed in the hope that it will be useful,
|
||||
--- but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
--- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
--- GNU General Public License for more details.
|
||||
---
|
||||
--- You should have received a copy of the GNU General Public License
|
||||
--- along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
-
|
||||
-local lgi = require 'lgi'
|
||||
-
|
||||
-local GLib = lgi.GLib
|
||||
-local GObject = lgi.GObject
|
||||
-local Gio = lgi.Gio
|
||||
-local Gegl = lgi.Gegl
|
||||
-local Gimp = lgi.Gimp
|
||||
-local GimpUi = lgi.GimpUi
|
||||
-local Gtk = lgi.Gtk
|
||||
-local Gdk = lgi.Gdk
|
||||
-
|
||||
-local Goat = lgi.package 'Goat'
|
||||
-local Goat = lgi.Goat
|
||||
-
|
||||
-function run(procedure, run_mode, image, drawables, args, run_data)
|
||||
- -- procedure:new_return_values() crashes LGI so we construct the
|
||||
- -- GimpValueArray manually.
|
||||
- local retval = Gimp.ValueArray(1)
|
||||
-
|
||||
- if table.getn(drawables) ~= 1 then
|
||||
- local calling_err = GObject.Value(Gimp.PDBStatusType, Gimp.PDBStatusType.CALLING_ERROR)
|
||||
- local msg = "Procedure '%s' only works with one drawable."
|
||||
-
|
||||
- msg = string.format(msg, procedure:get_name())
|
||||
-
|
||||
- retval:append(calling_err)
|
||||
- retval:append(GObject.Value(GObject.Type.STRING, msg))
|
||||
- return retval
|
||||
- end
|
||||
-
|
||||
- local drawable = drawables[1]
|
||||
-
|
||||
- -- Not sure why run_mode has become a string instead of testing
|
||||
- -- against Gimp.RunMode.INTERACTIVE.
|
||||
- if run_mode == "INTERACTIVE" then
|
||||
- GimpUi.init("goat-exercise-lua");
|
||||
- local dialog = GimpUi.Dialog {
|
||||
- title = "Exercise a goat (Lua)",
|
||||
- role = "goat-exercise-Lua",
|
||||
- use_header_bar = 1
|
||||
- }
|
||||
- dialog:add_button("_Cancel", Gtk.ResponseType.CANCEL);
|
||||
- dialog:add_button("_Source", Gtk.ResponseType.APPLY);
|
||||
- dialog:add_button("_OK", Gtk.ResponseType.OK);
|
||||
-
|
||||
- local geometry = Gdk.Geometry()
|
||||
- geometry.min_aspect = 0.5;
|
||||
- geometry.max_aspect = 1.0;
|
||||
- dialog:set_geometry_hints (nil, geometry, Gdk.WindowHints.ASPECT);
|
||||
-
|
||||
- local box = Gtk.Box {
|
||||
- orientation = Gtk.Orientation.VERTICAL,
|
||||
- spacing = 2
|
||||
- }
|
||||
- dialog:get_content_area():add(box)
|
||||
- box:show()
|
||||
-
|
||||
- local lang = "Lua"
|
||||
- local head_text = "This plug-in is an exercise in '%s' to demo plug-in creation.\n" ..
|
||||
- "Check out the last version of the source code online by clicking the \"Source\" button."
|
||||
-
|
||||
- local label = Gtk.Label { label = string.format(head_text, lang) }
|
||||
- box:pack_start(label, false, false, 1)
|
||||
- label:show()
|
||||
-
|
||||
- local contents = GLib.file_get_contents(arg[0])
|
||||
- if (contents) then
|
||||
- local scrolled = Gtk.ScrolledWindow()
|
||||
- scrolled:set_vexpand (true)
|
||||
- box:pack_start(scrolled, true, true, 1)
|
||||
- scrolled:show()
|
||||
-
|
||||
- local view = Gtk.TextView()
|
||||
- view:set_wrap_mode(Gtk.WrapMode.WORD)
|
||||
- view:set_editable(false)
|
||||
- local buffer = view:get_buffer()
|
||||
- buffer:set_text(contents, -1)
|
||||
- scrolled:add(view)
|
||||
- view:show()
|
||||
- end
|
||||
-
|
||||
- while (true) do
|
||||
- local response = dialog:run()
|
||||
- local url = 'https://gitlab.gnome.org/GNOME/gimp/blob/master/extensions/goat-exercises/goat-exercise-lua.lua'
|
||||
-
|
||||
- if response == Gtk.ResponseType.OK then
|
||||
- dialog:destroy()
|
||||
- break
|
||||
- elseif (response == Gtk.ResponseType.APPLY) then
|
||||
- Gio.app_info_launch_default_for_uri(url, nil);
|
||||
- else -- CANCEL, CLOSE, DELETE_EVENT
|
||||
- dialog:destroy()
|
||||
- local cancel = GObject.Value(Gimp.PDBStatusType, Gimp.PDBStatusType.CANCEL)
|
||||
- retval:append(cancel)
|
||||
- return retval
|
||||
- end
|
||||
- end
|
||||
- end
|
||||
-
|
||||
- local x, y, width, height = drawable:mask_intersect()
|
||||
- if width ~= nill and height ~= nil and width > 0 and height > 0 then
|
||||
- Gegl.init(nil)
|
||||
-
|
||||
- local buffer = drawable:get_buffer()
|
||||
- local shadow_buffer = drawable:get_shadow_buffer()
|
||||
-
|
||||
- local graph = Gegl.Node()
|
||||
- local input = graph:create_child("gegl:buffer-source")
|
||||
- input:set_property("buffer", GObject.Value(Gegl.Buffer, buffer))
|
||||
- local invert = graph:create_child("gegl:invert")
|
||||
- local output = graph:create_child("gegl:write-buffer")
|
||||
- output:set_property("buffer", GObject.Value(Gegl.Buffer, shadow_buffer))
|
||||
- input:link(invert)
|
||||
- invert:link(output)
|
||||
- output:process()
|
||||
-
|
||||
- shadow_buffer:flush()
|
||||
-
|
||||
- drawable:merge_shadow(true)
|
||||
- drawable:update(x, y, width, height)
|
||||
- Gimp.displays_flush()
|
||||
- end
|
||||
-
|
||||
- local success = GObject.Value(Gimp.PDBStatusType, Gimp.PDBStatusType.SUCCESS)
|
||||
- retval:append(success)
|
||||
- return retval
|
||||
-end
|
||||
-
|
||||
-Goat:class('Exercise', Gimp.PlugIn)
|
||||
-
|
||||
-function Goat.Exercise:do_query_procedures()
|
||||
- return { 'plug-in-goat-exercise-lua' }
|
||||
-end
|
||||
-
|
||||
-function Goat.Exercise:do_create_procedure(name)
|
||||
- local procedure = Gimp.ImageProcedure.new(self, name,
|
||||
- Gimp.PDBProcType.PLUGIN,
|
||||
- run, nil)
|
||||
-
|
||||
- procedure:set_image_types("*");
|
||||
- procedure:set_sensitivity_mask(Gimp.ProcedureSensitivityMask.DRAWABLE);
|
||||
-
|
||||
- procedure:set_menu_label("Exercise a Lua goat");
|
||||
- procedure:set_icon_name(GimpUi.ICON_GEGL);
|
||||
- procedure:add_menu_path('<Image>/Filters/Development/Goat exercises/');
|
||||
-
|
||||
- procedure:set_documentation("Exercise a goat in the Lua language",
|
||||
- "Takes a goat for a walk in Lua",
|
||||
- name);
|
||||
- procedure:set_attribution("Jehan", "Jehan", "2019");
|
||||
-
|
||||
- return procedure
|
||||
-end
|
||||
-
|
||||
--- 'arg' is a Lua table. When automatically converted to an array, the
|
||||
--- value 0 is deleted (because Lua arrays start at 1!), which breaks
|
||||
--- Gimp.main() call. So let's create our own array starting at 1.
|
||||
-argv = {}
|
||||
-for k, v in pairs(arg) do
|
||||
- argv[k+1] = v
|
||||
-end
|
||||
-
|
||||
-Gimp.main(GObject.Type.name(Goat.Exercise), argv)
|
||||
diff -urNp a/extensions/goat-exercises/Makefile.am b/extensions/goat-exercises/Makefile.am
|
||||
--- a/extensions/goat-exercises/Makefile.am 2022-03-09 09:39:44.007314944 +0100
|
||||
+++ b/extensions/goat-exercises/Makefile.am 2022-03-09 10:27:14.623108639 +0100
|
||||
@@ -72,10 +72,10 @@ endif
|
||||
|
||||
# Lua (lua-jit + LGI) version.
|
||||
|
||||
-if BUILD_LUA
|
||||
-goat_exercise_luadir = $(goat_exercise_c_libexecdir)
|
||||
-goat_exercise_lua_SCRIPTS = goat-exercise-lua.lua
|
||||
-endif
|
||||
+#if BUILD_LUA
|
||||
+#goat_exercise_luadir = $(goat_exercise_c_libexecdir)
|
||||
+#goat_exercise_lua_SCRIPTS = goat-exercise-lua.lua
|
||||
+#endif
|
||||
|
||||
# Python 3 (pygobject) version.
|
||||
|
||||
@@ -135,7 +135,6 @@ org.gimp.extension.goat-exercises.metain
|
||||
|
||||
EXTRA_DIST = \
|
||||
goat-exercise-gjs.js \
|
||||
- goat-exercise-lua.lua \
|
||||
goat-exercise-py3.py \
|
||||
$(appstream_in_files)
|
||||
|
||||
diff -urNp a/extensions/goat-exercises/Makefile.in b/extensions/goat-exercises/Makefile.in
|
||||
--- a/extensions/goat-exercises/Makefile.in 2022-03-09 09:39:44.006314936 +0100
|
||||
+++ b/extensions/goat-exercises/Makefile.in 2022-03-09 10:28:59.224986448 +0100
|
||||
@@ -118,7 +118,6 @@ CONFIG_CLEAN_VPATH_FILES =
|
||||
am__installdirs = "$(DESTDIR)$(goat_exercise_c_libexecdir)" \
|
||||
"$(DESTDIR)$(goat_exercise_vala_libexecdir)" \
|
||||
"$(DESTDIR)$(goat_exercise_gjsdir)" \
|
||||
- "$(DESTDIR)$(goat_exercise_luadir)" \
|
||||
"$(DESTDIR)$(goat_exercise_py3dir)" "$(DESTDIR)$(appdatadir)" \
|
||||
"$(DESTDIR)$(goat_exercise_c_libexecdir)" \
|
||||
"$(DESTDIR)$(goat_exercise_vala_libexecdir)"
|
||||
@@ -183,7 +182,7 @@ am__uninstall_files_from_dir = { \
|
||||
|| { echo " ( cd '$$dir' && rm -f" $$files ")"; \
|
||||
$(am__cd) "$$dir" && rm -f $$files; }; \
|
||||
}
|
||||
-SCRIPTS = $(goat_exercise_gjs_SCRIPTS) $(goat_exercise_lua_SCRIPTS) \
|
||||
+SCRIPTS = $(goat_exercise_gjs_SCRIPTS) \
|
||||
$(goat_exercise_py3_SCRIPTS)
|
||||
AM_V_P = $(am__v_P_@AM_V@)
|
||||
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
|
||||
@@ -753,8 +752,8 @@ goat_exercise_c_LDADD = \
|
||||
@BUILD_JAVASCRIPT_TRUE@goat_exercise_gjs_SCRIPTS = goat-exercise-gjs.js
|
||||
|
||||
# Lua (lua-jit + LGI) version.
|
||||
-@BUILD_LUA_TRUE@goat_exercise_luadir = $(goat_exercise_c_libexecdir)
|
||||
-@BUILD_LUA_TRUE@goat_exercise_lua_SCRIPTS = goat-exercise-lua.lua
|
||||
+#@BUILD_LUA_TRUE@goat_exercise_luadir = $(goat_exercise_c_libexecdir)
|
||||
+#@BUILD_LUA_TRUE@goat_exercise_lua_SCRIPTS = goat-exercise-lua.lua
|
||||
|
||||
# Python 3 (pygobject) version.
|
||||
@BUILD_PYTHON_TRUE@goat_exercise_py3dir = $(goat_exercise_c_libexecdir)
|
||||
@@ -795,7 +794,6 @@ appdatadir = $(goat_exercise_c_libexecdi
|
||||
appdata_DATA = $(appstream_files)
|
||||
EXTRA_DIST = \
|
||||
goat-exercise-gjs.js \
|
||||
- goat-exercise-lua.lua \
|
||||
goat-exercise-py3.py \
|
||||
$(appstream_in_files)
|
||||
|
||||
@@ -977,41 +975,41 @@ uninstall-goat_exercise_gjsSCRIPTS:
|
||||
files=`for p in $$list; do echo "$$p"; done | \
|
||||
sed -e 's,.*/,,;$(transform)'`; \
|
||||
dir='$(DESTDIR)$(goat_exercise_gjsdir)'; $(am__uninstall_files_from_dir)
|
||||
-install-goat_exercise_luaSCRIPTS: $(goat_exercise_lua_SCRIPTS)
|
||||
- @$(NORMAL_INSTALL)
|
||||
- @list='$(goat_exercise_lua_SCRIPTS)'; test -n "$(goat_exercise_luadir)" || list=; \
|
||||
- if test -n "$$list"; then \
|
||||
- echo " $(MKDIR_P) '$(DESTDIR)$(goat_exercise_luadir)'"; \
|
||||
- $(MKDIR_P) "$(DESTDIR)$(goat_exercise_luadir)" || exit 1; \
|
||||
- fi; \
|
||||
- for p in $$list; do \
|
||||
- if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
|
||||
- if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
|
||||
- done | \
|
||||
- sed -e 'p;s,.*/,,;n' \
|
||||
- -e 'h;s|.*|.|' \
|
||||
- -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
|
||||
- $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
|
||||
- { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
|
||||
- if ($$2 == $$4) { files[d] = files[d] " " $$1; \
|
||||
- if (++n[d] == $(am__install_max)) { \
|
||||
- print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
|
||||
- else { print "f", d "/" $$4, $$1 } } \
|
||||
- END { for (d in files) print "f", d, files[d] }' | \
|
||||
- while read type dir files; do \
|
||||
- if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
|
||||
- test -z "$$files" || { \
|
||||
- echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(goat_exercise_luadir)$$dir'"; \
|
||||
- $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(goat_exercise_luadir)$$dir" || exit $$?; \
|
||||
- } \
|
||||
- ; done
|
||||
-
|
||||
-uninstall-goat_exercise_luaSCRIPTS:
|
||||
- @$(NORMAL_UNINSTALL)
|
||||
- @list='$(goat_exercise_lua_SCRIPTS)'; test -n "$(goat_exercise_luadir)" || exit 0; \
|
||||
- files=`for p in $$list; do echo "$$p"; done | \
|
||||
- sed -e 's,.*/,,;$(transform)'`; \
|
||||
- dir='$(DESTDIR)$(goat_exercise_luadir)'; $(am__uninstall_files_from_dir)
|
||||
+#install-goat_exercise_luaSCRIPTS: $(goat_exercise_lua_SCRIPTS)
|
||||
+# @$(NORMAL_INSTALL)
|
||||
+# @list='$(goat_exercise_lua_SCRIPTS)'; test -n "$(goat_exercise_luadir)" || list=; \
|
||||
+# if test -n "$$list"; then \
|
||||
+# echo " $(MKDIR_P) '$(DESTDIR)$(goat_exercise_luadir)'"; \
|
||||
+# $(MKDIR_P) "$(DESTDIR)$(goat_exercise_luadir)" || exit 1; \
|
||||
+# fi; \
|
||||
+# for p in $$list; do \
|
||||
+# if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
|
||||
+# if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
|
||||
+# done | \
|
||||
+# sed -e 'p;s,.*/,,;n' \
|
||||
+# -e 'h;s|.*|.|' \
|
||||
+# -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
|
||||
+# $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
|
||||
+# { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
|
||||
+# if ($$2 == $$4) { files[d] = files[d] " " $$1; \
|
||||
+# if (++n[d] == $(am__install_max)) { \
|
||||
+# print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
|
||||
+# else { print "f", d "/" $$4, $$1 } } \
|
||||
+# END { for (d in files) print "f", d, files[d] }' | \
|
||||
+# while read type dir files; do \
|
||||
+# if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
|
||||
+# test -z "$$files" || { \
|
||||
+# echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(goat_exercise_luadir)$$dir'"; \
|
||||
+# $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(goat_exercise_luadir)$$dir" || exit $$?; \
|
||||
+# } \
|
||||
+# ; done
|
||||
+
|
||||
+#uninstall-goat_exercise_luaSCRIPTS:
|
||||
+# @$(NORMAL_UNINSTALL)
|
||||
+# @list='$(goat_exercise_lua_SCRIPTS)'; test -n "$(goat_exercise_luadir)" || exit 0; \
|
||||
+# files=`for p in $$list; do echo "$$p"; done | \
|
||||
+# sed -e 's,.*/,,;$(transform)'`; \
|
||||
+# dir='$(DESTDIR)$(goat_exercise_luadir)'; $(am__uninstall_files_from_dir)
|
||||
install-goat_exercise_py3SCRIPTS: $(goat_exercise_py3_SCRIPTS)
|
||||
@$(NORMAL_INSTALL)
|
||||
@list='$(goat_exercise_py3_SCRIPTS)'; test -n "$(goat_exercise_py3dir)" || list=; \
|
||||
@@ -1266,7 +1264,7 @@ check-am: all-am
|
||||
check: check-am
|
||||
all-am: Makefile $(PROGRAMS) $(SCRIPTS) $(DATA)
|
||||
installdirs:
|
||||
- for dir in "$(DESTDIR)$(goat_exercise_c_libexecdir)" "$(DESTDIR)$(goat_exercise_vala_libexecdir)" "$(DESTDIR)$(goat_exercise_gjsdir)" "$(DESTDIR)$(goat_exercise_luadir)" "$(DESTDIR)$(goat_exercise_py3dir)" "$(DESTDIR)$(appdatadir)" "$(DESTDIR)$(goat_exercise_c_libexecdir)" "$(DESTDIR)$(goat_exercise_vala_libexecdir)"; do \
|
||||
+ for dir in "$(DESTDIR)$(goat_exercise_c_libexecdir)" "$(DESTDIR)$(goat_exercise_vala_libexecdir)" "$(DESTDIR)$(goat_exercise_gjsdir)" "$(DESTDIR)$(goat_exercise_py3dir)" "$(DESTDIR)$(appdatadir)" "$(DESTDIR)$(goat_exercise_c_libexecdir)" "$(DESTDIR)$(goat_exercise_vala_libexecdir)"; do \
|
||||
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
|
||||
done
|
||||
install: install-am
|
||||
@@ -1330,7 +1328,6 @@ info: info-am
|
||||
info-am:
|
||||
|
||||
install-data-am: install-appdataDATA install-goat_exercise_gjsSCRIPTS \
|
||||
- install-goat_exercise_luaSCRIPTS \
|
||||
install-goat_exercise_py3SCRIPTS
|
||||
|
||||
install-dvi: install-dvi-am
|
||||
@@ -1385,7 +1382,6 @@ uninstall-am: uninstall-appdataDATA \
|
||||
uninstall-goat_exercise_c_libexecDATA \
|
||||
uninstall-goat_exercise_c_libexecPROGRAMS \
|
||||
uninstall-goat_exercise_gjsSCRIPTS \
|
||||
- uninstall-goat_exercise_luaSCRIPTS \
|
||||
uninstall-goat_exercise_py3SCRIPTS \
|
||||
uninstall-goat_exercise_vala_libexecDATA \
|
||||
uninstall-goat_exercise_vala_libexecPROGRAMS
|
||||
@@ -1403,7 +1399,6 @@ uninstall-am: uninstall-appdataDATA \
|
||||
install-goat_exercise_c_libexecDATA \
|
||||
install-goat_exercise_c_libexecPROGRAMS \
|
||||
install-goat_exercise_gjsSCRIPTS \
|
||||
- install-goat_exercise_luaSCRIPTS \
|
||||
install-goat_exercise_py3SCRIPTS \
|
||||
install-goat_exercise_vala_libexecDATA \
|
||||
install-goat_exercise_vala_libexecPROGRAMS install-html \
|
||||
@@ -1416,7 +1411,6 @@ uninstall-am: uninstall-appdataDATA \
|
||||
uninstall-appdataDATA uninstall-goat_exercise_c_libexecDATA \
|
||||
uninstall-goat_exercise_c_libexecPROGRAMS \
|
||||
uninstall-goat_exercise_gjsSCRIPTS \
|
||||
- uninstall-goat_exercise_luaSCRIPTS \
|
||||
uninstall-goat_exercise_py3SCRIPTS \
|
||||
uninstall-goat_exercise_vala_libexecDATA \
|
||||
uninstall-goat_exercise_vala_libexecPROGRAMS
|
||||
919
SPECS/gimp.spec
919
SPECS/gimp.spec
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user