[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-core-devel
Subject: Re: khtml - render_text: Q3PtrVector->QVector
From: Peter_Kümmel <syntheticpp () gmx ! net>
Date: 2006-06-28 6:55:22
Message-ID: 44A227DA.7040309 () gmx ! net
[Download RAW message or body]
David Faure wrote:
> On Tuesday 27 June 2006 22:29, Peter Kümmel wrote:
>> I get a strange linker error when compiling
>> khtml with msvc: it could not find Q3GVector::at,
>> even though this function is an inline function.
>> Maybe this is because of the debug mode, but trying
>> to force the inlining doesn't work.
>>
>> Before fiddling around with this Q3Support code
>> I've used QVector instead, which solves the linker
>> error.
>>
>> Is it possible to apply the attached patch? The
>> only point where I'm not sure is the replacement
>> of the 'compareItems' function:
>
> You need to get rid of the QVector subclass and move the comparison
> code to a static method which you then pass to qSort (third argument).
> Which also means calling qSort from the code...
>
OK, I've removed the QVector and now InlineTextBoxArray is
a typedef of RenderText:
typedef QVector<InlineTextBox*> InlineTextBoxArray;
Also findFirstMatching is now a (static) member of RenderText.
But I don't understand where I should use qSort,
in the old code
int InlineTextBoxArray::compareItems( Item d1, Item d2 )
was never used because always the Q3GVector version is used:
(Q3GVector*)this)->compareItems( d, (*this)[mid] );
and this function does only a != comparison.
So I've dropped InlineTextBoxArray::compareItems
Attached the new patch.
Peter
["qvector2.diff" (text/plain)]
Index: khtml_part.cpp
===================================================================
--- khtml_part.cpp (revision 555414)
+++ khtml_part.cpp (working copy)
@@ -5957,7 +5957,7 @@
for (khtml::RenderObject *n = renderNode; n; n = n->nextSibling()) {
if (n->isText()) {
khtml::RenderText* const textRenderer = static_cast<khtml::RenderText *>(n);
- const khtml::InlineTextBoxArray &runs = textRenderer->inlineTextBoxes();
+ const khtml::RenderText::InlineTextBoxArray &runs = textRenderer->inlineTextBoxes();
const unsigned lim = runs.count();
for (unsigned i = 0; i != lim; ++i) {
if (runs[i]->m_y == y && textRenderer->element()) {
@@ -5999,7 +5999,7 @@
if (n->isText()) {
khtml::RenderText* const textRenderer = static_cast<khtml::RenderText *>(n);
- const khtml::InlineTextBoxArray &runs = textRenderer->inlineTextBoxes();
+ const khtml::RenderText::InlineTextBoxArray &runs = textRenderer->inlineTextBoxes();
for (int i = (int)runs.count()-1; i >= 0; --i) {
if (runs[i]->m_y == y && textRenderer->element()) {
endNode = textRenderer->element();
Index: rendering/render_text.h
===================================================================
--- rendering/render_text.h (revision 555414)
+++ rendering/render_text.h (working copy)
@@ -30,7 +30,7 @@
#include "rendering/render_object.h"
#include "rendering/render_line.h"
-#include <q3ptrvector.h>
+#include <qvector.h>
#include <assert.h>
class QPainter;
@@ -133,17 +133,6 @@
friend class RenderText;
};
-class InlineTextBoxArray : public Q3PtrVector<InlineTextBox>
-{
-public:
- InlineTextBoxArray();
-
- InlineTextBox* first();
-
- int findFirstMatching( Item ) const;
- virtual int compareItems( Item, Item );
-};
-
class RenderText : public RenderObject
{
friend class InlineTextBox;
@@ -255,10 +244,15 @@
/** returns the number of inline text boxes
*/
unsigned inlineTextBoxCount() const { return m_lines.count(); }
+
+ typedef QVector<InlineTextBox*> InlineTextBoxArray;
+
/** returns the array of inline text boxes for this render text.
*/
const InlineTextBoxArray &inlineTextBoxes() const { return m_lines; }
+ static int findFirstMatching(InlineTextBoxArray* array, InlineTextBox* d);
+
#ifdef ENABLE_DUMP
virtual void dump(QTextStream &stream, const QString &ind) const;
#endif
@@ -273,7 +267,7 @@
*/
InlineTextBox * findInlineTextBox( int offset, int &pos,
bool checkFirstLetter = false );
-
+
protected: // members
InlineTextBoxArray m_lines;
DOM::DOMStringImpl *str; //
Index: rendering/render_text.cpp
===================================================================
--- rendering/render_text.cpp (revision 555414)
+++ rendering/render_text.cpp (working copy)
@@ -485,23 +485,10 @@
// -----------------------------------------------------------------------------
-InlineTextBoxArray::InlineTextBoxArray()
-{
- setAutoDelete(false);
-}
-
-int InlineTextBoxArray::compareItems( Item d1, Item d2 )
-{
- assert(d1);
- assert(d2);
-
- return static_cast<InlineTextBox*>(d1)->m_y - static_cast<InlineTextBox*>(d2)->m_y;
-}
-
// remove this once QVector::bsearch is fixed
-int InlineTextBoxArray::findFirstMatching(Item d) const
+int RenderText::findFirstMatching(InlineTextBoxArray* array, InlineTextBox* d)
{
- int len = count();
+ int len = array->count();
if ( !len )
return -1;
@@ -514,10 +501,10 @@
while ( n1 <= n2 ) {
int res;
mid = (n1 + n2)/2;
- if ( (*this)[mid] == 0 ) // null item greater
+ if ( (*array)[mid] == 0 ) // null item greater
res = -1;
else
- res = ((Q3GVector*)this)->compareItems( d, (*this)[mid] );
+ res = d != (*array)[mid] ;
if ( res < 0 )
n2 = mid - 1;
else if ( res > 0 )
@@ -530,12 +517,11 @@
/* if ( !found )
return -1; */
// search to first one equal or bigger
- while ( found && (mid > 0) && !((Q3GVector*)this)->compareItems(d, (*this)[mid-1]) )
+ while ( found && (mid > 0) && !( d != (*array)[mid-1]) )
mid--;
return mid;
}
-// -------------------------------------------------------------------------------------
RenderText::RenderText(DOM::NodeImpl* node, DOMStringImpl *_str)
: RenderObject(node)
@@ -890,7 +876,7 @@
int ow = style()->outlineWidth();
RenderStyle* pseudoStyle = hasFirstLine() ? style()->getPseudoStyle(RenderStyle::FIRST_LINE) : 0;
InlineTextBox f(0, pI.r.top()-ty);
- int si = m_lines.findFirstMatching(&f);
+ int si = RenderText::findFirstMatching(&m_lines, &f);
// something matching found, find the first one to paint
bool isStatic = canvas()->staticMode();
if (isStatic && pI.phase == PaintActionSelection) return;
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic