diff options
author | Tomaž Vajngerl <tomaz.vajngerl@collabora.co.uk> | 2023-12-09 15:26:34 +0900 |
---|---|---|
committer | Tomaž Vajngerl <quikee@gmail.com> | 2023-12-29 02:42:14 +0100 |
commit | 1958805f61612a7b23f1c5c2d532be4d5dc24a2a (patch) | |
tree | 35584ec576aba087e3536b06b0beb9843ddcd51d /editeng | |
parent | 0f6f5048d223731aa52b768a77244d0208711391 (diff) |
editeng: move TextPortion to own header file
Change-Id: I54d0bbad4ef142705191672319774f26abf3e735
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/161348
Tested-by: Jenkins
Reviewed-by: Tomaž Vajngerl <quikee@gmail.com>
Diffstat (limited to 'editeng')
-rw-r--r-- | editeng/inc/TextPortion.hxx | 147 | ||||
-rw-r--r-- | editeng/inc/editdoc.hxx | 124 | ||||
-rw-r--r-- | editeng/source/editeng/editdoc.cxx | 26 | ||||
-rw-r--r-- | editeng/source/editeng/impedit3.cxx | 1 |
4 files changed, 149 insertions, 149 deletions
diff --git a/editeng/inc/TextPortion.hxx b/editeng/inc/TextPortion.hxx new file mode 100644 index 000000000000..e5560f260326 --- /dev/null +++ b/editeng/inc/TextPortion.hxx @@ -0,0 +1,147 @@ +/* -*- 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 "editattr.hxx" +#include "edtspell.hxx" +#include "eerdll2.hxx" +#include <editeng/svxfont.hxx> +#include <editeng/EPaM.hxx> +#include <svl/itemset.hxx> +#include <svl/style.hxx> +#include <svl/itempool.hxx> +#include <svl/languageoptions.hxx> +#include <tools/lineend.hxx> +#include <o3tl/typed_flags_set.hxx> + +#include <vector> + +enum class PortionKind +{ + TEXT = 0, + TAB = 1, + LINEBREAK = 2, + FIELD = 3, + HYPHENATOR = 4 +}; + +enum class AsianCompressionFlags +{ + Normal = 0x00, + Kana = 0x01, + PunctuationLeft = 0x02, + PunctuationRight = 0x04, +}; +namespace o3tl +{ +template <> struct typed_flags<AsianCompressionFlags> : is_typed_flags<AsianCompressionFlags, 0x07> +{ +}; +} + +struct ExtraPortionInfo +{ + ExtraPortionInfo() {} + + tools::Long nOrgWidth = 0; + tools::Long nWidthFullCompression = 0; + + tools::Long nPortionOffsetX = 0; + + sal_uInt16 nMaxCompression100thPercent = 0; + + AsianCompressionFlags nAsianCompressionTypes = AsianCompressionFlags::Normal; + bool bFirstCharIsRightPunktuation = false; + bool bCompressed = false; + + std::unique_ptr<sal_Int32[]> pOrgDXArray; + std::vector<sal_Int32> lineBreaksList; + + void SaveOrgDXArray(const sal_Int32* pDXArray, sal_Int32 nLen) + { + if (pDXArray) + { + pOrgDXArray.reset(new sal_Int32[nLen]); + memcpy(pOrgDXArray.get(), pDXArray, nLen * sizeof(sal_Int32)); + } + else + pOrgDXArray.reset(); + } +}; + +class TextPortion +{ +private: + std::unique_ptr<ExtraPortionInfo> xExtraInfos; + sal_Int32 nLen; + Size aOutSz = Size(-1, -1); + PortionKind nKind = PortionKind::TEXT; + sal_uInt8 nRightToLeftLevel = 0; + sal_Unicode nExtraValue = 0; + +public: + TextPortion(sal_Int32 nL) + : nLen(nL) + { + } + + TextPortion(const TextPortion& r) + : nLen(r.nLen) + , aOutSz(r.aOutSz) + , nKind(r.nKind) + , nRightToLeftLevel(r.nRightToLeftLevel) + , nExtraValue(r.nExtraValue) + { + } + + sal_Int32 GetLen() const { return nLen; } + void SetLen(sal_Int32 nL) { nLen = nL; } + + void setWidth(tools::Long nWidth) { aOutSz.setWidth(nWidth); } + + void setHeight(tools::Long nHeight) { aOutSz.setHeight(nHeight); } + + void adjustSize(tools::Long nDeltaX, tools::Long nDeltaY) + { + if (nDeltaX != 0) + aOutSz.AdjustWidth(nDeltaX); + if (nDeltaY != 0) + aOutSz.AdjustHeight(nDeltaY); + } + + void SetSize(const Size& rSize) { aOutSz = rSize; } + + const Size& GetSize() const { return aOutSz; } + + void SetKind(PortionKind n) { nKind = n; } + PortionKind GetKind() const { return nKind; } + + void SetRightToLeftLevel(sal_uInt8 n) { nRightToLeftLevel = n; } + sal_uInt8 GetRightToLeftLevel() const { return nRightToLeftLevel; } + bool IsRightToLeft() const { return (nRightToLeftLevel & 1); } + + sal_Unicode GetExtraValue() const { return nExtraValue; } + void SetExtraValue(sal_Unicode n) { nExtraValue = n; } + + ExtraPortionInfo* GetExtraInfos() const { return xExtraInfos.get(); } + void SetExtraInfos(ExtraPortionInfo* p) { xExtraInfos.reset(p); } +}; + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/editeng/inc/editdoc.hxx b/editeng/inc/editdoc.hxx index 565012ad97cc..240bcbfc9e37 100644 --- a/editeng/inc/editdoc.hxx +++ b/editeng/inc/editdoc.hxx @@ -30,6 +30,7 @@ #include <svl/languageoptions.hxx> #include <tools/lineend.hxx> #include <o3tl/typed_flags_set.hxx> +#include "TextPortion.hxx" #include <cstddef> #include <memory> @@ -301,133 +302,10 @@ public: bool operator !() const { return !pNode && !nIndex; } }; -enum class PortionKind -{ - TEXT = 0, - TAB = 1, - LINEBREAK = 2, - FIELD = 3, - HYPHENATOR = 4 -}; - enum class DeleteMode { Simple, RestOfWord, RestOfContent }; -enum class AsianCompressionFlags { - Normal = 0x00, - Kana = 0x01, - PunctuationLeft = 0x02, - PunctuationRight = 0x04, -}; -namespace o3tl { - template<> struct typed_flags<AsianCompressionFlags> : is_typed_flags<AsianCompressionFlags, 0x07> {}; -} - - - -// struct ExtraPortionInfos - -struct ExtraPortionInfo -{ - tools::Long nOrgWidth; - tools::Long nWidthFullCompression; - - tools::Long nPortionOffsetX; - - sal_uInt16 nMaxCompression100thPercent; - - AsianCompressionFlags nAsianCompressionTypes; - bool bFirstCharIsRightPunktuation; - bool bCompressed; - - std::unique_ptr<sal_Int32[]> pOrgDXArray; - std::vector< sal_Int32 > lineBreaksList; - - - ExtraPortionInfo(); - ~ExtraPortionInfo(); - - void SaveOrgDXArray( const sal_Int32* pDXArray, sal_Int32 nLen ); -}; - - - -class TextPortion -{ -private: - std::unique_ptr<ExtraPortionInfo> xExtraInfos; - sal_Int32 nLen; - Size aOutSz; - PortionKind nKind; - sal_uInt8 nRightToLeftLevel; - sal_Unicode nExtraValue; - - -public: - TextPortion( sal_Int32 nL ) - : nLen( nL ) - , aOutSz( -1, -1 ) - , nKind( PortionKind::TEXT ) - , nRightToLeftLevel( 0 ) - , nExtraValue( 0 ) - { - } - - TextPortion( const TextPortion& r ) - : nLen( r.nLen ) - , aOutSz( r.aOutSz ) - , nKind( r.nKind ) - , nRightToLeftLevel( r.nRightToLeftLevel ) - , nExtraValue( r.nExtraValue ) - { - } - - - sal_Int32 GetLen() const { return nLen; } - void SetLen( sal_Int32 nL ) { nLen = nL; } - - void setWidth(tools::Long nWidth) - { - aOutSz.setWidth(nWidth); - } - - void setHeight(tools::Long nHeight) - { - aOutSz.setHeight(nHeight); - } - - void adjustSize(tools::Long nDeltaX, tools::Long nDeltaY) - { - if (nDeltaX != 0) - aOutSz.AdjustWidth(nDeltaX); - if (nDeltaY != 0) - aOutSz.AdjustHeight(nDeltaY); - } - - void SetSize(const Size& rSize) - { - aOutSz = rSize; - } - - const Size& GetSize() const { return aOutSz; } - - void SetKind(PortionKind n) { nKind = n; } - PortionKind GetKind() const { return nKind; } - - void SetRightToLeftLevel( sal_uInt8 n ) { nRightToLeftLevel = n; } - sal_uInt8 GetRightToLeftLevel() const { return nRightToLeftLevel; } - bool IsRightToLeft() const { return (nRightToLeftLevel&1); } - - sal_Unicode GetExtraValue() const { return nExtraValue; } - void SetExtraValue( sal_Unicode n ) { nExtraValue = n; } - - ExtraPortionInfo* GetExtraInfos() const { return xExtraInfos.get(); } - void SetExtraInfos( ExtraPortionInfo* p ) { xExtraInfos.reset(p); } -}; - - - class TextPortionList { typedef std::vector<std::unique_ptr<TextPortion> > PortionsType; diff --git a/editeng/source/editeng/editdoc.cxx b/editeng/source/editeng/editdoc.cxx index d892bd1c3a25..0856a594f7ae 100644 --- a/editeng/source/editeng/editdoc.cxx +++ b/editeng/source/editeng/editdoc.cxx @@ -480,32 +480,6 @@ sal_Int32 TextPortionList::GetStartPos(sal_Int32 nPortion) return nPos; } -ExtraPortionInfo::ExtraPortionInfo() -: nOrgWidth(0) -, nWidthFullCompression(0) -, nPortionOffsetX(0) -, nMaxCompression100thPercent(0) -, nAsianCompressionTypes(AsianCompressionFlags::Normal) -, bFirstCharIsRightPunktuation(false) -, bCompressed(false) -{ -} - -ExtraPortionInfo::~ExtraPortionInfo() -{ -} - -void ExtraPortionInfo::SaveOrgDXArray( const sal_Int32* pDXArray, sal_Int32 nLen ) -{ - if (pDXArray) - { - pOrgDXArray.reset(new sal_Int32[nLen]); - memcpy( pOrgDXArray.get(), pDXArray, nLen * sizeof(sal_Int32) ); - } - else - pOrgDXArray.reset(); -} - ParaPortion::ParaPortion( ContentNode* pN ) : pNode(pN), nHeight(0), diff --git a/editeng/source/editeng/impedit3.cxx b/editeng/source/editeng/impedit3.cxx index 01b2d52b3fa7..84332897736b 100644 --- a/editeng/source/editeng/impedit3.cxx +++ b/editeng/source/editeng/impedit3.cxx @@ -46,6 +46,7 @@ #include <editeng/charscaleitem.hxx> #include <editeng/numitem.hxx> #include <outleeng.hxx> +#include <TextPortion.hxx> #include <svtools/colorcfg.hxx> #include <svl/ctloptions.hxx> |