📄 q3richtext_p.cpp
字号:
{ fm = QFontMetrics(fn); leftBearing = fm.minLeftBearing(); rightBearing = fm.minRightBearing(); hei = fm.lineSpacing(); asc = fm.ascent() + (fm.leading()+1)/2; dsc = fm.descent(); memset(widths, 0, 256); generateKey();}QPainter* Q3TextFormat::pntr = 0;QFontMetrics* Q3TextFormat::pntr_fm = 0;int Q3TextFormat::pntr_ldg=-1;int Q3TextFormat::pntr_asc=-1;int Q3TextFormat::pntr_hei=-1;int Q3TextFormat::pntr_dsc=-1;void Q3TextFormat::setPainter(QPainter *p){ pntr = p;}QPainter* Q3TextFormat::painter(){ return pntr;}void Q3TextFormat::applyFont(const QFont &f){ QFontMetrics fm(pntr->fontMetrics()); if (!pntr_fm || pntr->font() != f) { pntr->setFont(f); delete pntr_fm; pntr_fm = new QFontMetrics(pntr->fontMetrics()); pntr_ldg = pntr_fm->leading(); pntr_asc = pntr_fm->ascent()+(pntr_ldg+1)/2; pntr_hei = pntr_fm->lineSpacing(); pntr_dsc = -1; }}int Q3TextFormat::minLeftBearing() const{ if (!pntr || !pntr->isActive()) return leftBearing; applyFont(fn); return pntr_fm->minLeftBearing();}int Q3TextFormat::minRightBearing() const{ if (!pntr || !pntr->isActive()) return rightBearing; applyFont(fn); return pntr_fm->minRightBearing();}int Q3TextFormat::height() const{ if (!pntr || !pntr->isActive()) return hei; applyFont(fn); return pntr_hei;}int Q3TextFormat::ascent() const{ if (!pntr || !pntr->isActive()) return asc; applyFont(fn); return pntr_asc;}int Q3TextFormat::descent() const{ if (!pntr || !pntr->isActive()) return dsc; applyFont(fn); if (pntr_dsc < 0) pntr_dsc = pntr_fm->descent(); return pntr_dsc;}int Q3TextFormat::leading() const{ if (!pntr || !pntr->isActive()) return fm.leading(); applyFont(fn); return pntr_ldg;}void Q3TextFormat::generateKey(){ k = getKey(fn, col, isMisspelled(), vAlign());}QString Q3TextFormat::getKey(const QFont &fn, const QColor &col, bool misspelled, VerticalAlignment a){ QString k = fn.key(); k += QLatin1Char('/'); k += QString::number((uint)col.rgb()); k += QLatin1Char('/'); k += QString::number((int)misspelled); k += QLatin1Char('/'); k += QString::number((int)a); return k;}QString Q3TextString::toString(const QVector<Q3TextStringChar> &data){ QString s; int l = data.size(); s.setUnicode(0, l); const Q3TextStringChar *c = data.data(); QChar *uc = (QChar *)s.unicode(); while (l--) *(uc++) = (c++)->c; return s;}void Q3TextParagraph::setSelection(int id, int start, int end){ QMap<int, Q3TextParagraphSelection>::ConstIterator it = selections().constFind(id); if (it != mSelections->constEnd()) { if (start == (*it).start && end == (*it).end) return; } Q3TextParagraphSelection sel; sel.start = start; sel.end = end; (*mSelections)[id] = sel; setChanged(true, true);}void Q3TextParagraph::removeSelection(int id){ if (!hasSelection(id)) return; if (mSelections) mSelections->remove(id); setChanged(true, true);}int Q3TextParagraph::selectionStart(int id) const{ if (!mSelections) return -1; QMap<int, Q3TextParagraphSelection>::ConstIterator it = mSelections->constFind(id); if (it == mSelections->constEnd()) return -1; return (*it).start;}int Q3TextParagraph::selectionEnd(int id) const{ if (!mSelections) return -1; QMap<int, Q3TextParagraphSelection>::ConstIterator it = mSelections->constFind(id); if (it == mSelections->constEnd()) return -1; return (*it).end;}bool Q3TextParagraph::hasSelection(int id) const{ return mSelections ? mSelections->contains(id) : false;}bool Q3TextParagraph::fullSelected(int id) const{ if (!mSelections) return false; QMap<int, Q3TextParagraphSelection>::ConstIterator it = mSelections->constFind(id); if (it == mSelections->constEnd()) return false; return (*it).start == 0 && (*it).end == str->length() - 1;}int Q3TextParagraph::lineY(int l) const{ if (l > (int)lineStarts.count() - 1) { qWarning("Q3TextParagraph::lineY: line %d out of range!", l); return 0; } if (!isValid()) ((Q3TextParagraph*)this)->format(); QMap<int, QTextLineStart*>::ConstIterator it = lineStarts.begin(); while (l-- > 0) ++it; return (*it)->y;}int Q3TextParagraph::lineBaseLine(int l) const{ if (l > (int)lineStarts.count() - 1) { qWarning("Q3TextParagraph::lineBaseLine: line %d out of range!", l); return 10; } if (!isValid()) ((Q3TextParagraph*)this)->format(); QMap<int, QTextLineStart*>::ConstIterator it = lineStarts.begin(); while (l-- > 0) ++it; return (*it)->baseLine;}int Q3TextParagraph::lineHeight(int l) const{ if (l > (int)lineStarts.count() - 1) { qWarning("Q3TextParagraph::lineHeight: line %d out of range!", l); return 15; } if (!isValid()) ((Q3TextParagraph*)this)->format(); QMap<int, QTextLineStart*>::ConstIterator it = lineStarts.begin(); while (l-- > 0) ++it; return (*it)->h;}void Q3TextParagraph::lineInfo(int l, int &y, int &h, int &bl) const{ if (l > (int)lineStarts.count() - 1) { qWarning("Q3TextParagraph::lineInfo: line %d out of range!", l); qDebug("%d %d", (int)lineStarts.count() - 1, l); y = 0; h = 15; bl = 10; return; } if (!isValid()) ((Q3TextParagraph*)this)->format(); QMap<int, QTextLineStart*>::ConstIterator it = lineStarts.begin(); while (l-- > 0) ++it; y = (*it)->y; h = (*it)->h; bl = (*it)->baseLine;}void Q3TextParagraph::setAlignment(int a){ if (a == (int)align) return; align = a; invalidate(0);}Q3TextFormatter *Q3TextParagraph::formatter() const{ if (hasdoc) return document()->formatter(); if (pseudoDocument()->pFormatter) return pseudoDocument()->pFormatter; return (((Q3TextParagraph*)this)->pseudoDocument()->pFormatter = new Q3TextFormatterBreakWords);}void Q3TextParagraph::setTabArray(int *a){ delete [] tArray; tArray = a;}void Q3TextParagraph::setTabStops(int tw){ if (hasdoc) document()->setTabStops(tw); else tabStopWidth = tw;}QMap<int, Q3TextParagraphSelection> &Q3TextParagraph::selections() const{ if (!mSelections) ((Q3TextParagraph *)this)->mSelections = new QMap<int, Q3TextParagraphSelection>; return *mSelections;}#ifndef QT_NO_TEXTCUSTOMITEMQList<Q3TextCustomItem *> &Q3TextParagraph::floatingItems() const{ if (!mFloatingItems) ((Q3TextParagraph *)this)->mFloatingItems = new QList<Q3TextCustomItem *>; return *mFloatingItems;}#endifQ3TextStringChar::~Q3TextStringChar(){ if (format()) format()->removeRef(); if (type) // not Regular delete p.custom;}Q3TextParagraphPseudoDocument::Q3TextParagraphPseudoDocument():pFormatter(0),commandHistory(0), minw(0),wused(0),collection(){}Q3TextParagraphPseudoDocument::~Q3TextParagraphPseudoDocument(){ delete pFormatter; delete commandHistory; }#endif //QT_NO_RICHTEXT
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -