Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(341)

Unified Diff: ui/views/window/custom_frame_view.h

Issue 240163006: Linux Aura Task Manager Frame Buttons Misaligned (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add #ifdefs Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/views/views.gyp ('k') | ui/views/window/custom_frame_view.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/views/window/custom_frame_view.h
diff --git a/ui/views/window/custom_frame_view.h b/ui/views/window/custom_frame_view.h
index 96dbd225c19307a819ce6b140318f39a13b83f4b..d002022a42134de0dbd2f8c8d23d01a2f77bcf8b 100644
--- a/ui/views/window/custom_frame_view.h
+++ b/ui/views/window/custom_frame_view.h
@@ -5,10 +5,17 @@
#ifndef UI_VIEWS_WINDOW_CUSTOM_FRAME_VIEW_H_
#define UI_VIEWS_WINDOW_CUSTOM_FRAME_VIEW_H_
+#include <vector>
flackr 2014/04/24 21:40:13 nit: separate system includes from the rest. i.e.
jonross 2014/04/25 15:59:58 Done.
#include "base/basictypes.h"
#include "base/compiler_specific.h"
#include "base/memory/scoped_ptr.h"
#include "ui/views/controls/button/button.h"
+
+#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
flackr 2014/04/24 21:40:13 nit: Move this to the end (i.e. after ui/views/win
jonross 2014/04/25 15:59:58 Done.
+#include "ui/views/linux_ui/window_button_order_observer.h"
+#endif
+
+#include "ui/views/window/frame_buttons.h"
#include "ui/views/window/non_client_view.h"
namespace gfx {
@@ -29,15 +36,20 @@ class Widget;
// rendering the non-standard window caption, border, and controls.
//
////////////////////////////////////////////////////////////////////////////////
-class CustomFrameView : public NonClientFrameView,
- public ButtonListener {
+class VIEWS_EXPORT CustomFrameView : public NonClientFrameView,
+#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
+ public ButtonListener,
+ public WindowButtonOrderObserver {
+#else
+ public ButtonListener {
+#endif
flackr 2014/04/24 21:40:13 I hate that we have to duplicate the '{', kind of
jonross 2014/04/25 15:59:58 Done.
public:
CustomFrameView();
virtual ~CustomFrameView();
void Init(Widget* frame);
- // Overridden from NonClientFrameView:
+ // NonClientFrameView:
virtual gfx::Rect GetBoundsForClientView() const OVERRIDE;
virtual gfx::Rect GetWindowBoundsForClientBounds(
const gfx::Rect& client_bounds) const OVERRIDE;
@@ -48,17 +60,26 @@ class CustomFrameView : public NonClientFrameView,
virtual void UpdateWindowIcon() OVERRIDE;
virtual void UpdateWindowTitle() OVERRIDE;
- // Overridden from View:
+ // View:
virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE;
virtual void Layout() OVERRIDE;
virtual gfx::Size GetPreferredSize() OVERRIDE;
virtual gfx::Size GetMinimumSize() OVERRIDE;
virtual gfx::Size GetMaximumSize() OVERRIDE;
- // Overridden from ButtonListener:
+ // ButtonListener:
virtual void ButtonPressed(Button* sender, const ui::Event& event) OVERRIDE;
+#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
+ // WindowButtonOrderObserver:
+ virtual void OnWindowButtonOrderingChange(
+ const std::vector<views::FrameButton>& leading_buttons,
+ const std::vector<views::FrameButton>& trailing_buttons) OVERRIDE;
+#endif
+
private:
+ friend class CustomFrameViewTest;
+
// Returns the thickness of the border that makes up the window frame edges.
// This does not include any client edge.
int FrameBorderThickness() const;
@@ -104,8 +125,18 @@ class CustomFrameView : public NonClientFrameView,
SkColor GetFrameColor() const;
const gfx::ImageSkia* GetFrameImage() const;
- // Layout various sub-components of this view.
+ // Sets visibility, sizing, and position of an individual button. The value
+ // of |x| and |y| will be the origin for the button.
+ void LayoutButton(ImageButton* button, int x, int y);
+
+ // Performs the layout for the window control buttons based on the
+ // configuration specified in |leading_buttons_| and |trailing_buttons_|.
+ // The sizing and positions of the buttons affects LayoutTitleBar, call
+ // this beforehand.
void LayoutWindowControls();
+
+ // Calculations depend on the positions of the window controls. Always call
+ // LayoutWindowControls beforehand.
void LayoutTitleBar();
void LayoutClientView();
@@ -116,6 +147,10 @@ class CustomFrameView : public NonClientFrameView,
int hot_image_id,
int pushed_image_id);
+ // Returns the window caption button for the given FrameButton, if it should
flackr 2014/04/24 21:40:13 Since FrameButton is an enum essentially specifyin
jonross 2014/04/25 15:59:58 Done.
+ // be visible. Otherwise NULL.
+ ImageButton* GetImageButton(views::FrameButton button);
+
// The bounds of the client view, in this view's coordinates.
gfx::Rect client_view_bounds_;
@@ -140,6 +175,17 @@ class CustomFrameView : public NonClientFrameView,
// Background painter for the window frame.
scoped_ptr<FrameBackground> frame_background_;
+ // Layout arrangement of the window caption buttons. On linux these will be
+ // set via OnWindowButtonOrderingChange. On other platforms a default
+ // arrangement of a trailing minimize, maximize, close, will be set.
+ std::vector<views::FrameButton> leading_buttons_;
+ std::vector<views::FrameButton> trailing_buttons_;
+
+ // The horizontal boundaries for the title bar to layout within. Restricted
+ // by the space used by the leading and trailing buttons.
+ int minimum_title_bar_x_;
+ int maximum_title_bar_x_;
+
DISALLOW_COPY_AND_ASSIGN(CustomFrameView);
};
« no previous file with comments | « ui/views/views.gyp ('k') | ui/views/window/custom_frame_view.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698