33 * SPDX-License-Identifier: GPL-3.0-or-later
44 */
55
6- public class Gala.WindowSwitcherIcon : CanvasActor {
6+ public class Gala.WindowSwitcherIcon : Clutter . Actor {
77 private const int WRAPPER_BORDER_RADIUS = 3 ;
88
99 public Meta . Window window { get ; construct; }
1010
1111 private WindowIcon icon;
12+ private RoundedCornersEffect rounded_corners_effect;
1213
13- private bool _selected = false ;
1414 public bool selected {
15- get {
16- return _selected;
17- }
1815 set {
19- _selected = value ;
20- content. invalidate ();
16+ if (value ) {
17+ var accent_color = Drawing . StyleManager . get_instance (). theme_accent_color;
18+ background_color = {
19+ (uint8 ) (accent_color. red * uint8 . MAX ),
20+ (uint8 ) (accent_color. green * uint8 . MAX ),
21+ (uint8 ) (accent_color. blue * uint8 . MAX ),
22+ (uint8 ) (accent_color. alpha * uint8 . MAX )
23+ };
24+ } else {
25+ #if HAS_MUTTER47
26+ background_color = Cogl . Color . from_4f (0 , 0 , 0 , 0 );
27+ #else
28+ background_color = Clutter . Color . alloc ();
29+ #endif
30+ }
31+
32+ get_accessible (). notify_state_change (Atk . StateType . SELECTED , value );
33+ get_accessible (). notify_state_change (Atk . StateType . FOCUSED , value );
34+
35+ queue_redraw ();
2136 }
2237 }
2338
24- private float _scale_factor = 1.0f ;
2539 public float scale_factor {
26- get {
27- return _scale_factor;
28- }
2940 set {
30- _scale_factor = value ;
41+ var indicator_size = Utils . scale_to_int (
42+ (WindowSwitcher . ICON_SIZE + WindowSwitcher . WRAPPER_PADDING * 2 ),
43+ value
44+ );
45+ set_size (indicator_size, indicator_size);
3146
32- update_size () ;
47+ rounded_corners_effect . monitor_scale = value ;
3348 }
3449 }
3550
@@ -40,48 +55,14 @@ public class Gala.WindowSwitcherIcon : CanvasActor {
4055 icon. add_constraint (new Clutter .AlignConstraint (this , Clutter . AlignAxis . BOTH , 0.5f ));
4156 add_child (icon);
4257
58+ rounded_corners_effect = new RoundedCornersEffect (WRAPPER_BORDER_RADIUS , scale_factor);
59+ add_effect (rounded_corners_effect);
60+
4361 get_accessible (). accessible_name = window. title;
4462 get_accessible (). accessible_role = LIST_ITEM ;
4563 get_accessible (). notify_state_change (Atk . StateType . FOCUSABLE , true );
4664
4765 reactive = true ;
48-
4966 this . scale_factor = scale_factor;
5067 }
51-
52- private void update_size () {
53- var indicator_size = Utils . scale_to_int (
54- (WindowSwitcher . ICON_SIZE + WindowSwitcher . WRAPPER_PADDING * 2 ),
55- scale_factor
56- );
57- set_size (indicator_size, indicator_size);
58- }
59-
60- protected override void draw (Cairo .Context ctx , int width , int height ) {
61- ctx. save ();
62- ctx. set_operator (Cairo . Operator . CLEAR );
63- ctx. paint ();
64- ctx. clip ();
65- ctx. reset_clip ();
66-
67- if (selected) {
68- // draw rect
69- var rgba = Drawing . StyleManager . get_instance (). theme_accent_color;
70- ctx. set_source_rgba (
71- rgba. red,
72- rgba. green,
73- rgba. blue,
74- rgba. alpha
75- );
76- var rect_radius = Utils . scale_to_int (WRAPPER_BORDER_RADIUS , scale_factor);
77- Drawing . Utilities . cairo_rounded_rectangle (ctx, 0 , 0 , width, height, rect_radius);
78- ctx. set_operator (Cairo . Operator . SOURCE );
79- ctx. fill ();
80-
81- ctx. restore ();
82- }
83-
84- get_accessible (). notify_state_change (Atk . StateType . SELECTED , selected);
85- get_accessible (). notify_state_change (Atk . StateType . FOCUSED , selected);
86- }
8768}
0 commit comments