File indexing completed on 2024-05-12 04:20:38

0001 /*
0002  * SPDX-FileCopyrightText: 2001-2015 Klaralvdalens Datakonsult AB. All rights reserved.
0003  *
0004  * This file is part of the KD Chart library.
0005  *
0006  * SPDX-License-Identifier: GPL-2.0-or-later
0007  */
0008 
0009 #include "KTextDocument.h"
0010 
0011 #include "KChartMath_p.h"
0012 
0013 #include <QRect>
0014 #include <QAbstractTextDocumentLayout>
0015 #include <QtDebug>
0016 #include <QTextBlock>
0017 
0018 // This is an internal class that mimics some of the behavior of a
0019 // QLabel with rich text assigned, this is mostly a workaround around
0020 // QTextDocumentLayout not being a public class.
0021 
0022 KTextDocument::KTextDocument( QObject * p )
0023     : QTextDocument( p ),
0024       mHintValid( false ),
0025       mSizeHint(),
0026       mMinimumSizeHint()
0027 {
0028 
0029 }
0030 
0031 KTextDocument::KTextDocument( const QString & text, QObject * p )
0032     : QTextDocument( text, p ),
0033       mHintValid( false ),
0034       mSizeHint(),
0035       mMinimumSizeHint()
0036 {
0037 
0038 }
0039 
0040 KTextDocument::~KTextDocument() {}
0041 
0042 
0043 QSize KTextDocument::sizeHint()
0044 {
0045     if ( !mHintValid )
0046         (void)minimumSizeHint();
0047     return mSizeHint;
0048 }
0049 
0050 QSize KTextDocument::minimumSizeHint()
0051 {
0052     /*
0053     QTextCursor cursor( this );
0054     if ( ! cursor.atEnd() )
0055         cursor.movePosition( QTextCursor::NextBlock );
0056     qDebug() << "KTextDocument::minimumSizeHint() found:" << cursor.block().text();
0057     QSizeF s( documentLayout()->blockBoundingRect( cursor.block() ).size() );
0058     qDebug() << "KTextDocument::minimumSizeHint() found rect" << documentLayout()->blockBoundingRect( cursor.block());
0059     return QSize( static_cast<int>(s.width()),
0060                   static_cast<int>(s.height()) );
0061     */
0062 
0063     if ( mHintValid )
0064         return mMinimumSizeHint;
0065 
0066     mHintValid = true;
0067     mSizeHint = sizeForWidth( -1 );
0068     QSize sz(-1, -1);
0069 
0070     // PENDING(kalle) Cache
0071     sz.rwidth() = sizeForWidth( 0 ).width();
0072     sz.rheight() = sizeForWidth( 32000 ).height();
0073     if ( mSizeHint.height() < sz.height())
0074         sz.rheight() = mSizeHint.height();
0075 
0076     mMinimumSizeHint = sz;
0077     return sz;
0078 }
0079 
0080 
0081 QSize KTextDocument::sizeForWidth(int w)
0082 {
0083     Q_UNUSED( w );
0084 
0085     setPageSize(QSize(0, 100000));
0086 
0087     return documentLayout()->documentSize().toSize();
0088 }