Bug 778523 - Optionally add alpha to layers of imported images

Add "Add alpha to all layers of imported images" to prefs -> import
and honor the setting in file_import_image().
This commit is contained in:
Michael Natterer
2017-02-17 22:07:43 +01:00
parent 5af2ecc8b1
commit b3f802a0b7
5 changed files with 61 additions and 14 deletions

View File

@ -108,6 +108,7 @@ enum
PROP_QUICK_MASK_COLOR,
PROP_IMPORT_PROMOTE_FLOAT,
PROP_IMPORT_PROMOTE_DITHER,
PROP_IMPORT_ADD_ALPHA,
/* ignored, only for backward compatibility: */
PROP_INSTALL_COLORMAP,
@ -634,6 +635,13 @@ gimp_core_config_class_init (GimpCoreConfigClass *klass)
TRUE,
GIMP_PARAM_STATIC_STRINGS);
GIMP_CONFIG_PROP_BOOLEAN (object_class, PROP_IMPORT_ADD_ALPHA,
"import-add-alpha",
"Import add alpha",
IMPORT_ADD_ALPHA_BLURB,
FALSE,
GIMP_PARAM_STATIC_STRINGS);
/* only for backward compatibility: */
GIMP_CONFIG_PROP_BOOLEAN (object_class, PROP_INSTALL_COLORMAP,
"install-colormap",
@ -924,6 +932,9 @@ gimp_core_config_set_property (GObject *object,
case PROP_IMPORT_PROMOTE_DITHER:
core_config->import_promote_dither = g_value_get_boolean (value);
break;
case PROP_IMPORT_ADD_ALPHA:
core_config->import_add_alpha = g_value_get_boolean (value);
break;
case PROP_INSTALL_COLORMAP:
case PROP_MIN_COLORS:
@ -1105,6 +1116,9 @@ gimp_core_config_get_property (GObject *object,
case PROP_IMPORT_PROMOTE_DITHER:
g_value_set_boolean (value, core_config->import_promote_dither);
break;
case PROP_IMPORT_ADD_ALPHA:
g_value_set_boolean (value, core_config->import_add_alpha);
break;
case PROP_INSTALL_COLORMAP:
case PROP_MIN_COLORS:

View File

@ -93,6 +93,7 @@ struct _GimpCoreConfig
GimpRGB quick_mask_color;
gboolean import_promote_float;
gboolean import_promote_dither;
gboolean import_add_alpha;
};
struct _GimpCoreConfigClass

View File

@ -189,6 +189,9 @@ _("Promote imported images to floating point precision. Does not apply " \
_("When promoting imported images to floating point precision, also add " \
"minimal noise in order do distribute color values a bit.")
#define IMPORT_ADD_ALPHA_BLURB \
_("Add an alpha channel to all layers of imported images.")
#define INITIAL_ZOOM_TO_FIT_BLURB \
_("When enabled, this will ensure that the full image is visible after a " \
"file is opened, otherwise it will be displayed with a scale of 1:1.")

View File

@ -1300,6 +1300,10 @@ prefs_dialog_new (Gimp *gimp,
"floating point"),
GTK_BOX (vbox2));
button = prefs_check_button_add (object, "import-add-alpha",
_("Add an alpha channel to imported images"),
GTK_BOX (vbox2));
/****************/
/* Playground */

View File

@ -31,11 +31,16 @@
#include "core/gimpimage.h"
#include "core/gimpimage-color-profile.h"
#include "core/gimpimage-convert-precision.h"
#include "core/gimplayer.h"
#include "core/gimpprogress.h"
#include "text/gimptextlayer.h"
#include "file-import.h"
/* public functions */
void
file_import_image (GimpImage *image,
GimpContext *context,
@ -52,15 +57,16 @@ file_import_image (GimpImage *image,
config = image->gimp->config;
if (interactive &&
config->import_promote_float &&
gimp_image_get_base_type (image) != GIMP_INDEXED)
if (interactive && gimp_image_get_base_type (image) != GIMP_INDEXED)
{
if (config->import_promote_float)
{
GimpPrecision old_precision = gimp_image_get_precision (image);
if (old_precision != GIMP_PRECISION_FLOAT_LINEAR)
{
gimp_image_convert_precision (image, GIMP_PRECISION_FLOAT_LINEAR,
gimp_image_convert_precision (image,
GIMP_PRECISION_FLOAT_LINEAR,
GEGL_DITHER_NONE,
GEGL_DITHER_NONE,
GEGL_DITHER_NONE,
@ -74,6 +80,25 @@ file_import_image (GimpImage *image,
}
}
if (config->import_add_alpha)
{
GList *layers = gimp_image_get_layer_list (image);
GList *list;
for (list = layers; list; list = g_list_next (list))
{
if (! gimp_viewable_get_children (list->data) &&
! gimp_item_is_text_layer (list->data) &&
! gimp_drawable_has_alpha (list->data))
{
gimp_layer_add_alpha (list->data);
}
}
g_list_free (layers);
}
}
gimp_image_import_color_profile (image, context, progress, interactive);
/* Remember the import source */