mirror of
https://gitlab.gnome.org/GNOME/gimp.git
synced 2025-07-03 17:33:25 +00:00

… the public API. This was initially proposed by Niels De Graef in !101, and though I still think this is much less practical for day-to-day development, it is actually much nicer for the public part of the API. So let's use these only in public libgimp* API only, not in core. I actually already started to use these for some of the libgimpwidgets classes and am now moving libgimp main classes to these macros. * It doesn't expose the priv member (which is completely useless for plug-in developers, only to be used for core development). * It forces us to never have any variable members in the public API (which we were doing fine so far in newest API, but it's nice to be enforced with these macros). * When using G_DECLARE_FINAL_TYPE in particular, it adds flexibility as we can change the structure size and the members order as these are not exposed. And if some day, we make the class derivable with some signals to handle, only then will we expose the class with some _gimp_reserved* padding (instead of from the start when none is needed). Therefore we will allow for further extension far in the future. Moreover most of these libgimp classes were so far not using any private values, so we were declaring a `priv` member with a bogus contents just "in case we needed it in future" (as we couldn't change the struct size). So even the easiness of having a priv member was very relative for this public API so far (unlike in core code where we actually have much more complex interactions and using priv data all the time).
104 lines
3 KiB
C
104 lines
3 KiB
C
/* LIBGIMP - The GIMP Library
|
|
* Copyright (C) 1995-2000 Peter Mattis and Spencer Kimball
|
|
*
|
|
* gimpselection.c
|
|
*
|
|
* This library is free software: you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
* License as published by the Free Software Foundation; either
|
|
* version 3 of the License, or (at your option) any later version.
|
|
*
|
|
* This library 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
|
|
* Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with this library. If not, see
|
|
* <https://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#include "config.h"
|
|
|
|
#include "gimp.h"
|
|
|
|
|
|
struct _GimpSelection
|
|
{
|
|
GimpChannel parent_instance;
|
|
};
|
|
|
|
|
|
G_DEFINE_TYPE (GimpSelection, gimp_selection, GIMP_TYPE_CHANNEL)
|
|
|
|
#define parent_class gimp_selection_parent_class
|
|
|
|
|
|
static void
|
|
gimp_selection_class_init (GimpSelectionClass *klass)
|
|
{
|
|
}
|
|
|
|
static void
|
|
gimp_selection_init (GimpSelection *selection)
|
|
{
|
|
}
|
|
|
|
/**
|
|
* gimp_selection_get_by_id:
|
|
* @selection_id: The selection id.
|
|
*
|
|
* Returns a #GimpSelection representing @selection_id. This function
|
|
* calls gimp_item_get_by_id() and returns the item if it is selection
|
|
* or %NULL otherwise.
|
|
*
|
|
* Returns: (nullable) (transfer none): a #GimpSelection for
|
|
* @selection_id or %NULL if @selection_id does not represent
|
|
* a valid selection. The object belongs to libgimp and you
|
|
* must not modify or unref it.
|
|
*
|
|
* Since: 3.0
|
|
**/
|
|
GimpSelection *
|
|
gimp_selection_get_by_id (gint32 selection_id)
|
|
{
|
|
GimpItem *item = gimp_item_get_by_id (selection_id);
|
|
|
|
if (GIMP_IS_SELECTION (item))
|
|
return (GimpSelection *) item;
|
|
|
|
return NULL;
|
|
}
|
|
|
|
/**
|
|
* gimp_selection_float:
|
|
* @image: ignored
|
|
* @n_drawables: Size of @drawables.
|
|
* @drawables: (array length=n_drawables): The drawables from which to
|
|
* float selection.
|
|
* @offx: x offset for translation.
|
|
* @offy: y offset for translation.
|
|
*
|
|
* Float the selection from the specified drawable with initial offsets
|
|
* as specified.
|
|
*
|
|
* This procedure determines the region of the specified drawable that
|
|
* lies beneath the current selection. The region is then cut from the
|
|
* drawable and the resulting data is made into a new layer which is
|
|
* instantiated as a floating selection. The offsets allow initial
|
|
* positioning of the new floating selection.
|
|
*
|
|
* Returns: (transfer none): The floated layer.
|
|
*/
|
|
GimpLayer *
|
|
gimp_selection_float (GimpImage *image,
|
|
gint n_drawables,
|
|
GimpDrawable **drawables,
|
|
gint offx,
|
|
gint offy)
|
|
{
|
|
return _gimp_selection_float (n_drawables,
|
|
(const GimpItem **) drawables,
|
|
offx,
|
|
offy);
|
|
}
|