editeng: move EditLine in its own header file

Change-Id: I21cac4a8899f96da420428c4eb110078c740615a
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/161357
Tested-by: Jenkins
Reviewed-by: Tomaž Vajngerl <quikee@gmail.com>
This commit is contained in:
Tomaž Vajngerl 2023-12-24 16:46:16 +09:00 committed by Tomaž Vajngerl
parent 4871de96cb
commit 2ffe4a6580
2 changed files with 111 additions and 91 deletions

110
editeng/inc/EditLine.hxx Normal file
View file

@ -0,0 +1,110 @@
/* -*- 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
class ParaPortion;
class EditLine
{
public:
typedef std::vector<sal_Int32> CharPosArrayType;
private:
CharPosArrayType aPositions;
std::vector<sal_Bool> aKashidaPositions;
sal_Int32 nTxtWidth;
sal_Int32 nStartPosX;
sal_Int32 nStart; // could be replaced by nStartPortion
sal_Int32 nEnd; // could be replaced by nEndPortion
sal_Int32 nStartPortion;
sal_Int32 nEndPortion;
sal_uInt16 nHeight; // Total height of the line
sal_uInt16 nTxtHeight; // Pure Text height
sal_uInt16 nMaxAscent;
bool bHangingPunctuation : 1;
bool bInvalid : 1; // for skillful formatting
public:
EditLine();
EditLine(const EditLine&);
~EditLine();
bool IsIn(sal_Int32 nIndex) const { return ((nIndex >= nStart) && (nIndex < nEnd)); }
bool IsIn(sal_Int32 nIndex, bool bInclEnd) const
{
return ((nIndex >= nStart) && (bInclEnd ? (nIndex <= nEnd) : (nIndex < nEnd)));
}
void SetStart(sal_Int32 n) { nStart = n; }
sal_Int32 GetStart() const { return nStart; }
sal_Int32& GetStart() { return nStart; }
void SetEnd(sal_Int32 n) { nEnd = n; }
sal_Int32 GetEnd() const { return nEnd; }
sal_Int32& GetEnd() { return nEnd; }
void SetStartPortion(sal_Int32 n) { nStartPortion = n; }
sal_Int32 GetStartPortion() const { return nStartPortion; }
sal_Int32& GetStartPortion() { return nStartPortion; }
void SetEndPortion(sal_Int32 n) { nEndPortion = n; }
sal_Int32 GetEndPortion() const { return nEndPortion; }
sal_Int32& GetEndPortion() { return nEndPortion; }
void SetHeight(sal_uInt16 nH, sal_uInt16 nTxtH = 0);
sal_uInt16 GetHeight() const { return nHeight; }
sal_uInt16 GetTxtHeight() const { return nTxtHeight; }
void SetTextWidth(sal_Int32 n) { nTxtWidth = n; }
sal_Int32 GetTextWidth() const { return nTxtWidth; }
void SetMaxAscent(sal_uInt16 n) { nMaxAscent = n; }
sal_uInt16 GetMaxAscent() const { return nMaxAscent; }
void SetHangingPunctuation(bool b) { bHangingPunctuation = b; }
bool IsHangingPunctuation() const { return bHangingPunctuation; }
sal_Int32 GetLen() const { return nEnd - nStart; }
sal_Int32 GetStartPosX() const { return nStartPosX; }
void SetStartPosX(sal_Int32 start);
Size CalcTextSize(ParaPortion& rParaPortion);
bool IsInvalid() const { return bInvalid; }
bool IsValid() const { return !bInvalid; }
void SetInvalid() { bInvalid = true; }
void SetValid() { bInvalid = false; }
bool IsEmpty() const { return nEnd <= nStart; }
CharPosArrayType& GetCharPosArray() { return aPositions; }
const CharPosArrayType& GetCharPosArray() const { return aPositions; }
std::vector<sal_Bool>& GetKashidaArray() { return aKashidaPositions; }
const std::vector<sal_Bool>& GetKashidaArray() const { return aKashidaPositions; }
EditLine* Clone() const;
EditLine& operator=(const EditLine& rLine);
friend bool operator==(const EditLine& r1, const EditLine& r2);
};
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */

