mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
75 lines
2.1 KiB
C++
75 lines
2.1 KiB
C++
// 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<RendererContext> context,
|
|
std::unique_ptr<RendererContext> resource_context)
|
|
: context_(std::move(context)),
|
|
resource_context_(std::move(resource_context)){};
|
|
|
|
RendererContextManager::~RendererContextManager() = default;
|
|
|
|
RendererContextManager::RendererContextSwitch
|
|
RendererContextManager::MakeCurrent(std::unique_ptr<RendererContext> 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<RendererContext> 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<RendererContext> 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
|