Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 


Quelle  porrst.hxx   Sprache: C

 
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
 * This file is part of the LibreOffice project.
 *
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
 *
 * This file incorporates work covered by the following license notice:
 *
 *   Licensed to the Apache Software Foundation (ASF) under one or more
 *   contributor license agreements. See the NOTICE file distributed
 *   with this work for additional information regarding copyright
 *   ownership. The ASF licenses this file to you under the Apache
 *   License, Version 2.0 (the "License"); you may not use this file
 *   except in compliance with the License. You may obtain a copy of
 *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
 */

#pragma once

#include <tools/gen.hxx>

#include <TextFrameIndex.hxx>
#include <txttypes.hxx>
#include <txtfrm.hxx>
#include <svx/ctredlin.hxx>
#include <scriptinfo.hxx>
#include <names.hxx>

#include "porlin.hxx"
#include "portxt.hxx"
#include "possiz.hxx"

class SwTextPaintInfo;
class SwFont;

#define LINE_BREAK_WIDTH        150
#define SPECIAL_FONT_HEIGHT     200

class SwTmpEndPortion : public SwLinePortion
{
    const FontLineStyle m_eUnderline;
    const FontStrikeout m_eStrikeout;
    Color m_aColor;

public:
    explicit SwTmpEndPortion( const SwLinePortion &rPortion,
                    const FontLineStyle eUnderline,
                    const FontStrikeout eStrikeout,
                    const Color& rColor );
    virtual void Paint( const SwTextPaintInfo &rInf ) const override;
};

enum class SwLineBreakClear;

class SwBreakPortion : public SwLinePortion
{
    RedlineType m_eRedline;

    /// Tracks the type of the breaking clear from SwTextLineBreak, if there is one.
    SwLineBreakClear m_eClear;

    /// Height of the line-break character itself, without spacing added for clearing.
    SwTwips m_nTextHeight;

public:
    explicit SwBreakPortion(const SwLinePortion& rPortion, const SwTextAttr* pAttr);
    // Returns 0 if we have no usable data
    virtual SwLinePortion *Compress() override;
    virtual void Paint( const SwTextPaintInfo &rInf ) const override;
    virtual bool Format( SwTextFormatInfo &rInf ) override;
    virtual SwTwips GetViewWidth(const SwTextSizeInfo& rInf) const override;
    virtual TextFrameIndex GetModelPositionForViewPoint(SwTwips nOfst) const override;

    // Accessibility: pass information about this portion to the PortionHandler
    virtual void HandlePortion( SwPortionHandler& rPH ) const override;

    void dumpAsXml(xmlTextWriterPtr pWriter, const OUString& rText,
                   TextFrameIndex& nOffset) const override;

    static constexpr OUString S_NOBREAK_FOR_REDLINE = u"\u00A0"_ustr;
    void SetRedline( const RedlineType eRedline ) { m_eRedline = eRedline; }

    SwLineBreakClear GetClear() const;
};

class SwKernPortion : public SwLinePortion
{
    short m_nKern;
    bool m_bBackground;
    bool m_bGridKern;

public:

    // This constructor automatically appends the portion to rPortion
    // bBG indicates, that the background of the kerning portion has to
    // be painted, e.g., if the portion if positioned between to fields.
    // bGridKern indicates, that the kerning portion is used to provide
    // additional space in grid mode.
    SwKernPortion( SwLinePortion &rPortion, short nKrn,
                   bool bBG = falsebool bGridKern = false );

    // This constructor only sets the height and ascent to the values
    // of rPortion. It is only used for kerning portions for grid mode
    explicit SwKernPortion( const SwLinePortion &rPortion );

    virtual void FormatEOL( SwTextFormatInfo &rInf ) override;
    virtual void Paint( const SwTextPaintInfo &rInf ) const override;
};

/// Indicator that the content does not fit into a fixed height frame (red triangle on the UI).
class SwArrowPortion : public SwLinePortion
{
    Point m_aPos;
    bool m_bLeft;
public:
    explicit SwArrowPortion( const SwLinePortion &rPortion );
    explicit SwArrowPortion( const SwTextPaintInfo &rInf );
    virtual void Paint( const SwTextPaintInfo &rInf ) const override;
    virtual SwLinePortion *Compress() override;
    bool IsLeft() const { return m_bLeft; }
    const Point& GetPos() const { return m_aPos; }
};

