Nightly では Python の Foggify が帰って来ました!。 :)
GIMP の 其の辺り を少し書いて見ますね。
そう、そろそろ、Python Scripts も ウォームアップ しないと、ね。
実は、GIMP の gitlab.gnome を見ていて、
そろそろ、Python Scripts に手を入れ出す頃合いかな?、と思っていたのですが、
Nightly の Windows Installer と 公式同梱用 Script (foggify.py) との間で、
整合が取れず、Nightly での更新待ち だったのです。
つまり、最新の foggify.py のみを導入しても、
GIMP 本体 が ある時期 を越さ無いと 正常に機能し無かったのです。
最近、漸く、環境が整って来た印象を持っています。
少し、書いて見ますね。
GIMP は 3.0 に向かって、色絡みの根本的な見直しを行っています。
独自色クラス GimpRGB から、
GEGL(Generic Graphical Library) の色採用へと移行 だったかな?。
其れが原因で、動いていたものが動か無い状況にありました。
でも、最近、大きな峠は越した気がしています。
foggify.py に手が入って fix となったのが、2月25日頃。
commit 7e6dc23a に依って、問題解決に至ったのですが、
同時期に GIMP 本体にも修正が加えられた筈です。
しかし、他との絡みもあって、なかなか、Nightly が出て来なかったのです。
そう、Nightly 待ち だった訳です。
Commit の comment を引用
Since the color space invasion, GimpRGB
properties do not create widgets anymore.
For Python plug-ins, we need to add
GeglColor properties as GObjects with
GeglColor value types as a workaround.
This patch does this and updates the
Foggify plug-in with the new datatype.
今回の1週間前辺りから、Nightly も順調になった様で、
そろそろ覗いて見るか! となりました。
実際に、該当最新 Nightly を動かすと、Foggify は正常稼働します。
参考迄に、GIMP 2.99.10 の頃の Script と、2.99.19 (現時点最新)のものとを比較しました。
個人的には、GIMP 2.99.10 辺り迄は 対応可能 だったのですが、
其れ以降、思う様にならなかったので、どう変わったかが見たかったのです。
所謂、.patch を GNU の diff.exe ver 2.8,7.1605 から 生成したので、変更点をご覧下さい。
--- E:¥GIMP¥GIMP3_Scripting¥Foggify_GIMP29910.py 2022-08-24 00:42:54.239299400 +0900
+++ E:¥GIMP¥GIMP3_Scripting¥foggify_GIMP29919_20240318.py 2024-03-18 09:33:50.000000000 +0900
@@ -21,2 +21,4 @@ gi.require_version('GimpUi', '3.0')
from gi.repository import GimpUi
+gi.require_version('Gegl', '0.4')
+from gi.repository import Gegl
from gi.repository import GObject
@@ -27,9 +29,18 @@ import sys
-import gettext
-_ = gettext.gettext
def N_(message): return message
+def _(message): return GLib.dgettext(None, message)
-def foggify(procedure, run_mode, image, n_drawables, drawables, args, data):
- config = procedure.create_config()
- config.begin_run(image, run_mode, args)
+def foggify(procedure, run_mode, image, n_drawables, drawables, config, data):
+ Gegl.init(None)
+
+ _color = Gegl.Color.new("black")
+ _color.set_rgba(0.94, 0, 0, 1.0)
+
+ # Work around not being able to set default color by only setting it
+ # when color in our config is None. This won't help when resetting to
+ # factory default. This also fixes a critical when running without
+ # changing the color away from None.
+ color = config.get_property('color')
+ if color is None:
+ config.set_property('color', _color)
@@ -37,2 +48,3 @@ def foggify(procedure, run_mode, image,
GimpUi.init('python-fu-foggify')
+
dialog = GimpUi.ProcedureDialog(procedure=procedure, config=config)
@@ -41,3 +53,2 @@ def foggify(procedure, run_mode, image,
dialog.destroy()
- config.end_run(Gimp.PDBStatusType.CANCEL)
return procedure.new_return_values(Gimp.PDBStatusType.CANCEL, GLib.Error())
@@ -75,9 +86,10 @@ def foggify(procedure, run_mode, image,
# add some clouds to the layer
- Gimp.get_pdb().run_procedure('plug-in-plasma', [
- GObject.Value(Gimp.RunMode, Gimp.RunMode.NONINTERACTIVE),
- GObject.Value(Gimp.Image, image),
- GObject.Value(Gimp.Drawable, mask),
- GObject.Value(GObject.TYPE_INT, int(time.time())),
- GObject.Value(GObject.TYPE_DOUBLE, turbulence),
- ])
+ pdb_proc = Gimp.get_pdb().lookup_procedure('plug-in-plasma')
+ pdb_config = pdb_proc.create_config()
+ pdb_config.set_property('run-mode', Gimp.RunMode.NONINTERACTIVE)
+ pdb_config.set_property('image', image)
+ pdb_config.set_property('drawable', mask)
+ pdb_config.set_property('seed', int(time.time()))
+ pdb_config.set_property('turbulence', turbulence)
+ pdb_proc.run(pdb_config)
@@ -92,9 +104,4 @@ def foggify(procedure, run_mode, image,
- config.end_run(Gimp.PDBStatusType.SUCCESS)
-
return procedure.new_return_values(Gimp.PDBStatusType.SUCCESS, GLib.Error())
-_color = Gimp.RGB()
-_color.set(240.0, 0, 0)
-
class Foggify (Gimp.PlugIn):
@@ -122,3 +129,3 @@ class Foggify (Gimp.PlugIn):
# as it should be the better syntax.
- color = GObject.Property(type =Gimp.RGB, default=_color,
+ color = GObject.Property(type =Gegl.Color, default=None,
nick =_("_Fog color"),
@@ -127,6 +134,6 @@ class Foggify (Gimp.PlugIn):
## GimpPlugIn virtual methods ##
- def do_query_procedures(self):
- self.set_translation_domain("gimp30-python",
- Gio.file_new_for_path(Gimp.locale_directory()))
+ def do_set_i18n(self, procname):
+ return True, 'gimp30-python', None
+ def do_query_procedures(self):
return [ 'python-fu-foggify' ]
@@ -140,6 +147,6 @@ class Foggify (Gimp.PlugIn):
Gimp.ProcedureSensitivityMask.DRAWABLES)
- procedure.set_documentation (N_("Add a layer of fog"),
- "Adds a layer of fog to the image.",
+ procedure.set_documentation (_("Add a layer of fog"),
+ _("Adds a layer of fog to the image."),
name)
- procedure.set_menu_label(N_("_Fog..."))
+ procedure.set_menu_label(_("_Fog..."))
procedure.set_attribution("James Henstridge",
0 件のコメント:
コメントを投稿