blob: d96102652481b5620667f42d0c8c8a48bed521e4 [file] [log] [blame]
henrike@webrtc.orgf0488722014-05-13 18:00:26 +00001/*
2 * Copyright 2004 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#ifndef WEBRTC_BASE_WINDOW_H_
12#define WEBRTC_BASE_WINDOW_H_
13
14#include "webrtc/base/stringencode.h"
15
16// Define platform specific window types.
17#if defined(WEBRTC_LINUX) && !defined(WEBRTC_ANDROID)
18typedef unsigned long Window; // Avoid include <X11/Xlib.h>.
19#elif defined(WEBRTC_WIN)
20// We commonly include win32.h in webrtc/base so just include it here.
21#include "webrtc/base/win32.h" // Include HWND, HMONITOR.
22#elif defined(WEBRTC_MAC) && !defined(WEBRTC_IOS)
23typedef unsigned int CGWindowID;
24typedef unsigned int CGDirectDisplayID;
25#endif
26
27namespace rtc {
28
29class WindowId {
30 public:
31 // Define WindowT for each platform.
32#if defined(WEBRTC_LINUX) && !defined(WEBRTC_ANDROID)
33 typedef Window WindowT;
34#elif defined(WEBRTC_WIN)
35 typedef HWND WindowT;
36#elif defined(WEBRTC_MAC) && !defined(WEBRTC_IOS)
37 typedef CGWindowID WindowT;
38#else
39 typedef unsigned int WindowT;
40#endif
41
42 static WindowId Cast(uint64 id) {
43#if defined(WEBRTC_WIN)
44 return WindowId(reinterpret_cast<WindowId::WindowT>(id));
45#else
46 return WindowId(static_cast<WindowId::WindowT>(id));
47#endif
48 }
49
50 static uint64 Format(const WindowT& id) {
51#if defined(WEBRTC_WIN)
52 return static_cast<uint64>(reinterpret_cast<uintptr_t>(id));
53#else
54 return static_cast<uint64>(id);
55#endif
56 }
57
58 WindowId() : id_(0) {}
59 WindowId(const WindowT& id) : id_(id) {} // NOLINT
60 const WindowT& id() const { return id_; }
61 bool IsValid() const { return id_ != 0; }
62 bool Equals(const WindowId& other) const {
63 return id_ == other.id();
64 }
65
66 private:
67 WindowT id_;
68};
69
70class DesktopId {
71 public:
72 // Define DesktopT for each platform.
73#if defined(WEBRTC_LINUX) && !defined(WEBRTC_ANDROID)
74 typedef Window DesktopT;
75#elif defined(WEBRTC_WIN)
76 typedef HMONITOR DesktopT;
77#elif defined(WEBRTC_MAC) && !defined(WEBRTC_IOS)
78 typedef CGDirectDisplayID DesktopT;
79#else
80 typedef unsigned int DesktopT;
81#endif
82
83 static DesktopId Cast(int id, int index) {
84#if defined(WEBRTC_WIN)
85 return DesktopId(reinterpret_cast<DesktopId::DesktopT>(id), index);
86#else
87 return DesktopId(static_cast<DesktopId::DesktopT>(id), index);
88#endif
89 }
90
91 DesktopId() : id_(0), index_(-1) {}
92 DesktopId(const DesktopT& id, int index) // NOLINT
93 : id_(id), index_(index) {
94 }
95 const DesktopT& id() const { return id_; }
96 int index() const { return index_; }
97 bool IsValid() const { return index_ != -1; }
98 bool Equals(const DesktopId& other) const {
99 return id_ == other.id() && index_ == other.index();
100 }
101
102 private:
103 // Id is the platform specific desktop identifier.
104 DesktopT id_;
105 // Index is the desktop index as enumerated by each platform.
106 // Desktop capturer typically takes the index instead of id.
107 int index_;
108};
109
110// Window event types.
111enum WindowEvent {
112 WE_RESIZE = 0,
113 WE_CLOSE = 1,
114 WE_MINIMIZE = 2,
115 WE_RESTORE = 3,
116};
117
118inline std::string ToString(const WindowId& window) {
119 return ToString(window.id());
120}
121
122} // namespace rtc
123
124#endif // WEBRTC_BASE_WINDOW_H_