| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2012 Adobe Systems Incorporated. All rights reserved. | 2 * Copyright (C) 2012 Adobe Systems Incorporated. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
| 6 * are met: | 6 * are met: |
| 7 * | 7 * |
| 8 * 1. Redistributions of source code must retain the above | 8 * 1. Redistributions of source code must retain the above |
| 9 * copyright notice, this list of conditions and the following | 9 * copyright notice, this list of conditions and the following |
| 10 * disclaimer. | 10 * disclaimer. |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 83 return point.transposedPoint(); | 83 return point.transposedPoint(); |
| 84 } | 84 } |
| 85 | 85 |
| 86 static inline FloatSize physicalSizeToLogical(const FloatSize& size, WritingMode
writingMode) | 86 static inline FloatSize physicalSizeToLogical(const FloatSize& size, WritingMode
writingMode) |
| 87 { | 87 { |
| 88 if (isHorizontalWritingMode(writingMode)) | 88 if (isHorizontalWritingMode(writingMode)) |
| 89 return size; | 89 return size; |
| 90 return size.transposedSize(); | 90 return size.transposedSize(); |
| 91 } | 91 } |
| 92 | 92 |
| 93 PassOwnPtr<ExclusionShape> ExclusionShape::createExclusionShape(const BasicShape
* basicShape, float logicalBoxWidth, float logicalBoxHeight, WritingMode writing
Mode, Length margin, Length padding) | 93 PassOwnPtr<ExclusionShape> ExclusionShape::createExclusionShape(const BasicShape
* basicShape, const LayoutSize& logicalBoxSize, WritingMode writingMode, Length
margin, Length padding) |
| 94 { | 94 { |
| 95 ASSERT(basicShape); | 95 ASSERT(basicShape); |
| 96 | 96 |
| 97 bool horizontalWritingMode = isHorizontalWritingMode(writingMode); | 97 bool horizontalWritingMode = isHorizontalWritingMode(writingMode); |
| 98 float boxWidth = horizontalWritingMode ? logicalBoxWidth : logicalBoxHeight; | 98 float boxWidth = horizontalWritingMode ? logicalBoxSize.width() : logicalBox
Size.height(); |
| 99 float boxHeight = horizontalWritingMode ? logicalBoxHeight : logicalBoxWidth
; | 99 float boxHeight = horizontalWritingMode ? logicalBoxSize.height() : logicalB
oxSize.width(); |
| 100 OwnPtr<ExclusionShape> exclusionShape; | 100 OwnPtr<ExclusionShape> exclusionShape; |
| 101 | 101 |
| 102 switch (basicShape->type()) { | 102 switch (basicShape->type()) { |
| 103 | 103 |
| 104 case BasicShape::BASIC_SHAPE_RECTANGLE: { | 104 case BasicShape::BASIC_SHAPE_RECTANGLE: { |
| 105 const BasicShapeRectangle* rectangle = static_cast<const BasicShapeRecta
ngle*>(basicShape); | 105 const BasicShapeRectangle* rectangle = static_cast<const BasicShapeRecta
ngle*>(basicShape); |
| 106 FloatRect bounds( | 106 FloatRect bounds( |
| 107 floatValueForLength(rectangle->x(), boxWidth), | 107 floatValueForLength(rectangle->x(), boxWidth), |
| 108 floatValueForLength(rectangle->y(), boxHeight), | 108 floatValueForLength(rectangle->y(), boxHeight), |
| 109 floatValueForLength(rectangle->width(), boxWidth), | 109 floatValueForLength(rectangle->width(), boxWidth), |
| 110 floatValueForLength(rectangle->height(), boxHeight)); | 110 floatValueForLength(rectangle->height(), boxHeight)); |
| 111 Length radiusXLength = rectangle->cornerRadiusX(); | 111 Length radiusXLength = rectangle->cornerRadiusX(); |
| 112 Length radiusYLength = rectangle->cornerRadiusY(); | 112 Length radiusYLength = rectangle->cornerRadiusY(); |
| 113 FloatSize cornerRadii( | 113 FloatSize cornerRadii( |
| 114 radiusXLength.isUndefined() ? 0 : floatValueForLength(radiusXLength,
boxWidth), | 114 radiusXLength.isUndefined() ? 0 : floatValueForLength(radiusXLength,
boxWidth), |
| 115 radiusYLength.isUndefined() ? 0 : floatValueForLength(radiusYLength,
boxHeight)); | 115 radiusYLength.isUndefined() ? 0 : floatValueForLength(radiusYLength,
boxHeight)); |
| 116 FloatRect logicalBounds = physicalRectToLogical(bounds, logicalBoxHeight
, writingMode); | 116 FloatRect logicalBounds = physicalRectToLogical(bounds, logicalBoxSize.h
eight(), writingMode); |
| 117 | 117 |
| 118 exclusionShape = createExclusionRectangle(logicalBounds, physicalSizeToL
ogical(cornerRadii, writingMode)); | 118 exclusionShape = createExclusionRectangle(logicalBounds, physicalSizeToL
ogical(cornerRadii, writingMode)); |
| 119 break; | 119 break; |
| 120 } | 120 } |
| 121 | 121 |
| 122 case BasicShape::BASIC_SHAPE_CIRCLE: { | 122 case BasicShape::BASIC_SHAPE_CIRCLE: { |
| 123 const BasicShapeCircle* circle = static_cast<const BasicShapeCircle*>(ba
sicShape); | 123 const BasicShapeCircle* circle = static_cast<const BasicShapeCircle*>(ba
sicShape); |
| 124 float centerX = floatValueForLength(circle->centerX(), boxWidth); | 124 float centerX = floatValueForLength(circle->centerX(), boxWidth); |
| 125 float centerY = floatValueForLength(circle->centerY(), boxHeight); | 125 float centerY = floatValueForLength(circle->centerY(), boxHeight); |
| 126 float radius = floatValueForLength(circle->radius(), std::min(boxHeight,
boxWidth)); | 126 float radius = floatValueForLength(circle->radius(), std::min(boxHeight,
boxWidth)); |
| 127 FloatPoint logicalCenter = physicalPointToLogical(FloatPoint(centerX, ce
nterY), logicalBoxHeight, writingMode); | 127 FloatPoint logicalCenter = physicalPointToLogical(FloatPoint(centerX, ce
nterY), logicalBoxSize.height(), writingMode); |
| 128 | 128 |
| 129 exclusionShape = createExclusionCircle(logicalCenter, radius); | 129 exclusionShape = createExclusionCircle(logicalCenter, radius); |
| 130 break; | 130 break; |
| 131 } | 131 } |
| 132 | 132 |
| 133 case BasicShape::BASIC_SHAPE_ELLIPSE: { | 133 case BasicShape::BASIC_SHAPE_ELLIPSE: { |
| 134 const BasicShapeEllipse* ellipse = static_cast<const BasicShapeEllipse*>
(basicShape); | 134 const BasicShapeEllipse* ellipse = static_cast<const BasicShapeEllipse*>
(basicShape); |
| 135 float centerX = floatValueForLength(ellipse->centerX(), boxWidth); | 135 float centerX = floatValueForLength(ellipse->centerX(), boxWidth); |
| 136 float centerY = floatValueForLength(ellipse->centerY(), boxHeight); | 136 float centerY = floatValueForLength(ellipse->centerY(), boxHeight); |
| 137 float radiusX = floatValueForLength(ellipse->radiusX(), boxWidth); | 137 float radiusX = floatValueForLength(ellipse->radiusX(), boxWidth); |
| 138 float radiusY = floatValueForLength(ellipse->radiusY(), boxHeight); | 138 float radiusY = floatValueForLength(ellipse->radiusY(), boxHeight); |
| 139 FloatPoint logicalCenter = physicalPointToLogical(FloatPoint(centerX, ce
nterY), logicalBoxHeight, writingMode); | 139 FloatPoint logicalCenter = physicalPointToLogical(FloatPoint(centerX, ce
nterY), logicalBoxSize.height(), writingMode); |
| 140 FloatSize logicalRadii = physicalSizeToLogical(FloatSize(radiusX, radius
Y), writingMode); | 140 FloatSize logicalRadii = physicalSizeToLogical(FloatSize(radiusX, radius
Y), writingMode); |
| 141 | 141 |
| 142 exclusionShape = createExclusionEllipse(logicalCenter, logicalRadii); | 142 exclusionShape = createExclusionEllipse(logicalCenter, logicalRadii); |
| 143 break; | 143 break; |
| 144 } | 144 } |
| 145 | 145 |
| 146 case BasicShape::BASIC_SHAPE_POLYGON: { | 146 case BasicShape::BASIC_SHAPE_POLYGON: { |
| 147 const BasicShapePolygon* polygon = static_cast<const BasicShapePolygon*>
(basicShape); | 147 const BasicShapePolygon* polygon = static_cast<const BasicShapePolygon*>
(basicShape); |
| 148 const Vector<Length>& values = polygon->values(); | 148 const Vector<Length>& values = polygon->values(); |
| 149 size_t valuesSize = values.size(); | 149 size_t valuesSize = values.size(); |
| 150 ASSERT(!(valuesSize % 2)); | 150 ASSERT(!(valuesSize % 2)); |
| 151 OwnPtr<Vector<FloatPoint> > vertices = adoptPtr(new Vector<FloatPoint>(v
aluesSize / 2)); | 151 OwnPtr<Vector<FloatPoint> > vertices = adoptPtr(new Vector<FloatPoint>(v
aluesSize / 2)); |
| 152 for (unsigned i = 0; i < valuesSize; i += 2) { | 152 for (unsigned i = 0; i < valuesSize; i += 2) { |
| 153 FloatPoint vertex( | 153 FloatPoint vertex( |
| 154 floatValueForLength(values.at(i), boxWidth), | 154 floatValueForLength(values.at(i), boxWidth), |
| 155 floatValueForLength(values.at(i + 1), boxHeight)); | 155 floatValueForLength(values.at(i + 1), boxHeight)); |
| 156 (*vertices)[i / 2] = physicalPointToLogical(vertex, logicalBoxHeight
, writingMode); | 156 (*vertices)[i / 2] = physicalPointToLogical(vertex, logicalBoxSize.h
eight(), writingMode); |
| 157 } | 157 } |
| 158 exclusionShape = createExclusionPolygon(vertices.release(), polygon->win
dRule()); | 158 exclusionShape = createExclusionPolygon(vertices.release(), polygon->win
dRule()); |
| 159 break; | 159 break; |
| 160 } | 160 } |
| 161 | 161 |
| 162 default: | 162 default: |
| 163 ASSERT_NOT_REACHED(); | 163 ASSERT_NOT_REACHED(); |
| 164 } | 164 } |
| 165 | 165 |
| 166 exclusionShape->m_logicalBoxWidth = logicalBoxWidth; | |
| 167 exclusionShape->m_logicalBoxHeight = logicalBoxHeight; | |
| 168 exclusionShape->m_writingMode = writingMode; | 166 exclusionShape->m_writingMode = writingMode; |
| 169 exclusionShape->m_margin = floatValueForLength(margin, 0); | 167 exclusionShape->m_margin = floatValueForLength(margin, 0); |
| 170 exclusionShape->m_padding = floatValueForLength(padding, 0); | 168 exclusionShape->m_padding = floatValueForLength(padding, 0); |
| 171 | 169 |
| 172 return exclusionShape.release(); | 170 return exclusionShape.release(); |
| 173 } | 171 } |
| 174 | 172 |
| 175 } // namespace WebCore | 173 } // namespace WebCore |
| OLD | NEW |