1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef CHROME_BROWSER_UI_VIEWS_FRAME_MINIMIZE_BUTTON_METRICS_WIN_H_ 6 #define CHROME_BROWSER_UI_VIEWS_FRAME_MINIMIZE_BUTTON_METRICS_WIN_H_ 7 8 #include <windows.h> 9 10 #include "base/basictypes.h" 11 12 // Class that implements obtaining the X coordinate of the native minimize 13 // button for the native frame on Windows. 14 // This is a separate class because obtaining it is somewhat tricky and this 15 // code is shared between BrowserDesktopWindowTreeHostWin and BrowserFrameWin. 16 class MinimizeButtonMetrics { 17 public: 18 MinimizeButtonMetrics(); 19 ~MinimizeButtonMetrics(); 20 21 void Init(HWND hwnd); 22 23 // Obtain the X offset of the native minimize button. Since Windows can lie 24 // to us if we call this at the wrong moment, this might come from a cached 25 // value rather than read when called. 26 int GetMinimizeButtonOffsetX() const; 27 28 // Must be called when hwnd_ is activated to update the minimize button 29 // position cache. 30 void OnHWNDActivated(); 31 32 private: 33 // Gets the value for GetMinimizeButtonOffsetX(), caching if found. 34 int GetAndCacheMinimizeButtonOffsetX() const; 35 36 HWND hwnd_; 37 38 // Cached offset of the minimize button. If RTL this is the location of the 39 // minimize button, if LTR this is the offset from the right edge of the 40 // client area to the minimize button. 41 mutable int cached_minimize_button_x_delta_; 42 43 // Static cache of |cached_minimize_button_x_delta_|. 44 static int last_cached_minimize_button_x_delta_; 45 46 // Has OnHWNDActivated() been invoked? 47 bool was_activated_; 48 49 DISALLOW_COPY_AND_ASSIGN(MinimizeButtonMetrics); 50 }; 51 52 #endif // CHROME_BROWSER_UI_VIEWS_FRAME_MINIMIZE_BUTTON_METRICS_WIN_H_ 53