| Index: cc/layers/painted_scrollbar_layer.cc
|
| diff --git a/cc/layers/painted_scrollbar_layer.cc b/cc/layers/painted_scrollbar_layer.cc
|
| deleted file mode 100644
|
| index 36c9f82f5a810e0bb424d64258462d313e49b6ee..0000000000000000000000000000000000000000
|
| --- a/cc/layers/painted_scrollbar_layer.cc
|
| +++ /dev/null
|
| @@ -1,313 +0,0 @@
|
| -// Copyright 2013 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/painted_scrollbar_layer.h"
|
| -
|
| -#include <algorithm>
|
| -
|
| -#include "base/auto_reset.h"
|
| -#include "base/basictypes.h"
|
| -#include "base/trace_event/trace_event.h"
|
| -#include "cc/base/math_util.h"
|
| -#include "cc/layers/painted_scrollbar_layer_impl.h"
|
| -#include "cc/resources/ui_resource_bitmap.h"
|
| -#include "cc/trees/layer_tree_host.h"
|
| -#include "cc/trees/layer_tree_impl.h"
|
| -#include "skia/ext/platform_canvas.h"
|
| -#include "skia/ext/refptr.h"
|
| -#include "third_party/skia/include/core/SkBitmap.h"
|
| -#include "third_party/skia/include/core/SkCanvas.h"
|
| -#include "third_party/skia/include/core/SkSize.h"
|
| -#include "ui/gfx/geometry/size_conversions.h"
|
| -#include "ui/gfx/skia_util.h"
|
| -
|
| -namespace cc {
|
| -
|
| -scoped_ptr<LayerImpl> PaintedScrollbarLayer::CreateLayerImpl(
|
| - LayerTreeImpl* tree_impl) {
|
| - return PaintedScrollbarLayerImpl::Create(
|
| - tree_impl, id(), scrollbar_->Orientation());
|
| -}
|
| -
|
| -scoped_refptr<PaintedScrollbarLayer> PaintedScrollbarLayer::Create(
|
| - scoped_ptr<Scrollbar> scrollbar,
|
| - int scroll_layer_id) {
|
| - return make_scoped_refptr(
|
| - new PaintedScrollbarLayer(scrollbar.Pass(), scroll_layer_id));
|
| -}
|
| -
|
| -PaintedScrollbarLayer::PaintedScrollbarLayer(scoped_ptr<Scrollbar> scrollbar,
|
| - int scroll_layer_id)
|
| - : scrollbar_(scrollbar.Pass()),
|
| - scroll_layer_id_(scroll_layer_id),
|
| - clip_layer_id_(Layer::INVALID_ID),
|
| - internal_contents_scale_(0.f),
|
| - thumb_thickness_(scrollbar_->ThumbThickness()),
|
| - thumb_length_(scrollbar_->ThumbLength()),
|
| - is_overlay_(scrollbar_->IsOverlay()),
|
| - has_thumb_(scrollbar_->HasThumb()) {
|
| - if (!scrollbar_->IsOverlay())
|
| - SetShouldScrollOnMainThread(true);
|
| -}
|
| -
|
| -PaintedScrollbarLayer::~PaintedScrollbarLayer() {}
|
| -
|
| -int PaintedScrollbarLayer::ScrollLayerId() const {
|
| - return scroll_layer_id_;
|
| -}
|
| -
|
| -void PaintedScrollbarLayer::SetScrollLayer(int layer_id) {
|
| - if (layer_id == scroll_layer_id_)
|
| - return;
|
| -
|
| - scroll_layer_id_ = layer_id;
|
| - SetNeedsFullTreeSync();
|
| -}
|
| -
|
| -void PaintedScrollbarLayer::SetClipLayer(int layer_id) {
|
| - if (layer_id == clip_layer_id_)
|
| - return;
|
| -
|
| - clip_layer_id_ = layer_id;
|
| - SetNeedsFullTreeSync();
|
| -}
|
| -
|
| -bool PaintedScrollbarLayer::OpacityCanAnimateOnImplThread() const {
|
| - return scrollbar_->IsOverlay();
|
| -}
|
| -
|
| -ScrollbarOrientation PaintedScrollbarLayer::orientation() const {
|
| - return scrollbar_->Orientation();
|
| -}
|
| -
|
| -int PaintedScrollbarLayer::MaxTextureSize() {
|
| - DCHECK(layer_tree_host());
|
| - return layer_tree_host()->GetRendererCapabilities().max_texture_size;
|
| -}
|
| -
|
| -float PaintedScrollbarLayer::ClampScaleToMaxTextureSize(float scale) {
|
| - // If the scaled bounds() is bigger than the max texture size of the
|
| - // device, we need to clamp it by rescaling, since this is used
|
| - // below to set the texture size.
|
| - gfx::Size scaled_bounds = gfx::ToCeiledSize(gfx::ScaleSize(bounds(), scale));
|
| - if (scaled_bounds.width() > MaxTextureSize() ||
|
| - scaled_bounds.height() > MaxTextureSize()) {
|
| - if (scaled_bounds.width() > scaled_bounds.height())
|
| - return (MaxTextureSize() - 1) / static_cast<float>(bounds().width());
|
| - else
|
| - return (MaxTextureSize() - 1) / static_cast<float>(bounds().height());
|
| - }
|
| - return scale;
|
| -}
|
| -
|
| -void PaintedScrollbarLayer::PushPropertiesTo(LayerImpl* layer) {
|
| - Layer::PushPropertiesTo(layer);
|
| -
|
| - PushScrollClipPropertiesTo(layer);
|
| -
|
| - PaintedScrollbarLayerImpl* scrollbar_layer =
|
| - static_cast<PaintedScrollbarLayerImpl*>(layer);
|
| -
|
| - scrollbar_layer->set_internal_contents_scale_and_bounds(
|
| - internal_contents_scale_, internal_content_bounds_);
|
| -
|
| - scrollbar_layer->SetThumbThickness(thumb_thickness_);
|
| - scrollbar_layer->SetThumbLength(thumb_length_);
|
| - if (orientation() == HORIZONTAL) {
|
| - scrollbar_layer->SetTrackStart(
|
| - track_rect_.x() - location_.x());
|
| - scrollbar_layer->SetTrackLength(track_rect_.width());
|
| - } else {
|
| - scrollbar_layer->SetTrackStart(
|
| - track_rect_.y() - location_.y());
|
| - scrollbar_layer->SetTrackLength(track_rect_.height());
|
| - }
|
| -
|
| - if (track_resource_.get())
|
| - scrollbar_layer->set_track_ui_resource_id(track_resource_->id());
|
| - else
|
| - scrollbar_layer->set_track_ui_resource_id(0);
|
| - if (thumb_resource_.get())
|
| - scrollbar_layer->set_thumb_ui_resource_id(thumb_resource_->id());
|
| - else
|
| - scrollbar_layer->set_thumb_ui_resource_id(0);
|
| -
|
| - scrollbar_layer->set_is_overlay_scrollbar(is_overlay_);
|
| -}
|
| -
|
| -ScrollbarLayerInterface* PaintedScrollbarLayer::ToScrollbarLayer() {
|
| - return this;
|
| -}
|
| -
|
| -void PaintedScrollbarLayer::PushScrollClipPropertiesTo(LayerImpl* layer) {
|
| - PaintedScrollbarLayerImpl* scrollbar_layer =
|
| - static_cast<PaintedScrollbarLayerImpl*>(layer);
|
| -
|
| - scrollbar_layer->SetScrollLayerAndClipLayerByIds(scroll_layer_id_,
|
| - clip_layer_id_);
|
| -}
|
| -
|
| -void PaintedScrollbarLayer::SetLayerTreeHost(LayerTreeHost* host) {
|
| - // When the LTH is set to null or has changed, then this layer should remove
|
| - // all of its associated resources.
|
| - if (!host || host != layer_tree_host()) {
|
| - track_resource_ = nullptr;
|
| - thumb_resource_ = nullptr;
|
| - }
|
| -
|
| - Layer::SetLayerTreeHost(host);
|
| -}
|
| -
|
| -gfx::Rect PaintedScrollbarLayer::ScrollbarLayerRectToContentRect(
|
| - const gfx::Rect& layer_rect) const {
|
| - // Don't intersect with the bounds as in LayerRectToContentRect() because
|
| - // layer_rect here might be in coordinates of the containing layer.
|
| - gfx::Rect expanded_rect = gfx::ScaleToEnclosingRect(
|
| - layer_rect, internal_contents_scale_, internal_contents_scale_);
|
| - // We should never return a rect bigger than the content bounds.
|
| - gfx::Size clamped_size = expanded_rect.size();
|
| - clamped_size.SetToMin(internal_content_bounds_);
|
| - expanded_rect.set_size(clamped_size);
|
| - return expanded_rect;
|
| -}
|
| -
|
| -gfx::Rect PaintedScrollbarLayer::OriginThumbRect() const {
|
| - gfx::Size thumb_size;
|
| - if (orientation() == HORIZONTAL) {
|
| - thumb_size =
|
| - gfx::Size(scrollbar_->ThumbLength(), scrollbar_->ThumbThickness());
|
| - } else {
|
| - thumb_size =
|
| - gfx::Size(scrollbar_->ThumbThickness(), scrollbar_->ThumbLength());
|
| - }
|
| - return gfx::Rect(thumb_size);
|
| -}
|
| -
|
| -void PaintedScrollbarLayer::UpdateThumbAndTrackGeometry() {
|
| - UpdateProperty(scrollbar_->TrackRect(), &track_rect_);
|
| - UpdateProperty(scrollbar_->Location(), &location_);
|
| - UpdateProperty(scrollbar_->IsOverlay(), &is_overlay_);
|
| - UpdateProperty(scrollbar_->HasThumb(), &has_thumb_);
|
| - if (has_thumb_) {
|
| - UpdateProperty(scrollbar_->ThumbThickness(), &thumb_thickness_);
|
| - UpdateProperty(scrollbar_->ThumbLength(), &thumb_length_);
|
| - } else {
|
| - UpdateProperty(0, &thumb_thickness_);
|
| - UpdateProperty(0, &thumb_length_);
|
| - }
|
| -}
|
| -
|
| -void PaintedScrollbarLayer::UpdateInternalContentScale() {
|
| - float scale = layer_tree_host()->device_scale_factor();
|
| - if (layer_tree_host()
|
| - ->settings()
|
| - .layer_transforms_should_scale_layer_contents) {
|
| - gfx::Vector2dF transform_scales =
|
| - MathUtil::ComputeTransform2dScaleComponents(draw_transform(), scale);
|
| - scale = std::max(transform_scales.x(), transform_scales.y());
|
| - }
|
| - bool changed = false;
|
| - changed |= UpdateProperty(ClampScaleToMaxTextureSize(scale),
|
| - &internal_contents_scale_);
|
| - changed |= UpdateProperty(
|
| - gfx::ToCeiledSize(gfx::ScaleSize(bounds(), internal_contents_scale_)),
|
| - &internal_content_bounds_);
|
| - if (changed) {
|
| - // If the content scale or bounds change, repaint.
|
| - SetNeedsDisplay();
|
| - }
|
| -}
|
| -
|
| -bool PaintedScrollbarLayer::Update(ResourceUpdateQueue* queue,
|
| - const OcclusionTracker<Layer>* occlusion) {
|
| - {
|
| - base::AutoReset<bool> ignore_set_needs_commit(&ignore_set_needs_commit_,
|
| - true);
|
| - Layer::Update(queue, occlusion);
|
| - UpdateInternalContentScale();
|
| - }
|
| -
|
| - UpdateThumbAndTrackGeometry();
|
| -
|
| - gfx::Rect track_layer_rect = gfx::Rect(location_, bounds());
|
| - gfx::Rect scaled_track_rect = ScrollbarLayerRectToContentRect(
|
| - track_layer_rect);
|
| -
|
| - bool updated = false;
|
| -
|
| - if (track_rect_.IsEmpty() || scaled_track_rect.IsEmpty()) {
|
| - if (track_resource_) {
|
| - track_resource_ = nullptr;
|
| - thumb_resource_ = nullptr;
|
| - SetNeedsPushProperties();
|
| - updated = true;
|
| - }
|
| - return updated;
|
| - }
|
| -
|
| - if (!has_thumb_ && thumb_resource_) {
|
| - thumb_resource_ = nullptr;
|
| - SetNeedsPushProperties();
|
| - updated = true;
|
| - }
|
| -
|
| - if (update_rect_.IsEmpty() && track_resource_)
|
| - return updated;
|
| -
|
| - track_resource_ = ScopedUIResource::Create(
|
| - layer_tree_host(),
|
| - RasterizeScrollbarPart(track_layer_rect, scaled_track_rect, TRACK));
|
| -
|
| - gfx::Rect thumb_layer_rect = OriginThumbRect();
|
| - gfx::Rect scaled_thumb_rect =
|
| - ScrollbarLayerRectToContentRect(thumb_layer_rect);
|
| - if (has_thumb_ && !scaled_thumb_rect.IsEmpty()) {
|
| - thumb_resource_ = ScopedUIResource::Create(
|
| - layer_tree_host(),
|
| - RasterizeScrollbarPart(thumb_layer_rect, scaled_thumb_rect, THUMB));
|
| - }
|
| -
|
| - // UI resources changed so push properties is needed.
|
| - SetNeedsPushProperties();
|
| - updated = true;
|
| - return updated;
|
| -}
|
| -
|
| -UIResourceBitmap PaintedScrollbarLayer::RasterizeScrollbarPart(
|
| - const gfx::Rect& layer_rect,
|
| - const gfx::Rect& content_rect,
|
| - ScrollbarPart part) {
|
| - DCHECK(!content_rect.size().IsEmpty());
|
| - DCHECK(!layer_rect.size().IsEmpty());
|
| -
|
| - SkBitmap skbitmap;
|
| - skbitmap.allocN32Pixels(content_rect.width(), content_rect.height());
|
| - SkCanvas skcanvas(skbitmap);
|
| -
|
| - float scale_x =
|
| - content_rect.width() / static_cast<float>(layer_rect.width());
|
| - float scale_y =
|
| - content_rect.height() / static_cast<float>(layer_rect.height());
|
| -
|
| - skcanvas.scale(SkFloatToScalar(scale_x),
|
| - SkFloatToScalar(scale_y));
|
| - skcanvas.translate(SkFloatToScalar(-layer_rect.x()),
|
| - SkFloatToScalar(-layer_rect.y()));
|
| -
|
| - SkRect layer_skrect = RectToSkRect(layer_rect);
|
| - SkPaint paint;
|
| - paint.setAntiAlias(false);
|
| - paint.setXfermodeMode(SkXfermode::kClear_Mode);
|
| - skcanvas.drawRect(layer_skrect, paint);
|
| - skcanvas.clipRect(layer_skrect);
|
| -
|
| - scrollbar_->PaintPart(&skcanvas, part, layer_rect);
|
| - // Make sure that the pixels are no longer mutable to unavoid unnecessary
|
| - // allocation and copying.
|
| - skbitmap.setImmutable();
|
| -
|
| - return UIResourceBitmap(skbitmap);
|
| -}
|
| -
|
| -} // namespace cc
|
|
|