blob: 901ed79a87122b803594aa89b0bd0302dfa5d864 [file] [log] [blame]
// 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 <array>
#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_