| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2006, 2007, 2008, 2011 Apple Inc. All rights reserved. | 2 * Copyright (C) 2006, 2007, 2008, 2011 Apple Inc. All rights reserved. |
| 3 * 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmo
bile.com/) | 3 * 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmo
bile.com/) |
| 4 * | 4 * |
| 5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
| 6 * modification, are permitted provided that the following conditions | 6 * modification, are permitted provided that the following conditions |
| 7 * are met: | 7 * are met: |
| 8 * | 8 * |
| 9 * 1. Redistributions of source code must retain the above copyright | 9 * 1. Redistributions of source code must retain the above copyright |
| 10 * notice, this list of conditions and the following disclaimer. | 10 * notice, this list of conditions and the following disclaimer. |
| (...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 204 | 204 |
| 205 int firstIndex = select->activeSelectionStartListIndex(); | 205 int firstIndex = select->activeSelectionStartListIndex(); |
| 206 if (firstIndex >= 0 && !listIndexIsVisible(select->activeSelectionEndListInd
ex())) | 206 if (firstIndex >= 0 && !listIndexIsVisible(select->activeSelectionEndListInd
ex())) |
| 207 scrollToRevealElementAtListIndex(firstIndex); | 207 scrollToRevealElementAtListIndex(firstIndex); |
| 208 } | 208 } |
| 209 | 209 |
| 210 void RenderListBox::computeIntrinsicLogicalWidths(LayoutUnit& minLogicalWidth, L
ayoutUnit& maxLogicalWidth) const | 210 void RenderListBox::computeIntrinsicLogicalWidths(LayoutUnit& minLogicalWidth, L
ayoutUnit& maxLogicalWidth) const |
| 211 { | 211 { |
| 212 maxLogicalWidth = m_optionsWidth + 2 * optionsSpacingHorizontal; | 212 maxLogicalWidth = m_optionsWidth + 2 * optionsSpacingHorizontal; |
| 213 if (m_vBar) | 213 if (m_vBar) |
| 214 maxLogicalWidth += m_vBar->width(); | 214 maxLogicalWidth += verticalScrollbarWidth(); |
| 215 if (!style()->width().isPercent()) | 215 if (!style()->width().isPercent()) |
| 216 minLogicalWidth = maxLogicalWidth; | 216 minLogicalWidth = maxLogicalWidth; |
| 217 } | 217 } |
| 218 | 218 |
| 219 void RenderListBox::computePreferredLogicalWidths() | 219 void RenderListBox::computePreferredLogicalWidths() |
| 220 { | 220 { |
| 221 ASSERT(!m_optionsChanged); | 221 ASSERT(!m_optionsChanged); |
| 222 | 222 |
| 223 m_minPreferredLogicalWidth = 0; | 223 m_minPreferredLogicalWidth = 0; |
| 224 m_maxPreferredLogicalWidth = 0; | 224 m_maxPreferredLogicalWidth = 0; |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 277 } | 277 } |
| 278 | 278 |
| 279 int RenderListBox::baselinePosition(FontBaseline baselineType, bool firstLine, L
ineDirectionMode lineDirection, LinePositionMode linePositionMode) const | 279 int RenderListBox::baselinePosition(FontBaseline baselineType, bool firstLine, L
ineDirectionMode lineDirection, LinePositionMode linePositionMode) const |
| 280 { | 280 { |
| 281 return RenderBox::baselinePosition(baselineType, firstLine, lineDirection, l
inePositionMode) - baselineAdjustment; | 281 return RenderBox::baselinePosition(baselineType, firstLine, lineDirection, l
inePositionMode) - baselineAdjustment; |
| 282 } | 282 } |
| 283 | 283 |
| 284 LayoutRect RenderListBox::itemBoundingBoxRect(const LayoutPoint& additionalOffse
t, int index) | 284 LayoutRect RenderListBox::itemBoundingBoxRect(const LayoutPoint& additionalOffse
t, int index) |
| 285 { | 285 { |
| 286 // For RTL, items start after the left-side vertical scrollbar. | 286 // For RTL, items start after the left-side vertical scrollbar. |
| 287 int scrollbarOffset = style()->shouldPlaceBlockDirectionScrollbarOnLogicalLe
ft() ? m_vBar->width() : 0; | 287 int scrollbarOffset = style()->shouldPlaceBlockDirectionScrollbarOnLogicalLe
ft() ? verticalScrollbarWidth() : 0; |
| 288 return LayoutRect(additionalOffset.x() + borderLeft() + paddingLeft() + scro
llbarOffset, | 288 return LayoutRect(additionalOffset.x() + borderLeft() + paddingLeft() + scro
llbarOffset, |
| 289 additionalOffset.y() + borderTop() + paddingTop() + itemHeight() * (inde
x - m_indexOffset), | 289 additionalOffset.y() + borderTop() + paddingTop() + itemHeight() * (inde
x - m_indexOffset), |
| 290 contentWidth(), itemHeight()); | 290 contentWidth(), itemHeight()); |
| 291 } | 291 } |
| 292 | 292 |
| 293 void RenderListBox::paintObject(PaintInfo& paintInfo, const LayoutPoint& paintOf
fset) | 293 void RenderListBox::paintObject(PaintInfo& paintInfo, const LayoutPoint& paintOf
fset) |
| 294 { | 294 { |
| 295 if (style()->visibility() != VISIBLE) | 295 if (style()->visibility() != VISIBLE) |
| 296 return; | 296 return; |
| 297 | 297 |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 358 } | 358 } |
| 359 } | 359 } |
| 360 } | 360 } |
| 361 | 361 |
| 362 int RenderListBox::scrollbarLeft() const | 362 int RenderListBox::scrollbarLeft() const |
| 363 { | 363 { |
| 364 int scrollbarLeft = 0; | 364 int scrollbarLeft = 0; |
| 365 if (style()->shouldPlaceBlockDirectionScrollbarOnLogicalLeft()) | 365 if (style()->shouldPlaceBlockDirectionScrollbarOnLogicalLeft()) |
| 366 scrollbarLeft = borderLeft(); | 366 scrollbarLeft = borderLeft(); |
| 367 else | 367 else |
| 368 scrollbarLeft = width() - borderRight() - m_vBar->width(); | 368 scrollbarLeft = width() - borderRight() - verticalScrollbarWidth(); |
| 369 return scrollbarLeft; | 369 return scrollbarLeft; |
| 370 } | 370 } |
| 371 | 371 |
| 372 void RenderListBox::paintScrollbar(PaintInfo& paintInfo, const LayoutPoint& pain
tOffset) | 372 void RenderListBox::paintScrollbar(PaintInfo& paintInfo, const LayoutPoint& pain
tOffset) |
| 373 { | 373 { |
| 374 if (m_vBar) { | 374 if (m_vBar) { |
| 375 IntRect scrollRect = pixelSnappedIntRect(paintOffset.x() + scrollbarLeft
(), | 375 IntRect scrollRect = pixelSnappedIntRect(paintOffset.x() + scrollbarLeft
(), |
| 376 paintOffset.y() + borderTop(), | 376 paintOffset.y() + borderTop(), |
| 377 m_vBar->width(), | 377 verticalScrollbarWidth(), |
| 378 height() - (borderTop() + borderBottom())); | 378 height() - (borderTop() + borderBottom())); |
| 379 m_vBar->setFrameRect(scrollRect); | 379 m_vBar->setFrameRect(scrollRect); |
| 380 m_vBar->paint(paintInfo.context, paintInfo.rect); | 380 m_vBar->paint(paintInfo.context, paintInfo.rect); |
| 381 } | 381 } |
| 382 } | 382 } |
| 383 | 383 |
| 384 static LayoutSize itemOffsetForAlignment(TextRun textRun, RenderStyle* itemStyle
, Font itemFont, LayoutRect itemBoudingBox) | 384 static LayoutSize itemOffsetForAlignment(TextRun textRun, RenderStyle* itemStyle
, Font itemFont, LayoutRect itemBoudingBox) |
| 385 { | 385 { |
| 386 ETextAlign actualAlignment = itemStyle->textAlign(); | 386 ETextAlign actualAlignment = itemStyle->textAlign(); |
| 387 // FIXME: Firefox doesn't respect JUSTIFY. Should we? | 387 // FIXME: Firefox doesn't respect JUSTIFY. Should we? |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 477 } | 477 } |
| 478 } | 478 } |
| 479 | 479 |
| 480 bool RenderListBox::isPointInOverflowControl(HitTestResult& result, const Layout
Point& locationInContainer, const LayoutPoint& accumulatedOffset) | 480 bool RenderListBox::isPointInOverflowControl(HitTestResult& result, const Layout
Point& locationInContainer, const LayoutPoint& accumulatedOffset) |
| 481 { | 481 { |
| 482 if (!m_vBar || !m_vBar->shouldParticipateInHitTesting()) | 482 if (!m_vBar || !m_vBar->shouldParticipateInHitTesting()) |
| 483 return false; | 483 return false; |
| 484 | 484 |
| 485 LayoutRect vertRect(accumulatedOffset.x() + scrollbarLeft(), | 485 LayoutRect vertRect(accumulatedOffset.x() + scrollbarLeft(), |
| 486 accumulatedOffset.y() + borderTop(), | 486 accumulatedOffset.y() + borderTop(), |
| 487 m_vBar->width(), | 487 verticalScrollbarWidth(), |
| 488 height() - borderTop() - borderBottom()); | 488 height() - borderTop() - borderBottom()); |
| 489 | 489 |
| 490 if (vertRect.contains(locationInContainer)) { | 490 if (vertRect.contains(locationInContainer)) { |
| 491 result.setScrollbar(m_vBar.get()); | 491 result.setScrollbar(m_vBar.get()); |
| 492 return true; | 492 return true; |
| 493 } | 493 } |
| 494 return false; | 494 return false; |
| 495 } | 495 } |
| 496 | 496 |
| 497 int RenderListBox::listIndexAtOffset(const LayoutSize& offset) | 497 int RenderListBox::listIndexAtOffset(const LayoutSize& offset) |
| 498 { | 498 { |
| 499 if (!numItems()) | 499 if (!numItems()) |
| 500 return -1; | 500 return -1; |
| 501 | 501 |
| 502 if (offset.height() < borderTop() + paddingTop() || offset.height() > height
() - paddingBottom() - borderBottom()) | 502 if (offset.height() < borderTop() + paddingTop() || offset.height() > height
() - paddingBottom() - borderBottom()) |
| 503 return -1; | 503 return -1; |
| 504 | 504 |
| 505 int scrollbarWidth = m_vBar ? m_vBar->width() : 0; | 505 int scrollbarWidth = verticalScrollbarWidth(); |
| 506 int rightScrollbarOffset = style()->shouldPlaceBlockDirectionScrollbarOnLogi
calLeft() ? scrollbarWidth : 0; | 506 int rightScrollbarOffset = style()->shouldPlaceBlockDirectionScrollbarOnLogi
calLeft() ? scrollbarWidth : 0; |
| 507 int leftScrollbarOffset = style()->shouldPlaceBlockDirectionScrollbarOnLogic
alLeft() ? 0 : scrollbarWidth; | 507 int leftScrollbarOffset = style()->shouldPlaceBlockDirectionScrollbarOnLogic
alLeft() ? 0 : scrollbarWidth; |
| 508 if (offset.width() < borderLeft() + paddingLeft() + rightScrollbarOffset | 508 if (offset.width() < borderLeft() + paddingLeft() + rightScrollbarOffset |
| 509 || offset.width() > width() - borderRight() - paddingRight() - leftScrol
lbarOffset) | 509 || offset.width() > width() - borderRight() - paddingRight() - leftScrol
lbarOffset) |
| 510 return -1; | 510 return -1; |
| 511 | 511 |
| 512 int newOffset = (offset.height() - borderTop() - paddingTop()) / itemHeight(
) + m_indexOffset; | 512 int newOffset = (offset.height() - borderTop() - paddingTop()) / itemHeight(
) + m_indexOffset; |
| 513 return newOffset < numItems() ? newOffset : -1; | 513 return newOffset < numItems() ? newOffset : -1; |
| 514 } | 514 } |
| 515 | 515 |
| (...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 731 } | 731 } |
| 732 } | 732 } |
| 733 | 733 |
| 734 return true; | 734 return true; |
| 735 } | 735 } |
| 736 | 736 |
| 737 LayoutRect RenderListBox::controlClipRect(const LayoutPoint& additionalOffset) c
onst | 737 LayoutRect RenderListBox::controlClipRect(const LayoutPoint& additionalOffset) c
onst |
| 738 { | 738 { |
| 739 LayoutRect clipRect = contentBoxRect(); | 739 LayoutRect clipRect = contentBoxRect(); |
| 740 if (style()->shouldPlaceBlockDirectionScrollbarOnLogicalLeft()) | 740 if (style()->shouldPlaceBlockDirectionScrollbarOnLogicalLeft()) |
| 741 clipRect.moveBy(additionalOffset + LayoutPoint(m_vBar->width(), 0)); | 741 clipRect.moveBy(additionalOffset + LayoutPoint(verticalScrollbarWidth(),
0)); |
| 742 else | 742 else |
| 743 clipRect.moveBy(additionalOffset); | 743 clipRect.moveBy(additionalOffset); |
| 744 return clipRect; | 744 return clipRect; |
| 745 } | 745 } |
| 746 | 746 |
| 747 bool RenderListBox::isActive() const | 747 bool RenderListBox::isActive() const |
| 748 { | 748 { |
| 749 Page* page = frame()->page(); | 749 Page* page = frame()->page(); |
| 750 return page && page->focusController().isActive(); | 750 return page && page->focusController().isActive(); |
| 751 } | 751 } |
| (...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 937 | 937 |
| 938 if (m_vBar) | 938 if (m_vBar) |
| 939 m_vBar->styleChanged(); | 939 m_vBar->styleChanged(); |
| 940 | 940 |
| 941 // Force an update since we know the scrollbars have changed things. | 941 // Force an update since we know the scrollbars have changed things. |
| 942 if (document().hasAnnotatedRegions()) | 942 if (document().hasAnnotatedRegions()) |
| 943 document().setAnnotatedRegionsDirty(true); | 943 document().setAnnotatedRegionsDirty(true); |
| 944 } | 944 } |
| 945 | 945 |
| 946 } // namespace WebCore | 946 } // namespace WebCore |
| OLD | NEW |