Changeset 89326 in webkit
- Timestamp:
- Jun 20, 2011 6:22:07 PM (13 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r89325 r89326 1 2011-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 1 20 2011-06-20 Adam Barth <abarth@webkit.org> 2 21 -
trunk/Source/WebCore/platform/chromium/ScrollbarOverlayUtilitiesChromiumMac.h
r89120 r89326 58 58 void wkScrollbarPainterSetOverlayState(WKScrollbarPainterRef, int overlayScrollerState); 59 59 void wkScrollbarPainterPaint(WKScrollbarPainterRef, bool enabled, double value, CGFloat proportion, NSRect frameRect); 60 void wkScrollbarPainterPaintTrack(WKScrollbarPainterRef, bool enabled, double value, CGFloat proportion, NSRect frameRect); 61 void wkScrollbarPainterPaintKnob(WKScrollbarPainterRef); 60 62 int wkScrollbarMinimumThumbLength(WKScrollbarPainterRef); 61 63 void wkScrollbarPainterSetDelegate(WKScrollbarPainterRef, id scrollbarPainterDelegate); -
trunk/Source/WebCore/platform/chromium/ScrollbarOverlayUtilitiesChromiumMac.mm
r89120 r89326 153 153 void wkScrollbarPainterPaint(WKScrollbarPainterRef painter, bool enabled, double value, CGFloat proportion, NSRect frameRect) 154 154 { 155 wkScrollbarPainterPaintTrack(painter, enabled, value, proportion, frameRect); 156 wkScrollbarPainterPaintKnob(painter); 157 } 158 159 void wkScrollbarPainterPaintTrack(WKScrollbarPainterRef painter, bool enabled, double value, CGFloat proportion, NSRect frameRect) 160 { 155 161 [painter setEnabled:enabled]; 156 162 [painter setBoundsSize:frameRect.size]; … … 165 171 166 172 [painter drawKnobSlotInRect:frameRect highlight:NO]; 173 } 174 175 void wkScrollbarPainterPaintKnob(WKScrollbarPainterRef painter) 176 { 167 177 [painter drawKnob]; 168 178 } -
trunk/Source/WebCore/platform/chromium/ScrollbarThemeChromiumMac.h
r89120 r89326 72 72 virtual bool shouldDragDocumentInsteadOfThumb(Scrollbar*, const PlatformMouseEvent&); 73 73 74 virtual void paintTickmarks(GraphicsContext*, Scrollbar*, const IntRect&); 75 74 76 public: 75 77 void preferencesChanged(); -
trunk/Source/WebCore/platform/chromium/ScrollbarThemeChromiumMac.mm
r89147 r89326 484 484 context->translate(scrollbar->frameRect().x(), scrollbar->frameRect().y()); 485 485 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); 491 500 492 501 scrollAnimator->setIsDrawingIntoLayer(false); … … 549 558 HIThemeDrawTrack(&trackInfo, 0, cgContext, kHIThemeOrientationNormal); 550 559 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); 585 571 586 572 if (hasThumb(scrollbar)) { … … 607 593 } 608 594 609 } 595 void 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.