16c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org/* 26c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. 36c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org * 46c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org * Use of this source code is governed by a BSD-style license 56c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org * that can be found in the LICENSE file in the root of the source 66c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org * tree. An additional intellectual property rights grant can be found 76c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org * in the file PATENTS. All contributing project authors may 86c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org * be found in the AUTHORS file in the root of the source tree. 96c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org */ 106c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org 116c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org#ifndef WEBRTC_MODULES_DESKTOP_CAPTURE_MAC_DESKTOP_CONFIGURATION_H_ 126c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org#define WEBRTC_MODULES_DESKTOP_CAPTURE_MAC_DESKTOP_CONFIGURATION_H_ 136c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org 146c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org#include <ApplicationServices/ApplicationServices.h> 156c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org#include <Carbon/Carbon.h> 166c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org#include <vector> 176c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org 186c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org#include "webrtc/typedefs.h" 196c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org#include "webrtc/modules/desktop_capture/desktop_geometry.h" 206c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org 216c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.orgnamespace webrtc { 226c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org 236c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org// Describes the configuration of a specific display. 246c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.orgstruct MacDisplayConfiguration { 256c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org MacDisplayConfiguration(); 266c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org 276c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org // Cocoa identifier for this display. 286c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org CGDirectDisplayID id; 296c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org 306c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org // Bounds of this display in Density-Independent Pixels (DIPs). 316c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org DesktopRect bounds; 326c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org 336c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org // Bounds of this display in physical pixels. 346c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org DesktopRect pixel_bounds; 356c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org 366c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org // Scale factor from DIPs to physical pixels. 376c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org float dip_to_pixel_scale; 386c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org}; 396c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org 406c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.orgtypedef std::vector<MacDisplayConfiguration> MacDisplayConfigurations; 416c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org 426c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org// Describes the configuration of the whole desktop. 436c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.orgstruct MacDesktopConfiguration { 446c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org // Used to request bottom-up or top-down coordinates. 456c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org enum Origin { BottomLeftOrigin, TopLeftOrigin }; 466c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org 476c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org MacDesktopConfiguration(); 486c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org ~MacDesktopConfiguration(); 496c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org 506c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org // Returns the desktop & display configurations in Cocoa-style "bottom-up" 516c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org // (the origin is the bottom-left of the primary monitor, and coordinates 526c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org // increase as you move up the screen) or Carbon-style "top-down" coordinates. 536c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org static MacDesktopConfiguration GetCurrent(Origin origin); 546c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org 5554ad9296e15baf36bbc485d9fe1878ba4a28ebe2jiayl@webrtc.org // Returns true if the given desktop configuration equals this one. 5654ad9296e15baf36bbc485d9fe1878ba4a28ebe2jiayl@webrtc.org bool Equals(const MacDesktopConfiguration& other); 5754ad9296e15baf36bbc485d9fe1878ba4a28ebe2jiayl@webrtc.org 581d23d5eec85f4b124b4941f7d583e52a85ad5deejiayl@webrtc.org // Returns the pointer to the display configuration with the specified id. 591d23d5eec85f4b124b4941f7d583e52a85ad5deejiayl@webrtc.org const MacDisplayConfiguration* FindDisplayConfigurationById( 601d23d5eec85f4b124b4941f7d583e52a85ad5deejiayl@webrtc.org CGDirectDisplayID id); 611d23d5eec85f4b124b4941f7d583e52a85ad5deejiayl@webrtc.org 6274658f6b1fff3e69c2b16b8600d9e2051e505c1csergeyu@chromium.org // Bounds of the desktop excluding monitors with DPI settings different from 6374658f6b1fff3e69c2b16b8600d9e2051e505c1csergeyu@chromium.org // the main monitor. In Density-Independent Pixels (DIPs). 64998d063211cf856d91181e16d6eb303a1a9fd229sergeyu@chromium.org DesktopRect bounds; 656c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org 6674658f6b1fff3e69c2b16b8600d9e2051e505c1csergeyu@chromium.org // Same as bounds, but expressed in physical pixels. 67998d063211cf856d91181e16d6eb303a1a9fd229sergeyu@chromium.org DesktopRect pixel_bounds; 686c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org 696c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org // Scale factor from DIPs to physical pixels. 706c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org float dip_to_pixel_scale; 716c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org 726c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org // Configurations of the displays making up the desktop area. 736c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org MacDisplayConfigurations displays; 746c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org}; 756c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org 766c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org} // namespace webrtc 776c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org 786c82a7ea6ea92e8c68b37112186fd928b11ddc49sergeyu@chromium.org#endif // WEBRTC_MODULES_DESKTOP_CAPTURE_MAC_DESKTOP_CONFIGURATION_H_ 79