-rw-r--r-- | noncore/apps/opie-reader/QTReader.cpp | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/noncore/apps/opie-reader/QTReader.cpp b/noncore/apps/opie-reader/QTReader.cpp index fc9cffb..6335ea2 100644 --- a/noncore/apps/opie-reader/QTReader.cpp +++ b/noncore/apps/opie-reader/QTReader.cpp @@ -548,256 +548,257 @@ void QTReader::ChangeFont(int tgt) m_textsize = best; fontsizes[i] = 0; setfont(NULL); QFont font(m_fontname, fontsizes[m_textsize], (m_bBold) ? QFont::Bold : QFont::Normal ); if (m_fm == NULL) { m_fm = new QFontMetrics(font); buffdoc.setfm(m_fm); } } void QTReader::init() { // setCaption( "Qt Draw Demo Application" ); setBackgroundColor( white ); // QPainter p(this); // p.setBackgroundMode( Qt::OpaqueMode ); buffdoc.setfilter(getfilter()); ChangeFont(m_textsize); // setFocusPolicy(QWidget::StrongFocus); // resize( 240, 320 ); //setFocus(); timer = new QTimer(this); connect(timer, SIGNAL(timeout()), this, SLOT(doscroll())); // QMessageBox::information(this, "init", m_lastfile, 1); m_lastwidth = width(); if (!m_lastfile.isEmpty()) { m_string = DocLnk(m_lastfile).name(); load_file(m_lastfile); } } // // Clean up // QTReader::~QTReader() { if (fontsizes != NULL) delete [] fontsizes; #ifndef QT_NO_PRINTER // delete printer; #endif } // // Calls the drawing function as specified by the radio buttons. // void QTReader::drawIt( QPainter *p ) { drawFonts(p); } // // Called when the print button is clicked. // /* void QTReader::printIt() { #ifndef QT_NO_PRINTER if ( printer->setup( this ) ) { QPainter paint; if ( !paint.begin( printer ) ) return; drawIt( &paint ); } #endif } */ // // Called when the widget needs to be updated. // void QTReader::paintEvent( QPaintEvent * ) { QPainter paint( this ); drawIt( &paint ); } // // Called when the widget has been resized. // Moves the button group to the upper right corner // of the widget. /* void QTReader::resizeEvent( QResizeEvent * ) { // qDebug("resize:(%u,%u)", width(), height()); // bgroup->move( width()-bgroup->width(), 0 ); } */ // // Create and display our widget. // /* int main( int argc, tchar **argv ) { QApplication app( argc, argv ); QTReader draw; app.setMainWidget( &draw ); draw.setCaption("Qt Example - Drawdemo"); draw.show(); return app.exec(); } */ bool QTReader::locate(unsigned long n) { //printf("Locate\n"); buffdoc.locate(n); // qDebug("&buffdoc.located"); fillbuffer(); // qDebug("&Buffer filled"); update(); // qDebug("&Located"); return true; } unsigned int QTReader::screenlines() { // int linespacing = (tight) ? m_ascent : m_ascent+m_descent; // return (height()-m_descent)/(m_linespacing); return (height()-2)/(m_linespacing); }; bool QTReader::fillbuffer() { + if (buffdoc.empty()) return false; //printf("Fillbuffer\n"); m_scrolldy = 0; int ch; bool ret = false; int delta = screenlines(); // qDebug("fillbuffer:%u-%u",delta,numlines); if (delta != numlines) { if (textarray != NULL) { for (int i = 0; i < numlines; i++) delete textarray[i]; delete [] textarray; delete [] locnarray; } numlines = delta; textarray = new CBuffer*[numlines]; locnarray = new size_t[numlines]; for (int i = 0; i < numlines; i++) textarray[i] = new CBuffer; } // qDebug("fillbuffer:pagepos:%u",pagepos); unsigned int oldpagepos = pagepos; // if (textarray != NULL) // pagepos = locnarray[0]; // else pagepos = locate(); for (int i = 0; i < delta; i++) { locnarray[i] = locate(); ch = getline(textarray[i]); // if (ch == EOF) { if (!ch) { if (i == 0) { locate(oldpagepos); return false; } else { ret = true; for (int j = i+1; j < delta; j++) { locnarray[j] = locnarray[j-1]; (*(textarray[j]))[0] = '\0'; } break; } } if (ch == '\012') ret = true; } mylastpos = locate(); // qDebug("fillbuffer:lastpos:%u",mylastpos); return true; } void QTReader::dopagedn() { if (m_overlap == 0) { if (locate() != mylastpos) jumpto(mylastpos); } else { if (m_overlap >= screenlines()) m_overlap = screenlines()/2; jumpto(locnarray[screenlines()-m_overlap]); } if (fillbuffer()) { update(); } } void QTReader::dopageup() { CBuffer** buff = textarray; unsigned int *loc = new unsigned int[numlines]; int cbptr = 0; if (locate() != mylastpos) jumpto(mylastpos); if (m_overlap >= screenlines()) m_overlap = screenlines()/2; unsigned int target = locnarray[m_overlap]; if (buffdoc.hasrandomaccess()) { unsigned int delta = locate()-pagelocate(); if (delta < 64) delta = 64; if (delta % 2 != 0) delta++; if (target % 2 != 0) target++; do { delta <<= 1; if (delta >= target) { delta = target; jumpto(0); for (int i = 0; i < numlines; i++) { loc[i] = locate(); getline(buff[i]); } break; } jumpto(target-delta); do { getline(buff[0]); #ifdef WS //printf("Trying:%s\n",buff[0]); #endif if (locate() > target) continue; } while (!buffdoc.iseol()); for (int i = 0; i < numlines; i++) { loc[i] = locate(); getline(buff[i]); #ifdef WS //printf("Filling:%s\n",buff[i]); #endif } } while (locate() >= target && delta < 4096); #ifdef WS //printf("Delta:%u\n",delta); #endif } else { jumpto(0); |