OLD | NEW |
1 | 1 |
2 /* | 2 /* |
3 * Copyright 2012 Google Inc. | 3 * Copyright 2012 Google Inc. |
4 * | 4 * |
5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
7 */ | 7 */ |
8 | 8 |
9 #include "SkLinearGradient.h" | 9 #include "SkLinearGradient.h" |
10 | 10 |
11 static inline int repeat_bits(int x, const int bits) { | 11 static inline int repeat_bits(int x, const int bits) { |
12 return x & ((1 << bits) - 1); | 12 return x & ((1 << bits) - 1); |
13 } | 13 } |
14 | 14 |
15 static inline int repeat_8bits(int x) { | 15 static inline int repeat_8bits(int x) { |
16 return x & 0xFF; | 16 return x & 0xFF; |
17 } | 17 } |
18 | 18 |
19 // Visual Studio 2010 (MSC_VER=1600) optimizes bit-shift code incorrectly. | 19 // Visual Studio 2010 (MSC_VER=1600) optimizes bit-shift code incorrectly. |
20 // See http://code.google.com/p/skia/issues/detail?id=472 | 20 // See http://code.google.com/p/skia/issues/detail?id=472 |
21 #if defined(_MSC_VER) && (_MSC_VER >= 1600) | 21 #if defined(_MSC_VER) && (_MSC_VER >= 1600) |
22 #pragma optimize("", off) | 22 #pragma optimize("", off) |
23 #endif | 23 #endif |
24 | 24 |
25 static inline int mirror_bits(int x, const int bits) { | 25 static inline int mirror_bits(int x, const int bits) { |
26 #ifdef SK_CPU_HAS_CONDITIONAL_INSTR | 26 if (x & (1 << bits)) { |
27 if (x & (1 << bits)) | |
28 x = ~x; | 27 x = ~x; |
| 28 } |
29 return x & ((1 << bits) - 1); | 29 return x & ((1 << bits) - 1); |
30 #else | |
31 int s = x << (31 - bits) >> 31; | |
32 return (x ^ s) & ((1 << bits) - 1); | |
33 #endif | |
34 } | 30 } |
35 | 31 |
36 static inline int mirror_8bits(int x) { | 32 static inline int mirror_8bits(int x) { |
37 #ifdef SK_CPU_HAS_CONDITIONAL_INSTR | |
38 if (x & 256) { | 33 if (x & 256) { |
39 x = ~x; | 34 x = ~x; |
40 } | 35 } |
41 return x & 255; | 36 return x & 255; |
42 #else | |
43 int s = x << 23 >> 31; | |
44 return (x ^ s) & 0xFF; | |
45 #endif | |
46 } | 37 } |
47 | 38 |
48 #if defined(_MSC_VER) && (_MSC_VER >= 1600) | 39 #if defined(_MSC_VER) && (_MSC_VER >= 1600) |
49 #pragma optimize("", on) | 40 #pragma optimize("", on) |
50 #endif | 41 #endif |
51 | 42 |
52 static void pts_to_unit_matrix(const SkPoint pts[2], SkMatrix* matrix) { | 43 static void pts_to_unit_matrix(const SkPoint pts[2], SkMatrix* matrix) { |
53 SkVector vec = pts[1] - pts[0]; | 44 SkVector vec = pts[1] - pts[0]; |
54 SkScalar mag = vec.length(); | 45 SkScalar mag = vec.length(); |
55 SkScalar inv = mag ? SkScalarInvert(mag) : 0; | 46 SkScalar inv = mag ? SkScalarInvert(mag) : 0; |
(...skipping 512 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
568 str->append("SkLinearGradient ("); | 559 str->append("SkLinearGradient ("); |
569 | 560 |
570 str->appendf("start: (%f, %f)", fStart.fX, fStart.fY); | 561 str->appendf("start: (%f, %f)", fStart.fX, fStart.fY); |
571 str->appendf(" end: (%f, %f) ", fEnd.fX, fEnd.fY); | 562 str->appendf(" end: (%f, %f) ", fEnd.fX, fEnd.fY); |
572 | 563 |
573 this->INHERITED::toString(str); | 564 this->INHERITED::toString(str); |
574 | 565 |
575 str->append(")"); | 566 str->append(")"); |
576 } | 567 } |
577 #endif | 568 #endif |
OLD | NEW |