OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2006 Samuel Weinig (sam.weinig@gmail.com) | 2 * Copyright (C) 2006 Samuel Weinig (sam.weinig@gmail.com) |
3 * Copyright (C) 2004, 2005, 2006 Apple Computer, Inc. All rights reserved. | 3 * Copyright (C) 2004, 2005, 2006 Apple Computer, Inc. All rights reserved. |
4 * | 4 * |
5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
6 * modification, are permitted provided that the following conditions | 6 * modification, are permitted provided that the following conditions |
7 * are met: | 7 * are met: |
8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
127 const FloatRect& dstRect, | 127 const FloatRect& dstRect, |
128 const FloatRect& srcRect, | 128 const FloatRect& srcRect, |
129 const FloatSize& providedTileScaleFactor, | 129 const FloatSize& providedTileScaleFactor, |
130 TileRule hRule, | 130 TileRule hRule, |
131 TileRule vRule, | 131 TileRule vRule, |
132 SkBlendMode op) { | 132 SkBlendMode op) { |
133 // TODO(cavalcantii): see crbug.com/662513. | 133 // TODO(cavalcantii): see crbug.com/662513. |
134 FloatSize tileScaleFactor = providedTileScaleFactor; | 134 FloatSize tileScaleFactor = providedTileScaleFactor; |
135 if (vRule == RoundTile) { | 135 if (vRule == RoundTile) { |
136 float vRepetitions = | 136 float vRepetitions = |
137 std::max(1.0f, roundf(dstRect.height() / | 137 std::max(1.0f, |
138 (tileScaleFactor.height() * srcRect.height()))); | 138 roundf(dstRect.height() / |
| 139 (tileScaleFactor.height() * srcRect.height()))); |
139 tileScaleFactor.setHeight(dstRect.height() / | 140 tileScaleFactor.setHeight(dstRect.height() / |
140 (srcRect.height() * vRepetitions)); | 141 (srcRect.height() * vRepetitions)); |
141 } | 142 } |
142 | 143 |
143 if (hRule == RoundTile) { | 144 if (hRule == RoundTile) { |
144 float hRepetitions = std::max( | 145 float hRepetitions = std::max( |
145 1.0f, | 146 1.0f, |
146 roundf(dstRect.width() / (tileScaleFactor.width() * srcRect.width()))); | 147 roundf(dstRect.width() / (tileScaleFactor.width() * srcRect.width()))); |
147 tileScaleFactor.setWidth(dstRect.width() / | 148 tileScaleFactor.setWidth(dstRect.width() / |
148 (srcRect.width() * hRepetitions)); | 149 (srcRect.width() * hRepetitions)); |
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
352 | 353 |
353 return true; | 354 return true; |
354 } | 355 } |
355 | 356 |
356 FloatRect Image::computeTileContaining(const FloatPoint& point, | 357 FloatRect Image::computeTileContaining(const FloatPoint& point, |
357 const FloatSize& tileSize, | 358 const FloatSize& tileSize, |
358 const FloatPoint& tilePhase, | 359 const FloatPoint& tilePhase, |
359 const FloatSize& tileSpacing) { | 360 const FloatSize& tileSpacing) { |
360 const FloatSize actualTileSize(tileSize + tileSpacing); | 361 const FloatSize actualTileSize(tileSize + tileSpacing); |
361 return FloatRect( | 362 return FloatRect( |
362 FloatPoint( | 363 FloatPoint(point.x() + |
363 point.x() + fmodf(fmodf(-tilePhase.x(), actualTileSize.width()) - | 364 fmodf(fmodf(-tilePhase.x(), actualTileSize.width()) - |
364 actualTileSize.width(), | 365 actualTileSize.width(), |
365 actualTileSize.width()), | 366 actualTileSize.width()), |
366 point.y() + fmodf(fmodf(-tilePhase.y(), actualTileSize.height()) - | 367 point.y() + |
367 actualTileSize.height(), | 368 fmodf(fmodf(-tilePhase.y(), actualTileSize.height()) - |
368 actualTileSize.height())), | 369 actualTileSize.height(), |
| 370 actualTileSize.height())), |
369 tileSize); | 371 tileSize); |
370 } | 372 } |
371 | 373 |
372 FloatRect Image::computeSubsetForTile(const FloatRect& tile, | 374 FloatRect Image::computeSubsetForTile(const FloatRect& tile, |
373 const FloatRect& dest, | 375 const FloatRect& dest, |
374 const FloatSize& imageSize) { | 376 const FloatSize& imageSize) { |
375 DCHECK(tile.contains(dest)); | 377 DCHECK(tile.contains(dest)); |
376 | 378 |
377 const FloatSize scale(tile.width() / imageSize.width(), | 379 const FloatSize scale(tile.width() / imageSize.width(), |
378 tile.height() / imageSize.height()); | 380 tile.height() / imageSize.height()); |
379 | 381 |
380 FloatRect subset = dest; | 382 FloatRect subset = dest; |
381 subset.setX((dest.x() - tile.x()) / scale.width()); | 383 subset.setX((dest.x() - tile.x()) / scale.width()); |
382 subset.setY((dest.y() - tile.y()) / scale.height()); | 384 subset.setY((dest.y() - tile.y()) / scale.height()); |
383 subset.setWidth(dest.width() / scale.width()); | 385 subset.setWidth(dest.width() / scale.width()); |
384 subset.setHeight(dest.height() / scale.height()); | 386 subset.setHeight(dest.height() / scale.height()); |
385 | 387 |
386 return subset; | 388 return subset; |
387 } | 389 } |
388 | 390 |
389 } // namespace blink | 391 } // namespace blink |
OLD | NEW |