blob: e291e6ee99afd83dcac1d032c39ea0a4a127e2e7 [file] [log] [blame]
// Copyright 2012 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 "cc/layers/heads_up_display_layer.h"
#include <algorithm>
#include "base/trace_event/trace_event.h"
#include "cc/layers/heads_up_display_layer_impl.h"
#include "cc/trees/layer_tree_host.h"
namespace cc {
scoped_refptr<HeadsUpDisplayLayer> HeadsUpDisplayLayer::Create() {
return base::WrapRefCounted(new HeadsUpDisplayLayer());
}
HeadsUpDisplayLayer::HeadsUpDisplayLayer()
: typeface_(SkTypeface::MakeFromName("times new roman", SkFontStyle())) {
if (!typeface_) {
typeface_ = SkTypeface::MakeFromName("monospace", SkFontStyle::Bold());
}
DCHECK(typeface_.get());
SetIsDrawable(true);
UpdateDrawsContent(HasDrawableContent());
}
HeadsUpDisplayLayer::~HeadsUpDisplayLayer() = default;
void HeadsUpDisplayLayer::UpdateLocationAndSize(
const gfx::Size& device_viewport,
float device_scale_factor) {
gfx::Size device_viewport_in_layout_pixels =
gfx::Size(device_viewport.width() / device_scale_factor,
device_viewport.height() / device_scale_factor);
gfx::Size bounds;
gfx::Transform matrix;
matrix.MakeIdentity();
if (layer_tree_host()->GetDebugState().ShowHudRects()) {
bounds = device_viewport_in_layout_pixels;
} else {
// If the HUD is not displaying full-viewport rects (e.g., it is showing the
// FPS meter), use a fixed size.
constexpr int kDefaultHUDSize = 256;
bounds.SetSize(kDefaultHUDSize, kDefaultHUDSize);
// Put the HUD on the top-left side instead of the top-right side because
// the HUD sometimes can be drawn on out of the screen when it works on
// embedded devices.
matrix.Translate(0.0, 0.0);
}
SetBounds(bounds);
SetTransform(matrix);
}
bool HeadsUpDisplayLayer::HasDrawableContent() const {
return true;
}
std::unique_ptr<LayerImpl> HeadsUpDisplayLayer::CreateLayerImpl(
LayerTreeImpl* tree_impl) {
return HeadsUpDisplayLayerImpl::Create(tree_impl, id());
}
const std::vector<gfx::Rect>& HeadsUpDisplayLayer::LayoutShiftRects() const {
return layout_shift_rects_;
}
void HeadsUpDisplayLayer::SetLayoutShiftRects(
const std::vector<gfx::Rect>& rects) {
layout_shift_rects_ = rects;
}
void HeadsUpDisplayLayer::PushPropertiesTo(LayerImpl* layer) {
Layer::PushPropertiesTo(layer);
TRACE_EVENT0("cc", "HeadsUpDisplayLayer::PushPropertiesTo");
HeadsUpDisplayLayerImpl* layer_impl =
static_cast<HeadsUpDisplayLayerImpl*>(layer);
layer_impl->SetHUDTypeface(typeface_);
layer_impl->SetLayoutShiftRects(layout_shift_rects_);
}
} // namespace cc