webrtc_m130/modules/desktop_capture/mac/desktop_configuration.h
braveyao ad7f6e5ccf [desktopCapture Mac] Continue screen capture at graphic cards switching
The MBP having both discrete and integrated graphic cards will do
automate graphics switching by default. When it switches from discrete to
integrated one, the current display ID of the built-in display will
change and this will cause screen capture stops.
So make screen capture of built-in display continuing even if its display
ID is changed.

Bug: chromium:836979
Change-Id: If4f2d04d99a2690ccd6f894d94e6f8ff58ba2ec8
Reviewed-on: https://webrtc-review.googlesource.com/72603
Reviewed-by: Jamie Walch <jamiewalch@chromium.org>
Commit-Queue: Brave Yao <braveyao@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23048}
2018-04-27 04:07:05 +00:00

96 lines
3.4 KiB
C++

/*
* Copyright (c) 2013 The WebRTC project authors. All Rights Reserved.
*
* Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source
* tree. An additional intellectual property rights grant can be found
* in the file PATENTS. All contributing project authors may
* be found in the AUTHORS file in the root of the source tree.
*/
#ifndef MODULES_DESKTOP_CAPTURE_MAC_DESKTOP_CONFIGURATION_H_
#define MODULES_DESKTOP_CAPTURE_MAC_DESKTOP_CONFIGURATION_H_
#include <ApplicationServices/ApplicationServices.h>
#include <vector>
#include "typedefs.h" // NOLINT(build/include)
#include "modules/desktop_capture/desktop_geometry.h"
namespace webrtc {
// Describes the configuration of a specific display.
struct MacDisplayConfiguration {
MacDisplayConfiguration();
MacDisplayConfiguration(const MacDisplayConfiguration& other);
MacDisplayConfiguration(MacDisplayConfiguration&& other);
~MacDisplayConfiguration();
MacDisplayConfiguration& operator=(const MacDisplayConfiguration& other);
MacDisplayConfiguration& operator=(MacDisplayConfiguration&& other);
// Cocoa identifier for this display.
CGDirectDisplayID id = 0;
// Bounds of this display in Density-Independent Pixels (DIPs).
DesktopRect bounds;
// Bounds of this display in physical pixels.
DesktopRect pixel_bounds;
// Scale factor from DIPs to physical pixels.
float dip_to_pixel_scale = 1.0f;
// Display type, built-in or external.
bool is_builtin;
};
typedef std::vector<MacDisplayConfiguration> MacDisplayConfigurations;
// Describes the configuration of the whole desktop.
struct MacDesktopConfiguration {
// Used to request bottom-up or top-down coordinates.
enum Origin { BottomLeftOrigin, TopLeftOrigin };
MacDesktopConfiguration();
MacDesktopConfiguration(const MacDesktopConfiguration& other);
MacDesktopConfiguration(MacDesktopConfiguration&& other);
~MacDesktopConfiguration();
MacDesktopConfiguration& operator=(const MacDesktopConfiguration& other);
MacDesktopConfiguration& operator=(MacDesktopConfiguration&& other);
// Returns the desktop & display configurations.
// If BottomLeftOrigin is used, the output is in Cocoa-style "bottom-up"
// (the origin is the bottom-left of the primary monitor, and coordinates
// increase as you move up the screen). Otherwise, the configuration will be
// converted to follow top-left coordinate system as Windows and X11.
static MacDesktopConfiguration GetCurrent(Origin origin);
// Returns true if the given desktop configuration equals this one.
bool Equals(const MacDesktopConfiguration& other);
// If |id| corresponds to the built-in display, return its configuration,
// otherwise return the configuration for the display with the specified id,
// or nullptr if no such display exists.
const MacDisplayConfiguration* FindDisplayConfigurationById(
CGDirectDisplayID id);
// Bounds of the desktop excluding monitors with DPI settings different from
// the main monitor. In Density-Independent Pixels (DIPs).
DesktopRect bounds;
// Same as bounds, but expressed in physical pixels.
DesktopRect pixel_bounds;
// Scale factor from DIPs to physical pixels.
float dip_to_pixel_scale = 1.0f;
// Configurations of the displays making up the desktop area.
MacDisplayConfigurations displays;
};
} // namespace webrtc
#endif // MODULES_DESKTOP_CAPTURE_MAC_DESKTOP_CONFIGURATION_H_