1 // Copyright (c) 2012 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 UI_VIEWS_CONTROLS_BUTTON_LABEL_BUTTON_BORDER_H_ 6 #define UI_VIEWS_CONTROLS_BUTTON_LABEL_BUTTON_BORDER_H_ 7 8 #include "base/basictypes.h" 9 #include "base/compiler_specific.h" 10 #include "base/memory/scoped_ptr.h" 11 #include "ui/gfx/insets.h" 12 #include "ui/views/border.h" 13 #include "ui/views/controls/button/button.h" 14 #include "ui/views/painter.h" 15 16 namespace views { 17 18 // A Border that paints a LabelButton's background frame. 19 class VIEWS_EXPORT LabelButtonBorder : public Border { 20 public: 21 explicit LabelButtonBorder(Button::ButtonStyle style); 22 virtual ~LabelButtonBorder(); 23 style()24 Button::ButtonStyle style() const { return style_; } 25 26 // Overridden from Border: 27 virtual void Paint(const View& view, gfx::Canvas* canvas) OVERRIDE; 28 virtual gfx::Insets GetInsets() const OVERRIDE; 29 virtual gfx::Size GetMinimumSize() const OVERRIDE; 30 set_insets(const gfx::Insets & insets)31 void set_insets(const gfx::Insets& insets) { insets_ = insets; } 32 33 // Get or set the painter used for the specified |focused| button |state|. 34 // LabelButtonBorder takes and retains ownership of |painter|. 35 Painter* GetPainter(bool focused, Button::ButtonState state); 36 void SetPainter(bool focused, Button::ButtonState state, Painter* painter); 37 38 private: 39 // The painters used for each unfocused or focused button state. 40 scoped_ptr<Painter> painters_[2][Button::STATE_COUNT]; 41 42 // The button style supplied in part by this border. 43 Button::ButtonStyle style_; 44 45 gfx::Insets insets_; 46 47 DISALLOW_COPY_AND_ASSIGN(LabelButtonBorder); 48 }; 49 50 } // namespace views 51 52 #endif // UI_VIEWS_CONTROLS_BUTTON_LABEL_BUTTON_BORDER_H_ 53