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 . - -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('/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