1f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org/* 2f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org * Copyright 2004 The WebRTC Project Authors. All rights reserved. 3f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org * 4f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org * Use of this source code is governed by a BSD-style license 5f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org * that can be found in the LICENSE file in the root of the source 6f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org * tree. An additional intellectual property rights grant can be found 7f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org * in the file PATENTS. All contributing project authors may 8f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org * be found in the AUTHORS file in the root of the source tree. 9f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org */ 10f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 11f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org#ifndef WEBRTC_BASE_WINDOW_H_ 12f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org#define WEBRTC_BASE_WINDOW_H_ 13f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 146ae5a6d7fefff6759d338b5a3e3613e050ebaa62andrew@webrtc.org#include "webrtc/base/basictypes.h" 15f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org#include "webrtc/base/stringencode.h" 16f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 17f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org// Define platform specific window types. 18f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org#if defined(WEBRTC_LINUX) && !defined(WEBRTC_ANDROID) 19f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgtypedef unsigned long Window; // Avoid include <X11/Xlib.h>. 20f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org#elif defined(WEBRTC_WIN) 21f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org// We commonly include win32.h in webrtc/base so just include it here. 22f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org#include "webrtc/base/win32.h" // Include HWND, HMONITOR. 23f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org#elif defined(WEBRTC_MAC) && !defined(WEBRTC_IOS) 24f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgtypedef unsigned int CGWindowID; 25f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgtypedef unsigned int CGDirectDisplayID; 26f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org#endif 27f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 28f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgnamespace rtc { 29f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 30f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgclass WindowId { 31f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org public: 32f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org // Define WindowT for each platform. 33f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org#if defined(WEBRTC_LINUX) && !defined(WEBRTC_ANDROID) 34f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org typedef Window WindowT; 35f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org#elif defined(WEBRTC_WIN) 36f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org typedef HWND WindowT; 37f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org#elif defined(WEBRTC_MAC) && !defined(WEBRTC_IOS) 38f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org typedef CGWindowID WindowT; 39f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org#else 40f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org typedef unsigned int WindowT; 41f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org#endif 42f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 430c4e06b4c6107a1b94f764e279e4fb4161e905b0Peter Boström static WindowId Cast(uint64_t id) { 44f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org#if defined(WEBRTC_WIN) 45f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org return WindowId(reinterpret_cast<WindowId::WindowT>(id)); 46f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org#else 47f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org return WindowId(static_cast<WindowId::WindowT>(id)); 48f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org#endif 49f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org } 50f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 510c4e06b4c6107a1b94f764e279e4fb4161e905b0Peter Boström static uint64_t Format(const WindowT& id) { 52f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org#if defined(WEBRTC_WIN) 530c4e06b4c6107a1b94f764e279e4fb4161e905b0Peter Boström return static_cast<uint64_t>(reinterpret_cast<uintptr_t>(id)); 54f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org#else 550c4e06b4c6107a1b94f764e279e4fb4161e905b0Peter Boström return static_cast<uint64_t>(id); 56f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org#endif 57f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org } 58f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 59f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org WindowId() : id_(0) {} 60f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org WindowId(const WindowT& id) : id_(id) {} // NOLINT 61f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org const WindowT& id() const { return id_; } 62f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org bool IsValid() const { return id_ != 0; } 63f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org bool Equals(const WindowId& other) const { 64f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org return id_ == other.id(); 65f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org } 66f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 67f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org private: 68f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org WindowT id_; 69f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org}; 70f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 71f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgclass DesktopId { 72f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org public: 73f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org // Define DesktopT for each platform. 74f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org#if defined(WEBRTC_LINUX) && !defined(WEBRTC_ANDROID) 75f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org typedef Window DesktopT; 76f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org#elif defined(WEBRTC_WIN) 77f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org typedef HMONITOR DesktopT; 78f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org#elif defined(WEBRTC_MAC) && !defined(WEBRTC_IOS) 79f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org typedef CGDirectDisplayID DesktopT; 80f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org#else 81f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org typedef unsigned int DesktopT; 82f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org#endif 83f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 84f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org static DesktopId Cast(int id, int index) { 85f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org#if defined(WEBRTC_WIN) 86f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org return DesktopId(reinterpret_cast<DesktopId::DesktopT>(id), index); 87f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org#else 88f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org return DesktopId(static_cast<DesktopId::DesktopT>(id), index); 89f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org#endif 90f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org } 91f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 92f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org DesktopId() : id_(0), index_(-1) {} 93f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org DesktopId(const DesktopT& id, int index) // NOLINT 94f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org : id_(id), index_(index) { 95f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org } 96f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org const DesktopT& id() const { return id_; } 97f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org int index() const { return index_; } 98f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org bool IsValid() const { return index_ != -1; } 99f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org bool Equals(const DesktopId& other) const { 100f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org return id_ == other.id() && index_ == other.index(); 101f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org } 102f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 103f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org private: 104f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org // Id is the platform specific desktop identifier. 105f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org DesktopT id_; 106f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org // Index is the desktop index as enumerated by each platform. 107f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org // Desktop capturer typically takes the index instead of id. 108f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org int index_; 109f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org}; 110f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 111f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org// Window event types. 112f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgenum WindowEvent { 113f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org WE_RESIZE = 0, 114f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org WE_CLOSE = 1, 115f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org WE_MINIMIZE = 2, 116f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org WE_RESTORE = 3, 117f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org}; 118f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 119f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orginline std::string ToString(const WindowId& window) { 120f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org return ToString(window.id()); 121f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org} 122f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 123f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org} // namespace rtc 124f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 125f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org#endif // WEBRTC_BASE_WINDOW_H_ 126