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_PANELS_TASKBAR_WINDOW_THUMBNAILER_WIN_H_ 6 #define CHROME_BROWSER_UI_VIEWS_PANELS_TASKBAR_WINDOW_THUMBNAILER_WIN_H_ 7 8 #include <vector> 9 #include "base/memory/scoped_ptr.h" 10 #include "ui/base/win/hwnd_subclass.h" 11 12 class SkBitmap; 13 14 class TaskbarWindowThumbnailerDelegateWin { 15 public: 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 18 // is used. 19 virtual std::vector<HWND> GetSnapshotWindowHandles() const = 0; 20 }; 21 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 { 25 public: 26 TaskbarWindowThumbnailerWin(HWND hwnd, 27 TaskbarWindowThumbnailerDelegateWin* delegate); 28 virtual ~TaskbarWindowThumbnailerWin(); 29 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. 33 void Start(); 34 35 // Stops providing the custom snapshot for live preview. 36 void Stop(); 37 38 // Captures the snapshot now instead of when the system requests it. 39 void CaptureSnapshot(); 40 41 // Invalidates the snapshot such that a fresh copy can be obtained next time 42 // when the system requests it. 43 void InvalidateSnapshot(); 44 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); 48 49 private: 50 // Overridden from ui::HWNDMessageFilter: 51 virtual bool FilterMessage(HWND hwnd, 52 UINT message, 53 WPARAM w_param, 54 LPARAM l_param, 55 LRESULT* l_result) OVERRIDE; 56 57 // Message handlers. 58 bool OnDwmSendIconicThumbnail(int width, int height, LRESULT* l_result); 59 bool OnDwmSendIconicLivePreviewBitmap(LRESULT* l_result); 60 61 // Captures and returns the screenshot of the window. The caller is 62 // responsible to release the returned SkBitmap instance. 63 SkBitmap* CaptureWindowImage() const; 64 65 HWND hwnd_; 66 TaskbarWindowThumbnailerDelegateWin* delegate_; // Weak, owns us. 67 scoped_ptr<SkBitmap> capture_bitmap_; 68 69 DISALLOW_COPY_AND_ASSIGN(TaskbarWindowThumbnailerWin); 70 }; 71 72 #endif // CHROME_BROWSER_UI_VIEWS_PANELS_TASKBAR_WINDOW_THUMBNAILER_WIN_H_ 73