window.h revision 2c7d1b39b9374d2bc9bda4755fd4813db66a135c
1/*
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_
125