symboliccolor: Add _gtk_symbolic_color_resolve_full()
This commit is contained in:
@ -468,6 +468,7 @@ gtk_private_h_sources = \
|
||||
gtkstylecontextprivate.h \
|
||||
gtkstylepropertiesprivate.h \
|
||||
gtkstylepropertyprivate.h \
|
||||
gtksymboliccolorprivate.h \
|
||||
gtktextbtree.h \
|
||||
gtktextbufferserialize.h \
|
||||
gtktextchildprivate.h \
|
||||
|
||||
@ -18,7 +18,7 @@
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
#include "gtksymboliccolor.h"
|
||||
#include "gtksymboliccolorprivate.h"
|
||||
#include "gtkstyleproperties.h"
|
||||
#include "gtkintl.h"
|
||||
#include "gtkwin32themeprivate.h"
|
||||
@ -506,6 +506,15 @@ _shade_color (GdkRGBA *color,
|
||||
*color = temp;
|
||||
}
|
||||
|
||||
static GtkSymbolicColor *
|
||||
resolve_lookup_color (gpointer data, const char *name)
|
||||
{
|
||||
if (data == NULL)
|
||||
return NULL;
|
||||
|
||||
return gtk_style_properties_lookup_color (data, name);
|
||||
}
|
||||
|
||||
/**
|
||||
* gtk_symbolic_color_resolve:
|
||||
* @color: a #GtkSymbolicColor
|
||||
@ -535,6 +544,22 @@ gtk_symbolic_color_resolve (GtkSymbolicColor *color,
|
||||
g_return_val_if_fail (resolved_color != NULL, FALSE);
|
||||
g_return_val_if_fail (props == NULL || GTK_IS_STYLE_PROPERTIES (props), FALSE);
|
||||
|
||||
return _gtk_symbolic_color_resolve_full (color,
|
||||
resolve_lookup_color,
|
||||
props,
|
||||
resolved_color);
|
||||
}
|
||||
|
||||
gboolean
|
||||
_gtk_symbolic_color_resolve_full (GtkSymbolicColor *color,
|
||||
GtkSymbolicColorLookupFunc func,
|
||||
gpointer data,
|
||||
GdkRGBA *resolved_color)
|
||||
{
|
||||
g_return_val_if_fail (color != NULL, FALSE);
|
||||
g_return_val_if_fail (resolved_color != NULL, FALSE);
|
||||
g_return_val_if_fail (func != NULL, FALSE);
|
||||
|
||||
switch (color->type)
|
||||
{
|
||||
case COLOR_TYPE_LITERAL:
|
||||
@ -544,15 +569,12 @@ gtk_symbolic_color_resolve (GtkSymbolicColor *color,
|
||||
{
|
||||
GtkSymbolicColor *named_color;
|
||||
|
||||
if (props == NULL)
|
||||
return FALSE;
|
||||
|
||||
named_color = gtk_style_properties_lookup_color (props, color->name);
|
||||
named_color = func (data, color->name);
|
||||
|
||||
if (!named_color)
|
||||
return FALSE;
|
||||
|
||||
return gtk_symbolic_color_resolve (named_color, props, resolved_color);
|
||||
return _gtk_symbolic_color_resolve_full (named_color, func, data, resolved_color);
|
||||
}
|
||||
|
||||
break;
|
||||
@ -560,7 +582,7 @@ gtk_symbolic_color_resolve (GtkSymbolicColor *color,
|
||||
{
|
||||
GdkRGBA shade;
|
||||
|
||||
if (!gtk_symbolic_color_resolve (color->shade.color, props, &shade))
|
||||
if (!_gtk_symbolic_color_resolve_full (color->shade.color, func, data, &shade))
|
||||
return FALSE;
|
||||
|
||||
_shade_color (&shade, color->shade.factor);
|
||||
@ -574,7 +596,7 @@ gtk_symbolic_color_resolve (GtkSymbolicColor *color,
|
||||
{
|
||||
GdkRGBA alpha;
|
||||
|
||||
if (!gtk_symbolic_color_resolve (color->alpha.color, props, &alpha))
|
||||
if (!_gtk_symbolic_color_resolve_full (color->alpha.color, func, data, &alpha))
|
||||
return FALSE;
|
||||
|
||||
*resolved_color = alpha;
|
||||
@ -586,10 +608,10 @@ gtk_symbolic_color_resolve (GtkSymbolicColor *color,
|
||||
{
|
||||
GdkRGBA color1, color2;
|
||||
|
||||
if (!gtk_symbolic_color_resolve (color->mix.color1, props, &color1))
|
||||
if (!_gtk_symbolic_color_resolve_full (color->mix.color1, func, data, &color1))
|
||||
return FALSE;
|
||||
|
||||
if (!gtk_symbolic_color_resolve (color->mix.color2, props, &color2))
|
||||
if (!_gtk_symbolic_color_resolve_full (color->mix.color2, func, data, &color2))
|
||||
return FALSE;
|
||||
|
||||
resolved_color->red = CLAMP (color1.red + ((color2.red - color1.red) * color->mix.factor), 0, 1);
|
||||
|
||||
36
gtk/gtksymboliccolorprivate.h
Normal file
36
gtk/gtksymboliccolorprivate.h
Normal file
@ -0,0 +1,36 @@
|
||||
/* GTK - The GIMP Toolkit
|
||||
* Copyright (C) 2011 Benjamin Otte <otte@gnome.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 2 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, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#ifndef __GTK_SYMBOLIC_COLOR_PRIVATE_H__
|
||||
#define __GTK_SYMBOLIC_COLOR_PRIVATE_H__
|
||||
|
||||
#include "gtk/gtksymboliccolor.h"
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
typedef GtkSymbolicColor * (* GtkSymbolicColorLookupFunc) (gpointer data, const char *name);
|
||||
|
||||
gboolean _gtk_symbolic_color_resolve_full (GtkSymbolicColor *color,
|
||||
GtkSymbolicColorLookupFunc func,
|
||||
gpointer data,
|
||||
GdkRGBA *resolved_color);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __GTK_SYMBOLIC_COLOR_PRIVATE_H__ */
|
||||
Reference in New Issue
Block a user