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

Side by Side Diff: Source/core/layout/LayoutBoxModelObject.cpp

Issue 1198433002: *** NOT FOR LANDING *** mapLocalToContainer and offsetFromContainer cleanup. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: There's also work that LayoutBoxModelObject::offsetFromContainer could do instead of LayoutObject. Created 5 years, 6 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 | Annotate | Revision Log
« no previous file with comments | « Source/core/layout/LayoutBoxModelObject.h ('k') | Source/core/layout/LayoutFlowThread.h » ('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 Apple Inc. All rights reserved. 6 * Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
7 * Copyright (C) 2010 Google Inc. All rights reserved. 7 * Copyright (C) 2010 Google Inc. 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 831 matching lines...) Expand 10 before | Expand all | Expand 10 after
842 break; 842 break;
843 } 843 }
844 x = std::min(x, std::max<LayoutUnit>(maxX - caretWidth(), 0)); 844 x = std::min(x, std::max<LayoutUnit>(maxX - caretWidth(), 0));
845 845
846 LayoutUnit height = style()->fontMetrics().height(); 846 LayoutUnit height = style()->fontMetrics().height();
847 LayoutUnit verticalSpace = lineHeight(true, currentStyle.isHorizontalWriting Mode() ? HorizontalLine : VerticalLine, PositionOfInteriorLineBoxes) - height; 847 LayoutUnit verticalSpace = lineHeight(true, currentStyle.isHorizontalWriting Mode() ? HorizontalLine : VerticalLine, PositionOfInteriorLineBoxes) - height;
848 LayoutUnit y = paddingTop() + borderTop() + (verticalSpace / 2); 848 LayoutUnit y = paddingTop() + borderTop() + (verticalSpace / 2);
849 return currentStyle.isHorizontalWritingMode() ? LayoutRect(x, y, caretWidth( ), height) : LayoutRect(y, x, height, caretWidth()); 849 return currentStyle.isHorizontalWritingMode() ? LayoutRect(x, y, caretWidth( ), height) : LayoutRect(y, x, height, caretWidth());
850 } 850 }
851 851
852 LayoutSize LayoutBoxModelObject::offsetFromContainer(const LayoutObject* o) cons t
853 {
854 LayoutSize offset;
855 if (isRelPositioned())
856 offset += offsetForInFlowPosition();
857 return offset + LayoutObject::offsetFromContainer(o);
858 }
859
852 void LayoutBoxModelObject::mapAbsoluteToLocalPoint(MapCoordinatesFlags mode, Tra nsformState& transformState) const 860 void LayoutBoxModelObject::mapAbsoluteToLocalPoint(MapCoordinatesFlags mode, Tra nsformState& transformState) const
853 { 861 {
854 LayoutObject* o = container(); 862 LayoutObject* o = container();
855 if (!o) 863 if (!o)
856 return; 864 return;
857 865
858 o->mapAbsoluteToLocalPoint(mode, transformState); 866 o->mapAbsoluteToLocalPoint(mode, transformState);
859 867
860 LayoutSize containerOffset = offsetFromContainer(o, LayoutPoint()); 868 LayoutSize containerOffset = offsetFromContainer(o);
861
862 if (o->isLayoutFlowThread()) {
863 // Descending into a flow thread. Convert to the local coordinate space, i.e. flow thread coordinates.
864 const LayoutFlowThread* flowThread = toLayoutFlowThread(o);
865 LayoutPoint visualPoint = LayoutPoint(transformState.mappedPoint());
866 transformState.move(visualPoint - flowThread->visualPointToFlowThreadPoi nt(visualPoint));
867 // |containerOffset| is also in visual coordinates. Convert to flow thre ad coordinates.
868 // TODO(mstensho): Wouldn't it be better add a parameter to instruct off setFromContainer()
869 // to return flowthread coordinates in the first place? We're effectivel y performing two
870 // conversions here, when in fact none is needed.
871 containerOffset = toLayoutSize(flowThread->visualPointToFlowThreadPoint( toLayoutPoint(containerOffset)));
872 }
873
874 bool preserve3D = mode & UseTransforms && (o->style()->preserves3D() || styl e()->preserves3D()); 869 bool preserve3D = mode & UseTransforms && (o->style()->preserves3D() || styl e()->preserves3D());
875 if (mode & UseTransforms && shouldUseTransformFromContainer(o)) { 870 if (mode & UseTransforms && shouldUseTransformFromContainer(o)) {
876 TransformationMatrix t; 871 TransformationMatrix t;
877 getTransformFromContainer(o, containerOffset, t); 872 getTransformFromContainer(o, containerOffset, t);
878 transformState.applyTransform(t, preserve3D ? TransformState::Accumulate Transform : TransformState::FlattenTransform); 873 transformState.applyTransform(t, preserve3D ? TransformState::Accumulate Transform : TransformState::FlattenTransform);
879 } else { 874 } else {
880 transformState.move(containerOffset.width(), containerOffset.height(), p reserve3D ? TransformState::AccumulateTransform : TransformState::FlattenTransfo rm); 875 transformState.move(containerOffset.width(), containerOffset.height(), p reserve3D ? TransformState::AccumulateTransform : TransformState::FlattenTransfo rm);
881 } 876 }
882 } 877 }
883 878
(...skipping 10 matching lines...) Expand all
894 bool isFixedPos = !isInline && style()->position() == FixedPosition; 889 bool isFixedPos = !isInline && style()->position() == FixedPosition;
895 bool hasTransform = !isInline && hasLayer() && layer()->transform(); 890 bool hasTransform = !isInline && hasLayer() && layer()->transform();
896 891
897 LayoutSize adjustmentForSkippedAncestor; 892 LayoutSize adjustmentForSkippedAncestor;
898 if (ancestorSkipped) { 893 if (ancestorSkipped) {
899 // There can't be a transform between paintInvalidationContainer and anc estorToStopAt, because transforms create containers, so it should be safe 894 // There can't be a transform between paintInvalidationContainer and anc estorToStopAt, because transforms create containers, so it should be safe
900 // to just subtract the delta between the ancestor and ancestorToStopAt. 895 // to just subtract the delta between the ancestor and ancestorToStopAt.
901 adjustmentForSkippedAncestor = -ancestorToStopAt->offsetFromAncestorCont ainer(container); 896 adjustmentForSkippedAncestor = -ancestorToStopAt->offsetFromAncestorCont ainer(container);
902 } 897 }
903 898
904 bool offsetDependsOnPoint = false; 899 bool offsetDependsOnPoint = container->isBox() && (container->style()->isFli ppedBlocksWritingMode() || container->isLayoutFlowThread());
905 LayoutSize containerOffset = offsetFromContainer(container, LayoutPoint(), & offsetDependsOnPoint); 900 LayoutSize containerOffset = offsetFromContainer(container);
901 containerOffset += container->columnOffset(toLayoutPoint(containerOffset));
906 902
907 bool preserve3D = container->style()->preserves3D() || style()->preserves3D( ); 903 bool preserve3D = container->style()->preserves3D() || style()->preserves3D( );
908 if (shouldUseTransformFromContainer(container)) { 904 if (shouldUseTransformFromContainer(container)) {
909 TransformationMatrix t; 905 TransformationMatrix t;
910 getTransformFromContainer(container, containerOffset, t); 906 getTransformFromContainer(container, containerOffset, t);
911 t.translateRight(adjustmentForSkippedAncestor.width().toFloat(), adjustm entForSkippedAncestor.height().toFloat()); 907 t.translateRight(adjustmentForSkippedAncestor.width().toFloat(), adjustm entForSkippedAncestor.height().toFloat());
912 geometryMap.push(this, t, preserve3D, offsetDependsOnPoint, isFixedPos, hasTransform); 908 geometryMap.push(this, t, preserve3D, offsetDependsOnPoint, isFixedPos, hasTransform);
913 } else { 909 } else {
914 containerOffset += adjustmentForSkippedAncestor; 910 containerOffset += adjustmentForSkippedAncestor;
915 geometryMap.push(this, containerOffset, preserve3D, offsetDependsOnPoint , isFixedPos, hasTransform); 911 geometryMap.push(this, containerOffset, preserve3D, offsetDependsOnPoint , isFixedPos, hasTransform);
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
973 if (rootElementStyle->hasBackground()) 969 if (rootElementStyle->hasBackground())
974 return false; 970 return false;
975 971
976 if (node() != document().firstBodyElement()) 972 if (node() != document().firstBodyElement())
977 return false; 973 return false;
978 974
979 return true; 975 return true;
980 } 976 }
981 977
982 } // namespace blink 978 } // namespace blink
OLDNEW
« no previous file with comments | « Source/core/layout/LayoutBoxModelObject.h ('k') | Source/core/layout/LayoutFlowThread.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698