Index: third_party/WebKit/Source/platform/scroll/ScrollbarTheme.cpp |
diff --git a/third_party/WebKit/Source/platform/scroll/ScrollbarTheme.cpp b/third_party/WebKit/Source/platform/scroll/ScrollbarTheme.cpp |
index 6579fe491766dc6ef2c702aedbb0000f56081906..00b2e022398ea77ecf08ea9a5bc881fe503aeb5a 100644 |
--- a/third_party/WebKit/Source/platform/scroll/ScrollbarTheme.cpp |
+++ b/third_party/WebKit/Source/platform/scroll/ScrollbarTheme.cpp |
@@ -29,6 +29,7 @@ |
#include "platform/RuntimeEnabledFeatures.h" |
#include "platform/graphics/Color.h" |
#include "platform/graphics/GraphicsContext.h" |
+#include "platform/graphics/GraphicsContextStateSaver.h" |
#include "platform/graphics/paint/CompositingRecorder.h" |
#include "platform/graphics/paint/CullRect.h" |
#include "platform/graphics/paint/DrawingDisplayItem.h" |
@@ -223,6 +224,50 @@ bool ScrollbarTheme::shouldCenterOnThumb(const ScrollbarThemeClient& scrollbar, |
evt.pointerProperties().button, evt.shiftKey(), evt.altKey()); |
} |
+void ScrollbarTheme::paintTickmarks(GraphicsContext& context, |
+ const Scrollbar& scrollbar, |
+ const IntRect& rect) { |
+// Android paints tickmarks in the browser at FindResultBar.java. |
+#if !OS(ANDROID) |
+ if (scrollbar.orientation() != VerticalScrollbar) |
+ return; |
+ |
+ if (rect.height() <= 0 || rect.width() <= 0) |
+ return; |
+ |
+ // Get the tickmarks for the frameview. |
+ Vector<IntRect> tickmarks; |
+ scrollbar.getTickmarks(tickmarks); |
+ if (!tickmarks.size()) |
+ return; |
+ |
+ if (DrawingRecorder::useCachedDrawingIfPossible( |
+ context, scrollbar, DisplayItem::kScrollbarTickmarks)) |
+ return; |
+ |
+ DrawingRecorder recorder(context, scrollbar, DisplayItem::kScrollbarTickmarks, |
+ rect); |
+ GraphicsContextStateSaver stateSaver(context); |
+ context.setShouldAntialias(false); |
+ |
+ for (Vector<IntRect>::const_iterator i = tickmarks.begin(); |
+ i != tickmarks.end(); ++i) { |
+ // Calculate how far down (in %) the tick-mark should appear. |
+ const float percent = static_cast<float>(i->y()) / scrollbar.totalSize(); |
+ |
+ // Calculate how far down (in pixels) the tick-mark should appear. |
+ const int yPos = rect.y() + (rect.height() * percent); |
+ |
+ FloatRect tickRect(rect.x(), yPos, rect.width(), 3); |
+ context.fillRect(tickRect, Color(0xCC, 0xAA, 0x00, 0xFF)); |
+ |
+ FloatRect tickStroke(rect.x() + tickmarkBorderWidth(), yPos + 1, |
+ rect.width() - 2 * tickmarkBorderWidth(), 1); |
+ context.fillRect(tickStroke, Color(0xFF, 0xDD, 0x00, 0xFF)); |
+ } |
+#endif |
+} |
+ |
bool ScrollbarTheme::shouldSnapBackToDragOrigin( |
const ScrollbarThemeClient& scrollbar, |
const PlatformMouseEvent& evt) { |