// The characters which are forbidden at the start of a line like the dot and
// other punctuation marks are allowed to display in the margin of the page
// by a user option.
// The SwHangingPortion is the corresponding textportion to do that.
class SwHangingPortion : public SwTextPortion
{
    SwTwips m_nInnerWidth;
public:
    explicit SwHangingPortion( SwPositiveSize aSize ) : m_nInnerWidth( aSize.Width() )
    {
        SetWhichPor( PortionType::Hanging );
        SetLen(TextFrameIndex(1));
        Height( aSize.Height() );
    }

    SwTwips GetInnerWidth() const { return m_nInnerWidth; }
};

// Used to hide text
class SwHiddenTextPortion : public SwLinePortion
{
public:
    explicit SwHiddenTextPortion(TextFrameIndex const nLen)
    {
        SetWhichPor( PortionType::HiddenText );  SetLen( nLen );
    }

    virtual void Paint( const SwTextPaintInfo &rInf ) const override;
    virtual bool Format( SwTextFormatInfo &rInf ) override;
};

class SwControlCharPortion : public SwLinePortion
{

private:
    mutable SwTwips mnViewWidth; // used to cache a calculated value
protected:
    mutable SwTwips mnHalfCharWidth; // used to cache a calculated value
    sal_Unicode mcChar;

public:

    explicit SwControlCharPortion( sal_Unicode cChar )
        : mnViewWidth( 0 ), mnHalfCharWidth( 0 ), mcChar( cChar )
    {
        SetWhichPor( PortionType::ControlChar ); SetLen( TextFrameIndex(1) );
    }

    virtual bool DoPaint(SwTextPaintInfo const& rInf,
        OUString & rOutString, SwFont & rTmpFont, int & rDeltaY) const;
    virtual void Paint( const SwTextPaintInfo &rInf ) const override;
    virtual bool Format( SwTextFormatInfo &rInf ) override;
    virtual SwTwips GetViewWidth(const SwTextSizeInfo& rInf) const override;
};

/// for showing bookmark starts and ends; note that in contrast to
/// SwControlCharPortion these do not have a character in the text.
class SwBookmarkPortion : public SwControlCharPortion
{
    // custom colors defined by metadata
    std::vector<std::tuple<SwScriptInfo::MarkKind, Color, SwMarkName, OUString>> m_aColors;
    // number of MarkKind marks
    sal_Int16 m_nStart, m_nEnd, m_nPoint;
    bool m_bHasCustomColor;

public:
    explicit SwBookmarkPortion(sal_Unicode const cChar, std::vector<std::tuple<SwScriptInfo::MarkKind, Color, SwMarkName, OUString>> aColors)
        : SwControlCharPortion(cChar), m_aColors(std::move(aColors)), m_nStart(0), m_nEnd(0), m_nPoint(0), m_bHasCustomColor(false)
    {
        SetWhichPor(PortionType::Bookmark);
        SetLen(TextFrameIndex(0));
        for (const auto& it : m_aColors)
        {
            if (std::get<0>(it) == SwScriptInfo::MarkKind::Start)
                m_nStart++;
            else if (std::get<0>(it) == SwScriptInfo::MarkKind::End)
                m_nEnd++;
            else
                m_nPoint++;

            if (!m_bHasCustomColor && COL_TRANSPARENT != std::get<1>(it))
                m_bHasCustomColor = true;
        }
    }

    virtual bool DoPaint(SwTextPaintInfo const& rInf,
        OUString & rOutString, SwFont & rTmpFont, int & rDeltaY) const override;
    virtual void Paint( const SwTextPaintInfo &rInf ) const override;
    virtual SwLinePortion * Compress() override { return this; }
    virtual void HandlePortion(SwPortionHandler& rPH) const override;
    void dumpAsXml(xmlTextWriterPtr pWriter, const OUString& rText,
                   TextFrameIndex& rOffset) const override;
};

/* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Messung V0.5
C=92 H=96 G=93

¤ Dauer der Verarbeitung: 0.12 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik

Monitoring

Montastic status badge