1ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org/* 2ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * Copyright 2004 The WebRTC Project Authors. All rights reserved. 3ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * 4ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * Use of this source code is governed by a BSD-style license 5ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * that can be found in the LICENSE file in the root of the source 6ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * tree. An additional intellectual property rights grant can be found 7ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * in the file PATENTS. All contributing project authors may 8ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org * be found in the AUTHORS file in the root of the source tree. 9ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org */ 10ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 11ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org#ifndef WEBRTC_BASE_WINDOW_H_ 12ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org#define WEBRTC_BASE_WINDOW_H_ 13ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 14ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org#include "webrtc/base/basictypes.h" 15ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org#include "webrtc/base/stringencode.h" 16ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 17ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org// Define platform specific window types. 18ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org#if defined(WEBRTC_LINUX) && !defined(WEBRTC_ANDROID) 19ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.orgtypedef unsigned long Window; // Avoid include <X11/Xlib.h>. 20ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org#elif defined(WEBRTC_WIN) 21ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org// We commonly include win32.h in webrtc/base so just include it here. 22ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org#include "webrtc/base/win32.h" // Include HWND, HMONITOR. 23ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org#elif defined(WEBRTC_MAC) && !defined(WEBRTC_IOS) 24ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.orgtypedef unsigned int CGWindowID; 25ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.orgtypedef unsigned int CGDirectDisplayID; 26ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org#endif 27ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 28a9aa5fa8ae2a2b43a94e6462ded2cd51445e9ee3ager@chromium.orgnamespace rtc { 29a9aa5fa8ae2a2b43a94e6462ded2cd51445e9ee3ager@chromium.org 30ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.orgclass WindowId { 31ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org public: 32ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org // Define WindowT for each platform. 33ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org#if defined(WEBRTC_LINUX) && !defined(WEBRTC_ANDROID) 34ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org typedef Window WindowT; 35ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org#elif defined(WEBRTC_WIN) 36ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org typedef HWND WindowT; 37ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org#elif defined(WEBRTC_MAC) && !defined(WEBRTC_IOS) 38ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org typedef CGWindowID WindowT; 399bf7aff6cc5ed8807b7b2abc11b6cf77b928ded1machenbach@chromium.org#else 40ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org typedef unsigned int WindowT; 419bf7aff6cc5ed8807b7b2abc11b6cf77b928ded1machenbach@chromium.org#endif 429bf7aff6cc5ed8807b7b2abc11b6cf77b928ded1machenbach@chromium.org 43ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org static WindowId Cast(uint64 id) { 44ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org#if defined(WEBRTC_WIN) 45ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org return WindowId(reinterpret_cast<WindowId::WindowT>(id)); 46ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org#else 479bf7aff6cc5ed8807b7b2abc11b6cf77b928ded1machenbach@chromium.org return WindowId(static_cast<WindowId::WindowT>(id)); 48ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org#endif 49ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org } 50ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 51ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org static uint64 Format(const WindowT& id) { 52ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org#if defined(WEBRTC_WIN) 539bf7aff6cc5ed8807b7b2abc11b6cf77b928ded1machenbach@chromium.org return static_cast<uint64>(reinterpret_cast<uintptr_t>(id)); 54ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org#else 559bf7aff6cc5ed8807b7b2abc11b6cf77b928ded1machenbach@chromium.org return static_cast<uint64>(id); 569bf7aff6cc5ed8807b7b2abc11b6cf77b928ded1machenbach@chromium.org#endif 57ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org } 58ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 59ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org WindowId() : id_(0) {} 60ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org WindowId(const WindowT& id) : id_(id) {} // NOLINT 619bf7aff6cc5ed8807b7b2abc11b6cf77b928ded1machenbach@chromium.org const WindowT& id() const { return id_; } 62ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org bool IsValid() const { return id_ != 0; } 63ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org bool Equals(const WindowId& other) const { 64ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org return id_ == other.id(); 65ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org } 66ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 67ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org private: 68ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org WindowT id_; 699bf7aff6cc5ed8807b7b2abc11b6cf77b928ded1machenbach@chromium.org}; 70ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 71ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.orgclass DesktopId { 72a9aa5fa8ae2a2b43a94e6462ded2cd51445e9ee3ager@chromium.org public: 73d236f4d96b5dd21acc5ec57f4e50fa97cdd97bb6ricow@chromium.org // Define DesktopT for each platform. 74d236f4d96b5dd21acc5ec57f4e50fa97cdd97bb6ricow@chromium.org#if defined(WEBRTC_LINUX) && !defined(WEBRTC_ANDROID) 75a9aa5fa8ae2a2b43a94e6462ded2cd51445e9ee3ager@chromium.org typedef Window DesktopT; 76a9aa5fa8ae2a2b43a94e6462ded2cd51445e9ee3ager@chromium.org#elif defined(WEBRTC_WIN) 779bf7aff6cc5ed8807b7b2abc11b6cf77b928ded1machenbach@chromium.org typedef HMONITOR DesktopT; 78ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org#elif defined(WEBRTC_MAC) && !defined(WEBRTC_IOS) 79ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org typedef CGDirectDisplayID DesktopT; 809bf7aff6cc5ed8807b7b2abc11b6cf77b928ded1machenbach@chromium.org#else 819bf7aff6cc5ed8807b7b2abc11b6cf77b928ded1machenbach@chromium.org typedef unsigned int DesktopT; 829bf7aff6cc5ed8807b7b2abc11b6cf77b928ded1machenbach@chromium.org#endif 839bf7aff6cc5ed8807b7b2abc11b6cf77b928ded1machenbach@chromium.org 84ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org static DesktopId Cast(int id, int index) { 85ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org#if defined(WEBRTC_WIN) 86ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org return DesktopId(reinterpret_cast<DesktopId::DesktopT>(id), index); 879bf7aff6cc5ed8807b7b2abc11b6cf77b928ded1machenbach@chromium.org#else 889bf7aff6cc5ed8807b7b2abc11b6cf77b928ded1machenbach@chromium.org return DesktopId(static_cast<DesktopId::DesktopT>(id), index); 89ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org#endif 90ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org } 91ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 92ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org DesktopId() : id_(0), index_(-1) {} 93ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org DesktopId(const DesktopT& id, int index) // NOLINT 94ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org : id_(id), index_(index) { 95ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org } 96ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org const DesktopT& id() const { return id_; } 97ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org int index() const { return index_; } 98ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org bool IsValid() const { return index_ != -1; } 99ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org bool Equals(const DesktopId& other) const { 100ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org return id_ == other.id() && index_ == other.index(); 1012356e6fbe66ac3aa027b61cb43a3c3619b3c3a5evegorov@chromium.org } 102ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 103ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org private: 104ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org // Id is the platform specific desktop identifier. 105ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org DesktopT id_; 106ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org // Index is the desktop index as enumerated by each platform. 107ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org // Desktop capturer typically takes the index instead of id. 108ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org int index_; 109ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org}; 110ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 111ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org// Window event types. 112ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.orgenum WindowEvent { 113ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org WE_RESIZE = 0, 114ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org WE_CLOSE = 1, 1159bf7aff6cc5ed8807b7b2abc11b6cf77b928ded1machenbach@chromium.org WE_MINIMIZE = 2, 116ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org WE_RESTORE = 3, 117ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org}; 118ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org 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