summaryrefslogtreecommitdiffstats
path: root/libgimpcolor/gimpcairo.h
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 18:30:19 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 18:30:19 +0000
commit5c1676dfe6d2f3c837a5e074117b45613fd29a72 (patch)
treecbffb45144febf451e54061db2b21395faf94bfe /libgimpcolor/gimpcairo.h
parentInitial commit. (diff)
downloadgimp-5c1676dfe6d2f3c837a5e074117b45613fd29a72.tar.xz
gimp-5c1676dfe6d2f3c837a5e074117b45613fd29a72.zip
Adding upstream version 2.10.34.upstream/2.10.34upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'libgimpcolor/gimpcairo.h')
-rw-r--r--libgimpcolor/gimpcairo.h159
1 files changed, 159 insertions, 0 deletions
diff --git a/libgimpcolor/gimpcairo.h b/libgimpcolor/gimpcairo.h
new file mode 100644
index 0000000..d96e963
--- /dev/null
+++ b/libgimpcolor/gimpcairo.h
@@ -0,0 +1,159 @@
+/* LIBGIMP - The GIMP Library
+ * Copyright (C) 1995-1997 Peter Mattis and Spencer Kimball
+ *
+ * gimpcairo.h
+ * Copyright (C) 2007 Sven Neumann <sven@gimp.org>
+ * 2010-2012 Michael Natterer <mitch@gimp.org>
+ *
+ * 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/>.
+ */
+
+#ifndef __GIMP_CAIRO_H__
+#define __GIMP_CAIRO_H__
+
+
+void gimp_cairo_set_source_rgb (cairo_t *cr,
+ const GimpRGB *color);
+void gimp_cairo_set_source_rgba (cairo_t *cr,
+ const GimpRGB *color);
+
+cairo_pattern_t * gimp_cairo_checkerboard_create (cairo_t *cr,
+ gint size,
+ const GimpRGB *light,
+ const GimpRGB *dark);
+
+const Babl * gimp_cairo_surface_get_format (cairo_surface_t *surface);
+GeglBuffer * gimp_cairo_surface_create_buffer (cairo_surface_t *surface);
+
+
+/* some useful macros for writing directly to a Cairo surface */
+
+/**
+ * GIMP_CAIRO_RGB24_SET_PIXEL:
+ * @d: pointer to the destination buffer
+ * @r: red component
+ * @g: green component
+ * @b: blue component
+ *
+ * Sets a single pixel in an Cairo image surface in %CAIRO_FORMAT_RGB24.
+ *
+ * Since: 2.6
+ **/
+#if G_BYTE_ORDER == G_LITTLE_ENDIAN
+#define GIMP_CAIRO_RGB24_SET_PIXEL(d, r, g, b) \
+ G_STMT_START { d[0] = (b); d[1] = (g); d[2] = (r); } G_STMT_END
+#else
+#define GIMP_CAIRO_RGB24_SET_PIXEL(d, r, g, b) \
+ G_STMT_START { d[1] = (r); d[2] = (g); d[3] = (b); } G_STMT_END
+#endif
+
+
+/**
+ * GIMP_CAIRO_RGB24_GET_PIXEL:
+ * @s: pointer to the source buffer
+ * @r: red component
+ * @g: green component
+ * @b: blue component
+ *
+ * Gets a single pixel from a Cairo image surface in %CAIRO_FORMAT_RGB24.
+ *
+ * Since: 2.8
+ **/
+#if G_BYTE_ORDER == G_LITTLE_ENDIAN
+#define GIMP_CAIRO_RGB24_GET_PIXEL(s, r, g, b) \
+ G_STMT_START { (b) = s[0]; (g) = s[1]; (r) = s[2]; } G_STMT_END
+#else
+#define GIMP_CAIRO_RGB24_GET_PIXEL(s, r, g, b) \
+ G_STMT_START { (r) = s[1]; (g) = s[2]; (b) = s[3]; } G_STMT_END
+#endif
+
+
+/**
+ * GIMP_CAIRO_ARGB32_SET_PIXEL:
+ * @d: pointer to the destination buffer
+ * @r: red component, not pre-multiplied
+ * @g: green component, not pre-multiplied
+ * @b: blue component, not pre-multiplied
+ * @a: alpha component
+ *
+ * Sets a single pixel in an Cairo image surface in %CAIRO_FORMAT_ARGB32.
+ *
+ * Since: 2.6
+ **/
+#if G_BYTE_ORDER == G_LITTLE_ENDIAN
+#define GIMP_CAIRO_ARGB32_SET_PIXEL(d, r, g, b, a) \
+ G_STMT_START { \
+ const guint tr = (a) * (r) + 0x80; \
+ const guint tg = (a) * (g) + 0x80; \
+ const guint tb = (a) * (b) + 0x80; \
+ (d)[0] = (((tb) >> 8) + (tb)) >> 8; \
+ (d)[1] = (((tg) >> 8) + (tg)) >> 8; \
+ (d)[2] = (((tr) >> 8) + (tr)) >> 8; \
+ (d)[3] = (a); \
+ } G_STMT_END
+#else
+#define GIMP_CAIRO_ARGB32_SET_PIXEL(d, r, g, b, a) \
+ G_STMT_START { \
+ const guint tr = (a) * (r) + 0x80; \
+ const guint tg = (a) * (g) + 0x80; \
+ const guint tb = (a) * (b) + 0x80; \
+ (d)[0] = (a); \
+ (d)[1] = (((tr) >> 8) + (tr)) >> 8; \
+ (d)[2] = (((tg) >> 8) + (tg)) >> 8; \
+ (d)[3] = (((tb) >> 8) + (tb)) >> 8; \
+ } G_STMT_END
+#endif
+
+
+/**
+ * GIMP_CAIRO_ARGB32_GET_PIXEL:
+ * @s: pointer to the source buffer
+ * @r: red component, not pre-multiplied
+ * @g: green component, not pre-multiplied
+ * @b: blue component, not pre-multiplied
+ * @a: alpha component
+ *
+ * Gets a single pixel from a Cairo image surface in %CAIRO_FORMAT_ARGB32.
+ *
+ * Since: 2.8
+ **/
+#if G_BYTE_ORDER == G_LITTLE_ENDIAN
+#define GIMP_CAIRO_ARGB32_GET_PIXEL(s, r, g, b, a) \
+ G_STMT_START { \
+ const guint tb = (s)[0]; \
+ const guint tg = (s)[1]; \
+ const guint tr = (s)[2]; \
+ const guint ta = (s)[3]; \
+ (r) = (tr << 8) / (ta + 1); \
+ (g) = (tg << 8) / (ta + 1); \
+ (b) = (tb << 8) / (ta + 1); \
+ (a) = ta; \
+ } G_STMT_END
+#else
+#define GIMP_CAIRO_ARGB32_GET_PIXEL(s, r, g, b, a) \
+ G_STMT_START { \
+ const guint ta = (s)[0]; \
+ const guint tr = (s)[1]; \
+ const guint tg = (s)[2]; \
+ const guint tb = (s)[3]; \
+ (r) = (tr << 8) / (ta + 1); \
+ (g) = (tg << 8) / (ta + 1); \
+ (b) = (tb << 8) / (ta + 1); \
+ (a) = ta; \
+ } G_STMT_END
+#endif
+
+
+#endif /* __GIMP_CAIRO_H__ */