Home | History | Annotate | Download | only in ui
      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 
     13 namespace aura {
     14 class Window;
     15 }
     16 
     17 namespace ui {
     18 class Layer;
     19 }
     20 
     21 namespace views {
     22 class View;
     23 }
     24 
     25 namespace chromeos {
     26 
     27 // FocusRingLayer draws a focus ring for a given view.
     28 class 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