Commit 56709586 authored by Tom Anderson's avatar Tom Anderson Committed by Commit Bot

Move FrameButtonDisplayType into ui/views/linux_ui

This type is specific to NavButtonProvider, which only exists
for Linux, so the type is moved inside NavButtonProvider

R=sky
BUG=None

Change-Id: I910bd42a4ead9a8b6add268f021d01dbc6eb41b5
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2092877
Commit-Queue: Thomas Anderson <thomasanderson@chromium.org>
Reviewed-by: default avatarScott Violet <sky@chromium.org>
Cr-Commit-Position: refs/heads/master@{#748781}
parent 2fd893c9
// Copyright 2017 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_FRAME_BUTTON_DISPLAY_TYPES_H_
#define CHROME_BROWSER_UI_FRAME_BUTTON_DISPLAY_TYPES_H_
namespace chrome {
// This enum is similar to views::FrameButton, except it partitions
// kMaximize and kRestore. This is useful for when we want to be
// explicit about which buttons we want drawn, without having to
// implicitly determine if we should use kMaximize or kRestore
// depending on the browser window's maximized/restored state.
enum class FrameButtonDisplayType {
kMinimize,
kMaximize,
kRestore,
kClose,
};
} // namespace chrome
#endif // CHROME_BROWSER_UI_FRAME_BUTTON_DISPLAY_TYPES_H_
...@@ -23,14 +23,14 @@ const int kNavButtonIconSize = 16; ...@@ -23,14 +23,14 @@ const int kNavButtonIconSize = 16;
const int kHeaderSpacing = 6; const int kHeaderSpacing = 6;
const char* ButtonStyleClassFromButtonType( const char* ButtonStyleClassFromButtonType(
chrome::FrameButtonDisplayType type) { views::NavButtonProvider::FrameButtonDisplayType type) {
switch (type) { switch (type) {
case chrome::FrameButtonDisplayType::kMinimize: case views::NavButtonProvider::FrameButtonDisplayType::kMinimize:
return "minimize"; return "minimize";
case chrome::FrameButtonDisplayType::kMaximize: case views::NavButtonProvider::FrameButtonDisplayType::kMaximize:
case chrome::FrameButtonDisplayType::kRestore: case views::NavButtonProvider::FrameButtonDisplayType::kRestore:
return "maximize"; return "maximize";
case chrome::FrameButtonDisplayType::kClose: case views::NavButtonProvider::FrameButtonDisplayType::kClose:
return "close"; return "close";
default: default:
NOTREACHED(); NOTREACHED();
...@@ -55,15 +55,16 @@ GtkStateFlags GtkStateFlagsFromButtonState(views::Button::ButtonState state) { ...@@ -55,15 +55,16 @@ GtkStateFlags GtkStateFlagsFromButtonState(views::Button::ButtonState state) {
} }
} }
const char* IconNameFromButtonType(chrome::FrameButtonDisplayType type) { const char* IconNameFromButtonType(
views::NavButtonProvider::FrameButtonDisplayType type) {
switch (type) { switch (type) {
case chrome::FrameButtonDisplayType::kMinimize: case views::NavButtonProvider::FrameButtonDisplayType::kMinimize:
return "window-minimize-symbolic"; return "window-minimize-symbolic";
case chrome::FrameButtonDisplayType::kMaximize: case views::NavButtonProvider::FrameButtonDisplayType::kMaximize:
return "window-maximize-symbolic"; return "window-maximize-symbolic";
case chrome::FrameButtonDisplayType::kRestore: case views::NavButtonProvider::FrameButtonDisplayType::kRestore:
return "window-restore-symbolic"; return "window-restore-symbolic";
case chrome::FrameButtonDisplayType::kClose: case views::NavButtonProvider::FrameButtonDisplayType::kClose:
return "window-close-symbolic"; return "window-close-symbolic";
default: default:
NOTREACHED(); NOTREACHED();
...@@ -108,9 +109,10 @@ gfx::Insets MarginFromStyleContext(GtkStyleContext* context, ...@@ -108,9 +109,10 @@ gfx::Insets MarginFromStyleContext(GtkStyleContext* context,
return InsetsFromGtkBorder(margin); return InsetsFromGtkBorder(margin);
} }
ScopedGObject<GdkPixbuf> LoadNavButtonIcon(chrome::FrameButtonDisplayType type, ScopedGObject<GdkPixbuf> LoadNavButtonIcon(
GtkStyleContext* button_context, views::NavButtonProvider::FrameButtonDisplayType type,
int scale) { GtkStyleContext* button_context,
int scale) {
const char* icon_name = IconNameFromButtonType(type); const char* icon_name = IconNameFromButtonType(type);
ScopedGObject<GtkIconInfo> icon_info(gtk_icon_theme_lookup_icon_for_scale( ScopedGObject<GtkIconInfo> icon_info(gtk_icon_theme_lookup_icon_for_scale(
gtk_icon_theme_get_default(), icon_name, kNavButtonIconSize, scale, gtk_icon_theme_get_default(), icon_name, kNavButtonIconSize, scale,
...@@ -153,10 +155,11 @@ ScopedStyleContext CreateHeaderContext(bool maximized) { ...@@ -153,10 +155,11 @@ ScopedStyleContext CreateHeaderContext(bool maximized) {
"GtkHeaderBar#headerbar.header-bar.titlebar"); "GtkHeaderBar#headerbar.header-bar.titlebar");
} }
void CalculateUnscaledButtonSize(chrome::FrameButtonDisplayType type, void CalculateUnscaledButtonSize(
bool maximized, views::NavButtonProvider::FrameButtonDisplayType type,
gfx::Size* button_size, bool maximized,
gfx::Insets* button_margin) { gfx::Size* button_size,
gfx::Insets* button_margin) {
// views::ImageButton expects the images for each state to be of the // views::ImageButton expects the images for each state to be of the
// same size, but GTK can, in general, use a differnetly-sized // same size, but GTK can, in general, use a differnetly-sized
// button for each state. For this reason, render buttons for all // button for each state. For this reason, render buttons for all
...@@ -184,7 +187,7 @@ void CalculateUnscaledButtonSize(chrome::FrameButtonDisplayType type, ...@@ -184,7 +187,7 @@ void CalculateUnscaledButtonSize(chrome::FrameButtonDisplayType type,
class NavButtonImageSource : public gfx::ImageSkiaSource { class NavButtonImageSource : public gfx::ImageSkiaSource {
public: public:
NavButtonImageSource(chrome::FrameButtonDisplayType type, NavButtonImageSource(views::NavButtonProvider::FrameButtonDisplayType type,
views::Button::ButtonState state, views::Button::ButtonState state,
bool maximized, bool maximized,
bool active, bool active,
...@@ -297,7 +300,7 @@ class NavButtonImageSource : public gfx::ImageSkiaSource { ...@@ -297,7 +300,7 @@ class NavButtonImageSource : public gfx::ImageSkiaSource {
bool HasRepresentationAtAllScales() const override { return true; } bool HasRepresentationAtAllScales() const override { return true; }
private: private:
chrome::FrameButtonDisplayType type_; views::NavButtonProvider::FrameButtonDisplayType type_;
views::Button::ButtonState state_; views::Button::ButtonState state_;
bool maximized_; bool maximized_;
bool active_; bool active_;
...@@ -324,13 +327,15 @@ void NavButtonProviderGtk::RedrawImages(int top_area_height, ...@@ -324,13 +327,15 @@ void NavButtonProviderGtk::RedrawImages(int top_area_height,
#endif #endif
double scale = 1.0f; double scale = 1.0f;
std::map<chrome::FrameButtonDisplayType, gfx::Size> button_sizes; std::map<views::NavButtonProvider::FrameButtonDisplayType, gfx::Size>
std::map<chrome::FrameButtonDisplayType, gfx::Insets> button_margins; button_sizes;
std::vector<chrome::FrameButtonDisplayType> display_types{ std::map<views::NavButtonProvider::FrameButtonDisplayType, gfx::Insets>
chrome::FrameButtonDisplayType::kMinimize, button_margins;
maximized ? chrome::FrameButtonDisplayType::kRestore std::vector<views::NavButtonProvider::FrameButtonDisplayType> display_types{
: chrome::FrameButtonDisplayType::kMaximize, views::NavButtonProvider::FrameButtonDisplayType::kMinimize,
chrome::FrameButtonDisplayType::kClose, maximized ? views::NavButtonProvider::FrameButtonDisplayType::kRestore
: views::NavButtonProvider::FrameButtonDisplayType::kMaximize,
views::NavButtonProvider::FrameButtonDisplayType::kClose,
}; };
for (auto type : display_types) { for (auto type : display_types) {
CalculateUnscaledButtonSize(type, maximized, &button_sizes[type], CalculateUnscaledButtonSize(type, maximized, &button_sizes[type],
...@@ -387,7 +392,7 @@ void NavButtonProviderGtk::RedrawImages(int top_area_height, ...@@ -387,7 +392,7 @@ void NavButtonProviderGtk::RedrawImages(int top_area_height,
} }
gfx::ImageSkia NavButtonProviderGtk::GetImage( gfx::ImageSkia NavButtonProviderGtk::GetImage(
chrome::FrameButtonDisplayType type, views::NavButtonProvider::FrameButtonDisplayType type,
views::Button::ButtonState state) const { views::Button::ButtonState state) const {
auto it = button_images_.find(type); auto it = button_images_.find(type);
DCHECK(it != button_images_.end()); DCHECK(it != button_images_.end());
...@@ -395,7 +400,7 @@ gfx::ImageSkia NavButtonProviderGtk::GetImage( ...@@ -395,7 +400,7 @@ gfx::ImageSkia NavButtonProviderGtk::GetImage(
} }
gfx::Insets NavButtonProviderGtk::GetNavButtonMargin( gfx::Insets NavButtonProviderGtk::GetNavButtonMargin(
chrome::FrameButtonDisplayType type) const { views::NavButtonProvider::FrameButtonDisplayType type) const {
auto it = button_margins_.find(type); auto it = button_margins_.find(type);
DCHECK(it != button_margins_.end()); DCHECK(it != button_margins_.end());
return it->second; return it->second;
......
...@@ -8,7 +8,6 @@ ...@@ -8,7 +8,6 @@
#include <map> #include <map>
#include "base/component_export.h" #include "base/component_export.h"
#include "chrome/browser/ui/frame_button_display_types.h"
#include "ui/gfx/image/image_skia.h" #include "ui/gfx/image/image_skia.h"
#include "ui/views/controls/button/button.h" #include "ui/views/controls/button/button.h"
#include "ui/views/linux_ui/nav_button_provider.h" #include "ui/views/linux_ui/nav_button_provider.h"
...@@ -23,18 +22,19 @@ class COMPONENT_EXPORT(GTK) NavButtonProviderGtk ...@@ -23,18 +22,19 @@ class COMPONENT_EXPORT(GTK) NavButtonProviderGtk
// views::NavButtonProvider: // views::NavButtonProvider:
void RedrawImages(int top_area_height, bool maximized, bool active) override; void RedrawImages(int top_area_height, bool maximized, bool active) override;
gfx::ImageSkia GetImage(chrome::FrameButtonDisplayType type, gfx::ImageSkia GetImage(views::NavButtonProvider::FrameButtonDisplayType type,
views::Button::ButtonState state) const override; views::Button::ButtonState state) const override;
gfx::Insets GetNavButtonMargin( gfx::Insets GetNavButtonMargin(
chrome::FrameButtonDisplayType type) const override; views::NavButtonProvider::FrameButtonDisplayType type) const override;
gfx::Insets GetTopAreaSpacing() const override; gfx::Insets GetTopAreaSpacing() const override;
int GetInterNavButtonSpacing() const override; int GetInterNavButtonSpacing() const override;
private: private:
std::map<chrome::FrameButtonDisplayType, std::map<views::NavButtonProvider::FrameButtonDisplayType,
gfx::ImageSkia[views::Button::STATE_COUNT]> gfx::ImageSkia[views::Button::STATE_COUNT]>
button_images_; button_images_;
std::map<chrome::FrameButtonDisplayType, gfx::Insets> button_margins_; std::map<views::NavButtonProvider::FrameButtonDisplayType, gfx::Insets>
button_margins_;
gfx::Insets top_area_spacing_; gfx::Insets top_area_spacing_;
int inter_button_spacing_; int inter_button_spacing_;
}; };
......
...@@ -6,7 +6,6 @@ ...@@ -6,7 +6,6 @@
#include "chrome/browser/ui/views/frame/desktop_linux_browser_frame_view_layout.h" #include "chrome/browser/ui/views/frame/desktop_linux_browser_frame_view_layout.h"
#include "ui/views/controls/button/image_button.h" #include "ui/views/controls/button/image_button.h"
#include "ui/views/linux_ui/nav_button_provider.h"
bool DesktopLinuxBrowserFrameView::DrawFrameButtonParams::operator==( bool DesktopLinuxBrowserFrameView::DrawFrameButtonParams::operator==(
const DrawFrameButtonParams& other) const { const DrawFrameButtonParams& other) const {
...@@ -48,10 +47,11 @@ void DesktopLinuxBrowserFrameView::MaybeUpdateCachedFrameButtonImages() { ...@@ -48,10 +47,11 @@ void DesktopLinuxBrowserFrameView::MaybeUpdateCachedFrameButtonImages() {
nav_button_provider_->RedrawImages(params.top_area_height, params.maximized, nav_button_provider_->RedrawImages(params.top_area_height, params.maximized,
params.active); params.active);
for (auto type : { for (auto type : {
chrome::FrameButtonDisplayType::kMinimize, views::NavButtonProvider::FrameButtonDisplayType::kMinimize,
IsMaximized() ? chrome::FrameButtonDisplayType::kRestore IsMaximized()
: chrome::FrameButtonDisplayType::kMaximize, ? views::NavButtonProvider::FrameButtonDisplayType::kRestore
chrome::FrameButtonDisplayType::kClose, : views::NavButtonProvider::FrameButtonDisplayType::kMaximize,
views::NavButtonProvider::FrameButtonDisplayType::kClose,
}) { }) {
for (size_t state = 0; state < views::Button::STATE_COUNT; state++) { for (size_t state = 0; state < views::Button::STATE_COUNT; state++) {
views::Button::ButtonState button_state = views::Button::ButtonState button_state =
...@@ -66,15 +66,15 @@ void DesktopLinuxBrowserFrameView::MaybeUpdateCachedFrameButtonImages() { ...@@ -66,15 +66,15 @@ void DesktopLinuxBrowserFrameView::MaybeUpdateCachedFrameButtonImages() {
} }
views::Button* DesktopLinuxBrowserFrameView::GetButtonFromDisplayType( views::Button* DesktopLinuxBrowserFrameView::GetButtonFromDisplayType(
chrome::FrameButtonDisplayType type) { views::NavButtonProvider::FrameButtonDisplayType type) {
switch (type) { switch (type) {
case chrome::FrameButtonDisplayType::kMinimize: case views::NavButtonProvider::FrameButtonDisplayType::kMinimize:
return minimize_button(); return minimize_button();
case chrome::FrameButtonDisplayType::kMaximize: case views::NavButtonProvider::FrameButtonDisplayType::kMaximize:
return maximize_button(); return maximize_button();
case chrome::FrameButtonDisplayType::kRestore: case views::NavButtonProvider::FrameButtonDisplayType::kRestore:
return restore_button(); return restore_button();
case chrome::FrameButtonDisplayType::kClose: case views::NavButtonProvider::FrameButtonDisplayType::kClose:
return close_button(); return close_button();
default: default:
NOTREACHED(); NOTREACHED();
......
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
#define CHROME_BROWSER_UI_VIEWS_FRAME_DESKTOP_LINUX_BROWSER_FRAME_VIEW_H_ #define CHROME_BROWSER_UI_VIEWS_FRAME_DESKTOP_LINUX_BROWSER_FRAME_VIEW_H_
#include "chrome/browser/ui/views/frame/opaque_browser_frame_view.h" #include "chrome/browser/ui/views/frame/opaque_browser_frame_view.h"
#include "ui/views/linux_ui/nav_button_provider.h"
// A specialization of OpaqueBrowserFrameView that is also able to // A specialization of OpaqueBrowserFrameView that is also able to
// render frame buttons using GTK. // render frame buttons using GTK.
...@@ -38,7 +39,8 @@ class DesktopLinuxBrowserFrameView : public OpaqueBrowserFrameView { ...@@ -38,7 +39,8 @@ class DesktopLinuxBrowserFrameView : public OpaqueBrowserFrameView {
// Returns one of |{minimize,maximize,restore,close}_button_| // Returns one of |{minimize,maximize,restore,close}_button_|
// corresponding to |type|. // corresponding to |type|.
views::Button* GetButtonFromDisplayType(chrome::FrameButtonDisplayType type); views::Button* GetButtonFromDisplayType(
views::NavButtonProvider::FrameButtonDisplayType type);
std::unique_ptr<views::NavButtonProvider> nav_button_provider_; std::unique_ptr<views::NavButtonProvider> nav_button_provider_;
......
...@@ -11,9 +11,10 @@ DesktopLinuxBrowserFrameViewLayout::DesktopLinuxBrowserFrameViewLayout( ...@@ -11,9 +11,10 @@ DesktopLinuxBrowserFrameViewLayout::DesktopLinuxBrowserFrameViewLayout(
: nav_button_provider_(nav_button_provider) {} : nav_button_provider_(nav_button_provider) {}
int DesktopLinuxBrowserFrameViewLayout::CaptionButtonY( int DesktopLinuxBrowserFrameViewLayout::CaptionButtonY(
chrome::FrameButtonDisplayType button_id, views::FrameButton button_id,
bool restored) const { bool restored) const {
gfx::Insets insets = nav_button_provider_->GetNavButtonMargin(button_id); auto button_type = GetButtonDisplayType(button_id);
gfx::Insets insets = nav_button_provider_->GetNavButtonMargin(button_type);
return insets.top() + FrameTopThickness(!delegate_->IsMaximized()); return insets.top() + FrameTopThickness(!delegate_->IsMaximized());
} }
...@@ -44,3 +45,21 @@ int DesktopLinuxBrowserFrameViewLayout::GetWindowCaptionSpacing( ...@@ -44,3 +45,21 @@ int DesktopLinuxBrowserFrameViewLayout::GetWindowCaptionSpacing(
spacing += nav_button_provider_->GetInterNavButtonSpacing(); spacing += nav_button_provider_->GetInterNavButtonSpacing();
return spacing; return spacing;
} }
views::NavButtonProvider::FrameButtonDisplayType
DesktopLinuxBrowserFrameViewLayout::GetButtonDisplayType(
views::FrameButton button_id) const {
switch (button_id) {
case views::FrameButton::kMinimize:
return views::NavButtonProvider::FrameButtonDisplayType::kMinimize;
case views::FrameButton::kMaximize:
return delegate_->IsMaximized()
? views::NavButtonProvider::FrameButtonDisplayType::kRestore
: views::NavButtonProvider::FrameButtonDisplayType::kMaximize;
case views::FrameButton::kClose:
return views::NavButtonProvider::FrameButtonDisplayType::kClose;
default:
NOTREACHED();
return views::NavButtonProvider::FrameButtonDisplayType::kClose;
}
}
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
#define CHROME_BROWSER_UI_VIEWS_FRAME_DESKTOP_LINUX_BROWSER_FRAME_VIEW_LAYOUT_H_ #define CHROME_BROWSER_UI_VIEWS_FRAME_DESKTOP_LINUX_BROWSER_FRAME_VIEW_LAYOUT_H_
#include "chrome/browser/ui/views/frame/opaque_browser_frame_view_layout.h" #include "chrome/browser/ui/views/frame/opaque_browser_frame_view_layout.h"
#include "ui/views/linux_ui/nav_button_provider.h"
// A specialization of OpaqueBrowserFrameViewLayout that is also able // A specialization of OpaqueBrowserFrameViewLayout that is also able
// to layout frame buttons that were rendered by GTK. // to layout frame buttons that were rendered by GTK.
...@@ -16,7 +17,7 @@ class DesktopLinuxBrowserFrameViewLayout : public OpaqueBrowserFrameViewLayout { ...@@ -16,7 +17,7 @@ class DesktopLinuxBrowserFrameViewLayout : public OpaqueBrowserFrameViewLayout {
protected: protected:
// OpaqueBrowserFrameViewLayout: // OpaqueBrowserFrameViewLayout:
int CaptionButtonY(chrome::FrameButtonDisplayType button_id, int CaptionButtonY(views::FrameButton button_id,
bool restored) const override; bool restored) const override;
TopAreaPadding GetTopAreaPadding(bool has_leading_buttons, TopAreaPadding GetTopAreaPadding(bool has_leading_buttons,
bool has_trailing_buttons) const override; bool has_trailing_buttons) const override;
...@@ -25,6 +26,11 @@ class DesktopLinuxBrowserFrameViewLayout : public OpaqueBrowserFrameViewLayout { ...@@ -25,6 +26,11 @@ class DesktopLinuxBrowserFrameViewLayout : public OpaqueBrowserFrameViewLayout {
bool is_leading_button) const override; bool is_leading_button) const override;
private: private:
// Converts a FrameButton to a FrameButtonDisplayType, taking into
// consideration the maximized state of the browser window.
views::NavButtonProvider::FrameButtonDisplayType GetButtonDisplayType(
views::FrameButton button_id) const;
views::NavButtonProvider* nav_button_provider_; views::NavButtonProvider* nav_button_provider_;
DISALLOW_COPY_AND_ASSIGN(DesktopLinuxBrowserFrameViewLayout); DISALLOW_COPY_AND_ASSIGN(DesktopLinuxBrowserFrameViewLayout);
......
...@@ -79,14 +79,14 @@ class TestNavButtonProvider : public views::NavButtonProvider { ...@@ -79,14 +79,14 @@ class TestNavButtonProvider : public views::NavButtonProvider {
ASSERT_EQ(false, maximized); // This only tests the restored state. ASSERT_EQ(false, maximized); // This only tests the restored state.
} }
gfx::ImageSkia GetImage(chrome::FrameButtonDisplayType type, gfx::ImageSkia GetImage(views::NavButtonProvider::FrameButtonDisplayType type,
views::Button::ButtonState state) const override { views::Button::ButtonState state) const override {
switch (type) { switch (type) {
case chrome::FrameButtonDisplayType::kClose: case views::NavButtonProvider::FrameButtonDisplayType::kClose:
return GetTestImageForSize(kCloseButtonSize); return GetTestImageForSize(kCloseButtonSize);
case chrome::FrameButtonDisplayType::kMaximize: case views::NavButtonProvider::FrameButtonDisplayType::kMaximize:
return GetTestImageForSize(kMaximizeButtonSize); return GetTestImageForSize(kMaximizeButtonSize);
case chrome::FrameButtonDisplayType::kMinimize: case views::NavButtonProvider::FrameButtonDisplayType::kMinimize:
return GetTestImageForSize(kMinimizeButtonSize); return GetTestImageForSize(kMinimizeButtonSize);
default: default:
NOTREACHED(); NOTREACHED();
...@@ -95,13 +95,13 @@ class TestNavButtonProvider : public views::NavButtonProvider { ...@@ -95,13 +95,13 @@ class TestNavButtonProvider : public views::NavButtonProvider {
} }
gfx::Insets GetNavButtonMargin( gfx::Insets GetNavButtonMargin(
chrome::FrameButtonDisplayType type) const override { views::NavButtonProvider::FrameButtonDisplayType type) const override {
switch (type) { switch (type) {
case chrome::FrameButtonDisplayType::kClose: case views::NavButtonProvider::FrameButtonDisplayType::kClose:
return kCloseButtonMargin; return kCloseButtonMargin;
case chrome::FrameButtonDisplayType::kMaximize: case views::NavButtonProvider::FrameButtonDisplayType::kMaximize:
return kMaximizeButtonMargin; return kMaximizeButtonMargin;
case chrome::FrameButtonDisplayType::kMinimize: case views::NavButtonProvider::FrameButtonDisplayType::kMinimize:
return kMinimizeButtonMargin; return kMinimizeButtonMargin;
default: default:
NOTREACHED(); NOTREACHED();
...@@ -160,10 +160,10 @@ class DesktopLinuxBrowserFrameViewLayoutTest : public ChromeViewsTestBase { ...@@ -160,10 +160,10 @@ class DesktopLinuxBrowserFrameViewLayoutTest : public ChromeViewsTestBase {
void ResetNativeNavButtonImagesFromButtonProvider() { void ResetNativeNavButtonImagesFromButtonProvider() {
std::vector<views::ImageButton*> buttons{close_button_, maximize_button_, std::vector<views::ImageButton*> buttons{close_button_, maximize_button_,
minimize_button_}; minimize_button_};
std::vector<chrome::FrameButtonDisplayType> button_types{ std::vector<views::NavButtonProvider::FrameButtonDisplayType> button_types{
chrome::FrameButtonDisplayType::kClose, views::NavButtonProvider::FrameButtonDisplayType::kClose,
chrome::FrameButtonDisplayType::kMaximize, views::NavButtonProvider::FrameButtonDisplayType::kMaximize,
chrome::FrameButtonDisplayType::kMinimize}; views::NavButtonProvider::FrameButtonDisplayType::kMinimize};
for (size_t i = 0; i < buttons.size(); i++) { for (size_t i = 0; i < buttons.size(); i++) {
for (views::Button::ButtonState state : for (views::Button::ButtonState state :
{views::Button::STATE_NORMAL, views ::Button::STATE_HOVERED, {views::Button::STATE_NORMAL, views ::Button::STATE_HOVERED,
......
...@@ -180,9 +180,8 @@ int OpaqueBrowserFrameViewLayout::DefaultCaptionButtonY(bool restored) const { ...@@ -180,9 +180,8 @@ int OpaqueBrowserFrameViewLayout::DefaultCaptionButtonY(bool restored) const {
: views::NonClientFrameView::kFrameShadowThickness; : views::NonClientFrameView::kFrameShadowThickness;
} }
int OpaqueBrowserFrameViewLayout::CaptionButtonY( int OpaqueBrowserFrameViewLayout::CaptionButtonY(views::FrameButton button_id,
chrome::FrameButtonDisplayType button_id, bool restored) const {
bool restored) const {
return DefaultCaptionButtonY(restored); return DefaultCaptionButtonY(restored);
} }
...@@ -200,24 +199,6 @@ gfx::Rect OpaqueBrowserFrameViewLayout::CalculateClientAreaBounds( ...@@ -200,24 +199,6 @@ gfx::Rect OpaqueBrowserFrameViewLayout::CalculateClientAreaBounds(
std::max(0, height - top_height - border_thickness)); std::max(0, height - top_height - border_thickness));
} }
chrome::FrameButtonDisplayType
OpaqueBrowserFrameViewLayout::GetButtonDisplayType(
views::FrameButton button_id) const {
switch (button_id) {
case views::FrameButton::kMinimize:
return chrome::FrameButtonDisplayType::kMinimize;
case views::FrameButton::kMaximize:
return delegate_->IsMaximized()
? chrome::FrameButtonDisplayType::kRestore
: chrome::FrameButtonDisplayType::kMaximize;
case views::FrameButton::kClose:
return chrome::FrameButtonDisplayType::kClose;
default:
NOTREACHED();
return chrome::FrameButtonDisplayType::kClose;
}
}
int OpaqueBrowserFrameViewLayout::GetWindowCaptionSpacing( int OpaqueBrowserFrameViewLayout::GetWindowCaptionSpacing(
views::FrameButton button_id, views::FrameButton button_id,
bool leading_spacing, bool leading_spacing,
...@@ -422,7 +403,7 @@ void OpaqueBrowserFrameViewLayout::SetBoundsForButton( ...@@ -422,7 +403,7 @@ void OpaqueBrowserFrameViewLayout::SetBoundsForButton(
views::FrameButton button_id, views::FrameButton button_id,
views::Button* button, views::Button* button,
ButtonAlignment alignment) { ButtonAlignment alignment) {
const int caption_y = CaptionButtonY(GetButtonDisplayType(button_id), false); const int caption_y = CaptionButtonY(button_id, false);
// There should always be the same number of non-shadow pixels visible to the // There should always be the same number of non-shadow pixels visible to the
// side of the caption buttons. In maximized mode we extend buttons to the // side of the caption buttons. In maximized mode we extend buttons to the
......
...@@ -8,7 +8,6 @@ ...@@ -8,7 +8,6 @@
#include <vector> #include <vector>
#include "base/macros.h" #include "base/macros.h"
#include "chrome/browser/ui/frame_button_display_types.h"
#include "chrome/browser/ui/views/frame/opaque_browser_frame_view.h" #include "chrome/browser/ui/views/frame/opaque_browser_frame_view.h"
#include "ui/views/layout/layout_manager.h" #include "ui/views/layout/layout_manager.h"
#include "ui/views/window/frame_buttons.h" #include "ui/views/window/frame_buttons.h"
...@@ -84,8 +83,7 @@ class OpaqueBrowserFrameViewLayout : public views::LayoutManager { ...@@ -84,8 +83,7 @@ class OpaqueBrowserFrameViewLayout : public views::LayoutManager {
// Returns the y-coordinate of button |button_id|. If |restored| is true, // Returns the y-coordinate of button |button_id|. If |restored| is true,
// acts as if the window is restored regardless of the real mode. // acts as if the window is restored regardless of the real mode.
virtual int CaptionButtonY(chrome::FrameButtonDisplayType button_id, virtual int CaptionButtonY(views::FrameButton button_id, bool restored) const;
bool restored) const;
// Returns the thickness of the top 3D edge of the window frame. If // Returns the thickness of the top 3D edge of the window frame. If
// |restored| is true, acts as if the window is restored regardless of the // |restored| is true, acts as if the window is restored regardless of the
...@@ -104,11 +102,6 @@ class OpaqueBrowserFrameViewLayout : public views::LayoutManager { ...@@ -104,11 +102,6 @@ class OpaqueBrowserFrameViewLayout : public views::LayoutManager {
// Returns the bounds of the client area for the specified view size. // Returns the bounds of the client area for the specified view size.
gfx::Rect CalculateClientAreaBounds(int width, int height) const; gfx::Rect CalculateClientAreaBounds(int width, int height) const;
// Converts a FrameButton to a FrameButtonDisplayType, taking into
// consideration the maximized state of the browser window.
chrome::FrameButtonDisplayType GetButtonDisplayType(
views::FrameButton button_id) const;
// Returns the margin around button |button_id|. If |leading_spacing| is // Returns the margin around button |button_id|. If |leading_spacing| is
// true, returns the left margin (in RTL), otherwise returns the right margin // true, returns the left margin (in RTL), otherwise returns the right margin
// (in RTL). Extra margin may be added if |is_leading_button| is true. // (in RTL). Extra margin may be added if |is_leading_button| is true.
......
...@@ -22,6 +22,18 @@ namespace views { ...@@ -22,6 +22,18 @@ namespace views {
class NavButtonProvider { class NavButtonProvider {
public: public:
// This enum is similar to views::FrameButton, except it partitions
// kMaximize and kRestore. This is useful for when we want to be
// explicit about which buttons we want drawn, without having to
// implicitly determine if we should use kMaximize or kRestore
// depending on the browser window's maximized/restored state.
enum class FrameButtonDisplayType {
kMinimize,
kMaximize,
kRestore,
kClose,
};
virtual ~NavButtonProvider() {} virtual ~NavButtonProvider() {}
// Redraws all images and updates all size state. |top_area_height| // Redraws all images and updates all size state. |top_area_height|
...@@ -33,14 +45,15 @@ class NavButtonProvider { ...@@ -33,14 +45,15 @@ class NavButtonProvider {
bool active) = 0; bool active) = 0;
// Gets the cached button image corresponding to |type| and |state|. // Gets the cached button image corresponding to |type| and |state|.
virtual gfx::ImageSkia GetImage(chrome::FrameButtonDisplayType type, virtual gfx::ImageSkia GetImage(
views::Button::ButtonState state) const = 0; views::NavButtonProvider::FrameButtonDisplayType type,
views::Button::ButtonState state) const = 0;
// Gets the external margin around each button. The left inset // Gets the external margin around each button. The left inset
// represents the leading margin, and the right inset represents the // represents the leading margin, and the right inset represents the
// trailing margin. // trailing margin.
virtual gfx::Insets GetNavButtonMargin( virtual gfx::Insets GetNavButtonMargin(
chrome::FrameButtonDisplayType type) const = 0; views::NavButtonProvider::FrameButtonDisplayType type) const = 0;
// Gets the internal spacing (padding + border) of the top area. // Gets the internal spacing (padding + border) of the top area.
// The left inset represents the leading spacing, and the right // The left inset represents the leading spacing, and the right
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment