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.
5 #ifndef CHROME_BROWSER_UI_VIEWS_PANELS_TASKBAR_WINDOW_THUMBNAILER_WIN_H_
6 #define CHROME_BROWSER_UI_VIEWS_PANELS_TASKBAR_WINDOW_THUMBNAILER_WIN_H_
9 #include "base/memory/scoped_ptr.h"
10 #include "ui/base/win/hwnd_subclass.h"
14 class TaskbarWindowThumbnailerDelegateWin
{
16 // Returns the list of handles for all windows that are used to construct the
17 // thumbnail. If empty list is returned, the snapshot of current window
19 virtual std::vector
<HWND
> GetSnapshotWindowHandles() const = 0;
22 // Provides the custom thumbnail and live preview for the window that appears
23 // in the taskbar (Windows 7 and later).
24 class TaskbarWindowThumbnailerWin
: public ui::HWNDMessageFilter
{
26 TaskbarWindowThumbnailerWin(HWND hwnd
,
27 TaskbarWindowThumbnailerDelegateWin
* delegate
);
28 virtual ~TaskbarWindowThumbnailerWin();
30 // Starts using the custom snapshot for live preview. The snapshot is only
31 // captured once when the system requests it, so the updates of the panels'
32 // content will not be automatically reflected in the thumbnail.
35 // Stops providing the custom snapshot for live preview.
38 // Captures the snapshot now instead of when the system requests it.
39 void CaptureSnapshot();
41 // Invalidates the snapshot such that a fresh copy can be obtained next time
42 // when the system requests it.
43 void InvalidateSnapshot();
45 // Provide the snapshot to the new window. If the snapshot is captured for the
46 // old window, it will also be used for the new window.
47 void ReplaceWindow(HWND new_hwnd
);
50 // Overridden from ui::HWNDMessageFilter:
51 virtual bool FilterMessage(HWND hwnd
,
55 LRESULT
* l_result
) override
;
58 bool OnDwmSendIconicThumbnail(int width
, int height
, LRESULT
* l_result
);
59 bool OnDwmSendIconicLivePreviewBitmap(LRESULT
* l_result
);
61 // Captures and returns the screenshot of the window. The caller is
62 // responsible to release the returned SkBitmap instance.
63 SkBitmap
* CaptureWindowImage() const;
66 TaskbarWindowThumbnailerDelegateWin
* delegate_
; // Weak, owns us.
67 scoped_ptr
<SkBitmap
> capture_bitmap_
;
69 DISALLOW_COPY_AND_ASSIGN(TaskbarWindowThumbnailerWin
);
72 #endif // CHROME_BROWSER_UI_VIEWS_PANELS_TASKBAR_WINDOW_THUMBNAILER_WIN_H_