window_finder_mac.mm (1610B)
1 /* 2 * Copyright (c) 2017 The WebRTC project authors. All Rights Reserved. 3 * 4 * Use of this source code is governed by a BSD-style license 5 * that can be found in the LICENSE file in the root of the source 6 * tree. An additional intellectual property rights grant can be found 7 * in the file PATENTS. All contributing project authors may 8 * be found in the AUTHORS file in the root of the source tree. 9 */ 10 11 #include "modules/desktop_capture/window_finder_mac.h" 12 13 #include <CoreFoundation/CoreFoundation.h> 14 15 #include <memory> 16 #include <utility> 17 18 #include "modules/desktop_capture/mac/desktop_configuration.h" 19 #include "modules/desktop_capture/mac/desktop_configuration_monitor.h" 20 #include "modules/desktop_capture/mac/window_list_utils.h" 21 22 namespace webrtc { 23 24 WindowFinderMac::WindowFinderMac( 25 webrtc::scoped_refptr<DesktopConfigurationMonitor> configuration_monitor) 26 : configuration_monitor_(std::move(configuration_monitor)) {} 27 WindowFinderMac::~WindowFinderMac() = default; 28 29 WindowId WindowFinderMac::GetWindowUnderPoint(DesktopVector point) { 30 WindowId id = kNullWindowId; 31 GetWindowList( 32 [&id, point](CFDictionaryRef window) { 33 DesktopRect bounds; 34 bounds = GetWindowBounds(window); 35 if (bounds.Contains(point)) { 36 id = GetWindowId(window); 37 return false; 38 } 39 return true; 40 }, 41 true, 42 true); 43 return id; 44 } 45 46 // static 47 std::unique_ptr<WindowFinder> WindowFinder::Create( 48 const WindowFinder::Options& options) { 49 return std::make_unique<WindowFinderMac>(options.configuration_monitor); 50 } 51 52 } // namespace webrtc