Home | History | Annotate | Download | only in frame
      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