Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
Dorota Czaplejewicz
gtk
Commits
4c60de47
Commit
4c60de47
authored
Mar 05, 2010
by
Carlos Garnacho
Browse files
GtkStyleSet: Add style property registration funcs.
Also some properties have been added as a default set.
parent
2b425d89
Changes
2
Hide whitespace changes
Inline
Side-by-side
gtk/gtkstyleset.c
View file @
4c60de47
...
...
@@ -19,6 +19,8 @@
#include "config.h"
#include <stdlib.h>
#include "gtkstyleprovider.h"
#include "gtkstyleset.h"
#include "gtkprivate.h"
...
...
@@ -28,6 +30,14 @@
typedef
struct
GtkStyleSetPrivate
GtkStyleSetPrivate
;
typedef
struct
PropertyData
PropertyData
;
typedef
struct
PropertyNode
PropertyNode
;
struct
PropertyNode
{
GQuark
property_quark
;
GType
property_type
;
GValue
default_value
;
};
struct
PropertyData
{
...
...
@@ -39,6 +49,8 @@ struct GtkStyleSetPrivate
GHashTable
*
properties
;
};
static
GArray
*
properties
=
NULL
;
#define GTK_STYLE_SET_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GTK_TYPE_STYLE_SET, GtkStyleSetPrivate))
static
void
gtk_style_set_provider_init
(
GtkStyleProviderIface
*
iface
);
...
...
@@ -53,9 +65,17 @@ static void
gtk_style_set_class_init
(
GtkStyleSetClass
*
klass
)
{
GObjectClass
*
object_class
=
G_OBJECT_CLASS
(
klass
);
GdkColor
black
=
{
0
,
0
,
0
,
0
};
GdkColor
white
=
{
0
,
65535
,
65535
,
65535
};
object_class
->
finalize
=
gtk_style_set_finalize
;
/* Initialize default property set */
gtk_style_set_register_property_color
(
"foreground-color"
,
&
white
);
gtk_style_set_register_property_color
(
"background-color"
,
&
black
);
gtk_style_set_register_property_color
(
"text-color"
,
&
white
);
gtk_style_set_register_property_color
(
"base-color"
,
&
white
);
g_type_class_add_private
(
object_class
,
sizeof
(
GtkStyleSetPrivate
));
}
...
...
@@ -120,6 +140,144 @@ gtk_style_set_provider_init (GtkStyleProviderIface *iface)
iface
->
get_style
=
gtk_style_set_get_style
;
}
static
int
compare_property
(
gconstpointer
p1
,
gconstpointer
p2
)
{
PropertyNode
*
key
=
(
PropertyNode
*
)
p1
;
PropertyNode
*
node
=
(
PropertyNode
*
)
p2
;
return
(
int
)
key
->
property_quark
-
node
->
property_quark
;
}
static
PropertyNode
*
property_node_lookup
(
GQuark
quark
)
{
PropertyNode
key
=
{
0
};
if
(
!
quark
)
return
NULL
;
if
(
!
properties
)
return
NULL
;
key
.
property_quark
=
quark
;
return
bsearch
(
&
key
,
properties
->
data
,
properties
->
len
,
sizeof
(
PropertyNode
),
compare_property
);
}
/* Property registration functions */
void
gtk_style_set_register_property
(
const
gchar
*
property_name
,
GType
type
,
GValue
*
default_value
)
{
PropertyNode
*
node
,
new
=
{
0
};
GQuark
quark
;
gint
i
;
g_return_if_fail
(
property_name
!=
NULL
);
g_return_if_fail
(
default_value
!=
NULL
);
g_return_if_fail
(
type
==
G_VALUE_TYPE
(
default_value
));
if
(
G_UNLIKELY
(
!
properties
))
properties
=
g_array_new
(
FALSE
,
TRUE
,
sizeof
(
PropertyNode
));
quark
=
g_quark_try_string
(
property_name
);
if
((
node
=
property_node_lookup
(
quark
))
!=
NULL
)
{
g_warning
(
"Property
\"
%s
\"
was already registered with type %s"
,
property_name
,
g_type_name
(
node
->
property_type
));
return
;
}
quark
=
g_quark_from_string
(
property_name
);
new
.
property_quark
=
quark
;
new
.
property_type
=
type
;
g_value_init
(
&
new
.
default_value
,
type
);
g_value_copy
(
default_value
,
&
new
.
default_value
);
for
(
i
=
0
;
i
<
properties
->
len
;
i
++
)
{
node
=
&
g_array_index
(
properties
,
PropertyNode
,
i
);
if
(
node
->
property_quark
>
quark
)
break
;
}
g_array_insert_val
(
properties
,
i
,
new
);
}
void
gtk_style_set_register_property_color
(
const
gchar
*
property_name
,
GdkColor
*
initial_value
)
{
GValue
value
=
{
0
};
g_return_if_fail
(
property_name
!=
NULL
);
g_return_if_fail
(
initial_value
!=
NULL
);
g_value_init
(
&
value
,
GDK_TYPE_COLOR
);
g_value_set_boxed
(
&
value
,
initial_value
);
gtk_style_set_register_property
(
property_name
,
GDK_TYPE_COLOR
,
&
value
);
g_value_unset
(
&
value
);
}
void
gtk_style_set_register_property_int
(
const
gchar
*
property_name
,
gint
initial_value
)
{
GValue
value
=
{
0
};
g_return_if_fail
(
property_name
!=
NULL
);
g_value_init
(
&
value
,
G_TYPE_INT
);
g_value_set_int
(
&
value
,
initial_value
);
gtk_style_set_register_property
(
property_name
,
G_TYPE_INT
,
&
value
);
g_value_unset
(
&
value
);
}
void
gtk_style_set_register_property_uint
(
const
gchar
*
property_name
,
guint
initial_value
)
{
GValue
value
=
{
0
};
g_return_if_fail
(
property_name
!=
NULL
);
g_value_init
(
&
value
,
G_TYPE_UINT
);
g_value_set_uint
(
&
value
,
initial_value
);
gtk_style_set_register_property
(
property_name
,
G_TYPE_UINT
,
&
value
);
g_value_unset
(
&
value
);
}
void
gtk_style_set_register_property_double
(
const
gchar
*
property_name
,
gdouble
initial_value
)
{
GValue
value
=
{
0
};
g_return_if_fail
(
property_name
!=
NULL
);
g_value_init
(
&
value
,
G_TYPE_DOUBLE
);
g_value_set_double
(
&
value
,
initial_value
);
gtk_style_set_register_property
(
property_name
,
G_TYPE_DOUBLE
,
&
value
);
g_value_unset
(
&
value
);
}
/* GtkStyleSet methods */
GtkStyleSet
*
gtk_style_set_new
(
void
)
...
...
gtk/gtkstyleset.h
View file @
4c60de47
...
...
@@ -21,6 +21,7 @@
#define __GTK_STYLE_SET_H__
#include <glib-object.h>
#include <gdk/gdk.h>
#include "gtkenums.h"
G_BEGIN_DECLS
...
...
@@ -47,6 +48,21 @@ struct GtkStyleSetClass
GType
gtk_style_set_get_type
(
void
)
G_GNUC_CONST
;
/* Functions to register style properties */
void
gtk_style_set_register_property
(
const
gchar
*
property_name
,
GType
type
,
GValue
*
default_value
);
void
gtk_style_set_register_property_color
(
const
gchar
*
property_name
,
GdkColor
*
default_value
);
void
gtk_style_set_register_property_int
(
const
gchar
*
property_name
,
gint
default_value
);
void
gtk_style_set_register_property_uint
(
const
gchar
*
property_name
,
guint
default_value
);
void
gtk_style_set_register_property_double
(
const
gchar
*
property_name
,
gdouble
default_value
);
GtkStyleSet
*
gtk_style_set_new
(
void
);
void
gtk_style_set_set_property
(
GtkStyleSet
*
set
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment