OLD | NEW |
| (Empty) |
1 // Copyright 2014 PDFium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | |
6 | |
7 #include "fpdfsdk/include/pdfwindow/PWL_Utils.h" | |
8 | |
9 #include <algorithm> | |
10 | |
11 #include "fpdfsdk/include/pdfwindow/PWL_Icon.h" | |
12 #include "fpdfsdk/include/pdfwindow/PWL_Wnd.h" | |
13 | |
14 #define IsFloatZero(f) ((f) < 0.0001 && (f) > -0.0001) | |
15 #define IsFloatBigger(fa, fb) ((fa) > (fb) && !IsFloatZero((fa) - (fb))) | |
16 #define IsFloatSmaller(fa, fb) ((fa) < (fb) && !IsFloatZero((fa) - (fb))) | |
17 #define IsFloatEqual(fa, fb) IsFloatZero((fa) - (fb)) | |
18 | |
19 CFX_ByteString CPWL_Utils::GetAppStreamFromArray(const CPWL_PathData* pPathData, | |
20 int32_t nCount) { | |
21 CFX_ByteTextBuf csAP; | |
22 | |
23 for (int32_t i = 0; i < nCount; i++) { | |
24 switch (pPathData[i].type) { | |
25 case PWLPT_MOVETO: | |
26 csAP << pPathData[i].point.x << " " << pPathData[i].point.y << " m\n"; | |
27 break; | |
28 case PWLPT_LINETO: | |
29 csAP << pPathData[i].point.x << " " << pPathData[i].point.y << " l\n"; | |
30 break; | |
31 case PWLPT_BEZIERTO: | |
32 csAP << pPathData[i].point.x << " " << pPathData[i].point.y << " " | |
33 << pPathData[i + 1].point.x << " " << pPathData[i + 1].point.y | |
34 << " " << pPathData[i + 2].point.x << " " | |
35 << pPathData[i + 2].point.y << " c\n"; | |
36 | |
37 i += 2; | |
38 break; | |
39 default: | |
40 break; | |
41 } | |
42 } | |
43 | |
44 return csAP.GetByteString(); | |
45 } | |
46 | |
47 void CPWL_Utils::GetPathDataFromArray(CFX_PathData& path, | |
48 const CPWL_PathData* pPathData, | |
49 int32_t nCount) { | |
50 path.SetPointCount(nCount); | |
51 | |
52 for (int32_t i = 0; i < nCount; i++) { | |
53 switch (pPathData[i].type) { | |
54 case PWLPT_MOVETO: | |
55 path.SetPoint(i, pPathData[i].point.x, pPathData[i].point.y, | |
56 FXPT_MOVETO); | |
57 break; | |
58 case PWLPT_LINETO: | |
59 path.SetPoint(i, pPathData[i].point.x, pPathData[i].point.y, | |
60 FXPT_LINETO); | |
61 break; | |
62 case PWLPT_BEZIERTO: | |
63 path.SetPoint(i, pPathData[i].point.x, pPathData[i].point.y, | |
64 FXPT_BEZIERTO); | |
65 break; | |
66 default: | |
67 break; | |
68 } | |
69 } | |
70 } | |
71 | |
72 CFX_FloatRect CPWL_Utils::MaxRect(const CFX_FloatRect& rect1, | |
73 const CFX_FloatRect& rect2) { | |
74 CFX_FloatRect rcRet; | |
75 | |
76 rcRet.left = PWL_MIN(rect1.left, rect2.left); | |
77 rcRet.bottom = PWL_MIN(rect1.bottom, rect2.bottom); | |
78 rcRet.right = PWL_MAX(rect1.right, rect2.right); | |
79 rcRet.top = PWL_MAX(rect1.top, rect2.top); | |
80 | |
81 return rcRet; | |
82 } | |
83 | |
84 CFX_FloatRect CPWL_Utils::OffsetRect(const CFX_FloatRect& rect, | |
85 FX_FLOAT x, | |
86 FX_FLOAT y) { | |
87 return CFX_FloatRect(rect.left + x, rect.bottom + y, rect.right + x, | |
88 rect.top + y); | |
89 } | |
90 | |
91 FX_BOOL CPWL_Utils::ContainsRect(const CFX_FloatRect& rcParent, | |
92 const CFX_FloatRect& rcChild) { | |
93 return rcChild.left >= rcParent.left && rcChild.bottom >= rcParent.bottom && | |
94 rcChild.right <= rcParent.right && rcChild.top <= rcParent.top; | |
95 } | |
96 | |
97 FX_BOOL CPWL_Utils::IntersectRect(const CFX_FloatRect& rect1, | |
98 const CFX_FloatRect& rect2) { | |
99 FX_FLOAT left = rect1.left > rect2.left ? rect1.left : rect2.left; | |
100 FX_FLOAT right = rect1.right < rect2.right ? rect1.right : rect2.right; | |
101 FX_FLOAT bottom = rect1.bottom > rect2.bottom ? rect1.bottom : rect2.bottom; | |
102 FX_FLOAT top = rect1.top < rect2.top ? rect1.top : rect2.top; | |
103 | |
104 return left < right && bottom < top; | |
105 } | |
106 | |
107 CFX_FloatPoint CPWL_Utils::OffsetPoint(const CFX_FloatPoint& point, | |
108 FX_FLOAT x, | |
109 FX_FLOAT y) { | |
110 return CFX_FloatPoint(point.x + x, point.y + y); | |
111 } | |
112 | |
113 CPVT_WordRange CPWL_Utils::OverlapWordRange(const CPVT_WordRange& wr1, | |
114 const CPVT_WordRange& wr2) { | |
115 CPVT_WordRange wrRet; | |
116 | |
117 if (wr2.EndPos.WordCmp(wr1.BeginPos) < 0 || | |
118 wr2.BeginPos.WordCmp(wr1.EndPos) > 0) | |
119 return wrRet; | |
120 if (wr1.EndPos.WordCmp(wr2.BeginPos) < 0 || | |
121 wr1.BeginPos.WordCmp(wr2.EndPos) > 0) | |
122 return wrRet; | |
123 | |
124 if (wr1.BeginPos.WordCmp(wr2.BeginPos) < 0) { | |
125 wrRet.BeginPos = wr2.BeginPos; | |
126 } else { | |
127 wrRet.BeginPos = wr1.BeginPos; | |
128 } | |
129 | |
130 if (wr1.EndPos.WordCmp(wr2.EndPos) < 0) { | |
131 wrRet.EndPos = wr1.EndPos; | |
132 } else { | |
133 wrRet.EndPos = wr2.EndPos; | |
134 } | |
135 | |
136 return wrRet; | |
137 } | |
138 | |
139 CFX_ByteString CPWL_Utils::GetAP_Check(const CFX_FloatRect& crBBox) { | |
140 const FX_FLOAT fWidth = crBBox.right - crBBox.left; | |
141 const FX_FLOAT fHeight = crBBox.top - crBBox.bottom; | |
142 | |
143 CPWL_Point pts[8][3] = {{CPWL_Point(0.28f, 0.52f), CPWL_Point(0.27f, 0.48f), | |
144 CPWL_Point(0.29f, 0.40f)}, | |
145 {CPWL_Point(0.30f, 0.33f), CPWL_Point(0.31f, 0.29f), | |
146 CPWL_Point(0.31f, 0.28f)}, | |
147 {CPWL_Point(0.39f, 0.28f), CPWL_Point(0.49f, 0.29f), | |
148 CPWL_Point(0.77f, 0.67f)}, | |
149 {CPWL_Point(0.76f, 0.68f), CPWL_Point(0.78f, 0.69f), | |
150 CPWL_Point(0.76f, 0.75f)}, | |
151 {CPWL_Point(0.76f, 0.75f), CPWL_Point(0.73f, 0.80f), | |
152 CPWL_Point(0.68f, 0.75f)}, | |
153 {CPWL_Point(0.68f, 0.74f), CPWL_Point(0.68f, 0.74f), | |
154 CPWL_Point(0.44f, 0.47f)}, | |
155 {CPWL_Point(0.43f, 0.47f), CPWL_Point(0.40f, 0.47f), | |
156 CPWL_Point(0.41f, 0.58f)}, | |
157 {CPWL_Point(0.40f, 0.60f), CPWL_Point(0.28f, 0.66f), | |
158 CPWL_Point(0.30f, 0.56f)}}; | |
159 | |
160 for (size_t i = 0; i < FX_ArraySize(pts); ++i) { | |
161 for (size_t j = 0; j < FX_ArraySize(pts[0]); ++j) { | |
162 pts[i][j].x = pts[i][j].x * fWidth + crBBox.left; | |
163 pts[i][j].y *= pts[i][j].y * fHeight + crBBox.bottom; | |
164 } | |
165 } | |
166 | |
167 CFX_ByteTextBuf csAP; | |
168 csAP << pts[0][0].x << " " << pts[0][0].y << " m\n"; | |
169 | |
170 for (size_t i = 0; i < FX_ArraySize(pts); ++i) { | |
171 size_t nNext = i < FX_ArraySize(pts) - 1 ? i + 1 : 0; | |
172 | |
173 FX_FLOAT px1 = pts[i][1].x - pts[i][0].x; | |
174 FX_FLOAT py1 = pts[i][1].y - pts[i][0].y; | |
175 FX_FLOAT px2 = pts[i][2].x - pts[nNext][0].x; | |
176 FX_FLOAT py2 = pts[i][2].y - pts[nNext][0].y; | |
177 | |
178 csAP << pts[i][0].x + px1 * FX_BEZIER << " " | |
179 << pts[i][0].y + py1 * FX_BEZIER << " " | |
180 << pts[nNext][0].x + px2 * FX_BEZIER << " " | |
181 << pts[nNext][0].y + py2 * FX_BEZIER << " " << pts[nNext][0].x << " " | |
182 << pts[nNext][0].y << " c\n"; | |
183 } | |
184 | |
185 return csAP.GetByteString(); | |
186 } | |
187 | |
188 CFX_ByteString CPWL_Utils::GetAP_Circle(const CFX_FloatRect& crBBox) { | |
189 CFX_ByteTextBuf csAP; | |
190 | |
191 FX_FLOAT fWidth = crBBox.right - crBBox.left; | |
192 FX_FLOAT fHeight = crBBox.top - crBBox.bottom; | |
193 | |
194 CFX_FloatPoint pt1(crBBox.left, crBBox.bottom + fHeight / 2); | |
195 CFX_FloatPoint pt2(crBBox.left + fWidth / 2, crBBox.top); | |
196 CFX_FloatPoint pt3(crBBox.right, crBBox.bottom + fHeight / 2); | |
197 CFX_FloatPoint pt4(crBBox.left + fWidth / 2, crBBox.bottom); | |
198 | |
199 csAP << pt1.x << " " << pt1.y << " m\n"; | |
200 | |
201 FX_FLOAT px = pt2.x - pt1.x; | |
202 FX_FLOAT py = pt2.y - pt1.y; | |
203 | |
204 csAP << pt1.x << " " << pt1.y + py * FX_BEZIER << " " | |
205 << pt2.x - px * FX_BEZIER << " " << pt2.y << " " << pt2.x << " " << pt2.y | |
206 << " c\n"; | |
207 | |
208 px = pt3.x - pt2.x; | |
209 py = pt2.y - pt3.y; | |
210 | |
211 csAP << pt2.x + px * FX_BEZIER << " " << pt2.y << " " << pt3.x << " " | |
212 << pt3.y + py * FX_BEZIER << " " << pt3.x << " " << pt3.y << " c\n"; | |
213 | |
214 px = pt3.x - pt4.x; | |
215 py = pt3.y - pt4.y; | |
216 | |
217 csAP << pt3.x << " " << pt3.y - py * FX_BEZIER << " " | |
218 << pt4.x + px * FX_BEZIER << " " << pt4.y << " " << pt4.x << " " << pt4.y | |
219 << " c\n"; | |
220 | |
221 px = pt4.x - pt1.x; | |
222 py = pt1.y - pt4.y; | |
223 | |
224 csAP << pt4.x - px * FX_BEZIER << " " << pt4.y << " " << pt1.x << " " | |
225 << pt1.y - py * FX_BEZIER << " " << pt1.x << " " << pt1.y << " c\n"; | |
226 | |
227 return csAP.GetByteString(); | |
228 } | |
229 | |
230 CFX_ByteString CPWL_Utils::GetAP_Cross(const CFX_FloatRect& crBBox) { | |
231 CFX_ByteTextBuf csAP; | |
232 | |
233 csAP << crBBox.left << " " << crBBox.top << " m\n"; | |
234 csAP << crBBox.right << " " << crBBox.bottom << " l\n"; | |
235 csAP << crBBox.left << " " << crBBox.bottom << " m\n"; | |
236 csAP << crBBox.right << " " << crBBox.top << " l\n"; | |
237 | |
238 return csAP.GetByteString(); | |
239 } | |
240 | |
241 CFX_ByteString CPWL_Utils::GetAP_Diamond(const CFX_FloatRect& crBBox) { | |
242 CFX_ByteTextBuf csAP; | |
243 | |
244 FX_FLOAT fWidth = crBBox.right - crBBox.left; | |
245 FX_FLOAT fHeight = crBBox.top - crBBox.bottom; | |
246 | |
247 CFX_FloatPoint pt1(crBBox.left, crBBox.bottom + fHeight / 2); | |
248 CFX_FloatPoint pt2(crBBox.left + fWidth / 2, crBBox.top); | |
249 CFX_FloatPoint pt3(crBBox.right, crBBox.bottom + fHeight / 2); | |
250 CFX_FloatPoint pt4(crBBox.left + fWidth / 2, crBBox.bottom); | |
251 | |
252 csAP << pt1.x << " " << pt1.y << " m\n"; | |
253 csAP << pt2.x << " " << pt2.y << " l\n"; | |
254 csAP << pt3.x << " " << pt3.y << " l\n"; | |
255 csAP << pt4.x << " " << pt4.y << " l\n"; | |
256 csAP << pt1.x << " " << pt1.y << " l\n"; | |
257 | |
258 return csAP.GetByteString(); | |
259 } | |
260 | |
261 CFX_ByteString CPWL_Utils::GetAP_Square(const CFX_FloatRect& crBBox) { | |
262 CFX_ByteTextBuf csAP; | |
263 | |
264 csAP << crBBox.left << " " << crBBox.top << " m\n"; | |
265 csAP << crBBox.right << " " << crBBox.top << " l\n"; | |
266 csAP << crBBox.right << " " << crBBox.bottom << " l\n"; | |
267 csAP << crBBox.left << " " << crBBox.bottom << " l\n"; | |
268 csAP << crBBox.left << " " << crBBox.top << " l\n"; | |
269 | |
270 return csAP.GetByteString(); | |
271 } | |
272 | |
273 CFX_ByteString CPWL_Utils::GetAP_Star(const CFX_FloatRect& crBBox) { | |
274 CFX_ByteTextBuf csAP; | |
275 | |
276 FX_FLOAT fRadius = | |
277 (crBBox.top - crBBox.bottom) / (1 + (FX_FLOAT)cos(FX_PI / 5.0f)); | |
278 CFX_FloatPoint ptCenter = CFX_FloatPoint((crBBox.left + crBBox.right) / 2.0f, | |
279 (crBBox.top + crBBox.bottom) / 2.0f); | |
280 | |
281 FX_FLOAT px[5], py[5]; | |
282 | |
283 FX_FLOAT fAngel = FX_PI / 10.0f; | |
284 | |
285 for (int32_t i = 0; i < 5; i++) { | |
286 px[i] = ptCenter.x + fRadius * (FX_FLOAT)cos(fAngel); | |
287 py[i] = ptCenter.y + fRadius * (FX_FLOAT)sin(fAngel); | |
288 | |
289 fAngel += FX_PI * 2 / 5.0f; | |
290 } | |
291 | |
292 csAP << px[0] << " " << py[0] << " m\n"; | |
293 | |
294 int32_t nNext = 0; | |
295 for (int32_t j = 0; j < 5; j++) { | |
296 nNext += 2; | |
297 if (nNext >= 5) | |
298 nNext -= 5; | |
299 csAP << px[nNext] << " " << py[nNext] << " l\n"; | |
300 } | |
301 | |
302 return csAP.GetByteString(); | |
303 } | |
304 | |
305 CFX_ByteString CPWL_Utils::GetAP_HalfCircle(const CFX_FloatRect& crBBox, | |
306 FX_FLOAT fRotate) { | |
307 CFX_ByteTextBuf csAP; | |
308 | |
309 FX_FLOAT fWidth = crBBox.right - crBBox.left; | |
310 FX_FLOAT fHeight = crBBox.top - crBBox.bottom; | |
311 | |
312 CFX_FloatPoint pt1(-fWidth / 2, 0); | |
313 CFX_FloatPoint pt2(0, fHeight / 2); | |
314 CFX_FloatPoint pt3(fWidth / 2, 0); | |
315 | |
316 FX_FLOAT px, py; | |
317 | |
318 csAP << cos(fRotate) << " " << sin(fRotate) << " " << -sin(fRotate) << " " | |
319 << cos(fRotate) << " " << crBBox.left + fWidth / 2 << " " | |
320 << crBBox.bottom + fHeight / 2 << " cm\n"; | |
321 | |
322 csAP << pt1.x << " " << pt1.y << " m\n"; | |
323 | |
324 px = pt2.x - pt1.x; | |
325 py = pt2.y - pt1.y; | |
326 | |
327 csAP << pt1.x << " " << pt1.y + py * FX_BEZIER << " " | |
328 << pt2.x - px * FX_BEZIER << " " << pt2.y << " " << pt2.x << " " << pt2.y | |
329 << " c\n"; | |
330 | |
331 px = pt3.x - pt2.x; | |
332 py = pt2.y - pt3.y; | |
333 | |
334 csAP << pt2.x + px * FX_BEZIER << " " << pt2.y << " " << pt3.x << " " | |
335 << pt3.y + py * FX_BEZIER << " " << pt3.x << " " << pt3.y << " c\n"; | |
336 | |
337 return csAP.GetByteString(); | |
338 } | |
339 | |
340 CFX_FloatRect CPWL_Utils::InflateRect(const CFX_FloatRect& rcRect, | |
341 FX_FLOAT fSize) { | |
342 if (rcRect.IsEmpty()) | |
343 return rcRect; | |
344 | |
345 CFX_FloatRect rcNew(rcRect.left - fSize, rcRect.bottom - fSize, | |
346 rcRect.right + fSize, rcRect.top + fSize); | |
347 rcNew.Normalize(); | |
348 return rcNew; | |
349 } | |
350 | |
351 CFX_FloatRect CPWL_Utils::DeflateRect(const CFX_FloatRect& rcRect, | |
352 FX_FLOAT fSize) { | |
353 if (rcRect.IsEmpty()) | |
354 return rcRect; | |
355 | |
356 CFX_FloatRect rcNew(rcRect.left + fSize, rcRect.bottom + fSize, | |
357 rcRect.right - fSize, rcRect.top - fSize); | |
358 rcNew.Normalize(); | |
359 return rcNew; | |
360 } | |
361 | |
362 CFX_FloatRect CPWL_Utils::ScaleRect(const CFX_FloatRect& rcRect, | |
363 FX_FLOAT fScale) { | |
364 FX_FLOAT fHalfWidth = (rcRect.right - rcRect.left) / 2.0f; | |
365 FX_FLOAT fHalfHeight = (rcRect.top - rcRect.bottom) / 2.0f; | |
366 | |
367 CFX_FloatPoint ptCenter = CFX_FloatPoint((rcRect.left + rcRect.right) / 2, | |
368 (rcRect.top + rcRect.bottom) / 2); | |
369 | |
370 return CFX_FloatRect( | |
371 ptCenter.x - fHalfWidth * fScale, ptCenter.y - fHalfHeight * fScale, | |
372 ptCenter.x + fHalfWidth * fScale, ptCenter.y + fHalfHeight * fScale); | |
373 } | |
374 | |
375 CFX_ByteString CPWL_Utils::GetRectFillAppStream(const CFX_FloatRect& rect, | |
376 const CPWL_Color& color) { | |
377 CFX_ByteTextBuf sAppStream; | |
378 | |
379 CFX_ByteString sColor = GetColorAppStream(color, TRUE); | |
380 if (sColor.GetLength() > 0) { | |
381 sAppStream << "q\n" << sColor; | |
382 sAppStream << rect.left << " " << rect.bottom << " " | |
383 << rect.right - rect.left << " " << rect.top - rect.bottom | |
384 << " re f\nQ\n"; | |
385 } | |
386 | |
387 return sAppStream.GetByteString(); | |
388 } | |
389 | |
390 CFX_ByteString CPWL_Utils::GetCircleFillAppStream(const CFX_FloatRect& rect, | |
391 const CPWL_Color& color) { | |
392 CFX_ByteTextBuf sAppStream; | |
393 | |
394 CFX_ByteString sColor = GetColorAppStream(color, TRUE); | |
395 if (sColor.GetLength() > 0) { | |
396 sAppStream << "q\n" << sColor << CPWL_Utils::GetAP_Circle(rect) << "f\nQ\n"; | |
397 } | |
398 | |
399 return sAppStream.GetByteString(); | |
400 } | |
401 | |
402 CFX_FloatRect CPWL_Utils::GetCenterSquare(const CFX_FloatRect& rect) { | |
403 FX_FLOAT fWidth = rect.right - rect.left; | |
404 FX_FLOAT fHeight = rect.top - rect.bottom; | |
405 | |
406 FX_FLOAT fCenterX = (rect.left + rect.right) / 2.0f; | |
407 FX_FLOAT fCenterY = (rect.top + rect.bottom) / 2.0f; | |
408 | |
409 FX_FLOAT fRadius = (fWidth > fHeight) ? fHeight / 2 : fWidth / 2; | |
410 | |
411 return CFX_FloatRect(fCenterX - fRadius, fCenterY - fRadius, | |
412 fCenterX + fRadius, fCenterY + fRadius); | |
413 } | |
414 | |
415 CFX_ByteString CPWL_Utils::GetEditAppStream(IFX_Edit* pEdit, | |
416 const CFX_FloatPoint& ptOffset, | |
417 const CPVT_WordRange* pRange, | |
418 FX_BOOL bContinuous, | |
419 FX_WORD SubWord) { | |
420 return IFX_Edit::GetEditAppearanceStream(pEdit, ptOffset, pRange, bContinuous, | |
421 SubWord); | |
422 } | |
423 | |
424 CFX_ByteString CPWL_Utils::GetEditSelAppStream(IFX_Edit* pEdit, | |
425 const CFX_FloatPoint& ptOffset, | |
426 const CPVT_WordRange* pRange) { | |
427 return IFX_Edit::GetSelectAppearanceStream(pEdit, ptOffset, pRange); | |
428 } | |
429 | |
430 static CFX_ByteString GetSquigglyAppearanceStream(FX_FLOAT fStartX, | |
431 FX_FLOAT fEndX, | |
432 FX_FLOAT fY, | |
433 FX_FLOAT fStep) { | |
434 CFX_ByteTextBuf sRet; | |
435 | |
436 sRet << "0 w\n" << fStartX << " " << fY << " m\n"; | |
437 | |
438 FX_FLOAT fx; | |
439 int32_t i; | |
440 | |
441 for (i = 1, fx = fStartX + fStep; fx < fEndX; fx += fStep, i++) { | |
442 sRet << fx << " " << fY + (i & 1) * fStep << " l\n"; | |
443 } | |
444 | |
445 sRet << "S\n"; | |
446 | |
447 return sRet.GetByteString(); | |
448 } | |
449 | |
450 static CFX_ByteString GetWordSpellCheckAppearanceStream( | |
451 IFX_Edit_Iterator* pIterator, | |
452 const CFX_FloatPoint& ptOffset, | |
453 const CPVT_WordRange& wrWord) { | |
454 CFX_ByteTextBuf sRet; | |
455 | |
456 FX_FLOAT fStartX = 0.0f; | |
457 FX_FLOAT fEndX = 0.0f; | |
458 FX_FLOAT fY = 0.0f; | |
459 FX_FLOAT fStep = 0.0f; | |
460 | |
461 FX_BOOL bBreak = FALSE; | |
462 | |
463 if (pIterator) { | |
464 pIterator->SetAt(wrWord.BeginPos); | |
465 | |
466 do { | |
467 CPVT_WordPlace place = pIterator->GetAt(); | |
468 | |
469 CPVT_Line line; | |
470 if (pIterator->GetLine(line)) { | |
471 fY = line.ptLine.y; | |
472 fStep = (line.fLineAscent - line.fLineDescent) / 16.0f; | |
473 } | |
474 | |
475 if (place.LineCmp(wrWord.BeginPos) == 0) { | |
476 pIterator->SetAt(wrWord.BeginPos); | |
477 CPVT_Word word; | |
478 if (pIterator->GetWord(word)) { | |
479 fStartX = word.ptWord.x; | |
480 } | |
481 } else { | |
482 fStartX = line.ptLine.x; | |
483 } | |
484 | |
485 if (place.LineCmp(wrWord.EndPos) == 0) { | |
486 pIterator->SetAt(wrWord.EndPos); | |
487 CPVT_Word word; | |
488 if (pIterator->GetWord(word)) { | |
489 fEndX = word.ptWord.x + word.fWidth; | |
490 } | |
491 | |
492 bBreak = TRUE; | |
493 } else { | |
494 fEndX = line.ptLine.x + line.fLineWidth; | |
495 } | |
496 | |
497 sRet << GetSquigglyAppearanceStream( | |
498 fStartX + ptOffset.x, fEndX + ptOffset.x, fY + ptOffset.y, fStep); | |
499 | |
500 if (bBreak) | |
501 break; | |
502 } while (pIterator->NextLine()); | |
503 } | |
504 | |
505 return sRet.GetByteString(); | |
506 } | |
507 | |
508 CFX_ByteString CPWL_Utils::GetSpellCheckAppStream( | |
509 IFX_Edit* pEdit, | |
510 IPWL_SpellCheck* pSpellCheck, | |
511 const CFX_FloatPoint& ptOffset, | |
512 const CPVT_WordRange* pRange) { | |
513 CFX_ByteTextBuf sRet; | |
514 | |
515 if (pRange && pRange->IsExist()) { | |
516 if (IFX_Edit_Iterator* pIterator = pEdit->GetIterator()) { | |
517 pIterator->SetAt(pRange->BeginPos); | |
518 | |
519 FX_BOOL bLatinWord = FALSE; | |
520 CPVT_WordPlace wpWordStart; | |
521 CFX_ByteString sWord; | |
522 | |
523 CPVT_WordPlace oldplace; | |
524 while (pIterator->NextWord()) { | |
525 CPVT_WordPlace place = pIterator->GetAt(); | |
526 if (pRange && place.WordCmp(pRange->EndPos) > 0) | |
527 break; | |
528 | |
529 CPVT_Word word; | |
530 if (pIterator->GetWord(word)) { | |
531 if (FX_EDIT_ISLATINWORD(word.Word)) { | |
532 if (!bLatinWord) { | |
533 wpWordStart = place; | |
534 bLatinWord = TRUE; | |
535 } | |
536 | |
537 sWord += (char)word.Word; | |
538 oldplace = place; | |
539 } else { | |
540 if (bLatinWord) { | |
541 if (!pSpellCheck->CheckWord(sWord)) { | |
542 sRet << GetWordSpellCheckAppearanceStream( | |
543 pIterator, ptOffset, CPVT_WordRange(wpWordStart, oldplace)); | |
544 pIterator->SetAt(place); | |
545 } | |
546 bLatinWord = FALSE; | |
547 } | |
548 | |
549 sWord.Empty(); | |
550 } | |
551 } else { | |
552 if (bLatinWord) { | |
553 if (!pSpellCheck->CheckWord(sWord)) | |
554 sRet << GetWordSpellCheckAppearanceStream( | |
555 pIterator, ptOffset, CPVT_WordRange(wpWordStart, oldplace)); | |
556 bLatinWord = FALSE; | |
557 sWord.Empty(); | |
558 } | |
559 } | |
560 } | |
561 | |
562 if (bLatinWord) { | |
563 if (!pSpellCheck->CheckWord(sWord)) | |
564 sRet << GetWordSpellCheckAppearanceStream( | |
565 pIterator, ptOffset, CPVT_WordRange(wpWordStart, oldplace)); | |
566 | |
567 bLatinWord = FALSE; | |
568 sWord.Empty(); | |
569 } | |
570 } | |
571 } | |
572 | |
573 return sRet.GetByteString(); | |
574 } | |
575 | |
576 CFX_ByteString CPWL_Utils::GetTextAppStream(const CFX_FloatRect& rcBBox, | |
577 IFX_Edit_FontMap* pFontMap, | |
578 const CFX_WideString& sText, | |
579 int32_t nAlignmentH, | |
580 int32_t nAlignmentV, | |
581 FX_FLOAT fFontSize, | |
582 FX_BOOL bMultiLine, | |
583 FX_BOOL bAutoReturn, | |
584 const CPWL_Color& crText) { | |
585 CFX_ByteTextBuf sRet; | |
586 | |
587 if (IFX_Edit* pEdit = IFX_Edit::NewEdit()) { | |
588 pEdit->SetFontMap(pFontMap); | |
589 pEdit->SetPlateRect(rcBBox); | |
590 pEdit->SetAlignmentH(nAlignmentH); | |
591 pEdit->SetAlignmentV(nAlignmentV); | |
592 pEdit->SetMultiLine(bMultiLine); | |
593 pEdit->SetAutoReturn(bAutoReturn); | |
594 if (IsFloatZero(fFontSize)) | |
595 pEdit->SetAutoFontSize(TRUE); | |
596 else | |
597 pEdit->SetFontSize(fFontSize); | |
598 | |
599 pEdit->Initialize(); | |
600 pEdit->SetText(sText.c_str()); | |
601 | |
602 CFX_ByteString sEdit = | |
603 CPWL_Utils::GetEditAppStream(pEdit, CFX_FloatPoint(0.0f, 0.0f)); | |
604 if (sEdit.GetLength() > 0) { | |
605 sRet << "BT\n" << CPWL_Utils::GetColorAppStream(crText) << sEdit | |
606 << "ET\n"; | |
607 } | |
608 IFX_Edit::DelEdit(pEdit); | |
609 } | |
610 | |
611 return sRet.GetByteString(); | |
612 } | |
613 | |
614 CFX_ByteString CPWL_Utils::GetPushButtonAppStream(const CFX_FloatRect& rcBBox, | |
615 IFX_Edit_FontMap* pFontMap, | |
616 CPDF_Stream* pIconStream, | |
617 CPDF_IconFit& IconFit, | |
618 const CFX_WideString& sLabel, | |
619 const CPWL_Color& crText, | |
620 FX_FLOAT fFontSize, | |
621 int32_t nLayOut) { | |
622 const FX_FLOAT fAutoFontScale = 1.0f / 3.0f; | |
623 | |
624 if (IFX_Edit* pEdit = IFX_Edit::NewEdit()) { | |
625 pEdit->SetFontMap(pFontMap); | |
626 pEdit->SetAlignmentH(1); | |
627 pEdit->SetAlignmentV(1); | |
628 pEdit->SetMultiLine(FALSE); | |
629 pEdit->SetAutoReturn(FALSE); | |
630 if (IsFloatZero(fFontSize)) | |
631 pEdit->SetAutoFontSize(TRUE); | |
632 else | |
633 pEdit->SetFontSize(fFontSize); | |
634 | |
635 pEdit->Initialize(); | |
636 pEdit->SetText(sLabel.c_str()); | |
637 | |
638 CFX_FloatRect rcLabelContent = pEdit->GetContentRect(); | |
639 CPWL_Icon Icon; | |
640 PWL_CREATEPARAM cp; | |
641 cp.dwFlags = PWS_VISIBLE; | |
642 Icon.Create(cp); | |
643 Icon.SetIconFit(&IconFit); | |
644 Icon.SetPDFStream(pIconStream); | |
645 | |
646 CFX_FloatRect rcLabel = CFX_FloatRect(0, 0, 0, 0); | |
647 CFX_FloatRect rcIcon = CFX_FloatRect(0, 0, 0, 0); | |
648 FX_FLOAT fWidth = 0.0f; | |
649 FX_FLOAT fHeight = 0.0f; | |
650 | |
651 switch (nLayOut) { | |
652 case PPBL_LABEL: | |
653 rcLabel = rcBBox; | |
654 rcIcon = CFX_FloatRect(0, 0, 0, 0); | |
655 break; | |
656 case PPBL_ICON: | |
657 rcIcon = rcBBox; | |
658 rcLabel = CFX_FloatRect(0, 0, 0, 0); | |
659 break; | |
660 case PPBL_ICONTOPLABELBOTTOM: | |
661 | |
662 if (pIconStream) { | |
663 if (IsFloatZero(fFontSize)) { | |
664 fHeight = rcBBox.top - rcBBox.bottom; | |
665 rcLabel = CFX_FloatRect(rcBBox.left, rcBBox.bottom, rcBBox.right, | |
666 rcBBox.bottom + fHeight * fAutoFontScale); | |
667 rcIcon = CFX_FloatRect(rcBBox.left, rcLabel.top, rcBBox.right, | |
668 rcBBox.top); | |
669 } else { | |
670 fHeight = rcLabelContent.Height(); | |
671 | |
672 if (rcBBox.bottom + fHeight > rcBBox.top) { | |
673 rcIcon = CFX_FloatRect(0, 0, 0, 0); | |
674 rcLabel = rcBBox; | |
675 } else { | |
676 rcLabel = CFX_FloatRect(rcBBox.left, rcBBox.bottom, rcBBox.right, | |
677 rcBBox.bottom + fHeight); | |
678 rcIcon = CFX_FloatRect(rcBBox.left, rcLabel.top, rcBBox.right, | |
679 rcBBox.top); | |
680 } | |
681 } | |
682 } else { | |
683 rcLabel = rcBBox; | |
684 rcIcon = CFX_FloatRect(0, 0, 0, 0); | |
685 } | |
686 | |
687 break; | |
688 case PPBL_LABELTOPICONBOTTOM: | |
689 | |
690 if (pIconStream) { | |
691 if (IsFloatZero(fFontSize)) { | |
692 fHeight = rcBBox.top - rcBBox.bottom; | |
693 rcLabel = CFX_FloatRect(rcBBox.left, | |
694 rcBBox.top - fHeight * fAutoFontScale, | |
695 rcBBox.right, rcBBox.top); | |
696 rcIcon = CFX_FloatRect(rcBBox.left, rcBBox.bottom, rcBBox.right, | |
697 rcLabel.bottom); | |
698 } else { | |
699 fHeight = rcLabelContent.Height(); | |
700 | |
701 if (rcBBox.bottom + fHeight > rcBBox.top) { | |
702 rcIcon = CFX_FloatRect(0, 0, 0, 0); | |
703 rcLabel = rcBBox; | |
704 } else { | |
705 rcLabel = CFX_FloatRect(rcBBox.left, rcBBox.top - fHeight, | |
706 rcBBox.right, rcBBox.top); | |
707 rcIcon = CFX_FloatRect(rcBBox.left, rcBBox.bottom, rcBBox.right, | |
708 rcLabel.bottom); | |
709 } | |
710 } | |
711 } else { | |
712 rcLabel = rcBBox; | |
713 rcIcon = CFX_FloatRect(0, 0, 0, 0); | |
714 } | |
715 | |
716 break; | |
717 case PPBL_ICONLEFTLABELRIGHT: | |
718 | |
719 if (pIconStream) { | |
720 if (IsFloatZero(fFontSize)) { | |
721 fWidth = rcBBox.right - rcBBox.left; | |
722 rcLabel = CFX_FloatRect(rcBBox.right - fWidth * fAutoFontScale, | |
723 rcBBox.bottom, rcBBox.right, rcBBox.top); | |
724 rcIcon = CFX_FloatRect(rcBBox.left, rcBBox.bottom, rcLabel.left, | |
725 rcBBox.top); | |
726 | |
727 if (rcLabelContent.Width() < fWidth * fAutoFontScale) { | |
728 } else { | |
729 if (rcLabelContent.Width() < fWidth) { | |
730 rcLabel = | |
731 CFX_FloatRect(rcBBox.right - rcLabelContent.Width(), | |
732 rcBBox.bottom, rcBBox.right, rcBBox.top); | |
733 rcIcon = CFX_FloatRect(rcBBox.left, rcBBox.bottom, rcLabel.left, | |
734 rcBBox.top); | |
735 } else { | |
736 rcLabel = rcBBox; | |
737 rcIcon = CFX_FloatRect(0, 0, 0, 0); | |
738 } | |
739 } | |
740 } else { | |
741 fWidth = rcLabelContent.Width(); | |
742 | |
743 if (rcBBox.left + fWidth > rcBBox.right) { | |
744 rcLabel = rcBBox; | |
745 rcIcon = CFX_FloatRect(0, 0, 0, 0); | |
746 } else { | |
747 rcLabel = CFX_FloatRect(rcBBox.right - fWidth, rcBBox.bottom, | |
748 rcBBox.right, rcBBox.top); | |
749 rcIcon = CFX_FloatRect(rcBBox.left, rcBBox.bottom, rcLabel.left, | |
750 rcBBox.top); | |
751 } | |
752 } | |
753 } else { | |
754 rcLabel = rcBBox; | |
755 rcIcon = CFX_FloatRect(0, 0, 0, 0); | |
756 } | |
757 | |
758 break; | |
759 case PPBL_LABELLEFTICONRIGHT: | |
760 | |
761 if (pIconStream) { | |
762 if (IsFloatZero(fFontSize)) { | |
763 fWidth = rcBBox.right - rcBBox.left; | |
764 rcLabel = CFX_FloatRect(rcBBox.left, rcBBox.bottom, | |
765 rcBBox.left + fWidth * fAutoFontScale, | |
766 rcBBox.top); | |
767 rcIcon = CFX_FloatRect(rcLabel.right, rcBBox.bottom, rcBBox.right, | |
768 rcBBox.top); | |
769 | |
770 if (rcLabelContent.Width() < fWidth * fAutoFontScale) { | |
771 } else { | |
772 if (rcLabelContent.Width() < fWidth) { | |
773 rcLabel = CFX_FloatRect(rcBBox.left, rcBBox.bottom, | |
774 rcBBox.left + rcLabelContent.Width(), | |
775 rcBBox.top); | |
776 rcIcon = CFX_FloatRect(rcLabel.right, rcBBox.bottom, | |
777 rcBBox.right, rcBBox.top); | |
778 } else { | |
779 rcLabel = rcBBox; | |
780 rcIcon = CFX_FloatRect(0, 0, 0, 0); | |
781 } | |
782 } | |
783 } else { | |
784 fWidth = rcLabelContent.Width(); | |
785 | |
786 if (rcBBox.left + fWidth > rcBBox.right) { | |
787 rcLabel = rcBBox; | |
788 rcIcon = CFX_FloatRect(0, 0, 0, 0); | |
789 } else { | |
790 rcLabel = CFX_FloatRect(rcBBox.left, rcBBox.bottom, | |
791 rcBBox.left + fWidth, rcBBox.top); | |
792 rcIcon = CFX_FloatRect(rcLabel.right, rcBBox.bottom, rcBBox.right, | |
793 rcBBox.top); | |
794 } | |
795 } | |
796 } else { | |
797 rcLabel = rcBBox; | |
798 rcIcon = CFX_FloatRect(0, 0, 0, 0); | |
799 } | |
800 | |
801 break; | |
802 case PPBL_LABELOVERICON: | |
803 rcLabel = rcBBox; | |
804 rcIcon = rcBBox; | |
805 break; | |
806 } | |
807 | |
808 CFX_ByteTextBuf sAppStream, sTemp; | |
809 | |
810 if (!rcIcon.IsEmpty()) { | |
811 Icon.Move(rcIcon, FALSE, FALSE); | |
812 sTemp << Icon.GetImageAppStream(); | |
813 } | |
814 | |
815 Icon.Destroy(); | |
816 | |
817 if (!rcLabel.IsEmpty()) { | |
818 pEdit->SetPlateRect(rcLabel); | |
819 CFX_ByteString sEdit = | |
820 CPWL_Utils::GetEditAppStream(pEdit, CFX_FloatPoint(0.0f, 0.0f)); | |
821 if (sEdit.GetLength() > 0) { | |
822 sTemp << "BT\n" << CPWL_Utils::GetColorAppStream(crText) << sEdit | |
823 << "ET\n"; | |
824 } | |
825 } | |
826 | |
827 IFX_Edit::DelEdit(pEdit); | |
828 | |
829 if (sTemp.GetSize() > 0) { | |
830 sAppStream << "q\n" << rcBBox.left << " " << rcBBox.bottom << " " | |
831 << rcBBox.right - rcBBox.left << " " | |
832 << rcBBox.top - rcBBox.bottom << " re W n\n"; | |
833 sAppStream << sTemp << "Q\n"; | |
834 } | |
835 | |
836 return sAppStream.GetByteString(); | |
837 } | |
838 | |
839 return ""; | |
840 } | |
841 | |
842 CFX_ByteString CPWL_Utils::GetColorAppStream(const CPWL_Color& color, | |
843 const FX_BOOL& bFillOrStroke) { | |
844 CFX_ByteTextBuf sColorStream; | |
845 | |
846 switch (color.nColorType) { | |
847 case COLORTYPE_RGB: | |
848 sColorStream << color.fColor1 << " " << color.fColor2 << " " | |
849 << color.fColor3 << " " << (bFillOrStroke ? "rg" : "RG") | |
850 << "\n"; | |
851 break; | |
852 case COLORTYPE_GRAY: | |
853 sColorStream << color.fColor1 << " " << (bFillOrStroke ? "g" : "G") | |
854 << "\n"; | |
855 break; | |
856 case COLORTYPE_CMYK: | |
857 sColorStream << color.fColor1 << " " << color.fColor2 << " " | |
858 << color.fColor3 << " " << color.fColor4 << " " | |
859 << (bFillOrStroke ? "k" : "K") << "\n"; | |
860 break; | |
861 } | |
862 | |
863 return sColorStream.GetByteString(); | |
864 } | |
865 | |
866 CFX_ByteString CPWL_Utils::GetBorderAppStream(const CFX_FloatRect& rect, | |
867 FX_FLOAT fWidth, | |
868 const CPWL_Color& color, | |
869 const CPWL_Color& crLeftTop, | |
870 const CPWL_Color& crRightBottom, | |
871 int32_t nStyle, | |
872 const CPWL_Dash& dash) { | |
873 CFX_ByteTextBuf sAppStream; | |
874 CFX_ByteString sColor; | |
875 | |
876 FX_FLOAT fLeft = rect.left; | |
877 FX_FLOAT fRight = rect.right; | |
878 FX_FLOAT fTop = rect.top; | |
879 FX_FLOAT fBottom = rect.bottom; | |
880 | |
881 if (fWidth > 0.0f) { | |
882 FX_FLOAT fHalfWidth = fWidth / 2.0f; | |
883 | |
884 sAppStream << "q\n"; | |
885 | |
886 switch (nStyle) { | |
887 default: | |
888 case PBS_SOLID: | |
889 sColor = CPWL_Utils::GetColorAppStream(color, TRUE); | |
890 if (sColor.GetLength() > 0) { | |
891 sAppStream << sColor; | |
892 sAppStream << fLeft << " " << fBottom << " " << fRight - fLeft << " " | |
893 << fTop - fBottom << " re\n"; | |
894 sAppStream << fLeft + fWidth << " " << fBottom + fWidth << " " | |
895 << fRight - fLeft - fWidth * 2 << " " | |
896 << fTop - fBottom - fWidth * 2 << " re\n"; | |
897 sAppStream << "f*\n"; | |
898 } | |
899 break; | |
900 case PBS_DASH: | |
901 sColor = CPWL_Utils::GetColorAppStream(color, FALSE); | |
902 if (sColor.GetLength() > 0) { | |
903 sAppStream << sColor; | |
904 sAppStream << fWidth << " w" | |
905 << " [" << dash.nDash << " " << dash.nGap << "] " | |
906 << dash.nPhase << " d\n"; | |
907 sAppStream << fLeft + fWidth / 2 << " " << fBottom + fWidth / 2 | |
908 << " m\n"; | |
909 sAppStream << fLeft + fWidth / 2 << " " << fTop - fWidth / 2 | |
910 << " l\n"; | |
911 sAppStream << fRight - fWidth / 2 << " " << fTop - fWidth / 2 | |
912 << " l\n"; | |
913 sAppStream << fRight - fWidth / 2 << " " << fBottom + fWidth / 2 | |
914 << " l\n"; | |
915 sAppStream << fLeft + fWidth / 2 << " " << fBottom + fWidth / 2 | |
916 << " l S\n"; | |
917 } | |
918 break; | |
919 case PBS_BEVELED: | |
920 case PBS_INSET: | |
921 sColor = CPWL_Utils::GetColorAppStream(crLeftTop, TRUE); | |
922 if (sColor.GetLength() > 0) { | |
923 sAppStream << sColor; | |
924 sAppStream << fLeft + fHalfWidth << " " << fBottom + fHalfWidth | |
925 << " m\n"; | |
926 sAppStream << fLeft + fHalfWidth << " " << fTop - fHalfWidth | |
927 << " l\n"; | |
928 sAppStream << fRight - fHalfWidth << " " << fTop - fHalfWidth | |
929 << " l\n"; | |
930 sAppStream << fRight - fHalfWidth * 2 << " " << fTop - fHalfWidth * 2 | |
931 << " l\n"; | |
932 sAppStream << fLeft + fHalfWidth * 2 << " " << fTop - fHalfWidth * 2 | |
933 << " l\n"; | |
934 sAppStream << fLeft + fHalfWidth * 2 << " " | |
935 << fBottom + fHalfWidth * 2 << " l f\n"; | |
936 } | |
937 | |
938 sColor = CPWL_Utils::GetColorAppStream(crRightBottom, TRUE); | |
939 if (sColor.GetLength() > 0) { | |
940 sAppStream << sColor; | |
941 sAppStream << fRight - fHalfWidth << " " << fTop - fHalfWidth | |
942 << " m\n"; | |
943 sAppStream << fRight - fHalfWidth << " " << fBottom + fHalfWidth | |
944 << " l\n"; | |
945 sAppStream << fLeft + fHalfWidth << " " << fBottom + fHalfWidth | |
946 << " l\n"; | |
947 sAppStream << fLeft + fHalfWidth * 2 << " " | |
948 << fBottom + fHalfWidth * 2 << " l\n"; | |
949 sAppStream << fRight - fHalfWidth * 2 << " " | |
950 << fBottom + fHalfWidth * 2 << " l\n"; | |
951 sAppStream << fRight - fHalfWidth * 2 << " " << fTop - fHalfWidth * 2 | |
952 << " l f\n"; | |
953 } | |
954 | |
955 sColor = CPWL_Utils::GetColorAppStream(color, TRUE); | |
956 if (sColor.GetLength() > 0) { | |
957 sAppStream << sColor; | |
958 sAppStream << fLeft << " " << fBottom << " " << fRight - fLeft << " " | |
959 << fTop - fBottom << " re\n"; | |
960 sAppStream << fLeft + fHalfWidth << " " << fBottom + fHalfWidth << " " | |
961 << fRight - fLeft - fHalfWidth * 2 << " " | |
962 << fTop - fBottom - fHalfWidth * 2 << " re f*\n"; | |
963 } | |
964 break; | |
965 case PBS_UNDERLINED: | |
966 sColor = CPWL_Utils::GetColorAppStream(color, FALSE); | |
967 if (sColor.GetLength() > 0) { | |
968 sAppStream << sColor; | |
969 sAppStream << fWidth << " w\n"; | |
970 sAppStream << fLeft << " " << fBottom + fWidth / 2 << " m\n"; | |
971 sAppStream << fRight << " " << fBottom + fWidth / 2 << " l S\n"; | |
972 } | |
973 break; | |
974 } | |
975 | |
976 sAppStream << "Q\n"; | |
977 } | |
978 | |
979 return sAppStream.GetByteString(); | |
980 } | |
981 | |
982 CFX_ByteString CPWL_Utils::GetCircleBorderAppStream( | |
983 const CFX_FloatRect& rect, | |
984 FX_FLOAT fWidth, | |
985 const CPWL_Color& color, | |
986 const CPWL_Color& crLeftTop, | |
987 const CPWL_Color& crRightBottom, | |
988 int32_t nStyle, | |
989 const CPWL_Dash& dash) { | |
990 CFX_ByteTextBuf sAppStream; | |
991 CFX_ByteString sColor; | |
992 | |
993 if (fWidth > 0.0f) { | |
994 sAppStream << "q\n"; | |
995 | |
996 switch (nStyle) { | |
997 default: | |
998 case PBS_SOLID: | |
999 case PBS_UNDERLINED: { | |
1000 sColor = CPWL_Utils::GetColorAppStream(color, FALSE); | |
1001 if (sColor.GetLength() > 0) { | |
1002 sAppStream << "q\n" << fWidth << " w\n" << sColor | |
1003 << CPWL_Utils::GetAP_Circle( | |
1004 CPWL_Utils::DeflateRect(rect, fWidth / 2.0f)) | |
1005 << " S\nQ\n"; | |
1006 } | |
1007 } break; | |
1008 case PBS_DASH: { | |
1009 sColor = CPWL_Utils::GetColorAppStream(color, FALSE); | |
1010 if (sColor.GetLength() > 0) { | |
1011 sAppStream << "q\n" << fWidth << " w\n" | |
1012 << "[" << dash.nDash << " " << dash.nGap << "] " | |
1013 << dash.nPhase << " d\n" << sColor | |
1014 << CPWL_Utils::GetAP_Circle( | |
1015 CPWL_Utils::DeflateRect(rect, fWidth / 2.0f)) | |
1016 << " S\nQ\n"; | |
1017 } | |
1018 } break; | |
1019 case PBS_BEVELED: { | |
1020 FX_FLOAT fHalfWidth = fWidth / 2.0f; | |
1021 | |
1022 sColor = CPWL_Utils::GetColorAppStream(color, FALSE); | |
1023 if (sColor.GetLength() > 0) { | |
1024 sAppStream << "q\n" << fHalfWidth << " w\n" << sColor | |
1025 << CPWL_Utils::GetAP_Circle(rect) << " S\nQ\n"; | |
1026 } | |
1027 | |
1028 sColor = CPWL_Utils::GetColorAppStream(crLeftTop, FALSE); | |
1029 if (sColor.GetLength() > 0) { | |
1030 sAppStream << "q\n" << fHalfWidth << " w\n" << sColor | |
1031 << CPWL_Utils::GetAP_HalfCircle( | |
1032 CPWL_Utils::DeflateRect(rect, fHalfWidth * 0.75f), | |
1033 FX_PI / 4.0f) | |
1034 << " S\nQ\n"; | |
1035 } | |
1036 | |
1037 sColor = CPWL_Utils::GetColorAppStream(crRightBottom, FALSE); | |
1038 if (sColor.GetLength() > 0) { | |
1039 sAppStream << "q\n" << fHalfWidth << " w\n" << sColor | |
1040 << CPWL_Utils::GetAP_HalfCircle( | |
1041 CPWL_Utils::DeflateRect(rect, fHalfWidth * 0.75f), | |
1042 FX_PI * 5 / 4.0f) | |
1043 << " S\nQ\n"; | |
1044 } | |
1045 } break; | |
1046 case PBS_INSET: { | |
1047 FX_FLOAT fHalfWidth = fWidth / 2.0f; | |
1048 | |
1049 sColor = CPWL_Utils::GetColorAppStream(color, FALSE); | |
1050 if (sColor.GetLength() > 0) { | |
1051 sAppStream << "q\n" << fHalfWidth << " w\n" << sColor | |
1052 << CPWL_Utils::GetAP_Circle(rect) << " S\nQ\n"; | |
1053 } | |
1054 | |
1055 sColor = CPWL_Utils::GetColorAppStream(crLeftTop, FALSE); | |
1056 if (sColor.GetLength() > 0) { | |
1057 sAppStream << "q\n" << fHalfWidth << " w\n" << sColor | |
1058 << CPWL_Utils::GetAP_HalfCircle( | |
1059 CPWL_Utils::DeflateRect(rect, fHalfWidth * 0.75f), | |
1060 FX_PI / 4.0f) | |
1061 << " S\nQ\n"; | |
1062 } | |
1063 | |
1064 sColor = CPWL_Utils::GetColorAppStream(crRightBottom, FALSE); | |
1065 if (sColor.GetLength() > 0) { | |
1066 sAppStream << "q\n" << fHalfWidth << " w\n" << sColor | |
1067 << CPWL_Utils::GetAP_HalfCircle( | |
1068 CPWL_Utils::DeflateRect(rect, fHalfWidth * 0.75f), | |
1069 FX_PI * 5 / 4.0f) | |
1070 << " S\nQ\n"; | |
1071 } | |
1072 } break; | |
1073 } | |
1074 | |
1075 sAppStream << "Q\n"; | |
1076 } | |
1077 | |
1078 return sAppStream.GetByteString(); | |
1079 } | |
1080 | |
1081 CPWL_Color CPWL_Utils::SubstractColor(const CPWL_Color& sColor, | |
1082 FX_FLOAT fColorSub) { | |
1083 CPWL_Color sRet; | |
1084 sRet.nColorType = sColor.nColorType; | |
1085 | |
1086 switch (sColor.nColorType) { | |
1087 case COLORTYPE_TRANSPARENT: | |
1088 sRet.nColorType = COLORTYPE_RGB; | |
1089 sRet.fColor1 = PWL_MAX(1 - fColorSub, 0.0f); | |
1090 sRet.fColor2 = PWL_MAX(1 - fColorSub, 0.0f); | |
1091 sRet.fColor3 = PWL_MAX(1 - fColorSub, 0.0f); | |
1092 break; | |
1093 case COLORTYPE_RGB: | |
1094 case COLORTYPE_GRAY: | |
1095 case COLORTYPE_CMYK: | |
1096 sRet.fColor1 = PWL_MAX(sColor.fColor1 - fColorSub, 0.0f); | |
1097 sRet.fColor2 = PWL_MAX(sColor.fColor2 - fColorSub, 0.0f); | |
1098 sRet.fColor3 = PWL_MAX(sColor.fColor3 - fColorSub, 0.0f); | |
1099 sRet.fColor4 = PWL_MAX(sColor.fColor4 - fColorSub, 0.0f); | |
1100 break; | |
1101 } | |
1102 | |
1103 return sRet; | |
1104 } | |
1105 | |
1106 CPWL_Color CPWL_Utils::DevideColor(const CPWL_Color& sColor, | |
1107 FX_FLOAT fColorDevide) { | |
1108 CPWL_Color sRet; | |
1109 sRet.nColorType = sColor.nColorType; | |
1110 | |
1111 switch (sColor.nColorType) { | |
1112 case COLORTYPE_TRANSPARENT: | |
1113 sRet.nColorType = COLORTYPE_RGB; | |
1114 sRet.fColor1 = 1 / fColorDevide; | |
1115 sRet.fColor2 = 1 / fColorDevide; | |
1116 sRet.fColor3 = 1 / fColorDevide; | |
1117 break; | |
1118 case COLORTYPE_RGB: | |
1119 case COLORTYPE_GRAY: | |
1120 case COLORTYPE_CMYK: | |
1121 sRet = sColor; | |
1122 sRet.fColor1 /= fColorDevide; | |
1123 sRet.fColor2 /= fColorDevide; | |
1124 sRet.fColor3 /= fColorDevide; | |
1125 sRet.fColor4 /= fColorDevide; | |
1126 break; | |
1127 } | |
1128 | |
1129 return sRet; | |
1130 } | |
1131 | |
1132 CFX_ByteString CPWL_Utils::GetAppStream_Check(const CFX_FloatRect& rcBBox, | |
1133 const CPWL_Color& crText) { | |
1134 CFX_ByteTextBuf sAP; | |
1135 sAP << "q\n" << CPWL_Utils::GetColorAppStream(crText, TRUE) | |
1136 << CPWL_Utils::GetAP_Check(rcBBox) << "f\nQ\n"; | |
1137 return sAP.GetByteString(); | |
1138 } | |
1139 | |
1140 CFX_ByteString CPWL_Utils::GetAppStream_Circle(const CFX_FloatRect& rcBBox, | |
1141 const CPWL_Color& crText) { | |
1142 CFX_ByteTextBuf sAP; | |
1143 sAP << "q\n" << CPWL_Utils::GetColorAppStream(crText, TRUE) | |
1144 << CPWL_Utils::GetAP_Circle(rcBBox) << "f\nQ\n"; | |
1145 return sAP.GetByteString(); | |
1146 } | |
1147 | |
1148 CFX_ByteString CPWL_Utils::GetAppStream_Cross(const CFX_FloatRect& rcBBox, | |
1149 const CPWL_Color& crText) { | |
1150 CFX_ByteTextBuf sAP; | |
1151 sAP << "q\n" << CPWL_Utils::GetColorAppStream(crText, FALSE) | |
1152 << CPWL_Utils::GetAP_Cross(rcBBox) << "S\nQ\n"; | |
1153 return sAP.GetByteString(); | |
1154 } | |
1155 | |
1156 CFX_ByteString CPWL_Utils::GetAppStream_Diamond(const CFX_FloatRect& rcBBox, | |
1157 const CPWL_Color& crText) { | |
1158 CFX_ByteTextBuf sAP; | |
1159 sAP << "q\n1 w\n" << CPWL_Utils::GetColorAppStream(crText, TRUE) | |
1160 << CPWL_Utils::GetAP_Diamond(rcBBox) << "f\nQ\n"; | |
1161 return sAP.GetByteString(); | |
1162 } | |
1163 | |
1164 CFX_ByteString CPWL_Utils::GetAppStream_Square(const CFX_FloatRect& rcBBox, | |
1165 const CPWL_Color& crText) { | |
1166 CFX_ByteTextBuf sAP; | |
1167 sAP << "q\n" << CPWL_Utils::GetColorAppStream(crText, TRUE) | |
1168 << CPWL_Utils::GetAP_Square(rcBBox) << "f\nQ\n"; | |
1169 return sAP.GetByteString(); | |
1170 } | |
1171 | |
1172 CFX_ByteString CPWL_Utils::GetAppStream_Star(const CFX_FloatRect& rcBBox, | |
1173 const CPWL_Color& crText) { | |
1174 CFX_ByteTextBuf sAP; | |
1175 sAP << "q\n" << CPWL_Utils::GetColorAppStream(crText, TRUE) | |
1176 << CPWL_Utils::GetAP_Star(rcBBox) << "f\nQ\n"; | |
1177 return sAP.GetByteString(); | |
1178 } | |
1179 | |
1180 CFX_ByteString CPWL_Utils::GetCheckBoxAppStream(const CFX_FloatRect& rcBBox, | |
1181 int32_t nStyle, | |
1182 const CPWL_Color& crText) { | |
1183 CFX_FloatRect rcCenter = GetCenterSquare(rcBBox); | |
1184 switch (nStyle) { | |
1185 default: | |
1186 case PCS_CHECK: | |
1187 return GetAppStream_Check(rcCenter, crText); | |
1188 case PCS_CIRCLE: | |
1189 return GetAppStream_Circle(ScaleRect(rcCenter, 2.0f / 3.0f), crText); | |
1190 case PCS_CROSS: | |
1191 return GetAppStream_Cross(rcCenter, crText); | |
1192 case PCS_DIAMOND: | |
1193 return GetAppStream_Diamond(ScaleRect(rcCenter, 2.0f / 3.0f), crText); | |
1194 case PCS_SQUARE: | |
1195 return GetAppStream_Square(ScaleRect(rcCenter, 2.0f / 3.0f), crText); | |
1196 case PCS_STAR: | |
1197 return GetAppStream_Star(ScaleRect(rcCenter, 2.0f / 3.0f), crText); | |
1198 } | |
1199 } | |
1200 | |
1201 CFX_ByteString CPWL_Utils::GetRadioButtonAppStream(const CFX_FloatRect& rcBBox, | |
1202 int32_t nStyle, | |
1203 const CPWL_Color& crText) { | |
1204 CFX_FloatRect rcCenter = GetCenterSquare(rcBBox); | |
1205 switch (nStyle) { | |
1206 default: | |
1207 case PCS_CHECK: | |
1208 return GetAppStream_Check(rcCenter, crText); | |
1209 case PCS_CIRCLE: | |
1210 return GetAppStream_Circle(ScaleRect(rcCenter, 1.0f / 2.0f), crText); | |
1211 case PCS_CROSS: | |
1212 return GetAppStream_Cross(rcCenter, crText); | |
1213 case PCS_DIAMOND: | |
1214 return GetAppStream_Diamond(ScaleRect(rcCenter, 2.0f / 3.0f), crText); | |
1215 case PCS_SQUARE: | |
1216 return GetAppStream_Square(ScaleRect(rcCenter, 2.0f / 3.0f), crText); | |
1217 case PCS_STAR: | |
1218 return GetAppStream_Star(ScaleRect(rcCenter, 2.0f / 3.0f), crText); | |
1219 } | |
1220 } | |
1221 | |
1222 CFX_ByteString CPWL_Utils::GetDropButtonAppStream(const CFX_FloatRect& rcBBox) { | |
1223 CFX_ByteTextBuf sAppStream; | |
1224 | |
1225 if (!rcBBox.IsEmpty()) { | |
1226 sAppStream << "q\n" << CPWL_Utils::GetColorAppStream( | |
1227 CPWL_Color(COLORTYPE_RGB, 220.0f / 255.0f, | |
1228 220.0f / 255.0f, 220.0f / 255.0f), | |
1229 TRUE); | |
1230 sAppStream << rcBBox.left << " " << rcBBox.bottom << " " | |
1231 << rcBBox.right - rcBBox.left << " " | |
1232 << rcBBox.top - rcBBox.bottom << " re f\n"; | |
1233 sAppStream << "Q\n"; | |
1234 | |
1235 sAppStream << "q\n" << CPWL_Utils::GetBorderAppStream( | |
1236 rcBBox, 2, CPWL_Color(COLORTYPE_GRAY, 0), | |
1237 CPWL_Color(COLORTYPE_GRAY, 1), | |
1238 CPWL_Color(COLORTYPE_GRAY, 0.5), PBS_BEVELED, | |
1239 CPWL_Dash(3, 0, 0)) | |
1240 << "Q\n"; | |
1241 | |
1242 CFX_FloatPoint ptCenter = CFX_FloatPoint((rcBBox.left + rcBBox.right) / 2, | |
1243 (rcBBox.top + rcBBox.bottom) / 2); | |
1244 if (IsFloatBigger(rcBBox.right - rcBBox.left, 6) && | |
1245 IsFloatBigger(rcBBox.top - rcBBox.bottom, 6)) { | |
1246 sAppStream << "q\n" | |
1247 << " 0 g\n"; | |
1248 sAppStream << ptCenter.x - 3 << " " << ptCenter.y + 1.5f << " m\n"; | |
1249 sAppStream << ptCenter.x + 3 << " " << ptCenter.y + 1.5f << " l\n"; | |
1250 sAppStream << ptCenter.x << " " << ptCenter.y - 1.5f << " l\n"; | |
1251 sAppStream << ptCenter.x - 3 << " " << ptCenter.y + 1.5f << " l f\n"; | |
1252 sAppStream << "Q\n"; | |
1253 } | |
1254 } | |
1255 | |
1256 return sAppStream.GetByteString(); | |
1257 } | |
1258 | |
1259 void CPWL_Utils::ConvertCMYK2GRAY(FX_FLOAT dC, | |
1260 FX_FLOAT dM, | |
1261 FX_FLOAT dY, | |
1262 FX_FLOAT dK, | |
1263 FX_FLOAT& dGray) { | |
1264 if (dC < 0 || dC > 1 || dM < 0 || dM > 1 || dY < 0 || dY > 1 || dK < 0 || | |
1265 dK > 1) | |
1266 return; | |
1267 dGray = 1.0f - std::min(1.0f, 0.3f * dC + 0.59f * dM + 0.11f * dY + dK); | |
1268 } | |
1269 | |
1270 void CPWL_Utils::ConvertGRAY2CMYK(FX_FLOAT dGray, | |
1271 FX_FLOAT& dC, | |
1272 FX_FLOAT& dM, | |
1273 FX_FLOAT& dY, | |
1274 FX_FLOAT& dK) { | |
1275 if (dGray < 0 || dGray > 1) | |
1276 return; | |
1277 dC = 0.0f; | |
1278 dM = 0.0f; | |
1279 dY = 0.0f; | |
1280 dK = 1.0f - dGray; | |
1281 } | |
1282 | |
1283 void CPWL_Utils::ConvertGRAY2RGB(FX_FLOAT dGray, | |
1284 FX_FLOAT& dR, | |
1285 FX_FLOAT& dG, | |
1286 FX_FLOAT& dB) { | |
1287 if (dGray < 0 || dGray > 1) | |
1288 return; | |
1289 dR = dGray; | |
1290 dG = dGray; | |
1291 dB = dGray; | |
1292 } | |
1293 | |
1294 void CPWL_Utils::ConvertRGB2GRAY(FX_FLOAT dR, | |
1295 FX_FLOAT dG, | |
1296 FX_FLOAT dB, | |
1297 FX_FLOAT& dGray) { | |
1298 if (dR < 0 || dR > 1 || dG < 0 || dG > 0 || dB < 0 || dB > 1) | |
1299 return; | |
1300 dGray = 0.3f * dR + 0.59f * dG + 0.11f * dB; | |
1301 } | |
1302 | |
1303 void CPWL_Utils::ConvertCMYK2RGB(FX_FLOAT dC, | |
1304 FX_FLOAT dM, | |
1305 FX_FLOAT dY, | |
1306 FX_FLOAT dK, | |
1307 FX_FLOAT& dR, | |
1308 FX_FLOAT& dG, | |
1309 FX_FLOAT& dB) { | |
1310 if (dC < 0 || dC > 1 || dM < 0 || dM > 1 || dY < 0 || dY > 1 || dK < 0 || | |
1311 dK > 1) | |
1312 return; | |
1313 dR = 1.0f - std::min(1.0f, dC + dK); | |
1314 dG = 1.0f - std::min(1.0f, dM + dK); | |
1315 dB = 1.0f - std::min(1.0f, dY + dK); | |
1316 } | |
1317 | |
1318 void CPWL_Utils::ConvertRGB2CMYK(FX_FLOAT dR, | |
1319 FX_FLOAT dG, | |
1320 FX_FLOAT dB, | |
1321 FX_FLOAT& dC, | |
1322 FX_FLOAT& dM, | |
1323 FX_FLOAT& dY, | |
1324 FX_FLOAT& dK) { | |
1325 if (dR < 0 || dR > 1 || dG < 0 || dG > 1 || dB < 0 || dB > 1) | |
1326 return; | |
1327 | |
1328 dC = 1.0f - dR; | |
1329 dM = 1.0f - dG; | |
1330 dY = 1.0f - dB; | |
1331 dK = std::min(dC, std::min(dM, dY)); | |
1332 } | |
1333 | |
1334 void CPWL_Utils::PWLColorToARGB(const CPWL_Color& color, | |
1335 int32_t& alpha, | |
1336 FX_FLOAT& red, | |
1337 FX_FLOAT& green, | |
1338 FX_FLOAT& blue) { | |
1339 switch (color.nColorType) { | |
1340 case COLORTYPE_TRANSPARENT: { | |
1341 alpha = 0; | |
1342 } break; | |
1343 case COLORTYPE_GRAY: { | |
1344 ConvertGRAY2RGB(color.fColor1, red, green, blue); | |
1345 } break; | |
1346 case COLORTYPE_RGB: { | |
1347 red = color.fColor1; | |
1348 green = color.fColor2; | |
1349 blue = color.fColor3; | |
1350 } break; | |
1351 case COLORTYPE_CMYK: { | |
1352 ConvertCMYK2RGB(color.fColor1, color.fColor2, color.fColor3, | |
1353 color.fColor4, red, green, blue); | |
1354 } break; | |
1355 } | |
1356 } | |
1357 | |
1358 FX_COLORREF CPWL_Utils::PWLColorToFXColor(const CPWL_Color& color, | |
1359 int32_t nTransparancy) { | |
1360 int32_t nAlpha = nTransparancy; | |
1361 FX_FLOAT dRed = 0; | |
1362 FX_FLOAT dGreen = 0; | |
1363 FX_FLOAT dBlue = 0; | |
1364 | |
1365 PWLColorToARGB(color, nAlpha, dRed, dGreen, dBlue); | |
1366 | |
1367 return ArgbEncode(nAlpha, (int32_t)(dRed * 255), (int32_t)(dGreen * 255), | |
1368 (int32_t)(dBlue * 255)); | |
1369 } | |
1370 | |
1371 void CPWL_Utils::DrawFillRect(CFX_RenderDevice* pDevice, | |
1372 CFX_Matrix* pUser2Device, | |
1373 const CFX_FloatRect& rect, | |
1374 const FX_COLORREF& color) { | |
1375 CFX_PathData path; | |
1376 CFX_FloatRect rcTemp(rect); | |
1377 path.AppendRect(rcTemp.left, rcTemp.bottom, rcTemp.right, rcTemp.top); | |
1378 pDevice->DrawPath(&path, pUser2Device, NULL, color, 0, FXFILL_WINDING); | |
1379 } | |
1380 | |
1381 void CPWL_Utils::DrawFillArea(CFX_RenderDevice* pDevice, | |
1382 CFX_Matrix* pUser2Device, | |
1383 const CFX_FloatPoint* pPts, | |
1384 int32_t nCount, | |
1385 const FX_COLORREF& color) { | |
1386 CFX_PathData path; | |
1387 path.SetPointCount(nCount); | |
1388 | |
1389 path.SetPoint(0, pPts[0].x, pPts[0].y, FXPT_MOVETO); | |
1390 for (int32_t i = 1; i < nCount; i++) | |
1391 path.SetPoint(i, pPts[i].x, pPts[i].y, FXPT_LINETO); | |
1392 | |
1393 pDevice->DrawPath(&path, pUser2Device, NULL, color, 0, FXFILL_ALTERNATE); | |
1394 } | |
1395 | |
1396 void CPWL_Utils::DrawStrokeRect(CFX_RenderDevice* pDevice, | |
1397 CFX_Matrix* pUser2Device, | |
1398 const CFX_FloatRect& rect, | |
1399 const FX_COLORREF& color, | |
1400 FX_FLOAT fWidth) { | |
1401 CFX_PathData path; | |
1402 CFX_FloatRect rcTemp(rect); | |
1403 path.AppendRect(rcTemp.left, rcTemp.bottom, rcTemp.right, rcTemp.top); | |
1404 | |
1405 CFX_GraphStateData gsd; | |
1406 gsd.m_LineWidth = fWidth; | |
1407 | |
1408 pDevice->DrawPath(&path, pUser2Device, &gsd, 0, color, FXFILL_ALTERNATE); | |
1409 } | |
1410 | |
1411 void CPWL_Utils::DrawStrokeLine(CFX_RenderDevice* pDevice, | |
1412 CFX_Matrix* pUser2Device, | |
1413 const CFX_FloatPoint& ptMoveTo, | |
1414 const CFX_FloatPoint& ptLineTo, | |
1415 const FX_COLORREF& color, | |
1416 FX_FLOAT fWidth) { | |
1417 CFX_PathData path; | |
1418 path.SetPointCount(2); | |
1419 path.SetPoint(0, ptMoveTo.x, ptMoveTo.y, FXPT_MOVETO); | |
1420 path.SetPoint(1, ptLineTo.x, ptLineTo.y, FXPT_LINETO); | |
1421 | |
1422 CFX_GraphStateData gsd; | |
1423 gsd.m_LineWidth = fWidth; | |
1424 | |
1425 pDevice->DrawPath(&path, pUser2Device, &gsd, 0, color, FXFILL_ALTERNATE); | |
1426 } | |
1427 | |
1428 void CPWL_Utils::DrawFillRect(CFX_RenderDevice* pDevice, | |
1429 CFX_Matrix* pUser2Device, | |
1430 const CFX_FloatRect& rect, | |
1431 const CPWL_Color& color, | |
1432 int32_t nTransparancy) { | |
1433 CPWL_Utils::DrawFillRect(pDevice, pUser2Device, rect, | |
1434 PWLColorToFXColor(color, nTransparancy)); | |
1435 } | |
1436 | |
1437 void CPWL_Utils::DrawShadow(CFX_RenderDevice* pDevice, | |
1438 CFX_Matrix* pUser2Device, | |
1439 FX_BOOL bVertical, | |
1440 FX_BOOL bHorizontal, | |
1441 CFX_FloatRect rect, | |
1442 int32_t nTransparancy, | |
1443 int32_t nStartGray, | |
1444 int32_t nEndGray) { | |
1445 FX_FLOAT fStepGray = 1.0f; | |
1446 | |
1447 if (bVertical) { | |
1448 fStepGray = (nEndGray - nStartGray) / rect.Height(); | |
1449 | |
1450 for (FX_FLOAT fy = rect.bottom + 0.5f; fy <= rect.top - 0.5f; fy += 1.0f) { | |
1451 int32_t nGray = nStartGray + (int32_t)(fStepGray * (fy - rect.bottom)); | |
1452 CPWL_Utils::DrawStrokeLine( | |
1453 pDevice, pUser2Device, CFX_FloatPoint(rect.left, fy), | |
1454 CFX_FloatPoint(rect.right, fy), | |
1455 ArgbEncode(nTransparancy, nGray, nGray, nGray), 1.5f); | |
1456 } | |
1457 } | |
1458 | |
1459 if (bHorizontal) { | |
1460 fStepGray = (nEndGray - nStartGray) / rect.Width(); | |
1461 | |
1462 for (FX_FLOAT fx = rect.left + 0.5f; fx <= rect.right - 0.5f; fx += 1.0f) { | |
1463 int32_t nGray = nStartGray + (int32_t)(fStepGray * (fx - rect.left)); | |
1464 CPWL_Utils::DrawStrokeLine( | |
1465 pDevice, pUser2Device, CFX_FloatPoint(fx, rect.bottom), | |
1466 CFX_FloatPoint(fx, rect.top), | |
1467 ArgbEncode(nTransparancy, nGray, nGray, nGray), 1.5f); | |
1468 } | |
1469 } | |
1470 } | |
1471 | |
1472 void CPWL_Utils::DrawBorder(CFX_RenderDevice* pDevice, | |
1473 CFX_Matrix* pUser2Device, | |
1474 const CFX_FloatRect& rect, | |
1475 FX_FLOAT fWidth, | |
1476 const CPWL_Color& color, | |
1477 const CPWL_Color& crLeftTop, | |
1478 const CPWL_Color& crRightBottom, | |
1479 int32_t nStyle, | |
1480 int32_t nTransparancy) { | |
1481 FX_FLOAT fLeft = rect.left; | |
1482 FX_FLOAT fRight = rect.right; | |
1483 FX_FLOAT fTop = rect.top; | |
1484 FX_FLOAT fBottom = rect.bottom; | |
1485 | |
1486 if (fWidth > 0.0f) { | |
1487 FX_FLOAT fHalfWidth = fWidth / 2.0f; | |
1488 | |
1489 switch (nStyle) { | |
1490 default: | |
1491 case PBS_SOLID: { | |
1492 CFX_PathData path; | |
1493 path.AppendRect(fLeft, fBottom, fRight, fTop); | |
1494 path.AppendRect(fLeft + fWidth, fBottom + fWidth, fRight - fWidth, | |
1495 fTop - fWidth); | |
1496 pDevice->DrawPath(&path, pUser2Device, NULL, | |
1497 PWLColorToFXColor(color, nTransparancy), 0, | |
1498 FXFILL_ALTERNATE); | |
1499 } break; | |
1500 case PBS_DASH: { | |
1501 CFX_PathData path; | |
1502 | |
1503 path.SetPointCount(5); | |
1504 path.SetPoint(0, fLeft + fWidth / 2.0f, fBottom + fWidth / 2.0f, | |
1505 FXPT_MOVETO); | |
1506 path.SetPoint(1, fLeft + fWidth / 2.0f, fTop - fWidth / 2.0f, | |
1507 FXPT_LINETO); | |
1508 path.SetPoint(2, fRight - fWidth / 2.0f, fTop - fWidth / 2.0f, | |
1509 FXPT_LINETO); | |
1510 path.SetPoint(3, fRight - fWidth / 2.0f, fBottom + fWidth / 2.0f, | |
1511 FXPT_LINETO); | |
1512 path.SetPoint(4, fLeft + fWidth / 2.0f, fBottom + fWidth / 2.0f, | |
1513 FXPT_LINETO); | |
1514 | |
1515 CFX_GraphStateData gsd; | |
1516 gsd.SetDashCount(2); | |
1517 gsd.m_DashArray[0] = 3.0f; | |
1518 gsd.m_DashArray[1] = 3.0f; | |
1519 gsd.m_DashPhase = 0; | |
1520 | |
1521 gsd.m_LineWidth = fWidth; | |
1522 pDevice->DrawPath(&path, pUser2Device, &gsd, 0, | |
1523 PWLColorToFXColor(color, nTransparancy), | |
1524 FXFILL_WINDING); | |
1525 } break; | |
1526 case PBS_BEVELED: | |
1527 case PBS_INSET: { | |
1528 CFX_GraphStateData gsd; | |
1529 gsd.m_LineWidth = fHalfWidth; | |
1530 | |
1531 CFX_PathData pathLT; | |
1532 | |
1533 pathLT.SetPointCount(7); | |
1534 pathLT.SetPoint(0, fLeft + fHalfWidth, fBottom + fHalfWidth, | |
1535 FXPT_MOVETO); | |
1536 pathLT.SetPoint(1, fLeft + fHalfWidth, fTop - fHalfWidth, FXPT_LINETO); | |
1537 pathLT.SetPoint(2, fRight - fHalfWidth, fTop - fHalfWidth, FXPT_LINETO); | |
1538 pathLT.SetPoint(3, fRight - fHalfWidth * 2, fTop - fHalfWidth * 2, | |
1539 FXPT_LINETO); | |
1540 pathLT.SetPoint(4, fLeft + fHalfWidth * 2, fTop - fHalfWidth * 2, | |
1541 FXPT_LINETO); | |
1542 pathLT.SetPoint(5, fLeft + fHalfWidth * 2, fBottom + fHalfWidth * 2, | |
1543 FXPT_LINETO); | |
1544 pathLT.SetPoint(6, fLeft + fHalfWidth, fBottom + fHalfWidth, | |
1545 FXPT_LINETO); | |
1546 | |
1547 pDevice->DrawPath(&pathLT, pUser2Device, &gsd, | |
1548 PWLColorToFXColor(crLeftTop, nTransparancy), 0, | |
1549 FXFILL_ALTERNATE); | |
1550 | |
1551 CFX_PathData pathRB; | |
1552 | |
1553 pathRB.SetPointCount(7); | |
1554 pathRB.SetPoint(0, fRight - fHalfWidth, fTop - fHalfWidth, FXPT_MOVETO); | |
1555 pathRB.SetPoint(1, fRight - fHalfWidth, fBottom + fHalfWidth, | |
1556 FXPT_LINETO); | |
1557 pathRB.SetPoint(2, fLeft + fHalfWidth, fBottom + fHalfWidth, | |
1558 FXPT_LINETO); | |
1559 pathRB.SetPoint(3, fLeft + fHalfWidth * 2, fBottom + fHalfWidth * 2, | |
1560 FXPT_LINETO); | |
1561 pathRB.SetPoint(4, fRight - fHalfWidth * 2, fBottom + fHalfWidth * 2, | |
1562 FXPT_LINETO); | |
1563 pathRB.SetPoint(5, fRight - fHalfWidth * 2, fTop - fHalfWidth * 2, | |
1564 FXPT_LINETO); | |
1565 pathRB.SetPoint(6, fRight - fHalfWidth, fTop - fHalfWidth, FXPT_LINETO); | |
1566 | |
1567 pDevice->DrawPath(&pathRB, pUser2Device, &gsd, | |
1568 PWLColorToFXColor(crRightBottom, nTransparancy), 0, | |
1569 FXFILL_ALTERNATE); | |
1570 | |
1571 CFX_PathData path; | |
1572 | |
1573 path.AppendRect(fLeft, fBottom, fRight, fTop); | |
1574 path.AppendRect(fLeft + fHalfWidth, fBottom + fHalfWidth, | |
1575 fRight - fHalfWidth, fTop - fHalfWidth); | |
1576 | |
1577 pDevice->DrawPath(&path, pUser2Device, &gsd, | |
1578 PWLColorToFXColor(color, nTransparancy), 0, | |
1579 FXFILL_ALTERNATE); | |
1580 } break; | |
1581 case PBS_UNDERLINED: { | |
1582 CFX_PathData path; | |
1583 | |
1584 path.SetPointCount(2); | |
1585 path.SetPoint(0, fLeft, fBottom + fWidth / 2, FXPT_MOVETO); | |
1586 path.SetPoint(1, fRight, fBottom + fWidth / 2, FXPT_LINETO); | |
1587 | |
1588 CFX_GraphStateData gsd; | |
1589 gsd.m_LineWidth = fWidth; | |
1590 | |
1591 pDevice->DrawPath(&path, pUser2Device, &gsd, 0, | |
1592 PWLColorToFXColor(color, nTransparancy), | |
1593 FXFILL_ALTERNATE); | |
1594 } break; | |
1595 case PBS_SHADOW: { | |
1596 CFX_PathData path; | |
1597 path.AppendRect(fLeft, fBottom, fRight, fTop); | |
1598 path.AppendRect(fLeft + fWidth, fBottom + fWidth, fRight - fWidth, | |
1599 fTop - fWidth); | |
1600 pDevice->DrawPath(&path, pUser2Device, NULL, | |
1601 PWLColorToFXColor(color, nTransparancy / 2), 0, | |
1602 FXFILL_ALTERNATE); | |
1603 } break; | |
1604 } | |
1605 } | |
1606 } | |
1607 | |
1608 static void AddSquigglyPath(CFX_PathData& PathData, | |
1609 FX_FLOAT fStartX, | |
1610 FX_FLOAT fEndX, | |
1611 FX_FLOAT fY, | |
1612 FX_FLOAT fStep) { | |
1613 PathData.AddPointCount(1); | |
1614 PathData.SetPoint(PathData.GetPointCount() - 1, fStartX, fY, FXPT_MOVETO); | |
1615 | |
1616 FX_FLOAT fx; | |
1617 int32_t i; | |
1618 | |
1619 for (i = 1, fx = fStartX + fStep; fx < fEndX; fx += fStep, i++) { | |
1620 PathData.AddPointCount(1); | |
1621 PathData.SetPoint(PathData.GetPointCount() - 1, fx, fY + (i & 1) * fStep, | |
1622 FXPT_LINETO); | |
1623 } | |
1624 } | |
1625 | |
1626 static void AddSpellCheckObj(CFX_PathData& PathData, | |
1627 IFX_Edit* pEdit, | |
1628 const CPVT_WordRange& wrWord) { | |
1629 FX_FLOAT fStartX = 0.0f; | |
1630 FX_FLOAT fEndX = 0.0f; | |
1631 FX_FLOAT fY = 0.0f; | |
1632 FX_FLOAT fStep = 0.0f; | |
1633 | |
1634 FX_BOOL bBreak = FALSE; | |
1635 | |
1636 if (IFX_Edit_Iterator* pIterator = pEdit->GetIterator()) { | |
1637 pIterator->SetAt(wrWord.BeginPos); | |
1638 | |
1639 do { | |
1640 CPVT_WordPlace place = pIterator->GetAt(); | |
1641 | |
1642 CPVT_Line line; | |
1643 if (pIterator->GetLine(line)) { | |
1644 fY = line.ptLine.y; | |
1645 fStep = (line.fLineAscent - line.fLineDescent) / 16.0f; | |
1646 } | |
1647 | |
1648 if (place.LineCmp(wrWord.BeginPos) == 0) { | |
1649 pIterator->SetAt(wrWord.BeginPos); | |
1650 CPVT_Word word; | |
1651 if (pIterator->GetWord(word)) { | |
1652 fStartX = word.ptWord.x; | |
1653 } | |
1654 } else { | |
1655 fStartX = line.ptLine.x; | |
1656 } | |
1657 | |
1658 if (place.LineCmp(wrWord.EndPos) == 0) { | |
1659 pIterator->SetAt(wrWord.EndPos); | |
1660 CPVT_Word word; | |
1661 if (pIterator->GetWord(word)) { | |
1662 fEndX = word.ptWord.x + word.fWidth; | |
1663 } | |
1664 | |
1665 bBreak = TRUE; | |
1666 } else { | |
1667 fEndX = line.ptLine.x + line.fLineWidth; | |
1668 } | |
1669 | |
1670 AddSquigglyPath(PathData, fStartX, fEndX, fY, fStep); | |
1671 | |
1672 if (bBreak) | |
1673 break; | |
1674 } while (pIterator->NextLine()); | |
1675 } | |
1676 } | |
1677 | |
1678 void CPWL_Utils::DrawEditSpellCheck(CFX_RenderDevice* pDevice, | |
1679 CFX_Matrix* pUser2Device, | |
1680 IFX_Edit* pEdit, | |
1681 const CFX_FloatRect& rcClip, | |
1682 const CFX_FloatPoint& ptOffset, | |
1683 const CPVT_WordRange* pRange, | |
1684 IPWL_SpellCheck* pSpellCheck) { | |
1685 const FX_COLORREF crSpell = ArgbEncode(255, 255, 0, 0); | |
1686 | |
1687 // for spellcheck | |
1688 FX_BOOL bLatinWord = FALSE; | |
1689 CPVT_WordPlace wpWordStart; | |
1690 CFX_ByteString sLatinWord; | |
1691 | |
1692 CFX_PathData pathSpell; | |
1693 | |
1694 pDevice->SaveState(); | |
1695 | |
1696 if (!rcClip.IsEmpty()) { | |
1697 CFX_FloatRect rcTemp = rcClip; | |
1698 pUser2Device->TransformRect(rcTemp); | |
1699 pDevice->SetClip_Rect(rcTemp.ToFxRect()); | |
1700 } | |
1701 | |
1702 if (IFX_Edit_Iterator* pIterator = pEdit->GetIterator()) { | |
1703 if (pEdit->GetFontMap()) { | |
1704 if (pRange) | |
1705 pIterator->SetAt(pRange->BeginPos); | |
1706 else | |
1707 pIterator->SetAt(0); | |
1708 | |
1709 CPVT_WordPlace oldplace; | |
1710 | |
1711 while (pIterator->NextWord()) { | |
1712 CPVT_WordPlace place = pIterator->GetAt(); | |
1713 if (pRange && place.WordCmp(pRange->EndPos) > 0) | |
1714 break; | |
1715 | |
1716 CPVT_Word word; | |
1717 if (pIterator->GetWord(word)) { | |
1718 if (FX_EDIT_ISLATINWORD(word.Word)) { | |
1719 if (!bLatinWord) { | |
1720 wpWordStart = place; | |
1721 bLatinWord = TRUE; | |
1722 } | |
1723 | |
1724 sLatinWord += (char)word.Word; | |
1725 } else { | |
1726 if (bLatinWord) { | |
1727 if (!sLatinWord.IsEmpty()) { | |
1728 if (pSpellCheck && !pSpellCheck->CheckWord(sLatinWord)) { | |
1729 AddSpellCheckObj(pathSpell, pEdit, | |
1730 CPVT_WordRange(wpWordStart, oldplace)); | |
1731 pIterator->SetAt(place); | |
1732 } | |
1733 } | |
1734 bLatinWord = FALSE; | |
1735 } | |
1736 | |
1737 sLatinWord.Empty(); | |
1738 } | |
1739 | |
1740 oldplace = place; | |
1741 } else { | |
1742 if (bLatinWord) { | |
1743 if (!sLatinWord.IsEmpty()) { | |
1744 if (pSpellCheck && !pSpellCheck->CheckWord(sLatinWord)) { | |
1745 AddSpellCheckObj(pathSpell, pEdit, | |
1746 CPVT_WordRange(wpWordStart, oldplace)); | |
1747 pIterator->SetAt(place); | |
1748 } | |
1749 } | |
1750 bLatinWord = FALSE; | |
1751 } | |
1752 | |
1753 sLatinWord.Empty(); | |
1754 } | |
1755 } | |
1756 | |
1757 if (!sLatinWord.IsEmpty()) { | |
1758 if (pSpellCheck && !pSpellCheck->CheckWord(sLatinWord)) { | |
1759 AddSpellCheckObj(pathSpell, pEdit, | |
1760 CPVT_WordRange(wpWordStart, oldplace)); | |
1761 } | |
1762 } | |
1763 } | |
1764 } | |
1765 | |
1766 CFX_GraphStateData gsd; | |
1767 gsd.m_LineWidth = 0; | |
1768 if (pathSpell.GetPointCount() > 0) | |
1769 pDevice->DrawPath(&pathSpell, pUser2Device, &gsd, 0, crSpell, | |
1770 FXFILL_ALTERNATE); | |
1771 | |
1772 pDevice->RestoreState(); | |
1773 } | |
1774 | |
1775 FX_BOOL CPWL_Utils::IsBlackOrWhite(const CPWL_Color& color) { | |
1776 switch (color.nColorType) { | |
1777 case COLORTYPE_TRANSPARENT: | |
1778 return FALSE; | |
1779 case COLORTYPE_GRAY: | |
1780 return color.fColor1 < 0.5f; | |
1781 case COLORTYPE_RGB: | |
1782 return color.fColor1 + color.fColor2 + color.fColor3 < 1.5f; | |
1783 case COLORTYPE_CMYK: | |
1784 return color.fColor1 + color.fColor2 + color.fColor3 + color.fColor4 > | |
1785 2.0f; | |
1786 } | |
1787 | |
1788 return TRUE; | |
1789 } | |
1790 | |
1791 CPWL_Color CPWL_Utils::GetReverseColor(const CPWL_Color& color) { | |
1792 CPWL_Color crRet = color; | |
1793 | |
1794 switch (color.nColorType) { | |
1795 case COLORTYPE_GRAY: | |
1796 crRet.fColor1 = 1.0f - crRet.fColor1; | |
1797 break; | |
1798 case COLORTYPE_RGB: | |
1799 crRet.fColor1 = 1.0f - crRet.fColor1; | |
1800 crRet.fColor2 = 1.0f - crRet.fColor2; | |
1801 crRet.fColor3 = 1.0f - crRet.fColor3; | |
1802 break; | |
1803 case COLORTYPE_CMYK: | |
1804 crRet.fColor1 = 1.0f - crRet.fColor1; | |
1805 crRet.fColor2 = 1.0f - crRet.fColor2; | |
1806 crRet.fColor3 = 1.0f - crRet.fColor3; | |
1807 crRet.fColor4 = 1.0f - crRet.fColor4; | |
1808 break; | |
1809 } | |
1810 | |
1811 return crRet; | |
1812 } | |
1813 | |
1814 CFX_ByteString CPWL_Utils::GetIconAppStream(int32_t nType, | |
1815 const CFX_FloatRect& rect, | |
1816 const CPWL_Color& crFill, | |
1817 const CPWL_Color& crStroke) { | |
1818 CFX_ByteString sAppStream = CPWL_Utils::GetColorAppStream(crStroke, FALSE); | |
1819 sAppStream += CPWL_Utils::GetColorAppStream(crFill, TRUE); | |
1820 | |
1821 CFX_ByteString sPath; | |
1822 CFX_PathData path; | |
1823 | |
1824 switch (nType) { | |
1825 case PWL_ICONTYPE_CHECKMARK: | |
1826 GetGraphics_Checkmark(sPath, path, rect, PWLPT_STREAM); | |
1827 break; | |
1828 case PWL_ICONTYPE_CIRCLE: | |
1829 GetGraphics_Circle(sPath, path, rect, PWLPT_STREAM); | |
1830 break; | |
1831 case PWL_ICONTYPE_COMMENT: | |
1832 GetGraphics_Comment(sPath, path, rect, PWLPT_STREAM); | |
1833 break; | |
1834 case PWL_ICONTYPE_CROSS: | |
1835 GetGraphics_Cross(sPath, path, rect, PWLPT_STREAM); | |
1836 break; | |
1837 case PWL_ICONTYPE_HELP: | |
1838 GetGraphics_Help(sPath, path, rect, PWLPT_STREAM); | |
1839 break; | |
1840 case PWL_ICONTYPE_INSERTTEXT: | |
1841 GetGraphics_InsertText(sPath, path, rect, PWLPT_STREAM); | |
1842 break; | |
1843 case PWL_ICONTYPE_KEY: | |
1844 GetGraphics_Key(sPath, path, rect, PWLPT_STREAM); | |
1845 break; | |
1846 case PWL_ICONTYPE_NEWPARAGRAPH: | |
1847 GetGraphics_NewParagraph(sPath, path, rect, PWLPT_STREAM); | |
1848 break; | |
1849 case PWL_ICONTYPE_TEXTNOTE: | |
1850 GetGraphics_TextNote(sPath, path, rect, PWLPT_STREAM); | |
1851 break; | |
1852 case PWL_ICONTYPE_PARAGRAPH: | |
1853 GetGraphics_Paragraph(sPath, path, rect, PWLPT_STREAM); | |
1854 break; | |
1855 case PWL_ICONTYPE_RIGHTARROW: | |
1856 GetGraphics_RightArrow(sPath, path, rect, PWLPT_STREAM); | |
1857 break; | |
1858 case PWL_ICONTYPE_RIGHTPOINTER: | |
1859 GetGraphics_RightPointer(sPath, path, rect, PWLPT_STREAM); | |
1860 break; | |
1861 case PWL_ICONTYPE_STAR: | |
1862 GetGraphics_Star(sPath, path, rect, PWLPT_STREAM); | |
1863 break; | |
1864 case PWL_ICONTYPE_UPARROW: | |
1865 GetGraphics_UpArrow(sPath, path, rect, PWLPT_STREAM); | |
1866 break; | |
1867 case PWL_ICONTYPE_UPLEFTARROW: | |
1868 GetGraphics_UpLeftArrow(sPath, path, rect, PWLPT_STREAM); | |
1869 break; | |
1870 case PWL_ICONTYPE_GRAPH: | |
1871 GetGraphics_Graph(sPath, path, rect, PWLPT_STREAM); | |
1872 break; | |
1873 case PWL_ICONTYPE_PAPERCLIP: | |
1874 GetGraphics_Paperclip(sPath, path, rect, PWLPT_STREAM); | |
1875 break; | |
1876 case PWL_ICONTYPE_ATTACHMENT: | |
1877 GetGraphics_Attachment(sPath, path, rect, PWLPT_STREAM); | |
1878 break; | |
1879 case PWL_ICONTYPE_TAG: | |
1880 GetGraphics_Tag(sPath, path, rect, PWLPT_STREAM); | |
1881 break; | |
1882 case PWL_ICONTYPE_FOXIT: | |
1883 GetGraphics_Foxit(sPath, path, rect, PWLPT_STREAM); | |
1884 break; | |
1885 } | |
1886 | |
1887 sAppStream += sPath; | |
1888 if (crStroke.nColorType != COLORTYPE_TRANSPARENT) | |
1889 sAppStream += "B*\n"; | |
1890 else | |
1891 sAppStream += "f*\n"; | |
1892 | |
1893 return sAppStream; | |
1894 } | |
1895 | |
1896 void CPWL_Utils::DrawIconAppStream(CFX_RenderDevice* pDevice, | |
1897 CFX_Matrix* pUser2Device, | |
1898 int32_t nType, | |
1899 const CFX_FloatRect& rect, | |
1900 const CPWL_Color& crFill, | |
1901 const CPWL_Color& crStroke, | |
1902 const int32_t nTransparancy) { | |
1903 CFX_GraphStateData gsd; | |
1904 gsd.m_LineWidth = 1.0f; | |
1905 | |
1906 CFX_ByteString sPath; | |
1907 CFX_PathData path; | |
1908 | |
1909 switch (nType) { | |
1910 case PWL_ICONTYPE_CHECKMARK: | |
1911 GetGraphics_Checkmark(sPath, path, rect, PWLPT_PATHDATA); | |
1912 break; | |
1913 case PWL_ICONTYPE_CIRCLE: | |
1914 GetGraphics_Circle(sPath, path, rect, PWLPT_PATHDATA); | |
1915 break; | |
1916 case PWL_ICONTYPE_COMMENT: | |
1917 GetGraphics_Comment(sPath, path, rect, PWLPT_PATHDATA); | |
1918 break; | |
1919 case PWL_ICONTYPE_CROSS: | |
1920 GetGraphics_Cross(sPath, path, rect, PWLPT_PATHDATA); | |
1921 break; | |
1922 case PWL_ICONTYPE_HELP: | |
1923 GetGraphics_Help(sPath, path, rect, PWLPT_PATHDATA); | |
1924 break; | |
1925 case PWL_ICONTYPE_INSERTTEXT: | |
1926 GetGraphics_InsertText(sPath, path, rect, PWLPT_PATHDATA); | |
1927 break; | |
1928 case PWL_ICONTYPE_KEY: | |
1929 GetGraphics_Key(sPath, path, rect, PWLPT_PATHDATA); | |
1930 break; | |
1931 case PWL_ICONTYPE_NEWPARAGRAPH: | |
1932 GetGraphics_NewParagraph(sPath, path, rect, PWLPT_PATHDATA); | |
1933 break; | |
1934 case PWL_ICONTYPE_TEXTNOTE: | |
1935 GetGraphics_TextNote(sPath, path, rect, PWLPT_PATHDATA); | |
1936 break; | |
1937 case PWL_ICONTYPE_PARAGRAPH: | |
1938 GetGraphics_Paragraph(sPath, path, rect, PWLPT_PATHDATA); | |
1939 break; | |
1940 case PWL_ICONTYPE_RIGHTARROW: | |
1941 GetGraphics_RightArrow(sPath, path, rect, PWLPT_PATHDATA); | |
1942 break; | |
1943 case PWL_ICONTYPE_RIGHTPOINTER: | |
1944 GetGraphics_RightPointer(sPath, path, rect, PWLPT_PATHDATA); | |
1945 break; | |
1946 case PWL_ICONTYPE_STAR: | |
1947 GetGraphics_Star(sPath, path, rect, PWLPT_PATHDATA); | |
1948 break; | |
1949 case PWL_ICONTYPE_UPARROW: | |
1950 GetGraphics_UpArrow(sPath, path, rect, PWLPT_PATHDATA); | |
1951 break; | |
1952 case PWL_ICONTYPE_UPLEFTARROW: | |
1953 GetGraphics_UpLeftArrow(sPath, path, rect, PWLPT_PATHDATA); | |
1954 break; | |
1955 case PWL_ICONTYPE_GRAPH: | |
1956 GetGraphics_Graph(sPath, path, rect, PWLPT_PATHDATA); | |
1957 break; | |
1958 case PWL_ICONTYPE_PAPERCLIP: | |
1959 GetGraphics_Paperclip(sPath, path, rect, PWLPT_PATHDATA); | |
1960 break; | |
1961 case PWL_ICONTYPE_ATTACHMENT: | |
1962 GetGraphics_Attachment(sPath, path, rect, PWLPT_PATHDATA); | |
1963 break; | |
1964 case PWL_ICONTYPE_TAG: | |
1965 GetGraphics_Tag(sPath, path, rect, PWLPT_PATHDATA); | |
1966 break; | |
1967 case PWL_ICONTYPE_FOXIT: | |
1968 GetGraphics_Foxit(sPath, path, rect, PWLPT_PATHDATA); | |
1969 break; | |
1970 default: | |
1971 return; | |
1972 } | |
1973 | |
1974 pDevice->DrawPath( | |
1975 &path, pUser2Device, &gsd, PWLColorToFXColor(crFill, nTransparancy), | |
1976 PWLColorToFXColor(crStroke, nTransparancy), FXFILL_ALTERNATE); | |
1977 } | |
1978 | |
1979 void CPWL_Utils::GetGraphics_Checkmark(CFX_ByteString& sPathData, | |
1980 CFX_PathData& path, | |
1981 const CFX_FloatRect& crBBox, | |
1982 const PWL_PATH_TYPE type) { | |
1983 FX_FLOAT fWidth = crBBox.right - crBBox.left; | |
1984 FX_FLOAT fHeight = crBBox.top - crBBox.bottom; | |
1985 | |
1986 CPWL_PathData PathArray[] = { | |
1987 CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 15.0f, | |
1988 crBBox.bottom + fHeight * 2 / 5.0f), | |
1989 PWLPT_MOVETO), | |
1990 CPWL_PathData( | |
1991 CPWL_Point(crBBox.left + fWidth / 15.0f + | |
1992 FX_BEZIER * (fWidth / 7.0f - fWidth / 15.0f), | |
1993 crBBox.bottom + fHeight * 2 / 5.0f + | |
1994 FX_BEZIER * (fHeight * 2 / 7.0f - fHeight * 2 / 5.0f)), | |
1995 PWLPT_BEZIERTO), | |
1996 CPWL_PathData( | |
1997 CPWL_Point(crBBox.left + fWidth / 4.5f + | |
1998 FX_BEZIER * (fWidth / 5.0f - fWidth / 4.5f), | |
1999 crBBox.bottom + fHeight / 16.0f + | |
2000 FX_BEZIER * (fHeight / 5.0f - fHeight / 16.0f)), | |
2001 PWLPT_BEZIERTO), | |
2002 CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 4.5f, | |
2003 crBBox.bottom + fHeight / 16.0f), | |
2004 PWLPT_BEZIERTO), | |
2005 CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 4.5f + | |
2006 FX_BEZIER * (fWidth / 4.4f - fWidth / 4.5f), | |
2007 crBBox.bottom + fHeight / 16.0f - | |
2008 FX_BEZIER * fHeight / 16.0f), | |
2009 PWLPT_BEZIERTO), | |
2010 CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 3.0f + | |
2011 FX_BEZIER * (fWidth / 4.0f - fWidth / 3.0f), | |
2012 crBBox.bottom), | |
2013 PWLPT_BEZIERTO), | |
2014 CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 3.0f, crBBox.bottom), | |
2015 PWLPT_BEZIERTO), | |
2016 CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 3.0f + | |
2017 FX_BEZIER * fWidth * (1 / 7.0f + 2 / 15.0f), | |
2018 crBBox.bottom + FX_BEZIER * fHeight * 4 / 5.0f), | |
2019 PWLPT_BEZIERTO), | |
2020 CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 14 / 15.0f + | |
2021 FX_BEZIER * fWidth * (1 / 7.0f - 7 / 15.0f), | |
2022 crBBox.bottom + fHeight * 15 / 16.0f + | |
2023 FX_BEZIER * (fHeight * 4 / 5.0f - | |
2024 fHeight * 15 / 16.0f)), | |
2025 PWLPT_BEZIERTO), | |
2026 CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 14 / 15.0f, | |
2027 crBBox.bottom + fHeight * 15 / 16.0f), | |
2028 PWLPT_BEZIERTO), | |
2029 CPWL_PathData( | |
2030 CPWL_Point( | |
2031 crBBox.left + fWidth * 14 / 15.0f + | |
2032 FX_BEZIER * (fWidth * 7 / 15.0f - fWidth * 14 / 15.0f), | |
2033 crBBox.bottom + fHeight * 15 / 16.0f + | |
2034 FX_BEZIER * (fHeight * 8 / 7.0f - fHeight * 15 / 16.0f)), | |
2035 PWLPT_BEZIERTO), | |
2036 CPWL_PathData( | |
2037 CPWL_Point(crBBox.left + fWidth / 3.6f + | |
2038 FX_BEZIER * (fWidth / 3.4f - fWidth / 3.6f), | |
2039 crBBox.bottom + fHeight / 3.5f + | |
2040 FX_BEZIER * (fHeight / 3.5f - fHeight / 3.5f)), | |
2041 PWLPT_BEZIERTO), | |
2042 CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 3.6f, | |
2043 crBBox.bottom + fHeight / 3.5f), | |
2044 PWLPT_BEZIERTO), | |
2045 CPWL_PathData( | |
2046 CPWL_Point(crBBox.left + fWidth / 3.6f, | |
2047 crBBox.bottom + fHeight / 3.5f + | |
2048 FX_BEZIER * (fHeight / 4.0f - fHeight / 3.5f)), | |
2049 PWLPT_BEZIERTO), | |
2050 CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 15.0f + | |
2051 FX_BEZIER * (fWidth / 3.5f - fWidth / 15.0f), | |
2052 crBBox.bottom + fHeight * 2 / 5.0f + | |
2053 FX_BEZIER * (fHeight * 3.5f / 5.0f - | |
2054 fHeight * 2 / 5.0f)), | |
2055 PWLPT_BEZIERTO), | |
2056 CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 15.0f, | |
2057 crBBox.bottom + fHeight * 2 / 5.0f), | |
2058 PWLPT_BEZIERTO)}; | |
2059 | |
2060 if (type == PWLPT_STREAM) | |
2061 sPathData = GetAppStreamFromArray(PathArray, 16); | |
2062 else | |
2063 GetPathDataFromArray(path, PathArray, 16); | |
2064 } | |
2065 | |
2066 void CPWL_Utils::GetGraphics_Circle(CFX_ByteString& sPathData, | |
2067 CFX_PathData& path, | |
2068 const CFX_FloatRect& crBBox, | |
2069 const PWL_PATH_TYPE type) { | |
2070 FX_FLOAT fWidth = crBBox.right - crBBox.left; | |
2071 FX_FLOAT fHeight = crBBox.top - crBBox.bottom; | |
2072 | |
2073 CPWL_PathData PathArray[] = { | |
2074 CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 15.0f, | |
2075 crBBox.bottom + fHeight / 2.0f), | |
2076 PWLPT_MOVETO), | |
2077 CPWL_PathData( | |
2078 CPWL_Point(crBBox.left + fWidth / 15.0f, | |
2079 crBBox.bottom + fHeight / 2.0f + | |
2080 FX_BEZIER * (fHeight * 14 / 15.0f - fHeight / 2.0f)), | |
2081 PWLPT_BEZIERTO), | |
2082 CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 2.0f - | |
2083 FX_BEZIER * (fWidth / 2.0f - fWidth / 15.0f), | |
2084 crBBox.top - fHeight / 15.0f), | |
2085 PWLPT_BEZIERTO), | |
2086 CPWL_PathData( | |
2087 CPWL_Point(crBBox.left + fWidth / 2.0f, crBBox.top - fHeight / 15.0f), | |
2088 PWLPT_BEZIERTO), | |
2089 CPWL_PathData( | |
2090 CPWL_Point(crBBox.left + fWidth / 2.0f + | |
2091 FX_BEZIER * (fWidth * 14 / 15.0f - fWidth / 2.0f), | |
2092 crBBox.top - fHeight / 15.0f), | |
2093 PWLPT_BEZIERTO), | |
2094 CPWL_PathData( | |
2095 CPWL_Point(crBBox.right - fWidth / 15.0f, | |
2096 crBBox.bottom + fHeight / 2.0f + | |
2097 FX_BEZIER * (fHeight * 14 / 15.0f - fHeight / 2.0f)), | |
2098 PWLPT_BEZIERTO), | |
2099 CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 15.0f, | |
2100 crBBox.bottom + fHeight / 2.0f), | |
2101 PWLPT_BEZIERTO), | |
2102 CPWL_PathData( | |
2103 CPWL_Point(crBBox.right - fWidth / 15.0f, | |
2104 crBBox.bottom + fHeight / 2.0f - | |
2105 FX_BEZIER * (fHeight / 2.0f - fHeight / 15.0f)), | |
2106 PWLPT_BEZIERTO), | |
2107 CPWL_PathData( | |
2108 CPWL_Point(crBBox.left + fWidth / 2.0f + | |
2109 FX_BEZIER * (fWidth * 14 / 15.0f - fWidth / 2.0f), | |
2110 crBBox.bottom + fHeight / 15.0f), | |
2111 PWLPT_BEZIERTO), | |
2112 CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 2.0f, | |
2113 crBBox.bottom + fHeight / 15.0f), | |
2114 PWLPT_BEZIERTO), | |
2115 CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 2.0f - | |
2116 FX_BEZIER * (fWidth / 2.0f - fWidth / 15.0f), | |
2117 crBBox.bottom + fHeight / 15.0f), | |
2118 PWLPT_BEZIERTO), | |
2119 CPWL_PathData( | |
2120 CPWL_Point(crBBox.left + fWidth / 15.0f, | |
2121 crBBox.bottom + fHeight / 2.0f - | |
2122 FX_BEZIER * (fHeight / 2.0f - fHeight / 15.0f)), | |
2123 PWLPT_BEZIERTO), | |
2124 CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 15.0f, | |
2125 crBBox.bottom + fHeight / 2.0f), | |
2126 PWLPT_BEZIERTO), | |
2127 CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 3 / 15.0f, | |
2128 crBBox.bottom + fHeight / 2.0f), | |
2129 PWLPT_MOVETO), | |
2130 CPWL_PathData( | |
2131 CPWL_Point(crBBox.left + fWidth * 3 / 15.0f, | |
2132 crBBox.bottom + fHeight / 2.0f + | |
2133 FX_BEZIER * (fHeight * 4 / 5.0f - fHeight / 2.0f)), | |
2134 PWLPT_BEZIERTO), | |
2135 CPWL_PathData( | |
2136 CPWL_Point(crBBox.left + fWidth / 2.0f - | |
2137 FX_BEZIER * (fWidth / 2.0f - fWidth * 3 / 15.0f), | |
2138 crBBox.top - fHeight * 3 / 15.0f), | |
2139 PWLPT_BEZIERTO), | |
2140 CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 2.0f, | |
2141 crBBox.top - fHeight * 3 / 15.0f), | |
2142 PWLPT_BEZIERTO), | |
2143 CPWL_PathData( | |
2144 CPWL_Point(crBBox.left + fWidth / 2.0f + | |
2145 FX_BEZIER * (fWidth * 4 / 5.0f - fWidth / 2.0f), | |
2146 crBBox.top - fHeight * 3 / 15.0f), | |
2147 PWLPT_BEZIERTO), | |
2148 CPWL_PathData( | |
2149 CPWL_Point(crBBox.right - fWidth * 3 / 15.0f, | |
2150 crBBox.bottom + fHeight / 2.0f + | |
2151 FX_BEZIER * (fHeight * 4 / 5.0f - fHeight / 2.0f)), | |
2152 PWLPT_BEZIERTO), | |
2153 CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 3 / 15.0f, | |
2154 crBBox.bottom + fHeight / 2.0f), | |
2155 PWLPT_BEZIERTO), | |
2156 CPWL_PathData( | |
2157 CPWL_Point(crBBox.right - fWidth * 3 / 15.0f, | |
2158 crBBox.bottom + fHeight / 2.0f - | |
2159 FX_BEZIER * (fHeight * 4 / 5.0f - fHeight / 2.0f)), | |
2160 PWLPT_BEZIERTO), | |
2161 CPWL_PathData( | |
2162 CPWL_Point(crBBox.left + fWidth / 2.0f + | |
2163 FX_BEZIER * (fWidth * 4 / 5.0f - fWidth / 2.0f), | |
2164 crBBox.bottom + fHeight * 3 / 15.0f), | |
2165 PWLPT_BEZIERTO), | |
2166 CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 2.0f, | |
2167 crBBox.bottom + fHeight * 3 / 15.0f), | |
2168 PWLPT_BEZIERTO), | |
2169 CPWL_PathData( | |
2170 CPWL_Point(crBBox.left + fWidth / 2.0f - | |
2171 FX_BEZIER * (fWidth * 4 / 5.0f - fWidth / 2.0f), | |
2172 crBBox.bottom + fHeight * 3 / 15.0f), | |
2173 PWLPT_BEZIERTO), | |
2174 CPWL_PathData( | |
2175 CPWL_Point(crBBox.left + fWidth * 3 / 15.0f, | |
2176 crBBox.bottom + fHeight / 2.0f - | |
2177 FX_BEZIER * (fHeight * 4 / 5.0f - fHeight / 2.0f)), | |
2178 PWLPT_BEZIERTO), | |
2179 CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 3 / 15.0f, | |
2180 crBBox.bottom + fHeight / 2.0f), | |
2181 PWLPT_BEZIERTO)}; | |
2182 | |
2183 if (type == PWLPT_STREAM) | |
2184 sPathData = GetAppStreamFromArray(PathArray, 26); | |
2185 else | |
2186 GetPathDataFromArray(path, PathArray, 26); | |
2187 } | |
2188 | |
2189 void CPWL_Utils::GetGraphics_Comment(CFX_ByteString& sPathData, | |
2190 CFX_PathData& path, | |
2191 const CFX_FloatRect& crBBox, | |
2192 const PWL_PATH_TYPE type) { | |
2193 FX_FLOAT fWidth = crBBox.right - crBBox.left; | |
2194 FX_FLOAT fHeight = crBBox.top - crBBox.bottom; | |
2195 | |
2196 CPWL_PathData PathArray[] = { | |
2197 CPWL_PathData( | |
2198 CPWL_Point(crBBox.left + fWidth / 15.0f, crBBox.top - fHeight / 6.0f), | |
2199 PWLPT_MOVETO), | |
2200 CPWL_PathData( | |
2201 CPWL_Point(crBBox.left + fWidth / 15.0f, | |
2202 crBBox.top - fHeight / 6.0f + | |
2203 FX_BEZIER * (fHeight / 6.0f - fHeight / 10.0f)), | |
2204 PWLPT_BEZIERTO), | |
2205 CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 2 / 15.0f - | |
2206 FX_BEZIER * fWidth / 15.0f, | |
2207 crBBox.top - fHeight / 10.0f), | |
2208 PWLPT_BEZIERTO), | |
2209 CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 2 / 15.0f, | |
2210 crBBox.top - fHeight / 10.0f), | |
2211 PWLPT_BEZIERTO), | |
2212 CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 2 / 15.0f, | |
2213 crBBox.top - fHeight / 10.0f), | |
2214 PWLPT_LINETO), | |
2215 CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 2 / 15.0f + | |
2216 FX_BEZIER * fWidth / 15.0f, | |
2217 crBBox.top - fHeight / 10.0f), | |
2218 PWLPT_BEZIERTO), | |
2219 CPWL_PathData( | |
2220 CPWL_Point(crBBox.right - fWidth / 15.0f, | |
2221 crBBox.top - fHeight / 6 + | |
2222 FX_BEZIER * (fHeight / 6.0f - fHeight / 10.0f)), | |
2223 PWLPT_BEZIERTO), | |
2224 CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 15.0f, | |
2225 crBBox.top - fHeight / 6.0f), | |
2226 PWLPT_BEZIERTO), | |
2227 CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 15.0f, | |
2228 crBBox.bottom + fHeight / 3.0f), | |
2229 PWLPT_LINETO), | |
2230 CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 15.0f, | |
2231 crBBox.bottom + fHeight * 4 / 15.0f + | |
2232 FX_BEZIER * fHeight / 15.0f), | |
2233 PWLPT_BEZIERTO), | |
2234 CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 2 / 15.0f + | |
2235 FX_BEZIER * fWidth / 15.0f, | |
2236 crBBox.bottom + fHeight * 4 / 15.0f), | |
2237 PWLPT_BEZIERTO), | |
2238 CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 2 / 15.0f, | |
2239 crBBox.bottom + fHeight * 4 / 15.0f), | |
2240 PWLPT_BEZIERTO), | |
2241 CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 5 / 15.0f, | |
2242 crBBox.bottom + fHeight * 4 / 15.0f), | |
2243 PWLPT_LINETO), | |
2244 CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 5 / 15.0f, | |
2245 crBBox.bottom + fHeight * 2 / 15 + | |
2246 FX_BEZIER * fHeight * 2 / 15.0f), | |
2247 PWLPT_BEZIERTO), | |
2248 CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 5 / 15.0f - | |
2249 FX_BEZIER * fWidth * 2 / 15.0f, | |
2250 crBBox.bottom + fHeight * 2 / 15.0f), | |
2251 PWLPT_BEZIERTO), | |
2252 CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 6 / 30.0f, | |
2253 crBBox.bottom + fHeight * 2 / 15.0f), | |
2254 PWLPT_BEZIERTO), | |
2255 CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 7 / 30.0f + | |
2256 FX_BEZIER * fWidth / 30.0f, | |
2257 crBBox.bottom + fHeight * 2 / 15.0f), | |
2258 PWLPT_BEZIERTO), | |
2259 CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 7 / 30.0f, | |
2260 crBBox.bottom + fHeight * 2 / 15.0f + | |
2261 FX_BEZIER * fHeight * 2 / 15.0f), | |
2262 PWLPT_BEZIERTO), | |
2263 CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 7 / 30.0f, | |
2264 crBBox.bottom + fHeight * 4 / 15.0f), | |
2265 PWLPT_BEZIERTO), | |
2266 CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 2 / 15.0f, | |
2267 crBBox.bottom + fHeight * 4 / 15.0f), | |
2268 PWLPT_LINETO), | |
2269 CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 2 / 15.0f - | |
2270 FX_BEZIER * fWidth / 15.0f, | |
2271 crBBox.bottom + fHeight * 4 / 15.0f), | |
2272 PWLPT_BEZIERTO), | |
2273 CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 15.0f, | |
2274 crBBox.bottom + fHeight / 3.0f - | |
2275 FX_BEZIER * fHeight / 15.0f), | |
2276 PWLPT_BEZIERTO), | |
2277 CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 15.0f, | |
2278 crBBox.bottom + fHeight / 3.0f), | |
2279 PWLPT_BEZIERTO), | |
2280 CPWL_PathData( | |
2281 CPWL_Point(crBBox.left + fWidth / 15.0f, crBBox.top - fHeight / 6.0f), | |
2282 PWLPT_LINETO), | |
2283 CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 2 / 15.0f, | |
2284 crBBox.top - fHeight * 8 / 30.0f), | |
2285 PWLPT_MOVETO), | |
2286 CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 2 / 15.0f, | |
2287 crBBox.top - fHeight * 8 / 30.0f), | |
2288 PWLPT_LINETO), | |
2289 CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 2 / 15, | |
2290 crBBox.top - fHeight * 25 / 60.0f), | |
2291 PWLPT_MOVETO), | |
2292 CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 2 / 15.0f, | |
2293 crBBox.top - fHeight * 25 / 60.0f), | |
2294 PWLPT_LINETO), | |
2295 CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 2 / 15.0f, | |
2296 crBBox.top - fHeight * 17 / 30.0f), | |
2297 PWLPT_MOVETO), | |
2298 CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 4 / 15.0f, | |
2299 crBBox.top - fHeight * 17 / 30.0f), | |
2300 PWLPT_LINETO)}; | |
2301 | |
2302 if (type == PWLPT_STREAM) | |
2303 sPathData = GetAppStreamFromArray(PathArray, 30); | |
2304 else | |
2305 GetPathDataFromArray(path, PathArray, 30); | |
2306 } | |
2307 | |
2308 void CPWL_Utils::GetGraphics_Cross(CFX_ByteString& sPathData, | |
2309 CFX_PathData& path, | |
2310 const CFX_FloatRect& crBBox, | |
2311 const PWL_PATH_TYPE type) { | |
2312 FX_FLOAT fWidth = crBBox.right - crBBox.left; | |
2313 FX_FLOAT fHeight = crBBox.top - crBBox.bottom; | |
2314 CPWL_Point center_point(crBBox.left + fWidth / 2, | |
2315 crBBox.bottom + fHeight / 2); | |
2316 | |
2317 CPWL_PathData PathArray[] = { | |
2318 CPWL_PathData( | |
2319 CPWL_Point(center_point.x, center_point.y + fHeight / 10.0f), | |
2320 PWLPT_MOVETO), | |
2321 CPWL_PathData( | |
2322 CPWL_Point(center_point.x + fWidth * 0.3f, | |
2323 center_point.y + fHeight / 10.0f + fWidth * 0.3f), | |
2324 PWLPT_LINETO), | |
2325 CPWL_PathData(CPWL_Point(center_point.x + fWidth / 10.0f + fWidth * 0.3f, | |
2326 center_point.y + fHeight * 0.3f), | |
2327 PWLPT_LINETO), | |
2328 CPWL_PathData(CPWL_Point(center_point.x + fWidth / 10.0f, center_point.y), | |
2329 PWLPT_LINETO), | |
2330 CPWL_PathData(CPWL_Point(center_point.x + fWidth / 10.0f + fWidth * 0.3f, | |
2331 center_point.y - fHeight * 0.3f), | |
2332 PWLPT_LINETO), | |
2333 CPWL_PathData( | |
2334 CPWL_Point(center_point.x + fWidth * 0.3f, | |
2335 center_point.y - fHeight / 10.0f - fHeight * 0.3f), | |
2336 PWLPT_LINETO), | |
2337 CPWL_PathData( | |
2338 CPWL_Point(center_point.x, center_point.y - fHeight / 10.0f), | |
2339 PWLPT_LINETO), | |
2340 CPWL_PathData(CPWL_Point(center_point.x - fWidth * 0.3f, | |
2341 center_point.y - fHeight / 10 - fHeight * 0.3f), | |
2342 PWLPT_LINETO), | |
2343 CPWL_PathData(CPWL_Point(center_point.x - fWidth / 10.0f - fWidth * 0.3f, | |
2344 center_point.y - fHeight * 0.3f), | |
2345 PWLPT_LINETO), | |
2346 CPWL_PathData(CPWL_Point(center_point.x - fWidth / 10, center_point.y), | |
2347 PWLPT_LINETO), | |
2348 CPWL_PathData(CPWL_Point(center_point.x - fWidth / 10 - fWidth * 0.3f, | |
2349 center_point.y + fHeight * 0.3f), | |
2350 PWLPT_LINETO), | |
2351 CPWL_PathData( | |
2352 CPWL_Point(center_point.x - fWidth * 0.3f, | |
2353 center_point.y + fHeight / 10.0f + fHeight * 0.3f), | |
2354 PWLPT_LINETO), | |
2355 CPWL_PathData( | |
2356 CPWL_Point(center_point.x, center_point.y + fHeight / 10.0f), | |
2357 PWLPT_LINETO)}; | |
2358 | |
2359 if (type == PWLPT_STREAM) | |
2360 sPathData = GetAppStreamFromArray(PathArray, 13); | |
2361 else | |
2362 GetPathDataFromArray(path, PathArray, 13); | |
2363 } | |
2364 | |
2365 void CPWL_Utils::GetGraphics_Help(CFX_ByteString& sPathData, | |
2366 CFX_PathData& path, | |
2367 const CFX_FloatRect& crBBox, | |
2368 const PWL_PATH_TYPE type) { | |
2369 FX_FLOAT fWidth = crBBox.right - crBBox.left; | |
2370 FX_FLOAT fHeight = crBBox.top - crBBox.bottom; | |
2371 | |
2372 CPWL_PathData PathArray[] = { | |
2373 CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 60.0f, | |
2374 crBBox.bottom + fHeight / 2.0f), | |
2375 PWLPT_MOVETO), | |
2376 CPWL_PathData( | |
2377 CPWL_Point(crBBox.left + fWidth / 60.0f, | |
2378 crBBox.bottom + fHeight / 2.0f + | |
2379 FX_BEZIER * (fHeight / 60.0f - fHeight / 2.0f)), | |
2380 PWLPT_BEZIERTO), | |
2381 CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 2.0f - | |
2382 FX_BEZIER * (fWidth / 2.0f - fWidth / 60.0f), | |
2383 crBBox.bottom + fHeight / 60.0f), | |
2384 PWLPT_BEZIERTO), | |
2385 CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 2.0f, | |
2386 crBBox.bottom + fHeight / 60.0f), | |
2387 PWLPT_BEZIERTO), | |
2388 CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 2.0f + | |
2389 FX_BEZIER * fWidth * 29 / 60.0f, | |
2390 crBBox.bottom + fHeight / 60.0f), | |
2391 PWLPT_BEZIERTO), | |
2392 CPWL_PathData( | |
2393 CPWL_Point(crBBox.right - fWidth / 60.0f, | |
2394 crBBox.bottom + fHeight / 2.0f + | |
2395 FX_BEZIER * (fHeight / 60.0f - fHeight / 2.0f)), | |
2396 PWLPT_BEZIERTO), | |
2397 CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 60.0f, | |
2398 crBBox.bottom + fHeight / 2.0f), | |
2399 PWLPT_BEZIERTO), | |
2400 CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 60.0f, | |
2401 crBBox.bottom + fHeight / 2.0f + | |
2402 FX_BEZIER * fHeight * 29 / 60.0f), | |
2403 PWLPT_BEZIERTO), | |
2404 CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 2.0f + | |
2405 FX_BEZIER * fWidth * 29 / 60.0f, | |
2406 crBBox.top - fHeight / 60.0f), | |
2407 PWLPT_BEZIERTO), | |
2408 CPWL_PathData( | |
2409 CPWL_Point(crBBox.left + fWidth / 2.0f, crBBox.top - fHeight / 60.0f), | |
2410 PWLPT_BEZIERTO), | |
2411 CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 2.0f - | |
2412 FX_BEZIER * fWidth * 29 / 60.0f, | |
2413 crBBox.top - fHeight / 60.0f), | |
2414 PWLPT_BEZIERTO), | |
2415 CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 60.0f, | |
2416 crBBox.bottom + fHeight / 2.0f + | |
2417 FX_BEZIER * fHeight * 29 / 60.0f), | |
2418 PWLPT_BEZIERTO), | |
2419 CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 60.0f, | |
2420 crBBox.bottom + fHeight / 2.0f), | |
2421 PWLPT_BEZIERTO), | |
2422 CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.27f, | |
2423 crBBox.top - fHeight * 0.36f), | |
2424 PWLPT_MOVETO), | |
2425 CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.27f, | |
2426 crBBox.top - fHeight * 0.36f + | |
2427 FX_BEZIER * fHeight * 0.23f), | |
2428 PWLPT_BEZIERTO), | |
2429 CPWL_PathData( | |
2430 CPWL_Point(crBBox.left + fWidth * 0.5f - FX_BEZIER * fWidth * 0.23f, | |
2431 crBBox.bottom + fHeight * 0.87f), | |
2432 PWLPT_BEZIERTO), | |
2433 CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.5f, | |
2434 crBBox.bottom + fHeight * 0.87f), | |
2435 PWLPT_BEZIERTO), | |
2436 CPWL_PathData( | |
2437 CPWL_Point(crBBox.left + fWidth * 0.5f + FX_BEZIER * fWidth * 0.23f, | |
2438 crBBox.bottom + fHeight * 0.87f), | |
2439 PWLPT_BEZIERTO), | |
2440 CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.27f, | |
2441 crBBox.top - fHeight * 0.36f + | |
2442 FX_BEZIER * fHeight * 0.23f), | |
2443 PWLPT_BEZIERTO), | |
2444 CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.27f, | |
2445 crBBox.top - fHeight * 0.36f), | |
2446 PWLPT_BEZIERTO), | |
2447 CPWL_PathData( | |
2448 CPWL_Point(crBBox.right - fWidth * 0.27f - fWidth * 0.08f * 0.2f, | |
2449 crBBox.top - fHeight * 0.36f - fHeight * 0.15f * 0.7f), | |
2450 PWLPT_BEZIERTO), | |
2451 CPWL_PathData( | |
2452 CPWL_Point(crBBox.right - fWidth * 0.35f + fWidth * 0.08f * 0.2f, | |
2453 crBBox.top - fHeight * 0.51f + fHeight * 0.15f * 0.2f), | |
2454 PWLPT_BEZIERTO), | |
2455 CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.35f, | |
2456 crBBox.top - fHeight * 0.51f), | |
2457 PWLPT_BEZIERTO), | |
2458 CPWL_PathData( | |
2459 CPWL_Point(crBBox.right - fWidth * 0.35f - fWidth * 0.1f * 0.5f, | |
2460 crBBox.top - fHeight * 0.51f - fHeight * 0.15f * 0.3f), | |
2461 PWLPT_BEZIERTO), | |
2462 CPWL_PathData( | |
2463 CPWL_Point(crBBox.right - fWidth * 0.45f - fWidth * 0.1f * 0.5f, | |
2464 crBBox.top - fHeight * 0.68f + fHeight * 0.15f * 0.5f), | |
2465 PWLPT_BEZIERTO), | |
2466 CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.45f, | |
2467 crBBox.top - fHeight * 0.68f), | |
2468 PWLPT_BEZIERTO), | |
2469 CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.45f, | |
2470 crBBox.bottom + fHeight * 0.30f), | |
2471 PWLPT_LINETO), | |
2472 CPWL_PathData( | |
2473 CPWL_Point(crBBox.right - fWidth * 0.45f, | |
2474 crBBox.bottom + fHeight * 0.30f - fWidth * 0.1f * 0.7f), | |
2475 PWLPT_BEZIERTO), | |
2476 CPWL_PathData( | |
2477 CPWL_Point(crBBox.right - fWidth * 0.55f, | |
2478 crBBox.bottom + fHeight * 0.30f - fWidth * 0.1f * 0.7f), | |
2479 PWLPT_BEZIERTO), | |
2480 CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.55f, | |
2481 crBBox.bottom + fHeight * 0.30f), | |
2482 PWLPT_BEZIERTO), | |
2483 CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.55f, | |
2484 crBBox.top - fHeight * 0.66f), | |
2485 PWLPT_LINETO), | |
2486 CPWL_PathData( | |
2487 CPWL_Point(crBBox.right - fWidth * 0.55f - fWidth * 0.1f * 0.05f, | |
2488 crBBox.top - fHeight * 0.66f + fHeight * 0.18f * 0.5f), | |
2489 PWLPT_BEZIERTO), | |
2490 CPWL_PathData( | |
2491 CPWL_Point(crBBox.right - fWidth * 0.45f - fWidth * 0.1f * 0.05f, | |
2492 crBBox.top - fHeight * 0.48f - fHeight * 0.18f * 0.3f), | |
2493 PWLPT_BEZIERTO), | |
2494 CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.45f, | |
2495 crBBox.top - fHeight * 0.48f), | |
2496 PWLPT_BEZIERTO), | |
2497 CPWL_PathData( | |
2498 CPWL_Point(crBBox.right - fWidth * 0.45f + fWidth * 0.08f * 0.2f, | |
2499 crBBox.top - fHeight * 0.48f + fHeight * 0.18f * 0.2f), | |
2500 PWLPT_BEZIERTO), | |
2501 CPWL_PathData( | |
2502 CPWL_Point(crBBox.right - fWidth * 0.37f - fWidth * 0.08f * 0.2f, | |
2503 crBBox.top - fHeight * 0.36f - fHeight * 0.18f * 0.7f), | |
2504 PWLPT_BEZIERTO), | |
2505 CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.37f, | |
2506 crBBox.top - fHeight * 0.36f), | |
2507 PWLPT_BEZIERTO), | |
2508 CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.37f, | |
2509 crBBox.top - fHeight * 0.36f + | |
2510 FX_BEZIER * fHeight * 0.13f), | |
2511 PWLPT_BEZIERTO), | |
2512 CPWL_PathData( | |
2513 CPWL_Point(crBBox.left + fWidth * 0.5f + FX_BEZIER * fWidth * 0.13f, | |
2514 crBBox.bottom + fHeight * 0.77f), | |
2515 PWLPT_BEZIERTO), | |
2516 CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.5f, | |
2517 crBBox.bottom + fHeight * 0.77f), | |
2518 PWLPT_BEZIERTO), | |
2519 CPWL_PathData( | |
2520 CPWL_Point(crBBox.left + fWidth * 0.5f - FX_BEZIER * fWidth * 0.13f, | |
2521 crBBox.bottom + fHeight * 0.77f), | |
2522 PWLPT_BEZIERTO), | |
2523 CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.37f, | |
2524 crBBox.top - fHeight * 0.36f + | |
2525 FX_BEZIER * fHeight * 0.13f), | |
2526 PWLPT_BEZIERTO), | |
2527 CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.37f, | |
2528 crBBox.top - fHeight * 0.36f), | |
2529 PWLPT_BEZIERTO), | |
2530 CPWL_PathData( | |
2531 CPWL_Point(crBBox.left + fWidth * 0.37f, | |
2532 crBBox.top - fHeight * 0.36f - fWidth * 0.1f * 0.6f), | |
2533 PWLPT_BEZIERTO), | |
2534 CPWL_PathData( | |
2535 CPWL_Point(crBBox.left + fWidth * 0.27f, | |
2536 crBBox.top - fHeight * 0.36f - fWidth * 0.1f * 0.6f), | |
2537 PWLPT_BEZIERTO), | |
2538 CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.27f, | |
2539 crBBox.top - fHeight * 0.36f), | |
2540 PWLPT_BEZIERTO), | |
2541 CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.56f, | |
2542 crBBox.bottom + fHeight * 0.13f), | |
2543 PWLPT_MOVETO), | |
2544 CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.56f, | |
2545 crBBox.bottom + fHeight * 0.13f + | |
2546 FX_BEZIER * fHeight * 0.055f), | |
2547 PWLPT_BEZIERTO), | |
2548 CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.505f - | |
2549 FX_BEZIER * fWidth * 0.095f, | |
2550 crBBox.bottom + fHeight * 0.185f), | |
2551 PWLPT_BEZIERTO), | |
2552 CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.505f, | |
2553 crBBox.bottom + fHeight * 0.185f), | |
2554 PWLPT_BEZIERTO), | |
2555 CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.505f + | |
2556 FX_BEZIER * fWidth * 0.065f, | |
2557 crBBox.bottom + fHeight * 0.185f), | |
2558 PWLPT_BEZIERTO), | |
2559 CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.44f, | |
2560 crBBox.bottom + fHeight * 0.13f + | |
2561 FX_BEZIER * fHeight * 0.055f), | |
2562 PWLPT_BEZIERTO), | |
2563 CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.44f, | |
2564 crBBox.bottom + fHeight * 0.13f), | |
2565 PWLPT_BEZIERTO), | |
2566 CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.44f, | |
2567 crBBox.bottom + fHeight * 0.13f - | |
2568 FX_BEZIER * fHeight * 0.055f), | |
2569 PWLPT_BEZIERTO), | |
2570 CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.505f + | |
2571 FX_BEZIER * fWidth * 0.065f, | |
2572 crBBox.bottom + fHeight * 0.075f), | |
2573 PWLPT_BEZIERTO), | |
2574 CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.505f, | |
2575 crBBox.bottom + fHeight * 0.075f), | |
2576 PWLPT_BEZIERTO), | |
2577 CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.505f - | |
2578 FX_BEZIER * fWidth * 0.065f, | |
2579 crBBox.bottom + fHeight * 0.075f), | |
2580 PWLPT_BEZIERTO), | |
2581 CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.56f, | |
2582 crBBox.bottom + fHeight * 0.13f - | |
2583 FX_BEZIER * fHeight * 0.055f), | |
2584 PWLPT_BEZIERTO), | |
2585 CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.56f, | |
2586 crBBox.bottom + fHeight * 0.13f), | |
2587 PWLPT_BEZIERTO)}; | |
2588 | |
2589 if (type == PWLPT_STREAM) | |
2590 sPathData = GetAppStreamFromArray(PathArray, 59); | |
2591 else | |
2592 GetPathDataFromArray(path, PathArray, 59); | |
2593 } | |
2594 | |
2595 void CPWL_Utils::GetGraphics_InsertText(CFX_ByteString& sPathData, | |
2596 CFX_PathData& path, | |
2597 const CFX_FloatRect& crBBox, | |
2598 const PWL_PATH_TYPE type) { | |
2599 FX_FLOAT fWidth = crBBox.right - crBBox.left; | |
2600 FX_FLOAT fHeight = crBBox.top - crBBox.bottom; | |
2601 | |
2602 CPWL_PathData PathArray[] = { | |
2603 CPWL_PathData( | |
2604 CPWL_Point(crBBox.left + fWidth / 10, crBBox.bottom + fHeight / 10), | |
2605 PWLPT_MOVETO), | |
2606 CPWL_PathData( | |
2607 CPWL_Point(crBBox.left + fWidth / 2, crBBox.top - fHeight * 2 / 15), | |
2608 PWLPT_LINETO), | |
2609 CPWL_PathData( | |
2610 CPWL_Point(crBBox.right - fWidth / 10, crBBox.bottom + fHeight / 10), | |
2611 PWLPT_LINETO), | |
2612 CPWL_PathData( | |
2613 CPWL_Point(crBBox.left + fWidth / 10, crBBox.bottom + fHeight / 10), | |
2614 PWLPT_LINETO)}; | |
2615 | |
2616 if (type == PWLPT_STREAM) | |
2617 sPathData = GetAppStreamFromArray(PathArray, 4); | |
2618 else | |
2619 GetPathDataFromArray(path, PathArray, 4); | |
2620 } | |
2621 | |
2622 void CPWL_Utils::GetGraphics_Key(CFX_ByteString& sPathData, | |
2623 CFX_PathData& path, | |
2624 const CFX_FloatRect& crBBox, | |
2625 const PWL_PATH_TYPE type) { | |
2626 FX_FLOAT fWidth = crBBox.right - crBBox.left; | |
2627 FX_FLOAT fHeight = crBBox.top - crBBox.bottom; | |
2628 FX_FLOAT k = -fHeight / fWidth; | |
2629 CPWL_Point tail; | |
2630 CPWL_Point CicleCenter; | |
2631 tail.x = crBBox.left + fWidth * 0.9f; | |
2632 tail.y = k * (tail.x - crBBox.right) + crBBox.bottom; | |
2633 CicleCenter.x = crBBox.left + fWidth * 0.15f; | |
2634 CicleCenter.y = k * (CicleCenter.x - crBBox.right) + crBBox.bottom; | |
2635 | |
2636 CPWL_PathData PathArray[] = { | |
2637 CPWL_PathData( | |
2638 CPWL_Point(tail.x + fWidth / 30.0f, -fWidth / 30.0f / k + tail.y), | |
2639 PWLPT_MOVETO), | |
2640 CPWL_PathData(CPWL_Point(tail.x + fWidth / 30.0f - fWidth * 0.18f, | |
2641 -k * fWidth * 0.18f - fWidth / 30 / k + tail.y), | |
2642 PWLPT_LINETO), | |
2643 CPWL_PathData( | |
2644 CPWL_Point(tail.x + fWidth / 30 - fWidth * 0.18f + fWidth * 0.07f, | |
2645 -fWidth * 0.07f / k - k * fWidth * 0.18f - | |
2646 fWidth / 30 / k + tail.y), | |
2647 PWLPT_LINETO), | |
2648 CPWL_PathData( | |
2649 CPWL_Point(tail.x + fWidth / 30 - fWidth * 0.18f - fWidth / 20 + | |
2650 fWidth * 0.07f, | |
2651 -fWidth * 0.07f / k - k * fWidth / 20 - | |
2652 k * fWidth * 0.18f - fWidth / 30 / k + tail.y), | |
2653 PWLPT_LINETO), | |
2654 CPWL_PathData( | |
2655 CPWL_Point( | |
2656 tail.x + fWidth / 30 - fWidth * 0.18f - fWidth / 20, | |
2657 -k * fWidth / 20 - k * fWidth * 0.18f - fWidth / 30 / k + tail.y), | |
2658 PWLPT_LINETO), | |
2659 CPWL_PathData( | |
2660 CPWL_Point( | |
2661 tail.x + fWidth / 30 - fWidth * 0.18f - fWidth / 20 - fWidth / 15, | |
2662 -k * fWidth / 15 - k * fWidth / 20 - k * fWidth * 0.18f - | |
2663 fWidth / 30 / k + tail.y), | |
2664 PWLPT_LINETO), | |
2665 CPWL_PathData( | |
2666 CPWL_Point(tail.x + fWidth / 30 - fWidth * 0.18f - fWidth / 20 - | |
2667 fWidth / 15 + fWidth * 0.07f, | |
2668 -fWidth * 0.07f / k - k * fWidth / 15 - k * fWidth / 20 - | |
2669 k * fWidth * 0.18f - fWidth / 30 / k + tail.y), | |
2670 PWLPT_LINETO), | |
2671 CPWL_PathData( | |
2672 CPWL_Point(tail.x + fWidth / 30 - fWidth * 0.18f - fWidth / 20 - | |
2673 fWidth / 15 - fWidth / 20 + fWidth * 0.07f, | |
2674 -fWidth * 0.07f / k + -k * fWidth / 20 + -k * fWidth / 15 - | |
2675 k * fWidth / 20 - k * fWidth * 0.18f - | |
2676 fWidth / 30 / k + tail.y), | |
2677 PWLPT_LINETO), | |
2678 CPWL_PathData( | |
2679 CPWL_Point(tail.x + fWidth / 30 - fWidth * 0.18f - fWidth / 20 - | |
2680 fWidth / 15 - fWidth / 20, | |
2681 -k * fWidth / 20 + -k * fWidth / 15 - k * fWidth / 20 - | |
2682 k * fWidth * 0.18f - fWidth / 30 / k + tail.y), | |
2683 PWLPT_LINETO), | |
2684 CPWL_PathData(CPWL_Point(tail.x + fWidth / 30 - fWidth * 0.45f, | |
2685 -k * fWidth * 0.45f - fWidth / 30 / k + tail.y), | |
2686 PWLPT_LINETO), | |
2687 CPWL_PathData( | |
2688 CPWL_Point(tail.x + fWidth / 30 - fWidth * 0.45f + fWidth * 0.2f, | |
2689 -fWidth * 0.4f / k - k * fWidth * 0.45f - fWidth / 30 / k + | |
2690 tail.y), | |
2691 PWLPT_BEZIERTO), | |
2692 CPWL_PathData(CPWL_Point(CicleCenter.x + fWidth * 0.2f, | |
2693 -fWidth * 0.1f / k + CicleCenter.y), | |
2694 PWLPT_BEZIERTO), | |
2695 CPWL_PathData(CPWL_Point(CicleCenter.x, CicleCenter.y), PWLPT_BEZIERTO), | |
2696 CPWL_PathData(CPWL_Point(CicleCenter.x - fWidth / 60.0f, | |
2697 -k * fWidth / 60 + CicleCenter.y), | |
2698 PWLPT_BEZIERTO), | |
2699 CPWL_PathData(CPWL_Point(CicleCenter.x - fWidth / 60, | |
2700 -k * fWidth / 60 + CicleCenter.y), | |
2701 PWLPT_BEZIERTO), | |
2702 CPWL_PathData(CPWL_Point(CicleCenter.x, CicleCenter.y), PWLPT_BEZIERTO), | |
2703 CPWL_PathData( | |
2704 CPWL_Point(CicleCenter.x - fWidth * 0.22f, | |
2705 fWidth * 0.35f / k + CicleCenter.y - fHeight * 0.05f), | |
2706 PWLPT_BEZIERTO), | |
2707 CPWL_PathData( | |
2708 CPWL_Point(tail.x - fWidth / 30 - fWidth * 0.45f - fWidth * 0.18f, | |
2709 fWidth * 0.05f / k - k * fWidth * 0.45f + fWidth / 30 / k + | |
2710 tail.y - fHeight * 0.05f), | |
2711 PWLPT_BEZIERTO), | |
2712 CPWL_PathData( | |
2713 CPWL_Point(tail.x - fWidth / 30.0f - fWidth * 0.45f, | |
2714 -k * fWidth * 0.45f + fWidth / 30.0f / k + tail.y), | |
2715 PWLPT_BEZIERTO), | |
2716 CPWL_PathData( | |
2717 CPWL_Point(tail.x - fWidth / 30.0f, fWidth / 30.0f / k + tail.y), | |
2718 PWLPT_LINETO), | |
2719 CPWL_PathData(CPWL_Point(tail.x + fWidth / 30, -fWidth / 30 / k + tail.y), | |
2720 PWLPT_LINETO), | |
2721 CPWL_PathData(CPWL_Point(CicleCenter.x + fWidth * 0.08f, | |
2722 k * fWidth * 0.08f + CicleCenter.y), | |
2723 PWLPT_MOVETO), | |
2724 CPWL_PathData( | |
2725 CPWL_Point(CicleCenter.x + fWidth * 0.08f + fWidth * 0.1f, | |
2726 -fWidth * 0.1f / k + k * fWidth * 0.08f + CicleCenter.y), | |
2727 PWLPT_BEZIERTO), | |
2728 CPWL_PathData( | |
2729 CPWL_Point(CicleCenter.x + fWidth * 0.22f + fWidth * 0.1f, | |
2730 k * fWidth * 0.22f + CicleCenter.y - fWidth * 0.1f / k), | |
2731 PWLPT_BEZIERTO), | |
2732 CPWL_PathData(CPWL_Point(CicleCenter.x + fWidth * 0.22f, | |
2733 k * fWidth * 0.22f + CicleCenter.y), | |
2734 PWLPT_BEZIERTO), | |
2735 CPWL_PathData( | |
2736 CPWL_Point(CicleCenter.x + fWidth * 0.22f - fWidth * 0.1f, | |
2737 fWidth * 0.1f / k + k * fWidth * 0.22f + CicleCenter.y), | |
2738 PWLPT_BEZIERTO), | |
2739 CPWL_PathData( | |
2740 CPWL_Point(CicleCenter.x + fWidth * 0.08f - fWidth * 0.1f, | |
2741 fWidth * 0.1f / k + k * fWidth * 0.08f + CicleCenter.y), | |
2742 PWLPT_BEZIERTO), | |
2743 CPWL_PathData(CPWL_Point(CicleCenter.x + fWidth * 0.08f, | |
2744 k * fWidth * 0.08f + CicleCenter.y), | |
2745 PWLPT_BEZIERTO)}; | |
2746 | |
2747 if (type == PWLPT_STREAM) | |
2748 sPathData = GetAppStreamFromArray(PathArray, 28); | |
2749 else | |
2750 GetPathDataFromArray(path, PathArray, 28); | |
2751 } | |
2752 | |
2753 void CPWL_Utils::GetGraphics_NewParagraph(CFX_ByteString& sPathData, | |
2754 CFX_PathData& path, | |
2755 const CFX_FloatRect& crBBox, | |
2756 const PWL_PATH_TYPE type) { | |
2757 FX_FLOAT fWidth = crBBox.right - crBBox.left; | |
2758 FX_FLOAT fHeight = crBBox.top - crBBox.bottom; | |
2759 | |
2760 CPWL_PathData PathArray[] = { | |
2761 CPWL_PathData( | |
2762 CPWL_Point(crBBox.left + fWidth / 2.0f, crBBox.top - fHeight / 20.0f), | |
2763 PWLPT_MOVETO), | |
2764 CPWL_PathData( | |
2765 CPWL_Point(crBBox.left + fWidth / 10.0f, crBBox.top - fHeight / 2.0f), | |
2766 PWLPT_LINETO), | |
2767 CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 10.0f, | |
2768 crBBox.top - fHeight / 2.0f), | |
2769 PWLPT_LINETO), | |
2770 CPWL_PathData( | |
2771 CPWL_Point(crBBox.left + fWidth / 2.0f, crBBox.top - fHeight / 20.0f), | |
2772 PWLPT_LINETO), | |
2773 CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.12f, | |
2774 crBBox.top - fHeight * 17 / 30.0f), | |
2775 PWLPT_MOVETO), | |
2776 CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.12f, | |
2777 crBBox.bottom + fHeight / 10.0f), | |
2778 PWLPT_LINETO), | |
2779 CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.22f, | |
2780 crBBox.bottom + fHeight / 10.0f), | |
2781 PWLPT_LINETO), | |
2782 CPWL_PathData( | |
2783 CPWL_Point(crBBox.left + fWidth * 0.22f, | |
2784 crBBox.top - fHeight * 17 / 30.0f - fWidth * 0.14f), | |
2785 PWLPT_LINETO), | |
2786 CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.38f, | |
2787 crBBox.bottom + fHeight / 10.0f), | |
2788 PWLPT_LINETO), | |
2789 CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.48f, | |
2790 crBBox.bottom + fHeight / 10.0f), | |
2791 PWLPT_LINETO), | |
2792 CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.48f, | |
2793 crBBox.top - fHeight * 17 / 30.0f), | |
2794 PWLPT_LINETO), | |
2795 CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.38f, | |
2796 crBBox.top - fHeight * 17 / 30.0f), | |
2797 PWLPT_LINETO), | |
2798 CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.38f, | |
2799 crBBox.bottom + fWidth * 0.24f), | |
2800 PWLPT_LINETO), | |
2801 CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.22f, | |
2802 crBBox.top - fHeight * 17 / 30.0f), | |
2803 PWLPT_LINETO), | |
2804 CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.12f, | |
2805 crBBox.top - fHeight * 17 / 30.0f), | |
2806 PWLPT_LINETO), | |
2807 CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.6f, | |
2808 crBBox.bottom + fHeight / 10.0f), | |
2809 PWLPT_MOVETO), | |
2810 CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.7f, | |
2811 crBBox.bottom + fHeight / 10.0f), | |
2812 PWLPT_LINETO), | |
2813 CPWL_PathData( | |
2814 CPWL_Point(crBBox.left + fWidth * 0.7f, | |
2815 crBBox.bottom + fHeight / 10.0f + fHeight / 7.0f), | |
2816 PWLPT_LINETO), | |
2817 CPWL_PathData( | |
2818 CPWL_Point(crBBox.left + fWidth * 0.97f, | |
2819 crBBox.bottom + fHeight / 10.0f + fHeight / 7.0f), | |
2820 PWLPT_BEZIERTO), | |
2821 CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.97f, | |
2822 crBBox.top - fHeight * 17 / 30.0f), | |
2823 PWLPT_BEZIERTO), | |
2824 CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.7f, | |
2825 crBBox.top - fHeight * 17 / 30.0f), | |
2826 PWLPT_BEZIERTO), | |
2827 CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.6f, | |
2828 crBBox.top - fHeight * 17 / 30.0f), | |
2829 PWLPT_LINETO), | |
2830 CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.6f, | |
2831 crBBox.bottom + fHeight / 10.0f), | |
2832 PWLPT_LINETO), | |
2833 CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.7f, | |
2834 crBBox.bottom + fHeight / 7 + fHeight * 0.18f), | |
2835 PWLPT_MOVETO), | |
2836 CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.85f, | |
2837 crBBox.bottom + fHeight / 7 + fHeight * 0.18f), | |
2838 PWLPT_BEZIERTO), | |
2839 CPWL_PathData( | |
2840 CPWL_Point(crBBox.left + fWidth * 0.85f, | |
2841 crBBox.top - fHeight * 17 / 30.0f - fHeight * 0.08f), | |
2842 PWLPT_BEZIERTO), | |
2843 CPWL_PathData( | |
2844 CPWL_Point(crBBox.left + fWidth * 0.7f, | |
2845 crBBox.top - fHeight * 17 / 30.0f - fHeight * 0.08f), | |
2846 PWLPT_BEZIERTO), | |
2847 CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.7f, | |
2848 crBBox.bottom + fHeight / 7 + fHeight * 0.18f), | |
2849 PWLPT_LINETO)}; | |
2850 | |
2851 if (type == PWLPT_STREAM) | |
2852 sPathData = GetAppStreamFromArray(PathArray, 28); | |
2853 else | |
2854 GetPathDataFromArray(path, PathArray, 28); | |
2855 } | |
2856 | |
2857 void CPWL_Utils::GetGraphics_TextNote(CFX_ByteString& sPathData, | |
2858 CFX_PathData& path, | |
2859 const CFX_FloatRect& crBBox, | |
2860 const PWL_PATH_TYPE type) { | |
2861 FX_FLOAT fWidth = crBBox.right - crBBox.left; | |
2862 FX_FLOAT fHeight = crBBox.top - crBBox.bottom; | |
2863 | |
2864 CPWL_PathData PathArray[] = { | |
2865 CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 3 / 10.0f, | |
2866 crBBox.bottom + fHeight / 15.0f), | |
2867 PWLPT_MOVETO), | |
2868 CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 7 / 10.0f, | |
2869 crBBox.bottom + fHeight * 4 / 15.0f), | |
2870 PWLPT_LINETO), | |
2871 CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 10.0f, | |
2872 crBBox.bottom + fHeight * 4 / 15.0f), | |
2873 PWLPT_LINETO), | |
2874 CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 10.0f, | |
2875 crBBox.top - fHeight / 15.0f), | |
2876 PWLPT_LINETO), | |
2877 CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 10.0f, | |
2878 crBBox.top - fHeight / 15.0f), | |
2879 PWLPT_LINETO), | |
2880 CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 10.0f, | |
2881 crBBox.bottom + fHeight / 15.0f), | |
2882 PWLPT_LINETO), | |
2883 CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 3 / 10.0f, | |
2884 crBBox.bottom + fHeight / 15.0f), | |
2885 PWLPT_LINETO), | |
2886 CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 10.0f, | |
2887 crBBox.bottom + fHeight * 4 / 15.0f), | |
2888 PWLPT_LINETO), | |
2889 CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 3 / 10.0f, | |
2890 crBBox.bottom + fHeight / 15.0f), | |
2891 PWLPT_LINETO), | |
2892 CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 3 / 10.0f, | |
2893 crBBox.bottom + fHeight * 4 / 15.0f), | |
2894 PWLPT_LINETO), | |
2895 CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 10.0f, | |
2896 crBBox.bottom + fHeight * 4 / 15.0f), | |
2897 PWLPT_LINETO), | |
2898 CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 5.0f, | |
2899 crBBox.top - fHeight * 4 / 15.0f), | |
2900 PWLPT_MOVETO), | |
2901 CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 5.0f, | |
2902 crBBox.top - fHeight * 4 / 15.0f), | |
2903 PWLPT_LINETO), | |
2904 CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 5.0f, | |
2905 crBBox.top - fHeight * 7 / 15.0f), | |
2906 PWLPT_MOVETO), | |
2907 CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 5.0f, | |
2908 crBBox.top - fHeight * 7 / 15.0f), | |
2909 PWLPT_LINETO), | |
2910 CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 5.0f, | |
2911 crBBox.top - fHeight * 10 / 15.0f), | |
2912 PWLPT_MOVETO), | |
2913 CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 3 / 10.0f, | |
2914 crBBox.top - fHeight * 10 / 15.0f), | |
2915 PWLPT_LINETO)}; | |
2916 | |
2917 if (type == PWLPT_STREAM) | |
2918 sPathData = GetAppStreamFromArray(PathArray, 17); | |
2919 else | |
2920 GetPathDataFromArray(path, PathArray, 17); | |
2921 } | |
2922 | |
2923 void CPWL_Utils::GetGraphics_Paragraph(CFX_ByteString& sPathData, | |
2924 CFX_PathData& path, | |
2925 const CFX_FloatRect& crBBox, | |
2926 const PWL_PATH_TYPE type) { | |
2927 FX_FLOAT fWidth = crBBox.right - crBBox.left; | |
2928 FX_FLOAT fHeight = crBBox.top - crBBox.bottom; | |
2929 | |
2930 CPWL_PathData PathArray[] = { | |
2931 CPWL_PathData( | |
2932 CPWL_Point(crBBox.left + fWidth / 2.0f, crBBox.top - fHeight / 15.0f), | |
2933 PWLPT_MOVETO), | |
2934 CPWL_PathData( | |
2935 CPWL_Point(crBBox.left + fWidth * 0.7f, crBBox.top - fHeight / 15.0f), | |
2936 PWLPT_LINETO), | |
2937 CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.7f, | |
2938 crBBox.bottom + fHeight / 15.0f), | |
2939 PWLPT_LINETO), | |
2940 CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.634f, | |
2941 crBBox.bottom + fHeight / 15.0f), | |
2942 PWLPT_LINETO), | |
2943 CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.634f, | |
2944 crBBox.top - fHeight * 2 / 15.0f), | |
2945 PWLPT_LINETO), | |
2946 CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.566f, | |
2947 crBBox.top - fHeight * 2 / 15.0f), | |
2948 PWLPT_LINETO), | |
2949 CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.566f, | |
2950 crBBox.bottom + fHeight / 15.0f), | |
2951 PWLPT_LINETO), | |
2952 CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 2.0f, | |
2953 crBBox.bottom + fHeight / 15.0f), | |
2954 PWLPT_LINETO), | |
2955 CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 2.0f, | |
2956 crBBox.top - fHeight / 15.0f - fHeight * 0.4f), | |
2957 PWLPT_LINETO), | |
2958 CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.2f, | |
2959 crBBox.top - fHeight / 15.0f - fHeight * 0.4f), | |
2960 PWLPT_BEZIERTO), | |
2961 CPWL_PathData( | |
2962 CPWL_Point(crBBox.left + fWidth * 0.2f, crBBox.top - fHeight / 15.0f), | |
2963 PWLPT_BEZIERTO), | |
2964 CPWL_PathData( | |
2965 CPWL_Point(crBBox.left + fWidth / 2.0f, crBBox.top - fHeight / 15.0f), | |
2966 PWLPT_BEZIERTO)}; | |
2967 | |
2968 if (type == PWLPT_STREAM) | |
2969 sPathData = GetAppStreamFromArray(PathArray, 12); | |
2970 else | |
2971 GetPathDataFromArray(path, PathArray, 12); | |
2972 } | |
2973 | |
2974 void CPWL_Utils::GetGraphics_RightArrow(CFX_ByteString& sPathData, | |
2975 CFX_PathData& path, | |
2976 const CFX_FloatRect& crBBox, | |
2977 const PWL_PATH_TYPE type) { | |
2978 FX_FLOAT fWidth = crBBox.right - crBBox.left; | |
2979 FX_FLOAT fHeight = crBBox.top - crBBox.bottom; | |
2980 | |
2981 CPWL_PathData PathArray[] = { | |
2982 CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 15.0f, | |
2983 crBBox.top - fHeight / 2.0f), | |
2984 PWLPT_MOVETO), | |
2985 CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 2.0f + fWidth / 8.0f, | |
2986 crBBox.bottom + fHeight / 5.0f), | |
2987 PWLPT_LINETO), | |
2988 CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 2.0f, | |
2989 crBBox.bottom + fHeight / 5.0f), | |
2990 PWLPT_LINETO), | |
2991 CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 15.0f - fWidth * 0.15f, | |
2992 crBBox.top - fHeight / 2.0f - fWidth / 25.0f), | |
2993 PWLPT_LINETO), | |
2994 CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.1f, | |
2995 crBBox.top - fHeight / 2.0f - fWidth / 25.0f), | |
2996 PWLPT_LINETO), | |
2997 CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.1f, | |
2998 crBBox.top - fHeight / 2.0f + fWidth / 25.0f), | |
2999 PWLPT_LINETO), | |
3000 CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 15.0f - fWidth * 0.15f, | |
3001 crBBox.top - fHeight / 2.0f + fWidth / 25.0f), | |
3002 PWLPT_LINETO), | |
3003 CPWL_PathData( | |
3004 CPWL_Point(crBBox.left + fWidth / 2.0f, crBBox.top - fHeight / 5.0f), | |
3005 PWLPT_LINETO), | |
3006 CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 2.0f + fWidth / 8.0f, | |
3007 crBBox.top - fHeight / 5.0f), | |
3008 PWLPT_LINETO), | |
3009 CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 15.0f, | |
3010 crBBox.top - fHeight / 2.0f), | |
3011 PWLPT_LINETO)}; | |
3012 | |
3013 if (type == PWLPT_STREAM) | |
3014 sPathData = GetAppStreamFromArray(PathArray, 10); | |
3015 else | |
3016 GetPathDataFromArray(path, PathArray, 10); | |
3017 } | |
3018 | |
3019 void CPWL_Utils::GetGraphics_RightPointer(CFX_ByteString& sPathData, | |
3020 CFX_PathData& path, | |
3021 const CFX_FloatRect& crBBox, | |
3022 const PWL_PATH_TYPE type) { | |
3023 FX_FLOAT fWidth = crBBox.right - crBBox.left; | |
3024 FX_FLOAT fHeight = crBBox.top - crBBox.bottom; | |
3025 | |
3026 CPWL_PathData PathArray[] = { | |
3027 CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 30.0f, | |
3028 crBBox.top - fHeight / 2.0f), | |
3029 PWLPT_MOVETO), | |
3030 CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 30.0f, | |
3031 crBBox.bottom + fHeight / 6.0f), | |
3032 PWLPT_LINETO), | |
3033 CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 4 / 15.0f, | |
3034 crBBox.top - fHeight / 2.0f), | |
3035 PWLPT_LINETO), | |
3036 CPWL_PathData( | |
3037 CPWL_Point(crBBox.left + fWidth / 30.0f, crBBox.top - fHeight / 6.0f), | |
3038 PWLPT_LINETO), | |
3039 CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 30.0f, | |
3040 crBBox.top - fHeight / 2.0f), | |
3041 PWLPT_LINETO)}; | |
3042 | |
3043 if (type == PWLPT_STREAM) | |
3044 sPathData = GetAppStreamFromArray(PathArray, 5); | |
3045 else | |
3046 GetPathDataFromArray(path, PathArray, 5); | |
3047 } | |
3048 | |
3049 void CPWL_Utils::GetGraphics_Star(CFX_ByteString& sPathData, | |
3050 CFX_PathData& path, | |
3051 const CFX_FloatRect& crBBox, | |
3052 const PWL_PATH_TYPE type) { | |
3053 FX_FLOAT fLongRadius = | |
3054 (crBBox.top - crBBox.bottom) / (1 + (FX_FLOAT)cos(FX_PI / 5.0f)); | |
3055 fLongRadius = fLongRadius * 0.7f; | |
3056 FX_FLOAT fShortRadius = fLongRadius * 0.55f; | |
3057 CFX_FloatPoint ptCenter = CFX_FloatPoint((crBBox.left + crBBox.right) / 2.0f, | |
3058 (crBBox.top + crBBox.bottom) / 2.0f); | |
3059 | |
3060 FX_FLOAT px1[5], py1[5]; | |
3061 FX_FLOAT px2[5], py2[5]; | |
3062 | |
3063 FX_FLOAT fAngel = FX_PI / 10.0f; | |
3064 | |
3065 for (int32_t i = 0; i < 5; i++) { | |
3066 px1[i] = ptCenter.x + fLongRadius * (FX_FLOAT)cos(fAngel); | |
3067 py1[i] = ptCenter.y + fLongRadius * (FX_FLOAT)sin(fAngel); | |
3068 | |
3069 fAngel += FX_PI * 2 / 5.0f; | |
3070 } | |
3071 | |
3072 fAngel = FX_PI / 5.0f + FX_PI / 10.0f; | |
3073 | |
3074 for (int32_t j = 0; j < 5; j++) { | |
3075 px2[j] = ptCenter.x + fShortRadius * (FX_FLOAT)cos(fAngel); | |
3076 py2[j] = ptCenter.y + fShortRadius * (FX_FLOAT)sin(fAngel); | |
3077 | |
3078 fAngel += FX_PI * 2 / 5.0f; | |
3079 } | |
3080 | |
3081 CPWL_PathData PathArray[11]; | |
3082 PathArray[0] = CPWL_PathData(CPWL_Point(px1[0], py1[0]), PWLPT_MOVETO); | |
3083 PathArray[1] = CPWL_PathData(CPWL_Point(px2[0], py2[0]), PWLPT_LINETO); | |
3084 | |
3085 for (int32_t k = 0; k < 4; k++) { | |
3086 PathArray[(k + 1) * 2] = | |
3087 CPWL_PathData(CPWL_Point(px1[k + 1], py1[k + 1]), PWLPT_LINETO); | |
3088 PathArray[(k + 1) * 2 + 1] = | |
3089 CPWL_PathData(CPWL_Point(px2[k + 1], py2[k + 1]), PWLPT_LINETO); | |
3090 } | |
3091 | |
3092 PathArray[10] = CPWL_PathData(CPWL_Point(px1[0], py1[0]), PWLPT_LINETO); | |
3093 | |
3094 if (type == PWLPT_STREAM) | |
3095 sPathData = GetAppStreamFromArray(PathArray, 11); | |
3096 else | |
3097 GetPathDataFromArray(path, PathArray, 11); | |
3098 } | |
3099 | |
3100 void CPWL_Utils::GetGraphics_UpArrow(CFX_ByteString& sPathData, | |
3101 CFX_PathData& path, | |
3102 const CFX_FloatRect& crBBox, | |
3103 const PWL_PATH_TYPE type) { | |
3104 FX_FLOAT fWidth = crBBox.right - crBBox.left; | |
3105 FX_FLOAT fHeight = crBBox.top - crBBox.bottom; | |
3106 | |
3107 CPWL_PathData PathArray[] = { | |
3108 CPWL_PathData( | |
3109 CPWL_Point(crBBox.left + fWidth / 2.0f, crBBox.top - fHeight / 15.0f), | |
3110 PWLPT_MOVETO), | |
3111 CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 10.0f, | |
3112 crBBox.top - fWidth * 3 / 5.0f), | |
3113 PWLPT_LINETO), | |
3114 CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.6f, | |
3115 crBBox.top - fWidth * 3 / 5.0f), | |
3116 PWLPT_LINETO), | |
3117 CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.6f, | |
3118 crBBox.bottom + fHeight / 15.0f), | |
3119 PWLPT_LINETO), | |
3120 CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.4f, | |
3121 crBBox.bottom + fHeight / 15.0f), | |
3122 PWLPT_LINETO), | |
3123 CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.4f, | |
3124 crBBox.top - fWidth * 3 / 5.0f), | |
3125 PWLPT_LINETO), | |
3126 CPWL_PathData( | |
3127 CPWL_Point(crBBox.left + fWidth / 10, crBBox.top - fWidth * 3 / 5.0f), | |
3128 PWLPT_LINETO), | |
3129 CPWL_PathData( | |
3130 CPWL_Point(crBBox.left + fWidth / 2.0f, crBBox.top - fHeight / 15.0f), | |
3131 PWLPT_LINETO)}; | |
3132 | |
3133 if (type == PWLPT_STREAM) | |
3134 sPathData = GetAppStreamFromArray(PathArray, 8); | |
3135 else | |
3136 GetPathDataFromArray(path, PathArray, 8); | |
3137 } | |
3138 | |
3139 void CPWL_Utils::GetGraphics_UpLeftArrow(CFX_ByteString& sPathData, | |
3140 CFX_PathData& path, | |
3141 const CFX_FloatRect& crBBox, | |
3142 const PWL_PATH_TYPE type) { | |
3143 FX_FLOAT fWidth = crBBox.right - crBBox.left; | |
3144 FX_FLOAT fHeight = crBBox.top - crBBox.bottom; | |
3145 CPWL_Point leftup(crBBox.left, crBBox.top); | |
3146 CPWL_Point rightdown(crBBox.right, crBBox.bottom); | |
3147 FX_FLOAT k = -fHeight / fWidth; | |
3148 CPWL_Point tail; | |
3149 tail.x = crBBox.left + fWidth * 4 / 5.0f; | |
3150 tail.y = k * (tail.x - crBBox.right) + rightdown.y; | |
3151 | |
3152 CPWL_PathData PathArray[] = { | |
3153 CPWL_PathData( | |
3154 CPWL_Point( | |
3155 crBBox.left + fWidth / 20.0f, | |
3156 k * (crBBox.left + fWidth / 20.0f - rightdown.x) + rightdown.y), | |
3157 PWLPT_MOVETO), | |
3158 CPWL_PathData(CPWL_Point(fHeight * 17 / 60.0f / k + tail.x + | |
3159 fWidth / 10.0f + fWidth / 5.0f, | |
3160 -fWidth / 5.0f / k + tail.y - | |
3161 fWidth / 10.0f / k + fHeight * 17 / 60.0f), | |
3162 PWLPT_LINETO), | |
3163 CPWL_PathData( | |
3164 CPWL_Point(fHeight * 17 / 60.0f / k + tail.x + fWidth / 10.0f, | |
3165 tail.y - fWidth / 10.0f / k + fHeight * 17 / 60.0f), | |
3166 PWLPT_LINETO), | |
3167 CPWL_PathData( | |
3168 CPWL_Point(tail.x + fWidth / 10.0f, tail.y - fWidth / 10.0f / k), | |
3169 PWLPT_LINETO), | |
3170 CPWL_PathData( | |
3171 CPWL_Point(tail.x - fWidth / 10.0f, tail.y + fWidth / 10.0f / k), | |
3172 PWLPT_LINETO), | |
3173 CPWL_PathData( | |
3174 CPWL_Point(fHeight * 17 / 60.0f / k + tail.x - fWidth / 10.0f, | |
3175 tail.y + fWidth / 10.0f / k + fHeight * 17 / 60.0f), | |
3176 PWLPT_LINETO), | |
3177 CPWL_PathData(CPWL_Point(fHeight * 17 / 60.0f / k + tail.x - | |
3178 fWidth / 10.0f - fWidth / 5.0f, | |
3179 fWidth / 5.0f / k + tail.y + fWidth / 10.0f / k + | |
3180 fHeight * 17 / 60.0f), | |
3181 PWLPT_LINETO), | |
3182 CPWL_PathData( | |
3183 CPWL_Point( | |
3184 crBBox.left + fWidth / 20.0f, | |
3185 k * (crBBox.left + fWidth / 20.0f - rightdown.x) + rightdown.y), | |
3186 PWLPT_LINETO)}; | |
3187 | |
3188 if (type == PWLPT_STREAM) | |
3189 sPathData = GetAppStreamFromArray(PathArray, 8); | |
3190 else | |
3191 GetPathDataFromArray(path, PathArray, 8); | |
3192 } | |
3193 | |
3194 void CPWL_Utils::GetGraphics_Graph(CFX_ByteString& sPathData, | |
3195 CFX_PathData& path, | |
3196 const CFX_FloatRect& crBBox, | |
3197 const PWL_PATH_TYPE type) { | |
3198 FX_FLOAT fWidth = crBBox.right - crBBox.left; | |
3199 FX_FLOAT fHeight = crBBox.top - crBBox.bottom; | |
3200 | |
3201 CPWL_PathData PathArray[] = { | |
3202 CPWL_PathData( | |
3203 CPWL_Point(crBBox.left + fWidth * 0.05f, crBBox.top - fWidth * 0.15f), | |
3204 PWLPT_MOVETO), | |
3205 CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.25f, | |
3206 crBBox.top - fHeight * 0.15f), | |
3207 PWLPT_LINETO), | |
3208 CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.275f, | |
3209 crBBox.bottom + fHeight * 0.08f), | |
3210 PWLPT_LINETO), | |
3211 CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.05f, | |
3212 crBBox.bottom + fHeight * 0.08f), | |
3213 PWLPT_LINETO), | |
3214 CPWL_PathData( | |
3215 CPWL_Point(crBBox.left + fWidth * 0.05f, crBBox.top - fWidth * 0.15f), | |
3216 PWLPT_LINETO), | |
3217 | |
3218 CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.275f, | |
3219 crBBox.top - fWidth * 0.45f), | |
3220 PWLPT_MOVETO), | |
3221 CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.475f, | |
3222 crBBox.top - fWidth * 0.45f), | |
3223 PWLPT_LINETO), | |
3224 CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.475f, | |
3225 crBBox.bottom + fHeight * 0.08f), | |
3226 PWLPT_LINETO), | |
3227 CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.275f, | |
3228 crBBox.bottom + fHeight * 0.08f), | |
3229 PWLPT_LINETO), | |
3230 CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.275f, | |
3231 crBBox.top - fWidth * 0.45f), | |
3232 PWLPT_LINETO), | |
3233 | |
3234 CPWL_PathData( | |
3235 CPWL_Point(crBBox.left + fWidth * 0.5f, crBBox.top - fHeight * 0.05f), | |
3236 PWLPT_MOVETO), | |
3237 CPWL_PathData( | |
3238 CPWL_Point(crBBox.left + fWidth * 0.7f, crBBox.top - fHeight * 0.05f), | |
3239 PWLPT_LINETO), | |
3240 CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.7f, | |
3241 crBBox.bottom + fHeight * 0.08f), | |
3242 PWLPT_LINETO), | |
3243 CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.5f, | |
3244 crBBox.bottom + fHeight * 0.08f), | |
3245 PWLPT_LINETO), | |
3246 CPWL_PathData( | |
3247 CPWL_Point(crBBox.left + fWidth * 0.5f, crBBox.top - fHeight * 0.05f), | |
3248 PWLPT_LINETO), | |
3249 | |
3250 CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.725f, | |
3251 crBBox.top - fWidth * 0.35f), | |
3252 PWLPT_MOVETO), | |
3253 CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.925f, | |
3254 crBBox.top - fWidth * 0.35f), | |
3255 PWLPT_LINETO), | |
3256 CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.925f, | |
3257 crBBox.bottom + fHeight * 0.08f), | |
3258 PWLPT_LINETO), | |
3259 CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.725f, | |
3260 crBBox.bottom + fHeight * 0.08f), | |
3261 PWLPT_LINETO), | |
3262 CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.725f, | |
3263 crBBox.top - fWidth * 0.35f), | |
3264 PWLPT_LINETO)}; | |
3265 | |
3266 if (type == PWLPT_STREAM) | |
3267 sPathData = GetAppStreamFromArray(PathArray, 20); | |
3268 else | |
3269 GetPathDataFromArray(path, PathArray, 20); | |
3270 } | |
3271 | |
3272 void CPWL_Utils::GetGraphics_Paperclip(CFX_ByteString& sPathData, | |
3273 CFX_PathData& path, | |
3274 const CFX_FloatRect& crBBox, | |
3275 const PWL_PATH_TYPE type) { | |
3276 FX_FLOAT fWidth = crBBox.right - crBBox.left; | |
3277 FX_FLOAT fHeight = crBBox.top - crBBox.bottom; | |
3278 | |
3279 CPWL_PathData PathArray[] = { | |
3280 CPWL_PathData( | |
3281 CPWL_Point(crBBox.left + fWidth / 60, crBBox.top - fHeight * 0.25f), | |
3282 PWLPT_MOVETO), | |
3283 CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 60, | |
3284 crBBox.bottom + fHeight * 0.25f), | |
3285 PWLPT_LINETO), | |
3286 CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 60, | |
3287 crBBox.bottom + fHeight * 0.25f - | |
3288 fWidth * 57 / 60.0f * 0.35f), | |
3289 PWLPT_BEZIERTO), | |
3290 CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 30, | |
3291 crBBox.bottom + fHeight * 0.25f - | |
3292 fWidth * 57 / 60.0f * 0.35f), | |
3293 PWLPT_BEZIERTO), | |
3294 CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 30, | |
3295 crBBox.bottom + fHeight * 0.25f), | |
3296 PWLPT_BEZIERTO), | |
3297 | |
3298 CPWL_PathData( | |
3299 CPWL_Point(crBBox.right - fWidth / 30, crBBox.top - fHeight * 0.33f), | |
3300 PWLPT_LINETO), | |
3301 CPWL_PathData( | |
3302 CPWL_Point(crBBox.right - fWidth / 30, | |
3303 crBBox.top - fHeight * 0.33f + fHeight / 15 * 0.5f), | |
3304 PWLPT_BEZIERTO), | |
3305 CPWL_PathData( | |
3306 CPWL_Point(crBBox.right - fWidth / 30 - fWidth * 0.12f, | |
3307 crBBox.top - fHeight * 0.33f + fHeight / 15 * 0.5f), | |
3308 PWLPT_BEZIERTO), | |
3309 CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 30 - fWidth * 0.12f, | |
3310 crBBox.top - fHeight * 0.33f), | |
3311 PWLPT_BEZIERTO), | |
3312 | |
3313 CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 30 - fWidth * 0.12f, | |
3314 crBBox.bottom + fHeight * 0.2f), | |
3315 PWLPT_LINETO), | |
3316 CPWL_PathData( | |
3317 CPWL_Point(crBBox.right - fWidth / 30 - fWidth * 0.12f, | |
3318 crBBox.bottom + fHeight * 0.2f - | |
3319 (fWidth * 57 / 60.0f - fWidth * 0.24f) * 0.25f), | |
3320 PWLPT_BEZIERTO), | |
3321 CPWL_PathData( | |
3322 CPWL_Point(crBBox.left + fWidth / 60 + fWidth * 0.12f, | |
3323 crBBox.bottom + fHeight * 0.2f - | |
3324 (fWidth * 57 / 60.0f - fWidth * 0.24f) * 0.25f), | |
3325 PWLPT_BEZIERTO), | |
3326 CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 60 + fWidth * 0.12f, | |
3327 crBBox.bottom + fHeight * 0.2f), | |
3328 PWLPT_BEZIERTO), | |
3329 | |
3330 CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 60 + fWidth * 0.12f, | |
3331 crBBox.top - fHeight * 0.2f), | |
3332 PWLPT_LINETO), | |
3333 CPWL_PathData( | |
3334 CPWL_Point(crBBox.left + fWidth / 60 + fWidth * 0.12f, | |
3335 crBBox.top - fHeight * 0.2f + | |
3336 (fWidth * 11 / 12.0f - fWidth * 0.36f) * 0.25f), | |
3337 PWLPT_BEZIERTO), | |
3338 CPWL_PathData( | |
3339 CPWL_Point(crBBox.right - fWidth / 15 - fWidth * 0.24f, | |
3340 crBBox.top - fHeight * 0.2f + | |
3341 (fWidth * 11 / 12.0f - fWidth * 0.36f) * 0.25f), | |
3342 PWLPT_BEZIERTO), | |
3343 CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 15 - fWidth * 0.24f, | |
3344 crBBox.top - fHeight * 0.2f), | |
3345 PWLPT_BEZIERTO), | |
3346 | |
3347 CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 15 - fWidth * 0.24f, | |
3348 crBBox.bottom + fHeight * 0.25f), | |
3349 PWLPT_LINETO), | |
3350 CPWL_PathData( | |
3351 CPWL_Point(crBBox.right - fWidth / 15 - fWidth * 0.24f, | |
3352 crBBox.bottom + fHeight * 0.25f - | |
3353 (fWidth * 14 / 15.0f - fWidth * 0.53f) * 0.25f), | |
3354 PWLPT_BEZIERTO), | |
3355 CPWL_PathData( | |
3356 CPWL_Point(crBBox.left + fWidth * 0.29f, | |
3357 crBBox.bottom + fHeight * 0.25f - | |
3358 (fWidth * 14 / 15.0f - fWidth * 0.53f) * 0.25f), | |
3359 PWLPT_BEZIERTO), | |
3360 CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.29f, | |
3361 crBBox.bottom + fHeight * 0.25f), | |
3362 PWLPT_BEZIERTO), | |
3363 | |
3364 CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.29f, | |
3365 crBBox.top - fHeight * 0.33f), | |
3366 PWLPT_LINETO), | |
3367 CPWL_PathData( | |
3368 CPWL_Point(crBBox.left + fWidth * 0.29f, | |
3369 crBBox.top - fHeight * 0.33f + fWidth * 0.12f * 0.35f), | |
3370 PWLPT_BEZIERTO), | |
3371 CPWL_PathData( | |
3372 CPWL_Point(crBBox.left + fWidth * 0.17f, | |
3373 crBBox.top - fHeight * 0.33f + fWidth * 0.12f * 0.35f), | |
3374 PWLPT_BEZIERTO), | |
3375 CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.17f, | |
3376 crBBox.top - fHeight * 0.33f), | |
3377 PWLPT_BEZIERTO), | |
3378 | |
3379 CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.17f, | |
3380 crBBox.bottom + fHeight * 0.3f), | |
3381 PWLPT_LINETO), | |
3382 CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.17f, | |
3383 crBBox.bottom + fHeight * 0.3f - | |
3384 fWidth * (14 / 15.0f - 0.29f) * 0.35f), | |
3385 PWLPT_BEZIERTO), | |
3386 CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 15 - fWidth * 0.12f, | |
3387 crBBox.bottom + fHeight * 0.3f - | |
3388 fWidth * (14 / 15.0f - 0.29f) * 0.35f), | |
3389 PWLPT_BEZIERTO), | |
3390 CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 15 - fWidth * 0.12f, | |
3391 crBBox.bottom + fHeight * 0.3f), | |
3392 PWLPT_BEZIERTO), | |
3393 | |
3394 CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 15 - fWidth * 0.12f, | |
3395 crBBox.top - fHeight * 0.25f), | |
3396 PWLPT_LINETO), | |
3397 CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 15 - fWidth * 0.12f, | |
3398 crBBox.top - fHeight * 0.25f + | |
3399 fWidth * 0.35f * (11 / 12.0f - 0.12f)), | |
3400 PWLPT_BEZIERTO), | |
3401 CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 60, | |
3402 crBBox.top - fHeight * 0.25f + | |
3403 fWidth * 0.35f * (11 / 12.0f - 0.12f)), | |
3404 PWLPT_BEZIERTO), | |
3405 CPWL_PathData( | |
3406 CPWL_Point(crBBox.left + fWidth / 60, crBBox.top - fHeight * 0.25f), | |
3407 PWLPT_BEZIERTO)}; | |
3408 | |
3409 if (type == PWLPT_STREAM) | |
3410 sPathData = GetAppStreamFromArray(PathArray, 33); | |
3411 else | |
3412 GetPathDataFromArray(path, PathArray, 33); | |
3413 } | |
3414 | |
3415 void CPWL_Utils::GetGraphics_Attachment(CFX_ByteString& sPathData, | |
3416 CFX_PathData& path, | |
3417 const CFX_FloatRect& crBBox, | |
3418 const PWL_PATH_TYPE type) { | |
3419 FX_FLOAT fWidth = crBBox.right - crBBox.left; | |
3420 FX_FLOAT fHeight = crBBox.top - crBBox.bottom; | |
3421 | |
3422 CPWL_PathData PathArray[] = { | |
3423 CPWL_PathData( | |
3424 CPWL_Point(crBBox.left + fWidth * 0.25f, crBBox.top - fHeight * 0.1f), | |
3425 PWLPT_MOVETO), | |
3426 CPWL_PathData( | |
3427 CPWL_Point(crBBox.left + fWidth * 0.4f, crBBox.top - fHeight * 0.23f), | |
3428 PWLPT_LINETO), | |
3429 CPWL_PathData( | |
3430 CPWL_Point(crBBox.left + fWidth * 0.4f, crBBox.top - fHeight * 0.5f), | |
3431 PWLPT_LINETO), | |
3432 CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.4f, | |
3433 crBBox.top - fHeight * 0.5f + fWidth * 0.04f), | |
3434 PWLPT_BEZIERTO), | |
3435 CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.6f, | |
3436 crBBox.top - fHeight * 0.5f + fWidth * 0.04f), | |
3437 PWLPT_BEZIERTO), | |
3438 CPWL_PathData( | |
3439 CPWL_Point(crBBox.left + fWidth * 0.6f, crBBox.top - fHeight * 0.5f), | |
3440 PWLPT_BEZIERTO), | |
3441 | |
3442 CPWL_PathData( | |
3443 CPWL_Point(crBBox.left + fWidth * 0.6f, crBBox.top - fHeight * 0.23f), | |
3444 PWLPT_LINETO), | |
3445 CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.25f, | |
3446 crBBox.top - fHeight * 0.1f), | |
3447 PWLPT_LINETO), | |
3448 CPWL_PathData( | |
3449 CPWL_Point(crBBox.left + fWidth * 0.25f, crBBox.top - fHeight * 0.1f), | |
3450 PWLPT_LINETO), | |
3451 CPWL_PathData( | |
3452 CPWL_Point(crBBox.left + fWidth * 0.4f, crBBox.top - fHeight * 0.23f), | |
3453 PWLPT_LINETO), | |
3454 CPWL_PathData( | |
3455 CPWL_Point(crBBox.left + fWidth * 0.6f, crBBox.top - fHeight * 0.23f), | |
3456 PWLPT_LINETO), | |
3457 | |
3458 CPWL_PathData( | |
3459 CPWL_Point(crBBox.left + fWidth * 0.4f, crBBox.top - fHeight * 0.5f), | |
3460 PWLPT_MOVETO), | |
3461 CPWL_PathData( | |
3462 CPWL_Point(crBBox.left + fWidth * 0.4f - fWidth * 0.25f * 0.4f, | |
3463 crBBox.top - fHeight * 0.5f), | |
3464 PWLPT_BEZIERTO), | |
3465 CPWL_PathData( | |
3466 CPWL_Point(crBBox.left + fWidth * 0.15f, | |
3467 crBBox.top - fHeight * 0.65f + fHeight * 0.15f * 0.4f), | |
3468 PWLPT_BEZIERTO), | |
3469 CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.15f, | |
3470 crBBox.top - fHeight * 0.65f), | |
3471 PWLPT_BEZIERTO), | |
3472 | |
3473 CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.15f, | |
3474 crBBox.top - fHeight * 0.65f), | |
3475 PWLPT_LINETO), | |
3476 CPWL_PathData( | |
3477 CPWL_Point(crBBox.right - fWidth * 0.15f, | |
3478 crBBox.top - fHeight * 0.65f + fHeight * 0.15f * 0.4f), | |
3479 PWLPT_BEZIERTO), | |
3480 CPWL_PathData( | |
3481 CPWL_Point(crBBox.left + fWidth * 0.6f + fWidth * 0.25f * 0.4f, | |
3482 crBBox.top - fHeight * 0.5f), | |
3483 PWLPT_BEZIERTO), | |
3484 CPWL_PathData( | |
3485 CPWL_Point(crBBox.left + fWidth * 0.6f, crBBox.top - fHeight * 0.5f), | |
3486 PWLPT_BEZIERTO), | |
3487 | |
3488 CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.6f, | |
3489 crBBox.top - fHeight * 0.5f + fWidth * 0.04f), | |
3490 PWLPT_BEZIERTO), | |
3491 CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.4f, | |
3492 crBBox.top - fHeight * 0.5f + fWidth * 0.04f), | |
3493 PWLPT_BEZIERTO), | |
3494 CPWL_PathData( | |
3495 CPWL_Point(crBBox.left + fWidth * 0.4f, crBBox.top - fHeight * 0.5f), | |
3496 PWLPT_BEZIERTO), | |
3497 | |
3498 CPWL_PathData( | |
3499 CPWL_Point(crBBox.left + fWidth * 0.5f, crBBox.top - fHeight * 0.65f), | |
3500 PWLPT_MOVETO), | |
3501 CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.5f, | |
3502 crBBox.bottom + fHeight * 0.1f), | |
3503 PWLPT_LINETO)}; | |
3504 | |
3505 if (type == PWLPT_STREAM) | |
3506 sPathData = GetAppStreamFromArray(PathArray, 24); | |
3507 else | |
3508 GetPathDataFromArray(path, PathArray, 24); | |
3509 } | |
3510 | |
3511 void CPWL_Utils::GetGraphics_Tag(CFX_ByteString& sPathData, | |
3512 CFX_PathData& path, | |
3513 const CFX_FloatRect& crBBox, | |
3514 const PWL_PATH_TYPE type) { | |
3515 FX_FLOAT fWidth = crBBox.right - crBBox.left; | |
3516 FX_FLOAT fHeight = crBBox.top - crBBox.bottom; | |
3517 | |
3518 CPWL_PathData PathArray[] = { | |
3519 CPWL_PathData( | |
3520 CPWL_Point(crBBox.left + fWidth * 0.4f, crBBox.top - fHeight * 0.1f), | |
3521 PWLPT_MOVETO), | |
3522 CPWL_PathData( | |
3523 CPWL_Point(crBBox.left + fWidth * 0.1f, crBBox.top - fHeight * 0.5f), | |
3524 PWLPT_LINETO), | |
3525 CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.3f, | |
3526 crBBox.bottom + fHeight * 0.1f), | |
3527 PWLPT_LINETO), | |
3528 CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.1f, | |
3529 crBBox.bottom + fHeight * 0.1f), | |
3530 PWLPT_LINETO), | |
3531 CPWL_PathData( | |
3532 CPWL_Point(crBBox.right - fWidth * 0.1f, crBBox.top - fHeight * 0.1f), | |
3533 PWLPT_LINETO), | |
3534 CPWL_PathData( | |
3535 CPWL_Point(crBBox.left + fWidth * 0.4f, crBBox.top - fHeight * 0.1f), | |
3536 PWLPT_LINETO), | |
3537 CPWL_PathData( | |
3538 CPWL_Point(crBBox.left + fWidth * 0.4f, crBBox.top - fHeight * 0.3f), | |
3539 PWLPT_MOVETO), | |
3540 CPWL_PathData( | |
3541 CPWL_Point(crBBox.right - fWidth * 0.2f, crBBox.top - fHeight * 0.3f), | |
3542 PWLPT_LINETO), | |
3543 CPWL_PathData( | |
3544 CPWL_Point(crBBox.left + fWidth * 0.4f, crBBox.top - fHeight * 0.5f), | |
3545 PWLPT_MOVETO), | |
3546 CPWL_PathData( | |
3547 CPWL_Point(crBBox.right - fWidth * 0.2f, crBBox.top - fHeight * 0.5f), | |
3548 PWLPT_LINETO), | |
3549 CPWL_PathData( | |
3550 CPWL_Point(crBBox.left + fWidth * 0.4f, crBBox.top - fHeight * 0.7f), | |
3551 PWLPT_MOVETO), | |
3552 CPWL_PathData( | |
3553 CPWL_Point(crBBox.right - fWidth * 0.2f, crBBox.top - fHeight * 0.7f), | |
3554 PWLPT_LINETO)}; | |
3555 | |
3556 if (type == PWLPT_STREAM) | |
3557 sPathData = GetAppStreamFromArray(PathArray, 12); | |
3558 else | |
3559 GetPathDataFromArray(path, PathArray, 12); | |
3560 } | |
3561 | |
3562 void CPWL_Utils::GetGraphics_Foxit(CFX_ByteString& sPathData, | |
3563 CFX_PathData& path, | |
3564 const CFX_FloatRect& crBBox, | |
3565 const PWL_PATH_TYPE type) { | |
3566 FX_FLOAT fOutWidth = crBBox.right - crBBox.left; | |
3567 FX_FLOAT fOutHeight = crBBox.top - crBBox.bottom; | |
3568 | |
3569 CFX_FloatRect crInBox = crBBox; | |
3570 crInBox.left = crBBox.left + fOutWidth * 0.08f; | |
3571 crInBox.right = crBBox.right - fOutWidth * 0.08f; | |
3572 crInBox.top = crBBox.top - fOutHeight * 0.08f; | |
3573 crInBox.bottom = crBBox.bottom + fOutHeight * 0.08f; | |
3574 | |
3575 FX_FLOAT fWidth = crInBox.right - crInBox.left; | |
3576 FX_FLOAT fHeight = crInBox.top - crInBox.bottom; | |
3577 | |
3578 CPWL_PathData PathArray[] = { | |
3579 CPWL_PathData(CPWL_Point(crInBox.left, crInBox.top), PWLPT_MOVETO), | |
3580 CPWL_PathData(CPWL_Point(crInBox.left + fWidth * 0.45f, crInBox.top), | |
3581 PWLPT_LINETO), | |
3582 CPWL_PathData(CPWL_Point(crInBox.left + fWidth * 0.45f, | |
3583 crInBox.top - FX_BEZIER * fHeight * 0.4f), | |
3584 PWLPT_BEZIERTO), | |
3585 CPWL_PathData( | |
3586 CPWL_Point(crInBox.left + fWidth * 0.45f - FX_BEZIER * fWidth * 0.45f, | |
3587 crInBox.top - fHeight * 0.4f), | |
3588 PWLPT_BEZIERTO), | |
3589 CPWL_PathData(CPWL_Point(crInBox.left, crInBox.top - fHeight * 0.4f), | |
3590 PWLPT_BEZIERTO), | |
3591 CPWL_PathData(CPWL_Point(crInBox.left, crInBox.top), PWLPT_LINETO), | |
3592 | |
3593 CPWL_PathData(CPWL_Point(crInBox.left + fWidth * 0.60f, crInBox.top), | |
3594 PWLPT_MOVETO), | |
3595 CPWL_PathData(CPWL_Point(crInBox.left + fWidth * 0.75f, crInBox.top), | |
3596 PWLPT_LINETO), | |
3597 CPWL_PathData(CPWL_Point(crInBox.left + fWidth * 0.75f, | |
3598 crInBox.top - FX_BEZIER * fHeight * 0.7f), | |
3599 PWLPT_BEZIERTO), | |
3600 CPWL_PathData( | |
3601 CPWL_Point(crInBox.left + fWidth * 0.75f - FX_BEZIER * fWidth * 0.75f, | |
3602 crInBox.top - fHeight * 0.7f), | |
3603 PWLPT_BEZIERTO), | |
3604 CPWL_PathData(CPWL_Point(crInBox.left, crInBox.top - fHeight * 0.7f), | |
3605 PWLPT_BEZIERTO), | |
3606 CPWL_PathData(CPWL_Point(crInBox.left, crInBox.top - fHeight * 0.55f), | |
3607 PWLPT_LINETO), | |
3608 CPWL_PathData(CPWL_Point(crInBox.left + FX_BEZIER * fWidth * 0.60f, | |
3609 crInBox.top - fHeight * 0.55f), | |
3610 PWLPT_BEZIERTO), | |
3611 CPWL_PathData(CPWL_Point(crInBox.left + fWidth * 0.60f, | |
3612 crInBox.top - FX_BEZIER * fHeight * 0.55f), | |
3613 PWLPT_BEZIERTO), | |
3614 CPWL_PathData(CPWL_Point(crInBox.left + fWidth * 0.60f, crInBox.top), | |
3615 PWLPT_BEZIERTO), | |
3616 | |
3617 CPWL_PathData(CPWL_Point(crInBox.left + fWidth * 0.90f, crInBox.top), | |
3618 PWLPT_MOVETO), | |
3619 CPWL_PathData(CPWL_Point(crInBox.left + fWidth * 0.90f, | |
3620 crInBox.top - FX_BEZIER * fHeight * 0.85f), | |
3621 PWLPT_BEZIERTO), | |
3622 CPWL_PathData( | |
3623 CPWL_Point(crInBox.left + fWidth * 0.90f - FX_BEZIER * fWidth * 0.90f, | |
3624 crInBox.top - fHeight * 0.85f), | |
3625 PWLPT_BEZIERTO), | |
3626 CPWL_PathData(CPWL_Point(crInBox.left, crInBox.top - fHeight * 0.85f), | |
3627 PWLPT_BEZIERTO), | |
3628 CPWL_PathData(CPWL_Point(crInBox.left, crInBox.bottom), PWLPT_LINETO), | |
3629 CPWL_PathData(CPWL_Point(crInBox.right, crInBox.bottom), PWLPT_LINETO), | |
3630 CPWL_PathData(CPWL_Point(crInBox.right, crInBox.top), PWLPT_LINETO), | |
3631 CPWL_PathData(CPWL_Point(crInBox.left + fWidth * 0.90f, crInBox.top), | |
3632 PWLPT_LINETO), | |
3633 }; | |
3634 | |
3635 if (type == PWLPT_STREAM) | |
3636 sPathData = GetAppStreamFromArray(PathArray, 23); | |
3637 else | |
3638 GetPathDataFromArray(path, PathArray, 23); | |
3639 } | |
3640 | |
3641 void CPWL_Color::ConvertColorType(int32_t other_nColorType) { | |
3642 switch (other_nColorType) { | |
3643 case COLORTYPE_TRANSPARENT: | |
3644 break; | |
3645 case COLORTYPE_GRAY: | |
3646 switch (other_nColorType) { | |
3647 case COLORTYPE_RGB: | |
3648 CPWL_Utils::ConvertGRAY2RGB(fColor1, fColor1, fColor2, fColor3); | |
3649 break; | |
3650 case COLORTYPE_CMYK: | |
3651 CPWL_Utils::ConvertGRAY2CMYK(fColor1, fColor1, fColor2, fColor3, | |
3652 fColor4); | |
3653 break; | |
3654 } | |
3655 break; | |
3656 case COLORTYPE_RGB: | |
3657 switch (other_nColorType) { | |
3658 case COLORTYPE_GRAY: | |
3659 CPWL_Utils::ConvertRGB2GRAY(fColor1, fColor2, fColor3, fColor1); | |
3660 break; | |
3661 case COLORTYPE_CMYK: | |
3662 CPWL_Utils::ConvertRGB2CMYK(fColor1, fColor2, fColor3, fColor1, | |
3663 fColor2, fColor3, fColor4); | |
3664 break; | |
3665 } | |
3666 break; | |
3667 case COLORTYPE_CMYK: | |
3668 switch (other_nColorType) { | |
3669 case COLORTYPE_GRAY: | |
3670 CPWL_Utils::ConvertCMYK2GRAY(fColor1, fColor2, fColor3, fColor4, | |
3671 fColor1); | |
3672 break; | |
3673 case COLORTYPE_RGB: | |
3674 CPWL_Utils::ConvertCMYK2RGB(fColor1, fColor2, fColor3, fColor4, | |
3675 fColor1, fColor2, fColor3); | |
3676 break; | |
3677 } | |
3678 break; | |
3679 } | |
3680 nColorType = other_nColorType; | |
3681 } | |
OLD | NEW |