Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(149)

Side by Side Diff: fpdfsdk/src/fsdk_baseannot.cpp

Issue 1265503005: clang-format all pdfium code. (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: sigh Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 PDFium Authors. All rights reserved. 1 // Copyright 2014 PDFium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6 6
7 #include "../include/fsdk_define.h" 7 #include "../include/fsdk_define.h"
8 #include "../include/fsdk_mgr.h" 8 #include "../include/fsdk_mgr.h"
9 #include "../include/fsdk_baseannot.h" 9 #include "../include/fsdk_baseannot.h"
10 10
11
12 //--------------------------------------------------------------------------- 11 //---------------------------------------------------------------------------
13 // CPDFSDK_DateTime 12 // CPDFSDK_DateTime
14 //--------------------------------------------------------------------------- 13 //---------------------------------------------------------------------------
15 int _gAfxGetTimeZoneInSeconds(FX_CHAR tzhour, uint8_t tzminute) 14 int _gAfxGetTimeZoneInSeconds(FX_CHAR tzhour, uint8_t tzminute) {
16 { 15 return (int)tzhour * 3600 + (int)tzminute * (tzhour >= 0 ? 60 : -60);
17 return (int)tzhour * 3600 + (int)tzminute * (tzhour >= 0 ? 60 : -60);
18 } 16 }
19 17
20 FX_BOOL _gAfxIsLeapYear(int16_t year) 18 FX_BOOL _gAfxIsLeapYear(int16_t year) {
21 { 19 return ((year % 400 == 0) || ((year % 4 == 0) && (year % 100 != 0)));
22 return ((year % 400 == 0) || ((year % 4 == 0) && (year % 100 != 0)));
23 } 20 }
24 21
25 FX_WORD _gAfxGetYearDays(int16_t year) 22 FX_WORD _gAfxGetYearDays(int16_t year) {
26 { 23 return (_gAfxIsLeapYear(year) == TRUE ? 366 : 365);
27 return (_gAfxIsLeapYear(year) == TRUE ? 366 : 365);
28 } 24 }
29 25
30 uint8_t _gAfxGetMonthDays(int16_t year, uint8_t month) 26 uint8_t _gAfxGetMonthDays(int16_t year, uint8_t month) {
31 { 27 uint8_t mDays;
32 uint8_t mDays; 28 switch (month) {
33 switch (month)
34 {
35 case 1: 29 case 1:
36 case 3: 30 case 3:
37 case 5: 31 case 5:
38 case 7: 32 case 7:
39 case 8: 33 case 8:
40 case 10: 34 case 10:
41 case 12: 35 case 12:
42 mDays = 31; 36 mDays = 31;
43 break; 37 break;
44 38
45 case 4: 39 case 4:
46 case 6: 40 case 6:
47 case 9: 41 case 9:
48 case 11: 42 case 11:
49 mDays = 30; 43 mDays = 30;
44 break;
45
46 case 2:
47 if (_gAfxIsLeapYear(year) == TRUE)
48 mDays = 29;
49 else
50 mDays = 28;
51 break;
52
53 default:
54 mDays = 0;
55 break;
56 }
57
58 return mDays;
59 }
60
61 CPDFSDK_DateTime::CPDFSDK_DateTime() {
62 ResetDateTime();
63 }
64
65 CPDFSDK_DateTime::CPDFSDK_DateTime(const CFX_ByteString& dtStr) {
66 ResetDateTime();
67
68 FromPDFDateTimeString(dtStr);
69 }
70
71 CPDFSDK_DateTime::CPDFSDK_DateTime(const CPDFSDK_DateTime& datetime) {
72 operator=(datetime);
73 }
74
75 CPDFSDK_DateTime::CPDFSDK_DateTime(const FX_SYSTEMTIME& st) {
76 operator=(st);
77 }
78
79 void CPDFSDK_DateTime::ResetDateTime() {
80 tzset();
81
82 time_t curTime;
83 time(&curTime);
84 struct tm* newtime;
85 // newtime = gmtime(&curTime);
86 newtime = localtime(&curTime);
87
88 dt.year = newtime->tm_year + 1900;
89 dt.month = newtime->tm_mon + 1;
90 dt.day = newtime->tm_mday;
91 dt.hour = newtime->tm_hour;
92 dt.minute = newtime->tm_min;
93 dt.second = newtime->tm_sec;
94 // dt.tzHour = _timezone / 3600 * -1;
95 // dt.tzMinute = (abs(_timezone) % 3600) / 60;
96 }
97
98 CPDFSDK_DateTime& CPDFSDK_DateTime::operator=(
99 const CPDFSDK_DateTime& datetime) {
100 FXSYS_memcpy(&dt, &datetime.dt, sizeof(FX_DATETIME));
101 return *this;
102 }
103
104 CPDFSDK_DateTime& CPDFSDK_DateTime::operator=(const FX_SYSTEMTIME& st) {
105 tzset();
106
107 dt.year = (int16_t)st.wYear;
108 dt.month = (uint8_t)st.wMonth;
109 dt.day = (uint8_t)st.wDay;
110 dt.hour = (uint8_t)st.wHour;
111 dt.minute = (uint8_t)st.wMinute;
112 dt.second = (uint8_t)st.wSecond;
113 // dt.tzHour = _timezone / 3600 * -1;
114 // dt.tzMinute = (abs(_timezone) % 3600) / 60;
115 return *this;
116 }
117
118 FX_BOOL CPDFSDK_DateTime::operator==(CPDFSDK_DateTime& datetime) {
119 return (FXSYS_memcmp(&dt, &datetime.dt, sizeof(FX_DATETIME)) == 0);
120 }
121
122 FX_BOOL CPDFSDK_DateTime::operator!=(CPDFSDK_DateTime& datetime) {
123 return (FXSYS_memcmp(&dt, &datetime.dt, sizeof(FX_DATETIME)) != 0);
124 }
125
126 FX_BOOL CPDFSDK_DateTime::operator>(CPDFSDK_DateTime& datetime) {
127 CPDFSDK_DateTime dt1 = ToGMT();
128 CPDFSDK_DateTime dt2 = datetime.ToGMT();
129 int d1 =
130 (((int)dt1.dt.year) << 16) | (((int)dt1.dt.month) << 8) | (int)dt1.dt.day;
131 int d2 = (((int)dt1.dt.hour) << 16) | (((int)dt1.dt.minute) << 8) |
132 (int)dt1.dt.second;
133 int d3 =
134 (((int)dt2.dt.year) << 16) | (((int)dt2.dt.month) << 8) | (int)dt2.dt.day;
135 int d4 = (((int)dt2.dt.hour) << 16) | (((int)dt2.dt.minute) << 8) |
136 (int)dt2.dt.second;
137
138 if (d1 > d3)
139 return TRUE;
140 if (d2 > d4)
141 return TRUE;
142 return FALSE;
143 }
144
145 FX_BOOL CPDFSDK_DateTime::operator>=(CPDFSDK_DateTime& datetime) {
146 CPDFSDK_DateTime dt1 = ToGMT();
147 CPDFSDK_DateTime dt2 = datetime.ToGMT();
148 int d1 =
149 (((int)dt1.dt.year) << 16) | (((int)dt1.dt.month) << 8) | (int)dt1.dt.day;
150 int d2 = (((int)dt1.dt.hour) << 16) | (((int)dt1.dt.minute) << 8) |
151 (int)dt1.dt.second;
152 int d3 =
153 (((int)dt2.dt.year) << 16) | (((int)dt2.dt.month) << 8) | (int)dt2.dt.day;
154 int d4 = (((int)dt2.dt.hour) << 16) | (((int)dt2.dt.minute) << 8) |
155 (int)dt2.dt.second;
156
157 if (d1 >= d3)
158 return TRUE;
159 if (d2 >= d4)
160 return TRUE;
161 return FALSE;
162 }
163
164 FX_BOOL CPDFSDK_DateTime::operator<(CPDFSDK_DateTime& datetime) {
165 CPDFSDK_DateTime dt1 = ToGMT();
166 CPDFSDK_DateTime dt2 = datetime.ToGMT();
167 int d1 =
168 (((int)dt1.dt.year) << 16) | (((int)dt1.dt.month) << 8) | (int)dt1.dt.day;
169 int d2 = (((int)dt1.dt.hour) << 16) | (((int)dt1.dt.minute) << 8) |
170 (int)dt1.dt.second;
171 int d3 =
172 (((int)dt2.dt.year) << 16) | (((int)dt2.dt.month) << 8) | (int)dt2.dt.day;
173 int d4 = (((int)dt2.dt.hour) << 16) | (((int)dt2.dt.minute) << 8) |
174 (int)dt2.dt.second;
175
176 if (d1 < d3)
177 return TRUE;
178 if (d2 < d4)
179 return TRUE;
180 return FALSE;
181 }
182
183 FX_BOOL CPDFSDK_DateTime::operator<=(CPDFSDK_DateTime& datetime) {
184 CPDFSDK_DateTime dt1 = ToGMT();
185 CPDFSDK_DateTime dt2 = datetime.ToGMT();
186 int d1 =
187 (((int)dt1.dt.year) << 16) | (((int)dt1.dt.month) << 8) | (int)dt1.dt.day;
188 int d2 = (((int)dt1.dt.hour) << 16) | (((int)dt1.dt.minute) << 8) |
189 (int)dt1.dt.second;
190 int d3 =
191 (((int)dt2.dt.year) << 16) | (((int)dt2.dt.month) << 8) | (int)dt2.dt.day;
192 int d4 = (((int)dt2.dt.hour) << 16) | (((int)dt2.dt.minute) << 8) |
193 (int)dt2.dt.second;
194
195 if (d1 <= d3)
196 return TRUE;
197 if (d2 <= d4)
198 return TRUE;
199 return FALSE;
200 }
201
202 CPDFSDK_DateTime::operator time_t() {
203 struct tm newtime;
204
205 newtime.tm_year = dt.year - 1900;
206 newtime.tm_mon = dt.month - 1;
207 newtime.tm_mday = dt.day;
208 newtime.tm_hour = dt.hour;
209 newtime.tm_min = dt.minute;
210 newtime.tm_sec = dt.second;
211
212 return mktime(&newtime);
213 }
214
215 CPDFSDK_DateTime& CPDFSDK_DateTime::FromPDFDateTimeString(
216 const CFX_ByteString& dtStr) {
217 int strLength = dtStr.GetLength();
218 if (strLength > 0) {
219 int i = 0;
220 int j, k;
221 FX_CHAR ch;
222 while (i < strLength) {
223 ch = dtStr[i];
224 if (ch >= '0' && ch <= '9')
50 break; 225 break;
51 226 i++;
52 case 2: 227 }
53 if (_gAfxIsLeapYear(year) == TRUE) 228 if (i >= strLength)
54 mDays = 29; 229 return *this;
55 else 230
56 mDays = 28; 231 j = 0;
232 k = 0;
233 while (i < strLength && j < 4) {
234 ch = dtStr[i];
235 k = k * 10 + ch - '0';
236 j++;
237 if (ch < '0' || ch > '9')
57 break; 238 break;
58 239 i++;
59 default: 240 }
60 mDays = 0; 241 dt.year = (int16_t)k;
242 if (i >= strLength || j < 4)
243 return *this;
244
245 j = 0;
246 k = 0;
247 while (i < strLength && j < 2) {
248 ch = dtStr[i];
249 k = k * 10 + ch - '0';
250 j++;
251 if (ch < '0' || ch > '9')
61 break; 252 break;
62 } 253 i++;
63 254 }
64 return mDays; 255 dt.month = (uint8_t)k;
65 } 256 if (i >= strLength || j < 2)
66 257 return *this;
67 CPDFSDK_DateTime::CPDFSDK_DateTime() 258
68 { 259 j = 0;
69 ResetDateTime(); 260 k = 0;
70 } 261 while (i < strLength && j < 2) {
71 262 ch = dtStr[i];
72 CPDFSDK_DateTime::CPDFSDK_DateTime(const CFX_ByteString& dtStr) 263 k = k * 10 + ch - '0';
73 { 264 j++;
74 ResetDateTime(); 265 if (ch < '0' || ch > '9')
75 266 break;
76 FromPDFDateTimeString(dtStr); 267 i++;
77 } 268 }
78 269 dt.day = (uint8_t)k;
79 CPDFSDK_DateTime::CPDFSDK_DateTime(const CPDFSDK_DateTime& datetime) 270 if (i >= strLength || j < 2)
80 { 271 return *this;
81 operator = (datetime); 272
82 } 273 j = 0;
83 274 k = 0;
84 CPDFSDK_DateTime::CPDFSDK_DateTime(const FX_SYSTEMTIME& st) 275 while (i < strLength && j < 2) {
85 { 276 ch = dtStr[i];
86 operator = (st) ; 277 k = k * 10 + ch - '0';
87 } 278 j++;
88 279 if (ch < '0' || ch > '9')
89 280 break;
90 void CPDFSDK_DateTime::ResetDateTime() 281 i++;
91 { 282 }
92 tzset(); 283 dt.hour = (uint8_t)k;
93 284 if (i >= strLength || j < 2)
94 time_t curTime; 285 return *this;
95 time(&curTime); 286
96 struct tm* newtime; 287 j = 0;
97 //newtime = gmtime(&curTime); 288 k = 0;
98 newtime = localtime(&curTime); 289 while (i < strLength && j < 2) {
99 290 ch = dtStr[i];
100 dt.year = newtime->tm_year + 1900; 291 k = k * 10 + ch - '0';
101 dt.month = newtime->tm_mon + 1; 292 j++;
102 dt.day = newtime->tm_mday; 293 if (ch < '0' || ch > '9')
103 dt.hour = newtime->tm_hour; 294 break;
104 dt.minute = newtime->tm_min; 295 i++;
105 dt.second = newtime->tm_sec; 296 }
106 // dt.tzHour = _timezone / 3600 * -1; 297 dt.minute = (uint8_t)k;
107 // dt.tzMinute = (abs(_timezone) % 3600) / 60; 298 if (i >= strLength || j < 2)
108 } 299 return *this;
109 300
110 CPDFSDK_DateTime& CPDFSDK_DateTime::operator = (const CPDFSDK_DateTime& datetime ) 301 j = 0;
111 { 302 k = 0;
112 FXSYS_memcpy(&dt, &datetime.dt, sizeof(FX_DATETIME)); 303 while (i < strLength && j < 2) {
304 ch = dtStr[i];
305 k = k * 10 + ch - '0';
306 j++;
307 if (ch < '0' || ch > '9')
308 break;
309 i++;
310 }
311 dt.second = (uint8_t)k;
312 if (i >= strLength || j < 2)
313 return *this;
314
315 ch = dtStr[i++];
316 if (ch != '-' && ch != '+')
317 return *this;
318 if (ch == '-')
319 dt.tzHour = -1;
320 else
321 dt.tzHour = 1;
322 j = 0;
323 k = 0;
324 while (i < strLength && j < 2) {
325 ch = dtStr[i];
326 k = k * 10 + ch - '0';
327 j++;
328 if (ch < '0' || ch > '9')
329 break;
330 i++;
331 }
332 dt.tzHour *= (FX_CHAR)k;
333 if (i >= strLength || j < 2)
334 return *this;
335
336 ch = dtStr[i++];
337 if (ch != '\'')
338 return *this;
339 j = 0;
340 k = 0;
341 while (i < strLength && j < 2) {
342 ch = dtStr[i];
343 k = k * 10 + ch - '0';
344 j++;
345 if (ch < '0' || ch > '9')
346 break;
347 i++;
348 }
349 dt.tzMinute = (uint8_t)k;
350 if (i >= strLength || j < 2)
351 return *this;
352 }
353
354 return *this;
355 }
356
357 CFX_ByteString CPDFSDK_DateTime::ToCommonDateTimeString() {
358 CFX_ByteString str1;
359 str1.Format("%04d-%02d-%02d %02d:%02d:%02d ", dt.year, dt.month, dt.day,
360 dt.hour, dt.minute, dt.second);
361 if (dt.tzHour < 0)
362 str1 += "-";
363 else
364 str1 += "+";
365 CFX_ByteString str2;
366 str2.Format("%02d:%02d", abs(dt.tzHour), dt.tzMinute);
367 return str1 + str2;
368 }
369
370 CFX_ByteString CPDFSDK_DateTime::ToPDFDateTimeString() {
371 CFX_ByteString dtStr;
372 char tempStr[32];
373 memset(tempStr, 0, sizeof(tempStr));
374 FXSYS_snprintf(tempStr, sizeof(tempStr) - 1, "D:%04d%02d%02d%02d%02d%02d",
375 dt.year, dt.month, dt.day, dt.hour, dt.minute, dt.second);
376 dtStr = CFX_ByteString(tempStr);
377 if (dt.tzHour < 0)
378 dtStr += CFX_ByteString("-");
379 else
380 dtStr += CFX_ByteString("+");
381 memset(tempStr, 0, sizeof(tempStr));
382 FXSYS_snprintf(tempStr, sizeof(tempStr) - 1, "%02d'%02d'", abs(dt.tzHour),
383 dt.tzMinute);
384 dtStr += CFX_ByteString(tempStr);
385 return dtStr;
386 }
387
388 void CPDFSDK_DateTime::ToSystemTime(FX_SYSTEMTIME& st) {
389 CPDFSDK_DateTime dt = *this;
390 time_t t = (time_t)dt;
391 struct tm* pTime = localtime(&t);
392 if (pTime) {
393 st.wYear = (FX_WORD)pTime->tm_year + 1900;
394 st.wMonth = (FX_WORD)pTime->tm_mon + 1;
395 st.wDay = (FX_WORD)pTime->tm_mday;
396 st.wDayOfWeek = (FX_WORD)pTime->tm_wday;
397 st.wHour = (FX_WORD)pTime->tm_hour;
398 st.wMinute = (FX_WORD)pTime->tm_min;
399 st.wSecond = (FX_WORD)pTime->tm_sec;
400 st.wMilliseconds = 0;
401 }
402 }
403
404 CPDFSDK_DateTime CPDFSDK_DateTime::ToGMT() {
405 CPDFSDK_DateTime dt = *this;
406 dt.AddSeconds(-_gAfxGetTimeZoneInSeconds(dt.dt.tzHour, dt.dt.tzMinute));
407 dt.dt.tzHour = 0;
408 dt.dt.tzMinute = 0;
409 return dt;
410 }
411
412 CPDFSDK_DateTime& CPDFSDK_DateTime::AddDays(short days) {
413 if (days == 0)
113 return *this; 414 return *this;
114 } 415
115 416 int16_t y = dt.year, yy;
116 CPDFSDK_DateTime& CPDFSDK_DateTime::operator = (const FX_SYSTEMTIME& st) 417 uint8_t m = dt.month;
117 { 418 uint8_t d = dt.day;
118 tzset(); 419 int mdays, ydays, ldays;
119 420
120 dt.year = (int16_t)st.wYear; 421 ldays = days;
121 dt.month = (uint8_t)st.wMonth; 422 if (ldays > 0) {
122 dt.day = (uint8_t)st.wDay; 423 yy = y;
123 dt.hour = (uint8_t)st.wHour; 424 if (((FX_WORD)m * 100 + d) > 300)
124 dt.minute = (uint8_t)st.wMinute; 425 yy++;
125 dt.second = (uint8_t)st.wSecond; 426 ydays = _gAfxGetYearDays(yy);
126 // dt.tzHour = _timezone / 3600 * -1; 427 while (ldays >= ydays) {
127 // dt.tzMinute = (abs(_timezone) % 3600) / 60; 428 y++;
429 ldays -= ydays;
430 yy++;
431 mdays = _gAfxGetMonthDays(y, m);
432 if (d > mdays) {
433 m++;
434 d -= mdays;
435 }
436 ydays = _gAfxGetYearDays(yy);
437 }
438 mdays = _gAfxGetMonthDays(y, m) - d + 1;
439 while (ldays >= mdays) {
440 ldays -= mdays;
441 m++;
442 d = 1;
443 mdays = _gAfxGetMonthDays(y, m);
444 }
445 d += ldays;
446 } else {
447 ldays *= -1;
448 yy = y;
449 if (((FX_WORD)m * 100 + d) < 300)
450 yy--;
451 ydays = _gAfxGetYearDays(yy);
452 while (ldays >= ydays) {
453 y--;
454 ldays -= ydays;
455 yy--;
456 mdays = _gAfxGetMonthDays(y, m);
457 if (d > mdays) {
458 m++;
459 d -= mdays;
460 }
461 ydays = _gAfxGetYearDays(yy);
462 }
463 while (ldays >= d) {
464 ldays -= d;
465 m--;
466 mdays = _gAfxGetMonthDays(y, m);
467 d = mdays;
468 }
469 d -= ldays;
470 }
471
472 dt.year = y;
473 dt.month = m;
474 dt.day = d;
475
476 return *this;
477 }
478
479 CPDFSDK_DateTime& CPDFSDK_DateTime::AddSeconds(int seconds) {
480 if (seconds == 0)
128 return *this; 481 return *this;
129 } 482
130 483 int n;
131 FX_BOOL CPDFSDK_DateTime::operator == (CPDFSDK_DateTime& datetime) 484 int days;
132 { 485
133 return (FXSYS_memcmp(&dt, &datetime.dt, sizeof(FX_DATETIME)) == 0); 486 n = dt.hour * 3600 + dt.minute * 60 + dt.second + seconds;
134 } 487 if (n < 0) {
135 488 days = (n - 86399) / 86400;
136 FX_BOOL CPDFSDK_DateTime::operator != (CPDFSDK_DateTime& datetime) 489 n -= days * 86400;
137 { 490 } else {
138 return (FXSYS_memcmp(&dt, &datetime.dt, sizeof(FX_DATETIME)) != 0); 491 days = n / 86400;
139 } 492 n %= 86400;
140 493 }
141 FX_BOOL CPDFSDK_DateTime::operator > (CPDFSDK_DateTime& datetime) 494 dt.hour = (uint8_t)(n / 3600);
142 { 495 dt.hour %= 24;
143 CPDFSDK_DateTime dt1 = ToGMT(); 496 n %= 3600;
144 CPDFSDK_DateTime dt2 = datetime.ToGMT(); 497 dt.minute = (uint8_t)(n / 60);
145 int d1 = (((int)dt1.dt.year) << 16) | (((int)dt1.dt.month) << 8) | (int)dt1. dt.day; 498 dt.second = (uint8_t)(n % 60);
146 int d2 = (((int)dt1.dt.hour) << 16) | (((int)dt1.dt.minute) << 8) | (int)dt1 .dt.second; 499 if (days != 0)
147 int d3 = (((int)dt2.dt.year) << 16) | (((int)dt2.dt.month) << 8) | (int)dt2. dt.day; 500 AddDays(days);
148 int d4 = (((int)dt2.dt.hour) << 16) | (((int)dt2.dt.minute) << 8) | (int)dt2 .dt.second; 501
149 502 return *this;
150 if (d1 > d3) return TRUE; 503 }
151 if (d2 > d4) return TRUE;
152 return FALSE;
153 }
154
155 FX_BOOL CPDFSDK_DateTime::operator >= (CPDFSDK_DateTime& datetime)
156 {
157 CPDFSDK_DateTime dt1 = ToGMT();
158 CPDFSDK_DateTime dt2 = datetime.ToGMT();
159 int d1 = (((int)dt1.dt.year) << 16) | (((int)dt1.dt.month) << 8) | (int)dt1. dt.day;
160 int d2 = (((int)dt1.dt.hour) << 16) | (((int)dt1.dt.minute) << 8) | (int)dt1 .dt.second;
161 int d3 = (((int)dt2.dt.year) << 16) | (((int)dt2.dt.month) << 8) | (int)dt2. dt.day;
162 int d4 = (((int)dt2.dt.hour) << 16) | (((int)dt2.dt.minute) << 8) | (int)dt2 .dt.second;
163
164 if (d1 >= d3) return TRUE;
165 if (d2 >= d4) return TRUE;
166 return FALSE;
167 }
168
169 FX_BOOL CPDFSDK_DateTime::operator < (CPDFSDK_DateTime& datetime)
170 {
171 CPDFSDK_DateTime dt1 = ToGMT();
172 CPDFSDK_DateTime dt2 = datetime.ToGMT();
173 int d1 = (((int)dt1.dt.year) << 16) | (((int)dt1.dt.month) << 8) | (int)dt1. dt.day;
174 int d2 = (((int)dt1.dt.hour) << 16) | (((int)dt1.dt.minute) << 8) | (int)dt1 .dt.second;
175 int d3 = (((int)dt2.dt.year) << 16) | (((int)dt2.dt.month) << 8) | (int)dt2. dt.day;
176 int d4 = (((int)dt2.dt.hour) << 16) | (((int)dt2.dt.minute) << 8) | (int)dt2 .dt.second;
177
178 if (d1 < d3) return TRUE;
179 if (d2 < d4) return TRUE;
180 return FALSE;
181 }
182
183 FX_BOOL CPDFSDK_DateTime::operator <= (CPDFSDK_DateTime& datetime)
184 {
185 CPDFSDK_DateTime dt1 = ToGMT();
186 CPDFSDK_DateTime dt2 = datetime.ToGMT();
187 int d1 = (((int)dt1.dt.year) << 16) | (((int)dt1.dt.month) << 8) | (int)dt1. dt.day;
188 int d2 = (((int)dt1.dt.hour) << 16) | (((int)dt1.dt.minute) << 8) | (int)dt1 .dt.second;
189 int d3 = (((int)dt2.dt.year) << 16) | (((int)dt2.dt.month) << 8) | (int)dt2. dt.day;
190 int d4 = (((int)dt2.dt.hour) << 16) | (((int)dt2.dt.minute) << 8) | (int)dt2 .dt.second;
191
192 if (d1 <= d3) return TRUE;
193 if (d2 <= d4) return TRUE;
194 return FALSE;
195 }
196
197 CPDFSDK_DateTime::operator time_t()
198 {
199 struct tm newtime;
200
201 newtime.tm_year = dt.year - 1900;
202 newtime.tm_mon = dt.month - 1;
203 newtime.tm_mday = dt.day;
204 newtime.tm_hour = dt.hour;
205 newtime.tm_min = dt.minute;
206 newtime.tm_sec = dt.second;
207
208 return mktime(&newtime);
209 }
210
211 CPDFSDK_DateTime& CPDFSDK_DateTime::FromPDFDateTimeString(const CFX_ByteString& dtStr)
212 {
213 int strLength = dtStr.GetLength();
214 if (strLength > 0)
215 {
216 int i = 0;
217 int j, k;
218 FX_CHAR ch;
219 while (i < strLength)
220 {
221 ch = dtStr[i];
222 if (ch >= '0' && ch <= '9') break;
223 i ++;
224 }
225 if (i >= strLength) return *this;
226
227 j = 0;
228 k = 0;
229 while (i < strLength && j < 4)
230 {
231 ch = dtStr[i];
232 k = k * 10 + ch - '0';
233 j ++;
234 if (ch < '0' || ch > '9') break;
235 i ++;
236 }
237 dt.year = (int16_t)k;
238 if (i >= strLength || j < 4) return *this;
239
240 j = 0;
241 k = 0;
242 while (i < strLength && j < 2)
243 {
244 ch = dtStr[i];
245 k = k * 10 + ch - '0';
246 j ++;
247 if (ch < '0' || ch > '9') break;
248 i ++;
249 }
250 dt.month = (uint8_t)k;
251 if (i >= strLength || j < 2) return *this;
252
253 j = 0;
254 k = 0;
255 while (i < strLength && j < 2)
256 {
257 ch = dtStr[i];
258 k = k * 10 + ch - '0';
259 j ++;
260 if (ch < '0' || ch > '9') break;
261 i ++;
262 }
263 dt.day = (uint8_t)k;
264 if (i >= strLength || j < 2) return *this;
265
266 j = 0;
267 k = 0;
268 while (i < strLength && j < 2)
269 {
270 ch = dtStr[i];
271 k = k * 10 + ch - '0';
272 j ++;
273 if (ch < '0' || ch > '9') break;
274 i ++;
275 }
276 dt.hour = (uint8_t)k;
277 if (i >= strLength || j < 2) return *this;
278
279 j = 0;
280 k = 0;
281 while (i < strLength && j < 2)
282 {
283 ch = dtStr[i];
284 k = k * 10 + ch - '0';
285 j ++;
286 if (ch < '0' || ch > '9') break;
287 i ++;
288 }
289 dt.minute = (uint8_t)k;
290 if (i >= strLength || j < 2) return *this;
291
292 j = 0;
293 k = 0;
294 while (i < strLength && j < 2)
295 {
296 ch = dtStr[i];
297 k = k * 10 + ch - '0';
298 j ++;
299 if (ch < '0' || ch > '9') break;
300 i ++;
301 }
302 dt.second = (uint8_t)k;
303 if (i >= strLength || j < 2) return *this;
304
305 ch = dtStr[i ++];
306 if (ch != '-' && ch != '+') return *this;
307 if (ch == '-')
308 dt.tzHour = -1;
309 else
310 dt.tzHour = 1;
311 j = 0;
312 k = 0;
313 while (i < strLength && j < 2)
314 {
315 ch = dtStr[i];
316 k = k * 10 + ch - '0';
317 j ++;
318 if (ch < '0' || ch > '9') break;
319 i ++;
320 }
321 dt.tzHour *= (FX_CHAR)k;
322 if (i >= strLength || j < 2) return *this;
323
324 ch = dtStr[i ++];
325 if (ch != '\'') return *this;
326 j = 0;
327 k = 0;
328 while (i < strLength && j < 2)
329 {
330 ch = dtStr[i];
331 k = k * 10 + ch - '0';
332 j ++;
333 if (ch < '0' || ch > '9') break;
334 i ++;
335 }
336 dt.tzMinute = (uint8_t)k;
337 if (i >= strLength || j < 2) return *this;
338 }
339
340 return *this;
341 }
342
343 CFX_ByteString CPDFSDK_DateTime::ToCommonDateTimeString()
344 {
345 CFX_ByteString str1;
346 str1.Format("%04d-%02d-%02d %02d:%02d:%02d ", dt.year, dt.month, dt.day, dt. hour, dt.minute, dt.second);
347 if (dt.tzHour < 0)
348 str1 += "-";
349 else
350 str1 += "+";
351 CFX_ByteString str2;
352 str2.Format("%02d:%02d", abs(dt.tzHour), dt.tzMinute);
353 return str1 + str2;
354 }
355
356 CFX_ByteString CPDFSDK_DateTime::ToPDFDateTimeString()
357 {
358 CFX_ByteString dtStr;
359 char tempStr[32];
360 memset(tempStr, 0, sizeof(tempStr));
361 FXSYS_snprintf(tempStr, sizeof(tempStr) - 1, "D:%04d%02d%02d%02d%02d%02d",
362 dt.year, dt.month, dt.day, dt.hour, dt.minute, dt.second);
363 dtStr = CFX_ByteString(tempStr);
364 if (dt.tzHour < 0)
365 dtStr += CFX_ByteString("-");
366 else
367 dtStr += CFX_ByteString("+");
368 memset(tempStr, 0, sizeof(tempStr));
369 FXSYS_snprintf(tempStr, sizeof(tempStr) - 1, "%02d'%02d'", abs(dt.tzHour), d t.tzMinute);
370 dtStr += CFX_ByteString(tempStr);
371 return dtStr;
372 }
373
374 void CPDFSDK_DateTime::ToSystemTime(FX_SYSTEMTIME& st)
375 {
376 CPDFSDK_DateTime dt = *this;
377 time_t t = (time_t)dt;
378 struct tm* pTime = localtime(&t);
379 if(pTime){
380 st.wYear = (FX_WORD)pTime->tm_year + 1900;
381 st.wMonth = (FX_WORD)pTime->tm_mon + 1;
382 st.wDay = (FX_WORD)pTime->tm_mday;
383 st.wDayOfWeek = (FX_WORD)pTime->tm_wday;
384 st.wHour = (FX_WORD)pTime->tm_hour;
385 st.wMinute = (FX_WORD)pTime->tm_min;
386 st.wSecond = (FX_WORD)pTime->tm_sec;
387 st.wMilliseconds = 0;
388 }
389 }
390
391 CPDFSDK_DateTime CPDFSDK_DateTime::ToGMT()
392 {
393 CPDFSDK_DateTime dt = *this;
394 dt.AddSeconds(-_gAfxGetTimeZoneInSeconds(dt.dt.tzHour, dt.dt.tzMinute));
395 dt.dt.tzHour = 0;
396 dt.dt.tzMinute = 0;
397 return dt;
398 }
399
400 CPDFSDK_DateTime& CPDFSDK_DateTime::AddDays(short days)
401 {
402 if (days == 0) return *this;
403
404 int16_t y = dt.year, yy;
405 uint8_t m = dt.month;
406 uint8_t d = dt.day;
407 int mdays, ydays, ldays;
408
409 ldays = days;
410 if (ldays > 0)
411 {
412 yy = y;
413 if (((FX_WORD)m * 100 + d) > 300) yy ++;
414 ydays = _gAfxGetYearDays(yy);
415 while (ldays >= ydays)
416 {
417 y ++;
418 ldays -= ydays;
419 yy ++;
420 mdays = _gAfxGetMonthDays(y, m);
421 if (d > mdays)
422 {
423 m ++;
424 d -= mdays;
425 }
426 ydays = _gAfxGetYearDays(yy);
427 }
428 mdays = _gAfxGetMonthDays(y, m) - d + 1;
429 while (ldays >= mdays)
430 {
431 ldays -= mdays;
432 m ++;
433 d = 1;
434 mdays = _gAfxGetMonthDays(y, m);
435 }
436 d += ldays;
437 }
438 else
439 {
440 ldays *= -1;
441 yy = y;
442 if (((FX_WORD)m * 100 + d) < 300) yy --;
443 ydays = _gAfxGetYearDays(yy);
444 while (ldays >= ydays)
445 {
446 y --;
447 ldays -= ydays;
448 yy --;
449 mdays = _gAfxGetMonthDays(y, m);
450 if (d > mdays)
451 {
452 m ++;
453 d -= mdays;
454 }
455 ydays = _gAfxGetYearDays(yy);
456 }
457 while (ldays >= d)
458 {
459 ldays -= d;
460 m --;
461 mdays = _gAfxGetMonthDays(y, m);
462 d = mdays;
463 }
464 d -= ldays;
465 }
466
467 dt.year = y;
468 dt.month = m;
469 dt.day = d;
470
471 return *this;
472 }
473
474 CPDFSDK_DateTime& CPDFSDK_DateTime::AddSeconds(int seconds)
475 {
476 if (seconds == 0) return *this;
477
478 int n;
479 int days;
480
481 n = dt.hour * 3600 + dt.minute * 60 + dt.second + seconds;
482 if (n < 0)
483 {
484 days = (n - 86399) / 86400;
485 n -= days * 86400;
486 }
487 else
488 {
489 days = n / 86400;
490 n %= 86400;
491 }
492 dt.hour = (uint8_t)(n / 3600);
493 dt.hour %= 24;
494 n %= 3600;
495 dt.minute = (uint8_t)(n / 60);
496 dt.second = (uint8_t)(n % 60);
497 if (days != 0) AddDays(days);
498
499 return *this;
500 }
501
502 504
503 //--------------------------------------------------------------------------- 505 //---------------------------------------------------------------------------
504 // CPDFSDK_Annot 506 // CPDFSDK_Annot
505 //--------------------------------------------------------------------------- 507 //---------------------------------------------------------------------------
506 CPDFSDK_Annot::CPDFSDK_Annot(CPDF_Annot* pAnnot, CPDFSDK_PageView* pPageView) : 508 CPDFSDK_Annot::CPDFSDK_Annot(CPDF_Annot* pAnnot, CPDFSDK_PageView* pPageView)
507 m_pAnnot(pAnnot), 509 : m_pAnnot(pAnnot),
508 m_pPageView(pPageView), 510 m_pPageView(pPageView),
509 m_bSelected(FALSE), 511 m_bSelected(FALSE),
510 m_nTabOrder(-1) 512 m_nTabOrder(-1) {}
511 { 513
512 } 514 CPDFSDK_Annot::~CPDFSDK_Annot() {
513 515 m_pAnnot = NULL;
514 CPDFSDK_Annot::~CPDFSDK_Annot() 516 m_pPageView = NULL;
515 { 517 }
516 m_pAnnot = NULL; 518
517 m_pPageView = NULL; 519 CPDF_Annot* CPDFSDK_Annot::GetPDFAnnot() {
518 } 520 return m_pAnnot;
519 521 }
520 CPDF_Annot* CPDFSDK_Annot::GetPDFAnnot() 522
521 { 523 FX_DWORD CPDFSDK_Annot::GetFlags() {
522 return m_pAnnot; 524 ASSERT(m_pAnnot != NULL);
523 } 525
524 526 return m_pAnnot->GetFlags();
525 FX_DWORD CPDFSDK_Annot::GetFlags() 527 }
526 { 528
527 ASSERT(m_pAnnot != NULL); 529 void CPDFSDK_Annot::SetPage(CPDFSDK_PageView* pPageView) {
528 530 m_pPageView = pPageView;
529 return m_pAnnot->GetFlags(); 531 }
530 } 532
531 533 CPDFSDK_PageView* CPDFSDK_Annot::GetPageView() {
532 void CPDFSDK_Annot::SetPage(CPDFSDK_PageView* pPageView) 534 return m_pPageView;
533 { 535 }
534 m_pPageView = pPageView; 536
535 } 537 FX_BOOL CPDFSDK_Annot::IsSelected() {
536 538 return m_bSelected;
537 CPDFSDK_PageView* CPDFSDK_Annot::GetPageView() 539 }
538 { 540
539 return m_pPageView; 541 void CPDFSDK_Annot::SetSelected(FX_BOOL bSelected) {
540 } 542 m_bSelected = bSelected;
541
542 FX_BOOL CPDFSDK_Annot::IsSelected()
543 {
544 return m_bSelected;
545 }
546
547 void CPDFSDK_Annot::SetSelected(FX_BOOL bSelected)
548 {
549 m_bSelected = bSelected;
550 } 543 }
551 544
552 // Tab Order 545 // Tab Order
553 int CPDFSDK_Annot::GetTabOrder() 546 int CPDFSDK_Annot::GetTabOrder() {
554 { 547 return m_nTabOrder;
555 return m_nTabOrder; 548 }
556 } 549
557 550 void CPDFSDK_Annot::SetTabOrder(int iTabOrder) {
558 void CPDFSDK_Annot::SetTabOrder(int iTabOrder) 551 m_nTabOrder = iTabOrder;
559 { 552 }
560 m_nTabOrder = iTabOrder; 553
561 } 554 CPDF_Dictionary* CPDFSDK_Annot::GetAnnotDict() const {
562 555 ASSERT(m_pAnnot != NULL);
563 CPDF_Dictionary* CPDFSDK_Annot::GetAnnotDict() const 556
564 { 557 return m_pAnnot->GetAnnotDict();
565 ASSERT(m_pAnnot != NULL); 558 }
566 559
567 return m_pAnnot->GetAnnotDict(); 560 void CPDFSDK_Annot::SetRect(const CPDF_Rect& rect) {
568 } 561 ASSERT(rect.right - rect.left >= GetMinWidth());
569 562 ASSERT(rect.top - rect.bottom >= GetMinHeight());
570 void CPDFSDK_Annot::SetRect(const CPDF_Rect& rect) 563
571 { 564 m_pAnnot->GetAnnotDict()->SetAtRect("Rect", rect);
572 ASSERT(rect.right - rect.left >= GetMinWidth()); 565 }
573 ASSERT(rect.top - rect.bottom >= GetMinHeight()); 566
574 567 CPDF_Rect CPDFSDK_Annot::GetRect() const {
575 m_pAnnot->GetAnnotDict()->SetAtRect("Rect", rect); 568 ASSERT(m_pAnnot != NULL);
576 } 569
577 570 CPDF_Rect rect;
578 CPDF_Rect CPDFSDK_Annot::GetRect() const 571 m_pAnnot->GetRect(rect);
579 { 572
580 ASSERT(m_pAnnot != NULL); 573 return rect;
581 574 }
582 CPDF_Rect rect; 575
583 m_pAnnot->GetRect(rect); 576 CFX_ByteString CPDFSDK_Annot::GetType() const {
584 577 ASSERT(m_pAnnot != NULL);
585 return rect; 578
586 } 579 return m_pAnnot->GetSubType();
587 580 }
588 CFX_ByteString CPDFSDK_Annot::GetType() const 581
589 { 582 CFX_ByteString CPDFSDK_Annot::GetSubType() const {
590 ASSERT(m_pAnnot != NULL); 583 return "";
591 584 }
592 return m_pAnnot->GetSubType(); 585
593 } 586 void CPDFSDK_Annot::DrawAppearance(CFX_RenderDevice* pDevice,
594 587 const CPDF_Matrix* pUser2Device,
595 CFX_ByteString CPDFSDK_Annot::GetSubType() const 588 CPDF_Annot::AppearanceMode mode,
596 { 589 const CPDF_RenderOptions* pOptions) {
597 return ""; 590 ASSERT(m_pPageView != NULL);
598 } 591 ASSERT(m_pAnnot != NULL);
599 592
600 void CPDFSDK_Annot::DrawAppearance(CFX_RenderDevice* pDevice, const CPDF_Matrix* pUser2Device, 593 m_pAnnot->DrawAppearance(m_pPageView->GetPDFPage(), pDevice, pUser2Device,
601 CPDF_Annot::AppearanceMode mode, const CPDF_R enderOptions* pOptions) 594 mode, pOptions);
602 { 595 }
603 ASSERT(m_pPageView != NULL); 596
604 ASSERT(m_pAnnot != NULL); 597 FX_BOOL CPDFSDK_Annot::IsAppearanceValid() {
605 598 return m_pAnnot->GetAnnotDict()->GetDict("AP") != NULL;
606 m_pAnnot->DrawAppearance(m_pPageView->GetPDFPage(), pDevice, pUser2Device, m ode, pOptions); 599 }
607 } 600
608 601 FX_BOOL CPDFSDK_Annot::IsAppearanceValid(CPDF_Annot::AppearanceMode mode) {
609 FX_BOOL CPDFSDK_Annot::IsAppearanceValid() 602 CPDF_Dictionary* pAP = m_pAnnot->GetAnnotDict()->GetDict("AP");
610 { 603 if (pAP == NULL)
611 return m_pAnnot->GetAnnotDict()->GetDict("AP") != NULL; 604 return FALSE;
612 } 605
613 606 // Choose the right sub-ap
614 FX_BOOL CPDFSDK_Annot::IsAppearanceValid(CPDF_Annot::AppearanceMode mode) 607 const FX_CHAR* ap_entry = "N";
615 { 608 if (mode == CPDF_Annot::Down)
616 CPDF_Dictionary* pAP = m_pAnnot->GetAnnotDict()->GetDict("AP"); 609 ap_entry = "D";
617 if (pAP == NULL) return FALSE; 610 else if (mode == CPDF_Annot::Rollover)
618 611 ap_entry = "R";
619 // Choose the right sub-ap 612 if (!pAP->KeyExist(ap_entry))
620 const FX_CHAR* ap_entry = "N"; 613 ap_entry = "N";
621 if (mode == CPDF_Annot::Down) 614
622 ap_entry = "D"; 615 // Get the AP stream or subdirectory
623 else if (mode == CPDF_Annot::Rollover) 616 CPDF_Object* psub = pAP->GetElementValue(ap_entry);
624 ap_entry = "R"; 617 if (psub == NULL)
625 if (!pAP->KeyExist(ap_entry)) 618 return FALSE;
626 ap_entry = "N"; 619
627 620 return TRUE;
628 // Get the AP stream or subdirectory 621 }
629 CPDF_Object* psub = pAP->GetElementValue(ap_entry); 622
630 if (psub == NULL) return FALSE; 623 void CPDFSDK_Annot::DrawBorder(CFX_RenderDevice* pDevice,
631 624 const CPDF_Matrix* pUser2Device,
632 return TRUE; 625 const CPDF_RenderOptions* pOptions) {
633 } 626 ASSERT(m_pAnnot != NULL);
634 627 m_pAnnot->DrawBorder(pDevice, pUser2Device, pOptions);
635 void CPDFSDK_Annot::DrawBorder(CFX_RenderDevice* pDevice, const CPDF_Matrix* pUs er2Device, 628 }
636 const CPDF_RenderOptions* pOptions) 629
637 { 630 void CPDFSDK_Annot::ClearCachedAP() {
638 ASSERT(m_pAnnot != NULL); 631 ASSERT(m_pAnnot != NULL);
639 m_pAnnot->DrawBorder(pDevice, pUser2Device, pOptions); 632 m_pAnnot->ClearCachedAP();
640 } 633 }
641 634
642 void CPDFSDK_Annot::ClearCachedAP() 635 void CPDFSDK_Annot::SetContents(const CFX_WideString& sContents) {
643 { 636 if (sContents.IsEmpty())
644 ASSERT(m_pAnnot != NULL); 637 m_pAnnot->GetAnnotDict()->RemoveAt("Contents");
645 m_pAnnot->ClearCachedAP(); 638 else
646 } 639 m_pAnnot->GetAnnotDict()->SetAtString("Contents",
647 640 PDF_EncodeText(sContents));
648 void CPDFSDK_Annot::SetContents(const CFX_WideString& sContents) 641 }
649 { 642
650 if (sContents.IsEmpty()) 643 CFX_WideString CPDFSDK_Annot::GetContents() const {
651 m_pAnnot->GetAnnotDict()->RemoveAt("Contents"); 644 return m_pAnnot->GetAnnotDict()->GetUnicodeText("Contents");
652 else 645 }
653 m_pAnnot->GetAnnotDict()->SetAtString("Contents", PDF_EncodeText(sConten ts)); 646
654 } 647 void CPDFSDK_Annot::SetAnnotName(const CFX_WideString& sName) {
655 648 if (sName.IsEmpty())
656 CFX_WideString CPDFSDK_Annot::GetContents() const 649 m_pAnnot->GetAnnotDict()->RemoveAt("NM");
657 { 650 else
658 return m_pAnnot->GetAnnotDict()->GetUnicodeText("Contents"); 651 m_pAnnot->GetAnnotDict()->SetAtString("NM", PDF_EncodeText(sName));
659 } 652 }
660 653
661 void CPDFSDK_Annot::SetAnnotName(const CFX_WideString& sName) 654 CFX_WideString CPDFSDK_Annot::GetAnnotName() const {
662 { 655 return m_pAnnot->GetAnnotDict()->GetUnicodeText("NM");
663 if (sName.IsEmpty()) 656 }
664 m_pAnnot->GetAnnotDict()->RemoveAt("NM"); 657
665 else 658 void CPDFSDK_Annot::SetModifiedDate(const FX_SYSTEMTIME& st) {
666 m_pAnnot->GetAnnotDict()->SetAtString("NM", PDF_EncodeText(sName)); 659 CPDFSDK_DateTime dt(st);
667 } 660 CFX_ByteString str = dt.ToPDFDateTimeString();
668 661
669 CFX_WideString CPDFSDK_Annot::GetAnnotName() const 662 if (str.IsEmpty())
670 { 663 m_pAnnot->GetAnnotDict()->RemoveAt("M");
671 return m_pAnnot->GetAnnotDict()->GetUnicodeText("NM"); 664 else
672 } 665 m_pAnnot->GetAnnotDict()->SetAtString("M", str);
673 666 }
674 void CPDFSDK_Annot::SetModifiedDate(const FX_SYSTEMTIME& st) 667
675 { 668 FX_SYSTEMTIME CPDFSDK_Annot::GetModifiedDate() const {
676 CPDFSDK_DateTime dt(st); 669 FX_SYSTEMTIME systime;
677 CFX_ByteString str = dt.ToPDFDateTimeString(); 670 CFX_ByteString str = m_pAnnot->GetAnnotDict()->GetString("M");
678 671
679 if (str.IsEmpty()) 672 CPDFSDK_DateTime dt(str);
680 m_pAnnot->GetAnnotDict()->RemoveAt("M"); 673 dt.ToSystemTime(systime);
681 else 674
682 m_pAnnot->GetAnnotDict()->SetAtString("M", str); 675 return systime;
683 } 676 }
684 677
685 FX_SYSTEMTIME CPDFSDK_Annot::GetModifiedDate() const 678 void CPDFSDK_Annot::SetFlags(int nFlags) {
686 { 679 m_pAnnot->GetAnnotDict()->SetAtInteger("F", nFlags);
687 FX_SYSTEMTIME systime; 680 }
688 CFX_ByteString str = m_pAnnot->GetAnnotDict()->GetString("M"); 681
689 682 int CPDFSDK_Annot::GetFlags() const {
690 CPDFSDK_DateTime dt(str); 683 return m_pAnnot->GetAnnotDict()->GetInteger("F");
691 dt.ToSystemTime(systime); 684 }
692 685
693 return systime; 686 void CPDFSDK_Annot::SetAppState(const CFX_ByteString& str) {
694 } 687 if (str.IsEmpty())
695 688 m_pAnnot->GetAnnotDict()->RemoveAt("AS");
696 void CPDFSDK_Annot::SetFlags(int nFlags) 689 else
697 { 690 m_pAnnot->GetAnnotDict()->SetAtString("AS", str);
698 m_pAnnot->GetAnnotDict()->SetAtInteger("F", nFlags); 691 }
699 } 692
700 693 CFX_ByteString CPDFSDK_Annot::GetAppState() const {
701 int CPDFSDK_Annot::GetFlags() const 694 return m_pAnnot->GetAnnotDict()->GetString("AS");
702 { 695 }
703 return m_pAnnot->GetAnnotDict()->GetInteger("F"); 696
704 } 697 void CPDFSDK_Annot::SetStructParent(int key) {
705 698 m_pAnnot->GetAnnotDict()->SetAtInteger("StructParent", key);
706 void CPDFSDK_Annot::SetAppState(const CFX_ByteString& str) 699 }
707 { 700
708 if (str.IsEmpty()) 701 int CPDFSDK_Annot::GetStructParent() const {
709 m_pAnnot->GetAnnotDict()->RemoveAt("AS"); 702 return m_pAnnot->GetAnnotDict()->GetInteger("StructParent");
710 else 703 }
711 m_pAnnot->GetAnnotDict()->SetAtString("AS", str); 704
712 } 705 // border
713 706 void CPDFSDK_Annot::SetBorderWidth(int nWidth) {
714 CFX_ByteString CPDFSDK_Annot::GetAppState() const 707 CPDF_Array* pBorder = m_pAnnot->GetAnnotDict()->GetArray("Border");
715 { 708
716 return m_pAnnot->GetAnnotDict()->GetString("AS"); 709 if (pBorder) {
717 } 710 pBorder->SetAt(2, new CPDF_Number(nWidth));
718 711 } else {
719 void CPDFSDK_Annot::SetStructParent(int key)
720 {
721 m_pAnnot->GetAnnotDict()->SetAtInteger("StructParent", key);
722 }
723
724 int CPDFSDK_Annot::GetStructParent() const
725 {
726 return m_pAnnot->GetAnnotDict()->GetInteger("StructParent");
727 }
728
729 //border
730 void CPDFSDK_Annot::SetBorderWidth(int nWidth)
731 {
732 CPDF_Array* pBorder = m_pAnnot->GetAnnotDict()->GetArray("Border");
733
734 if (pBorder)
735 {
736 pBorder->SetAt(2, new CPDF_Number(nWidth));
737 }
738 else
739 {
740 CPDF_Dictionary* pBSDict = m_pAnnot->GetAnnotDict()->GetDict("BS");
741
742 if (!pBSDict)
743 {
744 pBSDict = new CPDF_Dictionary;
745 m_pAnnot->GetAnnotDict()->SetAt("BS", pBSDict);
746 }
747
748 pBSDict->SetAtInteger("W", nWidth);
749 }
750 }
751
752 int CPDFSDK_Annot::GetBorderWidth() const
753 {
754 if (CPDF_Array* pBorder = m_pAnnot->GetAnnotDict()->GetArray("Border")) {
755 return pBorder->GetInteger(2);
756 }
757 if (CPDF_Dictionary* pBSDict = m_pAnnot->GetAnnotDict()->GetDict("BS")) {
758 return pBSDict->GetInteger("W", 1);
759 }
760 return 1;
761 }
762
763 void CPDFSDK_Annot::SetBorderStyle(int nStyle)
764 {
765 CPDF_Dictionary* pBSDict = m_pAnnot->GetAnnotDict()->GetDict("BS"); 712 CPDF_Dictionary* pBSDict = m_pAnnot->GetAnnotDict()->GetDict("BS");
766 if (!pBSDict) 713
767 { 714 if (!pBSDict) {
768 pBSDict = new CPDF_Dictionary; 715 pBSDict = new CPDF_Dictionary;
769 m_pAnnot->GetAnnotDict()->SetAt("BS", pBSDict); 716 m_pAnnot->GetAnnotDict()->SetAt("BS", pBSDict);
770 } 717 }
771 718
772 switch (nStyle) 719 pBSDict->SetAtInteger("W", nWidth);
773 { 720 }
721 }
722
723 int CPDFSDK_Annot::GetBorderWidth() const {
724 if (CPDF_Array* pBorder = m_pAnnot->GetAnnotDict()->GetArray("Border")) {
725 return pBorder->GetInteger(2);
726 }
727 if (CPDF_Dictionary* pBSDict = m_pAnnot->GetAnnotDict()->GetDict("BS")) {
728 return pBSDict->GetInteger("W", 1);
729 }
730 return 1;
731 }
732
733 void CPDFSDK_Annot::SetBorderStyle(int nStyle) {
734 CPDF_Dictionary* pBSDict = m_pAnnot->GetAnnotDict()->GetDict("BS");
735 if (!pBSDict) {
736 pBSDict = new CPDF_Dictionary;
737 m_pAnnot->GetAnnotDict()->SetAt("BS", pBSDict);
738 }
739
740 switch (nStyle) {
774 case BBS_SOLID: 741 case BBS_SOLID:
775 pBSDict->SetAtName("S", "S"); 742 pBSDict->SetAtName("S", "S");
776 break; 743 break;
777 case BBS_DASH: 744 case BBS_DASH:
778 pBSDict->SetAtName("S", "D"); 745 pBSDict->SetAtName("S", "D");
779 break; 746 break;
780 case BBS_BEVELED: 747 case BBS_BEVELED:
781 pBSDict->SetAtName("S", "B"); 748 pBSDict->SetAtName("S", "B");
782 break; 749 break;
783 case BBS_INSET: 750 case BBS_INSET:
784 pBSDict->SetAtName("S", "I"); 751 pBSDict->SetAtName("S", "I");
785 break; 752 break;
786 case BBS_UNDERLINE: 753 case BBS_UNDERLINE:
787 pBSDict->SetAtName("S", "U"); 754 pBSDict->SetAtName("S", "U");
788 break; 755 break;
789 } 756 }
790 } 757 }
791 758
792 int CPDFSDK_Annot::GetBorderStyle() const 759 int CPDFSDK_Annot::GetBorderStyle() const {
793 { 760 CPDF_Dictionary* pBSDict = m_pAnnot->GetAnnotDict()->GetDict("BS");
761 if (pBSDict) {
762 CFX_ByteString sBorderStyle = pBSDict->GetString("S", "S");
763 if (sBorderStyle == "S")
764 return BBS_SOLID;
765 if (sBorderStyle == "D")
766 return BBS_DASH;
767 if (sBorderStyle == "B")
768 return BBS_BEVELED;
769 if (sBorderStyle == "I")
770 return BBS_INSET;
771 if (sBorderStyle == "U")
772 return BBS_UNDERLINE;
773 }
774
775 CPDF_Array* pBorder = m_pAnnot->GetAnnotDict()->GetArray("Border");
776 if (pBorder) {
777 if (pBorder->GetCount() >= 4) {
778 CPDF_Array* pDP = pBorder->GetArray(3);
779 if (pDP && pDP->GetCount() > 0)
780 return BBS_DASH;
781 }
782 }
783
784 return BBS_SOLID;
785 }
786
787 void CPDFSDK_Annot::SetBorderDash(const CFX_IntArray& array) {
788 CPDF_Dictionary* pBSDict = m_pAnnot->GetAnnotDict()->GetDict("BS");
789 if (!pBSDict) {
790 pBSDict = new CPDF_Dictionary;
791 m_pAnnot->GetAnnotDict()->SetAt("BS", pBSDict);
792 }
793
794 CPDF_Array* pArray = new CPDF_Array;
795 for (int i = 0, sz = array.GetSize(); i < sz; i++) {
796 pArray->AddInteger(array[i]);
797 }
798
799 pBSDict->SetAt("D", pArray);
800 }
801
802 void CPDFSDK_Annot::GetBorderDash(CFX_IntArray& array) const {
803 CPDF_Array* pDash = NULL;
804
805 CPDF_Array* pBorder = m_pAnnot->GetAnnotDict()->GetArray("Border");
806 if (pBorder) {
807 pDash = pBorder->GetArray(3);
808 } else {
794 CPDF_Dictionary* pBSDict = m_pAnnot->GetAnnotDict()->GetDict("BS"); 809 CPDF_Dictionary* pBSDict = m_pAnnot->GetAnnotDict()->GetDict("BS");
795 if (pBSDict) 810 if (pBSDict) {
796 { 811 pDash = pBSDict->GetArray("D");
797 CFX_ByteString sBorderStyle = pBSDict->GetString("S", "S"); 812 }
798 if (sBorderStyle == "S") return BBS_SOLID; 813 }
799 if (sBorderStyle == "D") return BBS_DASH; 814
800 if (sBorderStyle == "B") return BBS_BEVELED; 815 if (pDash) {
801 if (sBorderStyle == "I") return BBS_INSET; 816 for (int i = 0, sz = pDash->GetCount(); i < sz; i++) {
802 if (sBorderStyle == "U") return BBS_UNDERLINE; 817 array.Add(pDash->GetInteger(i));
803 } 818 }
804 819 }
805 CPDF_Array* pBorder = m_pAnnot->GetAnnotDict()->GetArray("Border"); 820 }
806 if (pBorder) 821
807 { 822 void CPDFSDK_Annot::SetColor(FX_COLORREF color) {
808 if (pBorder->GetCount() >= 4) 823 CPDF_Array* pArray = new CPDF_Array;
809 { 824 pArray->AddNumber((FX_FLOAT)FXSYS_GetRValue(color) / 255.0f);
810 CPDF_Array *pDP = pBorder->GetArray(3); 825 pArray->AddNumber((FX_FLOAT)FXSYS_GetGValue(color) / 255.0f);
811 if (pDP && pDP->GetCount() > 0) 826 pArray->AddNumber((FX_FLOAT)FXSYS_GetBValue(color) / 255.0f);
812 return BBS_DASH; 827 m_pAnnot->GetAnnotDict()->SetAt("C", pArray);
813 } 828 }
814 } 829
815 830 void CPDFSDK_Annot::RemoveColor() {
816 return BBS_SOLID; 831 m_pAnnot->GetAnnotDict()->RemoveAt("C");
817 } 832 }
818 833
819 void CPDFSDK_Annot::SetBorderDash(const CFX_IntArray& array) 834 FX_BOOL CPDFSDK_Annot::GetColor(FX_COLORREF& color) const {
820 { 835 if (CPDF_Array* pEntry = m_pAnnot->GetAnnotDict()->GetArray("C")) {
821 CPDF_Dictionary* pBSDict = m_pAnnot->GetAnnotDict()->GetDict("BS"); 836 int nCount = pEntry->GetCount();
822 if (!pBSDict) 837 if (nCount == 1) {
823 { 838 FX_FLOAT g = pEntry->GetNumber(0) * 255;
824 pBSDict = new CPDF_Dictionary; 839
825 m_pAnnot->GetAnnotDict()->SetAt("BS", pBSDict); 840 color = FXSYS_RGB((int)g, (int)g, (int)g);
826 } 841
827 842 return TRUE;
828 CPDF_Array* pArray = new CPDF_Array; 843 } else if (nCount == 3) {
829 for (int i=0,sz=array.GetSize(); i<sz; i++) 844 FX_FLOAT r = pEntry->GetNumber(0) * 255;
830 { 845 FX_FLOAT g = pEntry->GetNumber(1) * 255;
831 pArray->AddInteger(array[i]); 846 FX_FLOAT b = pEntry->GetNumber(2) * 255;
832 } 847
833 848 color = FXSYS_RGB((int)r, (int)g, (int)b);
834 pBSDict->SetAt("D", pArray); 849
835 } 850 return TRUE;
836 851 } else if (nCount == 4) {
837 void CPDFSDK_Annot::GetBorderDash(CFX_IntArray& array) const 852 FX_FLOAT c = pEntry->GetNumber(0);
838 { 853 FX_FLOAT m = pEntry->GetNumber(1);
839 CPDF_Array* pDash = NULL; 854 FX_FLOAT y = pEntry->GetNumber(2);
840 855 FX_FLOAT k = pEntry->GetNumber(3);
841 CPDF_Array* pBorder = m_pAnnot->GetAnnotDict()->GetArray("Border"); 856
842 if (pBorder) 857 FX_FLOAT r = 1.0f - FX_MIN(1.0f, c + k);
843 { 858 FX_FLOAT g = 1.0f - FX_MIN(1.0f, m + k);
844 pDash = pBorder->GetArray(3); 859 FX_FLOAT b = 1.0f - FX_MIN(1.0f, y + k);
845 } 860
846 else 861 color = FXSYS_RGB((int)(r * 255), (int)(g * 255), (int)(b * 255));
847 { 862
848 CPDF_Dictionary* pBSDict = m_pAnnot->GetAnnotDict()->GetDict("BS"); 863 return TRUE;
849 if (pBSDict) 864 }
850 { 865 }
851 pDash = pBSDict->GetArray("D"); 866
852 } 867 return FALSE;
853 } 868 }
854 869
855 if (pDash) 870 void CPDFSDK_Annot::WriteAppearance(const CFX_ByteString& sAPType,
856 { 871 const CPDF_Rect& rcBBox,
857 for (int i=0,sz=pDash->GetCount(); i<sz; i++) 872 const CPDF_Matrix& matrix,
858 { 873 const CFX_ByteString& sContents,
859 array.Add(pDash->GetInteger(i)); 874 const CFX_ByteString& sAPState) {
860 } 875 CPDF_Dictionary* pAPDict = m_pAnnot->GetAnnotDict()->GetDict("AP");
861 } 876
862 } 877 if (!pAPDict) {
863 878 pAPDict = new CPDF_Dictionary;
864 void CPDFSDK_Annot::SetColor(FX_COLORREF color) 879 m_pAnnot->GetAnnotDict()->SetAt("AP", pAPDict);
865 { 880 }
866 CPDF_Array* pArray = new CPDF_Array; 881
867 pArray->AddNumber((FX_FLOAT)FXSYS_GetRValue(color) / 255.0f); 882 CPDF_Stream* pStream = NULL;
868 pArray->AddNumber((FX_FLOAT)FXSYS_GetGValue(color) / 255.0f); 883 CPDF_Dictionary* pParentDict = NULL;
869 pArray->AddNumber((FX_FLOAT)FXSYS_GetBValue(color) / 255.0f); 884
870 m_pAnnot->GetAnnotDict()->SetAt("C", pArray); 885 if (sAPState.IsEmpty()) {
871 } 886 pParentDict = pAPDict;
872 887 pStream = pAPDict->GetStream(sAPType);
873 void CPDFSDK_Annot::RemoveColor() 888 } else {
874 { 889 CPDF_Dictionary* pAPTypeDict = pAPDict->GetDict(sAPType);
875 m_pAnnot->GetAnnotDict()->RemoveAt("C"); 890 if (!pAPTypeDict) {
876 } 891 pAPTypeDict = new CPDF_Dictionary;
877 892 pAPDict->SetAt(sAPType, pAPTypeDict);
878 FX_BOOL CPDFSDK_Annot::GetColor(FX_COLORREF& color) const 893 }
879 { 894
880 if (CPDF_Array* pEntry = m_pAnnot->GetAnnotDict()->GetArray("C")) 895 pParentDict = pAPTypeDict;
881 { 896 pStream = pAPTypeDict->GetStream(sAPState);
882 int nCount = pEntry->GetCount(); 897 }
883 if (nCount == 1) 898
884 { 899 if (!pStream) {
885 FX_FLOAT g = pEntry->GetNumber(0) * 255; 900 CPDF_Document* pDoc = m_pPageView->GetPDFDocument();
886 901 pStream = new CPDF_Stream(NULL, 0, NULL);
887 color = FXSYS_RGB((int)g, (int)g, (int)g); 902 int32_t objnum = pDoc->AddIndirectObject(pStream);
888 903 pParentDict->SetAtReference(sAPType, pDoc, objnum);
889 return TRUE; 904 }
890 } 905
891 else if (nCount == 3) 906 CPDF_Dictionary* pStreamDict = pStream->GetDict();
892 { 907 if (!pStreamDict) {
893 FX_FLOAT r = pEntry->GetNumber(0) * 255; 908 pStreamDict = new CPDF_Dictionary;
894 FX_FLOAT g = pEntry->GetNumber(1) * 255; 909 pStreamDict->SetAtName("Type", "XObject");
895 FX_FLOAT b = pEntry->GetNumber(2) * 255; 910 pStreamDict->SetAtName("Subtype", "Form");
896 911 pStreamDict->SetAtInteger("FormType", 1);
897 color = FXSYS_RGB((int)r, (int)g, (int)b); 912 pStream->InitStream(NULL, 0, pStreamDict);
898 913 }
899 return TRUE; 914
900 } 915 if (pStreamDict) {
901 else if (nCount == 4) 916 pStreamDict->SetAtMatrix("Matrix", matrix);
902 { 917 pStreamDict->SetAtRect("BBox", rcBBox);
903 FX_FLOAT c = pEntry->GetNumber(0); 918 }
904 FX_FLOAT m = pEntry->GetNumber(1); 919
905 FX_FLOAT y = pEntry->GetNumber(2); 920 pStream->SetData((uint8_t*)sContents.c_str(), sContents.GetLength(), FALSE,
906 FX_FLOAT k = pEntry->GetNumber(3); 921 FALSE);
907 922 }
908 FX_FLOAT r = 1.0f - FX_MIN(1.0f, c + k); 923
909 FX_FLOAT g = 1.0f - FX_MIN(1.0f, m + k); 924 #define BA_ANNOT_MINWIDTH 1
910 FX_FLOAT b = 1.0f - FX_MIN(1.0f, y + k); 925 #define BA_ANNOT_MINHEIGHT 1
911 926
912 color = FXSYS_RGB((int)(r * 255), (int)(g * 255), (int)(b * 255)); 927 FX_FLOAT CPDFSDK_Annot::GetMinWidth() const {
913 928 return BA_ANNOT_MINWIDTH;
914 return TRUE; 929 }
915 } 930
916 } 931 FX_FLOAT CPDFSDK_Annot::GetMinHeight() const {
917 932 return BA_ANNOT_MINHEIGHT;
918 return FALSE; 933 }
919 } 934
920 935 FX_BOOL CPDFSDK_Annot::CreateFormFiller() {
921 936 return TRUE;
922 void CPDFSDK_Annot::WriteAppearance(const CFX_ByteString& sAPType, const CPDF_Re ct& rcBBox, 937 }
923 const CPDF_Matrix& matrix, const CFX_ByteString& sContents, 938 FX_BOOL CPDFSDK_Annot::IsVisible() const {
924 const CFX_ByteString& sAPState) 939 int nFlags = GetFlags();
925 { 940 return !((nFlags & ANNOTFLAG_INVISIBLE) || (nFlags & ANNOTFLAG_HIDDEN) ||
926 CPDF_Dictionary* pAPDict = m_pAnnot->GetAnnotDict()->GetDict("AP"); 941 (nFlags & ANNOTFLAG_NOVIEW));
927 942 }
928 if (!pAPDict) 943
929 { 944 CPDF_Action CPDFSDK_Annot::GetAction() const {
930 pAPDict = new CPDF_Dictionary; 945 return CPDF_Action(m_pAnnot->GetAnnotDict()->GetDict("A"));
931 m_pAnnot->GetAnnotDict()->SetAt("AP", pAPDict); 946 }
932 } 947
933 948 void CPDFSDK_Annot::SetAction(const CPDF_Action& action) {
934 CPDF_Stream* pStream = NULL; 949 ASSERT(action);
935 CPDF_Dictionary* pParentDict = NULL; 950 if ((CPDF_Action&)action !=
936 951 CPDF_Action(m_pAnnot->GetAnnotDict()->GetDict("A"))) {
937 if (sAPState.IsEmpty()) 952 CPDF_Document* pDoc = m_pPageView->GetPDFDocument();
938 { 953 CPDF_Dictionary* pDict = action.GetDict();
939 pParentDict = pAPDict; 954 if (pDict && pDict->GetObjNum() == 0) {
940 pStream = pAPDict->GetStream(sAPType); 955 pDoc->AddIndirectObject(pDict);
941 } 956 }
942 else 957 m_pAnnot->GetAnnotDict()->SetAtReference("A", pDoc, pDict->GetObjNum());
943 { 958 }
944 CPDF_Dictionary* pAPTypeDict = pAPDict->GetDict(sAPType); 959 }
945 if (!pAPTypeDict) 960
946 { 961 void CPDFSDK_Annot::RemoveAction() {
947 pAPTypeDict = new CPDF_Dictionary; 962 m_pAnnot->GetAnnotDict()->RemoveAt("A");
948 pAPDict->SetAt(sAPType, pAPTypeDict); 963 }
949 } 964
950 965 CPDF_AAction CPDFSDK_Annot::GetAAction() const {
951 pParentDict = pAPTypeDict; 966 return m_pAnnot->GetAnnotDict()->GetDict("AA");
952 pStream = pAPTypeDict->GetStream(sAPState); 967 }
953 } 968
954 969 void CPDFSDK_Annot::SetAAction(const CPDF_AAction& aa) {
955 if (!pStream) 970 ASSERT(aa != NULL);
956 { 971
957 CPDF_Document* pDoc = m_pPageView->GetPDFDocument(); 972 if ((CPDF_AAction&)aa != m_pAnnot->GetAnnotDict()->GetDict("AA"))
958 pStream = new CPDF_Stream(NULL, 0, NULL); 973 m_pAnnot->GetAnnotDict()->SetAt("AA", (CPDF_AAction&)aa);
959 int32_t objnum = pDoc->AddIndirectObject(pStream); 974 }
960 pParentDict->SetAtReference(sAPType, pDoc, objnum); 975
961 } 976 void CPDFSDK_Annot::RemoveAAction() {
962 977 m_pAnnot->GetAnnotDict()->RemoveAt("AA");
963 CPDF_Dictionary *pStreamDict = pStream->GetDict(); 978 }
964 if (!pStreamDict) 979
965 { 980 CPDF_Action CPDFSDK_Annot::GetAAction(CPDF_AAction::AActionType eAAT) {
966 pStreamDict = new CPDF_Dictionary; 981 CPDF_AAction AAction = GetAAction();
967 pStreamDict->SetAtName("Type", "XObject"); 982
968 pStreamDict->SetAtName("Subtype", "Form"); 983 if (AAction.ActionExist(eAAT))
969 pStreamDict->SetAtInteger("FormType", 1); 984 return AAction.GetAction(eAAT);
970 pStream->InitStream(NULL,0,pStreamDict); 985
971 } 986 if (eAAT == CPDF_AAction::ButtonUp)
972 987 return GetAction();
973 if (pStreamDict) 988
974 { 989 return CPDF_Action();
975 pStreamDict->SetAtMatrix("Matrix",matrix); 990 }
976 pStreamDict->SetAtRect("BBox", rcBBox); 991
977 } 992 void CPDFSDK_Annot::Annot_OnDraw(CFX_RenderDevice* pDevice,
978 993 CPDF_Matrix* pUser2Device,
979 pStream->SetData((uint8_t*)sContents.c_str(), sContents.GetLength(), FALSE, FALSE); 994 CPDF_RenderOptions* pOptions) {
980 } 995 m_pAnnot->GetAPForm(m_pPageView->GetPDFPage(), CPDF_Annot::Normal);
981 996 m_pAnnot->DrawAppearance(m_pPageView->GetPDFPage(), pDevice, pUser2Device,
982 #define BA_ANNOT_MINWIDTH 1 997 CPDF_Annot::Normal, NULL);
983 #define BA_ANNOT_MINHEIGHT 1 998
984 999 return;
985 FX_FLOAT CPDFSDK_Annot::GetMinWidth() const 1000 }
986 { 1001
987 return BA_ANNOT_MINWIDTH; 1002 CPDF_Page* CPDFSDK_Annot::GetPDFPage() {
988 } 1003 if (m_pPageView)
989 1004 return m_pPageView->GetPDFPage();
990 FX_FLOAT CPDFSDK_Annot::GetMinHeight() const 1005 return NULL;
991 { 1006 }
992 return BA_ANNOT_MINHEIGHT;
993 }
994
995 FX_BOOL CPDFSDK_Annot::CreateFormFiller()
996 {
997 return TRUE;
998 }
999 FX_BOOL CPDFSDK_Annot::IsVisible() const
1000 {
1001 int nFlags = GetFlags();
1002 return !((nFlags & ANNOTFLAG_INVISIBLE) || (nFlags & ANNOTFLAG_HIDDEN) || (n Flags & ANNOTFLAG_NOVIEW));
1003 }
1004
1005 CPDF_Action CPDFSDK_Annot::GetAction() const
1006 {
1007 return CPDF_Action(m_pAnnot->GetAnnotDict()->GetDict("A"));
1008 }
1009
1010 void CPDFSDK_Annot::SetAction(const CPDF_Action& action)
1011 {
1012 ASSERT(action);
1013 if ((CPDF_Action&)action != CPDF_Action(m_pAnnot->GetAnnotDict()->GetDict("A ")))
1014 {
1015 CPDF_Document* pDoc = m_pPageView->GetPDFDocument();
1016 CPDF_Dictionary* pDict = action.GetDict();
1017 if (pDict && pDict->GetObjNum() == 0) {
1018 pDoc->AddIndirectObject(pDict);
1019 }
1020 m_pAnnot->GetAnnotDict()->SetAtReference("A", pDoc, pDict->GetObjNum());
1021 }
1022 }
1023
1024 void CPDFSDK_Annot::RemoveAction()
1025 {
1026 m_pAnnot->GetAnnotDict()->RemoveAt("A");
1027 }
1028
1029 CPDF_AAction CPDFSDK_Annot::GetAAction() const
1030 {
1031 return m_pAnnot->GetAnnotDict()->GetDict("AA");
1032 }
1033
1034 void CPDFSDK_Annot::SetAAction(const CPDF_AAction& aa)
1035 {
1036 ASSERT(aa != NULL);
1037
1038 if ((CPDF_AAction&)aa != m_pAnnot->GetAnnotDict()->GetDict("AA"))
1039 m_pAnnot->GetAnnotDict()->SetAt("AA", (CPDF_AAction&)aa);
1040 }
1041
1042 void CPDFSDK_Annot::RemoveAAction()
1043 {
1044 m_pAnnot->GetAnnotDict()->RemoveAt("AA");
1045 }
1046
1047 CPDF_Action CPDFSDK_Annot::GetAAction(CPDF_AAction::AActionType eAAT)
1048 {
1049 CPDF_AAction AAction = GetAAction();
1050
1051 if (AAction.ActionExist(eAAT))
1052 return AAction.GetAction(eAAT);
1053
1054 if (eAAT == CPDF_AAction::ButtonUp)
1055 return GetAction();
1056
1057 return CPDF_Action();
1058 }
1059
1060 void CPDFSDK_Annot::Annot_OnDraw(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2 Device, CPDF_RenderOptions* pOptions)
1061 {
1062
1063 m_pAnnot->GetAPForm(m_pPageView->GetPDFPage(), CPDF_Annot::Normal);
1064 m_pAnnot->DrawAppearance(m_pPageView->GetPDFPage(), pDevice, pUser2Device, C PDF_Annot::Normal, NULL);
1065
1066 return ;
1067 }
1068
1069 CPDF_Page* CPDFSDK_Annot::GetPDFPage()
1070 {
1071 if(m_pPageView)
1072 return m_pPageView->GetPDFPage();
1073 return NULL;
1074 }
1075
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698