| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) |
| 3 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. | 3 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. |
| 4 * All rights reserved. | 4 * All rights reserved. |
| 5 * | 5 * |
| 6 * This library is free software; you can redistribute it and/or | 6 * This library is free software; you can redistribute it and/or |
| 7 * modify it under the terms of the GNU Library General Public | 7 * modify it under the terms of the GNU Library General Public |
| 8 * License as published by the Free Software Foundation; either | 8 * License as published by the Free Software Foundation; either |
| 9 * version 2 of the License, or (at your option) any later version. | 9 * version 2 of the License, or (at your option) any later version. |
| 10 * | 10 * |
| (...skipping 447 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 458 // Chromium OS login screen. | 458 // Chromium OS login screen. |
| 459 DisableCompositingQueryAsserts disabler; | 459 DisableCompositingQueryAsserts disabler; |
| 460 | 460 |
| 461 if (compositor()->inCompositingMode()) | 461 if (compositor()->inCompositingMode()) |
| 462 compositor()->fullyInvalidatePaint(); | 462 compositor()->fullyInvalidatePaint(); |
| 463 } | 463 } |
| 464 | 464 |
| 465 bool LayoutView::mapToVisualRectInAncestorSpace( | 465 bool LayoutView::mapToVisualRectInAncestorSpace( |
| 466 const LayoutBoxModelObject* ancestor, | 466 const LayoutBoxModelObject* ancestor, |
| 467 LayoutRect& rect, | 467 LayoutRect& rect, |
| 468 VisualRectFlags visualRectFlags) const { | |
| 469 return mapToVisualRectInAncestorSpace(ancestor, rect, 0, visualRectFlags); | |
| 470 } | |
| 471 | |
| 472 bool LayoutView::mapToVisualRectInAncestorSpace( | |
| 473 const LayoutBoxModelObject* ancestor, | |
| 474 LayoutRect& rect, | |
| 475 MapCoordinatesFlags mode, | 468 MapCoordinatesFlags mode, |
| 476 VisualRectFlags visualRectFlags) const { | 469 VisualRectFlags visualRectFlags) const { |
| 470 TransformState transformState(TransformState::ApplyTransformDirection, |
| 471 FloatQuad(FloatRect(rect))); |
| 472 bool retval = mapToVisualRectInAncestorSpaceInternal(ancestor, transformState, |
| 473 mode, visualRectFlags); |
| 474 transformState.flatten(); |
| 475 rect = LayoutRect(transformState.lastPlanarQuad().boundingBox()); |
| 476 return retval; |
| 477 } |
| 478 |
| 479 bool LayoutView::mapToVisualRectInAncestorSpaceInternal( |
| 480 const LayoutBoxModelObject* ancestor, |
| 481 TransformState& transformState, |
| 482 VisualRectFlags visualRectFlags) const { |
| 483 return mapToVisualRectInAncestorSpaceInternal(ancestor, transformState, 0, |
| 484 visualRectFlags); |
| 485 } |
| 486 |
| 487 bool LayoutView::mapToVisualRectInAncestorSpaceInternal( |
| 488 const LayoutBoxModelObject* ancestor, |
| 489 TransformState& transformState, |
| 490 MapCoordinatesFlags mode, |
| 491 VisualRectFlags visualRectFlags) const { |
| 477 if (mode & IsFixed) | 492 if (mode & IsFixed) |
| 478 rect.move(offsetForFixedPosition(true)); | 493 transformState.move(offsetForFixedPosition(true)); |
| 479 | 494 |
| 480 // Apply our transform if we have one (because of full page zooming). | 495 // Apply our transform if we have one (because of full page zooming). |
| 481 if (layer() && layer()->transform()) | 496 if (layer() && layer()->transform()) { |
| 482 rect = layer()->transform()->mapRect(rect); | 497 transformState.applyTransform(layer()->currentTransform(), |
| 498 TransformState::FlattenTransform); |
| 499 } |
| 500 |
| 501 transformState.flatten(); |
| 483 | 502 |
| 484 if (ancestor == this) | 503 if (ancestor == this) |
| 485 return true; | 504 return true; |
| 486 | 505 |
| 487 Element* owner = document().localOwner(); | 506 Element* owner = document().localOwner(); |
| 488 if (!owner) | 507 if (!owner) { |
| 489 return frameView()->mapToVisualRectInTopFrameSpace(rect); | 508 LayoutRect rect(transformState.lastPlanarQuad().boundingBox()); |
| 509 bool retval = frameView()->mapToVisualRectInTopFrameSpace(rect); |
| 510 transformState.setQuad(FloatQuad(FloatRect(rect))); |
| 511 return retval; |
| 512 } |
| 490 | 513 |
| 491 if (LayoutBox* obj = owner->layoutBox()) { | 514 if (LayoutBox* obj = owner->layoutBox()) { |
| 515 LayoutRect rect(transformState.lastPlanarQuad().boundingBox()); |
| 492 if (!(mode & InputIsInFrameCoordinates)) { | 516 if (!(mode & InputIsInFrameCoordinates)) { |
| 493 // Intersect the viewport with the visual rect. | 517 // Intersect the viewport with the visual rect. |
| 494 LayoutRect viewRectangle = viewRect(); | 518 LayoutRect viewRectangle = viewRect(); |
| 495 if (visualRectFlags & EdgeInclusive) { | 519 if (visualRectFlags & EdgeInclusive) { |
| 496 if (!rect.inclusiveIntersect(viewRectangle)) | 520 if (!rect.inclusiveIntersect(viewRectangle)) { |
| 521 transformState.setQuad(FloatQuad(FloatRect(rect))); |
| 497 return false; | 522 return false; |
| 523 } |
| 498 } else { | 524 } else { |
| 499 rect.intersect(viewRectangle); | 525 rect.intersect(viewRectangle); |
| 500 } | 526 } |
| 501 | 527 |
| 502 // Adjust for scroll offset of the view. | 528 // Adjust for scroll offset of the view. |
| 503 rect.moveBy(-viewRectangle.location()); | 529 rect.moveBy(-viewRectangle.location()); |
| 504 } | 530 } |
| 505 // Frames are painted at rounded-int position. Since we cannot efficiently | 531 // Frames are painted at rounded-int position. Since we cannot efficiently |
| 506 // compute the subpixel offset of painting at this point in a a bottom-up | 532 // compute the subpixel offset of painting at this point in a a bottom-up |
| 507 // walk, round to the enclosing int rect, which will enclose the actual | 533 // walk, round to the enclosing int rect, which will enclose the actual |
| 508 // visible rect. | 534 // visible rect. |
| 509 rect = LayoutRect(enclosingIntRect(rect)); | 535 rect = LayoutRect(enclosingIntRect(rect)); |
| 510 | 536 |
| 511 // Adjust for frame border. | 537 // Adjust for frame border. |
| 512 rect.move(obj->contentBoxOffset()); | 538 rect.move(obj->contentBoxOffset()); |
| 513 return obj->mapToVisualRectInAncestorSpace(ancestor, rect, visualRectFlags); | 539 transformState.setQuad(FloatQuad(FloatRect(rect))); |
| 540 |
| 541 return obj->mapToVisualRectInAncestorSpaceInternal(ancestor, transformState, |
| 542 visualRectFlags); |
| 514 } | 543 } |
| 515 | 544 |
| 516 // This can happen, e.g., if the iframe element has display:none. | 545 // This can happen, e.g., if the iframe element has display:none. |
| 517 rect = LayoutRect(); | 546 transformState.setQuad(FloatQuad(FloatRect())); |
| 518 return false; | 547 return false; |
| 519 } | 548 } |
| 520 | 549 |
| 521 LayoutSize LayoutView::offsetForFixedPosition(bool includePendingScroll) const { | 550 LayoutSize LayoutView::offsetForFixedPosition(bool includePendingScroll) const { |
| 522 FloatSize adjustment; | 551 FloatSize adjustment; |
| 523 if (m_frameView) { | 552 if (m_frameView) { |
| 524 adjustment += m_frameView->getScrollOffset(); | 553 adjustment += m_frameView->getScrollOffset(); |
| 525 | 554 |
| 526 // FIXME: Paint invalidation should happen after scroll updates, so there | 555 // FIXME: Paint invalidation should happen after scroll updates, so there |
| 527 // should be no pending scroll delta. | 556 // should be no pending scroll delta. |
| (...skipping 519 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1047 bool LayoutView::paintedOutputOfObjectHasNoEffectRegardlessOfSize() const { | 1076 bool LayoutView::paintedOutputOfObjectHasNoEffectRegardlessOfSize() const { |
| 1048 // Frame scroll corner is painted using LayoutView as the display item client. | 1077 // Frame scroll corner is painted using LayoutView as the display item client. |
| 1049 if (!RuntimeEnabledFeatures::rootLayerScrollingEnabled() && | 1078 if (!RuntimeEnabledFeatures::rootLayerScrollingEnabled() && |
| 1050 (frameView()->horizontalScrollbar() || frameView()->verticalScrollbar())) | 1079 (frameView()->horizontalScrollbar() || frameView()->verticalScrollbar())) |
| 1051 return false; | 1080 return false; |
| 1052 | 1081 |
| 1053 return LayoutBlockFlow::paintedOutputOfObjectHasNoEffectRegardlessOfSize(); | 1082 return LayoutBlockFlow::paintedOutputOfObjectHasNoEffectRegardlessOfSize(); |
| 1054 } | 1083 } |
| 1055 | 1084 |
| 1056 } // namespace blink | 1085 } // namespace blink |
| OLD | NEW |