1c8ac17ca04897f8f5fbb5d179e8b7573f66b148ajiayl@webrtc.org/*
2c8ac17ca04897f8f5fbb5d179e8b7573f66b148ajiayl@webrtc.org *  Copyright (c) 2014 The WebRTC project authors. All Rights Reserved.
3c8ac17ca04897f8f5fbb5d179e8b7573f66b148ajiayl@webrtc.org *
4c8ac17ca04897f8f5fbb5d179e8b7573f66b148ajiayl@webrtc.org *  Use of this source code is governed by a BSD-style license
5c8ac17ca04897f8f5fbb5d179e8b7573f66b148ajiayl@webrtc.org *  that can be found in the LICENSE file in the root of the source
6c8ac17ca04897f8f5fbb5d179e8b7573f66b148ajiayl@webrtc.org *  tree. An additional intellectual property rights grant can be found
7c8ac17ca04897f8f5fbb5d179e8b7573f66b148ajiayl@webrtc.org *  in the file PATENTS.  All contributing project authors may
8c8ac17ca04897f8f5fbb5d179e8b7573f66b148ajiayl@webrtc.org *  be found in the AUTHORS file in the root of the source tree.
9c8ac17ca04897f8f5fbb5d179e8b7573f66b148ajiayl@webrtc.org */
10c8ac17ca04897f8f5fbb5d179e8b7573f66b148ajiayl@webrtc.org
11c8ac17ca04897f8f5fbb5d179e8b7573f66b148ajiayl@webrtc.org#include "webrtc/modules/desktop_capture/win/window_capture_utils.h"
12c8ac17ca04897f8f5fbb5d179e8b7573f66b148ajiayl@webrtc.org
13c8ac17ca04897f8f5fbb5d179e8b7573f66b148ajiayl@webrtc.orgnamespace webrtc {
14c8ac17ca04897f8f5fbb5d179e8b7573f66b148ajiayl@webrtc.org
15c8ac17ca04897f8f5fbb5d179e8b7573f66b148ajiayl@webrtc.orgbool
16c8ac17ca04897f8f5fbb5d179e8b7573f66b148ajiayl@webrtc.orgGetCroppedWindowRect(HWND window,
17c8ac17ca04897f8f5fbb5d179e8b7573f66b148ajiayl@webrtc.org                     DesktopRect* cropped_rect,
18c8ac17ca04897f8f5fbb5d179e8b7573f66b148ajiayl@webrtc.org                     DesktopRect* original_rect) {
19c8ac17ca04897f8f5fbb5d179e8b7573f66b148ajiayl@webrtc.org  RECT rect;
20c8ac17ca04897f8f5fbb5d179e8b7573f66b148ajiayl@webrtc.org  if (!GetWindowRect(window, &rect)) {
21c8ac17ca04897f8f5fbb5d179e8b7573f66b148ajiayl@webrtc.org    return false;
22c8ac17ca04897f8f5fbb5d179e8b7573f66b148ajiayl@webrtc.org  }
23c8ac17ca04897f8f5fbb5d179e8b7573f66b148ajiayl@webrtc.org  WINDOWPLACEMENT window_placement;
247ca277b57434afafef50dfbd371fd84fb96c7145jiayl@webrtc.org  window_placement.length = sizeof(window_placement);
25c8ac17ca04897f8f5fbb5d179e8b7573f66b148ajiayl@webrtc.org  if (!GetWindowPlacement(window, &window_placement)) {
26c8ac17ca04897f8f5fbb5d179e8b7573f66b148ajiayl@webrtc.org    return false;
27c8ac17ca04897f8f5fbb5d179e8b7573f66b148ajiayl@webrtc.org  }
28c8ac17ca04897f8f5fbb5d179e8b7573f66b148ajiayl@webrtc.org
29c8ac17ca04897f8f5fbb5d179e8b7573f66b148ajiayl@webrtc.org  *original_rect = DesktopRect::MakeLTRB(
30c8ac17ca04897f8f5fbb5d179e8b7573f66b148ajiayl@webrtc.org      rect.left, rect.top, rect.right, rect.bottom);
31c8ac17ca04897f8f5fbb5d179e8b7573f66b148ajiayl@webrtc.org
327faba36f79c1cc8f8715f1060b849fdb5fcd6629Peter Kasting  if (window_placement.showCmd == SW_SHOWMAXIMIZED) {
33c8ac17ca04897f8f5fbb5d179e8b7573f66b148ajiayl@webrtc.org    DesktopSize border = DesktopSize(GetSystemMetrics(SM_CXSIZEFRAME),
34c8ac17ca04897f8f5fbb5d179e8b7573f66b148ajiayl@webrtc.org                                     GetSystemMetrics(SM_CYSIZEFRAME));
35c8ac17ca04897f8f5fbb5d179e8b7573f66b148ajiayl@webrtc.org    *cropped_rect = DesktopRect::MakeLTRB(
36c8ac17ca04897f8f5fbb5d179e8b7573f66b148ajiayl@webrtc.org        rect.left + border.width(),
37c8ac17ca04897f8f5fbb5d179e8b7573f66b148ajiayl@webrtc.org        rect.top,
38c8ac17ca04897f8f5fbb5d179e8b7573f66b148ajiayl@webrtc.org        rect.right - border.width(),
39c8ac17ca04897f8f5fbb5d179e8b7573f66b148ajiayl@webrtc.org        rect.bottom - border.height());
40c8ac17ca04897f8f5fbb5d179e8b7573f66b148ajiayl@webrtc.org  } else {
41c8ac17ca04897f8f5fbb5d179e8b7573f66b148ajiayl@webrtc.org    *cropped_rect = *original_rect;
42c8ac17ca04897f8f5fbb5d179e8b7573f66b148ajiayl@webrtc.org  }
43c8ac17ca04897f8f5fbb5d179e8b7573f66b148ajiayl@webrtc.org  return true;
44c8ac17ca04897f8f5fbb5d179e8b7573f66b148ajiayl@webrtc.org}
45c8ac17ca04897f8f5fbb5d179e8b7573f66b148ajiayl@webrtc.org
46d848d5e74aee56f454311756dc2032fad26d79adJiayang LiuAeroChecker::AeroChecker() : dwmapi_library_(nullptr), func_(nullptr) {
47d848d5e74aee56f454311756dc2032fad26d79adJiayang Liu  // Try to load dwmapi.dll dynamically since it is not available on XP.
48d848d5e74aee56f454311756dc2032fad26d79adJiayang Liu  dwmapi_library_ = LoadLibrary(L"dwmapi.dll");
49d848d5e74aee56f454311756dc2032fad26d79adJiayang Liu  if (dwmapi_library_) {
50d848d5e74aee56f454311756dc2032fad26d79adJiayang Liu    func_ = reinterpret_cast<DwmIsCompositionEnabledFunc>(
51d848d5e74aee56f454311756dc2032fad26d79adJiayang Liu        GetProcAddress(dwmapi_library_, "DwmIsCompositionEnabled"));
52d848d5e74aee56f454311756dc2032fad26d79adJiayang Liu  }
53d848d5e74aee56f454311756dc2032fad26d79adJiayang Liu}
54d848d5e74aee56f454311756dc2032fad26d79adJiayang Liu
55d848d5e74aee56f454311756dc2032fad26d79adJiayang LiuAeroChecker::~AeroChecker() {
56d848d5e74aee56f454311756dc2032fad26d79adJiayang Liu  if (dwmapi_library_) {
57d848d5e74aee56f454311756dc2032fad26d79adJiayang Liu    FreeLibrary(dwmapi_library_);
58d848d5e74aee56f454311756dc2032fad26d79adJiayang Liu  }
59d848d5e74aee56f454311756dc2032fad26d79adJiayang Liu}
60d848d5e74aee56f454311756dc2032fad26d79adJiayang Liu
61d848d5e74aee56f454311756dc2032fad26d79adJiayang Liubool AeroChecker::IsAeroEnabled() {
62d848d5e74aee56f454311756dc2032fad26d79adJiayang Liu  BOOL result = FALSE;
63d848d5e74aee56f454311756dc2032fad26d79adJiayang Liu  if (func_) {
64d848d5e74aee56f454311756dc2032fad26d79adJiayang Liu    func_(&result);
65d848d5e74aee56f454311756dc2032fad26d79adJiayang Liu  }
66d848d5e74aee56f454311756dc2032fad26d79adJiayang Liu  return result != FALSE;
67d848d5e74aee56f454311756dc2032fad26d79adJiayang Liu}
68d848d5e74aee56f454311756dc2032fad26d79adJiayang Liu
69c8ac17ca04897f8f5fbb5d179e8b7573f66b148ajiayl@webrtc.org}  // namespace webrtc
70