1 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- 2 * 3 * Copyright (C) 2014-2016 Richard Hughes <richard@hughsie.com> 4 * 5 * SPDX-License-Identifier: LGPL-2.1+ 6 */ 7 8 #pragma once 9 10 #if !defined (__APPSTREAM_GLIB_H_INSIDE__) && !defined (AS_COMPILATION) 11 #error "Only <appstream-glib.h> can be included directly." 12 #endif 13 14 #include <glib-object.h> 15 #include <gdk-pixbuf/gdk-pixbuf.h> 16 17 G_BEGIN_DECLS 18 19 #define AS_TYPE_IMAGE (as_image_get_type ()) 20 G_DECLARE_DERIVABLE_TYPE (AsImage, as_image, AS, IMAGE, GObject) 21 22 struct _AsImageClass 23 { 24 GObjectClass parent_class; 25 /*< private >*/ 26 void (*_as_reserved1) (void); 27 void (*_as_reserved2) (void); 28 void (*_as_reserved3) (void); 29 void (*_as_reserved4) (void); 30 void (*_as_reserved5) (void); 31 void (*_as_reserved6) (void); 32 void (*_as_reserved7) (void); 33 void (*_as_reserved8) (void); 34 }; 35 36 /** 37 * AsImageKind: 38 * @AS_IMAGE_KIND_UNKNOWN: Type invalid or not known 39 * @AS_IMAGE_KIND_SOURCE: The source image at full resolution 40 * @AS_IMAGE_KIND_THUMBNAIL: A thumbnail at reduced resolution 41 * 42 * The image type. 43 **/ 44 typedef enum { 45 AS_IMAGE_KIND_UNKNOWN, 46 AS_IMAGE_KIND_SOURCE, 47 AS_IMAGE_KIND_THUMBNAIL, 48 /*< private >*/ 49 AS_IMAGE_KIND_LAST 50 } AsImageKind; 51 52 /** 53 * AsImageSaveFlags: 54 * @AS_IMAGE_SAVE_FLAG_NONE: No special flags set 55 * @AS_IMAGE_SAVE_FLAG_PAD_16_9: Pad with alpha to 16:9 aspect 56 * @AS_IMAGE_SAVE_FLAG_SHARPEN: Sharpen the image to clarify detail 57 * @AS_IMAGE_SAVE_FLAG_BLUR: Blur the image to clear detail 58 * 59 * The flags used for saving images. 60 **/ 61 typedef enum { 62 AS_IMAGE_SAVE_FLAG_NONE = 0, /* Since: 0.1.6 */ 63 AS_IMAGE_SAVE_FLAG_PAD_16_9 = 1, /* Since: 0.1.6 */ 64 AS_IMAGE_SAVE_FLAG_SHARPEN = 2, /* Since: 0.3.2 */ 65 AS_IMAGE_SAVE_FLAG_BLUR = 4, /* Since: 0.3.2 */ 66 /*< private >*/ 67 AS_IMAGE_SAVE_FLAG_LAST 68 } AsImageSaveFlags; 69 70 /** 71 * AsImageLoadFlags: 72 * @AS_IMAGE_LOAD_FLAG_NONE: No special flags set 73 * @AS_IMAGE_LOAD_FLAG_SHARPEN: Sharpen the resulting image 74 * @AS_IMAGE_LOAD_FLAG_SET_BASENAME: Set the image basename 75 * @AS_IMAGE_LOAD_FLAG_SET_CHECKSUM: Set the image checksum 76 * @AS_IMAGE_LOAD_FLAG_ONLY_SUPPORTED: Only load supported formats like PNG and JPG 77 * @AS_IMAGE_LOAD_FLAG_ALWAYS_RESIZE: Always resize the source icon to the perfect size 78 * 79 * The flags used for loading images. 80 **/ 81 typedef enum { 82 AS_IMAGE_LOAD_FLAG_NONE = 0, /* Since: 0.5.6 */ 83 AS_IMAGE_LOAD_FLAG_SHARPEN = 1, /* Since: 0.5.6 */ 84 AS_IMAGE_LOAD_FLAG_SET_BASENAME = 2, /* Since: 0.5.6 */ 85 AS_IMAGE_LOAD_FLAG_SET_CHECKSUM = 4, /* Since: 0.5.6 */ 86 AS_IMAGE_LOAD_FLAG_ONLY_SUPPORTED = 8, /* Since: 0.5.6 */ 87 AS_IMAGE_LOAD_FLAG_ALWAYS_RESIZE = 16, /* Since: 0.7.7 */ 88 /*< private >*/ 89 AS_IMAGE_LOAD_FLAG_LAST 90 } AsImageLoadFlags; 91 92 /** 93 * AsImageAlphaFlags: 94 * @AS_IMAGE_ALPHA_FLAG_NONE: No padding detected 95 * @AS_IMAGE_ALPHA_FLAG_TOP: Padding detected at the image top 96 * @AS_IMAGE_ALPHA_FLAG_BOTTOM: Padding detected at the image bottom 97 * @AS_IMAGE_ALPHA_FLAG_LEFT: Padding detected at the image left side 98 * @AS_IMAGE_ALPHA_FLAG_RIGHT: Padding detected at the image right side 99 * @AS_IMAGE_ALPHA_FLAG_INTERNAL: Internal alpha cut out areas detected 100 * 101 * The flags used for reporting the alpha cutouts in the image. 102 **/ 103 #define AS_IMAGE_ALPHA_FLAG_NONE (0u) /* Since: 0.2.2 */ 104 #define AS_IMAGE_ALPHA_FLAG_TOP (1u << 0) /* Since: 0.2.2 */ 105 #define AS_IMAGE_ALPHA_FLAG_BOTTOM (1u << 1) /* Since: 0.2.2 */ 106 #define AS_IMAGE_ALPHA_FLAG_LEFT (1u << 2) /* Since: 0.2.2 */ 107 #define AS_IMAGE_ALPHA_FLAG_RIGHT (1u << 3) /* Since: 0.2.2 */ 108 #define AS_IMAGE_ALPHA_FLAG_INTERNAL (1u << 4) /* Since: 0.2.2 */ 109 typedef guint AsImageAlphaFlags; 110 111 /* some useful constants */ 112 #define AS_IMAGE_LARGE_HEIGHT 423 /* Since: 0.2.2 */ 113 #define AS_IMAGE_LARGE_WIDTH 752 /* Since: 0.2.2 */ 114 #define AS_IMAGE_NORMAL_HEIGHT 351 /* Since: 0.2.2 */ 115 #define AS_IMAGE_NORMAL_WIDTH 624 /* Since: 0.2.2 */ 116 #define AS_IMAGE_THUMBNAIL_HEIGHT 63 /* Since: 0.2.2 */ 117 #define AS_IMAGE_THUMBNAIL_WIDTH 112 /* Since: 0.2.2 */ 118 119 AsImage *as_image_new (void); 120 121 /* helpers */ 122 AsImageKind as_image_kind_from_string (const gchar *kind); 123 const gchar *as_image_kind_to_string (AsImageKind kind); 124 125 /* getters */ 126 const gchar *as_image_get_url (AsImage *image); 127 const gchar *as_image_get_md5 (AsImage *image); 128 const gchar *as_image_get_basename (AsImage *image); 129 const gchar *as_image_get_locale (AsImage *image); 130 guint as_image_get_width (AsImage *image); 131 guint as_image_get_height (AsImage *image); 132 AsImageKind as_image_get_kind (AsImage *image); 133 GdkPixbuf *as_image_get_pixbuf (AsImage *image); 134 135 /* setters */ 136 void as_image_set_url (AsImage *image, 137 const gchar *url); 138 void as_image_set_basename (AsImage *image, 139 const gchar *basename); 140 void as_image_set_locale (AsImage *image, 141 const gchar *locale); 142 void as_image_set_width (AsImage *image, 143 guint width); 144 void as_image_set_height (AsImage *image, 145 guint height); 146 void as_image_set_kind (AsImage *image, 147 AsImageKind kind); 148 void as_image_set_pixbuf (AsImage *image, 149 GdkPixbuf *pixbuf); 150 151 /* object methods */ 152 AsImageAlphaFlags as_image_get_alpha_flags (AsImage *image); 153 gboolean as_image_load_filename (AsImage *image, 154 const gchar *filename, 155 GError **error); 156 gboolean as_image_load_filename_full (AsImage *image, 157 const gchar *filename, 158 guint dest_size, 159 guint src_size_min, 160 AsImageLoadFlags flags, 161 GError **error); 162 GdkPixbuf *as_image_save_pixbuf (AsImage *image, 163 guint width, 164 guint height, 165 AsImageSaveFlags flags); 166 gboolean as_image_save_filename (AsImage *image, 167 const gchar *filename, 168 guint width, 169 guint height, 170 AsImageSaveFlags flags, 171 GError **error); 172 gboolean as_image_equal (AsImage *image1, 173 AsImage *image2); 174 175 G_END_DECLS 176