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
17namespace views {
18namespace corewm {
19
20// Implementation of Tooltip that uses the native win32 control for showing the
21// tooltip.
22class 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