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