Title: [89326] trunk/Source/WebCore
Revision
89326
Author
[email protected]
Date
2011-06-20 18:22:07 -0700 (Mon, 20 Jun 2011)

Log Message

2011-06-20  Sailesh Agrawal  <[email protected]>

        Reviewed by Mihai Parparita.

        [Chromium] Draw search tickmarks on overlay scrollbars
        https://bugs.webkit.org/show_bug.cgi?id=62783

        This change adds search tickmark support for overlay scrollbars. Tickmarks are only drawn when the scroll track is visible.

        * platform/chromium/ScrollbarOverlayUtilitiesChromiumMac.h:Split the scrollbar drawing code into a track and knob version.
        * platform/chromium/ScrollbarOverlayUtilitiesChromiumMac.mm:
        (wkScrollbarPainterPaint):
        (wkScrollbarPainterPaintTrack):
        (wkScrollbarPainterPaintKnob):
        * platform/chromium/ScrollbarThemeChromiumMac.h:
        * platform/chromium/ScrollbarThemeChromiumMac.mm:Factor out the paint tickmark code and call it from the overlay scrollbar drawing code.
        (WebCore::ScrollbarThemeChromiumMac::paint):
        (WebCore::ScrollbarThemeChromiumMac::paintTickmarks):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (89325 => 89326)


--- trunk/Source/WebCore/ChangeLog	2011-06-21 01:07:04 UTC (rev 89325)
+++ trunk/Source/WebCore/ChangeLog	2011-06-21 01:22:07 UTC (rev 89326)
@@ -1,3 +1,22 @@
+2011-06-20  Sailesh Agrawal  <[email protected]>
+
+        Reviewed by Mihai Parparita.
+
+        [Chromium] Draw search tickmarks on overlay scrollbars
+        https://bugs.webkit.org/show_bug.cgi?id=62783
+
+        This change adds search tickmark support for overlay scrollbars. Tickmarks are only drawn when the scroll track is visible.
+
+        * platform/chromium/ScrollbarOverlayUtilitiesChromiumMac.h:Split the scrollbar drawing code into a track and knob version.
+        * platform/chromium/ScrollbarOverlayUtilitiesChromiumMac.mm:
+        (wkScrollbarPainterPaint):
+        (wkScrollbarPainterPaintTrack):
+        (wkScrollbarPainterPaintKnob):
+        * platform/chromium/ScrollbarThemeChromiumMac.h:
+        * platform/chromium/ScrollbarThemeChromiumMac.mm:Factor out the paint tickmark code and call it from the overlay scrollbar drawing code.
+        (WebCore::ScrollbarThemeChromiumMac::paint):
+        (WebCore::ScrollbarThemeChromiumMac::paintTickmarks):
+
 2011-06-20  Adam Barth  <[email protected]>
 
         Mac build fix.  In addition to adding the files to the project, we need

Modified: trunk/Source/WebCore/platform/chromium/ScrollbarOverlayUtilitiesChromiumMac.h (89325 => 89326)


--- trunk/Source/WebCore/platform/chromium/ScrollbarOverlayUtilitiesChromiumMac.h	2011-06-21 01:07:04 UTC (rev 89325)
+++ trunk/Source/WebCore/platform/chromium/ScrollbarOverlayUtilitiesChromiumMac.h	2011-06-21 01:22:07 UTC (rev 89326)
@@ -57,6 +57,8 @@
 CGFloat wkScrollbarPainterKnobAlpha(WKScrollbarPainterRef);
 void wkScrollbarPainterSetOverlayState(WKScrollbarPainterRef, int overlayScrollerState);
 void wkScrollbarPainterPaint(WKScrollbarPainterRef, bool enabled, double value, CGFloat proportion, NSRect frameRect);
+void wkScrollbarPainterPaintTrack(WKScrollbarPainterRef, bool enabled, double value, CGFloat proportion, NSRect frameRect);
+void wkScrollbarPainterPaintKnob(WKScrollbarPainterRef);
 int wkScrollbarMinimumThumbLength(WKScrollbarPainterRef);
 void wkScrollbarPainterSetDelegate(WKScrollbarPainterRef, id scrollbarPainterDelegate);
 CGFloat wkScrollbarPainterTrackAlpha(WKScrollbarPainterRef);

