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.
gimp_rectangle_options_fixed_rule_changed is called when either the
checkbox or the dropdown for Fixed Size is changed.
However, the "fixed-size-active" property was not updated until after
it ran, so the toggle behavior is inverted.
This checks to see if the toggle was changed and updates the boolean
before setting the size field as (in)sensitive.
… gimp_prop_widget_set_factor() to libgimpwidgets.
Now that GimpSpinScale is in libgimpwidgets, it's time to move the
associated prop too, to make it a prop widget with such a widget easily
creatable by plug-ins.
While doing so, I update both these functions logic, binding properties
together with the g_object_bind_property*() APIs (as we do already in
some other recent prop functions) rather than connecting to signals
ourselves. It makes for much simpler code.
and remove a gazillion gtk_widget_show() all over the place, some
places need a gtk_widget_hide() now, and I'm pretty sure I broke at
least one thing in all those files...
Set the scale of the GimpRectangleOptions highlight-opacity
spinscale to 100, so that the spinscale's range is 0-100, instead
of 0-1, like the rest of our opacity spinscales.
...outside area of Crop Tool -> Highlight option
Add "highlight-opacity" property and turn the controlling GUI into an
expanding toggle that reveals an opacity slider.
Repalce the two separate size entries, used for the position and
size properties of GimpRectangleOptions, with a single size entry
with two fields, so that they accept ratio expressions. Note that
this doesn't change the UI.
More than 2000 lines of code less in app/, instead of
if (instance->member)
{
g_object_unref/g_free/g_whatever (instance->member);
instance->member = NULL;
}
we now simply use
g_clear_object/pointer (&instance->member);
Rather than just discovering them by chance, a simple grep and some
search and replace are much more efficient! :-)
Cleaning only done on C and automake files.
and remove lots of labels from calls to gimp_prop_foo_new(). Also
had to manually remove some unwanted labels that are now added
automatically, fixes bug #761880.
Add gimp_prop_unit_combo_box_new() and adapt all places using the
prop_unit_menu. Some things are broken now, like there are no pixel
digits set, resolution unit menus show "pixels" and warn badly when
pixels is selected, and file-pdf-load is not built right now.
More fixes to come...
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-06-04 Sven Neumann <sven@gimp.org>
* app/tools/gimpcropoptions.c
* app/tools/gimprectangleoptions.c
* app/tools/gimprectangleselectoptions.c: fixed handling of the
"highlight" property that needs different default values for the
Crop and Rectangle Select tools (bug #536582).
svn path=/trunk/; revision=25890
2007-11-11 Martin Nordholts <martinn@svn.gnome.org>
* app/tools/gimprectangletool.c: Lessen code bloat by removing
code that manages center-[xy] properies of GimpRectangleOptions.
Instead use x1, y1 and x2, y2 when working with the rectangle
center.
* app/tools/gimprectangleoptions.[ch]: Removed "center-x" and
"center-y" properties.
svn path=/trunk/; revision=24115
2007-10-16 Michael Natterer <mitch@gimp.org>
* app/tools/gimprectangleoptions.c: redid the x, y, width and
height entries according to a mockup from peter.
svn path=/trunk/; revision=23843
2007-10-15 Michael Natterer <mitch@gimp.org>
* app/tools/gimprectangleoptions.[ch]: split the "unit" property
into "position-unit" and "size-unit" and added a unit menu to the
position widget group. UI pending further changes...
svn path=/trunk/; revision=23831
2007-10-15 Michael Natterer <mitch@gimp.org>
* app/tools/gimprectangleoptions.c (gimp_rectangle_options_gui):
moved the "Highlight" toggle down to the "Guides" combo.
svn path=/trunk/; revision=23830
2007-10-15 Michael Natterer <mitch@gimp.org>
* app/tools/gimprectangleoptions.[ch]: added the x and y size
entries to the GimpRectangleOptionPrivate struct.
* app/tools/gimprectangletool.c (gimp_rectangle_tool_start): set
the image's resolution on the x, y, width and height size entries.
svn path=/trunk/; revision=23829
2007-10-14 Michael Natterer <mitch@gimp.org>
* app/tools/gimprectangleoptions.c (gimp_rectangle_options_gui):
Reduced the Width: and Height: labels to W: and H:. Please check
and comment, we need some solution for this group of widgets
including the unit menu.
svn path=/trunk/; revision=23825