Subversion Repositories Scribus

Rev

Rev 1742 | Rev 1786 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
3 paul 1
/***************************************************************************
2
                          pageitem.cpp  -  description
3
                             -------------------
4
    begin                : Sat Apr 7 2001
5
    copyright            : (C) 2001 by Franz Schmid
6
    email                : Franz.Schmid@altmuehlnet.de
7
 ***************************************************************************/
8
 
9
/***************************************************************************
10
 *                                                                         *
11
 *   This program is free software; you can redistribute it and/or modify  *
12
 *   it under the terms of the GNU General Public License as published by  *
13
 *   the Free Software Foundation; either version 2 of the License, or     *
14
 *   (at your option) any later version.                                   *
15
 *                                                                         *
16
 ***************************************************************************/
136 Franz 17
 
3 paul 18
#include "pageitem.h"
270 Franz 19
#include "pageitem.moc"
3 paul 20
#include <qpainter.h>
21
#include <qpen.h>
68 Franz 22
#include <qfont.h>
3 paul 23
#include <qregion.h>
24
#include <qpoint.h>
25
#include <qfileinfo.h>
26
#include <qdrawutil.h>
27
#include <qbitmap.h>
28
#include <cmath>
29
#include "page.h"
243 Franz 30
#include "scribus.h"
838 cbradney 31
#include "scribusdoc.h"
1204 tsoots 32
#include "undomanager.h"
33
#include "undostate.h"
1263 tsoots 34
#include "mpalette.h"
128 Franz 35
 
618 cbradney 36
#ifdef _MSC_VER
37
 #if (_MSC_VER >= 1200)
38
  #include "win-config.h"
39
 #endif
128 Franz 40
#else
41
 #include "config.h"
42
#endif
43
 
68 Franz 44
#include <ft2build.h>
45
#include FT_GLYPH_H
504 cbradney 46
 
47
using namespace std;
48
 
80 Franz 49
extern double Cwidth(ScribusDoc *doc, QString name, QString ch, int Siz, QString ch2 = " ");
220 Franz 50
extern double RealCWidth(ScribusDoc *doc, QString name, QString ch, int Siz);
3 paul 51
extern QPointArray FlattenPath(FPointArray ina, QValueList<uint> &Segs);
80 Franz 52
extern double xy2Deg(double x, double y);
3 paul 53
extern void BezierPoints(QPointArray *ar, QPoint n1, QPoint n2, QPoint n3, QPoint n4);
243 Franz 54
extern ScribusApp* ScApp;
3 paul 55
 
1656 craig 56
PageItem::PageItem(ScribusDoc *pa, ItemType newType, double x, double y, double w, double h, double w2, QString fill, QString outline)
57
        // Initialize superclasses
58
        : QObject(pa),
1657 craig 59
        // Initialize member variables - 2005-03-10 CR. Initializer lists can be faster and safer.
1749 craig 60
        lineShadeVal(100),
1657 craig 61
        fillShadeVal(100),
62
        fillTransparencyVal(0.0),
63
        lineTransparencyVal(0.0),
64
        imageIsFlippedH(0),
65
        imageIsFlippedV(0),
66
        Locked(false),
67
        LockRes(false),
1656 craig 68
        textFlowsAroundFrameVal(false),
69
        textFlowUsesBoundingBoxVal(false),
70
        textFlowUsesContourLineVal(false)
3 paul 71
{
72
        QString tmp;
73
        BackBox = 0;
74
        NextBox = 0;
75
        Xpos = x;
1204 tsoots 76
        oldXpos = x;
3 paul 77
        Ypos = y;
1204 tsoots 78
        oldYpos = y;
3 paul 79
        Width = w;
1206 tsoots 80
        oldWidth = w;
3 paul 81
        Height = h;
1206 tsoots 82
        oldHeight = h;
456 fschmid 83
        BoundingX = x;
84
        BoundingY = y;
85
        BoundingW = w;
86
        BoundingH = h;
3 paul 87
        OldB = Width;
88
        OldH = Height;
89
        OldB2 = Width;
90
        OldH2 = Height;
1460 cbradney 91
        itemTypeVal = newType;
3 paul 92
        Rot = 0;
1211 tsoots 93
        oldRot = 0;
456 fschmid 94
        Doc = pa;
1394 cbradney 95
        fillColorVal = fill;
1460 cbradney 96
        lineColorVal = itemTypeVal == PageItem::TextFrame ? fill : outline;
1194 fschmid 97
        TxtFill = Doc->toolSettings.dPenText;
98
        TxtStroke = Doc->toolSettings.dStrokeText;
68 Franz 99
        ShTxtStroke = 100;
100
        ShTxtFill = 100;
101
        TxtScale = 100;
102
        TxTStyle = 0;
3 paul 103
        GrType = 0;
292 Franz 104
        GrStartX = 0;
105
        GrStartY = 0;
294 Franz 106
        GrEndX = w;
292 Franz 107
        GrEndY = 0;
3 paul 108
        Pwidth = w2;
263 Franz 109
        OldPwidth = w2;
1194 fschmid 110
        PLineArt = PenStyle(Doc->toolSettings.dLineArt);
3 paul 111
        PLineEnd = FlatCap;
112
        PLineJoin = MiterJoin;
113
        Select = false;
114
        FrameOnly = false;
115
        ClipEdited = false;
116
        FrameType = 0;
1194 fschmid 117
        IFont = Doc->toolSettings.defFont;
118
        ISize = Doc->toolSettings.defSize;
119
        LineSp = ((Doc->toolSettings.defSize / 10.0) * static_cast<double>(Doc->typographicSetttings.autoLineSpacing) / 100) + (Doc->toolSettings.defSize / 10.0);
1065 cbradney 120
        Doc->docParagraphStyles[0].LineSpa = LineSp;
3 paul 121
        CurX = 0;
122
        CurY = 0;
123
        CPos = 0;
124
        Extra = 1;
125
        TExtra = 1;
126
        BExtra = 1;
127
        RExtra = 1;
128
        ExtraV = 0;
1065 cbradney 129
        itemText.clear();
130
        itemText.setAutoDelete(true);
387 Franz 131
        MaxChars = 0;
3 paul 132
        Pfile = "";
133
        pixm = QImage();
204 Franz 134
        pixmOrg = QImage();
3 paul 135
        Pfile2 = "";
136
        Pfile3 = "";
137
        LocalScX = 1;
138
        LocalScY = 1;
139
        LocalViewX = 1;
140
        LocalViewY = 1;
141
        OrigW = 0;
142
        OrigH = 0;
127 Franz 143
        dpiX = 72.0;
144
        dpiY = 72.0;
3 paul 145
        LocalX = 0;
146
        LocalY = 0;
147
        BBoxX = 0;
148
        BBoxH = 0;
149
        RadRect = 0;
1460 cbradney 150
        if ((itemTypeVal == TextFrame) || (itemTypeVal == ImageFrame))
151
                // TODO: Frame should become a read-only calculated property
3 paul 152
                Frame = true;
153
        else
154
                Frame = false;
1460 cbradney 155
        switch (itemTypeVal)
167 Franz 156
        {
1460 cbradney 157
                case Polygon:
340 Franz 158
                        Clip.setPoints(4, static_cast<int>(w/2), 0, static_cast<int>(w), static_cast<int>(h/2),
159
                                                                static_cast<int>(w/2), static_cast<int>(h), 0,static_cast<int>(h/2));
3 paul 160
                        break;
161
                default:
340 Franz 162
                        Clip.setPoints(4, 0,0, static_cast<int>(w),0, static_cast<int>(w), static_cast<int>(h), 0,static_cast<int>(h));
3 paul 163
                        break;
167 Franz 164
        }
3 paul 165
        PoLine.resize(0);
340 Franz 166
        ContourLine.resize(0);
3 paul 167
        Segments.clear();
168
        PoShow = false;
169
        BaseOffs = 0;
1065 cbradney 170
        OwnPage = Doc->currentPage->PageNr;
1211 tsoots 171
        oldOwnPage = OwnPage;
3 paul 172
        PicArt = true;
173
        PicAvail = false;
174
        isPrintable = true;
175
        isBookmark = false;
167 Franz 176
        BMnr = 0;
3 paul 177
        isAnnotation = false;
178
        AnType = 0;
179
        AnActType = 0;
180
        AnBwid = 1;
181
        AnAction = "";
182
        An_E_act = "";
183
        An_X_act = "";
184
        An_D_act = "";
185
        An_Fo_act = "";
186
        An_Bl_act = "";
187
        An_K_act = "";
188
        An_F_act = "";
189
        An_V_act = "";
190
        An_C_act = "";
19 Franz 191
        An_Extern = "";
1460 cbradney 192
        switch (itemTypeVal)
268 Franz 193
        {
1460 cbradney 194
        case ImageFrame:
268 Franz 195
                AnName = tr("Image");
1250 tsoots 196
                setUPixmap(Um::IImageFrame);
268 Franz 197
                break;
1460 cbradney 198
        case TextFrame:
268 Franz 199
                AnName = tr("Text");
1250 tsoots 200
                setUPixmap(Um::ITextFrame);
268 Franz 201
                break;
1460 cbradney 202
        case Line:
268 Franz 203
                AnName = tr("Line");
1250 tsoots 204
                setUPixmap(Um::ILine);
268 Franz 205
                break;
1460 cbradney 206
        case Polygon:
268 Franz 207
                AnName = tr("Polygon");
1250 tsoots 208
                setUPixmap(Um::IPolygon);
268 Franz 209
                break;
1460 cbradney 210
        case PolyLine:
268 Franz 211
                AnName = tr("Polyline");
1250 tsoots 212
                setUPixmap(Um::IPolyline);
268 Franz 213
                break;
1460 cbradney 214
        case PathText:
268 Franz 215
                AnName = tr("PathText");
1250 tsoots 216
                setUPixmap(Um::IPathText);
268 Franz 217
                break;
218
        default:
219
                AnName = "Item";
220
                break;
221
        }
270 Franz 222
        AnName += tmp.setNum(Doc->TotalItems); // +" "+QDateTime::currentDateTime().toString();
87 Franz 223
        AutoName = true;
1204 tsoots 224
        setUName(AnName);
3 paul 225
        Doc->TotalItems++;
226
        AnToolTip = "";
227
        AnRollOver = "";
228
        AnDown = "";
229
        AnBsty = 0;
230
        AnFeed = 1;
231
        AnFlag = 0;
232
        AnZiel = 0;
233
        AnVis = 0;
234
        AnChkStil = 0;
235
        AnFormat = 0;
236
        AnFont = 4;
237
        AnIsChk = false;
238
        AnAAact = false;
239
        AnHTML = false;
240
        AnUseIcons = false;
241
        AnIPlace = 1;
242
        AnScaleW = 0;
243
        AnMaxChar = -1;
244
        AnBColor = outline;
245
        HasSel = false;
246
        Tinput = false;
247
        isAutoText = false;
1065 cbradney 248
        textAlignment = 0;
3 paul 249
        Redrawn = false;
250
        isRaster = false;
251
        Sizing = false;
252
        toPixmap = false;
253
        UseEmbedded = true;
254
        EmProfile = "";
255
        Groups.clear();
256
        LayerNr = Doc->ActiveLayer;
257
        ScaleType = true;
258
        AspectRatio = true;
259
        Reverse = false;
20 Franz 260
        InvPict = false;
27 Franz 261
        NamedLStyle = "";
68 Franz 262
        DashValues.clear();
139 Franz 263
        TabValues.clear();
68 Franz 264
        DashOffset = 0;
265
        fill_gradient = VGradient(VGradient::linear);
295 Franz 266
        fill_gradient.clearStops();
1394 cbradney 267
        if (fillColor() == "None")
1194 fschmid 268
                fill_gradient.addStop(Doc->PageColors[Doc->toolSettings.dBrush].getRGBColor(), 0.0, 0.5, 1.0, Doc->toolSettings.dBrush, 100);
304 Franz 269
        else
1394 cbradney 270
                fill_gradient.addStop(Doc->PageColors[fillColor()].getRGBColor(), 0.0, 0.5, 1.0, fillColor(), 100);
271
        if (lineColor() == "None")
1194 fschmid 272
                fill_gradient.addStop(Doc->PageColors[Doc->toolSettings.dPen].getRGBColor(), 1.0, 0.5, 1.0, Doc->toolSettings.dPen, 100);
304 Franz 273
        else
1394 cbradney 274
        fill_gradient.addStop(Doc->PageColors[lineColor()].getRGBColor(), 1.0, 0.5, 1.0, lineColor(), 100);
456 fschmid 275
        Language = Doc->Language;
1194 fschmid 276
        Cols = Doc->toolSettings.dCols;
277
        ColGap = Doc->toolSettings.dGap;
232 Franz 278
        LeftLink = 0;
279
        RightLink = 0;
280
        TopLink = 0;
281
        BottomLink = 0;
234 Franz 282
        LeftLinkID = 0;
283
        RightLinkID = 0;
284
        TopLinkID = 0;
285
        BottomLinkID = 0;
232 Franz 286
        LeftLine = 0;
287
        RightLine = false;
288
        TopLine = false;
289
        BottomLine = false;
290
        isTableItem = false;
291
        isSingleSel = false;
383 Franz 292
        Dirty = false;
456 fschmid 293
        ChangedMasterItem = false;
1065 cbradney 294
        OnMasterPage = Doc->currentPage->PageNam;
1194 fschmid 295
        startArrowIndex = Doc->toolSettings.dStartArrow;
296
        endArrowIndex = Doc->toolSettings.dEndArrow;
1204 tsoots 297
        undoManager = UndoManager::instance();
1624 fschmid 298
        imgInfo.valid = false;
1646 fschmid 299
        imgInfo.isRequest = false;
1659 cbradney 300
 
301
        //Page Item Attributes
302
        pageItemAttributes.clear();
303
        for(ObjAttrVector::Iterator objAttrIt = Doc->docItemAttributes.begin() ; objAttrIt != Doc->docItemAttributes.end(); ++objAttrIt )
304
        {
305
                if (((*objAttrIt).autoaddto=="textframes" && itemTypeVal==TextFrame) ||
306
                        ((*objAttrIt).autoaddto=="imageframes" && itemTypeVal==ImageFrame)
307
                        )
308
                        pageItemAttributes.append(*objAttrIt);
309
        }
3 paul 310
}
311
 
