summaryrefslogtreecommitdiff
path: root/editeng/inc/ParagraphPortion.hxx
diff options
context:
space:
mode:
authorTomaž Vajngerl <tomaz.vajngerl@collabora.co.uk>2023-12-29 20:54:43 +0900
committerTomaž Vajngerl <quikee@gmail.com>2024-01-01 04:34:20 +0100
commit916268c70a5673680c86eaac11c543fd45b90eb3 (patch)
treefe6eaf1b9d8dd41e758ef3a8e00ce1defda3c53b /editeng/inc/ParagraphPortion.hxx
parent0020f05df2e7fc739e5e017e035efbe3c9bc8b35 (diff)
editeng: move ParaPortion into its own header file
Change-Id: I3fefe4a9fc5d391b1c3af335893a084eaeddba4d Reviewed-on: https://gerrit.libreoffice.org/c/core/+/161475 Tested-by: Tomaž Vajngerl <quikee@gmail.com> Reviewed-by: Tomaž Vajngerl <quikee@gmail.com>
Diffstat (limited to 'editeng/inc/ParagraphPortion.hxx')
-rw-r--r--editeng/inc/ParagraphPortion.hxx133
1 files changed, 133 insertions, 0 deletions
diff --git a/editeng/inc/ParagraphPortion.hxx b/editeng/inc/ParagraphPortion.hxx
new file mode 100644
index 000000000000..93eb8356f611
--- /dev/null
+++ b/editeng/inc/ParagraphPortion.hxx
@@ -0,0 +1,133 @@
+/* -*- 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 "EditLineList.hxx"
+#include "TextPortionList.hxx"
+
+struct ScriptTypePosInfo
+{
+ short nScriptType;
+ sal_Int32 nStartPos;
+ sal_Int32 nEndPos;
+
+ ScriptTypePosInfo(short Type, sal_Int32 Start, sal_Int32 End)
+ : nScriptType(Type)
+ , nStartPos(Start)
+ , nEndPos(End)
+ {
+ }
+};
+
+typedef std::vector<ScriptTypePosInfo> ScriptTypePosInfos;
+
+struct WritingDirectionInfo
+{
+ sal_uInt8 nType;
+ sal_Int32 nStartPos;
+ sal_Int32 nEndPos;
+
+ WritingDirectionInfo(sal_uInt8 Type, sal_Int32 Start, sal_Int32 End)
+ : nType(Type)
+ , nStartPos(Start)
+ , nEndPos(End)
+ {
+ }
+};
+
+typedef std::vector<WritingDirectionInfo> WritingDirectionInfos;
+
+class ParaPortion
+{
+ friend class ImpEditEngine; // to adjust the height
+private:
+ EditLineList aLineList;
+ TextPortionList aTextPortionList;
+ ContentNode* pNode;
+ tools::Long nHeight;
+
+ ScriptTypePosInfos aScriptInfos;
+ WritingDirectionInfos aWritingDirectionInfos;
+
+ sal_Int32 nInvalidPosStart;
+ sal_Int32 nFirstLineOffset; // For Writer-LineSpacing-Interpretation
+ sal_Int32 nBulletX;
+ sal_Int32 nInvalidDiff;
+
+ bool bInvalid : 1;
+ bool bSimple : 1; // only linear Tap
+ bool bVisible : 1; // Belongs to the node!
+ bool bForceRepaint : 1;
+
+ ParaPortion(const ParaPortion&) = delete;
+
+public:
+ ParaPortion(ContentNode* pNode);
+ ~ParaPortion();
+
+ sal_Int32 GetLineNumber(sal_Int32 nIndex) const;
+
+ EditLineList& GetLines() { return aLineList; }
+ const EditLineList& GetLines() const { return aLineList; }
+
+ bool IsInvalid() const { return bInvalid; }
+ bool IsSimpleInvalid() const { return bSimple; }
+ void SetValid()
+ {
+ bInvalid = false;
+ bSimple = true;
+ }
+
+ bool MustRepaint() const { return bForceRepaint; }
+ void SetMustRepaint(bool bRP) { bForceRepaint = bRP; }
+
+ sal_Int32 GetBulletX() const { return nBulletX; }
+ void SetBulletX(sal_Int32 n) { nBulletX = n; }
+
+ void MarkInvalid(sal_Int32 nStart, sal_Int32 nDiff);
+ void MarkSelectionInvalid(sal_Int32 nStart);
+
+ void SetVisible(bool bVisible);
+ bool IsVisible() const { return bVisible; }
+
+ bool IsEmpty() { return GetTextPortions().Count() == 1 && GetTextPortions()[0].GetLen() == 0; }
+
+ tools::Long GetHeight() const { return (bVisible ? nHeight : 0); }
+ sal_Int32 GetFirstLineOffset() const { return (bVisible ? nFirstLineOffset : 0); }
+ void ResetHeight()
+ {
+ nHeight = 0;
+ nFirstLineOffset = 0;
+ }
+
+ ContentNode* GetNode() const { return pNode; }
+ TextPortionList& GetTextPortions() { return aTextPortionList; }
+ const TextPortionList& GetTextPortions() const { return aTextPortionList; }
+
+ sal_Int32 GetInvalidPosStart() const { return nInvalidPosStart; }
+ short GetInvalidDiff() const { return nInvalidDiff; }
+
+ void CorrectValuesBehindLastFormattedLine(sal_Int32 nLastFormattedLine);
+#if OSL_DEBUG_LEVEL > 0
+ static bool DbgCheckTextPortions(ParaPortion const&);
+#endif
+};
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */