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. 4 5#ifndef CHROME_BROWSER_CHROMEOS_UI_FOCUS_RING_LAYER_H_ 6#define CHROME_BROWSER_CHROMEOS_UI_FOCUS_RING_LAYER_H_ 7 8#include "base/basictypes.h" 9#include "base/memory/scoped_ptr.h" 10#include "ui/compositor/layer_delegate.h" 11#include "ui/gfx/rect.h" 12 13namespace aura { 14class Window; 15} 16 17namespace ui { 18class Layer; 19} 20 21namespace views { 22class View; 23} 24 25namespace chromeos { 26 27// FocusRingLayer draws a focus ring for a given view. 28class FocusRingLayer : public ui::LayerDelegate { 29 public: 30 FocusRingLayer(); 31 virtual ~FocusRingLayer(); 32 33 // Create the layer and update its bounds and position in the hierarchy. 34 void Update(); 35 36 // Updates the focus ring layer for the view or clears it if |view| is NULL. 37 void SetForView(views::View* view); 38 39 private: 40 // ui::LayerDelegate overrides: 41 virtual void OnPaintLayer(gfx::Canvas* canvas) OVERRIDE; 42 virtual void OnDeviceScaleFactorChanged(float device_scale_factor) OVERRIDE; 43 virtual base::Closure PrepareForLayerBoundsChange() OVERRIDE; 44 45 // The window containing focus. 46 aura::Window* window_; 47 48 // The current root window containing the focused object. 49 aura::Window* root_window_; 50 51 // The bounding rectangle of the focused object, in |window_| coordinates. 52 gfx::Rect focus_ring_; 53 54 // The current layer. 55 scoped_ptr<ui::Layer> layer_; 56 57 DISALLOW_COPY_AND_ASSIGN(FocusRingLayer); 58}; 59 60} // namespace chromeos 61 62#endif // CHROME_BROWSER_CHROMEOS_UI_FOCUS_RING_LAYER_H_ 63