312
/** Zeichnet das Item */
68 Franz 313
void PageItem::DrawObj(ScPainter *p, QRect e)
3 paul 314
{
1740 cbradney 315
        if (!Doc->DoDrawing)
316
        {
317
                Redrawn = true;
318
                Tinput = false;
319
                FrameOnly = false;
320
                return;
321
        }
1736 cbradney 322
        switch(itemType())
323
        {
324
                case ImageFrame:
325
                        DrawObj_ImageFrame(p, e);
326
                        break;
327
                case TextFrame:
328
                        DrawObj_TextFrame(p, e);
329
                        break;
330
                case Line:
331
                        DrawObj_Line(p, e);
332
                        break;
333
                case Polygon:
334
                        DrawObj_Polygon(p, e);
335
                        break;
336
                case PolyLine:
337
                        DrawObj_PolyLine(p, e);
338
                        break;
339
                case PathText:
340
                        DrawObj_PathText(p, e);
341
                        break;
342
                default:
343
                        break;
344
        }
1740 cbradney 345
        //DrawObj_Post(p, e);
1736 cbradney 346
}
347
 
1741 cbradney 348
void PageItem::DrawObj_Pre(ScPainter *p, QRect &e, QPainter &pf, double &sc)
1740 cbradney 349
{
1741 cbradney 350
        sc = ScApp->view->Scale;
351
        pf.begin(ScApp->view->viewport());
352
        QPoint trans = ScApp->view->contentsToViewport(QPoint(qRound(Xpos*sc), qRound(Ypos*sc)));
353
        pf.translate(trans.x(), trans.y());
354
        pf.rotate(Rot);
355
        pf.scale(sc, sc);
356
        if (!Doc->RePos)
357
                pf.setClipRect(!e.isEmpty() ? e : QRect(0, 0, ScApp->view->viewport()->width(), ScApp->view->viewport()->height()));
358
        p->setZoomFactor(sc);
359
        p->save();
360
        p->translate(Xpos*sc, Ypos*sc);
361
        p->rotate(Rot);
362
        p->setLineWidth(Pwidth);
363
        if (GrType != 0)
364
        {
365
                p->setFillMode(ScPainter::Gradient);
366
                p->fill_gradient = fill_gradient;
367
                QWMatrix grm;
368
                grm.rotate(Rot);
369
                FPointArray gra;
370
                switch (GrType)
371
                {
372
                        case 1:
373
                        case 2:
374
                        case 3:
375
                        case 4:
376
                        case 6:
377
                                gra.setPoints(2, GrStartX, GrStartY, GrEndX, GrEndY);
378
                                gra.map(grm);
379
                                p->setGradient(VGradient::linear, gra.point(0), gra.point(1));
380
                                break;
381
                        case 5:
382
                        case 7:
383
                                gra.setPoints(2, GrStartX, GrStartY, GrEndX, GrEndY);
384
                                p->setGradient(VGradient::radial, gra.point(0), gra.point(1), gra.point(0));
385
                                break;
386
                }
387
        }
388
        else
389
        {
390
                p->fill_gradient = VGradient(VGradient::linear);
391
                if (fillColor() != "None")
392
                {
393
                        QColor tmp;
394
                        SetFarbe(&tmp, fillColor(), fillShade());
395
                        p->setBrush(tmp);
396
                        p->setFillMode(ScPainter::Solid);
397
                }
398
                else
399
                        p->setFillMode(ScPainter::None);
400
        }
401
        if (lineColor() != "None")
402
        {
403
                QColor tmp;
404
                SetFarbe(&tmp, lineColor(), lineShade());
405
                if ((Pwidth == 0) && (itemType() != Line))
406
                        p->setLineWidth(0);
407
                else
408
                {
409
                        p->setPen(tmp, Pwidth, PLineArt, PLineEnd, PLineJoin);
410
                        if (DashValues.count() != 0)
411
                                p->setDash(DashValues, DashOffset);
412
                }
413
        }
414
        else
415
                p->setLineWidth(0);
416
        p->setBrushOpacity(1.0 - fillTransparency());
417
        p->setPenOpacity(1.0 - lineTransparency());
1740 cbradney 418
}
419
 
1749 craig 420
void PageItem::DrawObj_Post(ScPainter *p, QRect& /*e*/)
1740 cbradney 421
{
422
        if (Doc->RePos)
423
                return;
424
        bool doStroke=true;
425
 
426
        if ((itemType()==PathText && !PoShow)|| itemType()==PolyLine || itemType()==Line)
427
                doStroke=false;
428
 
429
        //if (doStroke) && (!Doc->RePos))
430
        if (doStroke)
431
        {
432
                if (lineColor() != "None")
433
                {
434
                        QColor tmp;
435
                        SetFarbe(&tmp, lineColor(), lineShade());
436
                        p->setPen(tmp, Pwidth, PLineArt, PLineEnd, PLineJoin);
437
                        if (DashValues.count() != 0)
438
                                p->setDash(DashValues, DashOffset);
439
                }
440
                else
441
                        p->setLineWidth(0);
442
                if (!isTableItem)
443
                {
444
                        p->setupPolygon(&PoLine);
445
                        if (NamedLStyle == "")
446
                                p->strokePath();
447
                        else
448
                        {
449
                                multiLine ml = Doc->MLineStyles[NamedLStyle];
450
                                QColor tmp;
451
                                for (int it = ml.size()-1; it > -1; it--)
452
                                {
453
                                        SetFarbe(&tmp, ml[it].Color, ml[it].Shade);
454
                                        p->setPen(tmp, ml[it].Width,
455
                                                          static_cast<PenStyle>(ml[it].Dash),
456
                                                          static_cast<PenCapStyle>(ml[it].LineEnd),
457
                                                          static_cast<PenJoinStyle>(ml[it].LineJoin));
458
                                        p->strokePath();
459
                                }
460
                        }
461
                }
462
        }
463
        //if (!Doc->RePos)
464
        //{
465
                double scpInv = 1.0 / (QMAX(ScApp->view->Scale, 1));
466
                if ((Frame) && (Doc->guidesSettings.framesShown) && ((itemType() == ImageFrame) || (itemType() == TextFrame)))
467
                {
1742 cbradney 468
                        p->setPen(black, scpInv, DotLine, FlatCap, MiterJoin);
1740 cbradney 469
                        if ((isBookmark) || (isAnnotation))
470
                                p->setPen(blue, scpInv, DotLine, FlatCap, MiterJoin);
471
                        if ((BackBox != 0) || (NextBox != 0))
472
                                p->setPen(red, scpInv, SolidLine, FlatCap, MiterJoin);
473
                        if (Locked)
474
                                p->setPen(darkRed, scpInv, SolidLine, FlatCap, MiterJoin);
1742 cbradney 475
 
1740 cbradney 476
                        p->setFillMode(0);
477
                        p->setupPolygon(&PoLine);
478
                        p->strokePath();
479
                }
480
                if ((Doc->guidesSettings.framesShown) && textFlowUsesContourLine() && (ContourLine.size() != 0))
481
                {
482
                        p->setPen(lightGray, scpInv, DotLine, FlatCap, MiterJoin);
483
                        p->setupPolygon(&ContourLine);
484
                        p->strokePath();
485
                }
486
        //}
487
}
488
 
