|
View:
New views
1 Messages
—
Rating Filter:
Alert me
|
|
|
KDE/kdelibs/khtml/renderingSVN commit 1042753 by orlovich:
automatically merged revision 1042752: Implement custom scrollHeight for RenderTextArea --- it needs to be able to look inside its scrollbar usage, so normal RenderObject/RenderLayer stuff is insufficient. Fixes growing suggestion box on reviewboard. (Though, I really do wonder why the test scrollHeight and height for inequality --- it'd make perfect sense for scrollHeight to be smaller than element height when one has enough room, and at least some Opera versions behave that way, too; so testing for scrollHeight > height would be better. Not that it'd help us before... but, well, brittle code...) BUG:199986 M +28 -17 render_form.cpp M +3 -0 render_form.h M +9 -9 render_object.h --- trunk/KDE/kdelibs/khtml/rendering/render_form.cpp #1042752:1042753 @@ -127,13 +127,13 @@ { // Make sure we give combo popup's enough room to display contents; // Qt doesn't do this by default - + if (cc == QStyle::CC_ComboBox && sc == SC_ComboBoxListBoxPopup) { const QComboBox* cb = qobject_cast<const QComboBox*>(widget); const QStyleOptionComboBox* cbOpt = qstyleoption_cast<const QStyleOptionComboBox*>(opt); - + QFontMetrics fm = cb->fontMetrics(); - + if (cb && cbOpt) { // Compute content width; Qt uses the usual +4 magic number for icon/text margin int maxW = 0; @@ -143,19 +143,19 @@ iw += 4 + cb->iconSize().width(); maxW = qMax(maxW, iw); } - + // Now let sizeFromContent add in extra stuff. maxW = proxy()->sizeFromContents(QStyle::CT_ComboBox, opt, QSize(maxW, 1), widget).width(); - + // How much more room do we need for the text? int extraW = maxW > cbOpt->rect.width() ? maxW - cbOpt->rect.width() : 0; - + QRect r = proxy()->subControlRect(cc, opt, sc, widget); r.setWidth(r.width() + extraW); return r; } } - + return proxy()->subControlRect(cc, opt, sc, widget); } @@ -194,7 +194,7 @@ { // Some form widgets apply the padding internally (i.e. as if they were // some kind of inline-block). Thus we only want to expose that padding - // while layouting (so that width/height calculations are correct), and + // while layouting (so that width/height calculations are correct), and // then pretend it does not exist, as it is beyond the replaced edge and // thus should not affect other calculations. m_exposeInternalPadding = true; @@ -510,7 +510,7 @@ bool RenderSubmitButton::canHaveBorder() const { - // ### TODO would be nice to be able to + // ### TODO would be nice to be able to // return style()->hasBackgroundImage() here, // depending on a config option (e.g. 'favour usability/integration over aspect') // so that only buttons with both a custom border @@ -748,7 +748,7 @@ } if ( s == t ) { KMessageBox::sorry( 0, i18n( "%1 is already assigned to %2", s, provider->name() ), i18n( "Error" ) ); - isOk = false; + isOk = false; } } } @@ -833,7 +833,7 @@ for( unsigned long i = 0; ( node = form->elements()->item( i ) ); i++ ) { inputNode = dynamic_cast<HTMLInputElementImpl*>( node ); if ( inputNode ) { - if ( ( !inputNode->name().string().size() ) || + if ( ( !inputNode->name().string().size() ) || (inputNode->name().string() == queryName) ) { continue; } else { @@ -910,7 +910,7 @@ QPainter p(this); p.fillRect(pe->rect(), palette().brush(QPalette::Base)); p.end(); - } + } KLineEdit::paintEvent( pe ); } @@ -1794,7 +1794,7 @@ // FIXME BASELINE: the 3 lines below could be removed. int lhs = m_widget->style()->pixelMetric(QStyle::PM_LayoutHorizontalSpacing); if (lhs>0) - width += lhs; + width += lhs; height = size*height + vfw; assert( includesPadding() ); @@ -2108,15 +2108,14 @@ QSize size( qMax(element()->cols(), 1L)*m.width('x') + hfw + llm+lrm + w->verticalScrollBar()->sizeHint().width()+lhs, - qMax(element()->rows(), 1L)*m.lineSpacing() + 2*vfw + lbm+ltm + + qMax(element()->rows(), 1L)*m.lineSpacing() + vfw + lbm+ltm + (w->lineWrapMode() == QTextEdit::NoWrap ? w->horizontalScrollBar()->sizeHint().height()+lvs : 0) ); assert( includesPadding() ); size.rwidth() -= RenderWidget::paddingLeft() + RenderWidget::paddingRight(); - // ### FIXME BASELINE: would like to remove that 2* (and the 2* in '2*vfw' above). - size.rheight() -= 2*(RenderWidget::paddingTop() + RenderWidget::paddingBottom()); + size.rheight() -= RenderWidget::paddingTop() + RenderWidget::paddingBottom(); setIntrinsicWidth( size.width() ); setIntrinsicHeight( size.height() ); @@ -2154,6 +2153,18 @@ } } +short RenderTextArea::scrollWidth() const +{ + return RenderObject::scrollWidth(); +} + +int RenderTextArea::scrollHeight() const +{ + TextAreaWidget* w = static_cast<TextAreaWidget*>(m_widget); + int contentHeight = qRound(w->document()->size().height()); + return qMax(contentHeight, RenderObject::clientHeight()); +} + void RenderTextArea::setText(const QString& newText) { TextAreaWidget* w = static_cast<TextAreaWidget*>(m_widget); @@ -2177,7 +2188,7 @@ tc.setPosition( ex, QTextCursor::MoveAnchor ); tc.movePosition(QTextCursor::End, QTextCursor::KeepAnchor); tc.insertText(newText.right( newText.length()-ex )); - } else { + } else { w->setPlainText( newText ); } w->setTextCursor(tc); --- trunk/KDE/kdelibs/khtml/rendering/render_form.h #1042752:1042753 @@ -517,6 +517,9 @@ virtual void layout(); virtual void setStyle(RenderStyle *style); + virtual short scrollWidth() const; + virtual int scrollHeight() const; + virtual void updateFromElement(); // don't even think about making this method virtual! --- trunk/KDE/kdelibs/khtml/rendering/render_object.h #1042752:1042753 @@ -157,8 +157,8 @@ virtual RenderObject *firstChild() const { return 0; } virtual RenderObject *lastChild() const { return 0; } - RenderObject *nextRenderer() const; - RenderObject *previousRenderer() const; + RenderObject *nextRenderer() const; + RenderObject *previousRenderer() const; RenderObject *nextEditable() const; RenderObject *previousEditable() const; @@ -348,7 +348,7 @@ DOM::DocumentImpl* document() const; DOM::NodeImpl* element() const { return isAnonymous() ? 0L : m_node; } DOM::NodeImpl* node() const { return m_node; } - + virtual bool handleEvent(const DOM::EventImpl&) { return false; } /** @@ -647,12 +647,12 @@ // how much goes over the left hand side (0 or a negative number) virtual int overflowTop() const { return 0; } virtual int overflowLeft() const { return 0; } - + /** * Returns the height that is effectively considered when contemplating the * object as a whole -- usually the overflow height, or the height if clipped. */ - int effectiveHeight() const { return hasOverflowClip() ? height() + borderTopExtra() + borderBottomExtra() : + int effectiveHeight() const { return hasOverflowClip() ? height() + borderTopExtra() + borderBottomExtra() : qMax(overflowHeight() - overflowTop(), height() + borderTopExtra() + borderBottomExtra()); } /** * Returns the width that is effectively considered when contemplating the @@ -670,8 +670,8 @@ int clientTop() const; short clientWidth() const; int clientHeight() const; - short scrollWidth() const; - int scrollHeight() const; + virtual short scrollWidth() const; + virtual int scrollHeight() const; virtual bool isSelfCollapsingBlock() const { return false; } short collapsedMarginTop() const { return maxTopMargin(true)-maxTopMargin(false); } @@ -810,7 +810,7 @@ virtual void detach( ); bool documentBeingDestroyed() const { return !document()->renderer(); } - + void setDoNotDelete(bool b) { m_doNotDelete = b; } bool doNotDelete() const { return m_doNotDelete; } @@ -895,7 +895,7 @@ bool m_needsPageClear : 1; bool m_containsPageBreak : 1; - + bool m_hasOverflowClip : 1; bool m_inPosObjectList : 1; _______________________________________________ Khtml-cvs mailing list Khtml-cvs@... https://mail.kde.org/mailman/listinfo/khtml-cvs |
| Free embeddable forum powered by Nabble | Forum Help |