summaryrefslogtreecommitdiffstats
path: root/tqtinterface/qt4/src/kernel/tqtextlayout.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tqtinterface/qt4/src/kernel/tqtextlayout.cpp')
-rw-r--r--tqtinterface/qt4/src/kernel/tqtextlayout.cpp818
1 files changed, 0 insertions, 818 deletions
diff --git a/tqtinterface/qt4/src/kernel/tqtextlayout.cpp b/tqtinterface/qt4/src/kernel/tqtextlayout.cpp
deleted file mode 100644
index 6700470..0000000
--- a/tqtinterface/qt4/src/kernel/tqtextlayout.cpp
+++ /dev/null
@@ -1,818 +0,0 @@
-/****************************************************************************
-**
-** ???
-**
-** Copyright (C) 2005-2008 Trolltech ASA. All rights reserved.
-**
-** This file is part of the kernel module of the TQt GUI Toolkit.
-**
-** This file may be used under the terms of the GNU General
-** Public License versions 2.0 or 3.0 as published by the Free
-** Software Foundation and appearing in the files LICENSE.GPL2
-** and LICENSE.GPL3 included in the packaging of this file.
-** Alternatively you may (at your option) use any later version
-** of the GNU General Public License if such license has been
-** publicly approved by Trolltech ASA (or its successors, if any)
-** and the KDE Free TQt Foundation.
-**
-** Please review the following information to ensure GNU General
-** Public Licensing requirements will be met:
-** http://trolltech.com/products/qt/licenses/licensing/opensource/.
-** If you are unsure which license is appropriate for your use, please
-** review the following information:
-** http://trolltech.com/products/qt/licenses/licensing/licensingoverview
-** or contact the sales department at sales@trolltech.com.
-**
-** This file may be used under the terms of the Q Public License as
-** defined by Trolltech ASA and appearing in the file LICENSE.TQPL
-** included in the packaging of this file. Licensees holding valid TQt
-** Commercial licenses may use this file in accordance with the TQt
-** Commercial License Agreement provided with the Software.
-**
-** This file is provided "AS IS" with NO WARRANTY OF ANY KIND,
-** INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE. Trolltech reserves all rights not granted
-** herein.
-**
-**********************************************************************/
-
-#include <tqtglobaldefines.h>
-// Nasty, nasty horrid HACK to get access to QTextLine's private members
-// This is TERRIBLE and I wish there was a way around it
-// This is a good example of the new, broken & irritating Qt4 API,
-// and the corresponding loss in functionality versus Qt3.
-// See also tqrect.cpp
-#define private protected
-#include <Qt/qtextlayout.h>
-#undef private
-
-#include "tqtextlayout_p.h"
-#include "tqtextengine_p.h"
-
-#include <tqfont.h>
-#include <tqapplication.h>
-#include <tqpainter.h>
-
-#ifdef USE_QT4
-#include "private/qt4_qtextengine_p.h"
-#endif // USE_QT4
-
-#ifdef USE_QT4
-
-TQTextItem::TQTextItem(int line, QTextEngine *e) : QTextLine(line, e) {}
-
-// TQt internal functions
-// Do not modify unless you know what you are doing!
-QTextEngine* TQTextItem::tqt_textEngine() const {
- return eng;
-}
-
-TQString TQTextItem::tqt_textString() const {
- return eng->layoutData->string;
-}
-
-void TQTextItem::tqt_tqdrawTextItem( TQPainter* p, int x, int y, const TQTextItem &ti, int textFlags ) const {
- // [FIXME] This needs serious help--it ignores the selected font, font size, etc.
- #warning TQTextItem::tqt_tqdrawTextItem( TQPainter* p, int x, int y, const TQTextItem &ti, int textFlags ) unimplemented
- printf("[WARNING] TQTextItem::tqt_tqdrawTextItem( TQPainter* p, int x, int y, const TQTextItem &ti, int textFlags ) partially implemented\n\r");
-
- // Cheat!
- TQString textToPaint = ti.tqt_textString();
- p->save();
- p->setFont(eng->font());
- p->drawText( x, y, textToPaint, textToPaint.length());
-// p->drawText( x, y, TQString("BAD WOLF"), 8);
- p->restore();
-}
-
-// End TQt internal functions
-
-// // [FIXME]
-TQTextItem TQTextLayout::nextItem() {
- tqtl_currentItem++;
-
- if ( tqtl_currentItem >= numItems() )
- return TQTextItem();
-
-// d->tqshape( tqtl_currentItem );
- return TQTextItem( tqtl_currentItem, d );
-}
-
-TQTextItem TQTextLayout::currentItem() {
- if ( tqtl_currentItem >= numItems() )
- return TQTextItem();
-
-// d->tqshape( tqtl_currentItem );
- return TQTextItem( tqtl_currentItem, d );
-}
-
-bool TQTextItem::isRightToLeft() const
-{
-// if (textDirection() == Qt::RightToLeft) {
-// return true;
-// }
-// else {
-// return false;
-// }
- printf("[WARNING] bool TQTextItem::isRightToLeft() const unimplemented\n\r");
- return false;
-}
-
-bool TQTextItem::isObject() const
-{
- printf("[WARNING] bool TQTextItem::isObject() const unimplemented\n\r");
- return false;
-}
-
-bool TQTextItem::isSpace() const
-{
- printf("[WARNING] bool TQTextItem::isSpace() const unimplemented\n\r");
- return false;
-}
-
-bool TQTextItem::isTab() const
-{
- printf("[WARNING] bool TQTextItem::isTab() const unimplemented\n\r");
- return false;
-}
-
-int TQTextLayout::availableWidth() const
-{
- return tqtl_lineWidth - tqtl_widthUsed;
-}
-
-int TQTextItem::from() const
-{
-// return engine->items[item].position;
- return textStart();
-
-// printf("[WARNING] int TQTextItem::from() const unimplemented\n\r");
-// return 0;
-}
-
-int TQTextItem::length() const
-{
-// return engine->length(item);
- return textLength();
-
-// printf("[WARNING] int TQTextItem::length() const unimplemented\n\r");
-// return 0;
-}
-
-void TQTextLayout::beginLine( int width ) {
- tqtl_widthUsed = 0;
- tqtl_lineWidth = width;
- QTextLine line = createLine();
- tqtl_currentItem = numItems() - 1;
- line.setLineWidth(width);
-}
-
-bool TQTextLayout::atEnd() const
-{
- return tqtl_currentItem >= numItems();
-}
-
-int TQTextLayout::widthUsed() {
- return tqtl_widthUsed;
-}
-
-TQTextLayout::Result TQTextLayout::addCurrentItem() {
- if (currentItem().isValid()) {
- tqtl_widthUsed = currentItem().naturalTextWidth();
- }
- else {
- tqtl_widthUsed = 0;
- }
- tqtl_currentItem++;
- printf("[WARNING] TextLayout::Result TQTextLayout::addCurrentItem() partially implemented -- some of its functionality has been moved to beginLine()\n\r");
- return Ok;
-// return (tqtl_widthUsed <= tqtl_lineWidth || (tqtl_currentItem < d->items.size() && d->items[tqtl_currentItem].isSpace)) ? Ok : LineFull;
-}
-
-TQTextLayout::Result TQTextLayout::endLine( int x, int y, int tqalignment, int *ascent, int *descent, int *lineLeft, int *lineRight )
-{
-// [FIXME] This crashes...
-// QTextLine line = itemAt(tqtl_currentItem);
-// line.setPosition(QPointF(x,y));
-// TQ_UNUSED(tqalignment);
-// TQ_UNUSED(ascent);
-// TQ_UNUSED(descent);
-// TQ_UNUSED(lineLeft);
-// TQ_UNUSED(lineRight);
-
- TQ_UNUSED(x);
- TQ_UNUSED(y);
- TQ_UNUSED(tqalignment);
- TQ_UNUSED(ascent);
- TQ_UNUSED(descent);
- TQ_UNUSED(lineLeft);
- TQ_UNUSED(lineRight);
- // tqtl_currentItem must be dealt with here as well
- printf("[WARNING] TQTextLayout::Result TQTextLayout::endLine( int x, int y, int tqalignment, int *ascent, int *descent, int *lineLeft, int *lineRight ) unimplemented\n\r");
- return Ok;
-}
-
-void TQTextLayout::setDirection(TQChar::Direction dir) {
- printf("[WARNING] void TQTextLayout::setDirection(TQChar::Direction dir) unimplemented\n\r");
-}
-
-#else // USE_QT4
-
-TQRect TQTextItem::rect() const
-{
- TQScriptItem& si = engine->items[item];
- return TQRect( si.x, si.y, si.width, si.ascent+si.descent );
-}
-
-int TQTextItem::x() const
-{
- return engine->items[item].x;
-}
-
-int TQTextItem::y() const
-{
- return engine->items[item].y;
-}
-
-int TQTextItem::width() const
-{
- return engine->items[item].width;
-}
-
-int TQTextItem::ascent() const
-{
- return engine->items[item].ascent;
-}
-
-int TQTextItem::descent() const
-{
- return engine->items[item].descent;
-}
-
-void TQTextItem::setWidth( int w )
-{
- engine->items[item].width = w;
-}
-
-void TQTextItem::setAscent( int a )
-{
- engine->items[item].ascent = a;
-}
-
-void TQTextItem::setDescent( int d )
-{
- engine->items[item].descent = d;
-}
-
-int TQTextItem::from() const
-{
- return engine->items[item].position;
-}
-
-int TQTextItem::length() const
-{
- return engine->length(item);
-}
-
-
-int TQTextItem::cursorToX( int *cPos, Edge edge ) const
-{
- int pos = *cPos;
- TQScriptItem *si = &engine->items[item];
-
- engine->tqshape( item );
- advance_t *advances = engine->advances( si );
- GlyphAttributes *glyphAttributes = engine->glyphAttributes( si );
- unsigned short *logClusters = engine->logClusters( si );
-
- int l = engine->length( item );
- if ( pos > l )
- pos = l;
- if ( pos < 0 )
- pos = 0;
-
- int glyph_pos = pos == l ? si->num_glyphs : logClusters[pos];
- if ( edge == Trailing ) {
- // trailing edge is leading edge of next cluster
- while ( glyph_pos < si->num_glyphs && !glyphAttributes[glyph_pos].clusterStart )
- glyph_pos++;
- }
-
- int x = 0;
- bool reverse = engine->items[item].analysis.bidiLevel % 2;
-
- if ( reverse ) {
- for ( int i = si->num_glyphs-1; i >= glyph_pos; i-- )
- x += advances[i];
- } else {
- for ( int i = 0; i < glyph_pos; i++ )
- x += advances[i];
- }
-// qDebug("cursorToX: pos=%d, gpos=%d x=%d", pos, glyph_pos, x );
- *cPos = pos;
- return x;
-}
-
-int TQTextItem::xToCursor( int x, CursorPosition cpos ) const
-{
- TQScriptItem *si = &engine->items[item];
- engine->tqshape( item );
- advance_t *advances = engine->advances( si );
- unsigned short *logClusters = engine->logClusters( si );
-
- int l = engine->length( item );
- bool reverse = si->analysis.bidiLevel % 2;
- if ( x < 0 )
- return reverse ? l : 0;
-
-
- if ( reverse ) {
- int width = 0;
- for ( int i = 0; i < si->num_glyphs; i++ ) {
- width += advances[i];
- }
- x = -x + width;
- }
- int cp_before = 0;
- int cp_after = 0;
- int x_before = 0;
- int x_after = 0;
-
- int lastCluster = 0;
- for ( int i = 1; i <= l; i++ ) {
- int newCluster = i < l ? logClusters[i] : si->num_glyphs;
- if ( newCluster != lastCluster ) {
- // calculate cluster width
- cp_before = cp_after;
- x_before = x_after;
- cp_after = i;
- for ( int j = lastCluster; j < newCluster; j++ )
- x_after += advances[j];
- // qDebug("cluster boundary: lastCluster=%d, newCluster=%d, x_before=%d, x_after=%d",
- // lastCluster, newCluster, x_before, x_after );
- if ( x_after > x )
- break;
- lastCluster = newCluster;
- }
- }
-
- bool before = ( cpos == OnCharacters || (x - x_before) < (x_after - x) );
-
-// qDebug("got cursor position for %d: %d/%d, x_ba=%d/%d using %d",
-// x, cp_before,cp_after, x_before, x_after, before ? cp_before : cp_after );
-
- return before ? cp_before : cp_after;
-
-}
-
-
-bool TQTextItem::isRightToLeft() const
-{
- return (engine->items[item].analysis.bidiLevel % 2);
-}
-
-bool TQTextItem::isObject() const
-{
- return engine->items[item].isObject;
-}
-
-bool TQTextItem::isSpace() const
-{
- return engine->items[item].isSpace;
-}
-
-bool TQTextItem::isTab() const
-{
- return engine->items[item].isTab;
-}
-
-TQTextLayout::TQTextLayout()
- :d(0) {}
-
-TQTextLayout::TQTextLayout( const TQString& string, TQPainter *p )
-{
- TQFontPrivate *f = p ? ( p->pfont ? p->pfont->d : p->cfont.d ) : TQApplication::font().d;
- d = new TQTextEngine( (string.isNull() ? (const TQString&)TQString::tqfromLatin1("") : string), f );
-}
-
-TQTextLayout::TQTextLayout( const TQString& string, const TQFont& fnt )
-{
- d = new TQTextEngine( (string.isNull() ? (const TQString&)TQString::tqfromLatin1("") : string), fnt.d );
-}
-
-TQTextLayout::~TQTextLayout()
-{
- delete d;
-}
-
-void TQTextLayout::setText( const TQString& string, const TQFont& fnt )
-{
- delete d;
- d = new TQTextEngine( (string.isNull() ? (const TQString&)TQString::tqfromLatin1("") : string), fnt.d );
-}
-
-/* add an additional item boundary eg. for style change */
-void TQTextLayout::setBoundary( int strPos )
-{
- if ( strPos <= 0 || strPos >= (int)d->string.length() )
- return;
-
- int itemToSplit = 0;
- while ( itemToSplit < d->items.size() && d->items[itemToSplit].position <= strPos )
- itemToSplit++;
- itemToSplit--;
- if ( d->items[itemToSplit].position == strPos ) {
- // already a split at the requested position
- return;
- }
- d->splitItem( itemToSplit, strPos - d->items[itemToSplit].position );
-}
-
-
-int TQTextLayout::numItems() const
-{
- return d->items.size();
-}
-
-TQTextItem TQTextLayout::itemAt( int i ) const
-{
- return TQTextItem( i, d );
-}
-
-
-TQTextItem TQTextLayout::findItem( int strPos ) const
-{
- if ( strPos == 0 && d->items.size() )
- return TQTextItem( 0, d );
- // ## TODO use bsearch
- for ( int i = d->items.size()-1; i >= 0; --i ) {
- if ( d->items[i].position < strPos )
- return TQTextItem( i, d );
- }
- return TQTextItem();
-}
-
-
-void TQTextLayout::beginLayout( TQTextLayout::LayoutMode m )
-{
- d->items.clear();
- TQTextEngine::Mode mode = TQTextEngine::Full;
- if (m == NoBidi)
- mode = TQTextEngine::NoBidi;
- else if (m == SingleLine)
- mode = TQTextEngine::SingleLine;
- d->itemize( mode );
- d->currentItem = 0;
- d->firstItemInLine = -1;
-}
-
-void TQTextLayout::beginLine( int width )
-{
- d->lineWidth = width;
- d->widthUsed = 0;
- d->firstItemInLine = -1;
-}
-
-bool TQTextLayout::atEnd() const
-{
- return d->currentItem >= d->items.size();
-}
-
-TQTextItem TQTextLayout::nextItem()
-{
- d->currentItem++;
-
- if ( d->currentItem >= d->items.size() )
- return TQTextItem();
-
- d->tqshape( d->currentItem );
- return TQTextItem( d->currentItem, d );
-}
-
-TQTextItem TQTextLayout::currentItem()
-{
- if ( d->currentItem >= d->items.size() )
- return TQTextItem();
-
- d->tqshape( d->currentItem );
- return TQTextItem( d->currentItem, d );
-}
-
-/* ## maybe also currentItem() */
-void TQTextLayout::setLineWidth( int newWidth )
-{
- d->lineWidth = newWidth;
-}
-
-int TQTextLayout::lineWidth() const
-{
- return d->lineWidth;
-}
-
-int TQTextLayout::widthUsed() const
-{
- return d->widthUsed;
-}
-
-int TQTextLayout::availableWidth() const
-{
- return d->lineWidth - d->widthUsed;
-}
-
-
-/* returns true if completely added */
-TQTextLayout::Result TQTextLayout::addCurrentItem()
-{
- if ( d->firstItemInLine == -1 )
- d->firstItemInLine = d->currentItem;
- TQScriptItem &current = d->items[d->currentItem];
- d->tqshape( d->currentItem );
- d->widthUsed += current.width;
-// qDebug("trying to add item %d with width %d, remaining %d", d->currentItem, current.width, d->lineWidth-d->widthUsed );
-
- d->currentItem++;
-
- return (d->widthUsed <= d->lineWidth
- || (d->currentItem < d->items.size() && d->items[d->currentItem].isSpace)) ? Ok : LineFull;
-}
-
-TQTextLayout::Result TQTextLayout::endLine( int x, int y, int tqalignment,
- int *ascent, int *descent, int *lineLeft, int *lineRight )
-{
- int available = d->lineWidth;
- int numRuns = 0;
- int numSpaceItems = 0;
- TQ_UINT8 _levels[128];
- int _visual[128];
- TQ_UINT8 *levels = _levels;
- int *visual = _visual;
- int i;
- TQTextLayout::Result result = LineEmpty;
-
-// qDebug("endLine x=%d, y=%d, first=%d, current=%d lw=%d wu=%d", x, y, d->firstItemInLine, d->currentItem, d->lineWidth, d->widthUsed );
- int width_nobreak_found = d->widthUsed;
- if ( d->firstItemInLine == -1 )
- goto end;
-
- if ( !(tqalignment & (TQt::SingleLine|TQt::IncludeTrailingSpaces))
- && d->currentItem > d->firstItemInLine && d->items[d->currentItem-1].isSpace ) {
- int i = d->currentItem-1;
- while ( i > d->firstItemInLine && d->items[i].isSpace ) {
- numSpaceItems++;
- d->widthUsed -= d->items[i--].width;
- }
- }
-
- if ( (tqalignment & (TQt::WordBreak|TQt::BreakAnywhere)) &&
- d->widthUsed > d->lineWidth ) {
- // find linebreak
-
- // even though we removed trailing spaces the line was too wide. We'll have to break at an earlier
- // position. To not confuse the layouting below, reset the number of space items
- numSpaceItems = 0;
-
-
- bool breakany = tqalignment & TQt::BreakAnywhere;
-
- const TQCharAttributes *attrs = d->attributes();
- int w = 0;
- int itemWidth = 0;
- int breakItem = d->firstItemInLine;
- int breakPosition = -1;
-#if 0
- // we iterate backwards or forward depending on what we guess is closer
- if ( d->widthUsed - d->lineWidth < d->lineWidth ) {
- // backwards search should be faster
-
- } else
-#endif
- {
- int tmpWidth = 0;
- int swidth = 0;
- // forward search is probably faster
- for ( int i = d->firstItemInLine; i < d->currentItem; i++ ) {
- const TQScriptItem *si = &d->items[i];
- int length = d->length( i );
- const TQCharAttributes *itemAttrs = attrs + si->position;
-
- advance_t *advances = d->advances( si );
- unsigned short *logClusters = d->logClusters( si );
-
- int lastGlyph = 0;
- int tmpItemWidth = 0;
-
-// qDebug("looking for break in item %d, isSpace=%d", i, si->isSpace );
- if(si->isSpace && !(tqalignment & (TQt::SingleLine|TQt::IncludeTrailingSpaces))) {
- swidth += si->width;
- } else {
- tmpWidth += swidth;
- swidth = 0;
- for ( int pos = 0; pos < length; pos++ ) {
-// qDebug("advance=%d, w=%d, tmpWidth=%d, softbreak=%d, whitespace=%d",
-// *advances, w, tmpWidth, itemAttrs->softBreak, itemAttrs->whiteSpace );
- int glyph = logClusters[pos];
- if ( lastGlyph != glyph ) {
- while ( lastGlyph < glyph )
- tmpItemWidth += advances[lastGlyph++];
- if ( breakPosition != -1 && w + tmpWidth + tmpItemWidth > d->lineWidth ) {
-// qDebug("found break at w=%d, tmpWidth=%d, tmpItemWidth=%d", w, tmpWidth, tmpItemWidth);
- d->widthUsed = w;
- goto found;
- }
- }
- if ( (itemAttrs->softBreak ||
- ( breakany && itemAttrs->charStop ) ) &&
- (i != d->firstItemInLine || pos != 0) ) {
- if ( breakItem != i )
- itemWidth = 0;
- if (itemAttrs->softBreak)
- breakany = FALSE;
- breakItem = i;
- breakPosition = pos;
-// qDebug("found possible break at item %d, position %d (absolute=%d), w=%d, tmpWidth=%d, tmpItemWidth=%d", breakItem, breakPosition, d->items[breakItem].position+breakPosition, w, tmpWidth, tmpItemWidth);
- w += tmpWidth + tmpItemWidth;
- itemWidth += tmpItemWidth;
- tmpWidth = 0;
- tmpItemWidth = 0;
- }
- itemAttrs++;
- }
- while ( lastGlyph < si->num_glyphs )
- tmpItemWidth += advances[lastGlyph++];
- tmpWidth += tmpItemWidth;
- if ( w + tmpWidth > d->lineWidth ) {
- d->widthUsed = w;
- goto found;
- }
- }
- }
- }
-
- found:
- // no valid break point found
- if ( breakPosition == -1 ) {
- d->widthUsed = width_nobreak_found;
- goto nobreak;
- }
-
-// qDebug("linebreak at item %d, position %d, wu=%d", breakItem, breakPosition, d->widthUsed );
- // split the line
- if ( breakPosition > 0 ) {
-// int length = d->length( breakItem );
-
-// qDebug("splitting item, itemWidth=%d", itemWidth);
- // not a full item, need to break
- d->splitItem( breakItem, breakPosition );
- d->currentItem = breakItem+1;
- } else {
- d->currentItem = breakItem;
- }
- }
-
- result = Ok;
-
- nobreak:
- // position the objects in the line
- available -= d->widthUsed;
-
- numRuns = d->currentItem - d->firstItemInLine - numSpaceItems;
- if ( numRuns > 127 ) {
- levels = new TQ_UINT8[numRuns];
- visual = new int[numRuns];
- }
-
-// qDebug("reordering %d runs, numSpaceItems=%d", numRuns, numSpaceItems );
- for ( i = 0; i < numRuns; i++ ) {
- levels[i] = d->items[i+d->firstItemInLine].analysis.bidiLevel;
-// qDebug(" level = %d", d->items[i+d->firstItemInLine].analysis.bidiLevel );
- }
- d->bidiReorder( numRuns, levels, visual );
-
- end:
- // ### FIXME
- if ( tqalignment & TQt::AlignJustify ) {
- // #### justify items
- tqalignment = TQt::AlignAuto;
- }
- if ( (tqalignment & TQt::AlignHorizontal_Mask) == TQt::AlignAuto )
- tqalignment = TQt::AlignLeft;
- if ( tqalignment & TQt::AlignRight )
- x += available;
- else if ( tqalignment & TQt::AlignHCenter )
- x += available/2;
-
-
- int asc = ascent ? *ascent : 0;
- int desc = descent ? *descent : 0;
-
- for ( i = 0; i < numRuns; i++ ) {
- TQScriptItem &si = d->items[d->firstItemInLine+visual[i]];
- asc = TQMAX( asc, si.ascent );
- desc = TQMAX( desc, si.descent );
- }
-
- int left = x;
- for ( i = 0; i < numRuns; i++ ) {
- TQScriptItem &si = d->items[d->firstItemInLine+visual[i]];
-// qDebug("positioning item %d with width %d (from=%d/length=%d) at %d", d->firstItemInLine+visual[i], si.width, si.position,
-// d->length(d->firstItemInLine+visual[i]), x );
- si.x = x;
- si.y = y + asc;
- x += si.width;
- }
- int right = x;
-
- if ( numSpaceItems ) {
- if ( d->items[d->firstItemInLine+numRuns].analysis.bidiLevel % 2 ) {
- x = left;
- for ( i = 0; i < numSpaceItems; i++ ) {
- TQScriptItem &si = d->items[d->firstItemInLine + numRuns + i];
- x -= si.width;
- si.x = x;
- si.y = y + asc;
- }
- } else {
- for ( i = 0; i < numSpaceItems; i++ ) {
- TQScriptItem &si = d->items[d->firstItemInLine + numRuns + i];
- si.x = x;
- si.y = y + asc;
- x += si.width;
- }
- }
- }
-
- if ( lineLeft )
- *lineLeft = left;
- if ( lineRight )
- *lineRight = right;
- if ( ascent )
- *ascent = asc;
- if ( descent )
- *descent = desc;
-
- if (levels != _levels)
- delete []levels;
- if (visual != _visual)
- delete []visual;
-
- return result;
-}
-
-void TQTextLayout::endLayout()
-{
- // nothing to do currently
-}
-
-
-int TQTextLayout::nextCursorPosition( int oldPos, CursorMode mode ) const
-{
-// qDebug("looking for next cursor pos for %d", oldPos );
- const TQCharAttributes *attributes = d->attributes();
- int len = d->string.length();
- if ( oldPos >= len )
- return oldPos;
- oldPos++;
- if ( mode == SkipCharacters ) {
- while ( oldPos < len && !attributes[oldPos].charStop )
- oldPos++;
- } else {
- while ( oldPos < len && !attributes[oldPos].wordStop && !attributes[oldPos-1].whiteSpace )
- oldPos++;
- }
-// qDebug(" -> %d", oldPos );
- return oldPos;
-}
-
-int TQTextLayout::previousCursorPosition( int oldPos, CursorMode mode ) const
-{
-// qDebug("looking for previous cursor pos for %d", oldPos );
- const TQCharAttributes *attributes = d->attributes();
- if ( oldPos <= 0 )
- return 0;
- oldPos--;
- if ( mode == SkipCharacters ) {
- while ( oldPos && !attributes[oldPos].charStop )
- oldPos--;
- } else {
- while ( oldPos && !attributes[oldPos].wordStop && !attributes[oldPos-1].whiteSpace )
- oldPos--;
- }
-// qDebug(" -> %d", oldPos );
- return oldPos;
-}
-
-
-bool TQTextLayout::validCursorPosition( int pos ) const
-{
- const TQCharAttributes *attributes = d->attributes();
- if ( pos < 0 || pos > (int)d->string.length() )
- return FALSE;
- return attributes[pos].charStop;
-}
-
-void TQTextLayout::setDirection(TQChar::Direction dir)
-{
- d->direction = dir;
-}
-
-#endif // USE_QT4 \ No newline at end of file