| File: | ctk/ctkcssstylechange.c |
| Warning: | line 35, column 19 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 | /* CTK - The GIMP Toolkit |
| 2 | * Copyright (C) 2015 Benjamin Otte <otte@gnome.org> |
| 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 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 | |
| 18 | #include "config.h" |
| 19 | |
| 20 | #include "ctkcssstylechangeprivate.h" |
| 21 | |
| 22 | #include "ctkcssstylepropertyprivate.h" |
| 23 | |
| 24 | void |
| 25 | ctk_css_style_change_init (CtkCssStyleChange *change, |
| 26 | CtkCssStyle *old_style, |
| 27 | CtkCssStyle *new_style) |
| 28 | { |
| 29 | change->old_style = g_object_ref (old_style)((__typeof__ (old_style)) (g_object_ref) (old_style)); |
| 30 | change->new_style = g_object_ref (new_style)((__typeof__ (new_style)) (g_object_ref) (new_style)); |
| 31 | |
| 32 | change->n_compared = 0; |
| 33 | |
| 34 | change->affects = 0; |
| 35 | change->changes = _ctk_bitmask_new (); |
Using a fixed address is not portable because that address will probably not be valid in all environments or platforms | |
| 36 | |
| 37 | /* Make sure we don't do extra work if old and new are equal. */ |
| 38 | if (old_style == new_style) |
| 39 | change->n_compared = CTK_CSS_PROPERTY_N_PROPERTIES; |
| 40 | } |
| 41 | |
| 42 | void |
| 43 | ctk_css_style_change_finish (CtkCssStyleChange *change) |
| 44 | { |
| 45 | g_object_unref (change->old_style); |
| 46 | g_object_unref (change->new_style); |
| 47 | _ctk_bitmask_free (change->changes); |
| 48 | } |
| 49 | |
| 50 | CtkCssStyle * |
| 51 | ctk_css_style_change_get_old_style (CtkCssStyleChange *change) |
| 52 | { |
| 53 | return change->old_style; |
| 54 | } |
| 55 | |
| 56 | CtkCssStyle * |
| 57 | ctk_css_style_change_get_new_style (CtkCssStyleChange *change) |
| 58 | { |
| 59 | return change->new_style; |
| 60 | } |
| 61 | |
| 62 | static gboolean |
| 63 | ctk_css_style_compare_next_value (CtkCssStyleChange *change) |
| 64 | { |
| 65 | if (change->n_compared == CTK_CSS_PROPERTY_N_PROPERTIES) |
| 66 | return FALSE(0); |
| 67 | |
| 68 | if (!_ctk_css_value_equal (ctk_css_style_get_value (change->old_style, change->n_compared), |
| 69 | ctk_css_style_get_value (change->new_style, change->n_compared))) |
| 70 | { |
| 71 | change->affects |= _ctk_css_style_property_get_affects (_ctk_css_style_property_lookup_by_id (change->n_compared)); |
| 72 | change->changes = _ctk_bitmask_set (change->changes, change->n_compared, TRUE(!(0))); |
| 73 | } |
| 74 | |
| 75 | change->n_compared++; |
| 76 | |
| 77 | return TRUE(!(0)); |
| 78 | } |
| 79 | |
| 80 | gboolean |
| 81 | ctk_css_style_change_has_change (CtkCssStyleChange *change) |
| 82 | { |
| 83 | do { |
| 84 | if (!_ctk_bitmask_is_empty (change->changes)) |
| 85 | return TRUE(!(0)); |
| 86 | } while (ctk_css_style_compare_next_value (change)); |
| 87 | |
| 88 | return FALSE(0); |
| 89 | } |
| 90 | |
| 91 | gboolean |
| 92 | ctk_css_style_change_affects (CtkCssStyleChange *change, |
| 93 | CtkCssAffects affects) |
| 94 | { |
| 95 | do { |
| 96 | if (change->affects & affects) |
| 97 | return TRUE(!(0)); |
| 98 | } while (ctk_css_style_compare_next_value (change)); |
| 99 | |
| 100 | return FALSE(0); |
| 101 | } |
| 102 | |
| 103 | gboolean |
| 104 | ctk_css_style_change_changes_property (CtkCssStyleChange *change, |
| 105 | guint id) |
| 106 | { |
| 107 | while (change->n_compared <= id) |
| 108 | ctk_css_style_compare_next_value (change); |
| 109 | |
| 110 | return _ctk_bitmask_get (change->changes, id); |
| 111 | } |
| 112 | |
| 113 | void |
| 114 | ctk_css_style_change_print (CtkCssStyleChange *change, |
| 115 | GString *string) |
| 116 | { |
| 117 | int i; |
| 118 | CtkCssStyle *old = ctk_css_style_change_get_old_style (change); |
| 119 | CtkCssStyle *new = ctk_css_style_change_get_new_style (change); |
| 120 | |
| 121 | for (i = 0; i < CTK_CSS_PROPERTY_N_PROPERTIES; i ++) |
| 122 | { |
| 123 | if (ctk_css_style_change_changes_property (change, i)) |
| 124 | { |
| 125 | CtkCssStyleProperty *prop; |
| 126 | CtkCssValue *value; |
| 127 | const char *name; |
| 128 | |
| 129 | prop = _ctk_css_style_property_lookup_by_id (i); |
| 130 | name = _ctk_style_property_get_name (CTK_STYLE_PROPERTY (prop)((((CtkStyleProperty*) (void *) g_type_check_instance_cast (( GTypeInstance*) (prop), ((_ctk_style_property_get_type ())))) ))); |
| 131 | |
| 132 | value = ctk_css_style_get_value (old, i); |
| 133 | _ctk_css_value_print (value, string); |
| 134 | |
| 135 | g_string_append_printf (string, "%s: ", name); |
| 136 | _ctk_css_value_print (value, string); |
| 137 | g_string_append (string, "\n")(__builtin_constant_p ("\n") ? __extension__ ({ const char * const __val = ("\n"); g_string_append_len_inline (string, __val, ( __val != ((void*)0)) ? (gssize) strlen (((__val) + !(__val))) : (gssize) -1); }) : g_string_append_len_inline (string, "\n" , (gssize) -1)); |
| 138 | |
| 139 | g_string_append_printf (string, "%s: ", name); |
| 140 | value = ctk_css_style_get_value (new, i); |
| 141 | _ctk_css_value_print (value, string); |
| 142 | g_string_append (string, "\n")(__builtin_constant_p ("\n") ? __extension__ ({ const char * const __val = ("\n"); g_string_append_len_inline (string, __val, ( __val != ((void*)0)) ? (gssize) strlen (((__val) + !(__val))) : (gssize) -1); }) : g_string_append_len_inline (string, "\n" , (gssize) -1)); |
| 143 | } |
| 144 | } |
| 145 | |
| 146 | } |
| 147 | |
| 148 | char * |
| 149 | ctk_css_style_change_to_string (CtkCssStyleChange *change) |
| 150 | { |
| 151 | GString *string = g_string_new (""); |
| 152 | |
| 153 | ctk_css_style_change_print (change, string); |
| 154 | |
| 155 | return g_string_free (string, FALSE)(__builtin_constant_p ((0)) ? (((0)) ? (g_string_free) ((string ), ((0))) : g_string_free_and_steal (string)) : (g_string_free ) ((string), ((0)))); |
| 156 | } |