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