Index: chrome/browser/autocomplete/autocomplete_popup_view_win.h |
=================================================================== |
--- chrome/browser/autocomplete/autocomplete_popup_view_win.h (revision 21913) |
+++ chrome/browser/autocomplete/autocomplete_popup_view_win.h (working copy) |
@@ -1,210 +0,0 @@ |
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#ifndef CHROME_BROWSER_AUTOCOMPLETE_AUTOCOMPLETE_POPUP_VIEW_WIN_H_ |
-#define CHROME_BROWSER_AUTOCOMPLETE_AUTOCOMPLETE_POPUP_VIEW_WIN_H_ |
- |
-#include <atlbase.h> |
-#include <atlapp.h> |
-#include <atlcrack.h> |
-#include <atlmisc.h> |
- |
-#include <string> |
- |
-#include "app/gfx/font.h" |
-#include "base/scoped_ptr.h" |
-#include "base/win_util.h" |
-#include "chrome/browser/autocomplete/autocomplete.h" |
-#include "chrome/browser/autocomplete/autocomplete_popup_view.h" |
-#include "webkit/glue/window_open_disposition.h" |
- |
-class AutocompletePopupModel; |
-class AutocompleteEditModel; |
-class AutocompleteEditViewWin; |
-class Profile; |
-class SkBitmap; |
- |
-#define AUTOCOMPLETEPOPUPVIEW_CLASSNAME L"Chrome_AutocompletePopupView" |
- |
-// This class implements a popup window used to display autocomplete results. |
-class AutocompletePopupViewWin |
- : public CWindowImpl<AutocompletePopupViewWin, CWindow, CControlWinTraits>, |
- public AutocompletePopupView { |
- public: |
- DECLARE_WND_CLASS_EX(AUTOCOMPLETEPOPUPVIEW_CLASSNAME, |
- ((win_util::GetWinVersion() < win_util::WINVERSION_XP) ? |
- 0 : CS_DROPSHADOW), COLOR_WINDOW) |
- |
- BEGIN_MSG_MAP(AutocompletePopupViewWin) |
- MSG_WM_ERASEBKGND(OnEraseBkgnd) |
- MSG_WM_LBUTTONDOWN(OnLButtonDown) |
- MSG_WM_MBUTTONDOWN(OnMButtonDown) |
- MSG_WM_LBUTTONUP(OnLButtonUp) |
- MSG_WM_MBUTTONUP(OnMButtonUp) |
- MSG_WM_MOUSEACTIVATE(OnMouseActivate) |
- MSG_WM_MOUSELEAVE(OnMouseLeave) |
- MSG_WM_MOUSEMOVE(OnMouseMove) |
- MSG_WM_PAINT(OnPaint) |
- END_MSG_MAP() |
- |
- AutocompletePopupViewWin(const gfx::Font& font, |
- AutocompleteEditViewWin* edit_view, |
- AutocompleteEditModel* edit_model, |
- Profile* profile); |
- |
- // Returns true if the popup is currently open. |
- virtual bool IsOpen() const { return m_hWnd != NULL; } |
- |
- // Invalidates one line of the autocomplete popup. |
- virtual void InvalidateLine(size_t line); |
- |
- // Redraws the popup window to match any changes in the result set; this may |
- // mean opening or closing the window. |
- virtual void UpdatePopupAppearance(); |
- |
- // Called by the model when hover is enabled or disabled. |
- virtual void OnHoverEnabledOrDisabled(bool disabled); |
- |
- virtual void PaintUpdatesNow() { UpdateWindow(); } |
- |
- virtual AutocompletePopupModel* GetModel() { return model_.get(); } |
- |
- private: |
- class MirroringContext; |
- |
- // Caches GDI objects and information for drawing. |
- struct DrawLineInfo { |
- enum LineStatus { |
- NORMAL = 0, |
- HOVERED, |
- SELECTED, |
- MAX_STATUS_ENTRIES |
- }; |
- |
- explicit DrawLineInfo(const gfx::Font& font); |
- ~DrawLineInfo(); |
- |
- static COLORREF AlphaBlend(COLORREF foreground, |
- COLORREF background, |
- BYTE alpha); |
- |
- static const wchar_t ellipsis_str[]; |
- |
- gfx::Font regular_font; // Fonts used for rendering AutocompleteMatches. |
- gfx::Font bold_font; |
- int font_height; // Height (in pixels) of a line of text w/o |
- // padding. |
- int line_height; // Height (in pixels) of a line of text w/padding. |
- int ave_char_width; // Width (in pixels) of an average character of |
- // the regular font. |
- int ellipsis_width; // Width (in pixels) of the ellipsis_str. |
- |
- // colors |
- COLORREF background_colors[MAX_STATUS_ENTRIES]; |
- COLORREF text_colors[MAX_STATUS_ENTRIES]; |
- COLORREF url_colors[MAX_STATUS_ENTRIES]; |
- |
- // brushes |
- HBRUSH brushes[MAX_STATUS_ENTRIES]; |
- |
- private: |
- static double LuminosityContrast(COLORREF color1, COLORREF color2); |
- static double Luminosity(COLORREF color); |
- }; |
- |
- // message handlers |
- LRESULT OnEraseBkgnd(HDC hdc) { |
- // We do all needed erasing ourselves in OnPaint, so the only thing that |
- // WM_ERASEBKGND will do is cause flicker. Disable it by just returning |
- // nonzero here ("erase completed") without doing anything. |
- return 1; |
- } |
- void OnLButtonDown(UINT keys, const CPoint& point); |
- void OnMButtonDown(UINT keys, const CPoint& point); |
- void OnLButtonUp(UINT keys, const CPoint& point); |
- void OnMButtonUp(UINT keys, const CPoint& point); |
- LRESULT OnMouseActivate(HWND window, UINT hit_test, UINT mouse_message); |
- void OnMouseLeave(); |
- void OnMouseMove(UINT keys, const CPoint& point); |
- void OnPaint(HDC hdc); |
- |
- // Called by On*ButtonUp() to do the actual work of handling a button |
- // release. Opens the item at the given coordinate, using the supplied |
- // disposition. |
- void OnButtonUp(const CPoint& point, WindowOpenDisposition disposition); |
- |
- // Gives the topmost y coordinate within |line|, which should be within the |
- // range of valid lines. |
- int LineTopPixel(size_t line) const; |
- |
- // Converts the given y-coordinate to a line. Due to drawing slop (window |
- // borders, etc.), |y| might be within the window but outside the range of |
- // pixels which correspond to lines; in this case the result will be clamped, |
- // i.e., the top and bottom lines will be treated as extending to the top and |
- // bottom edges of the window, respectively. |
- size_t PixelToLine(int y) const; |
- |
- // Draws a light border around the inside of the window with the given client |
- // rectangle and DC. |
- void DrawBorder(const RECT& rc, HDC dc); |
- |
- // Draws a single run of text with a particular style. Handles both LTR and |
- // RTL text as well as eliding. Returns the width, in pixels, of the string |
- // as it was actually displayed. |
- int DrawString(HDC dc, |
- int x, |
- int y, |
- int max_x, |
- const wchar_t* text, |
- int length, |
- int style, |
- const DrawLineInfo::LineStatus status, |
- const MirroringContext* context, |
- bool text_direction_is_rtl) const; |
- |
- // Draws a string from the autocomplete controller which can have specially |
- // marked "match" portions. |
- void DrawMatchFragments(HDC dc, |
- const std::wstring& text, |
- const ACMatchClassifications& classifications, |
- int x, |
- int y, |
- int max_x, |
- DrawLineInfo::LineStatus status) const; |
- |
- // Draws one line of the text in the box. |
- void DrawEntry(HDC dc, |
- const RECT& client_rect, |
- size_t line, |
- DrawLineInfo::LineStatus status, |
- bool all_descriptions_empty, |
- bool starred) const; |
- |
- // Draws the star at the specified location |
- void DrawStar(HDC dc, int x, int y) const; |
- |
- scoped_ptr<AutocompletePopupModel> model_; |
- |
- AutocompleteEditViewWin* edit_view_; |
- |
- // Cached GDI information for drawing. |
- DrawLineInfo line_info_; |
- |
- // Bitmap for the star. This is owned by the ResourceBundle. |
- SkBitmap* star_; |
- |
- // A context used for mirroring regions. |
- scoped_ptr<MirroringContext> mirroring_context_; |
- |
- // When hovered_line_ is kNoMatch, this holds the screen coordinates of the |
- // mouse position when hover tracking was turned off. If the mouse moves to a |
- // point over the popup that has different coordinates, hover tracking will be |
- // re-enabled. When hovered_line_ is a valid line, the value here is |
- // out-of-date and should be ignored. |
- CPoint last_hover_coordinates_; |
- |
- DISALLOW_COPY_AND_ASSIGN(AutocompletePopupViewWin); |
-}; |
- |
-#endif // CHROME_BROWSER_AUTOCOMPLETE_AUTOCOMPLETE_POPUP_VIEW_WIN_H_ |