gtk-css-engine r209 - in trunk: . src
- From: robsta svn gnome org
- To: svn-commits-list gnome org
- Subject: gtk-css-engine r209 - in trunk: . src
- Date: Wed, 17 Dec 2008 16:25:02 +0000 (UTC)
Author: robsta
Date: Wed Dec 17 16:25:01 2008
New Revision: 209
URL: http://svn.gnome.org/viewvc/gtk-css-engine?rev=209&view=rev
Log:
* src/gce-rc-style.c (create_style), (parse_href),
(parse_selector), (parse), (merge), (finalize), (instance_init):
* src/gce-style.c (rectangle), (gap), (line), (draw_hline),
(draw_vline), (draw_shadow), (draw_box), (draw_flat_box),
(draw_check), (draw_option), (draw_shadow_gap), (draw_box_gap),
(draw_extension), (draw_slider), (draw_handle), (draw_resize_grip),
(draw_focus), (draw_expander), (draw_diamond), (draw_arrow),
(draw_tab), (finalize), (instance_init):
* src/gce-style.h:
Support drawing with NULL widget pointer.
Modified:
trunk/ChangeLog
trunk/src/gce-rc-style.c
trunk/src/gce-style.c
trunk/src/gce-style.h
Modified: trunk/src/gce-rc-style.c
==============================================================================
--- trunk/src/gce-rc-style.c (original)
+++ trunk/src/gce-rc-style.c Wed Dec 17 16:25:01 2008
@@ -27,6 +27,7 @@
struct _GceRcStyle {
GtkRcStyle parent;
ccss_stylesheet_t *stylesheet;
+ char *selector;
};
struct _GceRcStyleClass {
@@ -53,9 +54,91 @@
rc_style ? (void *) rc_style->stylesheet : NULL);
}
+ style->selector = g_strdup (rc_style->selector);
+
return GTK_STYLE (style);
}
+/* FIXME: do more robust parsing. */
+static void
+parse_href (GtkRcStyle *rc_style,
+ GtkSettings *settings,
+ GScanner *scanner)
+{
+ ccss_grammar_t *grammar;
+ ccss_stylesheet_t *stylesheet;
+ char *gce_file;
+ guint token;
+
+ token = g_scanner_get_next_token (scanner);
+ g_assert (token == '=');
+
+ token = g_scanner_get_next_token (scanner);
+ g_assert (token == G_TOKEN_STRING);
+
+ /* TODO use default settings here, or the ones passed to GtkRcStyle::parse */
+ gce_file = gtk_rc_find_pixmap_in_path (gtk_settings_get_default (),
+ scanner, scanner->value.v_string);
+
+ grammar = ccss_gtk_grammar_create ();
+ ccss_grammar_add_functions (grammar, gce_functions_get_vtable ());
+ stylesheet = ccss_grammar_create_stylesheet_from_file (grammar,
+ gce_file, NULL);
+ if (stylesheet) {
+ ccss_grammar_destroy (grammar), grammar = NULL;
+ } else {
+ g_critical ("Could not create stylesheet `%s'", gce_file);
+ }
+ g_free (gce_file), gce_file = NULL;
+ /* ccss_stylesheet_dump (_stylesheet); */
+
+ /* User-agent stylesheet */
+ stylesheet = ccss_stylesheet_add_from_file (stylesheet, GCE_UA_STYLESHEET,
+ CCSS_STYLESHEET_USER_AGENT,
+ NULL);
+ if (stylesheet) {
+
+ GceRcStyle *gce_rc_style;
+
+ gce_rc_style = GCE_RC_STYLE (rc_style);
+ if (gce_rc_style) {
+ gce_rc_style->stylesheet = ccss_stylesheet_reference (stylesheet);
+ }
+
+ if (g_getenv ("GCE_PREVIEW") != NULL) {
+ char *rc_string;
+ rc_string = ccss_gtk_stylesheet_to_gtkrc (stylesheet);
+ if (rc_string) {
+ gtk_rc_parse_string (rc_string);
+ g_free (rc_string), rc_string = NULL;
+ }
+ }
+
+ ccss_stylesheet_destroy (stylesheet), stylesheet = NULL;
+ } else {
+ g_critical ("Could not add user-agent stylesheet `%s'",
+ GCE_UA_STYLESHEET);
+ }
+}
+
+/* FIXME: do more robust parsing. */
+static void
+parse_selector (GtkRcStyle *rc_style,
+ GtkSettings *settings,
+ GScanner *scanner)
+{
+ guint token;
+
+ token = g_scanner_get_next_token (scanner);
+ g_assert (token == '=');
+
+ token = g_scanner_get_next_token (scanner);
+ g_assert (token == G_TOKEN_STRING);
+
+ GCE_RC_STYLE (rc_style)->selector = g_strdup (scanner->value.v_string);
+}
+
+/* FIXME: do more robust parsing. */
static guint
parse (GtkRcStyle *rc_style,
GtkSettings *settings,
@@ -63,10 +146,6 @@
{
static GQuark scope_id = 0;
- ccss_grammar_t *grammar;
- ccss_stylesheet_t *stylesheet;
-
- char *gce_file;
guint old_scope;
guint token;
@@ -79,53 +158,18 @@
if (token != G_TOKEN_RIGHT_CURLY) {
token = g_scanner_get_next_token (scanner);
- g_assert (token == G_TOKEN_IDENTIFIER &&
- 0 == strcmp ("href", scanner->value.v_identifier));
+ if (G_TOKEN_IDENTIFIER == token &&
+ 0 == g_strcmp0 ("href", scanner->value.v_identifier)) {
- token = g_scanner_get_next_token (scanner);
- g_assert (token == '=');
+ parse_href (rc_style, settings, scanner);
- token = g_scanner_get_next_token (scanner);
- g_assert (token == G_TOKEN_STRING);
+ } else if (G_TOKEN_IDENTIFIER == token &&
+ 0 == g_strcmp0 ("selector", scanner->value.v_identifier)) {
- gce_file = gtk_rc_find_pixmap_in_path (gtk_settings_get_default (),
- scanner, scanner->value.v_string);
+ parse_selector (rc_style, settings, scanner);
- grammar = ccss_gtk_grammar_create ();
- ccss_grammar_add_functions (grammar, gce_functions_get_vtable ());
- stylesheet = ccss_grammar_create_stylesheet_from_file (grammar,
- gce_file, NULL);
- if (stylesheet) {
- ccss_grammar_destroy (grammar), grammar = NULL;
} else {
- g_critical ("Could not create stylesheet `%s'", gce_file);
- }
- g_free (gce_file), gce_file = NULL;
- /* ccss_stylesheet_dump (_stylesheet); */
-
- /* User-agent stylesheet */
- stylesheet = ccss_stylesheet_add_from_file (stylesheet, GCE_UA_STYLESHEET,
- CCSS_STYLESHEET_USER_AGENT,
- NULL);
- if (stylesheet) {
- GceRcStyle *gce_rc_style;
- gce_rc_style = GCE_RC_STYLE (rc_style);
- if (gce_rc_style) {
- gce_rc_style->stylesheet = ccss_stylesheet_reference (stylesheet);
- }
- ccss_stylesheet_destroy (stylesheet), stylesheet = NULL;
- } else {
- g_critical ("Could not add user-agent stylesheet `%s'",
- GCE_UA_STYLESHEET);
- }
-
- if (g_getenv ("GCE_PREVIEW") != NULL) {
- char *rc_string;
- rc_string = ccss_gtk_stylesheet_to_gtkrc (stylesheet);
- if (rc_string) {
- gtk_rc_parse_string (rc_string);
- g_free (rc_string), rc_string = NULL;
- }
+ g_warning ("unknown token `%d'", token);
}
}
@@ -151,9 +195,9 @@
if (from->stylesheet != NULL &&
to->stylesheet == NULL) {
to->stylesheet = ccss_stylesheet_reference (from->stylesheet);
- } else if (from->stylesheet == NULL) {
- g_warning ("no stylesheet");
}
+
+ to->selector = g_strdup (from->selector);
}
gce_rc_style_parent_class->merge (dest, src);
@@ -171,6 +215,11 @@
self->stylesheet = NULL;
}
+ if (self->selector) {
+ g_free (self->selector);
+ self->selector = NULL;
+ }
+
G_OBJECT_CLASS (gce_rc_style_parent_class)->finalize (instance);
}
@@ -178,6 +227,7 @@
instance_init (GceRcStyle *self)
{
self->stylesheet = NULL;
+ self->selector = NULL;
}
static void
Modified: trunk/src/gce-style.c
==============================================================================
--- trunk/src/gce-style.c (original)
+++ trunk/src/gce-style.c Wed Dec 17 16:25:01 2008
@@ -38,12 +38,17 @@
gint height,
gboolean fill)
{
- ccss_style_t *style;
- cairo_t *cr;
+ cairo_t *cr;
+ ccss_style_t *style = NULL;
g_return_if_fail (self);
- style = ccss_stylesheet_query (self->stylesheet, (ccss_node_t const *) node);
+ if (node) {
+ style = ccss_stylesheet_query (self->stylesheet, (ccss_node_t const *) node);
+ } else if (self->selector) {
+ style = ccss_stylesheet_query_type (self->stylesheet, self->selector);
+ }
+
if (style) {
cr = gdk_cairo_create (window);
@@ -67,8 +72,8 @@
}
cairo_destroy (cr), cr = NULL;
+ ccss_style_destroy (style), style = NULL;
}
- ccss_style_destroy (style), style = NULL;
}
static void
@@ -85,12 +90,17 @@
gint gap_start,
gint gap_width)
{
- ccss_style_t *style;
- cairo_t *cr;
+ cairo_t *cr;
+ ccss_style_t *style = NULL;
g_return_if_fail (self);
- style = ccss_stylesheet_query (self->stylesheet, (ccss_node_t const *) node);
+ if (node) {
+ style = ccss_stylesheet_query (self->stylesheet, (ccss_node_t const *) node);
+ } else if (self->selector) {
+ style = ccss_stylesheet_query_type (self->stylesheet, self->selector);
+ }
+
if (style) {
cr = gdk_cairo_create (window);
@@ -112,8 +122,8 @@
gap_side, gap_start, gap_width);
cairo_destroy (cr), cr = NULL;
+ ccss_style_destroy (style), style = NULL;
}
- ccss_style_destroy (style), style = NULL;
}
static void
@@ -127,12 +137,17 @@
gint y1,
gint y2)
{
- ccss_style_t *style;
- cairo_t *cr;
+ cairo_t *cr;
+ ccss_style_t *style = NULL;
g_return_if_fail (self);
- style = ccss_stylesheet_query (self->stylesheet, (ccss_node_t const *) node);
+ if (node) {
+ style = ccss_stylesheet_query (self->stylesheet, (ccss_node_t const *) node);
+ } else if (self->selector) {
+ style = ccss_stylesheet_query_type (self->stylesheet, self->selector);
+ }
+
if (style) {
cr = gdk_cairo_create (window);
@@ -144,8 +159,8 @@
ccss_cairo_style_draw_line (style, cr, x1, x2, y1, y2);
cairo_destroy (cr), cr = NULL;
+ ccss_style_destroy (style), style = NULL;
}
- ccss_style_destroy (style), style = NULL;
}
static void
@@ -159,13 +174,14 @@
gint x2,
gint y)
{
- GceNode *node;
char const *role;
+ GceNode *node = NULL;
role = gce_maps_match_role (widget, "hline", -1, detail, x1, y, x2 - x1, -1);
detail = gce_maps_get_detail (detail);
- node = gce_node_cache_fetch_node (widget,
+ if (widget)
+ node = gce_node_cache_fetch_node (widget,
detail,
gce_maps_get_state (state),
NULL, NULL, NULL, NULL, NULL,
@@ -187,13 +203,14 @@
gint y2,
gint x)
{
- GceNode *node;
char const *role;
+ GceNode *node = NULL;
role = gce_maps_match_role (widget, "vline", -1, detail, x, y1, -1, y2 - y1);
detail = gce_maps_get_detail (detail);
- node = gce_node_cache_fetch_node (widget,
+ if (widget)
+ node = gce_node_cache_fetch_node (widget,
detail,
gce_maps_get_state (state),
NULL, NULL, NULL, NULL, NULL,
@@ -218,13 +235,14 @@
gint width,
gint height)
{
- GceNode *node;
char const *role;
+ GceNode *node = NULL;
role = gce_maps_match_role (widget, "shadow", shadow, detail, x, y, width, height);
detail = gce_maps_get_detail (detail);
- node = gce_node_cache_fetch_node (widget,
+ if (widget)
+ node = gce_node_cache_fetch_node (widget,
detail,
gce_maps_get_state (state),
gce_maps_get_shadow (shadow),
@@ -250,13 +268,14 @@
gint width,
gint height)
{
- GceNode *node;
char const *role;
+ GceNode *node = NULL;
role = gce_maps_match_role (widget, "box", shadow, detail, x, y, width, height);
detail = gce_maps_get_detail (detail);
- node = gce_node_cache_fetch_node (widget,
+ if (widget)
+ node = gce_node_cache_fetch_node (widget,
detail,
gce_maps_get_state (state),
gce_maps_get_shadow (shadow),
@@ -282,13 +301,14 @@
gint width,
gint height)
{
- GceNode *node;
char const *role;
+ GceNode *node = NULL;
role = gce_maps_match_role (widget, "flat-box", shadow, detail, x, y, width, height);
detail = gce_maps_get_detail (detail);
- node = gce_node_cache_fetch_node (widget,
+ if (widget)
+ node = gce_node_cache_fetch_node (widget,
detail,
gce_maps_get_state (state),
gce_maps_get_shadow (shadow),
@@ -314,13 +334,14 @@
gint width,
gint height)
{
- GceNode *node;
char const *role;
+ GceNode *node = NULL;
role = gce_maps_match_role (widget, "check", shadow, detail, x, y, width, height);
detail = gce_maps_get_detail (detail);
- node = gce_node_cache_fetch_node (widget,
+ if (widget)
+ node = gce_node_cache_fetch_node (widget,
detail,
gce_maps_get_state (state),
gce_maps_get_shadow (shadow),
@@ -346,13 +367,14 @@
gint width,
gint height)
{
- GceNode *node;
char const *role;
+ GceNode *node = NULL;
role = gce_maps_match_role (widget, "option", shadow, detail, x, y, width, height);
detail = gce_maps_get_detail (detail);
- node = gce_node_cache_fetch_node (widget,
+ if (widget)
+ node = gce_node_cache_fetch_node (widget,
detail,
gce_maps_get_state (state),
gce_maps_get_shadow (shadow),
@@ -381,13 +403,14 @@
gint gap_start,
gint gap_width)
{
- GceNode *node;
char const *role;
+ GceNode *node = NULL;
role = gce_maps_match_role (widget, "shadow-gap", shadow, detail, x, y, width, height);
detail = gce_maps_get_detail (detail);
- node = gce_node_cache_fetch_node (widget,
+ if (widget)
+ node = gce_node_cache_fetch_node (widget,
detail,
gce_maps_get_state (state),
gce_maps_get_shadow (shadow),
@@ -416,13 +439,14 @@
gint gap_start,
gint gap_width)
{
- GceNode *node;
char const *role;
+ GceNode *node = NULL;
role = gce_maps_match_role (widget, "box-gap", shadow, detail, x, y, width, height);
detail = gce_maps_get_detail (detail);
- node = gce_node_cache_fetch_node (widget,
+ if (widget)
+ node = gce_node_cache_fetch_node (widget,
detail,
gce_maps_get_state (state),
gce_maps_get_shadow (shadow),
@@ -449,14 +473,15 @@
gint height,
GtkPositionType gap_side)
{
- GceNode *node;
char const *role;
gint gap_width;
+ GceNode *node = NULL;
role = gce_maps_match_role (widget, "extension", shadow, detail, x, y, width, height);
detail = gce_maps_get_detail (detail);
- node = gce_node_cache_fetch_node (widget,
+ if (widget)
+ node = gce_node_cache_fetch_node (widget,
detail,
gce_maps_get_state (state),
gce_maps_get_shadow (shadow),
@@ -494,13 +519,14 @@
gint height,
GtkOrientation orientation)
{
- GceNode *node;
char const *role;
+ GceNode *node = NULL;
role = gce_maps_match_role (widget, "slider", shadow, detail, x, y, width, height);
detail = gce_maps_get_detail (detail);
- node = gce_node_cache_fetch_node (widget,
+ if (widget)
+ node = gce_node_cache_fetch_node (widget,
detail,
gce_maps_get_state (state),
gce_maps_get_shadow (shadow),
@@ -528,13 +554,14 @@
gint height,
GtkOrientation orientation)
{
- GceNode *node;
char const *role;
+ GceNode *node = NULL;
role = gce_maps_match_role (widget, "handle", shadow, detail, x, y, width, height);
detail = gce_maps_get_detail (detail);
- node = gce_node_cache_fetch_node (widget,
+ if (widget)
+ node = gce_node_cache_fetch_node (widget,
detail,
gce_maps_get_state (state),
gce_maps_get_shadow (shadow),
@@ -561,13 +588,14 @@
gint width,
gint height)
{
- GceNode *node;
char const *role;
+ GceNode *node = NULL;
role = gce_maps_match_role (widget, "resize-grip", -1, detail, x, y, width, height);
detail = gce_maps_get_detail (detail);
- node = gce_node_cache_fetch_node (widget,
+ if (widget)
+ node = gce_node_cache_fetch_node (widget,
detail,
gce_maps_get_state (state),
NULL, NULL, NULL, gce_maps_get_window_edge (edge), NULL,
@@ -591,13 +619,14 @@
gint width,
gint height)
{
- GceNode *node;
char const *role;
+ GceNode *node = NULL;
role = gce_maps_match_role (widget, "focus", -1, detail, x, y, width, height);
detail = gce_maps_get_detail (detail);
- node = gce_node_cache_fetch_node (widget,
+ if (widget)
+ node = gce_node_cache_fetch_node (widget,
detail,
gce_maps_get_state (state),
NULL, NULL, NULL, NULL, NULL,
@@ -621,9 +650,9 @@
GtkExpanderStyle style)
{
#define DEFAULT_EXPANDER_SIZE 12
- GceNode *node;
char const *role;
gint expander_size;
+ GceNode *node = NULL;
role = gce_maps_match_role (widget, "expander", -1, detail, x, y, -1, -1);
detail = gce_maps_get_detail (detail);
@@ -638,7 +667,8 @@
expander_size = DEFAULT_EXPANDER_SIZE;
}
- node = gce_node_cache_fetch_node (widget,
+ if (widget)
+ node = gce_node_cache_fetch_node (widget,
detail,
gce_maps_get_state (state),
NULL, NULL, NULL, NULL, gce_maps_get_expander_style (style),
@@ -664,13 +694,14 @@
gint width,
gint height)
{
- GceNode *node;
char const *role;
+ GceNode *node = NULL;
role = gce_maps_match_role (widget, "diamond", shadow, detail, x, y, width, height);
detail = gce_maps_get_detail (detail);
- node = gce_node_cache_fetch_node (widget,
+ if (widget)
+ node = gce_node_cache_fetch_node (widget,
detail,
gce_maps_get_state (state),
gce_maps_get_shadow (shadow),
@@ -701,13 +732,14 @@
gint width,
gint height)
{
- GceNode *node;
char const *role;
+ GceNode *node = NULL;
role = gce_maps_match_role (widget, "arrow", shadow, detail, x, y, width, height);
detail = gce_maps_get_detail (detail);
- node = gce_node_cache_fetch_node (widget,
+ if (widget)
+ node = gce_node_cache_fetch_node (widget,
detail,
gce_maps_get_state (state),
gce_maps_get_shadow (shadow),
@@ -734,13 +766,14 @@
gint width,
gint height)
{
- GceNode *node;
char const *role;
+ GceNode *node = NULL;
role = gce_maps_match_role (widget, "tab", shadow, detail, x, y, width, height);
detail = gce_maps_get_detail (detail);
- node = gce_node_cache_fetch_node (widget,
+ if (widget)
+ node = gce_node_cache_fetch_node (widget,
detail,
gce_maps_get_state (state),
gce_maps_get_shadow (shadow),
@@ -765,6 +798,11 @@
self->stylesheet = NULL;
}
+ if (self->selector) {
+ g_free (self->selector);
+ self->selector = NULL;
+ }
+
G_OBJECT_CLASS (gce_style_parent_class)->finalize (instance);
}
@@ -772,6 +810,7 @@
instance_init (GceStyle *self)
{
self->stylesheet = NULL;
+ self->selector = NULL;
}
static void
Modified: trunk/src/gce-style.h
==============================================================================
--- trunk/src/gce-style.h (original)
+++ trunk/src/gce-style.h Wed Dec 17 16:25:01 2008
@@ -39,6 +39,7 @@
struct GceStyle_ {
GtkStyle parent;
ccss_stylesheet_t *stylesheet;
+ char *selector;
};
struct GceStyleClass_ {
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]