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