Home | History | Annotate | Download | only in panels
      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