Changeset 19155 for S60/trunk/WebCore
- Timestamp:
- 01/26/07 08:55:39 (2 years ago)
- Location:
- S60/trunk/WebCore
- Files:
-
- 3 modified
-
ChangeLog (modified) (1 diff)
-
kwq/KWQColor.cpp (modified) (5 diffs)
-
kwq/KWQColor.h (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
S60/trunk/WebCore/ChangeLog
r19125 r19155 1 2007-01-24 yongjzha 2 3 Reviewed by <zbujtas@gmail.com> 4 DESC: PNUN-6XJJLF When use css border property outset, and set border color to blue, the browser 5 shows black at the bottom edge and right edge. 6 fix: correct RGB to HSV and HSV to RGB conversion algorithms in KWQColor.cpp 7 8 http://bugs.webkit.org/show_bug.cgi?id=12393 9 10 WARNING: NO TEST CASES ADDED OR CHANGED 11 12 * kwq/KWQColor.cpp: 13 (QColor::hsv): 14 (QColor::setHsv): 15 (QColor::light): 16 (QColor::dark): 17 * kwq/KWQColor.h: 18 1 19 bujtas <zbujtas@gmail.com> 2 20 -
S60/trunk/WebCore/kwq/KWQColor.cpp
r15736 r19155 88 88 } 89 89 90 void QColor::hsv(int *h, int *s, int *v) const 91 { 92 int r = red(); 93 int g = green(); 94 int b = blue(); 95 int i, w, x, f; 96 90 // r,g,b values are from 0 to 1 91 // h = [0,360], s = [0,1], v = [0,1] 92 // if s == 0, then h = -1 (undefined) 93 void QColor::hsv(float *h, float *s, float *v) const 94 { 95 float r = red()/255.0f; 96 float g = green()/255.0f; 97 float b = blue()/255.0f; 98 float i, w, x, f; 99 100 // x = min(r, g, b) 101 // w = max(r, g, b) 97 102 x = w = r; 98 103 99 104 if (g > x) { 105 w = g; 106 } 107 if (g < w) { 100 108 x = g; 101 109 } 102 if (g < w) {103 w = g;104 }105 110 106 111 if (b > x) { 112 w = b; 113 } 114 if (b < w) { 107 115 x = b; 108 }109 if (b < w) {110 w = b;111 116 } 112 117 … … 120 125 i = (r == x) ? 3 : ((g == x) ? 5 : 1); 121 126 *h = i - f /(w - x); 127 *h *= 60; 128 if( *h<0 ) 129 *h += 360; 130 122 131 if (w != 0) 123 132 *s = (w - x)/w; … … 128 137 } 129 138 130 void QColor::setHsv( int h, int s, int v)131 { 132 int i, f, p, q, t;139 void QColor::setHsv(float h, float s, float v) 140 { 141 float i, f, p, q, t; 133 142 134 143 if( s == 0 ) { 135 144 // achromatic (gray) 136 setRgb(v, v, v); 145 int c = v*255; 146 setRgb(c, c, c); 137 147 return; 138 148 } 139 149 140 150 h /= 60; // sector 0 to 5 141 i = (int)floor(h);151 i = floor(h); 142 152 f = h - i; // factorial part of h 143 153 p = v * (1 - s); 144 154 q = v * (1 - s * f); 145 155 t = v * (1 - s * (1 - f)); 146 147 switch( i ) {156 157 switch( (int)i ) { 148 158 case 0: 149 setRgb(v , t, p);159 setRgb(v*255, t*255, p*255); 150 160 break; 151 161 case 1: 152 setRgb(q , v, p);162 setRgb(q*255, v*255, p*255); 153 163 break; 154 164 case 2: 155 setRgb(p , v, t);165 setRgb(p*255, v*255, t*255); 156 166 break; 157 167 case 3: 158 setRgb(p , q, v);168 setRgb(p*255, q*255, v*255); 159 169 break; 160 170 case 4: 161 setRgb(t , p, v);171 setRgb(t*255, p*255, v*255); 162 172 break; 163 173 default: // case 5: 164 setRgb(v , p, q);174 setRgb(v*255, p*255, q*255); 165 175 break; 166 176 } … … 178 188 } 179 189 180 int h, s, v;190 float h, s, v; 181 191 182 192 hsv(&h, &s, &v); … … 208 218 } 209 219 210 int h, s, v;220 float h, s, v; 211 221 212 222 hsv(&h, &s, &v); -
S60/trunk/WebCore/kwq/KWQColor.h
r14062 r19155 32 32 class TRgb; 33 33 34 typedef unsigned int QRgb; // RGBA quadruplet34 typedef unsigned int QRgb; // RGBA quadruplet 35 35 36 36 QRgb qRgb(int r, int g, int b); … … 60 60 void setRgb(int rgb) { color = rgb; valid = true; /* Alpha may be set. Preserve it. */ } 61 61 62 void hsv( int *, int *, int *) const;63 void setHsv( int h, int s, int v);62 void hsv(float *, float *, float *) const; 63 void setHsv(float h, float s, float v); 64 64 65 65 QColor light(int f = 150) const;