This fixes all our GObject Introspection issues with GimpUnit which was
both an enum and an int-derived type of user-defined units *completing*
the enum values. GIR clearly didn't like this!
Now GimpUnit is a proper class and units are unique objects, allowing to
compare them with an identity test (i.e. `unit == gimp_unit_pixel ()`
tells us if unit is the pixel unit or not), which makes it easy to use,
just like with int, yet adding also methods, making for nicer
introspected API.
As an aside, this also fixes#10738, by having all the built-in units
retrievable even if libgimpbase had not been properly initialized with
gimp_base_init().
I haven't checked in details how GIR works to introspect, but it looks
like it loads the library to inspect and runs functions, hence
triggering some CRITICALS because virtual methods (supposed to be
initialized with gimp_base_init() run by libgimp) are not set. This new
code won't trigger any critical because the vtable method are now not
necessary, at least for all built-in units.
Note that GimpUnit is still in libgimpbase. It could have been moved to
libgimp in order to avoid any virtual method table (since we need to
keep core and libgimp side's units in sync, PDB is required), but too
many libgimpwidgets widgets were already using GimpUnit. And technically
most of GimpUnit logic doesn't require PDB (only the creation/sync
part). This is one of the reasons why user-created GimpUnit list is
handled and stored differently from other types of objects.
Globally this simplifies the code a lot too and we don't need separate
implementations of various utils for core and libgimp, which means less
prone to errors.
- GimpLabelStringWidget widget makes any widget with a "value" string property
into a GimpLabeled.
- Add a "value" string property to GimpStringComboBox (which makes it usable by
GimpLabelStringWidget).
A proper class for a frame containing radio buttons. This object has a
"value" property and will therefore be very easy to use in various API
binding a config property to a widget property.
A GimpIntRadioFrame is also what gimp_prop_int_radio_frame_new() will
return now.
gimp_prop_int_radio_box_new() on the other hand is being removed. It is
used nowhere and is unneeded. If someone really needs a non-labelled
group of radio buttons, they can also create a GimpIntRadioFrame, remove
the label and hide the borders. At least they will still be able to
easily bind it to a config property.
I tried to have a not too overwhelming API, so we just ask for the label
and initial color at construction. We keep sane defaults for the rest
and let people tweak the result by getting the color area widgets
themselves (if they need to force-showing flat colors or change the drag
buttons in particular).
Another thing I wondered about was the initial size of the color area.
Without a size request or being in some container expanding its
children (which may also be ugly), it ends up too small. I can imagine
such widget being used especially when you want to display several
color rectangles next to each other with a label each. So I just set it
this way. Anyone is free to request a resize after constructing the
object.
Last but not least, the position of the label was especially of interest
here. For my idea of a list of colors, I could definitely imagine color
blocks aligned with vertically-oriented labels above or below. It might
be worth adding an API for this later on.
There is really nothing specific to the core application, it is quite a
generic widget, so it would be nice for plug-ins to be able to use this
widget.
- New GimpLabelIntWidget which is a label associated to any widget with
an integer "value" property.
- New gimp_procedure_dialog_get_int_combo() which creates a labeled
combo box from an integer property of the GimpProcedureConfig.
- Renamed gimp_procedure_dialog_populate*() with
gimp_procedure_dialog_fill*(). Naming is hard! I hesitated using
_pack() as well (similarly to GtkBox API).
- New gimp_procedure_dialog_fill_flowbox*() functions to create a
GtkFlowBox filled with property widgets (or other container widgets as
we can pack them one in another). This is an alternative way to build
your GUI with sane defaults, with list of property names.
There is currently no property widget which just creates a
GimpSpinButton with a label. Just as the GimpScaleEntry was needed, this
one is as well.
I am creating a GimpLabeled abstract class which will represent various
widgets with a label. While this may seem a bit over-engineered for such
a basic feature, this will actually bring some consistency and a common
parent. In particular this can be used to get the GtkLabel with a common
interface to add them all in a common GtkSizeGroup when generating
dialogs automatically, hence make dialogs with properly aligned labels
and edition widgets.
Similarly to GimpScaleEntry, this is meant to replace usage of
gimp_color_scale_entry_new() by having a proper widget. This is a child
class of GimpScaleEntry which simply replaces the GtkScale by a
GimpColorScale by adding a GimpScaleEntry class method to create the
scale widget (only restriction: it must be a GtkRange subtype).
This also triggers me to rename gimp_scale_entry_get_scale() into
gimp_scale_entry_get_range() (as well as the 2 plug-ins already using
this function).
GtkHBox is a deprecated version of GtkBox, which we don't even use
anymore. It confuses the gtk-doc a build though, so let's fix it to get
rid of another warning.
gimp_int_radio_group_new() was still complaining about the scope of
radio_button_callback(). Make it (scope notified) because it needs to
stay alive after the function returns and may be called multiple times.
Also adding a GDestroyNotify to free the callback data once the widget
is destroyed (additionally it will also serve as a notifier for bindings
to properly free the callback closure itself, not only it's data).
With this last one done, GObject Introspection generation now happens
without any warning output.
GimpSpinButton is a drop-in replacement for (and a subclass of)
GtkSpinButton. Unlike GtkSpinButton, it avoids updating the
adjustment value when losing focus, unless the entry text has
changed. This prevents accidental loss of precision, when the
adjustment value can't be accurately displayed in the entry.
GimpBusyBox is used to show a message indicating an operation is in
progress. It's basically just a spinner and a label, with some
styling.
We're going to use it both in app/ and in a plug-in.
Move some functions from libgimpwidgets/gimpwidgets.[ch]
and from app/widgets/gimpwidgets-utils.[ch]. Newly add
gimp_widget_get_color_profile() which is extracted from
modules/display-filter-lcms.c.
instead of checking for event->button == 3, so context menus
work correctly on the Mac. Didn't change the image menu yet
because thet requires some more refactoring.
This only helps to maintain proper includes in app/ and shouldn't
affect plug-ins at all, because these are supposed to only include the
main headers from libgimp/ since the beginning of time.
The gimpfootypes.h files do not have these guards, so we can continue
to maintain app/'s include policy that is very likely to error out if
wrong things are included.
2009-01-17 Michael Natterer <mitch@gimp.org>
* all files with a GPL header and all COPYING files:
Change licence to GPLv3 (and to LGPLv3 for libgimp).
Cleaned up some copyright headers and regenerated the parsers in
the ImageMap plugin.
svn path=/trunk/; revision=27913
2008-05-26 Sven Neumann <sven@gimp.org>
* libgimpwidgets/Makefile.am
* libgimpwidgets/gimpwidgets.h
* libgimpwidgets/gimpwidgetstypes.h
* libgimpwidgets/gimpruler.[ch]
* libgimpwidgets/gimphruler.[ch]
* libgimpwidgets/gimpvruler.[ch]: added ruler widgets. These are
mostly copied from GTK+ and work as a drop-in replacement for
GtkRuler and friends.
* libgimpwidgets/gimpwidgets.def: updated.
* app/display/gimpdisplayshell.c
* app/display/gimpdisplayshell-scale.c
* app/dialogs/resolution-calibrate-dialog.c
* plug-ins/imagemap/imap_preview.c
* plug-ins/gfig/gfig-preview.c: use the GimpRuler widgets.
svn path=/trunk/; revision=25820
Merged from weskaggs branch at Mitch's request. Will
need to update devel docs.
Place scale entry code into separate files, no
functional changes.
* libgimpwidgets/gimpscaleentry.c
* libgimpwidgets/gimpscaleentry.h: new files.
* libgimpwidgets/gimpwidgets.h
* libgimpwidgets/gimpwidgets.c
* libgimpwidgets/gimpwidgets.h
* libgimpwidgets/Makefile.am: changed accordingly.
svn path=/trunk/; revision=24887
2007-08-14 Sven Neumann <sven@gimp.org>
* libgimpwidgets/Makefile.am
* libgimpwidgets/gimpwidgets.h
* libgimpwidgets/gimpwidgetstypes.h
* libgimpwidgets/gimpcolorprofilecombobox.[ch]
* libgimpwidgets/gimpcolorprofilestore.[ch]
* libgimpwidgets/gimpcolorprofilestore-private.h: new widget to
select color profiles.
* libgimpwidgets/gimpwidgets.def: updated.
* app/widgets/gimpprofilechooserdialog.[ch]: remember the name of
the last previewed profile.
* app/dialogs/preferences-dialog.c: use the new color profile
combo-box.
* plug-ins/common/lcms.c: use the new color profile combo-box.
svn path=/trunk/; revision=23253
2007-08-08 Martin Nordholts <martinn@svn.gnome.org>
Renamed GimpRatioEntry to GimpNumberPairEntry, and generalized the
code a lot, so that it can be used both for 'Fixed: Aspect ratio'
and 'Fixed: Size'. Support is also added for having default values
and a 'user overrided' value mode.
* libgimpwidgets/gimpnumberpairentry.[ch]: Now contains the
rewrite and generalization of GimpRatioEntry.
(gimp_number_pair_entry_get_type)
(gimp_number_pair_entry_new)
(gimp_number_pair_entry_set_default_values)
(gimp_number_pair_entry_set_values)
(gimp_number_pair_entry_get_values): New libgimpwidget API.
* app/widgets/gimppropwidgets.[ch] (gimp_prop_size_2d_new): Added
new helper widget for setting up a GimpNumberPairEntry for the
Fixed: Size entry in the Rectangle Options.
* app/tools/gimprectangleoptions.c (gimp_rectangle_options_gui):
Use the new gimp_prop_size_2d_entry for the Fixed: Size entry.
* libgimpwidgets/gimpwidgets.def: Removed gimp_ratio_entry_* and
added gimp_number_pair_entry_*.
* libgimpwidgets/gimpwidgets.h * libgimpwidgets/gimpwidgetstypes.h
* libgimpwidgets/Makefile.am (libgimpwidgets_2_0_la_sources)
(libgimpwidgetsinclude_HEADERS): Updated accordingly.
svn path=/trunk/; revision=23154
2007-02-12 Sven Neumann <sven@gimp.org>
* libgimpwidgets/Makefile.am
* libgimpwidgets/gimpwidgetstypes.h
* libgimpwidgets/gimpwidgets.h
* libgimpwidgets/gimpstringcombobox.[ch]: added GimpStringComboBox.
* libgimpwidgets/gimppropwidgets.[ch]: added a prop widget
constructor that uses the new widget.
* libgimpwidgets/gimpwidgets.def: updated.
* app/widgets/gimpcontrollereditor.c: use a GimpStringComboBox if
the module specifies a tree model with string values.
* modules/gimpinputdevicestore.c: minor cleanup.
* modules/controller_linux_input.c: keep a pointer to the input
device store and unref it in the finalizer.
svn path=/trunk/; revision=21900
2006-12-30 Simon Budig <simon@gimp.org>
* libgimpwidgets/gimpratioentry.[ch]: New files implementing a widget
for entering ratios. Will be improved over time...
* libgimpwidgets/gimpwidgetstypes.h
* libgimpwidgets/gimpwidgets.h
* libgimpwidgets/Makefile.am: changed accordingly.
* app/widgets/gimppropwidgets.c: use it for the crop/rectangle
select tools.
svn path=/trunk/; revision=21613
2006-09-05 Sven Neumann <sven@gimp.org>
* libgimpwidgets/Makefile.am
* libgimpwidgets/gimpwidgets.h
* libgimpwidgets/gimphintbox.[ch]: added simple widget to
display
a user hint. Having this as a widget will allow us to change the
look, perhaps even using style properties.
* libgimpwidgets/gimpwidgets.def: added the new symbols.
* app/dialogs/keyboard-shortcuts-dialog.c
* plug-ins/common/colormap-remap.c
* plug-ins/common/redeye.c: use the new widget instead of
duplicating the code.
* libgimpwidgets/gimpzoommodel.[ch]: New object to handle zoom
factor, and create widgets to control or view this value.
* libgimpwidgets/Makefile.am
* libgimpwidgets/gimpwidgets.h: Added gimpzoommodel.[ch].
* libgimpwidgets/gimpwidgetsenums.h: new enum: GimpZoomWidgetType.
This enumerate which knid of widget you can created from the zoom
model.
* libgimpwidgets/gimpwidgetsenums.c
* libgimpwidgets/gimpwidgetstypes.h: regenerated.
* libgimpwidgets/gimppreview.c: move the update toggle to the bottom
of the vbox.
* libgimp/Makefile.am
* libgimp/gimpui.h
* libgimp/gimpuitypes.h
* libgimp/gimpzoompreview.[ch]: New widget, derivated from
GimpScrolledPreview, which offer the same functionnalities as the
GimpAspectPreview widget plus zoom facilities.
* plug-ins/common/AlienMap2.c
* plug-ins/common/apply_lens.c
* plug-ins/common/blinds.c
* plug-ins/common/channel_mixer.c
* plug-ins/common/colorify.c
* plug-ins/common/flarefx.c
* plug-ins/common/illusion.c
* plug-ins/common/jigsaw.c
* plug-ins/common/mapcolor.c
* plug-ins/common/max_rgb.c
* plug-ins/common/nova.c
* plug-ins/common/polar.c
* plug-ins/common/retinex.c
* plug-ins/common/waves.c
* plug-ins/common/whirlpinch.c: use a GimpZoomPreview instead of a
GimpAspectPreview.
* libgimpwidgets/gimpresolutionentry.[ch]: spiffy new widget that given
a physical size, displays that size in an arbitrary unit, and lets
you select a resolution via changing either the corresponding width
and height or specifying it directly in pixels per your chosen unit.
* libgimpwidgets/Makefile.am
* libgimpwidgets/gimpwidgets.def
* libgimpwidgets/gimpwidgets.h
* libgimpwidgets/gimpwidgetstypes.h: added appropriate files, function,
headers, and types, respectively
* devel-docs/libgimpwidgets/libgimpwidgets.types: added
gimp_resolution_entry_get_type. A section still needs to be created
for it.
* plug-ins/common/poppler.c (run): bugfix that accidentally wasn't
merged in previous commit.
* plug-ins/common/poppler.c (load_dialog): replaced resolution
spinbutton with a GimpResolutionEntry.