taskbar_window_thumbnailer_win.h revision 868fa2fe829687343ffae624259930155e16dbd8
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 12class SkBitmap; 13 14class 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). 24class 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 private: 46 // Overridden from ui::HWNDMessageFilter: 47 virtual bool FilterMessage(HWND hwnd, 48 UINT message, 49 WPARAM w_param, 50 LPARAM l_param, 51 LRESULT* l_result) OVERRIDE; 52 53 // Message handlers. 54 bool OnDwmSendIconicThumbnail(int width, int height, LRESULT* l_result); 55 bool OnDwmSendIconicLivePreviewBitmap(LRESULT* l_result); 56 57 // Captures and returns the screenshot of the window. The caller is 58 // responsible to release the returned SkBitmap instance. 59 SkBitmap* CaptureWindowImage() const; 60 61 HWND hwnd_; 62 TaskbarWindowThumbnailerDelegateWin* delegate_; // Weak, owns us. 63 scoped_ptr<SkBitmap> capture_bitmap_; 64 65 DISALLOW_COPY_AND_ASSIGN(TaskbarWindowThumbnailerWin); 66}; 67 68#endif // CHROME_BROWSER_UI_VIEWS_PANELS_TASKBAR_WINDOW_THUMBNAILER_WIN_H_ 69