File indexing completed on 2025-02-23 04:35:31
0001 /* 0002 SPDX-FileCopyrightText: 2022 Mladen Milinkovic <max@smoothware.net> 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #ifndef RICHDOCUMENTLAYOUT_H 0008 #define RICHDOCUMENTLAYOUT_H 0009 0010 #include <QAbstractTextDocumentLayout> 0011 #include <QSizeF> 0012 #include <QTextCharFormat> 0013 #include <QVector> 0014 0015 QT_FORWARD_DECLARE_CLASS(QBasicTimer) 0016 QT_FORWARD_DECLARE_CLASS(QPainter) 0017 0018 namespace SubtitleComposer { 0019 class RichDocument; 0020 0021 class RichDocumentLayout : public QAbstractTextDocumentLayout 0022 { 0023 Q_OBJECT 0024 0025 public: 0026 explicit RichDocumentLayout(RichDocument *doc); 0027 0028 void draw(QPainter *painter, const PaintContext &context) override; 0029 int hitTest(const QPointF &point, Qt::HitTestAccuracy accuracy) const override; 0030 0031 int pageCount() const override; 0032 QSizeF documentSize() const override; 0033 QSizeF minimumDocumentSize() const; 0034 0035 QRectF frameBoundingRect(QTextFrame *frame) const override; 0036 QRectF blockBoundingRect(const QTextBlock &block) const override; 0037 0038 QTextCharFormat applyCSS(const QTextCharFormat &format) const; 0039 QVector<QTextLayout::FormatRange> applyCSS(const QVector<QTextLayout::FormatRange> &docFormat) const; 0040 static void mergeFormat(QTextCharFormat &fmt, const QTextCharFormat &upper); 0041 QVector<QTextLayout::FormatRange> mergeCSS(const QVector<QTextLayout::FormatRange> &docFormat, const QVector<QTextLayout::FormatRange> &layoutFormat) const; 0042 0043 void separatorResize(const QSizeF &size); 0044 void separatorDraw(QPainter *painter, const QPointF &offset) const; 0045 0046 protected: 0047 void documentChanged(int from, int oldLength, int length) override; 0048 0049 private: 0050 void ensureLayout(int position) const; 0051 void processLayout(int from, int oldLength, int length); 0052 0053 private: 0054 RichDocument *m_doc; 0055 int m_layoutPosition; 0056 QSizeF m_layoutSize; 0057 QSizeF m_naturalSize; 0058 QSizeF m_separatorSize; 0059 QVector<QPointF> m_separatorPoints; 0060 }; 0061 0062 } 0063 0064 #endif // RICHDOCUMENTLAYOUT_H