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 }