Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(33)

Side by Side Diff: Source/core/rendering/RenderBox.cpp

Issue 669803002: Optimize for horizontal writing mode (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: w compile fix Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « Source/core/rendering/RenderBox.h ('k') | Source/core/rendering/RenderFlexibleBox.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) 3 * (C) 1999 Antti Koivisto (koivisto@kde.org)
4 * (C) 2005 Allan Sandfeld Jensen (kde@carewolf.com) 4 * (C) 2005 Allan Sandfeld Jensen (kde@carewolf.com)
5 * (C) 2005, 2006 Samuel Weinig (sam.weinig@gmail.com) 5 * (C) 2005, 2006 Samuel Weinig (sam.weinig@gmail.com)
6 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserv ed. 6 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserv ed.
7 * Copyright (C) 2013 Adobe Systems Incorporated. All rights reserved. 7 * Copyright (C) 2013 Adobe Systems Incorporated. All rights reserved.
8 * 8 *
9 * This library is free software; you can redistribute it and/or 9 * This library is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU Library General Public 10 * modify it under the terms of the GNU Library General Public
(...skipping 1745 matching lines...) Expand 10 before | Expand all | Expand 10 after
1756 rect.move(layer()->offsetForInFlowPosition()); 1756 rect.move(layer()->offsetForInFlowPosition());
1757 1757
1758 rect.moveBy(location()); 1758 rect.moveBy(location());
1759 rect.move(paintInvalidationState->paintOffset()); 1759 rect.move(paintInvalidationState->paintOffset());
1760 if (paintInvalidationState->isClipped()) 1760 if (paintInvalidationState->isClipped())
1761 rect.intersect(paintInvalidationState->clipRect()); 1761 rect.intersect(paintInvalidationState->clipRect());
1762 return; 1762 return;
1763 } 1763 }
1764 1764
1765 if (paintInvalidationContainer == this) { 1765 if (paintInvalidationContainer == this) {
1766 if (paintInvalidationContainer->style()->isFlippedBlocksWritingMode()) 1766 if (paintInvalidationContainer->style()->slowIsFlippedBlocksWritingMode( ))
1767 flipForWritingMode(rect); 1767 flipForWritingMode(rect);
1768 return; 1768 return;
1769 } 1769 }
1770 1770
1771 bool containerSkipped; 1771 bool containerSkipped;
1772 RenderObject* o = container(paintInvalidationContainer, &containerSkipped); 1772 RenderObject* o = container(paintInvalidationContainer, &containerSkipped);
1773 if (!o) 1773 if (!o)
1774 return; 1774 return;
1775 1775
1776 if (isWritingModeRoot()) 1776 if (isWritingModeRoot())
(...skipping 1134 matching lines...) Expand 10 before | Expand all | Expand 10 after
2911 } 2911 }
2912 } 2912 }
2913 2913
2914 computedValues.m_extent += bordersPlusPadding; 2914 computedValues.m_extent += bordersPlusPadding;
2915 } 2915 }
2916 2916
2917 static void computeLogicalLeftPositionedOffset(LayoutUnit& logicalLeftPos, const RenderBox* child, LayoutUnit logicalWidthValue, const RenderBoxModelObject* con tainerBlock, LayoutUnit containerLogicalWidth) 2917 static void computeLogicalLeftPositionedOffset(LayoutUnit& logicalLeftPos, const RenderBox* child, LayoutUnit logicalWidthValue, const RenderBoxModelObject* con tainerBlock, LayoutUnit containerLogicalWidth)
2918 { 2918 {
2919 // Deal with differing writing modes here. Our offset needs to be in the co ntaining block's coordinate space. If the containing block is flipped 2919 // Deal with differing writing modes here. Our offset needs to be in the co ntaining block's coordinate space. If the containing block is flipped
2920 // along this axis, then we need to flip the coordinate. This can only happ en if the containing block is both a flipped mode and perpendicular to us. 2920 // along this axis, then we need to flip the coordinate. This can only happ en if the containing block is both a flipped mode and perpendicular to us.
2921 if (containerBlock->isHorizontalWritingMode() != child->isHorizontalWritingM ode() && containerBlock->style()->isFlippedBlocksWritingMode()) { 2921 if (containerBlock->isHorizontalWritingMode() != child->isHorizontalWritingM ode() && containerBlock->style()->slowIsFlippedBlocksWritingMode()) {
2922 logicalLeftPos = containerLogicalWidth - logicalWidthValue - logicalLeft Pos; 2922 logicalLeftPos = containerLogicalWidth - logicalWidthValue - logicalLeft Pos;
2923 logicalLeftPos += (child->isHorizontalWritingMode() ? containerBlock->bo rderRight() : containerBlock->borderBottom()); 2923 logicalLeftPos += (child->isHorizontalWritingMode() ? containerBlock->bo rderRight() : containerBlock->borderBottom());
2924 } else { 2924 } else {
2925 logicalLeftPos += (child->isHorizontalWritingMode() ? containerBlock->bo rderLeft() : containerBlock->borderTop()); 2925 logicalLeftPos += (child->isHorizontalWritingMode() ? containerBlock->bo rderLeft() : containerBlock->borderTop());
2926 } 2926 }
2927 } 2927 }
2928 2928
2929 void RenderBox::shrinkToFitWidth(const LayoutUnit availableSpace, const LayoutUn it logicalLeftValue, const LayoutUnit bordersPlusPadding, LogicalExtentComputedV alues& computedValues) const 2929 void RenderBox::shrinkToFitWidth(const LayoutUnit availableSpace, const LayoutUn it logicalLeftValue, const LayoutUnit bordersPlusPadding, LogicalExtentComputedV alues& computedValues) const
2930 { 2930 {
2931 // FIXME: would it be better to have shrink-to-fit in one step? 2931 // FIXME: would it be better to have shrink-to-fit in one step?
(...skipping 290 matching lines...) Expand 10 before | Expand all | Expand 10 after
3222 } 3222 }
3223 3223
3224 // Set final height value. 3224 // Set final height value.
3225 computedValues.m_extent += bordersPlusPadding; 3225 computedValues.m_extent += bordersPlusPadding;
3226 } 3226 }
3227 3227
3228 static void computeLogicalTopPositionedOffset(LayoutUnit& logicalTopPos, const R enderBox* child, LayoutUnit logicalHeightValue, const RenderBoxModelObject* cont ainerBlock, LayoutUnit containerLogicalHeight) 3228 static void computeLogicalTopPositionedOffset(LayoutUnit& logicalTopPos, const R enderBox* child, LayoutUnit logicalHeightValue, const RenderBoxModelObject* cont ainerBlock, LayoutUnit containerLogicalHeight)
3229 { 3229 {
3230 // Deal with differing writing modes here. Our offset needs to be in the co ntaining block's coordinate space. If the containing block is flipped 3230 // Deal with differing writing modes here. Our offset needs to be in the co ntaining block's coordinate space. If the containing block is flipped
3231 // along this axis, then we need to flip the coordinate. This can only happ en if the containing block is both a flipped mode and perpendicular to us. 3231 // along this axis, then we need to flip the coordinate. This can only happ en if the containing block is both a flipped mode and perpendicular to us.
3232 if ((child->style()->isFlippedBlocksWritingMode() && child->isHorizontalWrit ingMode() != containerBlock->isHorizontalWritingMode()) 3232 if ((child->style()->slowIsFlippedBlocksWritingMode() && child->isHorizontal WritingMode() != containerBlock->isHorizontalWritingMode())
3233 || (child->style()->isFlippedBlocksWritingMode() != containerBlock->styl e()->isFlippedBlocksWritingMode() && child->isHorizontalWritingMode() == contain erBlock->isHorizontalWritingMode())) 3233 || (child->style()->slowIsFlippedBlocksWritingMode() != containerBlock-> style()->slowIsFlippedBlocksWritingMode() && child->isHorizontalWritingMode() == containerBlock->isHorizontalWritingMode()))
3234 logicalTopPos = containerLogicalHeight - logicalHeightValue - logicalTop Pos; 3234 logicalTopPos = containerLogicalHeight - logicalHeightValue - logicalTop Pos;
3235 3235
3236 // Our offset is from the logical bottom edge in a flipped environment, e.g. , right for vertical-rl and bottom for horizontal-bt. 3236 // Our offset is from the logical bottom edge in a flipped environment, e.g. , right for vertical-rl and bottom for horizontal-bt.
3237 if (containerBlock->style()->isFlippedBlocksWritingMode() && child->isHorizo ntalWritingMode() == containerBlock->isHorizontalWritingMode()) { 3237 if (containerBlock->style()->slowIsFlippedBlocksWritingMode() && child->isHo rizontalWritingMode() == containerBlock->isHorizontalWritingMode()) {
chrishtr 2014/10/28 18:18:21 Are cases like this ones that didn't make the metr
3238 if (child->isHorizontalWritingMode()) 3238 if (child->isHorizontalWritingMode())
3239 logicalTopPos += containerBlock->borderBottom(); 3239 logicalTopPos += containerBlock->borderBottom();
3240 else 3240 else
3241 logicalTopPos += containerBlock->borderRight(); 3241 logicalTopPos += containerBlock->borderRight();
3242 } else { 3242 } else {
3243 if (child->isHorizontalWritingMode()) 3243 if (child->isHorizontalWritingMode())
3244 logicalTopPos += containerBlock->borderTop(); 3244 logicalTopPos += containerBlock->borderTop();
3245 else 3245 else
3246 logicalTopPos += containerBlock->borderLeft(); 3246 logicalTopPos += containerBlock->borderLeft();
3247 } 3247 }
(...skipping 1084 matching lines...) Expand 10 before | Expand all | Expand 10 after
4332 return adjustedPositionRelativeToOffsetParent(topLeftLocation()).x(); 4332 return adjustedPositionRelativeToOffsetParent(topLeftLocation()).x();
4333 } 4333 }
4334 4334
4335 LayoutUnit RenderBox::offsetTop() const 4335 LayoutUnit RenderBox::offsetTop() const
4336 { 4336 {
4337 return adjustedPositionRelativeToOffsetParent(topLeftLocation()).y(); 4337 return adjustedPositionRelativeToOffsetParent(topLeftLocation()).y();
4338 } 4338 }
4339 4339
4340 LayoutPoint RenderBox::flipForWritingModeForChild(const RenderBox* child, const LayoutPoint& point) const 4340 LayoutPoint RenderBox::flipForWritingModeForChild(const RenderBox* child, const LayoutPoint& point) const
4341 { 4341 {
4342 if (!style()->isFlippedBlocksWritingMode()) 4342 if (!UNLIKELY(document().containsAnyRareWritingMode()))
4343 return point;
4344 if (!style()->slowIsFlippedBlocksWritingMode())
4343 return point; 4345 return point;
4344 4346
4345 // The child is going to add in its x() and y(), so we have to make sure it ends up in 4347 // The child is going to add in its x() and y(), so we have to make sure it ends up in
4346 // the right place. 4348 // the right place.
4347 if (isHorizontalWritingMode()) 4349 if (isHorizontalWritingMode())
4348 return LayoutPoint(point.x(), point.y() + height() - child->height() - ( 2 * child->y())); 4350 return LayoutPoint(point.x(), point.y() + height() - child->height() - ( 2 * child->y()));
4349 return LayoutPoint(point.x() + width() - child->width() - (2 * child->x()), point.y()); 4351 return LayoutPoint(point.x() + width() - child->width() - (2 * child->x()), point.y());
4350 } 4352 }
4351 4353
4352 void RenderBox::flipForWritingMode(LayoutRect& rect) const
4353 {
4354 if (!style()->isFlippedBlocksWritingMode())
4355 return;
4356
4357 if (isHorizontalWritingMode())
4358 rect.setY(height() - rect.maxY());
4359 else
4360 rect.setX(width() - rect.maxX());
4361 }
4362
4363 LayoutUnit RenderBox::flipForWritingMode(LayoutUnit position) const
4364 {
4365 if (!style()->isFlippedBlocksWritingMode())
4366 return position;
4367 return logicalHeight() - position;
4368 }
4369
4370 LayoutPoint RenderBox::flipForWritingMode(const LayoutPoint& position) const
4371 {
4372 if (!style()->isFlippedBlocksWritingMode())
4373 return position;
4374 return isHorizontalWritingMode() ? LayoutPoint(position.x(), height() - posi tion.y()) : LayoutPoint(width() - position.x(), position.y());
4375 }
4376
4377 LayoutPoint RenderBox::flipForWritingModeIncludingColumns(const LayoutPoint& poi nt) const 4354 LayoutPoint RenderBox::flipForWritingModeIncludingColumns(const LayoutPoint& poi nt) const
4378 { 4355 {
4379 if (!hasColumns() || !style()->isFlippedBlocksWritingMode()) 4356 if (!UNLIKELY(document().containsAnyRareWritingMode()))
4357 return point;
4358 if (!hasColumns() || !style()->slowIsFlippedBlocksWritingMode())
4380 return flipForWritingMode(point); 4359 return flipForWritingMode(point);
4381 return toRenderBlock(this)->flipForWritingModeIncludingColumns(point); 4360 return toRenderBlock(this)->flipForWritingModeIncludingColumns(point);
4382 } 4361 }
4383 4362
4384 LayoutSize RenderBox::flipForWritingMode(const LayoutSize& offset) const
4385 {
4386 if (!style()->isFlippedBlocksWritingMode())
4387 return offset;
4388 return isHorizontalWritingMode() ? LayoutSize(offset.width(), height() - off set.height()) : LayoutSize(width() - offset.width(), offset.height());
4389 }
4390
4391 FloatPoint RenderBox::flipForWritingMode(const FloatPoint& position) const
4392 {
4393 if (!style()->isFlippedBlocksWritingMode())
4394 return position;
4395 return isHorizontalWritingMode() ? FloatPoint(position.x(), height() - posit ion.y()) : FloatPoint(width() - position.x(), position.y());
4396 }
4397
4398 void RenderBox::flipForWritingMode(FloatRect& rect) const
4399 {
4400 if (!style()->isFlippedBlocksWritingMode())
4401 return;
4402
4403 if (isHorizontalWritingMode())
4404 rect.setY(height() - rect.maxY());
4405 else
4406 rect.setX(width() - rect.maxX());
4407 }
4408
4409 LayoutPoint RenderBox::topLeftLocation() const 4363 LayoutPoint RenderBox::topLeftLocation() const
4410 { 4364 {
4411 RenderBlock* containerBlock = containingBlock(); 4365 RenderBlock* containerBlock = containingBlock();
4412 if (!containerBlock || containerBlock == this) 4366 if (!containerBlock || containerBlock == this)
4413 return location(); 4367 return location();
4414 return containerBlock->flipForWritingModeForChild(this, location()); 4368 return containerBlock->flipForWritingModeForChild(this, location());
4415 } 4369 }
4416 4370
4417 LayoutSize RenderBox::topLeftLocationOffset() const 4371 LayoutSize RenderBox::topLeftLocationOffset() const
4418 { 4372 {
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
4525 ASSERT(style()->hasBackground() || style()->hasBoxDecorations()); 4479 ASSERT(style()->hasBackground() || style()->hasBoxDecorations());
4526 4480
4527 if (m_rareData && m_rareData->m_previousBorderBoxSize.width() != -1) 4481 if (m_rareData && m_rareData->m_previousBorderBoxSize.width() != -1)
4528 return m_rareData->m_previousBorderBoxSize; 4482 return m_rareData->m_previousBorderBoxSize;
4529 4483
4530 // We didn't save the old border box size because it was the same as the siz e of oldBounds. 4484 // We didn't save the old border box size because it was the same as the siz e of oldBounds.
4531 return previousBoundsSize; 4485 return previousBoundsSize;
4532 } 4486 }
4533 4487
4534 } // namespace blink 4488 } // namespace blink
OLDNEW
« no previous file with comments | « Source/core/rendering/RenderBox.h ('k') | Source/core/rendering/RenderFlexibleBox.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698