Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(408)

Unified Diff: remoting/host/desktop_shape_tracker_win.cc

Issue 1827043004: Remove shaped desktop support from remoting host and client. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « remoting/host/desktop_shape_tracker_unittest.cc ('k') | remoting/host/shaped_desktop_capturer.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: remoting/host/desktop_shape_tracker_win.cc
diff --git a/remoting/host/desktop_shape_tracker_win.cc b/remoting/host/desktop_shape_tracker_win.cc
deleted file mode 100644
index 547d9e33f4494cb7885aedc6abfc1d063d78e950..0000000000000000000000000000000000000000
--- a/remoting/host/desktop_shape_tracker_win.cc
+++ /dev/null
@@ -1,146 +0,0 @@
-// Copyright 2013 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.
-
-#include "remoting/host/desktop_shape_tracker.h"
-
-#include <stddef.h>
-
-#include <vector>
-
-#include "base/logging.h"
-#include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
-#include "base/win/scoped_gdi_object.h"
-#include "third_party/webrtc/modules/desktop_capture/desktop_capture_options.h"
-#include "third_party/webrtc/modules/desktop_capture/desktop_region.h"
-
-namespace remoting {
-
-namespace {
-
-struct EnumDesktopShapeData {
- EnumDesktopShapeData()
- : window_region(CreateRectRgn(0, 0, 0, 0)),
- desktop_region(CreateRectRgn(0, 0, 0, 0)) {
- }
- base::win::ScopedRegion window_region;
- base::win::ScopedRegion desktop_region;
-};
-
-class DesktopShapeTrackerWin : public DesktopShapeTracker {
- public:
- DesktopShapeTrackerWin();
- ~DesktopShapeTrackerWin() override;
-
- void RefreshDesktopShape() override;
- const webrtc::DesktopRegion& desktop_shape() override;
-
- private:
- // Callback passed to EnumWindows() to enumerate windows.
- static BOOL CALLBACK EnumWindowsCallback(HWND window, LPARAM lparam);
-
- // The most recently calculated desktop region.
- webrtc::DesktopRegion desktop_shape_;
-
- // Stored to compare with newly calculated desktop shapes, to avoid converting
- // to an DesktopRegion unless the shape has actually changed.
- base::win::ScopedRegion old_desktop_region_;
-
- DISALLOW_COPY_AND_ASSIGN(DesktopShapeTrackerWin);
-};
-
-DesktopShapeTrackerWin::DesktopShapeTrackerWin()
- : old_desktop_region_(CreateRectRgn(0, 0, 0, 0)) {
-}
-
-DesktopShapeTrackerWin::~DesktopShapeTrackerWin() {
-}
-
-void DesktopShapeTrackerWin::RefreshDesktopShape() {
- // Accumulate a new desktop shape from current window positions.
- scoped_ptr<EnumDesktopShapeData> shape_data(new EnumDesktopShapeData);
- if (!EnumWindows(EnumWindowsCallback, (LPARAM)shape_data.get())) {
- PLOG(ERROR) << "Failed to enumerate windows";
- desktop_shape_.Clear();
- return;
- }
-
- // If the shape has changed, refresh |desktop_shape_|.
- if (!EqualRgn(shape_data->desktop_region.get(), old_desktop_region_.get())) {
- old_desktop_region_ = std::move(shape_data->desktop_region);
-
- // Determine the size of output buffer required to receive the region.
- DWORD bytes_size = GetRegionData(old_desktop_region_.get(), 0, nullptr);
- CHECK(bytes_size != 0);
-
- // Fetch the Windows RECTs that comprise the region.
- std::vector<char> buffer(bytes_size);
- LPRGNDATA region_data = reinterpret_cast<LPRGNDATA>(buffer.data());
- DWORD result =
- GetRegionData(old_desktop_region_.get(), bytes_size, region_data);
- CHECK(result == bytes_size);
- const LPRECT rects = reinterpret_cast<LPRECT>(&region_data->Buffer[0]);
-
- // Reset |desktop_shape_| and add new rectangles into it.
- desktop_shape_.Clear();
- for (size_t i = 0; i < region_data->rdh.nCount; ++i) {
- desktop_shape_.AddRect(webrtc::DesktopRect::MakeLTRB(
- rects[i].left, rects[i].top, rects[i].right, rects[i].bottom));
- }
- }
-}
-
-const webrtc::DesktopRegion& DesktopShapeTrackerWin::desktop_shape() {
- return desktop_shape_;
-}
-
-// static
-BOOL DesktopShapeTrackerWin::EnumWindowsCallback(HWND window, LPARAM lparam) {
- EnumDesktopShapeData* data = reinterpret_cast<EnumDesktopShapeData*>(lparam);
- HRGN desktop_region = data->desktop_region.get();
- HRGN window_region = data->window_region.get();
-
- // Is the window visible?
- if (!IsWindow(window) || !IsWindowVisible(window) || IsIconic(window))
- return TRUE;
-
- // Find the desktop position of the window (including non-client-area).
- RECT window_rect;
- if (!GetWindowRect(window, &window_rect))
- return TRUE;
-
- // Find the shape of the window, in window coords.
- // GetWindowRgn will overwrite the current contents of |window_region|.
- if (GetWindowRgn(window, window_region) != ERROR) {
- // Translate the window region into desktop coordinates.
- OffsetRgn(window_region, window_rect.left, window_rect.top);
- } else {
- // Window has no shape, or an error occurred, so assume it's rectangular.
- SetRectRgn(window_region, window_rect.left, window_rect.top,
- window_rect.right, window_rect.bottom);
- }
-
- // TODO(wez): If the window is maximized then we should clip it to the
- // display on which it is maximized.
- // if (IsZoomed(window))
- // CombineRgn(window_region, window_region, screen_region, RGN_AND);
-
- // Merge the window region into the accumulated desktop region. Window
- // regions are combined together before converting the result to
- // DesktopRegion. It assumed that this approach is more efficient than
- // converting each window region individually.
- CombineRgn(desktop_region, desktop_region, window_region, RGN_OR);
-
- return TRUE;
-}
-
-} // namespace
-
-// static
-scoped_ptr<DesktopShapeTracker> DesktopShapeTracker::Create(
- webrtc::DesktopCaptureOptions options) {
- return make_scoped_ptr(new DesktopShapeTrackerWin());
-}
-
-} // namespace remoting
« no previous file with comments | « remoting/host/desktop_shape_tracker_unittest.cc ('k') | remoting/host/shaped_desktop_capturer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698