1 /* Fo
2 * fo-property-border-color.c: 'border-color' property
3 *
4 * Copyright (C) 2001 Sun Microsystems
5 * Copyright (C) 2007 Menteith Consulting Ltd
6 *
7 * See COPYING for the status of this software.
8 */
9
10 #include <string.h>
11 #include "fo-utils.h"
12 #include "fo-context.h"
13 #include "datatype/fo-datatype.h"
14 #include "property/fo-property-private.h"
15 #include "property/fo-property-font-size.h"
16 #include "property/fo-property-border-color.h"
17 #include "property/fo-property-util.h"
18
19 /* border-color */
20 /* Inherited: FALSE */
21 /* Shorthand: TRUE */
22 /* [ <color> | transparent ]{1,4} | inherit */
23 /* Initial value: see individual properties */
24
25 struct _FoPropertyBorderColor
26 {
27 FoProperty parent_instance;
28 };
29
30 struct _FoPropertyBorderColorClass
31 {
32 FoPropertyClass parent_class;
33 };
34
35 static void fo_property_border_color_init (FoPropertyBorderColor *property_border_color);
36 static void fo_property_border_color_class_init (FoPropertyBorderColorClass *klass);
37 static void fo_property_border_color_finalize (GObject *object);
38
39 static FoDatatype * fo_property_border_color_validate (FoDatatype *datatype,
40 FoContext *context,
41 GError **error);
42
43 static const gchar class_name[] = "border-color";
44 static gpointer parent_class;
45
46 /**
47 * fo_property_border_color_get_type:
48 *
49 * Register the #FoPropertyBorderColor type if not already registered and
50 * return its #GType value.
51 *
52 * Return value: #GType of #FoPropertyBorderColor.
53 **/
54 GType
fo_property_border_color_get_type(void)55 fo_property_border_color_get_type (void)
56 {
57 static GType object_type = 0;
58
59 if (!object_type)
60 {
61 static const GTypeInfo object_info =
62 {
63 sizeof (FoPropertyBorderColorClass),
64 NULL, /* base_init */
65 NULL, /* base_finalize */
66 (GClassInitFunc) fo_property_border_color_class_init,
67 NULL, /* class_finalize */
68 NULL, /* class_data */
69 sizeof (FoPropertyBorderColor),
70 0, /* n_preallocs */
71 (GInstanceInitFunc) fo_property_border_color_init,
72 NULL /* value_table */
73 };
74
75 object_type = g_type_register_static (FO_TYPE_PROPERTY,
76 class_name,
77 &object_info, 0);
78 }
79
80 return object_type;
81 }
82
83 /**
84 * fo_property_border_color_init:
85 * @border_color: #FoPropertyBorderColor object to initialise.
86 *
87 * Implements #GInstanceInitFunc for #FoPropertyBorderColor.
88 **/
89 void
fo_property_border_color_init(FoPropertyBorderColor * border_color)90 fo_property_border_color_init (FoPropertyBorderColor *border_color)
91 {
92 FO_PROPERTY (border_color)->value =
93 NULL;
94 }
95
96 /**
97 * fo_property_border_color_class_init:
98 * @klass: #FoPropertyBorderColorClass object to initialise.
99 *
100 * Implements #GClassInitFunc for #FoPropertyBorderColorClass.
101 **/
102 void
fo_property_border_color_class_init(FoPropertyBorderColorClass * klass)103 fo_property_border_color_class_init (FoPropertyBorderColorClass *klass)
104 {
105 GObjectClass *object_class = G_OBJECT_CLASS (klass);
106 FoPropertyClass *property_class = FO_PROPERTY_CLASS (klass);
107
108 parent_class = g_type_class_peek_parent (klass);
109
110 object_class->finalize = fo_property_border_color_finalize;
111
112 property_class->expr_eval = fo_expr_border_color_eval;
113 property_class->is_inherited = FALSE;
114 property_class->is_shorthand = TRUE;
115 property_class->resolve_enum =
116 fo_property_util_resolve_color_transparent_enum;
117 property_class->validate =
118 fo_property_border_color_validate;
119 property_class->get_initial =
120 fo_property_border_color_get_initial;
121 }
122
123 /**
124 * fo_property_border_color_finalize:
125 * @object: #FoPropertyBorderColor object to finalize.
126 *
127 * Implements #GObjectFinalizeFunc for #FoPropertyBorderColor.
128 **/
129 void
fo_property_border_color_finalize(GObject * object)130 fo_property_border_color_finalize (GObject *object)
131 {
132 FoPropertyBorderColor *border_color;
133
134 border_color = FO_PROPERTY_BORDER_COLOR (object);
135
136 G_OBJECT_CLASS (parent_class)->finalize (object);
137 }
138
139
140 /**
141 * fo_property_border_color_new:
142 *
143 * Creates a new #FoPropertyBorderColor initialized to default value.
144 *
145 * Return value: the new #FoPropertyBorderColor.
146 **/
147 FoProperty*
fo_property_border_color_new(void)148 fo_property_border_color_new (void)
149 {
150 FoProperty* border_color;
151
152 border_color =
153 FO_PROPERTY (g_object_new (fo_property_border_color_get_type (),
154 NULL));
155
156 return border_color;
157 }
158
159 /**
160 * fo_property_border_color_validate:
161 * @datatype: #FoDatatype to be validated against allowed datatypes and
162 * values for current property.
163 * @context: #FoContext object from which to possibly inherit values.
164 * @error: Information about any error that has occurred.
165 *
166 * Validates @datatype against allowed values. Returns @datatype, a
167 * replacement datatype value, or NULL if validation failed.
168 *
169 * Return value: Valid datatype value or NULL.
170 **/
171 FoDatatype*
fo_property_border_color_validate(FoDatatype * datatype,FoContext * context,GError ** error)172 fo_property_border_color_validate (FoDatatype *datatype,
173 FoContext *context,
174 GError **error)
175 {
176 g_return_val_if_fail (datatype != NULL, NULL);
177 g_return_val_if_fail (FO_IS_DATATYPE (datatype), NULL);
178 g_return_val_if_fail (context != NULL, NULL);
179 g_return_val_if_fail (FO_IS_CONTEXT (context), NULL);
180 g_return_val_if_fail (error == NULL || *error == NULL, NULL);
181
182 if (FO_IS_TBLR (datatype))
183 {
184 return datatype;
185 }
186 else
187 {
188 gchar *datatype_sprintf = fo_object_sprintf (datatype);
189
190 g_set_error (error,
191 FO_FO_ERROR,
192 FO_FO_ERROR_DATATYPE,
193 _(fo_fo_error_messages[FO_FO_ERROR_DATATYPE]),
194 class_name,
195 datatype_sprintf,
196 g_type_name (G_TYPE_FROM_INSTANCE (datatype)));
197
198 g_object_unref (datatype);
199
200 g_free (datatype_sprintf);
201
202 return NULL;
203 }
204 }
205
206 /**
207 * fo_property_border_color_get_initial:
208 *
209 * Get an instance of the property with the correct initial value.
210 *
211 * Return value: An instance of the property.
212 **/
213 FoProperty*
fo_property_border_color_get_initial(void)214 fo_property_border_color_get_initial (void)
215 {
216 static FoProperty *border_color = NULL;
217
218 if (border_color == NULL)
219 {
220 border_color =
221 fo_property_border_color_new ();
222 }
223
224 return border_color;
225 }
226