| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2011 Adobe Systems Incorporated. All rights reserved. | 2 * Copyright (C) 2011 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 266 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 277 | 277 |
| 278 return compareCSSValueVector(m_values, rhs.m_values); | 278 return compareCSSValueVector(m_values, rhs.m_values); |
| 279 } | 279 } |
| 280 | 280 |
| 281 void CSSBasicShapePolygon::trace(Visitor* visitor) | 281 void CSSBasicShapePolygon::trace(Visitor* visitor) |
| 282 { | 282 { |
| 283 visitor->trace(m_values); | 283 visitor->trace(m_values); |
| 284 CSSBasicShape::trace(visitor); | 284 CSSBasicShape::trace(visitor); |
| 285 } | 285 } |
| 286 | 286 |
| 287 static bool buildInsetRadii(Vector<String> &radii, const String& topLeftRadius,
const String& topRightRadius, const String& bottomRightRadius, const String& bot
tomLeftRadius) |
| 288 { |
| 289 bool showBottomLeft = topRightRadius != bottomLeftRadius; |
| 290 bool showBottomRight = showBottomLeft || (bottomRightRadius != topLeftRadius
); |
| 291 bool showTopRight = showBottomRight || (topRightRadius != topLeftRadius); |
| 292 |
| 293 radii.append(topLeftRadius); |
| 294 if (showTopRight) |
| 295 radii.append(topRightRadius); |
| 296 if (showBottomRight) |
| 297 radii.append(bottomRightRadius); |
| 298 if (showBottomLeft) |
| 299 radii.append(bottomLeftRadius); |
| 300 |
| 301 return radii.size() == 1 && radii[0] == "0px"; |
| 302 } |
| 303 |
| 287 static String buildInsetString(const String& top, const String& right, const Str
ing& bottom, const String& left, | 304 static String buildInsetString(const String& top, const String& right, const Str
ing& bottom, const String& left, |
| 288 const String& topLeftRadiusWidth, const String& topLeftRadiusHeight, | 305 const String& topLeftRadiusWidth, const String& topLeftRadiusHeight, |
| 289 const String& topRightRadiusWidth, const String& topRightRadiusHeight, | 306 const String& topRightRadiusWidth, const String& topRightRadiusHeight, |
| 290 const String& bottomRightRadiusWidth, const String& bottomRightRadiusHeight, | 307 const String& bottomRightRadiusWidth, const String& bottomRightRadiusHeight, |
| 291 const String& bottomLeftRadiusWidth, const String& bottomLeftRadiusHeight) | 308 const String& bottomLeftRadiusWidth, const String& bottomLeftRadiusHeight) |
| 292 { | 309 { |
| 293 char opening[] = "inset("; | 310 char opening[] = "inset("; |
| 294 char separator[] = " "; | 311 char separator[] = " "; |
| 295 char cornersSeparator[] = "round"; | 312 char cornersSeparator[] = "round"; |
| 296 StringBuilder result; | 313 StringBuilder result; |
| 297 result.appendLiteral(opening); | 314 result.appendLiteral(opening); |
| 298 result.append(top); | 315 result.append(top); |
| 299 if (!right.isNull()) { | 316 bool showLeftArg = !left.isNull() && left != right; |
| 317 bool showBottomArg = !bottom.isNull() && (bottom != top || showLeftArg); |
| 318 bool showRightArg = !right.isNull() && (right != top || showBottomArg); |
| 319 if (showRightArg) { |
| 300 result.appendLiteral(separator); | 320 result.appendLiteral(separator); |
| 301 result.append(right); | 321 result.append(right); |
| 302 } | 322 } |
| 303 if (!bottom.isNull()) { | 323 if (showBottomArg) { |
| 304 result.appendLiteral(separator); | 324 result.appendLiteral(separator); |
| 305 result.append(bottom); | 325 result.append(bottom); |
| 306 } | 326 } |
| 307 if (!left.isNull()) { | 327 if (showLeftArg) { |
| 308 result.appendLiteral(separator); | 328 result.appendLiteral(separator); |
| 309 result.append(left); | 329 result.append(left); |
| 310 } | 330 } |
| 311 | 331 |
| 312 if (!topLeftRadiusWidth.isNull() && !topLeftRadiusHeight.isNull()) { | 332 if (!topLeftRadiusWidth.isNull() && !topLeftRadiusHeight.isNull()) { |
| 313 result.appendLiteral(separator); | 333 Vector<String> horizontalRadii; |
| 314 result.appendLiteral(cornersSeparator); | 334 bool areDefaultCornerRadii = buildInsetRadii(horizontalRadii, topLeftRad
iusWidth, topRightRadiusWidth, bottomRightRadiusWidth, bottomLeftRadiusWidth); |
| 315 result.appendLiteral(separator); | |
| 316 | 335 |
| 317 result.append(topLeftRadiusWidth); | 336 Vector<String> verticalRadii; |
| 318 result.appendLiteral(separator); | 337 areDefaultCornerRadii &= buildInsetRadii(verticalRadii, topLeftRadiusHei
ght, topRightRadiusHeight, bottomRightRadiusHeight, bottomLeftRadiusHeight); |
| 319 result.append(topRightRadiusWidth); | |
| 320 result.appendLiteral(separator); | |
| 321 result.append(bottomRightRadiusWidth); | |
| 322 result.appendLiteral(separator); | |
| 323 result.append(bottomLeftRadiusWidth); | |
| 324 | 338 |
| 325 result.appendLiteral(separator); | 339 if (!areDefaultCornerRadii) { |
| 326 result.appendLiteral("/"); | 340 result.appendLiteral(separator); |
| 327 result.appendLiteral(separator); | 341 result.appendLiteral(cornersSeparator); |
| 328 | 342 |
| 329 result.append(topLeftRadiusHeight); | 343 for (size_t i = 0; i < horizontalRadii.size(); ++i) { |
| 330 result.appendLiteral(separator); | 344 result.appendLiteral(separator); |
| 331 result.append(topRightRadiusHeight); | 345 result.append(horizontalRadii[i]); |
| 332 result.appendLiteral(separator); | 346 } |
| 333 result.append(bottomRightRadiusHeight); | 347 if (horizontalRadii != verticalRadii) { |
| 334 result.appendLiteral(separator); | 348 result.appendLiteral(separator); |
| 335 result.append(bottomLeftRadiusHeight); | 349 result.appendLiteral("/"); |
| 350 |
| 351 for (size_t i = 0; i < verticalRadii.size(); ++i) { |
| 352 result.appendLiteral(separator); |
| 353 result.append(verticalRadii[i]); |
| 354 } |
| 355 } |
| 356 } |
| 336 } | 357 } |
| 337 result.append(')'); | 358 result.append(')'); |
| 338 | 359 |
| 339 return result.toString(); | 360 return result.toString(); |
| 340 } | 361 } |
| 341 | 362 |
| 342 static inline void updateCornerRadiusWidthAndHeight(CSSPrimitiveValue* corner, S
tring& width, String& height) | 363 static inline void updateCornerRadiusWidthAndHeight(CSSPrimitiveValue* corner, S
tring& width, String& height) |
| 343 { | 364 { |
| 344 if (!corner) | 365 if (!corner) |
| 345 return; | 366 return; |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 404 visitor->trace(m_left); | 425 visitor->trace(m_left); |
| 405 visitor->trace(m_topLeftRadius); | 426 visitor->trace(m_topLeftRadius); |
| 406 visitor->trace(m_topRightRadius); | 427 visitor->trace(m_topRightRadius); |
| 407 visitor->trace(m_bottomRightRadius); | 428 visitor->trace(m_bottomRightRadius); |
| 408 visitor->trace(m_bottomLeftRadius); | 429 visitor->trace(m_bottomLeftRadius); |
| 409 CSSBasicShape::trace(visitor); | 430 CSSBasicShape::trace(visitor); |
| 410 } | 431 } |
| 411 | 432 |
| 412 } // namespace WebCore | 433 } // namespace WebCore |
| 413 | 434 |
| OLD | NEW |