win32-theme: Make syntax for mixing theme parts more regular
This lets us extend the argument list better
This commit is contained in:
@ -97,15 +97,15 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.radio:inconsistent {
|
.radio:inconsistent {
|
||||||
background-image: -gtk-win32-theme-part(button, 2 1, mix 2 5);
|
background-image: -gtk-win32-theme-part(button, 2 1, over (2 5, 0.3));
|
||||||
}
|
}
|
||||||
|
|
||||||
.radio:inconsistent:insensitive {
|
.radio:inconsistent:insensitive {
|
||||||
background-image: -gtk-win32-theme-part(button, 2 4, mix 2 8);
|
background-image: -gtk-win32-theme-part(button, 2 4, over (2 8, 0.3));
|
||||||
}
|
}
|
||||||
|
|
||||||
.radio:inconsistent:prelight {
|
.radio:inconsistent:prelight {
|
||||||
background-image: -gtk-win32-theme-part(button, 2 4 , mix 2 6);
|
background-image: -gtk-win32-theme-part(button, 2 4, over(2 6, 0.3));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Scrollbars */
|
/* Scrollbars */
|
||||||
@ -194,29 +194,29 @@
|
|||||||
|
|
||||||
.scrollbar.trough {
|
.scrollbar.trough {
|
||||||
border-width: 0;
|
border-width: 0;
|
||||||
background-image: -gtk-win32-theme-part(scrollbar, 2 1, 4 1);
|
background-image: -gtk-win32-theme-part(scrollbar, 2 1, over (4 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
.scrollbar.trough.vertical {
|
.scrollbar.trough.vertical {
|
||||||
border-width: 0;
|
border-width: 0;
|
||||||
background-image: -gtk-win32-theme-part(scrollbar, 2 1, 6 1);
|
background-image: -gtk-win32-theme-part(scrollbar, 2 1, over (6 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
.scrollbar.slider {
|
.scrollbar.slider {
|
||||||
border-width: 0;
|
border-width: 0;
|
||||||
background-image: -gtk-win32-theme-part(scrollbar, 2 1, 8 1);
|
background-image: -gtk-win32-theme-part(scrollbar, 2 1, over (8 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
.scrollbar.slider:prelight {
|
.scrollbar.slider:prelight {
|
||||||
background-image: -gtk-win32-theme-part(scrollbar, 2 2, 8 2);
|
background-image: -gtk-win32-theme-part(scrollbar, 2 2, over (8 2));
|
||||||
}
|
}
|
||||||
|
|
||||||
.scrollbar.slider.vertical {
|
.scrollbar.slider.vertical {
|
||||||
background-image: -gtk-win32-theme-part(scrollbar, 3 1, 9 1);
|
background-image: -gtk-win32-theme-part(scrollbar, 3 1, over (9 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
.scrollbar.slider.vertical:prelight {
|
.scrollbar.slider.vertical:prelight {
|
||||||
background-image: -gtk-win32-theme-part(scrollbar, 3 2, 9 2);
|
background-image: -gtk-win32-theme-part(scrollbar, 3 2, over (9 2));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Entry */
|
/* Entry */
|
||||||
|
|||||||
@ -192,18 +192,14 @@ G_DEFINE_BOXED_TYPE_WITH_CODE (GtkWin32ThemePart, _gtk_win32_theme_part,
|
|||||||
_gtk_win32_theme_part_ref, _gtk_win32_theme_part_unref,
|
_gtk_win32_theme_part_ref, _gtk_win32_theme_part_unref,
|
||||||
_gtk_win32_theme_init() )
|
_gtk_win32_theme_init() )
|
||||||
|
|
||||||
typedef enum {
|
|
||||||
RENDER_OVER,
|
|
||||||
RENDER_MIX
|
|
||||||
} ThemePartRenderOps;
|
|
||||||
|
|
||||||
struct _GtkWin32ThemePart {
|
struct _GtkWin32ThemePart {
|
||||||
HTHEME theme;
|
HTHEME theme;
|
||||||
int part;
|
int part;
|
||||||
int state;
|
int state;
|
||||||
|
|
||||||
|
double over_alpha;
|
||||||
int part2;
|
int part2;
|
||||||
int state2;
|
int state2;
|
||||||
ThemePartRenderOps op;
|
|
||||||
|
|
||||||
gint ref_count;
|
gint ref_count;
|
||||||
};
|
};
|
||||||
@ -212,7 +208,7 @@ GtkWin32ThemePart *
|
|||||||
_gtk_win32_theme_part_new (const char *class,
|
_gtk_win32_theme_part_new (const char *class,
|
||||||
int xp_part, int state,
|
int xp_part, int state,
|
||||||
int xp_part2, int state2,
|
int xp_part2, int state2,
|
||||||
ThemePartRenderOps op)
|
double over_alpha)
|
||||||
{
|
{
|
||||||
GtkWin32ThemePart *part;
|
GtkWin32ThemePart *part;
|
||||||
|
|
||||||
@ -224,7 +220,7 @@ _gtk_win32_theme_part_new (const char *class,
|
|||||||
part->state = state;
|
part->state = state;
|
||||||
part->part2 = xp_part2;
|
part->part2 = xp_part2;
|
||||||
part->state2 = state2;
|
part->state2 = state2;
|
||||||
part->op = op;
|
part->over_alpha = over_alpha;
|
||||||
|
|
||||||
return part;
|
return part;
|
||||||
}
|
}
|
||||||
@ -259,7 +255,7 @@ _gtk_win32_theme_part_parse (GtkCssParser *parser,
|
|||||||
{
|
{
|
||||||
char *class;
|
char *class;
|
||||||
int xp_part, state, xp_part2, state2;
|
int xp_part, state, xp_part2, state2;
|
||||||
ThemePartRenderOps op;
|
double over_alpha;
|
||||||
GtkWin32ThemePart *theme_part;
|
GtkWin32ThemePart *theme_part;
|
||||||
|
|
||||||
if (!_gtk_css_parser_try (parser, "-gtk-win32-theme-part", TRUE))
|
if (!_gtk_css_parser_try (parser, "-gtk-win32-theme-part", TRUE))
|
||||||
@ -306,19 +302,22 @@ _gtk_win32_theme_part_parse (GtkCssParser *parser,
|
|||||||
_gtk_css_parser_error (parser, "Expected a valid integer value");
|
_gtk_css_parser_error (parser, "Expected a valid integer value");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
op = RENDER_OVER;
|
|
||||||
|
|
||||||
|
over_alpha = 1.0;
|
||||||
xp_part2 = -1;
|
xp_part2 = -1;
|
||||||
state2 = -1;
|
state2 = -1;
|
||||||
|
|
||||||
if ( _gtk_css_parser_try (parser, ",", TRUE))
|
if ( _gtk_css_parser_try (parser, ",", TRUE))
|
||||||
{
|
{
|
||||||
|
|
||||||
if ( _gtk_css_parser_try (parser, "over", TRUE))
|
if ( _gtk_css_parser_try (parser, "over", TRUE))
|
||||||
{
|
{
|
||||||
op = RENDER_OVER;
|
if (!_gtk_css_parser_try (parser, "(", TRUE))
|
||||||
}
|
|
||||||
else if ( _gtk_css_parser_try (parser, "mix", TRUE))
|
|
||||||
{
|
{
|
||||||
op = RENDER_MIX;
|
_gtk_css_parser_error (parser,
|
||||||
|
"Expected '(' after 'over'");
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!_gtk_css_parser_try_int (parser, &xp_part2))
|
if (!_gtk_css_parser_try_int (parser, &xp_part2))
|
||||||
@ -334,6 +333,24 @@ _gtk_win32_theme_part_parse (GtkCssParser *parser,
|
|||||||
_gtk_css_parser_error (parser, "Expected a valid integer value");
|
_gtk_css_parser_error (parser, "Expected a valid integer value");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( _gtk_css_parser_try (parser, ",", TRUE))
|
||||||
|
{
|
||||||
|
if (!_gtk_css_parser_try_double (parser, &over_alpha))
|
||||||
|
{
|
||||||
|
g_free (class);
|
||||||
|
_gtk_css_parser_error (parser, "Expected a valid double value");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!_gtk_css_parser_try (parser, ")", TRUE))
|
||||||
|
{
|
||||||
|
_gtk_css_parser_error (parser,
|
||||||
|
"Expected ')' at end of 'over'");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -348,7 +365,7 @@ _gtk_win32_theme_part_parse (GtkCssParser *parser,
|
|||||||
theme_part = _gtk_win32_theme_part_new (class,
|
theme_part = _gtk_win32_theme_part_new (class,
|
||||||
xp_part, state,
|
xp_part, state,
|
||||||
xp_part2, state2,
|
xp_part2, state2,
|
||||||
op);
|
over_alpha);
|
||||||
g_free (class);
|
g_free (class);
|
||||||
|
|
||||||
g_value_take_boxed (value, theme_part);
|
g_value_take_boxed (value, theme_part);
|
||||||
@ -403,30 +420,15 @@ _gtk_win32_theme_part_render (GtkWin32ThemePart *part,
|
|||||||
width, height);
|
width, height);
|
||||||
|
|
||||||
|
|
||||||
if (part->op == RENDER_MIX)
|
|
||||||
{
|
|
||||||
cr = cairo_create (surface);
|
cr = cairo_create (surface);
|
||||||
|
|
||||||
pattern = cairo_pattern_create_for_surface (surface2);
|
pattern = cairo_pattern_create_for_surface (surface2);
|
||||||
cairo_set_source (cr, pattern);
|
cairo_set_source (cr, pattern);
|
||||||
cairo_set_operator (cr, CAIRO_OPERATOR_OVER);
|
cairo_set_operator (cr, CAIRO_OPERATOR_OVER);
|
||||||
cairo_paint_with_alpha (cr, 0.5);
|
cairo_paint_with_alpha (cr, part->over_alpha);
|
||||||
|
|
||||||
cairo_destroy (cr);
|
cairo_destroy (cr);
|
||||||
cairo_pattern_destroy (pattern);
|
cairo_pattern_destroy (pattern);
|
||||||
}
|
|
||||||
else /* OVER */
|
|
||||||
{
|
|
||||||
cr = cairo_create (surface);
|
|
||||||
|
|
||||||
pattern = cairo_pattern_create_for_surface (surface2);
|
|
||||||
cairo_set_source (cr, pattern);
|
|
||||||
cairo_set_operator (cr, CAIRO_OPERATOR_OVER);
|
|
||||||
cairo_paint (cr);
|
|
||||||
|
|
||||||
cairo_destroy (cr);
|
|
||||||
cairo_pattern_destroy (pattern);
|
|
||||||
}
|
|
||||||
|
|
||||||
cairo_surface_destroy (surface2);
|
cairo_surface_destroy (surface2);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user