mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2025-01-16 23:24:16 +00:00
127b92e3db
This will only be used with linear compositing, so we force U8 when we're not compositing linear.
113 lines
3.0 KiB
C
113 lines
3.0 KiB
C
#pragma once
|
|
|
|
#include "gdkcolorstate.h"
|
|
|
|
#include "gdkdebugprivate.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;
|
|
GdkColorState *rendering_color_state;
|
|
};
|
|
|
|
struct _GdkColorStateClass
|
|
{
|
|
void (* free) (GdkColorState *self);
|
|
gboolean (* equal) (GdkColorState *self,
|
|
GdkColorState *other);
|
|
const char * (* get_name) (GdkColorState *self);
|
|
GdkColorState * (* get_no_srgb_tf) (GdkColorState *self);
|
|
};
|
|
|
|
typedef struct _GdkDefaultColorState GdkDefaultColorState;
|
|
|
|
struct _GdkDefaultColorState
|
|
{
|
|
GdkColorState parent;
|
|
|
|
const char *name;
|
|
GdkColorState *no_srgb;
|
|
};
|
|
|
|
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);
|
|
GdkColorState * gdk_color_state_get_no_srgb_tf (GdkColorState *self);
|
|
|
|
static inline GdkColorState *
|
|
gdk_color_state_get_rendering_color_state (GdkColorState *self)
|
|
{
|
|
if (!GDK_DEBUG_CHECK (LINEAR))
|
|
return self;
|
|
|
|
return self->rendering_color_state;
|
|
}
|
|
|
|
static inline GdkMemoryDepth
|
|
gdk_color_state_get_depth (GdkColorState *self)
|
|
{
|
|
if (!GDK_DEBUG_CHECK (LINEAR) && self->depth == GDK_MEMORY_U8_SRGB)
|
|
return GDK_MEMORY_U8;
|
|
|
|
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);
|
|
}
|
|
|