190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// found in the LICENSE file.
490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "cc/test/fake_scrollbar.h"
690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "third_party/skia/include/core/SkCanvas.h"
8a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ui/gfx/skia_util.h"
990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
1090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)namespace cc {
1190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
1290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)FakeScrollbar::FakeScrollbar()
1390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    : paint_(false),
1490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      has_thumb_(false),
1590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      is_overlay_(false),
163551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      thumb_thickness_(10),
173551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      thumb_length_(5),
183551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      track_rect_(0, 0, 100, 10),
1990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      fill_color_(SK_ColorGREEN) {}
2090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
2190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)FakeScrollbar::FakeScrollbar(bool paint, bool has_thumb, bool is_overlay)
2290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    : paint_(paint),
2390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      has_thumb_(has_thumb),
2490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      is_overlay_(is_overlay),
253551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      thumb_thickness_(10),
263551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      thumb_length_(5),
273551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      track_rect_(0, 0, 100, 10),
2890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      fill_color_(SK_ColorGREEN) {}
2990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
3090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)FakeScrollbar::~FakeScrollbar() {}
3190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
3290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)ScrollbarOrientation FakeScrollbar::Orientation() const {
3390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  return HORIZONTAL;
3490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}
3590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
3658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)bool FakeScrollbar::IsLeftSideVerticalScrollbar() const {
3758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  return false;
3858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}
3958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
4090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)gfx::Point FakeScrollbar::Location() const { return location_; }
4190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
4290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)bool FakeScrollbar::IsOverlay() const { return is_overlay_; }
4390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
4490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)bool FakeScrollbar::HasThumb() const { return has_thumb_; }
4590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
4690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)int FakeScrollbar::ThumbThickness() const {
473551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  return thumb_thickness_;
4890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}
4990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
5090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)int FakeScrollbar::ThumbLength() const {
513551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  return thumb_length_;
5290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}
5390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
5490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)gfx::Rect FakeScrollbar::TrackRect() const {
553551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  return track_rect_;
5690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}
5790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
5890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)void FakeScrollbar::PaintPart(SkCanvas* canvas,
5990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                             ScrollbarPart part,
605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                             const gfx::Rect& content_rect) {
6190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  if (!paint_)
6290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    return;
6390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
6490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // Fill the scrollbar with a different color each time.
6590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  fill_color_++;
66a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  SkPaint paint;
67a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  paint.setAntiAlias(false);
68a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  paint.setColor(paint_fill_color());
69a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  paint.setStyle(SkPaint::kFill_Style);
70a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
71a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Emulate the how the real scrollbar works by using scrollbar's rect for
72a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // TRACK and the given content_rect for the THUMB
73a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  SkRect rect = part == TRACK ? RectToSkRect(TrackRect())
74a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                              : RectToSkRect(content_rect);
75a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  canvas->drawRect(rect, paint);
7690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}
7790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
7890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}  // namespace cc
79