Modified: trunk/Source/WebCore/platform/chromium/ScrollbarOverlayUtilitiesChromiumMac.mm (89325 => 89326)


--- trunk/Source/WebCore/platform/chromium/ScrollbarOverlayUtilitiesChromiumMac.mm	2011-06-21 01:07:04 UTC (rev 89325)
+++ trunk/Source/WebCore/platform/chromium/ScrollbarOverlayUtilitiesChromiumMac.mm	2011-06-21 01:22:07 UTC (rev 89326)
@@ -152,6 +152,12 @@
 
 void wkScrollbarPainterPaint(WKScrollbarPainterRef painter, bool enabled, double value, CGFloat proportion, NSRect frameRect)
 {
+    wkScrollbarPainterPaintTrack(painter, enabled, value, proportion, frameRect);
+    wkScrollbarPainterPaintKnob(painter);
+}
+
+void wkScrollbarPainterPaintTrack(WKScrollbarPainterRef painter, bool enabled, double value, CGFloat proportion, NSRect frameRect)
+{
     [painter setEnabled:enabled];
     [painter setBoundsSize:frameRect.size];
     [painter setDoubleValue:value];
@@ -164,6 +170,10 @@
     frameRect.origin = NSZeroPoint;
 
     [painter drawKnobSlotInRect:frameRect highlight:NO];
+}
+
+void wkScrollbarPainterPaintKnob(WKScrollbarPainterRef painter)
+{
     [painter drawKnob];
 }
 

Modified: trunk/Source/WebCore/platform/chromium/ScrollbarThemeChromiumMac.h (89325 => 89326)


--- trunk/Source/WebCore/platform/chromium/ScrollbarThemeChromiumMac.h	2011-06-21 01:07:04 UTC (rev 89325)
+++ trunk/Source/WebCore/platform/chromium/ScrollbarThemeChromiumMac.h	2011-06-21 01:22:07 UTC (rev 89326)
@@ -71,6 +71,8 @@
     virtual bool shouldCenterOnThumb(Scrollbar*, const PlatformMouseEvent&);
     virtual bool shouldDragDocumentInsteadOfThumb(Scrollbar*, const PlatformMouseEvent&);
 
+    virtual void paintTickmarks(GraphicsContext*, Scrollbar*, const IntRect&);
+
 public:
     void preferencesChanged();
 };

Modified: trunk/Source/WebCore/platform/chromium/ScrollbarThemeChromiumMac.mm (89325 => 89326)


--- trunk/Source/WebCore/platform/chromium/ScrollbarThemeChromiumMac.mm	2011-06-21 01:07:04 UTC (rev 89325)
+++ trunk/Source/WebCore/platform/chromium/ScrollbarThemeChromiumMac.mm	2011-06-21 01:22:07 UTC (rev 89326)
@@ -483,12 +483,21 @@
         context->clip(damageRect);
         context->translate(scrollbar->frameRect().x(), scrollbar->frameRect().y());
         LocalCurrentGraphicsContext localContext(context);
-        wkScrollbarPainterPaint(scrollbarMap()->get(scrollbar).get(),
-                                scrollbar->enabled(),
-                                value,
-                                (static_cast<CGFloat>(scrollbar->visibleSize()) - overhang) / scrollbar->totalSize(),
-                                scrollbar->frameRect());
+        WKScrollbarPainterRef scrollbarPainter = scrollbarMap()->get(scrollbar).get();
+        wkScrollbarPainterPaintTrack(scrollbarPainter,
+                                     scrollbar->enabled(),
+                                     value,
+                                     (static_cast<CGFloat>(scrollbar->visibleSize()) - overhang) / scrollbar->totalSize(),
+                                     scrollbar->frameRect());
 
+        IntRect tickmarkTrackRect(IntPoint(), trackRect(scrollbar, false).size());
+        // Inset by 2 on the left and 3 on the right.
+        tickmarkTrackRect.setX(tickmarkTrackRect.x() + 2);
+        tickmarkTrackRect.setWidth(tickmarkTrackRect.width() - 3);
+        paintTickmarks(context, scrollbar, tickmarkTrackRect);
+
+        wkScrollbarPainterPaintKnob(scrollbarPainter);
+
         scrollAnimator->setIsDrawingIntoLayer(false);
         return true;
     }