View file

@ -33,6 +33,7 @@
#include "TextPortion.hxx"
#include "ItemList.hxx"
#include "ContentNode.hxx"
#include "EditLine.hxx"
#include <cstddef>
#include <memory>
@ -158,97 +159,6 @@ public:
sal_Int32 GetPos(const TextPortion* p) const;
};
class ParaPortion;
class EditLine
{
public:
typedef std::vector<sal_Int32> CharPosArrayType;
private:
CharPosArrayType aPositions;
std::vector<sal_Bool> aKashidaPositions;
sal_Int32 nTxtWidth;
sal_Int32 nStartPosX;
sal_Int32 nStart; // could be replaced by nStartPortion
sal_Int32 nEnd; // could be replaced by nEndPortion
sal_Int32 nStartPortion;
sal_Int32 nEndPortion;
sal_uInt16 nHeight; // Total height of the line
sal_uInt16 nTxtHeight; // Pure Text height
sal_uInt16 nMaxAscent;
bool bHangingPunctuation:1;
bool bInvalid:1; // for skillful formatting
public:
EditLine();
EditLine( const EditLine& );
~EditLine();
bool IsIn( sal_Int32 nIndex ) const
{ return ( (nIndex >= nStart ) && ( nIndex < nEnd ) ); }
bool IsIn( sal_Int32 nIndex, bool bInclEnd ) const
{ return ( ( nIndex >= nStart ) && ( bInclEnd ? ( nIndex <= nEnd ) : ( nIndex < nEnd ) ) ); }
void SetStart( sal_Int32 n ) { nStart = n; }
sal_Int32 GetStart() const { return nStart; }
sal_Int32& GetStart() { return nStart; }
void SetEnd( sal_Int32 n ) { nEnd = n; }
sal_Int32 GetEnd() const { return nEnd; }
sal_Int32& GetEnd() { return nEnd; }
void SetStartPortion( sal_Int32 n ) { nStartPortion = n; }
sal_Int32 GetStartPortion() const { return nStartPortion; }
sal_Int32& GetStartPortion() { return nStartPortion; }
void SetEndPortion( sal_Int32 n ) { nEndPortion = n; }
sal_Int32 GetEndPortion() const { return nEndPortion; }
sal_Int32& GetEndPortion() { return nEndPortion; }
void SetHeight( sal_uInt16 nH, sal_uInt16 nTxtH = 0 );
sal_uInt16 GetHeight() const { return nHeight; }
sal_uInt16 GetTxtHeight() const { return nTxtHeight; }
void SetTextWidth( sal_Int32 n ) { nTxtWidth = n; }
sal_Int32 GetTextWidth() const { return nTxtWidth; }
void SetMaxAscent( sal_uInt16 n ) { nMaxAscent = n; }
sal_uInt16 GetMaxAscent() const { return nMaxAscent; }
void SetHangingPunctuation( bool b ) { bHangingPunctuation = b; }
bool IsHangingPunctuation() const { return bHangingPunctuation; }
sal_Int32 GetLen() const { return nEnd - nStart; }
sal_Int32 GetStartPosX() const { return nStartPosX; }
void SetStartPosX( sal_Int32 start );
Size CalcTextSize( ParaPortion& rParaPortion );
bool IsInvalid() const { return bInvalid; }
bool IsValid() const { return !bInvalid; }
void SetInvalid() { bInvalid = true; }
void SetValid() { bInvalid = false; }
bool IsEmpty() const { return nEnd <= nStart; }
CharPosArrayType& GetCharPosArray() { return aPositions;}
const CharPosArrayType& GetCharPosArray() const { return aPositions;}
std::vector<sal_Bool>& GetKashidaArray() { return aKashidaPositions; }
const std::vector<sal_Bool>& GetKashidaArray() const { return aKashidaPositions; }
EditLine* Clone() const;
EditLine& operator = ( const EditLine& rLine );
friend bool operator == ( const EditLine& r1, const EditLine& r2 );
};
class EditLineList
{
typedef std::vector<std::unique_ptr<EditLine> > LinesType;