summaryrefslogtreecommitdiffstats
path: root/chrome/browser/views/tabs/hwnd_photobooth.h
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/views/tabs/hwnd_photobooth.h')
-rw-r--r--chrome/browser/views/tabs/hwnd_photobooth.h62
1 files changed, 62 insertions, 0 deletions
diff --git a/chrome/browser/views/tabs/hwnd_photobooth.h b/chrome/browser/views/tabs/hwnd_photobooth.h
new file mode 100644
index 0000000..4de1d14
--- /dev/null
+++ b/chrome/browser/views/tabs/hwnd_photobooth.h
@@ -0,0 +1,62 @@
+// 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_VIEWS_TABS_HWND_PHOTOBOOTH_H__
+#define CHROME_BROWSER_VIEWS_TABS_HWND_PHOTOBOOTH_H__
+
+#include "base/basictypes.h"
+#include "base/gfx/rect.h"
+
+class ChromeCanvas;
+namespace ChromeViews {
+class HWNDViewContainer;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// HWNDPhotobooth
+//
+// An object that a HWND "steps into" to have its picture taken. This is used
+// to generate a full size screen shot of the contents of a HWND including
+// any child windows.
+//
+// Implementation note: This causes the HWND to be re-parented to a mostly
+// off-screen layered window.
+//
+class HWNDPhotobooth {
+ public:
+ // Creates the photo booth. Constructs a nearly off-screen window, parents
+ // the HWND, then shows it. The caller is responsible for destroying this
+ // window, since the photo-booth will detach it before it is destroyed.
+ // |canvas| is a canvas to paint the contents into, and dest_bounds is the
+ // target area in |canvas| to which painted contents will be clipped.
+ explicit HWNDPhotobooth(HWND initial_hwnd);
+
+ // Destroys the photo booth window.
+ virtual ~HWNDPhotobooth();
+
+ // Replaces the HWND in the photo booth with the specified one. The caller is
+ // responsible for destroying this HWND since it will be detached from the
+ // capture window before the capture window is destroyed.
+ void ReplaceHWND(HWND new_hwnd);
+
+ // Paints the current display image of the window into |canvas|, clipped to
+ // |target_bounds|.
+ void PaintScreenshotIntoCanvas(ChromeCanvas* canvas,
+ const gfx::Rect& target_bounds);
+
+ private:
+ // Creates a mostly off-screen window to contain the HWND to be captured.
+ void CreateCaptureWindow(HWND initial_hwnd);
+
+ // The nearly off-screen photo-booth layered window used to hold the HWND.
+ ChromeViews::HWNDViewContainer* capture_window_;
+
+ // The current HWND being captured.
+ HWND current_hwnd_;
+
+ DISALLOW_EVIL_CONSTRUCTORS(HWNDPhotobooth);
+};
+
+#endif // #ifndef CHROME_BROWSER_VIEWS_TABS_HWND_PHOTOBOOTH_H__
+