@@ -548,40 +557,17 @@
 #endif
     HIThemeDrawTrack(&trackInfo, 0, cgContext, kHIThemeOrientationNormal);
 
-    Vector<IntRect> tickmarks;
-    scrollbar->scrollableArea()->getTickmarks(tickmarks);
-    if (scrollbar->orientation() == VerticalScrollbar && tickmarks.size()) {
-        drawingContext->save();
-        drawingContext->setShouldAntialias(false);
-        drawingContext->setStrokeColor(Color(0xCC, 0xAA, 0x00, 0xFF), ColorSpaceDeviceRGB);
-        drawingContext->setFillColor(Color(0xFF, 0xDD, 0x00, 0xFF), ColorSpaceDeviceRGB);
-
-        IntRect thumbArea = trackRect(scrollbar, false);
-        if (!canDrawDirectly) {
-            thumbArea.setX(0);
-            thumbArea.setY(0);
-        }
-        // The ends are rounded and the thumb doesn't go there.
-        thumbArea.inflateY(-thumbArea.width());
-
-        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();
-            if (percent < 0.0 || percent > 1.0)
-              continue;
-
-            // Calculate how far down (in pixels) the tick-mark should appear.
-            const int yPos = static_cast<int>((thumbArea.y() + (thumbArea.height() * percent))) & ~1;
-
-            // Paint.
-            const int indent = 2;
-            FloatRect tickRect(thumbArea.x() + indent, yPos, thumbArea.width() - 2 * indent - 1, 2);
-            drawingContext->fillRect(tickRect);
-            drawingContext->strokeRect(tickRect, 1);
-        }
-
-        drawingContext->restore();
+    IntRect tickmarkTrackRect = trackRect(scrollbar, false);
+    if (!canDrawDirectly) {
+        tickmarkTrackRect.setX(0);
+        tickmarkTrackRect.setY(0);
     }
+    // The ends are rounded and the thumb doesn't go there.
+    tickmarkTrackRect.inflateY(-tickmarkTrackRect.width());
+    // Inset by 2 on the left and 3 on the right.
+    tickmarkTrackRect.setX(tickmarkTrackRect.x() + 2);
+    tickmarkTrackRect.setWidth(tickmarkTrackRect.width() - 3);
+    paintTickmarks(drawingContext, scrollbar, tickmarkTrackRect);
 
     if (hasThumb(scrollbar)) {
         PlatformBridge::ThemePaintScrollbarInfo scrollbarInfo;
@@ -606,4 +592,49 @@
     return true;
 }
 
+void ScrollbarThemeChromiumMac::paintTickmarks(GraphicsContext* context, Scrollbar* scrollbar, const IntRect& rect) {
+    if (scrollbar->orientation() != VerticalScrollbar)
+        return;
+
+    if (rect.height() <= 0 || rect.width() <= 0)
+        return;  // nothing to draw on.
+
+    // Get the tickmarks for the frameview.
+    Vector<IntRect> tickmarks;
+    scrollbar->scrollableArea()->getTickmarks(tickmarks);
+    if (!tickmarks.size())
+        return;
+
+    int alphaInt = 0xFF;
+    if (scrollbarMap()->contains(scrollbar)) {
+        WKScrollbarPainterRef scrollbarPainter = scrollbarMap()->get(scrollbar).get();
+        if (scrollbarPainter)
+            alphaInt = 0xFF * wkScrollbarPainterTrackAlpha(scrollbarPainter);
+    }
+    if (alphaInt == 0)
+        return;
+
+    context->save();
+    context->setShouldAntialias(false);
+    context->setStrokeColor(Color(0xCC, 0xAA, 0x00, alphaInt), ColorSpaceDeviceRGB);
+    context->setFillColor(Color(0xFF, 0xDD, 0x00, alphaInt), ColorSpaceDeviceRGB);
+
+    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();
+        if (percent < 0.0 || percent > 1.0)
+            continue;
+
+        // Calculate how far down (in pixels) the tick-mark should appear.
+        const int yPos = rect.y() + (rect.height() * percent);
+
+        // Paint.
+        FloatRect tickRect(rect.x(), yPos, rect.width(), 2);
+        context->fillRect(tickRect);
+        context->strokeRect(tickRect, 1);
+    }
+
+    context->restore();
 }
+
+}
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to