// Copyright 2015 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "mojo/services/gfx/composition/cpp/formatting.h" #include namespace mojo { namespace gfx { namespace composition { class Delimiter { public: Delimiter(std::ostream& os) : os_(os) {} std::ostream& Append() { if (need_comma_) os_ << ", "; else need_comma_ = true; return os_; } private: std::ostream& os_; bool need_comma_ = false; }; std::ostream& operator<<(std::ostream& os, const mojo::gfx::composition::SceneToken& value) { return os << "{value=" << value.value << "}"; } std::ostream& operator<<(std::ostream& os, const mojo::gfx::composition::SceneUpdate& value) { os << "{"; Delimiter d(os); if (value.clear_resources) { d.Append() << "clear_resources=true"; } if (value.clear_nodes) { d.Append() << "clear_nodes=true"; } if (value.resources) { d.Append() << "resources=" << value.resources; } if (value.nodes) { d.Append() << "nodes=" << value.nodes; } os << "}"; return os; } std::ostream& operator<<(std::ostream& os, const mojo::gfx::composition::SceneMetadata& value) { return os << "{version=" << value.version << ", presentation_time=" << value.presentation_time << "}"; } std::ostream& operator<<(std::ostream& os, const mojo::gfx::composition::Resource& value) { os << "{"; if (value.is_scene()) { os << "scene=" << value.get_scene(); } else if (value.is_mailbox_texture()) { os << "mailbox_texture=" << value.get_mailbox_texture(); } else { os << "???"; } return os << "}"; } std::ostream& operator<<(std::ostream& os, const mojo::gfx::composition::SceneResource& value) { return os << "{scene_token=" << value.scene_token << "}"; } std::ostream& operator<<( std::ostream& os, const mojo::gfx::composition::MailboxTextureResource& value) { return os << "{sync_point=" << value.sync_point << ", size=" << value.size << "}"; } std::ostream& operator<<(std::ostream& os, const mojo::gfx::composition::Node& value) { os << "{"; Delimiter d(os); if (value.content_transform) d.Append() << "content_transform=" << value.content_transform; if (value.content_clip) d.Append() << "content_clip=" << value.content_clip; if (value.hit_test_behavior) d.Append() << "hit_test_behavior=" << value.hit_test_behavior; if (value.op) d.Append() << "op=" << value.op; d.Append() << "combinator=" << &value.combinator; if (value.child_node_ids) d.Append() << "child_node_ids=" << value.child_node_ids; return os << "}"; } std::ostream& operator<<( std::ostream& os, const mojo::gfx::composition::Node::Combinator* value) { switch (*value) { case mojo::gfx::composition::Node::Combinator::MERGE: return os << "MERGE"; case mojo::gfx::composition::Node::Combinator::PRUNE: return os << "PRUNE"; case mojo::gfx::composition::Node::Combinator::FALLBACK: return os << "FALLBACK"; default: return os << "???"; } } std::ostream& operator<<(std::ostream& os, const mojo::gfx::composition::NodeOp& value) { os << "{"; if (value.is_rect()) { os << "rect=" << value.get_rect(); } else if (value.is_image()) { os << "image=" << value.get_image(); } else if (value.is_scene()) { os << "scene=" << value.get_scene(); } else if (value.is_layer()) { os << "layer=" << value.get_layer(); } else { os << "???"; } return os << "}"; } std::ostream& operator<<(std::ostream& os, const mojo::gfx::composition::RectNodeOp& value) { return os << "{content_rect=" << value.content_rect << ", color=" << value.color << "}"; } std::ostream& operator<<(std::ostream& os, const mojo::gfx::composition::ImageNodeOp& value) { return os << "{content_rect=" << value.content_rect << ", image_rect=" << value.image_rect << ", image_resource_id=" << value.image_resource_id << ", blend=" << value.blend << "}"; } std::ostream& operator<<(std::ostream& os, const mojo::gfx::composition::SceneNodeOp& value) { return os << "{scene_resource_id=" << value.scene_resource_id << ", scene_version=" << value.scene_version << "}"; } std::ostream& operator<<(std::ostream& os, const mojo::gfx::composition::LayerNodeOp& value) { return os << "{layer_size=" << value.layer_size << ", blend=" << value.blend << "}"; } std::ostream& operator<<(std::ostream& os, const mojo::gfx::composition::Color& value) { return os << "{red=" << static_cast(value.red) << ", green=" << static_cast(value.green) << ", blue=" << static_cast(value.blue) << ", alpha=" << static_cast(value.alpha) << "}"; } std::ostream& operator<<(std::ostream& os, const mojo::gfx::composition::Blend& value) { return os << "{alpha=" << static_cast(value.alpha) << "}"; } std::ostream& operator<<(std::ostream& os, const mojo::gfx::composition::FrameInfo& value) { return os << "{frame_time=" << value.frame_time << ", frame_interval=" << value.frame_interval << ", frame_deadline=" << value.frame_deadline << "}"; } std::ostream& operator<<(std::ostream& os, const mojo::gfx::composition::HitTestBehavior& value) { return os << "{visibility=" << &value.visibility << ", prune" << value.prune << ", hit_rect=" << value.hit_rect << "}"; } std::ostream& operator<<( std::ostream& os, const mojo::gfx::composition::HitTestBehavior::Visibility* value) { switch (*value) { case mojo::gfx::composition::HitTestBehavior::Visibility::OPAQUE: return os << "OPAQUE"; case mojo::gfx::composition::HitTestBehavior::Visibility::TRANSLUCENT: return os << "TRANSLUCENT"; case mojo::gfx::composition::HitTestBehavior::Visibility::INVISIBLE: return os << "INVISIBLE"; default: return os << "???"; } } std::ostream& operator<<(std::ostream& os, const mojo::gfx::composition::HitTestResult& value) { return os << "{root=" << value.root << "}"; } std::ostream& operator<<(std::ostream& os, const mojo::gfx::composition::Hit& value) { os << "{"; if (value.is_scene()) { os << "scene=" << value.get_scene(); } else if (value.is_node()) { os << "node=" << value.get_node(); } else { os << "???"; } return os << "}"; } std::ostream& operator<<(std::ostream& os, const mojo::gfx::composition::SceneHit& value) { return os << "{scene_token=" << value.scene_token << ", scene_version=" << value.scene_version << ", hits=" << value.hits << "}"; } std::ostream& operator<<(std::ostream& os, const mojo::gfx::composition::NodeHit& value) { return os << "{node_id=" << value.node_id << ", intersection=" << value.intersection << "}"; } } // namespace composition } // namespace gfx } // namespace mojo