| File: | ctk/ctkcssstyleproperty.c |
| Warning: | line 421, column 16 Using a fixed address is not portable because that address will probably not be valid in all environments or platforms |
Press '?' to see keyboard shortcuts
Keyboard shortcuts:
| 1 | /* | |||
| 2 | * Copyright © 2011 Red Hat Inc. | |||
| 3 | * | |||
| 4 | * This library is free software; you can redistribute it and/or | |||
| 5 | * modify it under the terms of the GNU Lesser General Public | |||
| 6 | * License as published by the Free Software Foundation; either | |||
| 7 | * version 2.1 of the License, or (at your option) any later version. | |||
| 8 | * | |||
| 9 | * This library is distributed in the hope that it will be useful, | |||
| 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
| 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |||
| 12 | * Lesser General Public License for more details. | |||
| 13 | * | |||
| 14 | * You should have received a copy of the GNU Lesser General Public | |||
| 15 | * License along with this library. If not, see <http://www.gnu.org/licenses/>. | |||
| 16 | * | |||
| 17 | * Authors: Benjamin Otte <otte@gnome.org> | |||
| 18 | */ | |||
| 19 | ||||
| 20 | #include "config.h" | |||
| 21 | ||||
| 22 | #include "ctkcssstylepropertyprivate.h" | |||
| 23 | ||||
| 24 | #include "ctkcssenumvalueprivate.h" | |||
| 25 | #include "ctkcssinheritvalueprivate.h" | |||
| 26 | #include "ctkcssinitialvalueprivate.h" | |||
| 27 | #include "ctkcssstylefuncsprivate.h" | |||
| 28 | #include "ctkcsstypesprivate.h" | |||
| 29 | #include "ctkcssunsetvalueprivate.h" | |||
| 30 | #include "ctkintl.h" | |||
| 31 | #include "ctkprivatetypebuiltins.h" | |||
| 32 | #include "ctkstylepropertiesprivate.h" | |||
| 33 | #include "ctkprivate.h" | |||
| 34 | ||||
| 35 | /* this is in case round() is not provided by the compiler, | |||
| 36 | * such as in the case of C89 compilers, like MSVC | |||
| 37 | */ | |||
| 38 | #include "fallback-c89.c" | |||
| 39 | ||||
| 40 | enum { | |||
| 41 | PROP_0, | |||
| 42 | PROP_ANIMATED, | |||
| 43 | PROP_AFFECTS, | |||
| 44 | PROP_ID, | |||
| 45 | PROP_INHERIT, | |||
| 46 | PROP_INITIAL | |||
| 47 | }; | |||
| 48 | ||||
| 49 | G_DEFINE_TYPE (CtkCssStyleProperty, _ctk_css_style_property, CTK_TYPE_STYLE_PROPERTY)static void _ctk_css_style_property_init (CtkCssStyleProperty *self); static void _ctk_css_style_property_class_init (CtkCssStylePropertyClass *klass); static GType _ctk_css_style_property_get_type_once ( void); static gpointer _ctk_css_style_property_parent_class = ((void*)0); static gint CtkCssStyleProperty_private_offset; static void _ctk_css_style_property_class_intern_init (gpointer klass ) { _ctk_css_style_property_parent_class = g_type_class_peek_parent (klass); if (CtkCssStyleProperty_private_offset != 0) g_type_class_adjust_private_offset (klass, &CtkCssStyleProperty_private_offset); _ctk_css_style_property_class_init ((CtkCssStylePropertyClass*) klass); } __attribute__ ((__unused__ )) static inline gpointer _ctk_css_style_property_get_instance_private (CtkCssStyleProperty *self) { return (((gpointer) ((guint8*) (self) + (glong) (CtkCssStyleProperty_private_offset)))); } GType _ctk_css_style_property_get_type (void) { static GType static_g_define_type_id = 0; if ((__extension__ ({ _Static_assert (sizeof *(&static_g_define_type_id ) == sizeof (gpointer), "Expression evaluates to false"); (void ) (0 ? (gpointer) * (&static_g_define_type_id) : ((void*) 0)); (!(__extension__ ({ _Static_assert (sizeof *(&static_g_define_type_id ) == sizeof (gpointer), "Expression evaluates to false"); __typeof__ (*(&static_g_define_type_id)) gapg_temp_newval; __typeof__ ((&static_g_define_type_id)) gapg_temp_atomic = (&static_g_define_type_id ); __atomic_load (gapg_temp_atomic, &gapg_temp_newval, 5) ; gapg_temp_newval; })) && g_once_init_enter_pointer ( &static_g_define_type_id)); })) ) { GType g_define_type_id = _ctk_css_style_property_get_type_once (); (__extension__ ( { _Static_assert (sizeof *(&static_g_define_type_id) == sizeof (gpointer), "Expression evaluates to false"); 0 ? (void) (*( &static_g_define_type_id) = (g_define_type_id)) : (void) 0 ; g_once_init_leave_pointer ((&static_g_define_type_id), ( gpointer) (guintptr) (g_define_type_id)); })) ; } return static_g_define_type_id ; } __attribute__ ((__noinline__)) static GType _ctk_css_style_property_get_type_once (void) { GType g_define_type_id = g_type_register_static_simple ((_ctk_style_property_get_type ()), g_intern_static_string ( "CtkCssStyleProperty"), sizeof (CtkCssStylePropertyClass), (GClassInitFunc )(void (*)(void)) _ctk_css_style_property_class_intern_init, sizeof (CtkCssStyleProperty), (GInstanceInitFunc)(void (*)(void)) _ctk_css_style_property_init , (GTypeFlags) 0); { {{};} } return g_define_type_id; } | |||
| 50 | ||||
| 51 | static CtkCssStylePropertyClass *ctk_css_style_property_class = NULL((void*)0); | |||
| 52 | ||||
| 53 | static void | |||
| 54 | ctk_css_style_property_constructed (GObject *object) | |||
| 55 | { | |||
| 56 | CtkCssStyleProperty *property = CTK_CSS_STYLE_PROPERTY (object)((((CtkCssStyleProperty*) (void *) g_type_check_instance_cast ((GTypeInstance*) (object), ((_ctk_css_style_property_get_type ())))))); | |||
| 57 | CtkCssStylePropertyClass *klass = CTK_CSS_STYLE_PROPERTY_GET_CLASS (property)((((CtkCssStylePropertyClass*) (((GTypeInstance*) ((property) ))->g_class)))); | |||
| 58 | ||||
| 59 | property->id = klass->style_properties->len; | |||
| 60 | g_ptr_array_add (klass->style_properties, property); | |||
| 61 | ||||
| 62 | G_OBJECT_CLASS (_ctk_css_style_property_parent_class)((((GObjectClass*) (void *) g_type_check_class_cast ((GTypeClass *) ((_ctk_css_style_property_parent_class)), (((GType) ((20) << (2))))))))->constructed (object); | |||
| 63 | } | |||
| 64 | ||||
| 65 | static void | |||
| 66 | ctk_css_style_property_set_property (GObject *object, | |||
| 67 | guint prop_id, | |||
| 68 | const GValue *value, | |||
| 69 | GParamSpec *pspec) | |||
| 70 | { | |||
| 71 | CtkCssStyleProperty *property = CTK_CSS_STYLE_PROPERTY (object)((((CtkCssStyleProperty*) (void *) g_type_check_instance_cast ((GTypeInstance*) (object), ((_ctk_css_style_property_get_type ())))))); | |||
| 72 | ||||
| 73 | switch (prop_id) | |||
| 74 | { | |||
| 75 | case PROP_ANIMATED: | |||
| 76 | property->animated = g_value_get_boolean (value); | |||
| 77 | break; | |||
| 78 | case PROP_AFFECTS: | |||
| 79 | property->affects = g_value_get_flags (value); | |||
| 80 | break; | |||
| 81 | case PROP_INHERIT: | |||
| 82 | property->inherit = g_value_get_boolean (value); | |||
| 83 | break; | |||
| 84 | case PROP_INITIAL: | |||
| 85 | property->initial_value = g_value_dup_boxed (value); | |||
| 86 | g_assert (property->initial_value != NULL)do { if (property->initial_value != ((void*)0)) ; else g_assertion_message_expr ("Ctk", "ctkcssstyleproperty.c", 86, ((const char*) (__func__ )), "property->initial_value != NULL"); } while (0); | |||
| 87 | break; | |||
| 88 | default: | |||
| 89 | G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec)do { GObject *_glib__object = (GObject*) ((object)); GParamSpec *_glib__pspec = (GParamSpec*) ((pspec)); guint _glib__property_id = ((prop_id)); g_warning ("%s:%d: invalid %s id %u for \"%s\" of type '%s' in '%s'" , "ctkcssstyleproperty.c", 89, ("property"), _glib__property_id , _glib__pspec->name, g_type_name ((((((GTypeClass*) (((GTypeInstance *) (_glib__pspec))->g_class))->g_type)))), (g_type_name ((((((GTypeClass*) (((GTypeInstance*) (_glib__object))->g_class ))->g_type)))))); } while (0); | |||
| 90 | break; | |||
| 91 | } | |||
| 92 | } | |||
| 93 | ||||
| 94 | static void | |||
| 95 | ctk_css_style_property_get_property (GObject *object, | |||
| 96 | guint prop_id, | |||
| 97 | GValue *value, | |||
| 98 | GParamSpec *pspec) | |||
| 99 | { | |||
| 100 | CtkCssStyleProperty *property = CTK_CSS_STYLE_PROPERTY (object)((((CtkCssStyleProperty*) (void *) g_type_check_instance_cast ((GTypeInstance*) (object), ((_ctk_css_style_property_get_type ())))))); | |||
| 101 | ||||
| 102 | switch (prop_id) | |||
| 103 | { | |||
| 104 | case PROP_ANIMATED: | |||
| 105 | g_value_set_boolean (value, property->animated); | |||
| 106 | break; | |||
| 107 | case PROP_AFFECTS: | |||
| 108 | g_value_set_flags (value, property->affects); | |||
| 109 | break; | |||
| 110 | case PROP_ID: | |||
| 111 | g_value_set_boolean (value, property->id); | |||
| 112 | break; | |||
| 113 | case PROP_INHERIT: | |||
| 114 | g_value_set_boolean (value, property->inherit); | |||
| 115 | break; | |||
| 116 | case PROP_INITIAL: | |||
| 117 | g_value_set_boxed (value, property->initial_value); | |||
| 118 | break; | |||
| 119 | default: | |||
| 120 | G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec)do { GObject *_glib__object = (GObject*) ((object)); GParamSpec *_glib__pspec = (GParamSpec*) ((pspec)); guint _glib__property_id = ((prop_id)); g_warning ("%s:%d: invalid %s id %u for \"%s\" of type '%s' in '%s'" , "ctkcssstyleproperty.c", 120, ("property"), _glib__property_id , _glib__pspec->name, g_type_name ((((((GTypeClass*) (((GTypeInstance *) (_glib__pspec))->g_class))->g_type)))), (g_type_name ((((((GTypeClass*) (((GTypeInstance*) (_glib__object))->g_class ))->g_type)))))); } while (0); | |||
| 121 | break; | |||
| 122 | } | |||
| 123 | } | |||
| 124 | ||||
| 125 | static void | |||
| 126 | _ctk_css_style_property_assign (CtkStyleProperty *property, | |||
| 127 | CtkStyleProperties *props, | |||
| 128 | CtkStateFlags state, | |||
| 129 | const GValue *value) | |||
| 130 | { | |||
| 131 | CtkCssStyleProperty *style; | |||
| 132 | CtkCssValue *css_value; | |||
| 133 | ||||
| 134 | style = CTK_CSS_STYLE_PROPERTY (property)((((CtkCssStyleProperty*) (void *) g_type_check_instance_cast ((GTypeInstance*) (property), ((_ctk_css_style_property_get_type ())))))); | |||
| 135 | css_value = style->assign_value (style, value); | |||
| 136 | ||||
| 137 | _ctk_style_properties_set_property_by_property (props, | |||
| 138 | style, | |||
| 139 | state, | |||
| 140 | css_value); | |||
| 141 | _ctk_css_value_unref (css_value); | |||
| 142 | } | |||
| 143 | ||||
| 144 | static void | |||
| 145 | _ctk_css_style_property_query (CtkStyleProperty *property, | |||
| 146 | GValue *value, | |||
| 147 | CtkStyleQueryFunc query_func, | |||
| 148 | gpointer query_data) | |||
| 149 | { | |||
| 150 | CtkCssStyleProperty *style_property = CTK_CSS_STYLE_PROPERTY (property)((((CtkCssStyleProperty*) (void *) g_type_check_instance_cast ((GTypeInstance*) (property), ((_ctk_css_style_property_get_type ())))))); | |||
| 151 | CtkCssValue *css_value; | |||
| 152 | ||||
| 153 | css_value = (* query_func) (CTK_CSS_STYLE_PROPERTY (property)((((CtkCssStyleProperty*) (void *) g_type_check_instance_cast ((GTypeInstance*) (property), ((_ctk_css_style_property_get_type ()))))))->id, query_data); | |||
| 154 | if (css_value == NULL((void*)0)) | |||
| 155 | css_value =_ctk_css_style_property_get_initial_value (style_property); | |||
| 156 | ||||
| 157 | style_property->query_value (style_property, css_value, value); | |||
| 158 | } | |||
| 159 | ||||
| 160 | static CtkCssValue * | |||
| 161 | ctk_css_style_property_parse_value (CtkStyleProperty *property, | |||
| 162 | CtkCssParser *parser) | |||
| 163 | { | |||
| 164 | CtkCssStyleProperty *style_property = CTK_CSS_STYLE_PROPERTY (property)((((CtkCssStyleProperty*) (void *) g_type_check_instance_cast ((GTypeInstance*) (property), ((_ctk_css_style_property_get_type ())))))); | |||
| 165 | ||||
| 166 | if (_ctk_css_parser_try (parser, "initial", TRUE(!(0)))) | |||
| 167 | { | |||
| 168 | /* the initial value can be explicitly specified with the | |||
| 169 | * ‘initial’ keyword which all properties accept. | |||
| 170 | */ | |||
| 171 | return _ctk_css_initial_value_new (); | |||
| 172 | } | |||
| 173 | else if (_ctk_css_parser_try (parser, "inherit", TRUE(!(0)))) | |||
| 174 | { | |||
| 175 | /* All properties accept the ‘inherit’ value which | |||
| 176 | * explicitly specifies that the value will be determined | |||
| 177 | * by inheritance. The ‘inherit’ value can be used to | |||
| 178 | * strengthen inherited values in the cascade, and it can | |||
| 179 | * also be used on properties that are not normally inherited. | |||
| 180 | */ | |||
| 181 | return _ctk_css_inherit_value_new (); | |||
| 182 | } | |||
| 183 | else if (_ctk_css_parser_try (parser, "unset", TRUE(!(0)))) | |||
| 184 | { | |||
| 185 | /* If the cascaded value of a property is the unset keyword, | |||
| 186 | * then if it is an inherited property, this is treated as | |||
| 187 | * inherit, and if it is not, this is treated as initial. | |||
| 188 | */ | |||
| 189 | return _ctk_css_unset_value_new (); | |||
| 190 | } | |||
| 191 | ||||
| 192 | return (* style_property->parse_value) (style_property, parser); | |||
| 193 | } | |||
| 194 | ||||
| 195 | static void | |||
| 196 | _ctk_css_style_property_class_init (CtkCssStylePropertyClass *klass) | |||
| 197 | { | |||
| 198 | GObjectClass *object_class = G_OBJECT_CLASS (klass)((((GObjectClass*) (void *) g_type_check_class_cast ((GTypeClass *) ((klass)), (((GType) ((20) << (2)))))))); | |||
| 199 | CtkStylePropertyClass *property_class = CTK_STYLE_PROPERTY_CLASS (klass)((((CtkStylePropertyClass*) (void *) g_type_check_class_cast ( (GTypeClass*) (klass), ((_ctk_style_property_get_type ()))))) ); | |||
| 200 | ||||
| 201 | object_class->constructed = ctk_css_style_property_constructed; | |||
| 202 | object_class->set_property = ctk_css_style_property_set_property; | |||
| 203 | object_class->get_property = ctk_css_style_property_get_property; | |||
| 204 | ||||
| 205 | g_object_class_install_property (object_class, | |||
| 206 | PROP_ANIMATED, | |||
| 207 | g_param_spec_boolean ("animated", | |||
| 208 | P_("Animated")g_dgettext("ctk30" "-properties","Animated"), | |||
| 209 | P_("Set if the value can be animated")g_dgettext("ctk30" "-properties","Set if the value can be animated" ), | |||
| 210 | FALSE(0), | |||
| 211 | G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); | |||
| 212 | g_object_class_install_property (object_class, | |||
| 213 | PROP_AFFECTS, | |||
| 214 | g_param_spec_flags ("affects", | |||
| 215 | P_("Affects")g_dgettext("ctk30" "-properties","Affects"), | |||
| 216 | P_("Set if the value affects the sizing of elements")g_dgettext("ctk30" "-properties","Set if the value affects the sizing of elements" ), | |||
| 217 | CTK_TYPE_CSS_AFFECTS(_ctk_css_affects_get_type ()), | |||
| 218 | 0, | |||
| 219 | G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); | |||
| 220 | g_object_class_install_property (object_class, | |||
| 221 | PROP_ID, | |||
| 222 | g_param_spec_uint ("id", | |||
| 223 | P_("ID")g_dgettext("ctk30" "-properties","ID"), | |||
| 224 | P_("The numeric id for quick access")g_dgettext("ctk30" "-properties","The numeric id for quick access" ), | |||
| 225 | 0, G_MAXUINT(2147483647 *2U +1U), 0, | |||
| 226 | G_PARAM_READABLE)); | |||
| 227 | g_object_class_install_property (object_class, | |||
| 228 | PROP_INHERIT, | |||
| 229 | g_param_spec_boolean ("inherit", | |||
| 230 | P_("Inherit")g_dgettext("ctk30" "-properties","Inherit"), | |||
| 231 | P_("Set if the value is inherited by default")g_dgettext("ctk30" "-properties","Set if the value is inherited by default" ), | |||
| 232 | FALSE(0), | |||
| 233 | G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); | |||
| 234 | g_object_class_install_property (object_class, | |||
| 235 | PROP_INITIAL, | |||
| 236 | g_param_spec_boxed ("initial-value", | |||
| 237 | P_("Initial value")g_dgettext("ctk30" "-properties","Initial value"), | |||
| 238 | P_("The initial specified value used for this property")g_dgettext("ctk30" "-properties","The initial specified value used for this property" ), | |||
| 239 | CTK_TYPE_CSS_VALUE(_ctk_css_value_get_type ()), | |||
| 240 | G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); | |||
| 241 | ||||
| 242 | property_class->assign = _ctk_css_style_property_assign; | |||
| 243 | property_class->query = _ctk_css_style_property_query; | |||
| 244 | property_class->parse_value = ctk_css_style_property_parse_value; | |||
| 245 | ||||
| 246 | klass->style_properties = g_ptr_array_new (); | |||
| 247 | ||||
| 248 | ctk_css_style_property_class = klass; | |||
| 249 | } | |||
| 250 | ||||
| 251 | static CtkCssValue * | |||
| 252 | ctk_css_style_property_real_parse_value (CtkCssStyleProperty *property G_GNUC_UNUSED__attribute__ ((__unused__)), | |||
| 253 | CtkCssParser *parser G_GNUC_UNUSED__attribute__ ((__unused__))) | |||
| 254 | { | |||
| 255 | g_assert_not_reached ()do { g_assertion_message_expr ("Ctk", "ctkcssstyleproperty.c" , 255, ((const char*) (__func__)), ((void*)0)); } while (0); | |||
| 256 | return NULL((void*)0); | |||
| 257 | } | |||
| 258 | ||||
| 259 | static void | |||
| 260 | _ctk_css_style_property_init (CtkCssStyleProperty *property) | |||
| 261 | { | |||
| 262 | property->parse_value = ctk_css_style_property_real_parse_value; | |||
| 263 | } | |||
| 264 | ||||
| 265 | /** | |||
| 266 | * _ctk_css_style_property_get_n_properties: | |||
| 267 | * | |||
| 268 | * Gets the number of style properties. This number can increase when new | |||
| 269 | * theme engines are loaded. Shorthand properties are not included here. | |||
| 270 | * | |||
| 271 | * Returns: The number of style properties. | |||
| 272 | **/ | |||
| 273 | guint | |||
| 274 | _ctk_css_style_property_get_n_properties (void) | |||
| 275 | { | |||
| 276 | if (G_UNLIKELY (ctk_css_style_property_class == NULL)(ctk_css_style_property_class == ((void*)0))) | |||
| 277 | { | |||
| 278 | _ctk_style_property_init_properties (); | |||
| 279 | g_assert (ctk_css_style_property_class)do { if (ctk_css_style_property_class) ; else g_assertion_message_expr ("Ctk", "ctkcssstyleproperty.c", 279, ((const char*) (__func__ )), "ctk_css_style_property_class"); } while (0); | |||
| 280 | } | |||
| 281 | ||||
| 282 | return ctk_css_style_property_class->style_properties->len; | |||
| 283 | } | |||
| 284 | ||||
| 285 | /** | |||
| 286 | * _ctk_css_style_property_lookup_by_id: | |||
| 287 | * @id: the id of the property | |||
| 288 | * | |||
| 289 | * Gets the style property with the given id. All style properties (but not | |||
| 290 | * shorthand properties) are indexable by id so that it’s easy to use arrays | |||
| 291 | * when doing style lookups. | |||
| 292 | * | |||
| 293 | * Returns: (transfer none): The style property with the given id | |||
| 294 | **/ | |||
| 295 | CtkCssStyleProperty * | |||
| 296 | _ctk_css_style_property_lookup_by_id (guint id) | |||
| 297 | { | |||
| 298 | ||||
| 299 | if (G_UNLIKELY (ctk_css_style_property_class == NULL)(ctk_css_style_property_class == ((void*)0))) | |||
| 300 | { | |||
| 301 | _ctk_style_property_init_properties (); | |||
| 302 | g_assert (ctk_css_style_property_class)do { if (ctk_css_style_property_class) ; else g_assertion_message_expr ("Ctk", "ctkcssstyleproperty.c", 302, ((const char*) (__func__ )), "ctk_css_style_property_class"); } while (0); | |||
| 303 | } | |||
| 304 | ||||
| 305 | ctk_internal_return_val_if_fail (id < ctk_css_style_property_class->style_properties->len, NULL)do { if ((id < ctk_css_style_property_class->style_properties ->len)) { } else { g_return_if_fail_warning ("Ctk", ((const char*) (__func__)), "id < ctk_css_style_property_class->style_properties->len" ); return (((void*)0)); } } while (0); | |||
| 306 | ||||
| 307 | return g_ptr_array_index (ctk_css_style_property_class->style_properties, id)((ctk_css_style_property_class->style_properties)->pdata )[id]; | |||
| 308 | } | |||
| 309 | ||||
| 310 | /** | |||
| 311 | * _ctk_css_style_property_is_inherit: | |||
| 312 | * @property: the property | |||
| 313 | * | |||
| 314 | * Queries if the given @property is inherited. See the | |||
| 315 | * [CSS Documentation](http://www.w3.org/TR/css3-cascade/#inheritance) | |||
| 316 | * for an explanation of this concept. | |||
| 317 | * | |||
| 318 | * Returns: %TRUE if the property is inherited by default. | |||
| 319 | **/ | |||
| 320 | gboolean | |||
| 321 | _ctk_css_style_property_is_inherit (CtkCssStyleProperty *property) | |||
| 322 | { | |||
| 323 | ctk_internal_return_val_if_fail (CTK_IS_CSS_STYLE_PROPERTY (property), FALSE)do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) (property); GType __t = ((_ctk_css_style_property_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst-> g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; })))))) { } else { g_return_if_fail_warning ("Ctk", ((const char*) (__func__)), "(((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (property); GType __t = ((_ctk_css_style_property_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; }))))" ); return ((0)); } } while (0); | |||
| 324 | ||||
| 325 | return property->inherit; | |||
| 326 | } | |||
| 327 | ||||
| 328 | /** | |||
| 329 | * _ctk_css_style_property_is_animated: | |||
| 330 | * @property: the property | |||
| 331 | * | |||
| 332 | * Queries if the given @property can be is animated. See the | |||
| 333 | * [CSS Documentation](http://www.w3.org/TR/css3-transitions/#animatable-css) | |||
| 334 | * for animatable properties. | |||
| 335 | * | |||
| 336 | * Returns: %TRUE if the property can be animated. | |||
| 337 | **/ | |||
| 338 | gboolean | |||
| 339 | _ctk_css_style_property_is_animated (CtkCssStyleProperty *property) | |||
| 340 | { | |||
| 341 | ctk_internal_return_val_if_fail (CTK_IS_CSS_STYLE_PROPERTY (property), FALSE)do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) (property); GType __t = ((_ctk_css_style_property_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst-> g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; })))))) { } else { g_return_if_fail_warning ("Ctk", ((const char*) (__func__)), "(((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (property); GType __t = ((_ctk_css_style_property_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; }))))" ); return ((0)); } } while (0); | |||
| 342 | ||||
| 343 | return property->animated; | |||
| 344 | } | |||
| 345 | ||||
| 346 | /** | |||
| 347 | * _ctk_css_style_property_get_affects: | |||
| 348 | * @property: the property | |||
| 349 | * | |||
| 350 | * Returns all the things this property affects. See @CtkCssAffects for what | |||
| 351 | * the flags mean. | |||
| 352 | * | |||
| 353 | * Returns: The things this property affects. | |||
| 354 | **/ | |||
| 355 | CtkCssAffects | |||
| 356 | _ctk_css_style_property_get_affects (CtkCssStyleProperty *property) | |||
| 357 | { | |||
| 358 | ctk_internal_return_val_if_fail (CTK_IS_CSS_STYLE_PROPERTY (property), 0)do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) (property); GType __t = ((_ctk_css_style_property_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst-> g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; })))))) { } else { g_return_if_fail_warning ("Ctk", ((const char*) (__func__)), "(((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (property); GType __t = ((_ctk_css_style_property_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; }))))" ); return (0); } } while (0); | |||
| 359 | ||||
| 360 | return property->affects; | |||
| 361 | } | |||
| 362 | ||||
| 363 | /** | |||
| 364 | * _ctk_css_style_property_get_id: | |||
| 365 | * @property: the property | |||
| 366 | * | |||
| 367 | * Gets the id for the given property. IDs are used to allow using arrays | |||
| 368 | * for style lookups. | |||
| 369 | * | |||
| 370 | * Returns: The id of the property | |||
| 371 | **/ | |||
| 372 | guint | |||
| 373 | _ctk_css_style_property_get_id (CtkCssStyleProperty *property) | |||
| 374 | { | |||
| 375 | ctk_internal_return_val_if_fail (CTK_IS_CSS_STYLE_PROPERTY (property), 0)do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) (property); GType __t = ((_ctk_css_style_property_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst-> g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; })))))) { } else { g_return_if_fail_warning ("Ctk", ((const char*) (__func__)), "(((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (property); GType __t = ((_ctk_css_style_property_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; }))))" ); return (0); } } while (0); | |||
| 376 | ||||
| 377 | return property->id; | |||
| 378 | } | |||
| 379 | ||||
| 380 | /** | |||
| 381 | * _ctk_css_style_property_get_initial_value: | |||
| 382 | * @property: the property | |||
| 383 | * | |||
| 384 | * Queries the initial value of the given @property. See the | |||
| 385 | * [CSS Documentation](http://www.w3.org/TR/css3-cascade/#intial) | |||
| 386 | * for an explanation of this concept. | |||
| 387 | * | |||
| 388 | * Returns: (transfer none): the initial value. The value will never change. | |||
| 389 | **/ | |||
| 390 | CtkCssValue * | |||
| 391 | _ctk_css_style_property_get_initial_value (CtkCssStyleProperty *property) | |||
| 392 | { | |||
| 393 | ctk_internal_return_val_if_fail (CTK_IS_CSS_STYLE_PROPERTY (property), NULL)do { if (((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) (property); GType __t = ((_ctk_css_style_property_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst-> g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; })))))) { } else { g_return_if_fail_warning ("Ctk", ((const char*) (__func__)), "(((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (property); GType __t = ((_ctk_css_style_property_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; }))))" ); return (((void*)0)); } } while (0); | |||
| 394 | ||||
| 395 | return property->initial_value; | |||
| 396 | } | |||
| 397 | ||||
| 398 | /** | |||
| 399 | * _ctk_css_style_property_get_mask_affecting: | |||
| 400 | * @flags: the flags that are affected | |||
| 401 | * | |||
| 402 | * Computes a bitmask for all properties that have at least one of @flags | |||
| 403 | * set. | |||
| 404 | * | |||
| 405 | * Returns: (transfer full): A #CtkBitmask with the bit set for every | |||
| 406 | * property that has at least one of @flags set. | |||
| 407 | */ | |||
| 408 | CtkBitmask * | |||
| 409 | _ctk_css_style_property_get_mask_affecting (CtkCssAffects affects) | |||
| 410 | { | |||
| 411 | CtkBitmask *result; | |||
| 412 | guint i; | |||
| 413 | ||||
| 414 | result = _ctk_bitmask_new (); | |||
| 415 | ||||
| 416 | for (i = 0; i < _ctk_css_style_property_get_n_properties (); i++) | |||
| ||||
| 417 | { | |||
| 418 | CtkCssStyleProperty *prop = _ctk_css_style_property_lookup_by_id (i); | |||
| 419 | ||||
| 420 | if (_ctk_css_style_property_get_affects (prop) & affects) | |||
| 421 | result = _ctk_bitmask_set (result, i, TRUE(!(0))); | |||
| ||||
| 422 | } | |||
| 423 | ||||
| 424 | return result; | |||
| 425 | } | |||
| 426 |