blob: ef9050756046e8b636d1ea9409325c336392d070 [file] [log] [blame]
// Copyright 2017 The Fuchsia 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 "garnet/lib/ui/gfx/resources/variable.h"
#include "garnet/lib/ui/gfx/util/unwrap.h"
#include "garnet/lib/ui/scenic/util/error_reporter.h"
namespace scenic_impl {
namespace gfx {
const ResourceTypeInfo Variable::kTypeInfo = {ResourceType::kVariable,
"Variable"};
Variable::Variable(Session* session, ResourceId id)
: Resource(session, id, Variable::kTypeInfo) {}
Variable::~Variable() {}
template <::fuchsia::ui::gfx::Value::Tag VT, typename T>
TypedVariable<VT, T>::TypedVariable(Session* session, ResourceId id)
: Variable(session, id),
value_() // Initialize |value_| to its type's default value.
{}
template <::fuchsia::ui::gfx::Value::Tag VT, typename T>
void TypedVariable<VT, T>::SetValue(T value) {
value_ = value;
for (auto listener : listeners_)
listener->OnVariableValueChanged(this);
}
template <::fuchsia::ui::gfx::Value::Tag VT, typename T>
bool TypedVariable<VT, T>::SetValue(const ::fuchsia::ui::gfx::Value& value) {
bool success = Unwrap(value, &value_);
FXL_DCHECK(success);
for (auto listener : listeners_)
listener->OnVariableValueChanged(this);
return success;
}
template <::fuchsia::ui::gfx::Value::Tag VT, typename T>
void TypedVariable<VT, T>::Accept(class ResourceVisitor* visitor){};
// Explicitly instantiate all the classes in Scenic that use the Variable<>
// template.
template class TypedVariable<::fuchsia::ui::gfx::Value::Tag::kVector1, float>;
template class TypedVariable<::fuchsia::ui::gfx::Value::Tag::kVector2,
escher::vec2>;
template class TypedVariable<::fuchsia::ui::gfx::Value::Tag::kVector3,
escher::vec3>;
template class TypedVariable<::fuchsia::ui::gfx::Value::Tag::kVector4,
escher::vec4>;
template class TypedVariable<::fuchsia::ui::gfx::Value::Tag::kMatrix4x4,
escher::mat4>;
template class TypedVariable<::fuchsia::ui::gfx::Value::Tag::kQuaternion,
escher::quat>;
// template class TypedVariable<::fuchsia::ui::gfx::Value::Tag::kTransform,
// escher::Transform>;
} // namespace gfx
} // namespace scenic_impl