[Gimp-developer] Python plugin dev: getting picked color from gimpui.PickButton.color-picked event callback?
My goal is to write behavior where a click on my special pick button will 1. Modify layer visibility 2. Run the normal pick tool 3. Do something with the picked color I'm trying to do this as a Python plugin so I'm trying to implement this using `gimpui.PickButton` and adding event callbacks for `clicked` and `color-picked`. I'm using `pydoc gimpui` as a reference. Unfortunately the Python API apparently has obscured the color data structure that gets passed to the `color-picked` event callback. It passes it as a `gobject.gpointer` which is just an intractable pointer (see http://developer.gimp.org/api/2.0/libgimpwidgets/GimpPickButton.html#GimpPickButton-color-pickedand https://developer.gnome.org/glib/2.37/glib-Basic-Types.html#gpointer). I don't know of any way to pull out the triple double union in Python. A simpler solution would be to simply "activate" the standard color picker, but I can't figure out how to do that with the API available. I would appreciate any help and/or ideas on this. Thanks! Viet ___ gimp-developer-list mailing list List address:gimp-developer-list@gnome.org List membership: https://mail.gnome.org/mailman/listinfo/gimp-developer-list List archives: https://mail.gnome.org/archives/gimp-developer-list
Re: [Gimp-developer] Python plugin dev: getting picked color from gimpui.PickButton.color-picked event callback?
You are really trying something very different than what the current GIMP-Python integration is thought of to do: You are using gobject introspection to call functions that up to now have only been called from native-code plug-ins (normally in C), and have no provision to be called from Python or other language supported by gobject introspection but for the automatic generation of the bindings. I am in fact surprised you could get this far. GIMP-Python plug-ins, AKA python-fu, are designed to around a python-module that is delivered with GIMP, and comunicates with GIMP through the "Procedural database" (PDB). The module does have some higher level constructs, such as images, layers, layer-groups, but these are just rebuilt on the Python side from values such as numeric and string IDs fetched from GIMP through pdb calls. That said, you can see all your available API by going to help->PDB browser on GIMP. (Open any .py file that comes with GIMP to see how the plug-ins are registered and created, if yours go on a completely different way by trying to use the libgimp API) Now, plug-ins in GIMP - neither the ones built using native code - are not supposed to be able to change the active tool while running - so, to get exactly what you want is impossible. You can make a Python plug-in that will display a custom gtk+ window, change a layer's visibility, and display instructions for the user to change to the color picker tool (maybe your hack with gobject can do that, but I would not trust it across GIMP versions/platforms), and pick a color. At this time, the plug-in can read the picked color with a call to pdb.gimp_context_get_foreground . js -><- On 5 February 2014 21:20, Viet Nguyen wrote: > My goal is to write behavior where a click on my special pick button will > > 1. Modify layer visibility > 2. Run the normal pick tool > 3. Do something with the picked color > > I'm trying to do this as a Python plugin so I'm trying to implement this > using `gimpui.PickButton` and adding event callbacks for `clicked` and > `color-picked`. I'm using `pydoc gimpui` as a reference. > > Unfortunately the Python API apparently has obscured the color data > structure that gets passed to the `color-picked` event callback. It passes > it as a `gobject.gpointer` which is just an intractable pointer (see > http://developer.gimp.org/api/2.0/libgimpwidgets/GimpPickButton.html#GimpPickButton-color-pickedand > https://developer.gnome.org/glib/2.37/glib-Basic-Types.html#gpointer). I > don't know of any way to pull out the triple double union in Python. > > A simpler solution would be to simply "activate" the standard color picker, > but I can't figure out how to do that with the API available. I would > appreciate any help and/or ideas on this. > > Thanks! > > Viet > ___ > gimp-developer-list mailing list > List address:gimp-developer-list@gnome.org > List membership: https://mail.gnome.org/mailman/listinfo/gimp-developer-list > List archives: https://mail.gnome.org/archives/gimp-developer-list ___ gimp-developer-list mailing list List address:gimp-developer-list@gnome.org List membership: https://mail.gnome.org/mailman/listinfo/gimp-developer-list List archives: https://mail.gnome.org/archives/gimp-developer-list
Re: [Gimp-developer] Python plugin dev: getting picked color from gimpui.PickButton.color-picked event callback?
Thanks Joao, I appreciate the reply! Your solution at the end is what I planned on falling back on in case a more integrated solution didn't pan out. It would have been nice for simple UX reasons, but I wasn't really aware of the limits of GIMP plug-in writing with Python. I did feel like I was swimming beyond the safe waters of "Documentation Bay". Are the Python hooks for `gimpui` and company there as a sort of "future features" to be fleshed out? Also, I've been working on a Ubuntu machine and writing my plugin using http://gimpbook.com/scripting/gimp-script-templates/life.py as a scaffold. I don't have a Windows install yet so I'm wondering how portable will the GTK interface be on a Windows machine? Thanks again! Viet On Wed, Feb 5, 2014 at 3:54 PM, Joao S. O. Bueno wrote: > You are really trying something very different than what the current > GIMP-Python integration is thought of to do: > You are using gobject introspection to call functions that up to now > have only been called from native-code > plug-ins (normally in C), and have no provision to be called from > Python or other language supported > by gobject introspection but for the automatic generation of the bindings. > > I am in fact surprised you could get this far. > > GIMP-Python plug-ins, AKA python-fu, are designed to around a python-module > that is delivered with GIMP, and comunicates with GIMP through the > "Procedural database" (PDB). > The module does have some higher level constructs, such as images, > layers, layer-groups, > but these are just rebuilt on the Python side from values such as > numeric and string IDs fetched > from GIMP through pdb calls. > > That said, you can see all your available API by going to help->PDB > browser on GIMP. > (Open any .py file that comes with GIMP to see how the plug-ins are > registered and created, > if yours go on a completely different way by trying to use the libgimp API) > > Now, plug-ins in GIMP - neither the ones built using native code - are > not supposed > to be able to change the active tool while running - so, to get > exactly what you want is impossible. > > You can make a Python plug-in that will display a custom gtk+ window, > change a layer's visibility, > and display instructions for the user to change to the color picker > tool (maybe your hack with gobject > can do that, but I would not trust it across GIMP versions/platforms), > and pick a color. > At this time, the plug-in can read the picked color with a call to > pdb.gimp_context_get_foreground . > > js > -><- > > > > On 5 February 2014 21:20, Viet Nguyen wrote: > > My goal is to write behavior where a click on my special pick button will > > > > 1. Modify layer visibility > > 2. Run the normal pick tool > > 3. Do something with the picked color > > > > I'm trying to do this as a Python plugin so I'm trying to implement this > > using `gimpui.PickButton` and adding event callbacks for `clicked` and > > `color-picked`. I'm using `pydoc gimpui` as a reference. > > > > Unfortunately the Python API apparently has obscured the color data > > structure that gets passed to the `color-picked` event callback. It > passes > > it as a `gobject.gpointer` which is just an intractable pointer (see > > > http://developer.gimp.org/api/2.0/libgimpwidgets/GimpPickButton.html#GimpPickButton-color-pickedand > > https://developer.gnome.org/glib/2.37/glib-Basic-Types.html#gpointer). I > > don't know of any way to pull out the triple double union in Python. > > > > A simpler solution would be to simply "activate" the standard color > picker, > > but I can't figure out how to do that with the API available. I would > > appreciate any help and/or ideas on this. > > > > Thanks! > > > > Viet > > ___ > > gimp-developer-list mailing list > > List address:gimp-developer-list@gnome.org > > List membership: > https://mail.gnome.org/mailman/listinfo/gimp-developer-list > > List archives: https://mail.gnome.org/archives/gimp-developer-list > ___ gimp-developer-list mailing list List address:gimp-developer-list@gnome.org List membership: https://mail.gnome.org/mailman/listinfo/gimp-developer-list List archives: https://mail.gnome.org/archives/gimp-developer-list