1736 cbradney 489
/** Zeichnet das Item */
490
void PageItem::DrawObj_ImageFrame(ScPainter *p, QRect e)
491
{
492
        QPainter pf;
1741 cbradney 493
        double sc;
494
        DrawObj_Pre(p, e, pf, sc);
1736 cbradney 495
        if(!Doc->RePos)
167 Franz 496
        {
1394 cbradney 497
                        if ((fillColor() != "None") || (GrType != 0))
167 Franz 498
                        {
68 Franz 499
                                p->setupPolygon(&PoLine);
745 fschmid 500
                                p->fillPath();
167 Franz 501
                        }
68 Franz 502
                        if (Pfile == "")
167 Franz 503
                        {
879 fschmid 504
                                if ((Frame) && (Doc->guidesSettings.framesShown))
310 Franz 505
                                {
506
                                        p->setPen(black, 1, SolidLine, FlatCap, MiterJoin);
507
                                        p->drawLine(FPoint(0, 0), FPoint(Width, Height));
508
                                        p->drawLine(FPoint(0, Height), FPoint(Width, 0));
509
                                }
167 Franz 510
                        }
68 Franz 511
                        else
167 Franz 512
                        {
68 Franz 513
                                if ((!PicArt) || (!PicAvail))
167 Franz 514
                                {
879 fschmid 515
                                        if ((Frame) && (Doc->guidesSettings.framesShown))
310 Franz 516
                                        {
517
                                                p->setPen(red, 1, SolidLine, FlatCap, MiterJoin);
518
                                                p->drawLine(FPoint(0, 0), FPoint(Width, Height));
519
                                                p->drawLine(FPoint(0, Height), FPoint(Width, 0));
520
                                        }
167 Franz 521
                                }
3 paul 522
                                else
167 Franz 523
                                {
267 Franz 524
                                        p->setupPolygon(&PoLine);
525
                                        p->setClipPath();
526
                                        p->save();
1392 cbradney 527
                                        if (imageFlippedH())
971 fschmid 528
                                        {
267 Franz 529
                                                p->translate(Width * sc, 0);
530
                                                p->scale(-1, 1);
971 fschmid 531
                                        }
1392 cbradney 532
                                        if (imageFlippedV())
971 fschmid 533
                                        {
267 Franz 534
                                                p->translate(0, Height * sc);
535
                                                p->scale(1, -1);
971 fschmid 536
                                        }
68 Franz 537
                                        if ((LocalViewX != 1) || (LocalViewY != 1))
267 Franz 538
                                                p->scale(LocalViewX, LocalViewY);
293 Franz 539
                                        p->translate(LocalX*LocalScX*sc, LocalY*LocalScY*sc);
68 Franz 540
                                        if (InvPict)
268 Franz 541
                                        {
542
                                                QImage ip = pixm.copy();
1505 fschmid 543
                                                ip.invertPixels();
270 Franz 544
                                                p->drawImage(&ip);
268 Franz 545
                                        }
546
                                        else
270 Franz 547
                                                p->drawImage(&pixm);
267 Franz 548
                                        p->restore();
167 Franz 549
                                }
550
                        }
1736 cbradney 551
        }
1740 cbradney 552
        DrawObj_Post(p, e);
1736 cbradney 553
        Tinput = false;
554
        FrameOnly = false;
555
        p->restore();
556
        pf.end();
557
}
558
 
