1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
|
// Copyright 2012 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef UI_VIEWS_CONTROLS_BUTTON_LABEL_BUTTON_BORDER_H_
#define UI_VIEWS_CONTROLS_BUTTON_LABEL_BUTTON_BORDER_H_
#include <memory>
#include "ui/gfx/geometry/insets.h"
#include "ui/views/border.h"
#include "ui/views/controls/button/button.h"
#include "ui/views/painter.h"
namespace views {
// An empty Border with customizable insets used by a LabelButton.
class VIEWS_EXPORT LabelButtonBorder : public Border {
public:
LabelButtonBorder();
LabelButtonBorder(const LabelButtonBorder&) = delete;
LabelButtonBorder& operator=(const LabelButtonBorder&) = delete;
~LabelButtonBorder() override;
void set_insets(const gfx::Insets& insets) { insets_ = insets; }
// Returns true if |this| is able to paint for the given |focused| and |state|
// values.
virtual bool PaintsButtonState(bool focused, Button::ButtonState state);
// Overridden from Border:
void Paint(const View& view, gfx::Canvas* canvas) override;
gfx::Insets GetInsets() const override;
gfx::Size GetMinimumSize() const override;
private:
gfx::Insets insets_;
};
// A Border that paints a LabelButton's background frame using image assets.
class VIEWS_EXPORT LabelButtonAssetBorder : public LabelButtonBorder {
public:
LabelButtonAssetBorder();
LabelButtonAssetBorder(const LabelButtonAssetBorder&) = delete;
LabelButtonAssetBorder& operator=(const LabelButtonAssetBorder&) = delete;
~LabelButtonAssetBorder() override;
// Returns the default insets.
static gfx::Insets GetDefaultInsets();
// Overridden from LabelButtonBorder:
bool PaintsButtonState(bool focused, Button::ButtonState state) override;
// Overridden from Border:
void Paint(const View& view, gfx::Canvas* canvas) override;
gfx::Size GetMinimumSize() const override;
// Get or set the painter used for the specified |focused| button |state|.
// LabelButtonAssetBorder takes and retains ownership of |painter|.
Painter* GetPainter(bool focused, Button::ButtonState state);
void SetPainter(bool focused,
Button::ButtonState state,
std::unique_ptr<Painter> painter);
private:
// The painters used for each unfocused or focused button state.
std::array<std::array<std::unique_ptr<Painter>, Button::STATE_COUNT>, 2>
painters_;
};
} // namespace views
#endif // UI_VIEWS_CONTROLS_BUTTON_LABEL_BUTTON_BORDER_H_
|