| Index: cc/trees/layer_tree_host_pixeltest_scrollbars.cc
|
| diff --git a/cc/trees/layer_tree_host_pixeltest_scrollbars.cc b/cc/trees/layer_tree_host_pixeltest_scrollbars.cc
|
| index 683a5d491a5b27ba3e99e03c0c522f9e15eca615..9e6c405beb30975c4df108bc26cc27d51d3ac032 100644
|
| --- a/cc/trees/layer_tree_host_pixeltest_scrollbars.cc
|
| +++ b/cc/trees/layer_tree_host_pixeltest_scrollbars.cc
|
| @@ -7,12 +7,14 @@
|
| #include "base/memory/ptr_util.h"
|
| #include "build/build_config.h"
|
| #include "cc/input/scrollbar.h"
|
| +#include "cc/layers/painted_overlay_scrollbar_layer.h"
|
| #include "cc/layers/painted_scrollbar_layer.h"
|
| #include "cc/layers/solid_color_layer.h"
|
| #include "cc/paint/paint_canvas.h"
|
| #include "cc/paint/paint_flags.h"
|
| #include "cc/test/layer_tree_pixel_test.h"
|
| #include "cc/test/test_in_process_context_provider.h"
|
| +#include "cc/trees/layer_tree_impl.h"
|
| #include "gpu/command_buffer/client/gles2_interface.h"
|
|
|
| #if !defined(OS_ANDROID)
|
| @@ -67,6 +69,9 @@ class PaintedScrollbar : public Scrollbar {
|
| inset_rect.Inset(big, big, small, small);
|
| }
|
| }
|
| + bool UsesNinePatchThumbResource() const override { return false; }
|
| + gfx::Size NinePatchThumbCanvasSize() const override { return gfx::Size(); }
|
| + gfx::Rect NinePatchThumbAperture() const override { return gfx::Rect(); }
|
|
|
| void set_paint_scale(int scale) { paint_scale_ = scale; }
|
|
|
| @@ -168,6 +173,114 @@ TEST_F(LayerTreeHostScrollbarsPixelTest, HugeTransformScale) {
|
| base::FilePath(FILE_PATH_LITERAL("spiral_64_scale.png")));
|
| }
|
|
|
| +class LayerTreeHostOverlayScrollbarsPixelTest
|
| + : public LayerTreeHostScrollbarsPixelTest {
|
| + protected:
|
| + LayerTreeHostOverlayScrollbarsPixelTest() = default;
|
| +
|
| + void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override {
|
| + LayerImpl* layer = host_impl->active_tree()->LayerById(scrollbar_layer_id_);
|
| + ScrollbarLayerImplBase* scrollbar = layer->ToScrollbarLayer();
|
| + scrollbar->SetThumbThicknessScaleFactor(thickness_scale_);
|
| + }
|
| +
|
| + int scrollbar_layer_id_;
|
| + float thickness_scale_;
|
| +};
|
| +
|
| +class PaintedOverlayScrollbar : public PaintedScrollbar {
|
| + public:
|
| + ~PaintedOverlayScrollbar() override = default;
|
| +
|
| + int ThumbThickness() const override { return 15; }
|
| + int ThumbLength() const override { return 50; }
|
| + gfx::Rect TrackRect() const override { return gfx::Rect(0, 0, 15, 400); }
|
| + bool HasThumb() const override { return true; }
|
| + bool IsOverlay() const override { return true; }
|
| + void PaintPart(PaintCanvas* canvas,
|
| + ScrollbarPart part,
|
| + const gfx::Rect& content_rect) override {
|
| + // The outside of the rect will be painted with a 1 pixel black, red, then
|
| + // blue border. The inside will be solid blue. This will allow the test to
|
| + // ensure that scaling the thumb doesn't scale the border at all. Note
|
| + // that the inside of the border must be the same color as the center tile
|
| + // to prevent an interpolation from being applied.
|
| + PaintFlags flags;
|
| + flags.setStyle(PaintFlags::kFill_Style);
|
| + flags.setStrokeWidth(SkIntToScalar(1));
|
| + flags.setColor(SK_ColorBLACK);
|
| +
|
| + gfx::Rect inset_rect = content_rect;
|
| +
|
| + canvas->drawRect(RectToSkRect(inset_rect), flags);
|
| +
|
| + flags.setColor(SK_ColorRED);
|
| + inset_rect.Inset(1, 1);
|
| + canvas->drawRect(RectToSkRect(inset_rect), flags);
|
| +
|
| + flags.setColor(SK_ColorBLUE);
|
| + inset_rect.Inset(1, 1);
|
| + canvas->drawRect(RectToSkRect(inset_rect), flags);
|
| + }
|
| + bool UsesNinePatchThumbResource() const override { return true; }
|
| + gfx::Size NinePatchThumbCanvasSize() const override {
|
| + return gfx::Size(7, 7);
|
| + }
|
| + gfx::Rect NinePatchThumbAperture() const override {
|
| + return gfx::Rect(3, 3, 1, 1);
|
| + }
|
| +};
|
| +
|
| +// Simulate increasing the thickness of a painted overlay scrollbar. Ensure that
|
| +// the scrollbar border remains crisp.
|
| +TEST_F(LayerTreeHostOverlayScrollbarsPixelTest, NinePatchScrollbarScaledUp) {
|
| + scoped_refptr<SolidColorLayer> background =
|
| + CreateSolidColorLayer(gfx::Rect(400, 400), SK_ColorWHITE);
|
| +
|
| + auto scrollbar = base::MakeUnique<PaintedOverlayScrollbar>();
|
| + scoped_refptr<PaintedOverlayScrollbarLayer> layer =
|
| + PaintedOverlayScrollbarLayer::Create(std::move(scrollbar),
|
| + Layer::INVALID_ID);
|
| +
|
| + scrollbar_layer_id_ = layer->id();
|
| + thickness_scale_ = 5.f;
|
| +
|
| + layer->SetIsDrawable(true);
|
| + layer->SetBounds(gfx::Size(10, 300));
|
| + background->AddChild(layer);
|
| +
|
| + layer->SetPosition(gfx::PointF(185, 10));
|
| +
|
| + RunPixelTest(
|
| + PIXEL_TEST_GL, background,
|
| + base::FilePath(FILE_PATH_LITERAL("overlay_scrollbar_scaled_up.png")));
|
| +}
|
| +
|
| +// Simulate decreasing the thickness of a painted overlay scrollbar. Ensure that
|
| +// the scrollbar border remains crisp.
|
| +TEST_F(LayerTreeHostOverlayScrollbarsPixelTest, NinePatchScrollbarScaledDown) {
|
| + scoped_refptr<SolidColorLayer> background =
|
| + CreateSolidColorLayer(gfx::Rect(400, 400), SK_ColorWHITE);
|
| +
|
| + auto scrollbar = base::MakeUnique<PaintedOverlayScrollbar>();
|
| + scoped_refptr<PaintedOverlayScrollbarLayer> layer =
|
| + PaintedOverlayScrollbarLayer::Create(std::move(scrollbar),
|
| + Layer::INVALID_ID);
|
| +
|
| + scrollbar_layer_id_ = layer->id();
|
| + thickness_scale_ = 0.4f;
|
| +
|
| + layer->SetIsDrawable(true);
|
| + layer->SetBounds(gfx::Size(10, 300));
|
| + background->AddChild(layer);
|
| +
|
| + layer->SetPosition(gfx::PointF(185, 10));
|
| +
|
| + RunPixelTest(
|
| + PIXEL_TEST_GL, background,
|
| + base::FilePath(FILE_PATH_LITERAL("overlay_scrollbar_scaled_down.png")));
|
| +}
|
| +
|
| } // namespace
|
| } // namespace cc
|
|
|
|
|