#include "chrome/browser/vr/elements/transient_element.h"
#include "base/functional/callback_helpers.h"
namespace vr {
TransientElement::TransientElement(const base::TimeDelta& timeout)
: timeout_(timeout) {
SetVisibleImmediately(false);
}
TransientElement::~TransientElement() = default;
void TransientElement::SetVisible(bool visible) {
bool will_be_visible = GetTargetOpacity() == opacity_when_visible();
if (visible == will_be_visible)
return;
if (visible)
Reset();
super::SetVisible(visible);
}
void TransientElement::SetVisibleImmediately(bool visible) {
bool will_be_visible = GetTargetOpacity() == opacity_when_visible();
if (!will_be_visible && visible)
Reset();
super::SetVisibleImmediately(visible);
}
void TransientElement::RefreshVisible() {
if (GetTargetOpacity() != opacity_when_visible())
return;
Reset();
}
void TransientElement::Reset() {
set_visible_time_ = base::TimeTicks();
}
SimpleTransientElement::SimpleTransientElement(const base::TimeDelta& timeout)
: super(timeout) {}
SimpleTransientElement::~SimpleTransientElement() = default;
bool SimpleTransientElement::OnBeginFrame(const gfx::Transform& head_pose) {
if (GetTargetOpacity() != opacity_when_visible())
return false;
if (set_visible_time_.is_null() && opacity() > 0.0f)
set_visible_time_ = last_frame_time();
base::TimeDelta duration = last_frame_time() - set_visible_time_;
if (!set_visible_time_.is_null() && duration >= timeout_) {
super::SetVisible(false);
return true;
}
return false;
}
}