15f93d0a140515e3b8cdd1b9a4c6f5871144e5deejlmiller@webrtc.org/* 25f93d0a140515e3b8cdd1b9a4c6f5871144e5deejlmiller@webrtc.org * libjingle 35f93d0a140515e3b8cdd1b9a4c6f5871144e5deejlmiller@webrtc.org * Copyright 2012 Google Inc. 45f93d0a140515e3b8cdd1b9a4c6f5871144e5deejlmiller@webrtc.org * 55f93d0a140515e3b8cdd1b9a4c6f5871144e5deejlmiller@webrtc.org * Redistribution and use in source and binary forms, with or without 65f93d0a140515e3b8cdd1b9a4c6f5871144e5deejlmiller@webrtc.org * modification, are permitted provided that the following conditions are met: 75f93d0a140515e3b8cdd1b9a4c6f5871144e5deejlmiller@webrtc.org * 85f93d0a140515e3b8cdd1b9a4c6f5871144e5deejlmiller@webrtc.org * 1. Redistributions of source code must retain the above copyright notice, 95f93d0a140515e3b8cdd1b9a4c6f5871144e5deejlmiller@webrtc.org * this list of conditions and the following disclaimer. 105f93d0a140515e3b8cdd1b9a4c6f5871144e5deejlmiller@webrtc.org * 2. Redistributions in binary form must reproduce the above copyright notice, 115f93d0a140515e3b8cdd1b9a4c6f5871144e5deejlmiller@webrtc.org * this list of conditions and the following disclaimer in the documentation 125f93d0a140515e3b8cdd1b9a4c6f5871144e5deejlmiller@webrtc.org * and/or other materials provided with the distribution. 135f93d0a140515e3b8cdd1b9a4c6f5871144e5deejlmiller@webrtc.org * 3. The name of the author may not be used to endorse or promote products 145f93d0a140515e3b8cdd1b9a4c6f5871144e5deejlmiller@webrtc.org * derived from this software without specific prior written permission. 155f93d0a140515e3b8cdd1b9a4c6f5871144e5deejlmiller@webrtc.org * 165f93d0a140515e3b8cdd1b9a4c6f5871144e5deejlmiller@webrtc.org * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED 175f93d0a140515e3b8cdd1b9a4c6f5871144e5deejlmiller@webrtc.org * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 185f93d0a140515e3b8cdd1b9a4c6f5871144e5deejlmiller@webrtc.org * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 195f93d0a140515e3b8cdd1b9a4c6f5871144e5deejlmiller@webrtc.org * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 205f93d0a140515e3b8cdd1b9a4c6f5871144e5deejlmiller@webrtc.org * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 215f93d0a140515e3b8cdd1b9a4c6f5871144e5deejlmiller@webrtc.org * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 225f93d0a140515e3b8cdd1b9a4c6f5871144e5deejlmiller@webrtc.org * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 235f93d0a140515e3b8cdd1b9a4c6f5871144e5deejlmiller@webrtc.org * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 245f93d0a140515e3b8cdd1b9a4c6f5871144e5deejlmiller@webrtc.org * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 255f93d0a140515e3b8cdd1b9a4c6f5871144e5deejlmiller@webrtc.org * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 265f93d0a140515e3b8cdd1b9a4c6f5871144e5deejlmiller@webrtc.org */ 275f93d0a140515e3b8cdd1b9a4c6f5871144e5deejlmiller@webrtc.org 2828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org// Author: thorcarpenter@google.com (Thor Carpenter) 2928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org// 3028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org// Defines variant class ScreencastId that combines WindowId and DesktopId. 3128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 3228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org#ifndef TALK_MEDIA_BASE_SCREENCASTID_H_ 3328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org#define TALK_MEDIA_BASE_SCREENCASTID_H_ 3428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 3528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org#include <string> 3628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org#include <vector> 3728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 38d4e598d57aed714a599444a7eab5e8fdde52a950buildbot@webrtc.org#include "webrtc/base/window.h" 39d4e598d57aed714a599444a7eab5e8fdde52a950buildbot@webrtc.org#include "webrtc/base/windowpicker.h" 4028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 4128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.orgnamespace cricket { 4228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 4328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.orgclass ScreencastId; 4428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.orgtypedef std::vector<ScreencastId> ScreencastIdList; 4528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 4628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org// Used for identifying a window or desktop to be screencast. 4728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.orgclass ScreencastId { 4828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org public: 4928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org enum Type { INVALID, WINDOW, DESKTOP }; 5028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 5128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // Default constructor indicates invalid ScreencastId. 5228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org ScreencastId() : type_(INVALID) {} 53d4e598d57aed714a599444a7eab5e8fdde52a950buildbot@webrtc.org explicit ScreencastId(const rtc::WindowId& id) 5428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org : type_(WINDOW), window_(id) { 5528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org } 56d4e598d57aed714a599444a7eab5e8fdde52a950buildbot@webrtc.org explicit ScreencastId(const rtc::DesktopId& id) 5728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org : type_(DESKTOP), desktop_(id) { 5828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org } 5928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 6028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org Type type() const { return type_; } 61d4e598d57aed714a599444a7eab5e8fdde52a950buildbot@webrtc.org const rtc::WindowId& window() const { return window_; } 62d4e598d57aed714a599444a7eab5e8fdde52a950buildbot@webrtc.org const rtc::DesktopId& desktop() const { return desktop_; } 6328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 6428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // Title is an optional parameter. 6528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org const std::string& title() const { return title_; } 6628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org void set_title(const std::string& desc) { title_ = desc; } 6728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 6828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org bool IsValid() const { 6928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org if (type_ == INVALID) { 7028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org return false; 7128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org } else if (type_ == WINDOW) { 7228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org return window_.IsValid(); 7328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org } else { 7428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org return desktop_.IsValid(); 7528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org } 7628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org } 7728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org bool IsWindow() const { return type_ == WINDOW; } 7828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org bool IsDesktop() const { return type_ == DESKTOP; } 7928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org bool EqualsId(const ScreencastId& other) const { 8028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org if (type_ != other.type_) { 8128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org return false; 8228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org } 8328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org if (type_ == INVALID) { 8428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org return true; 8528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org } else if (type_ == WINDOW) { 8628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org return window_.Equals(other.window()); 8728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org } 8828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org return desktop_.Equals(other.desktop()); 8928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org } 9028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 9128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // T is assumed to be WindowDescription or DesktopDescription. 9228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org template<class T> 9328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org static cricket::ScreencastIdList Convert(const std::vector<T>& list) { 9428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org ScreencastIdList screencast_list; 9528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org screencast_list.reserve(list.size()); 9628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org for (typename std::vector<T>::const_iterator it = list.begin(); 9728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org it != list.end(); ++it) { 9828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org ScreencastId id(it->id()); 9928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org id.set_title(it->title()); 10028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org screencast_list.push_back(id); 10128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org } 10228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org return screencast_list; 10328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org } 10428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 10528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org private: 10628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org Type type_; 107d4e598d57aed714a599444a7eab5e8fdde52a950buildbot@webrtc.org rtc::WindowId window_; 108d4e598d57aed714a599444a7eab5e8fdde52a950buildbot@webrtc.org rtc::DesktopId desktop_; 10928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org std::string title_; // Optional. 11028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org}; 11128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 11228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org} // namespace cricket 11328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 11428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org#endif // TALK_MEDIA_BASE_SCREENCASTID_H_ 115