
This implied a lot of other core changes, which also pushed me into improving some of the edit actions and PDB calls to be multi-layer aware in the same time. Note that it is still work-in-progress, but I just had to commit something in an acceptable intermediate state otherwise I was just going crazy. In particular now the various transform tools are multi-layer aware and work simultaneously on all selected layers (and the linked layers if any of the selected layers is linked too). Both preview and final transform processing works. In the limitations, preview doesn't work well (only one layer in the preview) when there is a selection (though the actual transform works). Also I am left to wonder how we should process this case of canvas selection+transform on multi-layers. Indeed currently I am just creating a floating selection (like we used to for the selection+transform case) containing a transform result of the composited version of all selected layers. This is a possible expected result, but another could be to get several transformed layers (without composition). But then should the "Floating Selection" concept allow for multiple Floating Selections? Sooo many questions left to answer.
77 lines
3.0 KiB
C
77 lines
3.0 KiB
C
/* GIMP - The GNU Image Manipulation Program
|
|
* Copyright (C) 1995 Spencer Kimball and Peter Mattis
|
|
*
|
|
* 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 <https://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#ifndef __GIMP_SELECTION_H__
|
|
#define __GIMP_SELECTION_H__
|
|
|
|
|
|
#include "gimpchannel.h"
|
|
|
|
|
|
#define GIMP_TYPE_SELECTION (gimp_selection_get_type ())
|
|
#define GIMP_SELECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIMP_TYPE_SELECTION, GimpSelection))
|
|
#define GIMP_SELECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_SELECTION, GimpSelectionClass))
|
|
#define GIMP_IS_SELECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GIMP_TYPE_SELECTION))
|
|
#define GIMP_IS_SELECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_SELECTION))
|
|
#define GIMP_SELECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GIMP_TYPE_SELECTION, GimpSelectionClass))
|
|
|
|
|
|
typedef struct _GimpSelectionClass GimpSelectionClass;
|
|
|
|
struct _GimpSelection
|
|
{
|
|
GimpChannel parent_instance;
|
|
|
|
gint suspend_count;
|
|
};
|
|
|
|
struct _GimpSelectionClass
|
|
{
|
|
GimpChannelClass parent_class;
|
|
};
|
|
|
|
|
|
GType gimp_selection_get_type (void) G_GNUC_CONST;
|
|
|
|
GimpChannel * gimp_selection_new (GimpImage *image,
|
|
gint width,
|
|
gint height);
|
|
|
|
gint gimp_selection_suspend (GimpSelection *selection);
|
|
gint gimp_selection_resume (GimpSelection *selection);
|
|
|
|
GeglBuffer * gimp_selection_extract (GimpSelection *selection,
|
|
GList *pickables,
|
|
GimpContext *context,
|
|
gboolean cut_image,
|
|
gboolean keep_indexed,
|
|
gboolean add_alpha,
|
|
gint *offset_x,
|
|
gint *offset_y,
|
|
GError **error);
|
|
|
|
GimpLayer * gimp_selection_float (GimpSelection *selection,
|
|
GList *drawables,
|
|
GimpContext *context,
|
|
gboolean cut_image,
|
|
gint off_x,
|
|
gint off_y,
|
|
GError **error);
|
|
|
|
|
|
#endif /* __GIMP_SELECTION_H__ */
|