• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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)
18 typedef 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)
23 typedef unsigned int CGWindowID;
24 typedef unsigned int CGDirectDisplayID;
25 #endif
26 
27 namespace rtc {
28 
29 class 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 
Cast(uint64 id)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 
Format(const WindowT & id)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 
WindowId()58   WindowId() : id_(0) {}
WindowId(const WindowT & id)59   WindowId(const WindowT& id) : id_(id) {}  // NOLINT
id()60   const WindowT& id() const { return id_; }
IsValid()61   bool IsValid() const { return id_ != 0; }
Equals(const WindowId & other)62   bool Equals(const WindowId& other) const {
63     return id_ == other.id();
64   }
65 
66  private:
67   WindowT id_;
68 };
69 
70 class 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 
Cast(int id,int index)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 
DesktopId()91   DesktopId() : id_(0), index_(-1) {}
DesktopId(const DesktopT & id,int index)92   DesktopId(const DesktopT& id, int index)  // NOLINT
93       : id_(id), index_(index) {
94   }
id()95   const DesktopT& id() const { return id_; }
index()96   int index() const { return index_; }
IsValid()97   bool IsValid() const { return index_ != -1; }
Equals(const DesktopId & other)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.
111 enum WindowEvent {
112   WE_RESIZE = 0,
113   WE_CLOSE = 1,
114   WE_MINIMIZE = 2,
115   WE_RESTORE = 3,
116 };
117 
ToString(const WindowId & window)118 inline std::string ToString(const WindowId& window) {
119   return ToString(window.id());
120 }
121 
122 }  // namespace rtc
123 
124 #endif  // WEBRTC_BASE_WINDOW_H_
125