Index: cc/pinch_zoom_scrollbar_geometry.cc |
diff --git a/cc/pinch_zoom_scrollbar_geometry.cc b/cc/pinch_zoom_scrollbar_geometry.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..b7555506c4c0164f43a28614176c49c95db4eed3 |
--- /dev/null |
+++ b/cc/pinch_zoom_scrollbar_geometry.cc |
@@ -0,0 +1,126 @@ |
+// 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/pinch_zoom_scrollbar_geometry.h" |
+ |
+#include "third_party/WebKit/Source/Platform/chromium/public/WebScrollbar.h" |
+ |
+namespace cc { |
+ |
+const int PinchZoomScrollbarGeometry::kTrackWidth = 10; |
+ |
+WebScrollbarThemeGeometry* PinchZoomScrollbarGeometry::clone() const { |
+ return static_cast<WebScrollbarThemeGeometry*>( |
+ new PinchZoomScrollbarGeometry()); |
+} |
+ |
+int PinchZoomScrollbarGeometry::thumbPosition(WebScrollbar* scrollbar) { |
+ if (scrollbar->enabled()) { |
+ float max_value = scrollbar->maximum(); |
+ if (!max_value) |
+ return 1; |
+ int value = std::min(std::max(0, scrollbar->value()), scrollbar->maximum()); |
+ float pos = (trackLength(scrollbar) - thumbLength(scrollbar)) * |
+ value / max_value; |
+ return static_cast<int>(floorf((pos > 0 && pos < 1) ? 1 : pos)); |
+ } |
+ return 0; |
+} |
+ |
+int PinchZoomScrollbarGeometry::thumbLength(WebScrollbar* scrollbar) { |
+ if (!scrollbar->enabled()) |
+ return 0; |
+ |
+ float size = std::max(scrollbar->size().width, scrollbar->size().height); |
+ float proportion = size / scrollbar->totalSize(); |
+ int track_length = this->trackLength(scrollbar); |
+ int length = proportion * track_length + 0.5f; |
+ length = std::max(length, kTrackWidth); |
+ if (length > track_length) |
+ length = 0; |
+ return length; |
+} |
+ |
+int PinchZoomScrollbarGeometry::trackPosition(WebScrollbar*) { |
+ return 0; |
+} |
+ |
+int PinchZoomScrollbarGeometry::trackLength(WebScrollbar* scrollbar) { |
+ WebRect track = trackRect(scrollbar); |
+ if (scrollbar->orientation() == WebScrollbar::Horizontal) |
+ return track.width; |
+ else |
+ return track.height; |
+} |
+ |
+bool PinchZoomScrollbarGeometry::hasButtons(WebScrollbar*) { |
+ return false; |
+} |
+ |
+bool PinchZoomScrollbarGeometry::hasThumb(WebScrollbar*) { |
+ return true; |
+} |
+ |
+WebRect PinchZoomScrollbarGeometry::trackRect(WebScrollbar* scrollbar) { |
+ int thickness = scrollbarThickness(scrollbar); |
+ if (scrollbar->orientation() == WebScrollbar::Horizontal) { |
+ return WebRect(scrollbar->location().x, scrollbar->location().y, |
+ scrollbar->size().width, thickness); |
+ } else { |
+ return WebRect(scrollbar->location().x, scrollbar->location().y, |
+ thickness, scrollbar->size().height); |
+ } |
+} |
+ |
+WebRect PinchZoomScrollbarGeometry::thumbRect(WebScrollbar* scrollbar) { |
+ WebRect track = trackRect(scrollbar); |
+ int thumb_pos = thumbPosition(scrollbar); |
+ int thickness = scrollbarThickness(scrollbar); |
+ if (scrollbar->orientation() == WebScrollbar::Horizontal) { |
+ return WebRect(track.x + thumb_pos, track.y + (track.height - thickness) / |
+ 2, thumbLength(scrollbar), thickness); |
+ } else { |
+ return WebRect(track.x + (track.width - thickness) / 2, track.y + thumb_pos, |
+ thickness, thumbLength(scrollbar)); |
+ } |
+} |
+ |
+int PinchZoomScrollbarGeometry::minimumThumbLength(WebScrollbar* scrollbar) { |
+ return scrollbarThickness(scrollbar); |
+} |
+ |
+int PinchZoomScrollbarGeometry::scrollbarThickness(WebScrollbar*) { |
+ return kTrackWidth; |
+} |
+ |
+WebRect PinchZoomScrollbarGeometry::backButtonStartRect(WebScrollbar*) { |
+ return WebRect(); |
+} |
+ |
+WebRect PinchZoomScrollbarGeometry::backButtonEndRect(WebScrollbar*) { |
+ return WebRect(); |
+} |
+ |
+WebRect PinchZoomScrollbarGeometry::forwardButtonStartRect(WebScrollbar*) { |
+ return WebRect(); |
+} |
+ |
+WebRect PinchZoomScrollbarGeometry::forwardButtonEndRect(WebScrollbar*) { |
+ return WebRect(); |
+} |
+ |
+WebRect PinchZoomScrollbarGeometry::constrainTrackRectToTrackPieces( |
+ WebScrollbar*, const WebRect& rect) { |
+ return rect; |
+} |
+ |
+void PinchZoomScrollbarGeometry::splitTrack( |
+ WebScrollbar* scrollbar, const WebRect& track, WebRect& start_track, |
+ WebRect& thumb, WebRect& end_track) { |
+ thumb = thumbRect(scrollbar); |
+ start_track = WebRect(); |
+ end_track = WebRect(); |
+} |
+ |
+} // namespace cc |