#include <string.h>
#include "gtkcssstylefuncsprivate.h"
+#include "gtkcsstypedvalueprivate.h"
+#include "gtkstylepropertiesprivate.h"
#include "gtkthemingengine.h"
+#include "deprecated/gtksymboliccolor.h"
+
G_DEFINE_TYPE (GtkCssCustomProperty, _gtk_css_custom_property, GTK_TYPE_CSS_STYLE_PROPERTY)
-static gboolean
+static GType
+gtk_css_custom_property_get_specified_type (GParamSpec *pspec)
+{
+ G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
+
+ if (pspec->value_type == GDK_TYPE_RGBA ||
+ pspec->value_type == GDK_TYPE_COLOR)
+ return GTK_TYPE_SYMBOLIC_COLOR;
+ else
+ return pspec->value_type;
+
+ G_GNUC_END_IGNORE_DEPRECATIONS;
+}
+
+static GtkCssValue *
gtk_css_custom_property_parse_value (GtkStyleProperty *property,
- GValue *value,
- GtkCssParser *parser,
- GFile *base)
+ GtkCssParser *parser)
{
GtkCssCustomProperty *custom = GTK_CSS_CUSTOM_PROPERTY (property);
+ GValue value = G_VALUE_INIT;
gboolean success;
if (custom->property_parse_func)
GError *error = NULL;
char *value_str;
- g_value_init (value, _gtk_style_property_get_value_type (property));
+ g_value_init (&value, _gtk_style_property_get_value_type (property));
value_str = _gtk_css_parser_read_value (parser);
if (value_str != NULL)
{
- success = (* custom->property_parse_func) (value_str, value, &error);
+ success = (* custom->property_parse_func) (value_str, &value, &error);
g_free (value_str);
}
else
}
else
{
- GtkCssStyleProperty *style = GTK_CSS_STYLE_PROPERTY (property);
- g_value_init (value, _gtk_css_style_property_get_specified_type (style));
+ g_value_init (&value, gtk_css_custom_property_get_specified_type (custom->pspec));
- success = _gtk_css_style_parse_value (value, parser, base);
+ success = _gtk_css_style_parse_value (&value, parser);
}
if (!success)
- g_value_unset (value);
+ {
+ g_value_unset (&value);
+ return NULL;
+ }
+
+ return _gtk_css_typed_value_new_take (&value);
+}
- return success;
+static void
+gtk_css_custom_property_query (GtkStyleProperty *property,
+ GValue *value,
+ GtkStyleQueryFunc query_func,
+ gpointer query_data)
+{
+ GtkCssStyleProperty *style = GTK_CSS_STYLE_PROPERTY (property);
+ GtkCssCustomProperty *custom = GTK_CSS_CUSTOM_PROPERTY (property);
+ GtkCssValue *css_value;
+
+ css_value = (* query_func) (_gtk_css_style_property_get_id (style), query_data);
+ if (css_value == NULL)
+ css_value = _gtk_css_style_property_get_initial_value (style);
+
+ g_value_init (value, custom->pspec->value_type);
+ g_value_copy (_gtk_css_typed_value_get (css_value), value);
+}
+
+static void
+gtk_css_custom_property_assign (GtkStyleProperty *property,
+ GtkStyleProperties *props,
+ GtkStateFlags state,
+ const GValue *value)
+{
+ GtkCssValue *css_value = _gtk_css_typed_value_new (value);
+ _gtk_style_properties_set_property_by_property (props,
+ GTK_CSS_STYLE_PROPERTY (property),
+ state,
+ css_value);
+ _gtk_css_value_unref (css_value);
}
static void
GtkStylePropertyClass *property_class = GTK_STYLE_PROPERTY_CLASS (klass);
property_class->parse_value = gtk_css_custom_property_parse_value;
+ property_class->query = gtk_css_custom_property_query;
+ property_class->assign = gtk_css_custom_property_assign;
}
-
static void
-_gtk_css_custom_property_init (GtkCssCustomProperty *custom_property)
+_gtk_css_custom_property_init (GtkCssCustomProperty *custom)
{
}
else
g_param_value_set_default (pspec, &value);
- result = _gtk_css_value_new_from_gvalue (&value);
+ result = _gtk_css_typed_value_new (&value);
g_value_unset (&value);
return result;
* </note>
*
* Since: 3.0
+ *
+ * Deprecated: 3.8: Code should use the default properties provided by CSS.
**/
void
gtk_theming_engine_register_property (const gchar *name_space,
node = g_object_new (GTK_TYPE_CSS_CUSTOM_PROPERTY,
"initial-value", initial,
"name", name,
- "computed-type", pspec->value_type,
"value-type", pspec->value_type,
NULL);
node->pspec = pspec;
* a theming engine, you want to use that function instead.
*
* Since: 3.0
+ *
+ * Deprecated: 3.8: Code should use the default properties provided by CSS.
**/
void
gtk_style_properties_register_property (GtkStylePropertyParser parse_func,
node = g_object_new (GTK_TYPE_CSS_CUSTOM_PROPERTY,
"initial-value", initial,
"name", pspec->name,
- "computed-type", pspec->value_type,
"value-type", pspec->value_type,
NULL);
node->pspec = pspec;
* Returns: %TRUE if the property is registered, %FALSE otherwise
*
* Since: 3.0
+ *
+ * Deprecated: 3.8: This code could only look up custom properties and
+ * those are deprecated.
**/
gboolean
gtk_style_properties_lookup_property (const gchar *property_name,