OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2003, 2004, 2005, 2006, 2007 Apple Inc. All rights reserved. | 2 * Copyright (C) 2003, 2004, 2005, 2006, 2007 Apple Inc. All rights reserved. |
3 * Copyright (C) 2008 Eric Seidel <eric@webkit.org> | 3 * Copyright (C) 2008 Eric Seidel <eric@webkit.org> |
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 763 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
774 if (!m_state.shadowsIgnoreTransforms) { | 774 if (!m_state.shadowsIgnoreTransforms) { |
775 CGAffineTransform userToBaseCTM = wkGetUserToBaseCTM(context); | 775 CGAffineTransform userToBaseCTM = wkGetUserToBaseCTM(context); |
776 | 776 |
777 CGFloat A = userToBaseCTM.a * userToBaseCTM.a + userToBaseCTM.b * userTo
BaseCTM.b; | 777 CGFloat A = userToBaseCTM.a * userToBaseCTM.a + userToBaseCTM.b * userTo
BaseCTM.b; |
778 CGFloat B = userToBaseCTM.a * userToBaseCTM.c + userToBaseCTM.b * userTo
BaseCTM.d; | 778 CGFloat B = userToBaseCTM.a * userToBaseCTM.c + userToBaseCTM.b * userTo
BaseCTM.d; |
779 CGFloat C = B; | 779 CGFloat C = B; |
780 CGFloat D = userToBaseCTM.c * userToBaseCTM.c + userToBaseCTM.d * userTo
BaseCTM.d; | 780 CGFloat D = userToBaseCTM.c * userToBaseCTM.c + userToBaseCTM.d * userTo
BaseCTM.d; |
781 | 781 |
782 CGFloat smallEigenvalue = narrowPrecisionToCGFloat(sqrt(0.5 * ((A + D) -
sqrt(4 * B * C + (A - D) * (A - D))))); | 782 CGFloat smallEigenvalue = narrowPrecisionToCGFloat(sqrt(0.5 * ((A + D) -
sqrt(4 * B * C + (A - D) * (A - D))))); |
783 | 783 |
784 // Extreme "blur" values can make text drawing crash or take crazy long
times, so clamp | 784 blurRadius = blur * smallEigenvalue; |
785 blurRadius = min(blur * smallEigenvalue, narrowPrecisionToCGFloat(1000.0
)); | |
786 | 785 |
787 CGSize offsetInBaseSpace = CGSizeApplyAffineTransform(offset, userToBase
CTM); | 786 CGSize offsetInBaseSpace = CGSizeApplyAffineTransform(offset, userToBase
CTM); |
788 | 787 |
789 xOffset = offsetInBaseSpace.width; | 788 xOffset = offsetInBaseSpace.width; |
790 yOffset = offsetInBaseSpace.height; | 789 yOffset = offsetInBaseSpace.height; |
791 } | 790 } |
792 | 791 |
| 792 // Extreme "blur" values can make text drawing crash or take crazy long time
s, so clamp |
| 793 blurRadius = min(blurRadius, narrowPrecisionToCGFloat(1000.0)); |
| 794 |
793 // Work around <rdar://problem/5539388> by ensuring that the offsets will ge
t truncated | 795 // Work around <rdar://problem/5539388> by ensuring that the offsets will ge
t truncated |
794 // to the desired integer. | 796 // to the desired integer. |
795 static const CGFloat extraShadowOffset = narrowPrecisionToCGFloat(1.0 / 128)
; | 797 static const CGFloat extraShadowOffset = narrowPrecisionToCGFloat(1.0 / 128)
; |
796 if (xOffset > 0) | 798 if (xOffset > 0) |
797 xOffset += extraShadowOffset; | 799 xOffset += extraShadowOffset; |
798 else if (xOffset < 0) | 800 else if (xOffset < 0) |
799 xOffset -= extraShadowOffset; | 801 xOffset -= extraShadowOffset; |
800 | 802 |
801 if (yOffset > 0) | 803 if (yOffset > 0) |
802 yOffset += extraShadowOffset; | 804 yOffset += extraShadowOffset; |
(...skipping 474 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1277 break; | 1279 break; |
1278 case CompositePlusLighter: | 1280 case CompositePlusLighter: |
1279 target = kCGBlendModePlusLighter; | 1281 target = kCGBlendModePlusLighter; |
1280 break; | 1282 break; |
1281 } | 1283 } |
1282 CGContextSetBlendMode(platformContext(), target); | 1284 CGContextSetBlendMode(platformContext(), target); |
1283 } | 1285 } |
1284 #endif | 1286 #endif |
1285 | 1287 |
1286 } | 1288 } |
OLD | NEW |