mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2025-01-01 00:11:29 +00:00
aa746bc0c8
This is mostly an empty shell for now. We only have static instances for srgb and srgb-linear, which we will use as markers during our node processing. In the future, this object may grow more instances, as well as the ability to create them from and save them to icc profiles or cicp data. And a color conversion API.
95 lines
2.5 KiB
C
95 lines
2.5 KiB
C
#pragma once
|
|
|
|
#include "gdkcolorstate.h"
|
|
#include "gdkmemoryformatprivate.h"
|
|
|
|
typedef enum
|
|
{
|
|
GDK_COLOR_STATE_ID_SRGB,
|
|
GDK_COLOR_STATE_ID_SRGB_LINEAR,
|
|
|
|
GDK_COLOR_STATE_N_IDS
|
|
} GdkColorStateId;
|
|
|
|
typedef struct _GdkColorStateClass GdkColorStateClass;
|
|
|
|
struct _GdkColorState
|
|
{
|
|
const GdkColorStateClass *klass;
|
|
gatomicrefcount ref_count;
|
|
|
|
GdkMemoryDepth depth;
|
|
};
|
|
|
|
struct _GdkColorStateClass
|
|
{
|
|
void (* free) (GdkColorState *self);
|
|
gboolean (* equal) (GdkColorState *self,
|
|
GdkColorState *other);
|
|
const char * (* get_name) (GdkColorState *self);
|
|
};
|
|
|
|
typedef struct _GdkDefaultColorState GdkDefaultColorState;
|
|
|
|
struct _GdkDefaultColorState
|
|
{
|
|
GdkColorState parent;
|
|
|
|
const char *name;
|
|
};
|
|
|
|
extern GdkDefaultColorState gdk_default_color_states[GDK_COLOR_STATE_N_IDS];
|
|
|
|
#define GDK_COLOR_STATE_SRGB ((GdkColorState *) &gdk_default_color_states[GDK_COLOR_STATE_ID_SRGB])
|
|
#define GDK_COLOR_STATE_SRGB_LINEAR ((GdkColorState *) &gdk_default_color_states[GDK_COLOR_STATE_ID_SRGB_LINEAR])
|
|
|
|
#define GDK_IS_DEFAULT_COLOR_STATE(c) ((GdkDefaultColorState *) (c) >= &gdk_default_color_states[0] && \
|
|
(GdkDefaultColorState *) (c) < &gdk_default_color_states[GDK_COLOR_STATE_N_IDS])
|
|
#define GDK_DEFAULT_COLOR_STATE_ID(c) ((GdkColorStateId) (((GdkDefaultColorState *) c) - gdk_default_color_states))
|
|
|
|
const char * gdk_color_state_get_name (GdkColorState *color_state);
|
|
|
|
static inline GdkMemoryDepth
|
|
gdk_color_state_get_depth (GdkColorState *self)
|
|
{
|
|
return self->depth;
|
|
}
|
|
|
|
#define gdk_color_state_ref(self) _gdk_color_state_ref (self)
|
|
static inline GdkColorState *
|
|
_gdk_color_state_ref (GdkColorState *self)
|
|
{
|
|
if (GDK_IS_DEFAULT_COLOR_STATE (self))
|
|
return self;
|
|
|
|
g_atomic_ref_count_inc (&self->ref_count);
|
|
|
|
return self;
|
|
}
|
|
|
|
#define gdk_color_state_unref(self) _gdk_color_state_unref (self)
|
|
static inline void
|
|
_gdk_color_state_unref (GdkColorState *self)
|
|
{
|
|
if (GDK_IS_DEFAULT_COLOR_STATE (self))
|
|
return;
|
|
|
|
if (g_atomic_ref_count_dec (&self->ref_count))
|
|
self->klass->free (self);
|
|
}
|
|
|
|
#define gdk_color_state_equal(a,b) _gdk_color_state_equal ((a), (b))
|
|
static inline gboolean
|
|
_gdk_color_state_equal (GdkColorState *self,
|
|
GdkColorState *other)
|
|
{
|
|
if (self == other)
|
|
return TRUE;
|
|
|
|
if (self->klass != other->klass)
|
|
return FALSE;
|
|
|
|
return self->klass->equal (self, other);
|
|
}
|
|
|