author | pohly <pohly> | 2005-05-05 14:39:33 (UTC) |
---|---|---|
committer | pohly <pohly> | 2005-05-05 14:39:33 (UTC) |
commit | 39fbfd5eb7e45d73d38e8a2ce9437a3d7e1b8e91 (patch) (side-by-side diff) | |
tree | 96e66fdc18dca4d4ab8611133e072f57dea224b9 /noncore/apps/opie-reader/CDrawBuffer.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/CDrawBuffer.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r-- | noncore/apps/opie-reader/CDrawBuffer.cpp | 25 |
1 files changed, 21 insertions, 4 deletions
diff --git a/noncore/apps/opie-reader/CDrawBuffer.cpp b/noncore/apps/opie-reader/CDrawBuffer.cpp index bfb3027..227f0f6 100644 --- a/noncore/apps/opie-reader/CDrawBuffer.cpp +++ b/noncore/apps/opie-reader/CDrawBuffer.cpp @@ -343,48 +343,49 @@ int CDrawBuffer::rightMargin() { return (segs.begin()->style.getRightMargin()*fc->getsize(segs.begin()->style)+3)/6; } int CDrawBuffer::offset(int scwidth, unsigned short _lborder, unsigned short _rborder, int availht) { int currentx = _lborder; switch(segs.begin()->style.getJustify()) { case m_AlignRight: { currentx = scwidth - _rborder - rightMargin() - width(availht); } break; case m_AlignCentre: { currentx = ( scwidth - _lborder -_rborder + leftMargin() - rightMargin() - width(availht))/2 + _lborder; } break; case m_AlignJustify: case m_AlignLeft: + case m_AlignNone: currentx = _lborder + leftMargin(); break; } return currentx; } void CDrawBuffer::render(QPainter* _p, int _y, bool _bMono, int _charWidth, int scwidth, unsigned short _lborder, unsigned short _rborder, const QColor& _bg, int availht) { CList<textsegment>::iterator textstart = segs.begin(); QColor paperColour = QColor(qRgb(textstart->style.pRed(), textstart->style.pGreen(), textstart->style.pBlue())); Highlight(_p, !(paperColour == _bg), _lborder, _y, scwidth-(_lborder+_rborder), paperColour); // Highlight(_p, true, _lborder, _y, scwidth-(_lborder+_rborder), paperColour); int gzoom = fc->gzoom(); int currentx = offset(scwidth, _lborder, _rborder, availht); if (!m_hastext) { for (CList<textsegment>::iterator iter = segs.begin(); iter != segs.end(); iter++) { CStyle currentstyle = iter->style; if (currentstyle.isPicture()) { @@ -463,49 +464,49 @@ void CDrawBuffer::render(QPainter* _p, int _y, bool _bMono, int _charWidth, int int end = (textend != segs.end()) ? textend->start : len; CStyle currentstyle = textstart->style; /* bool drawBackground = ( currentstyle.bRed() != 255 || currentstyle.bGreen() != 255 || currentstyle.bBlue() != 255 ); */ QColor bgColour = QColor(qRgb(currentstyle.bRed(), currentstyle.bGreen(), currentstyle.bBlue())); drawBackground = !(bgColour == _bg); // if (drawBackground) qDebug("Drawing background"); QFont f((currentstyle.isMono() && fc->hasCourier()) ? fc->fixedfontname() : fc->name(), fc->getsize(currentstyle), (currentstyle.isBold()) ? QFont::Bold : QFont::Normal, (currentstyle.isItalic()) ); // f.setUnderline(currentstyle.isUnderline()); // if (currentstyle.isUnderline()) qDebug("UNDERLINE"); _p->setFont(f); QString str = text.mid(textstart->start, end-textstart->start); #if defined(OPIE) || !defined(USEQPE) - _p->setPen(QPen(QColor(currentstyle.Red(), currentstyle.Green(), currentstyle.Blue()), fc->getsize(currentstyle)/100)); + _p->setPen(QPen(QColor(currentstyle.Red(), currentstyle.Green(), currentstyle.Blue()), fc->getsize(currentstyle)/10/*0*/)); #else _p->setPen(QPen(QColor(currentstyle.Red(), currentstyle.Green(), currentstyle.Blue()), fc->getsize(currentstyle)/10)); #endif int voffset = currentstyle.getVOffset()*fc->getsize(currentstyle)/2; if (_bMono) { Highlight(_p, drawBackground, currentx, _y, str.length()*_charWidth, bgColour); if (currentstyle.isUnderline()) { _p->drawLine( currentx, _y+voffset, currentx + str.length()*_charWidth, _y+voffset); } if (currentstyle.isStrikethru()) { int ascent = fc->ascent(currentstyle)/3; _p->drawLine( currentx, _y-ascent+voffset, currentx + str.length()*_charWidth, _y-ascent+voffset); } for (int i = 0; i < str.length(); i++) { _p->drawText( currentx + i*_charWidth, _y+voffset, QString(str[i])); } currentx += str.length()*_charWidth; } @@ -637,163 +638,179 @@ void CDrawBuffer::render(QPainter* _p, int _y, bool _bMono, int _charWidth, int { Highlight(_p, drawBackground, currentx, _y, scwidth - (currentx + _lborder + _rborder), bgColour); } */ } void CDrawBuffer::Highlight(QPainter* _p, bool drawBackground, int _x, int _y, int w, QColor bgColour) { if (drawBackground) { _p->fillRect(_x, _y-m_ascent, w, m_lineSpacing, bgColour); } } CStyle CDrawBuffer::laststyle() { return segs.last().style; } CStyle CDrawBuffer::firststyle() { return segs.first().style; } -linkType CDrawBuffer::getLinkType(int numchars, size_t& tgt, size_t& offset, size_t& pictgt, QImage*& img) +linkType CDrawBuffer::getLinkType(int numchars, size_t& tgt, size_t& offset, size_t& pictgt, QImage*& img, size_t& tabletgt) { linkType ret = eNone; int end = 0; CStyle currentstyle; CList<textsegment>::iterator textstart = segs.begin(); CList<textsegment>::iterator textend = textstart; do { textend++; end = (textend != segs.end()) ? textend->start : len; currentstyle = textstart->style; /* if (currentstyle.isPicture()) qDebug("Passed thru picture"); if (currentstyle.getLink()) qDebug("Passed thru link"); //qDebug("islink:%d - %d", numchars, end); */ textstart = textend; } while (textend != segs.end() && end <= numchars); img = currentstyle.getPicture(); if (currentstyle.getPictureLink()) { pictgt = currentstyle.getPictureLinkData(); ret |= ePicture; } if (currentstyle.getLink()) { tgt = currentstyle.getData(); offset = currentstyle.getOffset(); ret |= eLink; } + if (currentstyle.isTable()) + { + tabletgt = currentstyle.getTable(); + ret |= eTable; + } return ret; } void CDrawBuffer::resize(int availht) { int gzoom = fc->gzoom(); m_ascent = m_descent = m_lineSpacing = m_lineExtraSpacing = 0; /* int t_ascent = 0; int t_descent = 0; int t_lineExtraSpacing = 0; */ int t_lineSpacing = 0; m_hastext = false; for (CList<textsegment>::iterator iter = segs.begin(); iter != segs.end() && iter->start <= len; ) { CStyle _style = iter->style; if (!_style.isPicture()) { m_hastext = true; break; } iter++; } if (m_hastext) { - + int p_linespacing = 0; for (CList<textsegment>::iterator iter = segs.begin(); iter != segs.end() && iter->start <= len; ) { CList<textsegment>::iterator next = iter; iter++; int st = next->start; if (st < 0) st = 0; CStyle _style = next->style; int linespacing, ascent, descent, extra; ascent = fc->ascent(_style); descent = fc->descent(_style); linespacing = fc->lineSpacing(_style); extra = linespacing - ascent - descent; /* if (ascent > t_ascent) t_ascent = ascent; if (descent > t_descent) t_descent = descent; if (extra > t_lineExtraSpacing) t_lineExtraSpacing = extra; t_lineSpacing = t_ascent+t_descent+t_lineExtraSpacing; */ if (linespacing > t_lineSpacing) t_lineSpacing = linespacing; if (_style.isPicture()) { int ht = (gzoom*_style.getPicture()->height())/100; int wt = (gzoom*_style.getPicture()->width())/100; bool willscale = false; if (ht > availht) { wt = (wt*availht)/ht; ht = availht; willscale = true; } if (willscale || _style.canScale()) { descent = ((gzoom*_style.getPicture()->height())/100-ascent)/2; ascent = ((gzoom*_style.getPicture()->height())/100+ascent)/2; } + else + { + descent = (_style.getPicture()->height()-ascent)/2; + ascent = (_style.getPicture()->height()+ascent)/2; + } + int lineSpacing = ascent+descent; + if (lineSpacing > p_linespacing) + { + p_linespacing = lineSpacing; + } + extra = 0; } /* else if (fc != NULL) { ascent = fc->ascent(_style); descent = fc->descent(_style); linespacing = fc->lineSpacing(_style); extra = linespacing - ascent - descent; } */ if (ascent > m_ascent) m_ascent = ascent; if (descent > m_descent) m_descent = descent; if (extra > m_lineExtraSpacing) m_lineExtraSpacing = extra; m_lineSpacing = m_ascent+m_descent+m_lineExtraSpacing; } - m_showPartial = (m_lineSpacing > t_lineSpacing); + m_showPartial = (p_linespacing > t_lineSpacing); int lead = fc->getlead(); if (lead != 0) { int xt = (lead*t_lineSpacing+5)/10; m_lineExtraSpacing += xt; m_lineSpacing += xt; } if (m_bSop) { int xt = ((segs.begin()->style.getExtraSpace()+fc->getextraspace())*fc->getsize(segs.begin()->style)+5)/10; // qDebug("ExtraSpace:%d", xt); m_ascent += xt; m_lineSpacing += xt; } } else { m_showPartial = true; int maxheight = 0; for (CList<textsegment>::iterator iter = segs.begin(); iter != segs.end(); iter++) { CStyle _style = iter->style; if (_style.isPicture()) { |