1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef CHROME_BROWSER_CHROMEOS_UI_FOCUS_RING_LAYER_H_
6 #define CHROME_BROWSER_CHROMEOS_UI_FOCUS_RING_LAYER_H_
8 #include "base/basictypes.h"
9 #include "base/memory/scoped_ptr.h"
10 #include "ui/compositor/layer_delegate.h"
11 #include "ui/gfx/geometry/rect.h"
23 // A delegate interface implemented by the object that owns a FocusRingLayer.
24 class FocusRingLayerDelegate
{
26 virtual void OnDeviceScaleFactorChanged() = 0;
29 virtual ~FocusRingLayerDelegate();
32 // FocusRingLayer draws a focus ring at a given global rectangle.
33 class FocusRingLayer
: public ui::LayerDelegate
{
35 explicit FocusRingLayer(FocusRingLayerDelegate
* delegate
);
36 ~FocusRingLayer() override
;
38 // Move the focus ring layer to the given bounds in the coordinates of
39 // the given root window.
40 void Set(aura::Window
* root_window
, const gfx::Rect
& bounds
);
42 ui::Layer
* layer() { return layer_
.get(); }
43 aura::Window
* root_window() { return root_window_
; }
46 // Updates |root_window_| and creates |layer_| if it doesn't exist,
47 // or if the root window has changed. Moves the layer to the top if
48 // it wasn't there already.
49 void CreateOrUpdateLayer(aura::Window
* root_window
, const char* layer_name
);
52 // ui::LayerDelegate overrides:
53 void OnPaintLayer(const ui::PaintContext
& context
) override
;
54 void OnDelegatedFrameDamage(const gfx::Rect
& damage_rect_in_dip
) override
;
55 void OnDeviceScaleFactorChanged(float device_scale_factor
) override
;
56 base::Closure
PrepareForLayerBoundsChange() override
;
58 // The object that owns this layer.
59 FocusRingLayerDelegate
* delegate_
;
61 // The current root window containing the focused object.
62 aura::Window
* root_window_
;
65 scoped_ptr
<ui::Layer
> layer_
;
67 // The bounding rectangle of the focused object, in |root_window_|
69 gfx::Rect focus_ring_
;
71 DISALLOW_COPY_AND_ASSIGN(FocusRingLayer
);
74 } // namespace chromeos
76 #endif // CHROME_BROWSER_CHROMEOS_UI_FOCUS_RING_LAYER_H_