Changeset 89326 in webkit


Ignore:
Timestamp:
Jun 20, 2011 6:22:07 PM (13 years ago)
Author:
commit-queue@webkit.org
Message:

2011-06-20 Sailesh Agrawal <sail@chromium.org>

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):
Location:
trunk/Source/WebCore
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r89325 r89326  
     12011-06-20  Sailesh Agrawal  <sail@chromium.org>
     2
     3        Reviewed by Mihai Parparita.
     4
     5        [Chromium] Draw search tickmarks on overlay scrollbars
     6        https://bugs.webkit.org/show_bug.cgi?id=62783
     7
     8        This change adds search tickmark support for overlay scrollbars. Tickmarks are only drawn when the scroll track is visible.
     9
     10        * platform/chromium/ScrollbarOverlayUtilitiesChromiumMac.h:Split the scrollbar drawing code into a track and knob version.
     11        * platform/chromium/ScrollbarOverlayUtilitiesChromiumMac.mm:
     12        (wkScrollbarPainterPaint):
     13        (wkScrollbarPainterPaintTrack):
     14        (wkScrollbarPainterPaintKnob):
     15        * platform/chromium/ScrollbarThemeChromiumMac.h:
     16        * platform/chromium/ScrollbarThemeChromiumMac.mm:Factor out the paint tickmark code and call it from the overlay scrollbar drawing code.
     17        (WebCore::ScrollbarThemeChromiumMac::paint):
     18        (WebCore::ScrollbarThemeChromiumMac::paintTickmarks):
     19
    1202011-06-20  Adam Barth  <abarth@webkit.org>
    221
  • trunk/Source/WebCore/platform/chromium/ScrollbarOverlayUtilitiesChromiumMac.h

    r89120 r89326  
    5858void wkScrollbarPainterSetOverlayState(WKScrollbarPainterRef, int overlayScrollerState);
    5959void wkScrollbarPainterPaint(WKScrollbarPainterRef, bool enabled, double value, CGFloat proportion, NSRect frameRect);
     60void wkScrollbarPainterPaintTrack(WKScrollbarPainterRef, bool enabled, double value, CGFloat proportion, NSRect frameRect);
     61void wkScrollbarPainterPaintKnob(WKScrollbarPainterRef);
    6062int wkScrollbarMinimumThumbLength(WKScrollbarPainterRef);
    6163void wkScrollbarPainterSetDelegate(WKScrollbarPainterRef, id scrollbarPainterDelegate);
  • trunk/Source/WebCore/platform/chromium/ScrollbarOverlayUtilitiesChromiumMac.mm

    r89120 r89326  
    153153void wkScrollbarPainterPaint(WKScrollbarPainterRef painter, bool enabled, double value, CGFloat proportion, NSRect frameRect)
    154154{
     155    wkScrollbarPainterPaintTrack(painter, enabled, value, proportion, frameRect);
     156    wkScrollbarPainterPaintKnob(painter);
     157}
     158
     159void wkScrollbarPainterPaintTrack(WKScrollbarPainterRef painter, bool enabled, double value, CGFloat proportion, NSRect frameRect)
     160{
    155161    [painter setEnabled:enabled];
    156162    [painter setBoundsSize:frameRect.size];
     
    165171
    166172    [painter drawKnobSlotInRect:frameRect highlight:NO];
     173}
     174
     175void wkScrollbarPainterPaintKnob(WKScrollbarPainterRef painter)
     176{
    167177    [painter drawKnob];
    168178}
  • trunk/Source/WebCore/platform/chromium/ScrollbarThemeChromiumMac.h

    r89120 r89326  
    7272    virtual bool shouldDragDocumentInsteadOfThumb(Scrollbar*, const PlatformMouseEvent&);
    7373
     74    virtual void paintTickmarks(GraphicsContext*, Scrollbar*, const IntRect&);
     75
    7476public:
    7577    void preferencesChanged();
  • trunk/Source/WebCore/platform/chromium/ScrollbarThemeChromiumMac.mm

    r89147 r89326  
    484484        context->translate(scrollbar->frameRect().x(), scrollbar->frameRect().y());
    485485        LocalCurrentGraphicsContext localContext(context);
    486         wkScrollbarPainterPaint(scrollbarMap()->get(scrollbar).get(),
    487                                 scrollbar->enabled(),
    488                                 value,
    489                                 (static_cast<CGFloat>(scrollbar->visibleSize()) - overhang) / scrollbar->totalSize(),
    490                                 scrollbar->frameRect());
     486        WKScrollbarPainterRef scrollbarPainter = scrollbarMap()->get(scrollbar).get();
     487        wkScrollbarPainterPaintTrack(scrollbarPainter,
     488                                     scrollbar->enabled(),
     489                                     value,
     490                                     (static_cast<CGFloat>(scrollbar->visibleSize()) - overhang) / scrollbar->totalSize(),
     491                                     scrollbar->frameRect());
     492
     493        IntRect tickmarkTrackRect(IntPoint(), trackRect(scrollbar, false).size());
     494        // Inset by 2 on the left and 3 on the right.
     495        tickmarkTrackRect.setX(tickmarkTrackRect.x() + 2);
     496        tickmarkTrackRect.setWidth(tickmarkTrackRect.width() - 3);
     497        paintTickmarks(context, scrollbar, tickmarkTrackRect);
     498
     499        wkScrollbarPainterPaintKnob(scrollbarPainter);
    491500
    492501        scrollAnimator->setIsDrawingIntoLayer(false);
     
    549558    HIThemeDrawTrack(&trackInfo, 0, cgContext, kHIThemeOrientationNormal);
    550559
    551     Vector<IntRect> tickmarks;
    552     scrollbar->scrollableArea()->getTickmarks(tickmarks);
    553     if (scrollbar->orientation() == VerticalScrollbar && tickmarks.size()) {
    554         drawingContext->save();
    555         drawingContext->setShouldAntialias(false);
    556         drawingContext->setStrokeColor(Color(0xCC, 0xAA, 0x00, 0xFF), ColorSpaceDeviceRGB);
    557         drawingContext->setFillColor(Color(0xFF, 0xDD, 0x00, 0xFF), ColorSpaceDeviceRGB);
    558 
    559         IntRect thumbArea = trackRect(scrollbar, false);
    560         if (!canDrawDirectly) {
    561             thumbArea.setX(0);
    562             thumbArea.setY(0);
    563         }
    564         // The ends are rounded and the thumb doesn't go there.
    565         thumbArea.inflateY(-thumbArea.width());
    566 
    567         for (Vector<IntRect>::const_iterator i = tickmarks.begin(); i != tickmarks.end(); ++i) {
    568             // Calculate how far down (in %) the tick-mark should appear.
    569             const float percent = static_cast<float>(i->y()) / scrollbar->totalSize();
    570             if (percent < 0.0 || percent > 1.0)
    571               continue;
    572 
    573             // Calculate how far down (in pixels) the tick-mark should appear.
    574             const int yPos = static_cast<int>((thumbArea.y() + (thumbArea.height() * percent))) & ~1;
    575 
    576             // Paint.
    577             const int indent = 2;
    578             FloatRect tickRect(thumbArea.x() + indent, yPos, thumbArea.width() - 2 * indent - 1, 2);
    579             drawingContext->fillRect(tickRect);
    580             drawingContext->strokeRect(tickRect, 1);
    581         }
    582 
    583         drawingContext->restore();
    584     }
     560    IntRect tickmarkTrackRect = trackRect(scrollbar, false);
     561    if (!canDrawDirectly) {
     562        tickmarkTrackRect.setX(0);
     563        tickmarkTrackRect.setY(0);
     564    }
     565    // The ends are rounded and the thumb doesn't go there.
     566    tickmarkTrackRect.inflateY(-tickmarkTrackRect.width());
     567    // Inset by 2 on the left and 3 on the right.
     568    tickmarkTrackRect.setX(tickmarkTrackRect.x() + 2);
     569    tickmarkTrackRect.setWidth(tickmarkTrackRect.width() - 3);
     570    paintTickmarks(drawingContext, scrollbar, tickmarkTrackRect);
    585571
    586572    if (hasThumb(scrollbar)) {
     
    607593}
    608594
    609 }
     595void ScrollbarThemeChromiumMac::paintTickmarks(GraphicsContext* context, Scrollbar* scrollbar, const IntRect& rect) {
     596    if (scrollbar->orientation() != VerticalScrollbar)
     597        return;
     598
     599    if (rect.height() <= 0 || rect.width() <= 0)
     600        return;  // nothing to draw on.
     601
     602    // Get the tickmarks for the frameview.
     603    Vector<IntRect> tickmarks;
     604    scrollbar->scrollableArea()->getTickmarks(tickmarks);
     605    if (!tickmarks.size())
     606        return;
     607
     608    int alphaInt = 0xFF;
     609    if (scrollbarMap()->contains(scrollbar)) {
     610        WKScrollbarPainterRef scrollbarPainter = scrollbarMap()->get(scrollbar).get();
     611        if (scrollbarPainter)
     612            alphaInt = 0xFF * wkScrollbarPainterTrackAlpha(scrollbarPainter);
     613    }
     614    if (alphaInt == 0)
     615        return;
     616
     617    context->save();
     618    context->setShouldAntialias(false);
     619    context->setStrokeColor(Color(0xCC, 0xAA, 0x00, alphaInt), ColorSpaceDeviceRGB);
     620    context->setFillColor(Color(0xFF, 0xDD, 0x00, alphaInt), ColorSpaceDeviceRGB);
     621
     622    for (Vector<IntRect>::const_iterator i = tickmarks.begin(); i != tickmarks.end(); ++i) {
     623        // Calculate how far down (in %) the tick-mark should appear.
     624        const float percent = static_cast<float>(i->y()) / scrollbar->totalSize();
     625        if (percent < 0.0 || percent > 1.0)
     626            continue;
     627
     628        // Calculate how far down (in pixels) the tick-mark should appear.
     629        const int yPos = rect.y() + (rect.height() * percent);
     630
     631        // Paint.
     632        FloatRect tickRect(rect.x(), yPos, rect.width(), 2);
     633        context->fillRect(tickRect);
     634        context->strokeRect(tickRect, 1);
     635    }
     636
     637    context->restore();
     638}
     639
     640}
Note: See TracChangeset for help on using the changeset viewer.