// Copyright 2014 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CHROME_BROWSER_UI_LIBGTK2UI_GTK2_BORDER_H_ #define CHROME_BROWSER_UI_LIBGTK2UI_GTK2_BORDER_H_ #include "base/scoped_observer.h" #include "ui/gfx/image/image_skia.h" #include "ui/native_theme/native_theme.h" #include "ui/native_theme/native_theme_observer.h" #include "ui/views/border.h" #include "ui/views/controls/button/button.h" namespace gfx { class Canvas; } namespace views { class LabelButton; class LabelButtonBorder; } namespace libgtk2ui { class Gtk2UI; // Draws a gtk button border, and manages the memory of the resulting pixbufs. class Gtk2Border : public views::Border, public ui::NativeThemeObserver { public: Gtk2Border(Gtk2UI* gtk2_ui, views::LabelButton* owning_button, scoped_ptr border); ~Gtk2Border() override; // Overridden from views::Border: void Paint(const views::View& view, gfx::Canvas* canvas) override; gfx::Insets GetInsets() const override; gfx::Size GetMinimumSize() const override; // Overridden from views::NativeThemeChangeObserver: void OnNativeThemeUpdated(ui::NativeTheme* observed_theme) override; private: void PaintState(const ui::NativeTheme::State state, const ui::NativeTheme::ExtraParams& extra, const gfx::Rect& rect, gfx::Canvas* canvas); Gtk2UI* gtk2_ui_; gfx::ImageSkia button_images_[2][views::Button::STATE_COUNT]; // The view to which we are a border. We keep track of this so that we can // force invalidate the layout on theme changes. views::LabelButton* owning_button_; // The views::Border that we are replacing in native mode. We keep track of // this for inset information. scoped_ptr border_; ScopedObserver observer_manager_; DISALLOW_COPY_AND_ASSIGN(Gtk2Border); }; } // namespace libgtk2ui #endif // CHROME_BROWSER_UI_LIBGTK2UI_GTK2_BORDER_H_