559
/** Zeichnet das Item */
560
void PageItem::DrawObj_TextFrame(ScPainter *p, QRect e)
561
{
1741 cbradney 562
        QPainter pf;
563
        double sc;
564
        DrawObj_Pre(p, e, pf, sc);
1736 cbradney 565
        switch (itemType())
566
        {
1460 cbradney 567
                case TextFrame:
1741 cbradney 568
                {
569
                        QPainter pp, pf2;
570
                        PageItem *nb;
571
                        QPoint pt1, pt2;
572
                        FPoint ColBound;
573
                        QRegion cm;
574
                        uint a, nrc, nrc2, startLin;
575
                        int desc, asce, absa, aSpa, chs, chsd, CurrCol;
576
                        uint BuPos, LastSP, MaxText;
577
                        double oldCurY, LastXp, EndX, OFs, OFs2, wide, lineCorr, ColWidth, kernVal, RTabX;
578
                        QString chx, chx2, chx3;
579
                        struct ScText *hl;
580
                        struct ZZ *Zli;
581
                        struct ZZ *Zli2;
582
 
583
                        bool outs = false;
584
                        bool fBorder = false;
585
                        bool RTab = false;
586
                        bool goNoRoom = false;
587
                        uint StartRT, StartRT2;
588
                        int TabCode = 0;
589
                        int HyphenCount = 0;
590
                        QValueList<double> tTabValues;
591
                        bool DropCmode = false;
592
                        bool AbsHasDrop = false;
593
                        double maxDY, firstDes, desc2, maxDX;
594
                        int DropLines;
595
                        bool StartOfCol = true;
596
                        tTabValues.clear();
597
 
598
                        for (int xxx=0; xxx<5; ++xxx)
599
                        {
600
                                Doc->docParagraphStyles[xxx].LineSpa = LineSp;
601
                                Doc->docParagraphStyles[xxx].FontSize = ISize;
602
                                Doc->docParagraphStyles[xxx].Indent = 0;
603
                                Doc->docParagraphStyles[xxx].First = 0;
604
                                Doc->docParagraphStyles[xxx].gapBefore = 0;
605
                                Doc->docParagraphStyles[xxx].gapAfter = 0;
606
                                Doc->docParagraphStyles[xxx].textAlignment = xxx;
607
                        }
608
 
609
                        QPtrList<ZZ> LiList;
610
                        LiList.setAutoDelete(true);
611
                        QRect e2 = QRect(qRound(e.x() / sc), qRound(e.y() / sc), qRound(e.width() / sc), qRound(e.height() / sc));
68 Franz 612
                        p->save();
456 fschmid 613
                        pf2.begin(ScApp->view->viewport());
209 Franz 614
                        pf2.translate(Xpos, Ypos);
615
                        pf2.rotate(Rot);
1394 cbradney 616
                        if ((fillColor() != "None") || (GrType != 0))
971 fschmid 617
                        {
68 Franz 618
                                p->setupPolygon(&PoLine);
745 fschmid 619
                                p->fillPath();
971 fschmid 620
                        }
1394 cbradney 621
                        if (lineColor() != "None")
110 Franz 622
                                lineCorr = Pwidth / 2.0;
623
                        else
624
                                lineCorr = 0;
68 Franz 625
                        if ((isAnnotation) && (AnType == 2) && (Pfile != "") && (PicAvail) && (PicArt) && (AnUseIcons))
971 fschmid 626
                        {
627
                                p->setupPolygon(&PoLine);
628
                                p->setClipPath();
629
                                p->save();
630
                                p->scale(LocalScX, LocalScY);
631
                                p->translate(static_cast<int>(LocalX*LocalScX), static_cast<int>(LocalY*LocalScY));
632
                                if (!pixm.isNull())
633
                                        p->drawImage(&pixm);
634
                                p->restore();
635
                        }
1065 cbradney 636
                        if ((itemText.count() != 0) && (Dirty))
384 Franz 637
                        {
1392 cbradney 638
                                if (imageFlippedH())
384 Franz 639
                                {
640
                                        p->translate(Width * sc, 0);
641
                                        p->scale(-1, 1);
642
                                }
1392 cbradney 643
                                if (imageFlippedV())
384 Franz 644
                                {
645
                                        p->translate(0, Height * sc);
646
                                        p->scale(1, -1);
647
                                }
648
                                struct ZZ Zli3;
1065 cbradney 649
                                for (a = 0; a < itemText.count(); ++a)
384 Franz 650
                                {
387 Franz 651
                                        if (a > MaxChars)
652
                                                break;
1065 cbradney 653
                                        hl = itemText.at(a);
384 Franz 654
                                        chx = hl->ch;
655
                                        if (hl->ch == QChar(30))
656
                                                chx = ExpandToken(a);
657
                                        if (hl->ccolor != "None")
658
                                        {
1741 cbradney 659
                                                QColor tmp;
384 Franz 660
                                                SetFarbe(&tmp, hl->ccolor, hl->cshade);
661
                                                p->setBrush(tmp);
662
                                        }
663
                                        if (hl->cstroke != "None")
664
                                        {
1741 cbradney 665
                                                QColor tmp;
384 Franz 666
                                                SetFarbe(&tmp, hl->cstroke, hl->cshade2);
667
                                                p->setPen(tmp, 1, SolidLine, FlatCap, MiterJoin);
668
                                        }
414 Franz 669
                                        chs = hl->csize;
670
                                        oldCurY = SetZeichAttr(hl, &chs, &chx);
671
                                        Zli3.Zeich = chx;
384 Franz 672
                                        Zli3.Farb = hl->ccolor;
673
                                        Zli3.Farb2 = hl->cstroke;
674
                                        Zli3.shade = hl->cshade;
675
                                        Zli3.shade2 = hl->cshade2;
676
                                        Zli3.xco = hl->xp;
677
                                        Zli3.yco = hl->yp;
678
                                        Zli3.Sele = hl->cselect;
414 Franz 679
                                        Zli3.Siz = chs;
384 Franz 680
                                        Zli3.Style = hl->cstyle;
681
                                        Zli3.ZFo = hl->cfont;
682
                                        Zli3.wide = Cwidth(Doc, hl->cfont, chx, hl->csize);
683
                                        Zli3.kern = hl->cextra;
684
                                        Zli3.scale = hl->cscale;
685
                                        if (!Doc->RePos)
418 Franz 686
                                        {
1093 fschmid 687
                                                desc = static_cast<int>((*Doc->AllFonts)[Zli3.ZFo]->numDescender * (-Zli3.Siz / 10.0));
688
                                                asce = static_cast<int>((*Doc->AllFonts)[Zli3.ZFo]->numAscent * (Zli3.Siz / 10.0));
689
                                                if (e2.intersects(pf2.xForm(QRect(qRound(Zli3.xco),qRound(Zli3.yco-asce), qRound(Zli3.wide+1), qRound(asce+desc)))))
454 fschmid 690
                                                        DrawZeichenS(p, &Zli3);
418 Franz 691
                                                if (hl->cstyle & 512)
692
                                                {
693
                                                        Zli3.Zeich = "-";
694
                                                        Zli3.xco = Zli3.xco + Cwidth(Doc, hl->cfont, chx, hl->csize);
1093 fschmid 695
                                                        if (e2.intersects(pf2.xForm(QRect(qRound(Zli3.xco),qRound(Zli3.yco-asce), qRound(Zli3.wide+1), qRound(asce+desc)))))
454 fschmid 696
                                                                DrawZeichenS(p, &Zli3);
418 Franz 697
                                                }
698
                                        }
384 Franz 699
                                }
1065 cbradney 700
                                if (itemText.count() > MaxChars)
385 Franz 701
                                {
702
                                        if (!Doc->RePos)
703
                                        {
456 fschmid 704
                                                double scp1 = 1 / QMAX(ScApp->view->Scale, 1);
421 Franz 705
                                                double scp16 = 16 * scp1;
706
                                                double scp14 = 14 * scp1;
707
                                                double scp3 = 3 * scp1;
708
                                                double scpwidth16 = Width - scp16;
709
                                                double scpheight16 = Height - scp16;
710
                                                double scpwidth3 = Width - scp3;
711
                                                double scpheight3 = Height - scp3;
456 fschmid 712
                                                p->setBrush(white);
421 Franz 713
                                                p->setPen(black, scp1, SolidLine, FlatCap, MiterJoin);
714
                                                p->drawRect(scpwidth16, scpheight16, scp14, scp14);
715
                                                p->drawLine(FPoint(scpwidth16, scpheight16), FPoint(scpwidth3, scpheight3));
716
                                                p->drawLine(FPoint(scpwidth16, scpheight3), FPoint(scpwidth3, scpheight16));
385 Franz 717
                                        }
718
                                }
384 Franz 719
                                Dirty = false;
720
                                Redrawn = true;
721
                                pf2.end();
722
                                p->restore();
723
                                break;
724
                        }
1065 cbradney 725
                        if ((itemText.count() != 0) || (NextBox != 0))
971 fschmid 726
                        {
727
                                if (NextBox != 0)
68 Franz 728
                                {
729
                                        nb = NextBox;
730
                                        while (nb != 0)
971 fschmid 731
                                        {
1065 cbradney 732
                                                a = nb->itemText.count();
68 Franz 733
                                                for (uint s=0; s<a; ++s)
971 fschmid 734
                                                {
1065 cbradney 735
                                                        itemText.append(nb->itemText.take(0));
971 fschmid 736
                                                }
108 Franz 737
                                                nb->MaxChars = 0;
68 Franz 738
                                                nb = nb->NextBox;
971 fschmid 739
                                        }
68 Franz 740
                                        nb = NextBox;
971 fschmid 741
                                }
1065 cbradney 742
                                Doc->docParagraphStyles[0].LineSpa = LineSp;
209 Franz 743
                                QRegion cl = QRegion(pf2.xForm(Clip));
456 fschmid 744
                                for (a = 0; a < Doc->Items.count(); ++a)
971 fschmid 745
                                {
456 fschmid 746
                                        if (((Doc->Items.at(a)->ItemNr > ItemNr) && (Doc->Items.at(a)->LayerNr == LayerNr))
1736 cbradney 747
                                                                                 || (Doc->Layers[Doc->Items.at(a)->LayerNr].Level > Doc->Layers[LayerNr].Level))
971 fschmid 748
                                        {
1653 craig 749
                                                if (Doc->Items.at(a)->textFlowsAroundFrame())
3 paul 750
                                                {
456 fschmid 751
                                                        pp.begin(ScApp->view->viewport());
752
                                                        pp.translate(Doc->Items.at(a)->Xpos, Doc->Items.at(a)->Ypos);
753
                                                        pp.rotate(Doc->Items.at(a)->Rot);
1653 craig 754
                                                        if (Doc->Items.at(a)->textFlowUsesBoundingBox())
971 fschmid 755
                                                        {
68 Franz 756
                                                                QPointArray tcli;
757
                                                                tcli.resize(4);
758
                                                                tcli.setPoint(0, QPoint(0,0));
456 fschmid 759
                                                                tcli.setPoint(1, QPoint(qRound(Doc->Items.at(a)->Width), 0));
760
                                                                tcli.setPoint(2, QPoint(qRound(Doc->Items.at(a)->Width), qRound(Doc->Items.at(a)->Height)));
761
                                                                tcli.setPoint(3, QPoint(0, qRound(Doc->Items.at(a)->Height)));
68 Franz 762
                                                                cm = QRegion(pp.xForm(tcli));
971 fschmid 763
                                                        }
68 Franz 764
                                                        else
340 Franz 765
                                                        {
1656 craig 766
                                                                if ((Doc->Items.at(a)->textFlowUsesContourLine()) && (Doc->Items.at(a)->ContourLine.size() != 0))
340 Franz 767
                                                                {
768
                                                                        QValueList<uint> Segs;
456 fschmid 769
                                                                        QPointArray Clip2 = FlattenPath(Doc->Items.at(a)->ContourLine, Segs);
340 Franz 770
                                                                        cm = QRegion(pp.xForm(Clip2));
771
                                                                }
772
                                                                else
456 fschmid 773
                                                                        cm = QRegion(pp.xForm(Doc->Items.at(a)->Clip));
340 Franz 774
                                                        }
68 Franz 775
                                                        pp.end();
776
                                                        cl = cl.subtract(cm);
3 paul 777
                                                }
778
                                        }
971 fschmid 779
                                }
1392 cbradney 780
                                if (imageFlippedH())
383 Franz 781
                                {
68 Franz 782
                                        p->translate(Width * sc, 0);
783
                                        p->scale(-1, 1);
263 Franz 784
                                        pf2.translate(Width, 0);
262 Franz 785
                                        pf2.scale(-1, 1);
383 Franz 786
                                }
1392 cbradney 787
                                if (imageFlippedV())
383 Franz 788
                                {
68 Franz 789
                                        p->translate(0, Height * sc);
790
                                        p->scale(1, -1);
263 Franz 791
                                        pf2.translate(0, Height);
262 Franz 792
                                        pf2.scale(1, -1);
383 Franz 793
                                }
134 Franz 794
                                CurrCol = 0;
140 Franz 795
                                ColWidth = (Width - (ColGap * (Cols - 1)) - Extra - RExtra - 2*lineCorr) / Cols;
796
                                ColBound = FPoint((ColWidth + ColGap) * CurrCol+Extra + lineCorr, ColWidth * (CurrCol+1) + ColGap * CurrCol + Extra+lineCorr);
138 Franz 797
                                ColBound = FPoint(ColBound.x(), ColBound.y()+RExtra+lineCorr);
140 Franz 798
                                CurX = ColBound.x();
1065 cbradney 799
                                if (itemText.count() > 0)
971 fschmid 800
                                {
1065 cbradney 801
                                        hl = itemText.at(0);
802
                                        if (Doc->docParagraphStyles[hl->cab].Drop)
241 Franz 803
                                        {
1065 cbradney 804
                                                if (Doc->docParagraphStyles[hl->cab].BaseAdj)
805
                                                        chs = qRound(Doc->typographicSetttings.valueBaseGrid  * Doc->docParagraphStyles[hl->cab].DropLin * 10);
241 Franz 806
                                                else
1065 cbradney 807
                                                        chs = qRound(Doc->docParagraphStyles[hl->cab].LineSpa * Doc->docParagraphStyles[hl->cab].DropLin * 10);
241 Franz 808
                                        }
160 Franz 809
                                        else
810
                                                chs = hl->csize;
811
                                        desc2 = -(*Doc->AllFonts)[hl->cfont]->numDescender * (chs / 10.0);
175 Franz 812
                                        CurY = TExtra+lineCorr;
971 fschmid 813
                                }
160 Franz 814
                                else
971 fschmid 815
                                {
160 Franz 816
                                        desc2 = -(*Doc->AllFonts)[IFont]->numDescender * (ISize / 10.0);
1065 cbradney 817
                                        CurY = Doc->docParagraphStyles[0].LineSpa+TExtra+lineCorr-desc2;
971 fschmid 818
                                }
160 Franz 819
                                firstDes = desc2;
68 Franz 820
                                LiList.clear();
821
                                BuPos = 0;
822
                                LastSP = 0;
823
                                LastXp = 0;
824
                                outs = false;
825
                                OFs = 0;
826
                                OFs2 = 0;
827
                                aSpa = 0;
828
                                absa = 0;
209 Franz 829
                                MaxChars = 0;
1065 cbradney 830
                                MaxText = itemText.count();
209 Franz 831
                                StartOfCol = true;
114 Franz 832
                                for (a = 0; a < MaxText; ++a)
971 fschmid 833
                                {
1065 cbradney 834
                                        hl = itemText.at(a);
68 Franz 835
                                        chx = hl->ch;
836
                                        if (hl->ch == QChar(30))
837
                                                chx = ExpandToken(a);
838
                                        absa = hl->cab;
839
                                        if (a == 0)
971 fschmid 840
                                        {
841
                                                if (BackBox != 0)
3 paul 842
                                                {
68 Franz 843
                                                        nb = BackBox;
116 Franz 844
                                                        while (nb != 0)
971 fschmid 845
                                                        {
1065 cbradney 846
                                                                if (nb->itemText.count() != 0)
3 paul 847
                                                                {
1065 cbradney 848
                                                                        if (nb->itemText.at(nb->itemText.count()-1)->ch == QChar(13))
3 paul 849
                                                                        {
1065 cbradney 850
                                                                                CurX += Doc->docParagraphStyles[absa].First;
851
                                                                                CurX += Doc->docParagraphStyles[absa].Indent;
852
                                                                                CurY += Doc->docParagraphStyles[absa].gapBefore;
153 Franz 853
                                                                                if (chx != QChar(13))
1065 cbradney 854
                                                                                        DropCmode = Doc->docParagraphStyles[absa].Drop;
175 Franz 855
                                                                                else
856
                                                                                        DropCmode = false;
153 Franz 857
                                                                                if (DropCmode)
1065 cbradney 858
                                                                                        DropLines = Doc->docParagraphStyles[absa].DropLin;
116 Franz 859
                                                                                break;
971 fschmid 860
                                                                        }
116 Franz 861
                                                                        else
971 fschmid 862
                                                                        {
1065 cbradney 863
                                                                                CurX += Doc->docParagraphStyles[absa].Indent;
116 Franz 864
                                                                                break;
3 paul 865
                                                                        }
971 fschmid 866
                                                                }
116 Franz 867
                                                                nb = nb->BackBox;
3 paul 868
                                                        }
971 fschmid 869
                                                }
3 paul 870
                                                else
971 fschmid 871
                                                {
153 Franz 872
                                                        if (chx != QChar(13))
1065 cbradney 873
                                                                DropCmode = Doc->docParagraphStyles[absa].Drop;
175 Franz 874
                                                        else
875
                                                                DropCmode = false;
1065 cbradney 876
                                                        CurX += Doc->docParagraphStyles[absa].First;
877
                                                        CurX += Doc->docParagraphStyles[absa].Indent;
878
                                                        CurY += Doc->docParagraphStyles[absa].gapBefore;
153 Franz 879
                                                        if (DropCmode)
1065 cbradney 880
                                                                DropLines = Doc->docParagraphStyles[absa].DropLin;
3 paul 881
                                                }
971 fschmid 882
                                        }
1065 cbradney 883
                                        if (((Doc->docParagraphStyles[absa].textAlignment == 3) || (Doc->docParagraphStyles[absa].textAlignment == 4)) && (LiList.count() == 0) && (hl->ch == " "))
316 Franz 884
                                        {
317 Franz 885
                                                hl->cstyle |= 256;
316 Franz 886
                                                continue;
887
                                        }
888
                                        else
889
                                                hl->cstyle &= 255;
68 Franz 890
                                        if (LiList.count() == 0)
971 fschmid 891
                                        {
1065 cbradney 892
                                                if ((a > 0) && (itemText.at(a-1)->ch == QChar(13)))
3 paul 893
                                                {
1065 cbradney 894
                                                        CurX += Doc->docParagraphStyles[absa].First;
895
                                                        CurX += Doc->docParagraphStyles[absa].Indent;
896
                                                        CurY += Doc->docParagraphStyles[absa].gapBefore;
153 Franz 897
                                                        if (chx != QChar(13))
1065 cbradney 898
                                                                DropCmode = Doc->docParagraphStyles[absa].Drop;
175 Franz 899
                                                        else
900
                                                                DropCmode = false;
153 Franz 901
                                                        if (DropCmode)
971 fschmid 902
                                                        {
1065 cbradney 903
                                                                DropLines = Doc->docParagraphStyles[absa].DropLin;
904
                                                                if (Doc->docParagraphStyles[hl->cab].BaseAdj)
823 fschmid 905
                                                                        CurY += Doc->typographicSetttings.valueBaseGrid * (DropLines-1);
241 Franz 906
                                                                else
1065 cbradney 907
                                                                        CurY += Doc->docParagraphStyles[absa].LineSpa * (DropLines-1);
3 paul 908
                                                        }
68 Franz 909
                                                }
971 fschmid 910
                                        }
153 Franz 911
                                        if (DropCmode)
971 fschmid 912
                                        {
1065 cbradney 913
                                                if (Doc->docParagraphStyles[hl->cab].BaseAdj)
310 Franz 914
                                                {
823 fschmid 915
                                                        chsd = qRound(10 * ((Doc->typographicSetttings.valueBaseGrid * DropLines) / ((*Doc->AllFonts)[hl->cfont]->numAscent+(*Doc->AllFonts)[hl->cfont]->numDescender)));
916
                                                        chs = qRound(10 * ((Doc->typographicSetttings.valueBaseGrid * DropLines) / (*Doc->AllFonts)[hl->cfont]->numAscent));
310 Franz 917
                                                }
241 Franz 918
                                                else
310 Franz 919
                                                {
1065 cbradney 920
                                                        chsd = qRound(10 * ((Doc->docParagraphStyles[absa].LineSpa * DropLines) / ((*Doc->AllFonts)[hl->cfont]->numAscent+(*Doc->AllFonts)[hl->cfont]->numDescender)));
921
                                                        chs = qRound(10 * ((Doc->docParagraphStyles[absa].LineSpa * DropLines) / (*Doc->AllFonts)[hl->cfont]->numAscent));
153 Franz 922
                                                }
310 Franz 923
                                                hl->csize = chsd;
971 fschmid 924
                                        }
153 Franz 925
                                        else
926
                                                chs = hl->csize;
157 Franz 927
                                        oldCurY = SetZeichAttr(hl, &chs, &chx);
68 Franz 928
                                        if (chx == QChar(29))
929
                                                chx2 = " ";
930
                                        else
931
                                                chx2 = chx;
114 Franz 932
                                        if (a < MaxText-1)
971 fschmid 933
                                        {
1065 cbradney 934
                                                if (itemText.at(a+1)->ch == QChar(29))
68 Franz 935
                                                        chx3 = " ";
3 paul 936
                                                else
1065 cbradney 937
                                                        chx3 = itemText.at(a+1)->ch;
68 Franz 938
                                                wide = Cwidth(Doc, hl->cfont, chx2, chs, chx3);
971 fschmid 939
                                        }
68 Franz 940
                                        else
941
                                                wide = Cwidth(Doc, hl->cfont, chx2, chs);
220 Franz 942
                                        if (DropCmode)
310 Franz 943
                                        {
944
                                                wide = RealCWidth(Doc, hl->cfont, chx2, chsd);
945
                                                desc2 = 0;
946
                                                desc = 0;
947
                                                asce = qRound((*Doc->AllFonts)[hl->cfont]->numAscent * (chs / 10.0));
948
                                        }
949
                                        else
950
                                        {
951
                                                desc2 = -(*Doc->AllFonts)[hl->cfont]->numDescender * (chs / 10.0);
952
                                                desc = qRound(-(*Doc->AllFonts)[hl->cfont]->numDescender * (chs / 10.0));
953
                                                asce = qRound((*Doc->AllFonts)[hl->cfont]->numAscent * (chs / 10.0));
954
                                        }
253 Franz 955
                                        wide = wide * (hl->cscale / 100.0);
138 Franz 956
                                        fBorder = false;
68 Franz 957
                                        if (LiList.isEmpty())
971 fschmid 958
                                        {
251 Franz 959
                                                startLin = a;
246 Franz 960
                                                double TopOffset = asce;
961
                                                double BotOffset = desc2;
949 fschmid 962
                                                goNoRoom = false;
175 Franz 963
                                                if (StartOfCol)
204 Franz 964
                                                {
965
                                                        CurY = asce+TExtra+lineCorr+1;
1095 fschmid 966
                                                        if ((a > 0) && (itemText.at(a-1)->ch == QChar(13)))
1065 cbradney 967
                                                        {
968
                                                                CurY += Doc->docParagraphStyles[hl->cab].gapBefore;
969
                                                                CurX += Doc->docParagraphStyles[hl->cab].First;
970
                                                                CurX += Doc->docParagraphStyles[hl->cab].Indent;
971
                                                        }
204 Franz 972
                                                }
1065 cbradney 973
                                                if (Doc->docParagraphStyles[hl->cab].BaseAdj)
242 Franz 974
                                                {
634 fschmid 975
                                                        double by = Ypos;
976
                                                        if (OwnPage != -1)
977
                                                                by = Ypos - Doc->Pages.at(OwnPage)->Yoffset;
823 fschmid 978
                                                        int ol1 = qRound((by + CurY - Doc->typographicSetttings.offsetBaseGrid) * 10000.0);
979
                                                        int ol2 = static_cast<int>(ol1 / Doc->typographicSetttings.valueBaseGrid);
980
                                                        CurY = ceil(  ol2 / 10000.0 ) * Doc->typographicSetttings.valueBaseGrid + Doc->typographicSetttings.offsetBaseGrid - by;
242 Franz 981
                                                }
318 Franz 982
                                                if (CurY-TopOffset < 0.0)
983
                                                        CurY = TopOffset+1;
205 Franz 984
                                                pt1 = QPoint(static_cast<int>(ceil(CurX)), static_cast<int>(CurY+BotOffset));
204 Franz 985
                                                pt2 = QPoint(static_cast<int>(ceil(CurX)), static_cast<int>(ceil(CurY-TopOffset)));
209 Franz 986
                                                while ((!cl.contains(pf2.xForm(pt1))) || (!cl.contains(pf2.xForm(pt2))))
971 fschmid 987
                                                {
135 Franz 988
                                                        fBorder = true;
68 Franz 989
                                                        CurX++;
134 Franz 990
                                                        if (CurX+RExtra+lineCorr > ColBound.y())
971 fschmid 991
                                                        {
158 Franz 992
                                                                fBorder = false;
175 Franz 993
                                                                if (StartOfCol)
1065 cbradney 994
                                                                {
995
                                                                        if (((a > 0) && (itemText.at(a-1)->ch == QChar(13))) || (a == 0))
996
                                                                        {
997
                                                                                CurX = ColBound.x();
998
                                                                                CurX += Doc->docParagraphStyles[hl->cab].First;
999
                                                                                CurX += Doc->docParagraphStyles[hl->cab].Indent;
1000
                                                                        }
1001
                                                                        else
1002
                                                                                CurX = ColBound.x();
175 Franz 1003
                                                                        CurY++;
1065 cbradney 1004
                                                                }
175 Franz 1005
                                                                else
242 Franz 1006
                                                                {
1065 cbradney 1007
                                                                        CurY += Doc->docParagraphStyles[hl->cab].LineSpa;
1008
                                                                        CurX = ColBound.x();
1009
                                                                }
1010
                                                                if (Doc->docParagraphStyles[hl->cab].BaseAdj)
1011
                                                                {
635 fschmid 1012
                                                                        double by = Ypos;
1013
                                                                        if (OwnPage != -1)
1014
                                                                                by = Ypos - Doc->Pages.at(OwnPage)->Yoffset;
823 fschmid 1015
                                                                        int ol1 = qRound((by + CurY - Doc->typographicSetttings.offsetBaseGrid) * 10000.0);
1016
                                                                        int ol2 = static_cast<int>(ol1 / Doc->typographicSetttings.valueBaseGrid);
1017
                                                                        CurY = ceil(  ol2 / 10000.0 ) * Doc->typographicSetttings.valueBaseGrid + Doc->typographicSetttings.offsetBaseGrid - by;
242 Franz 1018
                                                                }
110 Franz 1019
                                                                if (CurY+BExtra+lineCorr > Height)
971 fschmid 1020
                                                                {
161 Franz 1021
                                                                        StartOfCol = true;
135 Franz 1022
                                                                        fBorder = false;
134 Franz 1023
                                                                        CurrCol++;
1024
                                                                        if (CurrCol < Cols)
971 fschmid 1025
                                                                        {
140 Franz 1026
                                                                                ColWidth = (Width - (ColGap * (Cols - 1)) - Extra - RExtra - 2*lineCorr) / Cols;
136 Franz 1027
                                                                                ColBound = FPoint((ColWidth + ColGap) * CurrCol + Extra+lineCorr, ColWidth * (CurrCol+1) + ColGap * CurrCol + Extra+lineCorr);
1028
                                                                                CurX = ColBound.x();
1029
                                                                                ColBound = FPoint(ColBound.x(), ColBound.y()+RExtra+lineCorr);
204 Franz 1030
                                                                                CurY = asce+TExtra+lineCorr+1;
1065 cbradney 1031
                                                                                if ((a > 0) && (itemText.at(a-1)->ch == QChar(13)))
971 fschmid 1032
                                                                                {
161 Franz 1033
                                                                                        if (chx != QChar(13))
1065 cbradney 1034
                                                                                                DropCmode = Doc->docParagraphStyles[hl->cab].Drop;
175 Franz 1035
                                                                                        else
1036
                                                                                                DropCmode = false;
1065 cbradney 1037
                                                                                        CurX += Doc->docParagraphStyles[hl->cab].First;
1038
                                                                                        CurX += Doc->docParagraphStyles[hl->cab].Indent;
161 Franz 1039
                                                                                        if (DropCmode)
241 Franz 1040
                                                                                        {
1065 cbradney 1041
                                                                                                if (Doc->docParagraphStyles[hl->cab].BaseAdj)
1042
                                                                                                        desc2 = -(*Doc->AllFonts)[hl->cfont]->numDescender * Doc->typographicSetttings.valueBaseGrid * Doc->docParagraphStyles[hl->cab].DropLin;
241 Franz 1043
                                                                                                else
1065 cbradney 1044
                                                                                                        desc2 = -(*Doc->AllFonts)[hl->cfont]->numDescender * Doc->docParagraphStyles[hl->cab].LineSpa * Doc->docParagraphStyles[hl->cab].DropLin;
241 Franz 1045
                                                                                        }
153 Franz 1046
                                                                                        if (DropCmode)
1065 cbradney 1047
                                                                                                DropLines = Doc->docParagraphStyles[hl->cab].DropLin;
971 fschmid 1048
                                                                                }
134 Franz 1049
                                                                                else
1065 cbradney 1050
                                                                                        CurX += Doc->docParagraphStyles[hl->cab].Indent;
1051
                                                                                if (Doc->docParagraphStyles[hl->cab].BaseAdj)
242 Franz 1052
                                                                                {
635 fschmid 1053
                                                                                        double by = Ypos;
1054
                                                                                        if (OwnPage != -1)
1055
                                                                                                by = Ypos - Doc->Pages.at(OwnPage)->Yoffset;
823 fschmid 1056
                                                                                        int ol1 = qRound((by + CurY - Doc->typographicSetttings.offsetBaseGrid) * 10000.0);
1057
                                                                                        int ol2 = static_cast<int>(ol1 / Doc->typographicSetttings.valueBaseGrid);
1058
                                                                                        CurY = ceil(  ol2 / 10000.0 ) * Doc->typographicSetttings.valueBaseGrid + Doc->typographicSetttings.offsetBaseGrid - by;
134 Franz 1059
                                                                                }
971 fschmid 1060
                                                                        }
134 Franz 1061
                                                                        else
971 fschmid 1062
                                                                        {
134 Franz 1063
                                                                                nrc = a;
1064
                                                                                goto NoRoom;
3 paul 1065
                                                                        }
1066
                                                                }
971 fschmid 1067
                                                        }
205 Franz 1068
                                                        pt1 = QPoint(static_cast<int>(ceil(CurX)), static_cast<int>(CurY+BotOffset));
204 Franz 1069
                                                        pt2 = QPoint(static_cast<int>(ceil(CurX)), static_cast<int>(ceil(CurY-TopOffset)));
971 fschmid 1070
                                                }
161 Franz 1071
                                                if ((fBorder) && (!AbsHasDrop))
1072
                                                        CurX += Extra;
135 Franz 1073
                                                fBorder = false;
971 fschmid 1074
                                        }
209 Franz 1075
                                        StartOfCol = false;
163 Franz 1076
                                        if (RTab)
971 fschmid 1077
                                        {
163 Franz 1078
                                                if (((hl->ch == ".") && (TabCode == 2)) ||
1736 cbradney 1079
                                                                                                ((hl->ch == ",") && (TabCode == 3)) ||
1080
                                                                                                (hl->ch == QChar(9)))
971 fschmid 1081
                                                {
163 Franz 1082
                                                        RTab = false;
1083
                                                        TabCode = 0;
140 Franz 1084
                                                }
971 fschmid 1085
                                        }
139 Franz 1086
                                        if (hl->ch == QChar(9))
537 fschmid 1087
                                        {
140 Franz 1088
                                                wide = 1;
1089
                                                if (RTab)
1090
                                                        RTab = false;
139 Franz 1091
                                                else
537 fschmid 1092
                                                {
280 Franz 1093
                                                        RTabX = CurX+wide;
140 Franz 1094
                                                        if (hl->cab < 5)
1095
                                                                tTabValues = TabValues;
1096
                                                        else
1065 cbradney 1097
                                                                tTabValues = Doc->docParagraphStyles[hl->cab].TabValues;
140 Franz 1098
                                                        if (tTabValues.isEmpty())
537 fschmid 1099
                                                        {
376 Franz 1100
                                                                if ((CurX - ColBound.x()) != 0)
1101
                                                                        CurX = ColBound.x() + ceil((CurX-ColBound.x()) / 36.0) * 36.0;
1102
                                                                else
1103
                                                                        CurX = ColBound.x() + 36.0;
140 Franz 1104
                                                                TabCode = 0;
1105
                                                                RTab = false;
537 fschmid 1106
                                                        }
140 Franz 1107
                                                        else
537 fschmid 1108
                                                        {
140 Franz 1109
                                                                double tCurX = CurX - ColBound.x();
1016 fschmid 1110
                                                                double oCurX = tCurX + wide;
140 Franz 1111
                                                                for (int yg = static_cast<int>(tTabValues.count()-1); yg > 0; yg -= 2)
537 fschmid 1112
                                                                {
1016 fschmid 1113
                                                                        if (oCurX < tTabValues[yg])
139 Franz 1114
                                                                        {
140 Franz 1115
                                                                                tCurX = tTabValues[yg];
1116
                                                                                TabCode = static_cast<int>(tTabValues[yg-1]);
139 Franz 1117
                                                                        }
537 fschmid 1118
                                                                }
140 Franz 1119
                                                                if (TabCode == 0)
1120
                                                                        RTab = false;
1121
                                                                else
1122
                                                                        RTab = true;
1016 fschmid 1123
                                                                if (tCurX == oCurX-wide)
140 Franz 1124
                                                                        CurX = ColBound.x() + ceil((CurX-ColBound.x()) / 36.0) * 36.0;
1125
                                                                else
1126
                                                                        CurX = ColBound.x() + tCurX;
537 fschmid 1127
                                                        }
1128
                                                        CurX -= 1;
140 Franz 1129
                                                        StartRT = LiList.count();
1130
                                                        StartRT2 = a;
139 Franz 1131
                                                }
537 fschmid 1132
                                        }
157 Franz 1133
                                        hl->yp = CurY + oldCurY;
238 Franz 1134
                                        if (LiList.count() == 0)
1135
                                                kernVal = 0;
1136
                                        else
1137
                                                kernVal = hl->cextra;
140 Franz 1138
                                        if (!RTab)
971 fschmid 1139
                                        {
238 Franz 1140
                                                hl->xp = CurX+kernVal;
1141
                                                CurX += wide+kernVal;
971 fschmid 1142
                                        }
140 Franz 1143
                                        else
1144
                                                hl->xp = CurX;
158 Franz 1145
                                        if ((TabCode == 4) && (RTab))
238 Franz 1146
                                                CurX += (wide+kernVal) / 2;
1065 cbradney 1147
                                        if ((hl->cstyle & 128) || (hl->ch == "-"))
1148
                                        {
1149
                                                if ((HyphenCount < Doc->HyCount) || (Doc->HyCount == 0))
1150
                                                {
1151
                                                        pt1 = QPoint(qRound(ceil(CurX+RExtra+Cwidth(Doc, hl->cfont, "-", hl->csize))), qRound(CurY+desc));
1152
                                                        pt2 = QPoint(qRound(ceil(CurX+RExtra+Cwidth(Doc, hl->cfont, "-", hl->csize))), qRound(ceil(CurY-asce)));
1153
                                                }
1154
                                        }
1155
                                        else
1156
                                        {
1157
                                                pt1 = QPoint(qRound(ceil(CurX+RExtra)), qRound(CurY+desc));
1158
                                                pt2 = QPoint(qRound(ceil(CurX+RExtra)), qRound(ceil(CurY-asce)));
1159
                                        }
209 Franz 1160
                                        if ((!cl.contains(pf2.xForm(pt1))) || (!cl.contains(pf2.xForm(pt2))) || (CurX+RExtra+lineCorr > ColBound.y()))
68 Franz 1161
                                                outs = true;
246 Franz 1162
                                        if (CurY > (Height - BExtra - lineCorr))
1163
                                                outs = true;
68 Franz 1164
                                        Zli = new ZZ;
1165
                                        Zli->Zeich = chx;
1166
                                        Zli->Farb = hl->ccolor;
1167
                                        Zli->shade = hl->cshade;
1168
                                        Zli->Farb2 = hl->cstroke;
1169
                                        Zli->shade2 = hl->cshade2;
1170
                                        Zli->xco = hl->xp;
175 Franz 1171
                                        Zli->yco = hl->yp;
68 Franz 1172
                                        Zli->Sele = hl->cselect;
310 Franz 1173
                                        if (DropCmode)
1174
                                                Zli->Siz = chsd;
1175
                                        else
1176
                                                Zli->Siz = chs;
68 Franz 1177
                                        Zli->Style = hl->cstyle;
1178
                                        Zli->ZFo = hl->cfont;
1179
                                        Zli->wide = wide;
238 Franz 1180
                                        Zli->kern = kernVal;
68 Franz 1181
                                        Zli->scale = hl->cscale;
139 Franz 1182
                                        if (((hl->ch == " ") || (hl->ch == QChar(9))) && (!outs))
244 Franz 1183
                                        {
1184
                                                if (a > 0)
68 Franz 1185
                                                {
1065 cbradney 1186
                                                        if (itemText.at(a-1)->ch !=  " ")
244 Franz 1187
                                                        {
1736 cbradney 1188
                                                                LastXp = hl->xp;
1189
                                                                LastSP = BuPos;
244 Franz 1190
                                                        }
68 Franz 1191
                                                }
244 Franz 1192
                                                else
1193
                                                {
1194
                                                        LastXp = hl->xp;
1195
                                                        LastSP = BuPos;
1196
                                                }
1197
                                        }
249 Franz 1198
                                        if (((hl->cstyle & 128) || (hl->ch == "-")) && (!outs))
971 fschmid 1199
                                        {
1200
                                                if ((HyphenCount < Doc->HyCount) || (Doc->HyCount == 0))
68 Franz 1201
                                                {
249 Franz 1202
                                                        if (hl->ch == "-")
1203
                                                                LastXp = CurX;
1204
                                                        else
1205
                                                                LastXp = CurX + Cwidth(Doc, hl->cfont, "-", hl->csize);
1206
                                                        LastSP = BuPos;
68 Franz 1207
                                                }
971 fschmid 1208
                                        }
68 Franz 1209
                                        LiList.append(Zli);
140 Franz 1210
                                        if (RTab)
971 fschmid 1211
                                        {
140 Franz 1212
                                                uint rtx2 = 0;
147 Franz 1213
                                                double cen = 1;
1214
                                                if (TabCode == 4)
1215
                                                        cen = 2;
140 Franz 1216
                                                for (uint rtx = StartRT; rtx < LiList.count(); ++rtx)
971 fschmid 1217
                                                {
1736 cbradney 1218
                                                        LiList.at(rtx)->xco = QMAX(LiList.at(rtx)->xco-(wide+kernVal) / cen, 0.0);
1219
                                                        itemText.at(StartRT2+rtx2)->xp = QMAX(itemText.at(StartRT2+rtx2)->xp-(wide+kernVal) / cen, 0.0);
1220
                                                        if (itemText.at(StartRT2+rtx2)->xp < RTabX)
1221
                                                        {
1222
                                                                RTab = false;
1223
                                                                TabCode = 0;
1224
                                                        }
1225
                                                        rtx2++;
140 Franz 1226
                                                }
971 fschmid 1227
                                        }
68 Franz 1228
                                        BuPos++;
153 Franz 1229
                                        if (DropCmode)
971 fschmid 1230
                                        {
153 Franz 1231
                                                DropCmode = false;
154 Franz 1232
                                                AbsHasDrop = true;
153 Franz 1233
                                                maxDY = CurY;
161 Franz 1234
                                                maxDX = CurX;
182 Franz 1235
                                                QPointArray tcli;
1236
                                                tcli.resize(4);
1065 cbradney 1237
                                                if (Doc->docParagraphStyles[hl->cab].BaseAdj)
241 Franz 1238
                                                {
823 fschmid 1239
                                                        CurY -= Doc->typographicSetttings.valueBaseGrid * (DropLines-1);
635 fschmid 1240
                                                        double by = Ypos;
1241
                                                        if (OwnPage != -1)
1242
                                                                by = Ypos - Doc->Pages.at(OwnPage)->Yoffset;
823 fschmid 1243
                                                        int ol1 = qRound((by + CurY - Doc->typographicSetttings.offsetBaseGrid) * 10000.0);
1244
                                                        int ol2 = static_cast<int>(ol1 / Doc->typographicSetttings.valueBaseGrid);
1245
                                                        CurY = ceil(  ol2 / 10000.0 ) * Doc->typographicSetttings.valueBaseGrid + Doc->typographicSetttings.offsetBaseGrid - by;
1246
                                                        tcli.setPoint(0, QPoint(qRound(hl->xp), qRound(maxDY-DropLines*Doc->typographicSetttings.valueBaseGrid)));
1247
                                                        tcli.setPoint(1, QPoint(qRound(hl->xp+wide), qRound(maxDY-DropLines*Doc->typographicSetttings.valueBaseGrid)));
241 Franz 1248
                                                }
1249
                                                else
1250
                                                {
1065 cbradney 1251
                                                        CurY -= Doc->docParagraphStyles[absa].LineSpa * (DropLines-1);
1252
                                                        tcli.setPoint(0, QPoint(qRound(hl->xp), qRound(maxDY-DropLines*Doc->docParagraphStyles[absa].LineSpa)));
1253
                                                        tcli.setPoint(1, QPoint(qRound(hl->xp+wide), qRound(maxDY-DropLines*Doc->docParagraphStyles[absa].LineSpa)));
241 Franz 1254
                                                }
182 Franz 1255
                                                tcli.setPoint(2, QPoint(qRound(hl->xp+wide), qRound(maxDY)));
1256
                                                tcli.setPoint(3, QPoint(qRound(hl->xp), qRound(maxDY)));
209 Franz 1257
                                                cm = QRegion(pf2.xForm(tcli));
153 Franz 1258
                                                cl = cl.subtract(cm);
971 fschmid 1259
                                        }
249 Franz 1260
                                        if ((hl->ch == QChar(13)) || (hl->ch == QChar(28)) || (outs))
971 fschmid 1261
                                        {
140 Franz 1262
                                                RTab = false;
1263
                                                TabCode = 0;
68 Franz 1264
                                                if (outs)
971 fschmid 1265
                                                {
1266
                                                        if (LastSP != 0)            // Hier koenen auch andere Trennungen eingebaut werden
3 paul 1267
                                                        {
68 Franz 1268
                                                                a -= BuPos - LastSP;
1269
                                                                a++;
1065 cbradney 1270
                                                                if (itemText.at(a)->cstyle & 128)
251 Franz 1271
                                                                {
249 Franz 1272
                                                                        HyphenCount++;
1065 cbradney 1273
                                                                        itemText.at(a)->cstyle |= 512;
68 Franz 1274
                                                                        Zli = new ZZ;
1275
                                                                        Zli->Zeich = "-";
1065 cbradney 1276
                                                                        Zli->Farb = itemText.at(a)->ccolor;
1277
                                                                        Zli->Farb2 = itemText.at(a)->cstroke;
1278
                                                                        Zli->shade = itemText.at(a)->cshade;
1279
                                                                        Zli->shade2 = itemText.at(a)->cshade2;
1280
                                                                        Zli->xco = LastXp - Cwidth(Doc, itemText.at(a)->cfont, "-", itemText.at(a)->csize);
1281
                                                                        Zli->yco = itemText.at(a)->yp;
1282
                                                                        Zli->Sele = itemText.at(a)->cselect;
1283
                                                                        Zli->Siz = itemText.at(a)->csize;
1284
                                                                        Zli->Style = itemText.at(a)->cstyle;
1285
                                                                        Zli->ZFo = itemText.at(a)->cfont;
1286
                                                                        Zli->wide = Cwidth(Doc, itemText.at(a)->cfont, "-", itemText.at(a)->csize);
1287
                                                                        Zli->kern = itemText.at(a)->cextra;
1288
                                                                        Zli->scale = itemText.at(a)->cscale;
68 Franz 1289
                                                                        LiList.insert(LastSP+1, Zli);
1290
                                                                        LastSP += 1;
251 Franz 1291
                                                                }
249 Franz 1292
                                                                else
251 Franz 1293
                                                                {
249 Franz 1294
                                                                        HyphenCount = 0;
251 Franz 1295
                                                                        hl->cstyle &= 511;
1296
                                                                }
68 Franz 1297
                                                                BuPos = LastSP+1;
1065 cbradney 1298
                                                                if (Doc->docParagraphStyles[absa].textAlignment != 0)
971 fschmid 1299
                                                                {
68 Franz 1300
                                                                        EndX = LastXp;
3 paul 1301
                                                                        do
971 fschmid 1302
                                                                        {
227 Franz 1303
                                                                                pt1 = QPoint(qRound(EndX+RExtra), static_cast<int>(CurY+desc));
1304
                                                                                pt2 = QPoint(qRound(EndX+RExtra), static_cast<int>(ceil(CurY-asce)));
3 paul 1305
                                                                                EndX++;
971 fschmid 1306
                                                                        }
209 Franz 1307
                                                                        while ((cl.contains(pf2.xForm(pt1))) && (cl.contains(pf2.xForm(pt2))) && (EndX+RExtra+lineCorr < ColBound.y()));
1065 cbradney 1308
                                                                        if (Doc->docParagraphStyles[absa].textAlignment == 2)
68 Franz 1309
                                                                                OFs = EndX - LastXp;
1065 cbradney 1310
                                                                        if (Doc->docParagraphStyles[absa].textAlignment == 1)
68 Franz 1311
                                                                                OFs = (EndX - LastXp) / 2;
1065 cbradney 1312
                                                                        if ((Doc->docParagraphStyles[absa].textAlignment == 3) || (Doc->docParagraphStyles[absa].textAlignment == 4))
971 fschmid 1313
                                                                        {
3 paul 1314
                                                                                aSpa = 0;
68 Franz 1315
                                                                                for (uint sof = 0; sof<BuPos-1; ++sof)
971 fschmid 1316
                                                                                {
161 Franz 1317
                                                                                        if ((LiList.at(sof)->Zeich == QChar(32)) || (LiList.at(sof)->Zeich == QChar(29)))
3 paul 1318
                                                                                                aSpa++;
971 fschmid 1319
                                                                                }
68 Franz 1320
                                                                                if (aSpa > 1)
1321
                                                                                        OFs2 = (EndX - LastXp) / aSpa;
1322
                                                                                else
971 fschmid 1323
                                                                                {
68 Franz 1324
                                                                                        if (aSpa == 0)
1325
                                                                                                OFs2 = 0;
1326
                                                                                        else
1327
                                                                                                OFs2 = (EndX - LastXp);
971 fschmid 1328
                                                                                }
3 paul 1329
                                                                                OFs = 0;
1330
                                                                                for (uint yof = 0; yof < LiList.count(); ++yof)
971 fschmid 1331
                                                                                {
3 paul 1332
                                                                                        LiList.at(yof)->xco += OFs;
161 Franz 1333
                                                                                        if ((LiList.at(yof)->Zeich == QChar(32)) || (LiList.at(yof)->Zeich == QChar(29)))
68 Franz 1334
                                                                                                OFs += OFs2;
3 paul 1335
                                                                                }
971 fschmid 1336
                                                                        }
3 paul 1337
                                                                        else
971 fschmid 1338
                                                                        {
1339
                                                                                for (uint xof = 0; xof<LiList.count(); ++xof)
3 paul 1340
                                                                                {
1341
                                                                                        LiList.at(xof)->xco += OFs;
1342
                                                                                }
68 Franz 1343
                                                                        }
3 paul 1344
                                                                }
971 fschmid 1345
                                                        }
3 paul 1346
                                                        else
971 fschmid 1347
                                                        {
68 Franz 1348
                                                                a--;
1349
                                                                BuPos--;
1350
                                                        }
971 fschmid 1351
                                                }
68 Franz 1352
                                                else
971 fschmid 1353
                                                {
1065 cbradney 1354
                                                        if (Doc->docParagraphStyles[absa].textAlignment != 0)
68 Franz 1355
                                                        {
1356
                                                                EndX = CurX;
1357
                                                                do
971 fschmid 1358
                                                                {
227 Franz 1359
                                                                        pt1 = QPoint(qRound(EndX+RExtra), static_cast<int>(CurY+desc));
1360
                                                                        pt2 = QPoint(qRound(EndX+RExtra), static_cast<int>(ceil(CurY-asce)));
68 Franz 1361
                                                                        EndX++;
971 fschmid 1362
                                                                }
209 Franz 1363
                                                                while ((cl.contains(pf2.xForm(pt1))) && (cl.contains(pf2.xForm(pt2))) && (EndX+RExtra+lineCorr < ColBound.y()));
1065 cbradney 1364
                                                                if (Doc->docParagraphStyles[absa].textAlignment == 2)
277 Franz 1365
                                                                        OFs = EndX - CurX;
1065 cbradney 1366
                                                                if (Doc->docParagraphStyles[absa].textAlignment == 1)
277 Franz 1367
                                                                        OFs = (EndX - CurX) / 2;
1065 cbradney 1368
                                                                if (Doc->docParagraphStyles[absa].textAlignment == 3)
68 Franz 1369
                                                                        OFs = 0;
1065 cbradney 1370
                                                                if (Doc->docParagraphStyles[absa].textAlignment == 4)
971 fschmid 1371
                                                                {
68 Franz 1372
                                                                        aSpa = 0;
1373
                                                                        for (uint sof = 0; sof<LiList.count(); ++sof)
971 fschmid 1374
                                                                        {
161 Franz 1375
                                                                                if ((LiList.at(sof)->Zeich == QChar(32)) || (LiList.at(sof)->Zeich == QChar(29)))
68 Franz 1376
                                                                                        aSpa++;
971 fschmid 1377
                                                                        }
68 Franz 1378
                                                                        if (aSpa != 0)
277 Franz 1379
                                                                                OFs2 = (EndX - CurX) / aSpa;
68 Franz 1380
                                                                        else
1381
                                                                                OFs2 = 0;
1382
                                                                        OFs = 0;
1383
                                                                        for (uint yof = 0; yof < LiList.count(); ++yof)
971 fschmid 1384
                                                                        {
68 Franz 1385
                                                                                LiList.at(yof)->xco += OFs;
161 Franz 1386
                                                                                if ((LiList.at(yof)->Zeich == QChar(32)) || (LiList.at(yof)->Zeich == QChar(29)))
68 Franz 1387
                                                                                        OFs += OFs2;
3 paul 1388
                                                                        }
971 fschmid 1389
                                                                }
3 paul 1390
                                                                else
971 fschmid 1391
                                                                {
1392
                                                                        for (uint xof = 0; xof<LiList.count(); ++xof)
3 paul 1393
                                                                        {
1394
                                                                                LiList.at(xof)->xco += OFs;
1395
                                                                        }
1396
                                                                }
1397
                                                        }
971 fschmid 1398
                                                }
68 Franz 1399
                                                uint BuPos3 = BuPos;
249 Franz 1400
                                                if ((outs) || (hl->ch == QChar(13)) || (hl->ch == QChar(28)))
971 fschmid 1401
                                                {
1402
                                                        if ((outs) && (CurX+RExtra+lineCorr < ColBound.y()))
3 paul 1403
                                                        {
971 fschmid 1404
                                                                if (((hl->ch == QChar(13)) || (hl->ch == QChar(28))) && (AbsHasDrop))
138 Franz 1405
                                                                {
154 Franz 1406
                                                                        AbsHasDrop = false;
153 Franz 1407
                                                                        if (CurY < maxDY)
1408
                                                                                CurY = maxDY;
971 fschmid 1409
                                                                }
138 Franz 1410
                                                                bool fromOut = true;
163 Franz 1411
                                                                double BotOffset = desc+BExtra+lineCorr;
227 Franz 1412
                                                                pt1 = QPoint(qRound(CurX+RExtra), static_cast<int>(CurY+BotOffset));
1413
                                                                pt2 = QPoint(qRound(CurX+RExtra), static_cast<int>(ceil(CurY-asce)));
209 Franz 1414
                                                                while ((!cl.contains(pf2.xForm(pt1))) || (!cl.contains(pf2.xForm(pt2))))
971 fschmid 1415
                                                                {
138 Franz 1416
                                                                        CurX++;
1417
                                                                        if (CurX+RExtra+lineCorr > ColBound.y())
971 fschmid 1418
                                                                        {
138 Franz 1419
                                                                                fromOut = false;
1065 cbradney 1420
                                                                                CurY += Doc->docParagraphStyles[hl->cab].LineSpa;
949 fschmid 1421
                                                                                if ((CurY+desc+BExtra+lineCorr > Height) && (CurrCol+1 == Cols))
205 Franz 1422
                                                                                {
949 fschmid 1423
                                                                                        goNoRoom = true;
1424
                                                                                        break;
205 Franz 1425
                                                                                }
161 Franz 1426
                                                                                if (AbsHasDrop)
971 fschmid 1427
                                                                                {
1428
                                                                                        if (CurY > maxDY)
161 Franz 1429
                                                                                        {
1430
                                                                                                AbsHasDrop = false;
1431
                                                                                                CurX = ColBound.x();
971 fschmid 1432
                                                                                        }
161 Franz 1433
                                                                                        else
1434
                                                                                                CurX = maxDX;
971 fschmid 1435
                                                                                }
161 Franz 1436
                                                                                else
1437
                                                                                        CurX = ColBound.x();
138 Franz 1438
                                                                                if (hl->ch != QChar(13))
1065 cbradney 1439
                                                                                        CurX += Doc->docParagraphStyles[hl->cab].Indent;
138 Franz 1440
                                                                                else
971 fschmid 1441
                                                                                {
1065 cbradney 1442
                                                                                        CurY += Doc->docParagraphStyles[hl->cab].gapAfter;
138 Franz 1443
                                                                                        if (BuPos3 > 0)
1444
                                                                                                BuPos3 -= 1;
971 fschmid 1445
                                                                                }
138 Franz 1446
                                                                                break;
971 fschmid 1447
                                                                        }
227 Franz 1448
                                                                        pt1 = QPoint(qRound(CurX+RExtra), static_cast<int>(CurY+BotOffset));
1449
                                                                        pt2 = QPoint(qRound(CurX+RExtra), static_cast<int>(ceil(CurY-asce)));
971 fschmid 1450
                                                                }
140 Franz 1451
                                                                if (fromOut)
138 Franz 1452
                                                                        CurX--;
971 fschmid 1453
                                                        }
138 Franz 1454
                                                        else
971 fschmid 1455
                                                        {
1456
                                                                if (((hl->ch == QChar(13)) || (hl->ch == QChar(28))) && (AbsHasDrop))
138 Franz 1457
                                                                {
154 Franz 1458
                                                                        AbsHasDrop = false;
153 Franz 1459
                                                                        if (CurY < maxDY)
1460
                                                                                CurY = maxDY;
971 fschmid 1461
                                                                }
1065 cbradney 1462
                                                                CurY += Doc->docParagraphStyles[hl->cab].LineSpa;
161 Franz 1463
                                                                if (AbsHasDrop)
971 fschmid 1464
                                                                {
1465
                                                                        if (CurY > maxDY)
161 Franz 1466
                                                                        {
1467
                                                                                AbsHasDrop = false;
1468
                                                                                CurX = ColBound.x();
971 fschmid 1469
                                                                        }
161 Franz 1470
                                                                        else
1471
                                                                                CurX = maxDX;
971 fschmid 1472
                                                                }
161 Franz 1473
                                                                else
1474
                                                                        CurX = ColBound.x();
138 Franz 1475
                                                                if (hl->ch != QChar(13))
1065 cbradney 1476
                                                                        CurX += Doc->docParagraphStyles[hl->cab].Indent;
138 Franz 1477
                                                                else
971 fschmid 1478
                                                                {
1065 cbradney 1479
                                                                        CurY += Doc->docParagraphStyles[hl->cab].gapAfter;
138 Franz 1480
                                                                        if (BuPos3 > 0)
1481
                                                                                BuPos3 -= 1;
1482
                                                                }
68 Franz 1483
                                                        }
971 fschmid 1484
                                                }
68 Franz 1485
                                                hl->xp = CurX;
1486
                                                hl->yp = CurY;
1487
                                                LiList.at(LiList.count()-1)->xco = hl->xp;
1488
                                                LiList.at(LiList.count()-1)->yco = hl->yp;
1489
                                                for (uint zc = 0; zc<BuPos3; ++zc)
456 fschmid 1490
                                                {
971 fschmid 1491
                                                        double wide2 = 0;
3 paul 1492
                                                        Zli2 = LiList.at(zc);
971 fschmid 1493
                                                        double xcoZli = Zli2->xco;
1065 cbradney 1494
                                                        itemText.at(startLin+zc)->xp = Zli2->xco;
1495
                                                        itemText.at(startLin+zc)->yp = Zli2->yco;
68 Franz 1496
                                                        if (Zli2->Farb != "None")
456 fschmid 1497
                                                        {
1741 cbradney 1498
                                                                QColor tmp;
68 Franz 1499
                                                                SetFarbe(&tmp, Zli2->Farb, Zli2->shade);
1500
                                                                p->setBrush(tmp);
456 fschmid 1501
                                                        }
1093 fschmid 1502
                                                        desc = static_cast<int>((*Doc->AllFonts)[Zli2->ZFo]->numDescender * (-Zli2->Siz / 10.0));
1503
                                                        asce = static_cast<int>((*Doc->AllFonts)[Zli2->ZFo]->numAscent * (Zli2->Siz / 10.0));
1065 cbradney 1504
                                                        if ((((Zli2->Sele) && (Select)) || (((NextBox != 0) || (BackBox != 0)) && (Zli2->Sele))) && (Doc->appMode == EditMode))
456 fschmid 1505
                                                        {
3 paul 1506
                                                                wide = Zli2->wide;
68 Franz 1507
                                                                p->setFillMode(1);
163 Franz 1508
                                                                p->setBrush(darkBlue);
266 Franz 1509
                                                                p->setLineWidth(0);
971 fschmid 1510
                                                                if ((zc > 0) && (Zli2->Zeich == QChar(9)))
1511
                                                                {
1512
                                                                        wide2 = LiList.at(zc-1)->wide;
1513
                                                                        xcoZli = LiList.at(zc-1)->xco+wide2;
1514
                                                                        wide = Zli2->xco - xcoZli + Zli2->wide;
1515
                                                                }
3 paul 1516
                                                                if (!Doc->RePos)
971 fschmid 1517
                                                                        p->drawRect(xcoZli, Zli2->yco-asce, wide+1, asce+desc);
68 Franz 1518
                                                                p->setBrush(white);
456 fschmid 1519
                                                        }
266 Franz 1520
                                                        if (Zli2->Farb2 != "None")
456 fschmid 1521
                                                        {
1741 cbradney 1522
                                                                QColor tmp;
266 Franz 1523
                                                                SetFarbe(&tmp, Zli2->Farb2, Zli2->shade2);
1524
                                                                p->setPen(tmp, 1, SolidLine, FlatCap, MiterJoin);
456 fschmid 1525
                                                        }
68 Franz 1526
                                                        if (!Doc->RePos)
456 fschmid 1527
                                                        {
1093 fschmid 1528
                                                                if (e2.intersects(pf2.xForm(QRect(qRound(Zli2->xco),qRound(Zli2->yco-asce), qRound(Zli2->wide+1), qRound(asce+desc)))))
68 Franz 1529
                                                                        DrawZeichenS(p, Zli2);
3 paul 1530
                                                        }
456 fschmid 1531
                                                }
3 paul 1532
                                                LiList.clear();
1533
                                                BuPos = 0;
1534
                                                LastSP = 0;
68 Franz 1535
                                                LastXp = 0;
3 paul 1536
                                                outs = false;
949 fschmid 1537
                                                if (goNoRoom)
1538
                                                {
1539
                                                        goNoRoom = false;
1540
                                                        nrc = a+1;
1541
                                                        goto NoRoom;
68 Franz 1542
                                                }
1543
                                        }
971 fschmid 1544
                                }
1065 cbradney 1545
                                if (Doc->docParagraphStyles[absa].textAlignment != 0)
971 fschmid 1546
                                {
68 Franz 1547
                                        EndX = CurX;
1548
                                        do
971 fschmid 1549
                                        {
277 Franz 1550
                                                pt1 = QPoint(qRound(EndX+RExtra), static_cast<int>(CurY+desc));
1551
                                                pt2 = QPoint(qRound(EndX+RExtra), static_cast<int>(ceil(CurY-asce)));
68 Franz 1552
                                                EndX++;
971 fschmid 1553
                                        }
209 Franz 1554
                                        while ((cl.contains(pf2.xForm(pt1))) && (cl.contains(pf2.xForm(pt2))) && (EndX+RExtra+lineCorr < ColBound.y()));
1065 cbradney 1555
                                        if (Doc->docParagraphStyles[absa].textAlignment == 2)
277 Franz 1556
                                                OFs = EndX - CurX;
1065 cbradney 1557
                                        if (Doc->docParagraphStyles[absa].textAlignment == 1)
277 Franz 1558
                                                OFs = (EndX - CurX) / 2;
1065 cbradney 1559
                                        if (Doc->docParagraphStyles[absa].textAlignment == 3)
68 Franz 1560
                                                OFs = 0;
1065 cbradney 1561
                                        if (Doc->docParagraphStyles[absa].textAlignment == 4)
971 fschmid 1562
                                        {
68 Franz 1563
                                                aSpa = 0;
1564
                                                for (uint sof = 0; sof<LiList.count(); ++sof)
971 fschmid 1565
                                                {
161 Franz 1566
                                                        if ((LiList.at(sof)->Zeich == QChar(32)) || (LiList.at(sof)->Zeich == QChar(29)))
68 Franz 1567
                                                                aSpa++;
971 fschmid 1568
                                                }
68 Franz 1569
                                                if (aSpa != 0)
277 Franz 1570
                                                        OFs2 = (EndX - CurX) / aSpa;
68 Franz 1571
                                                else
1572
                                                        OFs2 = 0;
1573
                                                OFs = 0;
1574
                                                for (uint yof = 0; yof < LiList.count(); ++yof)
971 fschmid 1575
                                                {
68 Franz 1576
                                                        LiList.at(yof)->xco += OFs;
161 Franz 1577
                                                        if ((LiList.at(yof)->Zeich == QChar(32)) || (LiList.at(yof)->Zeich == QChar(29)))
68 Franz 1578
                                                                OFs += OFs2;
3 paul 1579
                                                }
971 fschmid 1580
                                        }
3 paul 1581
                                        else
971 fschmid 1582
                                        {
1583
                                                for (uint xof = 0; xof<LiList.count(); ++xof)
3 paul 1584
                                                {
68 Franz 1585
                                                        LiList.at(xof)->xco += OFs;
3 paul 1586
                                                }
68 Franz 1587
                                        }
971 fschmid 1588
                                }
68 Franz 1589
                                for (uint zc = 0; zc<LiList.count(); ++zc)
971 fschmid 1590
                                {
1591
                                        double wide2 = 0;
68 Franz 1592
                                        Zli2 = LiList.at(zc);
971 fschmid 1593
                                        double xcoZli = Zli2->xco;
1065 cbradney 1594
                                        itemText.at(startLin+zc)->xp = Zli2->xco;
1595
                                        itemText.at(startLin+zc)->yp = Zli2->yco;
68 Franz 1596
                                        if (Zli2->Farb != "None")
971 fschmid 1597
                                        {
1741 cbradney 1598
                                                QColor tmp;
68 Franz 1599
                                                SetFarbe(&tmp, Zli2->Farb, Zli2->shade);
1600
                                                p->setBrush(tmp);
971 fschmid 1601
                                        }
1093 fschmid 1602
                                        desc = qRound((*Doc->AllFonts)[Zli2->ZFo]->numDescender * (-Zli2->Siz / 10.0));
1603
                                        asce = qRound((*Doc->AllFonts)[Zli2->ZFo]->numAscent * (Zli2->Siz / 10.0));
1065 cbradney 1604
                                        if ((((Zli2->Sele) && (Select)) || (((NextBox != 0) || (BackBox != 0)) && (Zli2->Sele))) && (Doc->appMode == EditMode))
971 fschmid 1605
                                        {
68 Franz 1606
                                                wide = Zli2->wide;
1607
                                                p->setFillMode(1);
209 Franz 1608
                                                p->setBrush(darkBlue);
266 Franz 1609
                                                p->setLineWidth(0);
971 fschmid 1610
                                                if ((zc > 0) && (Zli2->Zeich == QChar(9)))
1611
                                                {
1612
                                                        wide2 = LiList.at(zc-1)->wide;
1613
                                                        xcoZli = LiList.at(zc-1)->xco+wide2;
1614
                                                        wide = Zli2->xco - xcoZli + Zli2->wide;
1615
                                                }
68 Franz 1616
                                                if (!Doc->RePos)
971 fschmid 1617
                                                        p->drawRect(xcoZli, Zli2->yco-asce, wide+1, asce+desc);
68 Franz 1618
                                                p->setBrush(white);
971 fschmid 1619
                                        }
266 Franz 1620
                                        if (Zli2->Farb2 != "None")
971 fschmid 1621
                                        {
1741 cbradney 1622
                                                QColor tmp;
266 Franz 1623
                                                SetFarbe(&tmp, Zli2->Farb2, Zli2->shade2);
1624
                                                p->setPen(tmp, 1, SolidLine, FlatCap, MiterJoin);
971 fschmid 1625
                                        }
3 paul 1626
                                        if (!Doc->RePos)
971 fschmid 1627
                                        {
1093 fschmid 1628
                                                if (e2.intersects(pf2.xForm(QRect(qRound(Zli2->xco),qRound(Zli2->yco-asce), qRound(Zli2->wide+1), qRound(asce+desc)))))
68 Franz 1629
                                                        DrawZeichenS(p, Zli2);
3 paul 1630
                                        }
971 fschmid 1631
                                }
68 Franz 1632
                                LiList.clear();
1633
                                BuPos = 0;
1634
                                LastSP = 0;
1635
                                outs = false;