author | pohly <pohly> | 2005-05-05 14:39:33 (UTC) |
---|---|---|
committer | pohly <pohly> | 2005-05-05 14:39:33 (UTC) |
commit | 39fbfd5eb7e45d73d38e8a2ce9437a3d7e1b8e91 (patch) (unidiff) | |
tree | 96e66fdc18dca4d4ab8611133e072f57dea224b9 /noncore/apps/opie-reader/QTReader.cpp | |
parent | 279fc4fd1986074acbadd3a8e86fcf3968a8dd5c (diff) | |
download | opie-39fbfd5eb7e45d73d38e8a2ce9437a3d7e1b8e91.zip opie-39fbfd5eb7e45d73d38e8a2ce9437a3d7e1b8e91.tar.gz opie-39fbfd5eb7e45d73d38e8a2ce9437a3d7e1b8e91.tar.bz2 |
new opie-reader sources with support for ArriereGo, Reb input and flite output plugins
Diffstat (limited to 'noncore/apps/opie-reader/QTReader.cpp') (more/less context) (show whitespace changes)
-rw-r--r-- | noncore/apps/opie-reader/QTReader.cpp | 855 |
1 files changed, 681 insertions, 174 deletions
diff --git a/noncore/apps/opie-reader/QTReader.cpp b/noncore/apps/opie-reader/QTReader.cpp index 33884a0..0c56dd4 100644 --- a/noncore/apps/opie-reader/QTReader.cpp +++ b/noncore/apps/opie-reader/QTReader.cpp | |||
@@ -34,3 +34,6 @@ const int _SBARHEIGHT = 3; | |||
34 | #include <qdir.h> | 34 | #include <qdir.h> |
35 | #include "TableDialog.h" | ||
36 | #include "outputcodec.h" | ||
35 | 37 | ||
38 | /* | ||
36 | #ifdef _UNICODE | 39 | #ifdef _UNICODE |
@@ -40,2 +43,3 @@ const char *QTReader::fonts[] = { "Helvetica", "Courier", "Times", 0 }; | |||
40 | #endif | 43 | #endif |
44 | */ | ||
41 | //const int QTReader::fontsizes[] = { 8, 10, 12, 14, 18, 24, 30, 40, 50, 60, 70, 80, 90, 100, 0 }; | 45 | //const int QTReader::fontsizes[] = { 8, 10, 12, 14, 18, 24, 30, 40, 50, 60, 70, 80, 90, 100, 0 }; |
@@ -51,5 +55,5 @@ tchar QTReader::jplucknextpart[] = { 'N','e','x','t',' ','P','a','r','t',' ','>' | |||
51 | 55 | ||
52 | |||
53 | QTReader::QTReader( QWidget *parent, const char *name, WFlags f) : | 56 | QTReader::QTReader( QWidget *parent, const char *name, WFlags f) : |
54 | QWidget(parent, name, f), | 57 | QWidget(parent, name, f | WRepaintNoErase | WResizeNoErase), |
58 | m_outofdate(true), | ||
55 | m_default_fg(0,0,0), | 59 | m_default_fg(0,0,0), |
@@ -91,12 +95,8 @@ QTReader::QTReader( QWidget *parent, const char *name, WFlags f) : | |||
91 | { | 95 | { |
96 | m_output = NULL; | ||
92 | m_overlap = 1; | 97 | m_overlap = 1; |
93 | setKeyCompression ( true ); | 98 | setKeyCompression ( true ); |
94 | #ifdef DOUBLEBUFFER | ||
95 | dbuff = new QPixmap(); | ||
96 | dbp = new QPainter(); | ||
97 | // if (painter->isActive()) painter->end(); | ||
98 | // painter->begin(frame); | ||
99 | #endif | ||
100 | // init(); | ||
101 | 99 | ||
100 | dbuff = NULL; | ||
101 | dbp = NULL; | ||
102 | } | 102 | } |
@@ -119,3 +119,3 @@ QTReader::QTReader( const QString& filename, QWidget *parent=0, const tchar *nam | |||
119 | init(); | 119 | init(); |
120 | // // qDebug("Load_file(1)"); | 120 | // // qDeb2ug("Load_file(1)"); |
121 | load_file((const tchar*)filename); | 121 | load_file((const tchar*)filename); |
@@ -140,3 +140,4 @@ void QTReader::mousePressEvent( QMouseEvent* _e ) | |||
140 | { | 140 | { |
141 | buffdoc.unsuspend(); | 141 | m_drageligible = false; |
142 | qDebug("Mouse pressed at (%u, %u)", _e->x(), _e->y()); | ||
142 | int x, y, ht, wh; | 143 | int x, y, ht, wh; |
@@ -156,2 +157,4 @@ void QTReader::mousePressEvent( QMouseEvent* _e ) | |||
156 | } | 157 | } |
158 | if (x >= m_left_border && x <= wh - m_right_border && y >= m_topmargin && y <= ht-m_bottommargin) | ||
159 | { | ||
157 | if (_e->button() == RightButton) | 160 | if (_e->button() == RightButton) |
@@ -170,5 +173,5 @@ void QTReader::mousePressEvent( QMouseEvent* _e ) | |||
170 | */ | 173 | */ |
171 | size_t startpos, startoffset, tgt, tgtoffset, pictgt; | 174 | size_t startpos, startoffset, tgt, tgtoffset, pictgt, tabtgt; |
172 | QImage* img; | 175 | QImage* img; |
173 | getcurrentpos(x, y, wh, ht, lineno, startpos, startoffset, tgt, tgtoffset, pictgt, img); | 176 | getcurrentpos(x, y, wh, ht, lineno, startpos, startoffset, tgt, tgtoffset, pictgt, img, tabtgt); |
174 | processmousewordevent(startpos, startoffset, _e, lineno); | 177 | processmousewordevent(startpos, startoffset, _e, lineno); |
@@ -176,2 +179,3 @@ void QTReader::mousePressEvent( QMouseEvent* _e ) | |||
176 | else | 179 | else |
180 | { | ||
177 | processmousepositionevent(_e); | 181 | processmousepositionevent(_e); |
@@ -179,2 +183,143 @@ void QTReader::mousePressEvent( QMouseEvent* _e ) | |||
179 | } | 183 | } |
184 | } | ||
185 | else | ||
186 | { | ||
187 | int ln = -1; | ||
188 | int mp; | ||
189 | int sectionsize = (buffdoc.endSection()-buffdoc.startSection()); | ||
190 | switch (m_scrollpos) | ||
191 | { | ||
192 | case 1: | ||
193 | { | ||
194 | if (m_rotated) | ||
195 | { | ||
196 | if (_e->x() < m_bottommargin) | ||
197 | { | ||
198 | ln = height(); | ||
199 | mp = _e->y(); | ||
200 | } | ||
201 | } | ||
202 | else | ||
203 | { | ||
204 | if (_e->y() > height()-m_bottommargin) | ||
205 | { | ||
206 | ln = width(); | ||
207 | mp = _e->x(); | ||
208 | } | ||
209 | } | ||
210 | } | ||
211 | break; | ||
212 | case 2: | ||
213 | { | ||
214 | if (m_rotated) | ||
215 | { | ||
216 | if (_e->y() > height() - m_right_border) | ||
217 | { | ||
218 | ln = width(); | ||
219 | mp = width()-_e->x(); | ||
220 | } | ||
221 | } | ||
222 | else | ||
223 | { | ||
224 | if (_e->x() > width() - m_right_border) | ||
225 | { | ||
226 | ln = height(); | ||
227 | mp = _e->y(); | ||
228 | } | ||
229 | } | ||
230 | } | ||
231 | break; | ||
232 | case 3: | ||
233 | { | ||
234 | if (m_rotated) | ||
235 | { | ||
236 | if (_e->y() < m_left_border) | ||
237 | { | ||
238 | ln = width(); | ||
239 | mp = width()-_e->x(); | ||
240 | } | ||
241 | } | ||
242 | else | ||
243 | { | ||
244 | if (_e->x() < m_left_border) | ||
245 | { | ||
246 | ln = height(); | ||
247 | mp = _e->y(); | ||
248 | } | ||
249 | } | ||
250 | } | ||
251 | break; | ||
252 | case 0: | ||
253 | default: | ||
254 | ln = -1; | ||
255 | break; | ||
256 | } | ||
257 | if (ln >= 0) | ||
258 | { | ||
259 | int dp = (sectionsize*mp+ln/2)/ln + buffdoc.startSection(); | ||
260 | int winsize = locnarray[numlines]-locnarray[0]; | ||
261 | int slidersize = 10*(sectionsize+ln/2)/ln; | ||
262 | if (slidersize > winsize) | ||
263 | { | ||
264 | int mid = (locnarray[0] + locnarray[numlines])/2; | ||
265 | slidersize /= 2; | ||
266 | if (dp < mid-slidersize) | ||
267 | { | ||
268 | dopageup(); | ||
269 | } | ||
270 | else if (dp > mid+slidersize) | ||
271 | { | ||
272 | dopagedn(); | ||
273 | } | ||
274 | //if (mid-slidersize < dp && dp < mid+slidersize) | ||
275 | else | ||
276 | { | ||
277 | m_drageligible = true; | ||
278 | } | ||
279 | } | ||
280 | else | ||
281 | { | ||
282 | if (dp < locnarray[0]) | ||
283 | { | ||
284 | dopageup(); | ||
285 | } | ||
286 | else if (dp > locnarray[numlines]) | ||
287 | { | ||
288 | dopagedn(); | ||
289 | } | ||
290 | //if (locnarray[0] < dp && dp < locnarray[numlines]) | ||
291 | else | ||
292 | { | ||
293 | m_drageligible = true; | ||
294 | } | ||
295 | } | ||
296 | qDebug("Drag eligible:%s", (m_drageligible) ? "true" : "false"); | ||
297 | } | ||
298 | else | ||
299 | { | ||
300 | if (m_scrollpos == 1) | ||
301 | { | ||
302 | if (x < m_left_border) | ||
303 | { | ||
304 | lineUp(); | ||
305 | } | ||
306 | if (y > ht - m_bottommargin) | ||
307 | { | ||
308 | lineDown(); | ||
309 | } | ||
310 | } | ||
311 | else if (m_scrollpos != 0) | ||
312 | { | ||
313 | if (y < m_topmargin) | ||
314 | { | ||
315 | lineUp(); | ||
316 | } | ||
317 | if (y > ht - m_bottommargin) | ||
318 | { | ||
319 | lineDown(); | ||
320 | } | ||
321 | } | ||
322 | } | ||
323 | } | ||
324 | } | ||
180 | 325 | ||
@@ -297,3 +442,3 @@ void QTReader::goForward() | |||
297 | 442 | ||
298 | linkType QTReader::getcurrentpos(int x, int y, int w, int h, int& lineno, size_t& start, size_t& offset, size_t& tgt, size_t& tgtoffset, size_t& pictgt, QImage*& img) | 443 | linkType QTReader::getcurrentpos(int x, int y, int w, int h, int& lineno, size_t& start, size_t& offset, size_t& tgt, size_t& tgtoffset, size_t& pictgt, QImage*& img, size_t& tabtgt) |
299 | { | 444 | { |
@@ -342,3 +487,3 @@ linkType QTReader::getcurrentpos(int x, int y, int w, int h, int& lineno, size_t | |||
342 | } | 487 | } |
343 | return textarray[lineno]->getLinkType(offset, tgt, tgtoffset, pictgt, img); | 488 | return textarray[lineno]->getLinkType(offset, tgt, tgtoffset, pictgt, img, tabtgt); |
344 | } | 489 | } |
@@ -356,2 +501,34 @@ void QTReader::suspend() | |||
356 | 501 | ||
502 | void QTReader::setDoubleBuffer(bool _b) | ||
503 | { | ||
504 | m_doubleBuffered = _b; | ||
505 | if (_b || m_rotated) | ||
506 | { | ||
507 | if (dbuff == NULL) | ||
508 | { | ||
509 | dbuff = new QPixmap(); | ||
510 | dbp = new QPainter(); | ||
511 | } | ||
512 | if (m_rotated) | ||
513 | { | ||
514 | dbuff->resize(height(), width()); | ||
515 | } | ||
516 | else | ||
517 | { | ||
518 | dbuff->resize(width(), height()); | ||
519 | } | ||
520 | m_outofdate = true; | ||
521 | } | ||
522 | else | ||
523 | { | ||
524 | if (dbuff != NULL) | ||
525 | { | ||
526 | delete dbuff; | ||
527 | delete dbp; | ||
528 | } | ||
529 | dbuff = NULL; | ||
530 | dbp = NULL; | ||
531 | } | ||
532 | } | ||
533 | |||
357 | void QTReader::setTwoTouch(bool _b) | 534 | void QTReader::setTwoTouch(bool _b) |
@@ -364,3 +541,2 @@ void QTReader::setContinuous(bool _b) | |||
364 | { | 541 | { |
365 | buffdoc.unsuspend(); | ||
366 | buffdoc.setContinuous(m_continuousDocument = _b); | 542 | buffdoc.setContinuous(m_continuousDocument = _b); |
@@ -457,3 +633,3 @@ void QTReader::processmousewordevent(size_t startpos, size_t startoffset, QMouse | |||
457 | { | 633 | { |
458 | qDebug("Selecteed:%s", (const char*)wrd); | 634 | qDebug("Selected:%s", (const char*)wrd); |
459 | if (m_twotouch) | 635 | if (m_twotouch) |
@@ -470,5 +646,118 @@ void QTReader::processmousewordevent(size_t startpos, size_t startoffset, QMouse | |||
470 | 646 | ||
647 | #ifdef USETIMER | ||
648 | void QTReader::actionDrag() | ||
649 | { | ||
650 | if (m_drageligible) | ||
651 | { | ||
652 | int fivepages = 5*((2*width()+m_textsize/2)/m_textsize)*((height()+m_textsize/2)/m_textsize); | ||
653 | if (m_dragtarget > fivepages && locnarray[numlines] < m_dragtarget - fivepages) | ||
654 | { | ||
655 | int tgt = m_dragtarget - fivepages/2; | ||
656 | //qDebug("Jumping to %u (%u)", tgt, fivepages); | ||
657 | if (tgt < buffdoc.startSection()) | ||
658 | { | ||
659 | tgt = buffdoc.startSection(); | ||
660 | } | ||
661 | locate(tgt); | ||
662 | drawFonts(); | ||
663 | } | ||
664 | else if (locnarray[0] > m_dragtarget+fivepages) | ||
665 | { | ||
666 | int tgt = m_dragtarget + fivepages/2; | ||
667 | //qDebug("Jumping to %u (%u)", tgt, fivepages); | ||
668 | if (tgt > buffdoc.endSection()) | ||
669 | { | ||
670 | dopageup(); | ||
671 | } | ||
672 | else | ||
673 | { | ||
674 | locate(tgt); | ||
675 | drawFonts(); | ||
676 | } | ||
677 | } | ||
678 | else if (locnarray[numlines] <= m_dragtarget) | ||
679 | { | ||
680 | dopagedn(); | ||
681 | } | ||
682 | else if (locnarray[0] > m_dragtarget) | ||
683 | { | ||
684 | dopageup(); | ||
685 | } | ||
686 | } | ||
687 | else | ||
688 | { | ||
689 | m_dragtimer->stop(); | ||
690 | } | ||
691 | } | ||
692 | #endif | ||
693 | |||
694 | void QTReader::mouseMoveEvent( QMouseEvent* _e ) | ||
695 | { | ||
696 | if (m_drageligible) | ||
697 | { | ||
698 | int ht; | ||
699 | int mp; | ||
700 | int sectionsize = (buffdoc.endSection()-buffdoc.startSection()); | ||
701 | //qDebug("Mouse moved to (%u, %u)", _e->x(), _e->y()); | ||
702 | switch (m_scrollpos) | ||
703 | { | ||
704 | case 1: | ||
705 | { | ||
706 | if (m_rotated) | ||
707 | { | ||
708 | ht = height(); | ||
709 | mp = _e->y(); | ||
710 | } | ||
711 | else | ||
712 | { | ||
713 | ht = width(); | ||
714 | mp = _e->x(); | ||
715 | } | ||
716 | } | ||
717 | break; | ||
718 | case 2: | ||
719 | case 3: | ||
720 | { | ||
721 | if (m_rotated) | ||
722 | { | ||
723 | ht = width(); | ||
724 | mp = width()-_e->x(); | ||
725 | } | ||
726 | else | ||
727 | { | ||
728 | ht = height(); | ||
729 | mp = _e->y(); | ||
730 | } | ||
731 | } | ||
732 | break; | ||
733 | case 0: | ||
734 | default: | ||
735 | ht = -1; | ||
736 | break; | ||
737 | } | ||
738 | if (ht >= 0) | ||
739 | { | ||
740 | #ifdef USETIMER | ||
741 | m_dragtarget = (sectionsize*mp+ht/2)/ht + buffdoc.startSection(); | ||
742 | if (!m_dragtimer->isActive()) | ||
743 | { | ||
744 | m_dragtimer->start(0, false); | ||
745 | } | ||
746 | #else | ||
747 | int dp = (sectionsize*mp+ht/2)/ht + buffdoc.startSection(); | ||
748 | locate(dp); | ||
749 | #endif | ||
750 | } | ||
751 | } | ||
752 | } | ||
753 | |||
471 | void QTReader::mouseReleaseEvent( QMouseEvent* _e ) | 754 | void QTReader::mouseReleaseEvent( QMouseEvent* _e ) |
472 | { | 755 | { |
473 | buffdoc.unsuspend(); | 756 | qDebug("Mouse released at (%u, %u)", _e->x(), _e->y()); |
757 | if (m_drageligible) | ||
758 | { | ||
759 | m_drageligible = false; | ||
760 | } | ||
761 | else | ||
762 | { | ||
474 | int x, y, ht, wh; | 763 | int x, y, ht, wh; |
@@ -493,2 +782,3 @@ void QTReader::mouseReleaseEvent( QMouseEvent* _e ) | |||
493 | // qDebug("MouseRelease"); | 782 | // qDebug("MouseRelease"); |
783 | /* | ||
494 | switch(m_scrollpos) | 784 | switch(m_scrollpos) |
@@ -520,2 +810,3 @@ void QTReader::mouseReleaseEvent( QMouseEvent* _e ) | |||
520 | } | 810 | } |
811 | */ | ||
521 | if (textarray[0] != NULL) | 812 | if (textarray[0] != NULL) |
@@ -532,3 +823,3 @@ void QTReader::mouseReleaseEvent( QMouseEvent* _e ) | |||
532 | */ | 823 | */ |
533 | size_t startpos, startoffset, tgt, tgtoffset, pictgt; | 824 | size_t startpos, startoffset, tgt, tgtoffset, pictgt, tabtgt; |
534 | QImage* img; | 825 | QImage* img; |
@@ -541,3 +832,17 @@ void QTReader::mouseReleaseEvent( QMouseEvent* _e ) | |||
541 | } | 832 | } |
542 | linkType glt = getcurrentpos(x, y, wh, ht, lineno, startpos, startoffset, tgt, tgtoffset, pictgt, img); | 833 | linkType glt = getcurrentpos(x, y, wh, ht, lineno, startpos, startoffset, tgt, tgtoffset, pictgt, img, tabtgt); |
834 | if (bNoInlineTables && ((glt & eTable) != 0)) | ||
835 | { | ||
836 | size_t currentpos = locate(); | ||
837 | QString tabtext = buffdoc.getTableAsHtml(tabtgt); | ||
838 | qDebug("TABLE:%u:%u:%s", currentpos, tabtgt, (const char*)tabtext); | ||
839 | QFont f(m_fontname, m_fontControl.currentsize()); | ||
840 | #ifdef USEQPE | ||
841 | CTableDialog td(f, tabtext, true, this); | ||
842 | #else | ||
843 | CTableDialog td(f, tabtext, false, this); | ||
844 | #endif | ||
845 | td.exec(); | ||
846 | jumpto(currentpos); | ||
847 | } | ||
543 | if ((glt & eLink) != 0) | 848 | if ((glt & eLink) != 0) |
@@ -581,3 +886,3 @@ void QTReader::mouseReleaseEvent( QMouseEvent* _e ) | |||
581 | { | 886 | { |
582 | if (!buffdoc.getFile(href)) | 887 | if (!buffdoc.getFile(href, nm)) |
583 | { | 888 | { |
@@ -587,4 +892,8 @@ void QTReader::mouseReleaseEvent( QMouseEvent* _e ) | |||
587 | { | 892 | { |
893 | qDebug("BEFORE:%u", pagelocate()); | ||
894 | buffdoc.resetPos(); | ||
588 | ResetScroll(); | 895 | ResetScroll(); |
589 | fillbuffer(); | 896 | fillbuffer(); |
897 | qDebug("AFTER:%u", pagelocate()); | ||
898 | m_outofdate = true; | ||
590 | update(); | 899 | update(); |
@@ -597,3 +906,5 @@ void QTReader::mouseReleaseEvent( QMouseEvent* _e ) | |||
597 | { | 906 | { |
907 | buffdoc.resetPos(); | ||
598 | fillbuffer(); | 908 | fillbuffer(); |
909 | m_outofdate = true; | ||
599 | update(); | 910 | update(); |
@@ -614,2 +925,3 @@ void QTReader::mouseReleaseEvent( QMouseEvent* _e ) | |||
614 | fillbuffer(); | 925 | fillbuffer(); |
926 | m_outofdate = true; | ||
615 | update(); | 927 | update(); |
@@ -635,3 +947,2 @@ void QTReader::mouseReleaseEvent( QMouseEvent* _e ) | |||
635 | } | 947 | } |
636 | locate(pagelocate()); | ||
637 | } | 948 | } |
@@ -650,3 +961,3 @@ void QTReader::mouseReleaseEvent( QMouseEvent* _e ) | |||
650 | { | 961 | { |
651 | locate(pagelocate()); | 962 | update(); |
652 | } | 963 | } |
@@ -671,2 +982,3 @@ void QTReader::mouseReleaseEvent( QMouseEvent* _e ) | |||
671 | } | 982 | } |
983 | } | ||
672 | 984 | ||
@@ -674,3 +986,3 @@ void QTReader::focusInEvent(QFocusEvent* e) | |||
674 | { | 986 | { |
675 | if (m_autoScroll) timer->start(real_delay(), false); | 987 | if (m_autoScroll && (m_scrolltype != 4)) timer->start(real_delay(), false); |
676 | update(); | 988 | update(); |
@@ -682,3 +994,10 @@ void QTReader::focusOutEvent(QFocusEvent* e) | |||
682 | { | 994 | { |
995 | if (m_scrolltype != 4) | ||
996 | { | ||
683 | timer->stop(); | 997 | timer->stop(); |
998 | } | ||
999 | else | ||
1000 | { | ||
1001 | m_autoScroll = false; | ||
1002 | } | ||
684 | //m_scrolldy1 = m_scrolldy2 = 0; | 1003 | //m_scrolldy1 = m_scrolldy2 = 0; |
@@ -719,3 +1038,2 @@ void QTReader::NavUp() | |||
719 | { | 1038 | { |
720 | buffdoc.unsuspend(); | ||
721 | if (buffdoc.hasnavigation()) | 1039 | if (buffdoc.hasnavigation()) |
@@ -739,3 +1057,2 @@ void QTReader::NavDown() | |||
739 | { | 1057 | { |
740 | buffdoc.unsuspend(); | ||
741 | if (buffdoc.hasnavigation()) | 1058 | if (buffdoc.hasnavigation()) |
@@ -764,4 +1081,3 @@ void QTReader::zoomin() | |||
764 | setfont(); | 1081 | setfont(); |
765 | locate(pagelocate()); | 1082 | refresh(); |
766 | repaint(); | ||
767 | setautoscroll(sc); | 1083 | setautoscroll(sc); |
@@ -777,4 +1093,3 @@ void QTReader::zoomout() | |||
777 | setfont(); | 1093 | setfont(); |
778 | locate(pagelocate()); | 1094 | refresh(); |
779 | repaint(); | ||
780 | setautoscroll(sc); | 1095 | setautoscroll(sc); |
@@ -811,3 +1126,2 @@ void QTReader::keyPressEvent(QKeyEvent* e) | |||
811 | { | 1126 | { |
812 | buffdoc.unsuspend(); | ||
813 | 1127 | ||
@@ -908,2 +1222,3 @@ void QTReader::setautoscroll(bool _sc) | |||
908 | { | 1222 | { |
1223 | m_outofdate = true; | ||
909 | if (_sc == m_autoScroll) return; | 1224 | if (_sc == m_autoScroll) return; |
@@ -929,2 +1244,5 @@ void QTReader::setautoscroll(bool _sc) | |||
929 | if (reusebuffer == NULL || reusebuffer->eof()) return; | 1244 | if (reusebuffer == NULL || reusebuffer->eof()) return; |
1245 | #ifndef __STATIC | ||
1246 | if ((m_scrolltype == 4) && !checkoutput()) return; | ||
1247 | #endif | ||
930 | m_autoScroll = true; | 1248 | m_autoScroll = true; |
@@ -949,3 +1267,2 @@ bool QTReader::getline(CDrawBuffer *buff) | |||
949 | { | 1267 | { |
950 | buffdoc.unsuspend(); | ||
951 | bool bRet; | 1268 | bool bRet; |
@@ -1067,20 +1384,2 @@ void QTReader::doinplacescroll() | |||
1067 | { | 1384 | { |
1068 | /* | ||
1069 | if (m_rotated) | ||
1070 | { | ||
1071 | blitRot2(0,0,height(),width()-m_scrolldy,NULL); | ||
1072 | // blitRot2(0,0,0,height(),width()-m_scrolldy,NULL); | ||
1073 | } | ||
1074 | else | ||
1075 | { | ||
1076 | if (m_bgpm.isNull()) | ||
1077 | { | ||
1078 | p.fillRect(0,m_scrolldy,width(),height()-m_scrolldy,m_bg); | ||
1079 | } | ||
1080 | else | ||
1081 | { | ||
1082 | bitBlt(this, 0, m_scrolldy, dbuff, 0, m_scrolldy, width(), height()-m_scrolldy); | ||
1083 | } | ||
1084 | } | ||
1085 | */ | ||
1086 | m_scrolldy = m_topmargin; | 1385 | m_scrolldy = m_topmargin; |
@@ -1101,3 +1400,2 @@ void QTReader::doinplacescroll() | |||
1101 | #endif | 1400 | #endif |
1102 | //((QTReaderApp*)parent()->parent())->setScrollState(m_autoScroll); | ||
1103 | emit SetScrollState(m_autoScroll); | 1401 | emit SetScrollState(m_autoScroll); |
@@ -1496,6 +1794,17 @@ void QTReader::autoscroll() | |||
1496 | { | 1794 | { |
1497 | drawBackground(); | 1795 | if (m_scrolltype == 4) |
1796 | { | ||
1797 | readAloud(); | ||
1798 | } | ||
1799 | else | ||
1800 | { | ||
1801 | if (dbuff != NULL) | ||
1802 | { | ||
1803 | dbp->begin(dbuff); | ||
1804 | drawBackground(dbp); | ||
1498 | dbp->end(); | 1805 | dbp->end(); |
1806 | } | ||
1499 | timer->start(real_delay(), false); | 1807 | timer->start(real_delay(), false); |
1500 | } | 1808 | } |
1809 | } | ||
1501 | 1810 | ||
@@ -1559,4 +1868,6 @@ void QTReader::redrawall() | |||
1559 | { | 1868 | { |
1560 | #ifdef DOUBLEBUFFER | 1869 | if (dbuff != NULL) |
1561 | drawBackground(); | 1870 | { |
1871 | dbp->begin(dbuff); | ||
1872 | drawBackground(dbp); | ||
1562 | DrawStraight(dbp, height(), width()); | 1873 | DrawStraight(dbp, height(), width()); |
@@ -1568,8 +1879,10 @@ void QTReader::redrawall() | |||
1568 | bitBlt(this, 0,0,&rp,0,0,-1,-1); | 1879 | bitBlt(this, 0,0,&rp,0,0,-1,-1); |
1569 | #else | 1880 | } |
1881 | else | ||
1882 | { | ||
1883 | qDebug("This shouldn't happen but it doesn't matter if it does (rotated == double buffered)"); | ||
1570 | QPixmap dbuff(height(), width()); | 1884 | QPixmap dbuff(height(), width()); |
1571 | QPainter dbp(&dbuff); | 1885 | QPainter dbp(&dbuff); |
1572 | // dbp.setBackgroundMode(OpaqueMode); | ||
1573 | dbp.fillRect(dbuff.rect(), m_bg); | ||
1574 | 1886 | ||
1887 | drawBackground(&dbp); | ||
1575 | DrawStraight(&dbp, height(), width()); | 1888 | DrawStraight(&dbp, height(), width()); |
@@ -1580,3 +1893,3 @@ void QTReader::redrawall() | |||
1580 | bitBlt(this, 0,0,&rp,0,0,-1,-1); | 1893 | bitBlt(this, 0,0,&rp,0,0,-1,-1); |
1581 | #endif | 1894 | } |
1582 | } | 1895 | } |
@@ -1584,4 +1897,6 @@ void QTReader::redrawall() | |||
1584 | { | 1897 | { |
1585 | #ifdef DOUBLEBUFFER | 1898 | if (dbuff != NULL) |
1586 | drawBackground(); | 1899 | { |
1900 | dbp->begin(dbuff); | ||
1901 | drawBackground(dbp); | ||
1587 | DrawStraight(dbp, width(), height()); | 1902 | DrawStraight(dbp, width(), height()); |
@@ -1589,5 +1904,9 @@ void QTReader::redrawall() | |||
1589 | bitBlt(this, 0,0,dbuff,0,0,-1,-1); | 1904 | bitBlt(this, 0,0,dbuff,0,0,-1,-1); |
1590 | #else | 1905 | } |
1591 | DrawStraight(p, width(), height()); | 1906 | else |
1592 | #endif | 1907 | { |
1908 | QPainter p(this); | ||
1909 | drawBackground(&p); | ||
1910 | DrawStraight(&p, width(), height()); | ||
1911 | } | ||
1593 | } | 1912 | } |
@@ -1602,15 +1921,9 @@ void QTReader::drawFonts() | |||
1602 | //qDebug("How refreshing..."); | 1921 | //qDebug("How refreshing..."); |
1603 | if (buffdoc.empty()) return; | 1922 | if (buffdoc.empty()) |
1604 | setfont(); | ||
1605 | //if (!m_autoScroll) m_scrolldy1 = 0; | ||
1606 | #ifdef ROTATION_ENABLED | ||
1607 | if (m_lastwidth != ((m_rotated) ? height() : width())) | ||
1608 | { | 1923 | { |
1609 | m_scrolldy = m_topmargin; | 1924 | if (dbuff != NULL) |
1610 | // qDebug("Not Optimised %d", m_lastwidth); | 1925 | { |
1611 | m_lastwidth = ((m_rotated) ? height() : width()); | 1926 | dbp->begin(dbuff); |
1612 | m_lastheight = ((m_rotated) ? width() : height()); | 1927 | drawBackground(dbp); |
1613 | buffdoc.setwidth(m_lastwidth-(m_left_border+m_right_border)); | 1928 | dbp->end(); |
1614 | locate(pagelocate()); | ||
1615 | // qDebug("Not Optimised %d", m_lastwidth); | ||
1616 | } | 1929 | } |
@@ -1618,45 +1931,32 @@ void QTReader::drawFonts() | |||
1618 | { | 1931 | { |
1619 | int newht = ((m_rotated) ? width() : height()); | 1932 | QPainter p(this); |
1620 | if (m_lastheight > newht) | 1933 | drawBackground(&p); |
1621 | { | ||
1622 | // qDebug("Optimised < %d %d %d", numlines, m_lastheight, newht); | ||
1623 | m_scrolldy = m_topmargin; | ||
1624 | int ypos = m_scrolldy1+m_topmargin; | ||
1625 | for (int i = 0; i < numlines; i++) | ||
1626 | { | ||
1627 | if ((ypos += textarray[i]->lineSpacing()) > newht - hmargin) | ||
1628 | { | ||
1629 | numlines = i; | ||
1630 | jumpto(mylastpos = locnarray[i+1]); | ||
1631 | break; | ||
1632 | } | ||
1633 | } | 1934 | } |
1634 | // qDebug("Optimised < %d", numlines); | 1935 | return; |
1635 | m_lastheight = newht; | ||
1636 | } | 1936 | } |
1637 | else if (m_lastheight < newht) | 1937 | setfont(); |
1938 | //if (!m_autoScroll) m_scrolldy1 = 0; | ||
1939 | if (dbuff != NULL && (dbuff->width() != width() || dbuff->height() != height())) | ||
1638 | { | 1940 | { |
1639 | m_scrolldy = m_topmargin; | 1941 | qDebug("Oh no! A resize event was missed..."); |
1640 | // qDebug("Optimised > %d", numlines); | 1942 | if (m_rotated) |
1641 | int ypos = m_scrolldy1+m_topmargin; | ||
1642 | for (int i = 0; i <= numlines; i++) | ||
1643 | { | 1943 | { |
1644 | ypos += textarray[i]->lineSpacing(); | 1944 | dbuff->resize(height(), width()); |
1645 | } | ||
1646 | fillbuffer(numlines+1, ypos, newht); | ||
1647 | // qDebug("Optimised > %d", numlines); | ||
1648 | } | 1945 | } |
1649 | if (numlines > 0) | 1946 | else |
1650 | { | 1947 | { |
1651 | redrawall(); | 1948 | dbuff->resize(width(), height()); |
1652 | } | 1949 | } |
1950 | m_lastwidth = 0; | ||
1653 | } | 1951 | } |
1654 | #else | 1952 | if (m_lastwidth != ((m_rotated) ? height() : width())) |
1655 | if (m_lastwidth != width()) | ||
1656 | { | 1953 | { |
1954 | m_scrolldy = m_topmargin; | ||
1657 | // qDebug("Not Optimised %d", m_lastwidth); | 1955 | // qDebug("Not Optimised %d", m_lastwidth); |
1658 | m_lastwidth = width(); | 1956 | m_lastwidth = ((m_rotated) ? height() : width()); |
1659 | m_lastheight = height(); | 1957 | m_lastheight = ((m_rotated) ? width() : height()); |
1660 | buffdoc.setwidth(m_lastwidth-(m_left_border+m_right_border)); | 1958 | buffdoc.setwidth(m_lastwidth-(m_left_border+m_right_border)); |
1661 | locate(pagelocate()); | 1959 | buffdoc.locate(pagelocate()); |
1960 | fillbuffer(); | ||
1961 | redrawall(); | ||
1662 | // qDebug("Not Optimised %d", m_lastwidth); | 1962 | // qDebug("Not Optimised %d", m_lastwidth); |
@@ -1665,3 +1965,3 @@ void QTReader::drawFonts() | |||
1665 | { | 1965 | { |
1666 | int newht = height(); | 1966 | int newht = ((m_rotated) ? width() : height()); |
1667 | if (m_lastheight > newht) | 1967 | if (m_lastheight > newht) |
@@ -1669,3 +1969,4 @@ void QTReader::drawFonts() | |||
1669 | // qDebug("Optimised < %d %d %d", numlines, m_lastheight, newht); | 1969 | // qDebug("Optimised < %d %d %d", numlines, m_lastheight, newht); |
1670 | int ypos = m_topmargin; | 1970 | m_scrolldy = m_topmargin; |
1971 | int ypos = m_scrolldy1+m_topmargin; | ||
1671 | for (int i = 0; i < numlines; i++) | 1972 | for (int i = 0; i < numlines; i++) |
@@ -1684,4 +1985,5 @@ void QTReader::drawFonts() | |||
1684 | { | 1985 | { |
1986 | m_scrolldy = m_topmargin; | ||
1685 | // qDebug("Optimised > %d", numlines); | 1987 | // qDebug("Optimised > %d", numlines); |
1686 | int ypos = m_topmargin; | 1988 | int ypos = m_scrolldy1+m_topmargin; |
1687 | for (int i = 0; i <= numlines; i++) | 1989 | for (int i = 0; i <= numlines; i++) |
@@ -1695,17 +1997,5 @@ void QTReader::drawFonts() | |||
1695 | { | 1997 | { |
1696 | int ypos = textarray[0]->ascent()+m_topmargin; | 1998 | redrawall(); |
1697 | textarray[0]->render( p, ypos, m_bMonoSpaced, m_charWidth, width(), m_left_border, m_right_border, m_bg, height()-m_topmargin-m_bottommargin); | ||
1698 | // int last = (m_showlast) ? numlines : numlines-1; | ||
1699 | // for (int i = 1; i <= last; i++) | ||
1700 | for (int i = 1; i < numlines; i++) | ||
1701 | { | ||
1702 | // ypos += (textarray[i-1]->lineSpacing() + textarray[i]->lineSpacing())/2; | ||
1703 | ypos += (textarray[i-1]->descent() + textarray[i]->ascent())+ | ||
1704 | (textarray[i-1]->lineExtraSpacing() + textarray[i]->lineExtraSpacing())/2; | ||
1705 | textarray[i]->render( p, ypos, m_bMonoSpaced, m_charWidth, width(), m_left_border, m_right_border, m_bg, height()-m_topmargin-m_bottommargin); | ||
1706 | } | ||
1707 | // mylastpos = locate(); | ||
1708 | } | 1999 | } |
1709 | } | 2000 | } |
1710 | #endif | ||
1711 | emitRedraw(); | 2001 | emitRedraw(); |
@@ -1930,3 +2220,2 @@ void QTReader::init() | |||
1930 | { | 2220 | { |
1931 | buffdoc.unsuspend(); | ||
1932 | setBackgroundColor( m_bg ); | 2221 | setBackgroundColor( m_bg ); |
@@ -1937,2 +2226,6 @@ void QTReader::init() | |||
1937 | connect(timer, SIGNAL(timeout()), this, SLOT(doscroll())); | 2226 | connect(timer, SIGNAL(timeout()), this, SLOT(doscroll())); |
2227 | #ifdef USETIMER | ||
2228 | m_dragtimer = new QTimer(this); | ||
2229 | connect(m_dragtimer, SIGNAL(timeout()), this, SLOT(actionDrag())); | ||
2230 | #endif | ||
1938 | // QMessageBox::information(this, "init", m_lastfile, 1); | 2231 | // QMessageBox::information(this, "init", m_lastfile, 1); |
@@ -1946,6 +2239,11 @@ QTReader::~QTReader() | |||
1946 | { | 2239 | { |
1947 | #ifdef DOUBLEBUFFER | 2240 | if (m_output != NULL) |
2241 | { | ||
2242 | delete m_output; | ||
2243 | } | ||
2244 | if (dbuff != NULL) | ||
2245 | { | ||
1948 | delete dbuff; | 2246 | delete dbuff; |
1949 | delete dbp; | 2247 | delete dbp; |
1950 | #endif | 2248 | } |
1951 | #ifdef USEQPE | 2249 | #ifdef USEQPE |
@@ -1984,3 +2282,39 @@ void QTReader::printIt() | |||
1984 | 2282 | ||
1985 | void QTReader::paintEvent( QPaintEvent * ) | 2283 | void QTReader::paintEvent( QPaintEvent * p ) |
2284 | { | ||
2285 | if ((dbuff != NULL) && !m_outofdate) | ||
2286 | { | ||
2287 | if (m_rotated) | ||
2288 | { | ||
2289 | if ((p->rect().width() != width()) || (p->rect().height() != height())) | ||
2290 | { | ||
2291 | qDebug("Partial paint"); | ||
2292 | QRect r; | ||
2293 | r.setTop(width()-p->rect().right()-1); | ||
2294 | r.setLeft(p->rect().top()); | ||
2295 | r.setHeight(p->rect().width()); | ||
2296 | r.setWidth(p->rect().height()); | ||
2297 | QPixmap p1(r.width(), r.height()); | ||
2298 | bitBlt(&p1, QPoint(0, 0), dbuff, r); | ||
2299 | QWMatrix m; | ||
2300 | m.rotate(90); | ||
2301 | QPixmap p2 = p1.xForm(m); | ||
2302 | bitBlt(this, p->rect().left(), p->rect().top(), &p2, 0, 0, -1, -1); | ||
2303 | } | ||
2304 | else | ||
2305 | { | ||
2306 | qDebug("Full paint"); | ||
2307 | QWMatrix m; | ||
2308 | m.rotate(90); | ||
2309 | QPixmap rp = dbuff->xForm(m); | ||
2310 | bitBlt(this, 0,0,&rp,0,0,-1,-1); | ||
2311 | } | ||
2312 | } | ||
2313 | else | ||
2314 | { | ||
2315 | //bitBlt(this, 0,0,dbuff,0,0,-1,-1); | ||
2316 | bitBlt(this,p->rect().topLeft(),dbuff,p->rect()); | ||
2317 | } | ||
2318 | } | ||
2319 | else | ||
1986 | { | 2320 | { |
@@ -1988,2 +2322,4 @@ void QTReader::paintEvent( QPaintEvent * ) | |||
1988 | } | 2322 | } |
2323 | m_outofdate = false; | ||
2324 | } | ||
1989 | 2325 | ||
@@ -2018,5 +2354,14 @@ int main( int argc, tchar **argv ) | |||
2018 | 2354 | ||
2355 | bool QTReader::locate(unsigned long n) | ||
2356 | { | ||
2357 | m_outofdate = true; | ||
2358 | m_lastwidth = 0; | ||
2359 | locnarray[0] = n; | ||
2360 | ResetScroll(); | ||
2361 | update(); | ||
2362 | return true; | ||
2363 | } | ||
2364 | /* | ||
2019 | bool QTReader::locate(unsigned long n) { | 2365 | bool QTReader::locate(unsigned long n) { |
2020 | //printf("Locate\n"); | 2366 | //printf("Locate\n"); |
2021 | buffdoc.unsuspend(); | ||
2022 | buffdoc.locate(n); | 2367 | buffdoc.locate(n); |
@@ -2025,2 +2370,3 @@ bool QTReader::locate(unsigned long n) { | |||
2025 | fillbuffer(); | 2370 | fillbuffer(); |
2371 | m_outofdate = true; | ||
2026 | // // qDebug("&Buffer filled"); | 2372 | // // qDebug("&Buffer filled"); |
@@ -2031,3 +2377,3 @@ bool QTReader::locate(unsigned long n) { | |||
2031 | } | 2377 | } |
2032 | 2378 | */ | |
2033 | unsigned int QTReader::screenlines() | 2379 | unsigned int QTReader::screenlines() |
@@ -2041,3 +2387,2 @@ bool QTReader::fillbuffer(int reuse, int ht, int newht) | |||
2041 | { | 2387 | { |
2042 | buffdoc.unsuspend(); | ||
2043 | int hmargin = ((m_scrollpos == 1) ? _SBARHEIGHT : 0); | 2388 | int hmargin = ((m_scrollpos == 1) ? _SBARHEIGHT : 0); |
@@ -2065,2 +2410,8 @@ bool QTReader::fillbuffer(int reuse, int ht, int newht) | |||
2065 | ypos += textarray[numlines]->lineSpacing(); | 2410 | ypos += textarray[numlines]->lineSpacing(); |
2411 | /* | ||
2412 | QString tmp = toQString(textarray[numlines]->data()); | ||
2413 | printf("[%u, %u, %u](%s):%s\n", lastypos, m_lastheight-hmargin, ypos, | ||
2414 | ((textarray[numlines]->showPartial()) ? "TRUE" : "FALSE"), | ||
2415 | (const char*)tmp); | ||
2416 | */ | ||
2066 | numlines++; | 2417 | numlines++; |
@@ -2071,3 +2422,6 @@ bool QTReader::fillbuffer(int reuse, int ht, int newht) | |||
2071 | qDebug("FALSE"); | 2422 | qDebug("FALSE"); |
2423 | if (oldpagepos < buffdoc.endSection()) | ||
2072 | locate(oldpagepos); | 2424 | locate(oldpagepos); |
2425 | else | ||
2426 | dopageup(buffdoc.endSection()); | ||
2073 | return false; | 2427 | return false; |
@@ -2103,3 +2457,2 @@ void QTReader::dopagedn() | |||
2103 | // qDebug("HEIGHT(2):%d", m_lastheight); | 2457 | // qDebug("HEIGHT(2):%d", m_lastheight); |
2104 | buffdoc.unsuspend(); | ||
2105 | ResetScroll(); | 2458 | ResetScroll(); |
@@ -2152,4 +2505,6 @@ bool QTReader::synch(size_t start, size_t end) | |||
2152 | if (ch == 10) return true; | 2505 | if (ch == 10) return true; |
2153 | if (ch == UEOF) return false; | 2506 | if ((ch == UEOF) || (ch == 6)) |
2154 | if (ch == 6) return false; | 2507 | { |
2508 | return false; | ||
2509 | } | ||
2155 | } | 2510 | } |
@@ -2160,3 +2515,2 @@ void QTReader::dopageup(unsigned int target) | |||
2160 | { | 2515 | { |
2161 | buffdoc.unsuspend(); | ||
2162 | ResetScroll(); | 2516 | ResetScroll(); |
@@ -2164,4 +2518,4 @@ void QTReader::dopageup(unsigned int target) | |||
2164 | CBufferFace<size_t> loc; | 2518 | CBufferFace<size_t> loc; |
2165 | |||
2166 | size_t delta, guess = 2*(locate()-pagelocate()), lastdelta = 0; | 2519 | size_t delta, guess = 2*(locate()-pagelocate()), lastdelta = 0; |
2520 | qDebug("dopageup:: locate():%u pagelocate():%u guess:%u", locate(), pagelocate(), guess); | ||
2167 | bool ch = true; | 2521 | bool ch = true; |
@@ -2182,2 +2536,3 @@ void QTReader::dopageup(unsigned int target) | |||
2182 | delta = 0; // 0 is a flag to say don't guess any more | 2536 | delta = 0; // 0 is a flag to say don't guess any more |
2537 | qDebug("Jumping to startsection:%d", buffdoc.startSection()); | ||
2183 | jumpto(buffdoc.startSection()); | 2538 | jumpto(buffdoc.startSection()); |
@@ -2295,4 +2650,5 @@ bool QTReader::load_file(const char *newfile, unsigned int _lcn) | |||
2295 | unsigned int lcn = _lcn; | 2650 | unsigned int lcn = _lcn; |
2651 | bDoUpdates = false; | ||
2296 | ResetScroll(); | 2652 | ResetScroll(); |
2297 | if (m_lastfile == newfile) | 2653 | if (m_lastfile == newfile && lcn == 0) |
2298 | { | 2654 | { |
@@ -2318,4 +2674,2 @@ bool QTReader::load_file(const char *newfile, unsigned int _lcn) | |||
2318 | qDebug("buffdoc.openfile done"); | 2674 | qDebug("buffdoc.openfile done"); |
2319 | locate(lcn); | ||
2320 | qDebug("buffdoc.locate done"); | ||
2321 | } | 2675 | } |
@@ -2323,2 +2677,4 @@ bool QTReader::load_file(const char *newfile, unsigned int _lcn) | |||
2323 | qDebug("Updated"); | 2677 | qDebug("Updated"); |
2678 | bDoUpdates = true; | ||
2679 | locate(lcn); | ||
2324 | return bRC; | 2680 | return bRC; |
@@ -2360,2 +2716,3 @@ void QTReader::lineDown() | |||
2360 | mylastpos = locate(); | 2716 | mylastpos = locate(); |
2717 | m_outofdate = true; | ||
2361 | update(); | 2718 | update(); |
@@ -2574,5 +2931,9 @@ MarkupType QTReader::PreferredMarkup() | |||
2574 | } | 2931 | } |
2575 | #ifdef DOUBLEBUFFER | 2932 | |
2576 | void QTReader::resizeEvent( QResizeEvent * p ) | 2933 | void QTReader::resizeEvent( QResizeEvent * p ) |
2577 | { | 2934 | { |
2935 | qDebug("Resizing"); | ||
2936 | m_outofdate = true; | ||
2937 | if (dbuff != NULL) | ||
2938 | { | ||
2578 | if (m_rotated) | 2939 | if (m_rotated) |
@@ -2585,2 +2946,3 @@ void QTReader::resizeEvent( QResizeEvent * p ) | |||
2585 | } | 2946 | } |
2947 | } | ||
2586 | m_bgIsScaled = false; | 2948 | m_bgIsScaled = false; |
@@ -2607,10 +2969,10 @@ void QTReader::resizeEvent( QResizeEvent * p ) | |||
2607 | m_right_border = (w*m_absright_border+500)/1000; | 2969 | m_right_border = (w*m_absright_border+500)/1000; |
2608 | 2970 | } | |
2609 | qDebug("Top margin:%u", m_topmargin ); | 2971 | if (dbuff != NULL && buffdoc.empty()) |
2610 | qDebug("Bottom margin:%u", m_bottommargin ); | 2972 | { |
2611 | qDebug("Left margin:%u", m_left_border ); | 2973 | dbp->begin(dbuff); |
2612 | qDebug("Right margin:%u", m_right_border ); | 2974 | drawBackground(dbp); |
2975 | dbp->end(); | ||
2613 | } | 2976 | } |
2614 | } | 2977 | } |
2615 | #endif | ||
2616 | 2978 | ||
@@ -2618,14 +2980,8 @@ void QTReader::setrotated(bool sfs) | |||
2618 | { | 2980 | { |
2981 | qDebug("Rotating"); | ||
2619 | m_rotated = sfs; | 2982 | m_rotated = sfs; |
2620 | #ifdef DOUBLEBUFFER | 2983 | setDoubleBuffer(m_doubleBuffered); |
2621 | if (m_rotated) | ||
2622 | { | ||
2623 | dbuff->resize(height(), width()); | ||
2624 | } | ||
2625 | else | ||
2626 | { | ||
2627 | dbuff->resize(width(), height()); | ||
2628 | } | ||
2629 | m_bgIsScaled = false; | 2984 | m_bgIsScaled = false; |
2630 | #endif | 2985 | m_outofdate = true; |
2986 | /* | ||
2631 | int h, w; | 2987 | int h, w; |
@@ -2650,13 +3006,27 @@ void QTReader::setrotated(bool sfs) | |||
2650 | qDebug("Right margin:%u", m_right_border ); | 3006 | qDebug("Right margin:%u", m_right_border ); |
3007 | */ | ||
2651 | } | 3008 | } |
2652 | 3009 | ||
2653 | void QTReader::drawBackground() | 3010 | void QTReader::drawBackground(QPainter *p) |
2654 | { | 3011 | { |
2655 | dbp->begin(dbuff); | 3012 | // p->setBackgroundMode(OpaqueMode); |
2656 | // dbp->setBackgroundMode(OpaqueMode); | 3013 | p->setBackgroundColor(m_bg); |
2657 | dbp->setBackgroundColor(m_bg); | 3014 | if (dbuff != NULL) |
2658 | dbp->eraseRect(dbuff->rect()); | 3015 | { |
3016 | p->eraseRect(dbuff->rect()); | ||
3017 | } | ||
3018 | else | ||
3019 | { | ||
3020 | if (m_rotated) | ||
3021 | { | ||
3022 | p->eraseRect(0,0,height(),width()); | ||
3023 | } | ||
3024 | else | ||
3025 | { | ||
3026 | p->eraseRect(rect()); | ||
3027 | } | ||
3028 | } | ||
2659 | if (!m_bgpm.isNull()) | 3029 | if (!m_bgpm.isNull()) |
2660 | { | 3030 | { |
2661 | // dbp->setBackgroundMode(TransparentMode); | 3031 | // p->setBackgroundMode(TransparentMode); |
2662 | switch (m_bgtype) | 3032 | switch (m_bgtype) |
@@ -2665,5 +3035,12 @@ void QTReader::drawBackground() | |||
2665 | { | 3035 | { |
3036 | if (dbuff == NULL) | ||
3037 | { | ||
3038 | p->drawPixmap(width(),height(),m_bgpm); | ||
3039 | } | ||
3040 | else | ||
3041 | { | ||
2666 | int w = (dbuff->rect().width()-m_bgpm.width())/2; | 3042 | int w = (dbuff->rect().width()-m_bgpm.width())/2; |
2667 | int h = (dbuff->rect().height()-m_bgpm.height())/2; | 3043 | int h = (dbuff->rect().height()-m_bgpm.height())/2; |
2668 | dbp->drawPixmap(w,h,m_bgpm); | 3044 | p->drawPixmap(w,h,m_bgpm); |
3045 | } | ||
2669 | } | 3046 | } |
@@ -2672,12 +3049,10 @@ void QTReader::drawBackground() | |||
2672 | { | 3049 | { |
2673 | dbp->drawTiledPixmap(0,0,dbuff->rect().width(),dbuff->rect().height(),m_bgpm); | 3050 | if (dbuff == NULL) |
2674 | /* | ||
2675 | for (int h = 0; h < dbuff->rect().height(); h += m_bgpm.height()) | ||
2676 | { | ||
2677 | for (int w = 0; w < dbuff->rect().width(); w += m_bgpm.width()) | ||
2678 | { | 3051 | { |
2679 | dbp->drawPixmap(w,h,m_bgpm); | 3052 | p->drawTiledPixmap(0,0,width(),height(),m_bgpm); |
2680 | } | 3053 | } |
3054 | else | ||
3055 | { | ||
3056 | p->drawTiledPixmap(0,0,dbuff->rect().width(),dbuff->rect().height(),m_bgpm); | ||
2681 | } | 3057 | } |
2682 | */ | ||
2683 | } | 3058 | } |
@@ -2690,5 +3065,12 @@ void QTReader::drawBackground() | |||
2690 | QImage im = m_bgpm.convertToImage(); | 3065 | QImage im = m_bgpm.convertToImage(); |
3066 | if (dbuff == NULL) | ||
3067 | { | ||
3068 | m_bgpm.convertFromImage(im.smoothScale(width(),height())); | ||
3069 | } | ||
3070 | else | ||
3071 | { | ||
2691 | m_bgpm.convertFromImage(im.smoothScale(dbuff->rect().width(), dbuff->rect().height())); | 3072 | m_bgpm.convertFromImage(im.smoothScale(dbuff->rect().width(), dbuff->rect().height())); |
2692 | } | 3073 | } |
2693 | dbp->drawPixmap(0,0,m_bgpm); | 3074 | } |
3075 | p->drawPixmap(0,0,m_bgpm); | ||
2694 | } | 3076 | } |
@@ -2698,3 +3080,3 @@ void QTReader::drawBackground() | |||
2698 | } | 3080 | } |
2699 | // dbp->setBackgroundMode(OpaqueMode); | 3081 | // p->setBackgroundMode(OpaqueMode); |
2700 | } | 3082 | } |
@@ -2761,3 +3143,8 @@ QString QTReader::about() | |||
2761 | { | 3143 | { |
2762 | return QString("QTReader widget (c) Tim Wentford\n")+buffdoc.about() + "\nMini-scrollbar by Markus Gritsch\nNavigation History fixes by Frantisek Dufka"; | 3144 | QString ab = QString("QTReader widget (c) Tim Wentford\n")+buffdoc.about() + "\nMini-scrollbar by Markus Gritsch\nNavigation History fixes by Frantisek Dufka"; |
3145 | if (m_output != NULL) | ||
3146 | { | ||
3147 | ab += QString("\n") + m_output->about(); | ||
3148 | } | ||
3149 | return ab; | ||
2763 | } | 3150 | } |
@@ -2899,3 +3286,3 @@ void QTReader::gotoLink() | |||
2899 | { | 3286 | { |
2900 | if (!buffdoc.getFile(href)) | 3287 | if (!buffdoc.getFile(href, nm)) |
2901 | { | 3288 | { |
@@ -2907,2 +3294,3 @@ void QTReader::gotoLink() | |||
2907 | fillbuffer(); | 3294 | fillbuffer(); |
3295 | m_outofdate = true; | ||
2908 | update(); | 3296 | update(); |
@@ -2915,3 +3303,5 @@ void QTReader::gotoLink() | |||
2915 | { | 3303 | { |
3304 | buffdoc.resetPos(); | ||
2916 | fillbuffer(); | 3305 | fillbuffer(); |
3306 | m_outofdate = true; | ||
2917 | update(); | 3307 | update(); |
@@ -2932,2 +3322,3 @@ void QTReader::gotoLink() | |||
2932 | fillbuffer(); | 3322 | fillbuffer(); |
3323 | m_outofdate = true; | ||
2933 | update(); | 3324 | update(); |
@@ -2951,5 +3342,5 @@ void QTReader::gotoLink() | |||
2951 | emit OnURLSelected(href, tgt); | 3342 | emit OnURLSelected(href, tgt); |
3343 | refresh(); | ||
2952 | } | 3344 | } |
2953 | } | 3345 | } |
2954 | locate(pagelocate()); | ||
2955 | } | 3346 | } |
@@ -2962,2 +3353,3 @@ void QTReader::refresh(bool full) | |||
2962 | { | 3353 | { |
3354 | qDebug("Refreshing"); | ||
2963 | int h, w; | 3355 | int h, w; |
@@ -2983,3 +3375,118 @@ void QTReader::refresh(bool full) | |||
2983 | if (full && m_highlightfilter) m_highlightfilter->refresh(pagelocate()); | 3375 | if (full && m_highlightfilter) m_highlightfilter->refresh(pagelocate()); |
3376 | m_outofdate = true; | ||
2984 | locate(pagelocate()); | 3377 | locate(pagelocate()); |
2985 | } | 3378 | } |
3379 | |||
3380 | #include "striphtml.h" | ||
3381 | |||
3382 | CFilterChain* QTReader::getfilter() | ||
3383 | { | ||
3384 | CFilterChain * filt = new CFilterChain(getencoding()); | ||
3385 | if (bstripcr) filt->addfilter(new stripcr); | ||
3386 | |||
3387 | if (btextfmt || (bautofmt && (PreferredMarkup() == cTEXT))) filt->addfilter(new textfmt); | ||
3388 | if (bpeanut || (bautofmt && (PreferredMarkup() == cPML))) filt->addfilter(new PeanutFormatter); | ||
3389 | // if (bstriphtml || (bautofmt && (PreferredMarkup() == cHTML))) filt->addfilter(new striphtml(m_lastfile)); | ||
3390 | |||
3391 | #ifdef __STATIC | ||
3392 | if (bstriphtml || (bautofmt && (PreferredMarkup() == cHTML))) filt->addfilter(new striphtml(m_lastfile)); | ||
3393 | if (bautofmt && (PreferredMarkup() == cCHM)) | ||
3394 | { | ||
3395 | striphtml* f = new striphtml(m_lastfile); | ||
3396 | f->setchm(true); | ||
3397 | filt->addfilter(f); | ||
3398 | } | ||
3399 | #else | ||
3400 | if (bstriphtml || (bautofmt && (PreferredMarkup() == cHTML))) filt->addfilter(new ExternFilter("HTMLfilter", m_lastfile)); | ||
3401 | if (bautofmt && (PreferredMarkup() == cCHM)) | ||
3402 | { | ||
3403 | ExternFilter* f = new ExternFilter("HTMLfilter",m_lastfile); | ||
3404 | ((striphtml*)f->filter())->setchm(true); | ||
3405 | filt->addfilter(f); | ||
3406 | } | ||
3407 | #endif | ||
3408 | m_highlightfilter = new HighlightFilter(this); | ||
3409 | filt->addfilter(m_highlightfilter); | ||
3410 | |||
3411 | if (bdehyphen) filt->addfilter(new dehyphen); | ||
3412 | if (bunindent) filt->addfilter(new unindent); | ||
3413 | if (brepara) filt->addfilter(new repara(m_reparastring)); | ||
3414 | if (bonespace) filt->addfilter(new OnePara); | ||
3415 | if (bindenter) filt->addfilter(new indenter(bindenter)); | ||
3416 | if (bdblspce) filt->addfilter(new dblspce); | ||
3417 | if (bdepluck) filt->addfilter(new DePluck(pluckernextpart)); | ||
3418 | if (bdejpluck) filt->addfilter(new DePluck(jplucknextpart)); | ||
3419 | if (brepalm) filt->addfilter(new repalm); | ||
3420 | if (bunderlineLink) filt->addfilter(new underlineLink); | ||
3421 | if (bkern) filt->addfilter(new kern); | ||
3422 | if (bremap) filt->addfilter(new remap); | ||
3423 | if (bmakebold) filt->addfilter(new embolden); | ||
3424 | if (bfulljust) filt->addfilter(new FullJust); | ||
3425 | int r,g,b; | ||
3426 | m_default_bg.rgb(&r, &g, &b); | ||
3427 | if (r != 255 || g != 255 || b != 255) | ||
3428 | filt->addfilter(new setbg(r,g,b)); | ||
3429 | m_default_fg.rgb(&r, &g, &b); | ||
3430 | if (r != 0 || g != 0 || b != 0) | ||
3431 | filt->addfilter(new setfg(r,g,b)); | ||
3432 | // if (bNegative) filt->addfilter(new makeNegative); | ||
3433 | if (bInverse) filt->addfilter(new makeInverse); | ||
3434 | if (bNoInlineTables) filt->addfilter(new tableLink); | ||
3435 | return filt; | ||
3436 | } | ||
3437 | |||
3438 | void QTReader::readAloud() | ||
3439 | { | ||
3440 | #ifdef __STATIC | ||
3441 | return; | ||
3442 | #else | ||
3443 | CBuffer para; | ||
3444 | jumpto(pagelocate()); | ||
3445 | while (m_autoScroll && (buffdoc.getpara(para) != -1)) | ||
3446 | { | ||
3447 | if (para.length() > 0) | ||
3448 | { | ||
3449 | unsigned long lastpos = buffdoc.explocate(); | ||
3450 | while (lastpos > mylastpos) | ||
3451 | { | ||
3452 | dopagedn(); | ||
3453 | qApp->processEvents(); | ||
3454 | } | ||
3455 | jumpto(lastpos); | ||
3456 | QString txt = toQString(para.data()); | ||
3457 | |||
3458 | doOutput(txt); | ||
3459 | } | ||
3460 | qApp->processEvents(); | ||
3461 | } | ||
3462 | #endif | ||
3463 | } | ||
3464 | |||
3465 | bool QTReader::doOutput(const QString& wrd) | ||
3466 | { | ||
3467 | if (m_output != NULL) | ||
3468 | { | ||
3469 | m_output->output(wrd); | ||
3470 | return true; | ||
3471 | } | ||
3472 | else | ||
3473 | { | ||
3474 | return false; | ||
3475 | } | ||
3476 | } | ||
3477 | |||
3478 | bool QTReader::checkoutput() | ||
3479 | { | ||
3480 | if (m_output == NULL) | ||
3481 | { | ||
3482 | m_output = new outputcodec(m_outputName); | ||
3483 | if (reinterpret_cast<outputcodec*>(m_output)->getStatus() != 0) | ||
3484 | { | ||
3485 | delete m_output; | ||
3486 | m_output = NULL; | ||
3487 | QMessageBox::warning(this, PROGNAME, QString("Couldn't find output codec\n")+m_outputName); | ||
3488 | return false; | ||
3489 | } | ||
3490 | } | ||
3491 | return true; | ||
3492 | } | ||