// Copyright 2013 The Flutter 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 "renderer_context_manager.h" namespace flutter { RendererContext::RendererContext() = default; RendererContext::~RendererContext() = default; RendererContextManager::RendererContextManager( std::unique_ptr context, std::unique_ptr resource_context) : context_(std::move(context)), resource_context_(std::move(resource_context)){}; RendererContextManager::~RendererContextManager() = default; RendererContextManager::RendererContextSwitch RendererContextManager::MakeCurrent(std::unique_ptr context) { return RendererContextManager::RendererContextSwitch(*this, std::move(context)); }; RendererContextManager::RendererContextSwitch RendererContextManager::FlutterMakeCurrent() { return MakeCurrent(std::move(context_)); }; RendererContextManager::RendererContextSwitch RendererContextManager::FlutterResourceMakeCurrent() { return MakeCurrent(std::move(resource_context_)); }; bool RendererContextManager::PushContext( std::unique_ptr context) { if (current_ == nullptr) { current_ = std::move(context); return current_->SetCurrent(); } stored_.push_back(std::move(current_)); bool result = context->SetCurrent(); current_ = std::move(context); return result; }; void RendererContextManager::PopContext() { if (stored_.empty()) { current_->RemoveCurrent(); return; } current_ = std::move(stored_.back()); current_->SetCurrent(); stored_.pop_back(); }; RendererContextManager::RendererContextSwitch::RendererContextSwitch( RendererContextManager& manager, std::unique_ptr context) : manager_(manager) { bool result = manager_.PushContext(std::move(context)); result_ = result; }; RendererContextManager::RendererContextSwitch::~RendererContextSwitch() { manager_.PopContext(); }; bool RendererContextManager::RendererContextSwitch::GetResult() { return result_; }; } // namespace flutter