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

Side by Side Diff: Source/core/rendering/shapes/RasterShape.cpp

Issue 216793009: Remove shape-padding (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Remove m_padding Created 6 years, 8 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
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2013 Adobe Systems Incorporated. All rights reserved. 2 * Copyright (C) 2013 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 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
139 139
140 appendX1Values(intervalsAt(y1), minIntervalWidth, result); 140 appendX1Values(intervalsAt(y1), minIntervalWidth, result);
141 for (int y = y1 + 1; y < y2; y++) { 141 for (int y = y1 + 1; y < y2; y++) {
142 if (intervalsAt(y) != intervalsAt(y - 1)) 142 if (intervalsAt(y) != intervalsAt(y - 1))
143 appendX1Values(intervalsAt(y), minIntervalWidth, result); 143 appendX1Values(intervalsAt(y), minIntervalWidth, result);
144 } 144 }
145 145
146 return true; 146 return true;
147 } 147 }
148 148
149 bool RasterShapeIntervals::firstIncludedIntervalY(int minY, const IntSize& minSi ze, LayoutUnit& result) const
150 {
151 minY = std::max<int>(bounds().y(), minY);
152
153 ASSERT(minY >= 0 && minY < size());
154
155 if (minSize.isEmpty() || minSize.width() > bounds().width())
156 return false;
157
158 for (int lineY = minY; lineY <= bounds().maxY() - minSize.height(); lineY++) {
159 Vector<int> intervalX1Values;
160 if (!getIntervalX1Values(lineY, lineY + minSize.height(), minSize.width( ), intervalX1Values))
161 continue;
162
163 std::sort(intervalX1Values.begin(), intervalX1Values.end());
164
165 IntRect firstFitRect(IntPoint(0, 0), minSize);
166 for (unsigned i = 0; i < intervalX1Values.size(); i++) {
167 int lineX = intervalX1Values[i];
168 if (i > 0 && lineX == intervalX1Values[i - 1])
169 continue;
170 firstFitRect.setLocation(IntPoint(lineX, lineY));
171 if (contains(firstFitRect)) {
172 result = lineY;
173 return true;
174 }
175 }
176 }
177
178 return false;
179 }
180
181 void RasterShapeIntervals::getIncludedIntervals(int y1, int y2, IntShapeInterval s& result) const
182 {
183 ASSERT(y2 >= y1);
184
185 if (y1 < bounds().y() || y2 > bounds().maxY())
186 return;
187
188 for (int y = y1; y < y2; y++) {
189 if (intervalsAt(y).isEmpty())
190 return;
191 }
192
193 result = intervalsAt(y1);
194 for (int y = y1 + 1; y < y2 && !result.isEmpty(); y++) {
195 IntShapeIntervals intervals;
196 IntShapeInterval::intersectShapeIntervals(result, intervalsAt(y), interv als);
197 result.swap(intervals);
198 }
199 }
200
201 void RasterShapeIntervals::getExcludedIntervals(int y1, int y2, IntShapeInterval s& result) const 149 void RasterShapeIntervals::getExcludedIntervals(int y1, int y2, IntShapeInterval s& result) const
202 { 150 {
203 ASSERT(y2 >= y1); 151 ASSERT(y2 >= y1);
204 152
205 if (y2 < bounds().y() || y1 >= bounds().maxY()) 153 if (y2 < bounds().y() || y1 >= bounds().maxY())
206 return; 154 return;
207 155
208 y1 = std::max(y1, bounds().y()); 156 y1 = std::max(y1, bounds().y());
209 y2 = std::min(y2, bounds().maxY()); 157 y2 = std::min(y2, bounds().maxY());
210 158
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
256 return *m_intervals; 204 return *m_intervals;
257 205
258 int shapeMarginInt = clampToPositiveInteger(ceil(shapeMargin())); 206 int shapeMarginInt = clampToPositiveInteger(ceil(shapeMargin()));
259 int maxShapeMarginInt = std::max(m_marginRectSize.width(), m_marginRectSize. height()) * sqrtf(2); 207 int maxShapeMarginInt = std::max(m_marginRectSize.width(), m_marginRectSize. height()) * sqrtf(2);
260 if (!m_marginIntervals) 208 if (!m_marginIntervals)
261 m_marginIntervals = m_intervals->computeShapeMarginIntervals(std::min(sh apeMarginInt, maxShapeMarginInt)); 209 m_marginIntervals = m_intervals->computeShapeMarginIntervals(std::min(sh apeMarginInt, maxShapeMarginInt));
262 210
263 return *m_marginIntervals; 211 return *m_marginIntervals;
264 } 212 }
265 213
266 const RasterShapeIntervals& RasterShape::paddingIntervals() const
267 {
268 ASSERT(shapePadding() >= 0);
269 if (!shapePadding())
270 return *m_intervals;
271
272 // FIXME: Add support for non-zero padding, see https://bugs.webkit.org/show _bug.cgi?id=116348.
273 return *m_intervals;
274 }
275
276 static inline void appendLineSegments(const IntShapeIntervals& intervals, Segmen tList& result) 214 static inline void appendLineSegments(const IntShapeIntervals& intervals, Segmen tList& result)
277 { 215 {
278 for (unsigned i = 0; i < intervals.size(); i++) 216 for (unsigned i = 0; i < intervals.size(); i++)
279 result.append(LineSegment(intervals[i].x1(), intervals[i].x2() + 1)); 217 result.append(LineSegment(intervals[i].x1(), intervals[i].x2() + 1));
280 } 218 }
281 219
282 void RasterShape::getExcludedIntervals(LayoutUnit logicalTop, LayoutUnit logical Height, SegmentList& result) const 220 void RasterShape::getExcludedIntervals(LayoutUnit logicalTop, LayoutUnit logical Height, SegmentList& result) const
283 { 221 {
284 const RasterShapeIntervals& intervals = marginIntervals(); 222 const RasterShapeIntervals& intervals = marginIntervals();
285 if (intervals.isEmpty()) 223 if (intervals.isEmpty())
286 return; 224 return;
287 225
288 IntShapeIntervals excludedIntervals; 226 IntShapeIntervals excludedIntervals;
289 intervals.getExcludedIntervals(logicalTop, logicalTop + logicalHeight, exclu dedIntervals); 227 intervals.getExcludedIntervals(logicalTop, logicalTop + logicalHeight, exclu dedIntervals);
290 appendLineSegments(excludedIntervals, result); 228 appendLineSegments(excludedIntervals, result);
291 } 229 }
292 230
293 void RasterShape::getIncludedIntervals(LayoutUnit logicalTop, LayoutUnit logical Height, SegmentList& result) const
294 {
295 const RasterShapeIntervals& intervals = paddingIntervals();
296 if (intervals.isEmpty())
297 return;
298
299 IntShapeIntervals includedIntervals;
300 intervals.getIncludedIntervals(logicalTop, logicalTop + logicalHeight, inclu dedIntervals);
301 appendLineSegments(includedIntervals, result);
302 }
303
304 bool RasterShape::firstIncludedIntervalLogicalTop(LayoutUnit minLogicalIntervalT op, const FloatSize& minLogicalIntervalSize, LayoutUnit& result) const
305 {
306 const RasterShapeIntervals& intervals = paddingIntervals();
307 if (intervals.isEmpty())
308 return false;
309
310 return intervals.firstIncludedIntervalY(minLogicalIntervalTop.floor(), floor edIntSize(minLogicalIntervalSize), result);
311 }
312
313 } // namespace WebCore 231 } // namespace WebCore
OLDNEW
« no previous file with comments | « Source/core/rendering/shapes/RasterShape.h ('k') | Source/core/rendering/shapes/RectangleShape.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698