Home | History | Annotate | Download | only in corewm
      1 // Copyright 2013 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 UI_VIEWS_COREWM_TOOLTIP_WIN_H_
      6 #define UI_VIEWS_COREWM_TOOLTIP_WIN_H_
      7 
      8 #include "base/basictypes.h"
      9 #include "base/compiler_specific.h"
     10 #include "base/strings/string16.h"
     11 #include "ui/gfx/point.h"
     12 #include "ui/views/corewm/tooltip.h"
     13 
     14 #include <windows.h>
     15 #include <commctrl.h>
     16 
     17 namespace views {
     18 namespace corewm {
     19 
     20 // Implementation of Tooltip that uses the native win32 control for showing the
     21 // tooltip.
     22 class VIEWS_EXPORT TooltipWin : public Tooltip {
     23  public:
     24   explicit TooltipWin(HWND parent);
     25   virtual ~TooltipWin();
     26 
     27   // HandleNotify() is forwarded from DesktopWindowTreeHostWin to keep the
     28   // native tooltip in sync.
     29   bool HandleNotify(int w_param, NMHDR* l_param, LRESULT* l_result);
     30 
     31  private:
     32   // Ensures |tooltip_hwnd_| is valid. Returns true if valid, false if there
     33   // a problem creating |tooltip_hwnd_|.
     34   bool EnsureTooltipWindow();
     35 
     36   // Sets the position of the tooltip.
     37   void PositionTooltip();
     38 
     39   // Tooltip:
     40   virtual void SetText(aura::Window* window,
     41                        const base::string16& tooltip_text,
     42                        const gfx::Point& location) OVERRIDE;
     43   virtual void Show() OVERRIDE;
     44   virtual void Hide() OVERRIDE;
     45   virtual bool IsVisible() OVERRIDE;
     46 
     47   // The window |tooltip_hwnd_| is parented to.
     48   HWND parent_hwnd_;
     49 
     50   // Shows the tooltip.
     51   HWND tooltip_hwnd_;
     52 
     53   // Used to modify the tooltip.
     54   TOOLINFO toolinfo_;
     55 
     56   // Is the tooltip showing?
     57   bool showing_;
     58 
     59   // Location to show the tooltip at. In order to position the tooltip we need
     60   // to know the size. The size is only available from TTN_SHOW, so we have to
     61   // cache it.
     62   gfx::Point location_;
     63 
     64   DISALLOW_COPY_AND_ASSIGN(TooltipWin);
     65 };
     66 
     67 }  // namespace corewm
     68 }  // namespace views
     69 
     70 #endif  // UI_VIEWS_COREWM_TOOLTIP_WIN_H_
     71