diff --git a/build-tools/capi_parser/src/coreImpl/parser/kit_sub_system/c_file_kit_sub_system.json b/build-tools/capi_parser/src/coreImpl/parser/kit_sub_system/c_file_kit_sub_system.json
index 2e76360574711680bfcb669fd1bce4a97e388687..eba3146ceaa3c1c1c6dc643f167507af03ec30af 100644
--- a/build-tools/capi_parser/src/coreImpl/parser/kit_sub_system/c_file_kit_sub_system.json
+++ b/build-tools/capi_parser/src/coreImpl/parser/kit_sub_system/c_file_kit_sub_system.json
@@ -274,6 +274,11 @@
"kitName": "ArkGraphicsD",
"subSystem": "图形图像"
},
+ {
+ "filePath": "graphic/graphic_2d/native_drawing/drawing_text_line.h",
+ "kitName": "ArkGraphicsD",
+ "subSystem": "图形图像"
+ },
{
"filePath": "graphic/graphic_2d/native_drawing/drawing_text_typography.h",
"kitName": "ArkGraphicsD",
diff --git a/graphic/graphic_2d/native_drawing/BUILD.gn b/graphic/graphic_2d/native_drawing/BUILD.gn
index aea6e1dc4d1cfb37bb9425bf80c1ba123ca28877..def44f64393ad9b90e0bd0d7ab508de47879298f 100644
--- a/graphic/graphic_2d/native_drawing/BUILD.gn
+++ b/graphic/graphic_2d/native_drawing/BUILD.gn
@@ -50,6 +50,7 @@ ohos_ndk_headers("native_drawing_header") {
"//interface/sdk_c/graphic/graphic_2d/native_drawing/drawing_surface.h",
"//interface/sdk_c/graphic/graphic_2d/native_drawing/drawing_text_blob.h",
"//interface/sdk_c/graphic/graphic_2d/native_drawing/drawing_text_declaration.h",
+ "//interface/sdk_c/graphic/graphic_2d/native_drawing/drawing_text_line.h",
"//interface/sdk_c/graphic/graphic_2d/native_drawing/drawing_text_typography.h",
"//interface/sdk_c/graphic/graphic_2d/native_drawing/drawing_typeface.h",
"//interface/sdk_c/graphic/graphic_2d/native_drawing/drawing_types.h",
@@ -95,6 +96,7 @@ ohos_ndk_library("libnative_drawing_ndk") {
"native_drawing/drawing_surface.h",
"native_drawing/drawing_text_blob.h",
"native_drawing/drawing_text_declaration.h",
+ "native_drawing/drawing_text_line.h",
"native_drawing/drawing_text_typography.h",
"native_drawing/drawing_typeface.h",
"native_drawing/drawing_types.h",
diff --git a/graphic/graphic_2d/native_drawing/drawing_text_declaration.h b/graphic/graphic_2d/native_drawing/drawing_text_declaration.h
index 9a324c807a683863d649a9e7bc6ec5139a59f919..fe151ca2b8f3ddc6def4579cbb88412fb4dd47c1 100644
--- a/graphic/graphic_2d/native_drawing/drawing_text_declaration.h
+++ b/graphic/graphic_2d/native_drawing/drawing_text_declaration.h
@@ -125,6 +125,21 @@ typedef struct OH_Drawing_FontParser OH_Drawing_FontParser;
*/
typedef struct OH_Drawing_TextShadow OH_Drawing_TextShadow;
+/**
+ * @brief Defines an OH_Drawing_TextLine, which is used to manage text line.
+ *
+ * @since 14
+ * @version 1.0
+ */
+typedef struct OH_Drawing_TextLine OH_Drawing_TextLine;
+
+/**
+ * @brief Defines an OH_Drawing_Run, which is used to manage run.
+ *
+ * @since 14
+ * @version 1.0
+ */
+typedef struct OH_Drawing_Run OH_Drawing_Run;
#ifdef __cplusplus
}
#endif
diff --git a/graphic/graphic_2d/native_drawing/drawing_text_line.h b/graphic/graphic_2d/native_drawing/drawing_text_line.h
new file mode 100644
index 0000000000000000000000000000000000000000..71b5253c8d2befcc0315410239ab9f6f7c87bc70
--- /dev/null
+++ b/graphic/graphic_2d/native_drawing/drawing_text_line.h
@@ -0,0 +1,276 @@
+/*
+ * Copyright (c) 2024 Huawei Device Co., Ltd.
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef C_INCLUDE_DRAWING_TEXT_LINE_H
+#define C_INCLUDE_DRAWING_TEXT_LINE_H
+
+/**
+ * @addtogroup Drawing
+ * @{
+ *
+ * @brief Provides the 2D drawing capability.
+ *
+ * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing
+ *
+ * @since 14
+ * @version 1.0
+ */
+
+/**
+ * @file drawing_text_line.h
+ *
+ * @brief Declares functions related to textLine in the drawing module.
+ *
+ * @since 14
+ * @version 1.0
+ */
+
+#include "drawing_text_declaration.h"
+#include "drawing_types.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @brief Get text line information.
+ *
+ * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing
+ * @param typography Indicates the pointer to a typography object OH_Drawing_Typography.
+ * @return Indicates the pointer to a text line array object OH_Drawing_Array.
+ * @since 14
+ */
+OH_Drawing_Array* OH_Drawing_TypographyGetTextLines(OH_Drawing_Typography* typography);
+
+/**
+ * @brief Releases the memory occupied by the text line array object OH_Drawing_Array.
+ *
+ * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing
+ * @param lines Indicates the pointer to the text line array object OH_Drawing_Array.
+ * @since 14
+ * @version 1.0
+ */
+void OH_Drawing_DestroyTextLines(OH_Drawing_Array* lines);
+
+/**
+ * @brief Releases the memory occupied by the text line object OH_Drawing_TextLine.
+ *
+ * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing
+ * @param line Indicates the pointer to the text line object OH_Drawing_TextLine.
+ * @since 14
+ * @version 1.0
+ */
+void OH_Drawing_DestroyTextLine(OH_Drawing_TextLine* line);
+
+/**
+ * @brief Get the text line object by index.
+ *
+ * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing
+ * @param lines Indicates the pointer to the text line array object OH_Drawing_Array.
+ * @param index The text line object index.
+ * @return Indicates the pointer to a text line object OH_Drawing_TextLine.
+ * @since 14
+ */
+OH_Drawing_TextLine* OH_Drawing_GetTextLineByIndex(OH_Drawing_Array* lines, size_t index);
+
+/**
+ * @brief Get the count of glyphs.
+ *
+ * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing
+ * @param line Indicates the pointer to an OH_Drawing_TextLine object.
+ * @return Returns the count of glyphs.
+ * @since 14
+ * @version 1.0
+ */
+double OH_Drawing_TextLineGetGlyphCount(OH_Drawing_TextLine* line);
+
+/**
+ * @brief Get the range of text line.
+ *
+ * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing
+ * @param line Indicates the pointer to an OH_Drawing_TextLine object.
+ * @param start Indicates the pointer to text line start position.
+ * @param end Indicates the pointer to text line end position.
+ * @since 14
+ * @version 1.0
+ */
+void OH_Drawing_TextLineGetTextRange(OH_Drawing_TextLine* line, size_t* start, size_t* end);
+
+/**
+ * @brief Get the glyph runs array of text line.
+ *
+ * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing
+ * @param line Indicates the pointer to an OH_Drawing_TextLine object.
+ * @return Indicates the pointer to a glyph runs array object of text line OH_Drawing_Array.
+ * @since 14
+ * @version 1.0
+ */
+OH_Drawing_Array* OH_Drawing_TextLineGetGlyphRuns(OH_Drawing_TextLine* line);
+
+/**
+ * @brief Releases the memory occupied by the run array object OH_Drawing_Array.
+ *
+ * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing
+ * @param runs Indicates the pointer to the run array object OH_Drawing_Array.
+ * @since 14
+ * @version 1.0
+ */
+void OH_Drawing_DestroyRuns(OH_Drawing_Array* runs);
+
+/**
+ * @brief Get the run object by index.
+ *
+ * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing
+ * @param runs Indicates the pointer to the run array object OH_Drawing_Array.
+ * @param index The run object index.
+ * @return Indicates the pointer to a run object OH_Drawing_Run.
+ * @since 14
+ */
+OH_Drawing_Run* OH_Drawing_GetRunByIndex(OH_Drawing_Array* runs, size_t index);
+
+/**
+ * @brief Paint the range of text line.
+ *
+ * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing
+ * @param line Indicates the pointer to an OH_Drawing_TextLine object.
+ * @param canvas Indicates the pointer to an OH_Drawing_Canvas object.
+ * @param x Represents the X-axis position on the canvas.
+ * @param y Represents the Y-axis position on the canvas.
+ * @since 14
+ * @version 1.0
+ */
+void OH_Drawing_TextLinePaint(OH_Drawing_TextLine* line, OH_Drawing_Canvas* canvas, double x, double y);
+
+/**
+ * @brief Creates a truncated text line object.
+ *
+ * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing
+ * @param line Indicates the pointer to an OH_Drawing_TextLine object.
+ * @param width Indicates the text line width to set.
+ * @param mode Indicates the ellipsis model to set, EllipsisMode:MIDDLE is not supported.
+ * For details, see the enum OH_Drawing_EllipsisModal.
+ * @param ellipsis Indicates the ellipsis string to set.
+ * @return Returns the pointer to the OH_Drawing_TextLine object created.
+ * @since 14
+ * @version 1.0
+ */
+OH_Drawing_TextLine* OH_Drawing_TextLineCreateTruncatedLine(OH_Drawing_TextLine* line, double width, int mode,
+ const char* ellipsis);
+
+/**
+ * @brief Gets the text line typographic bounds.
+ *
+ * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing
+ * @param line Indicates the pointer to an OH_Drawing_TextLine object.
+ * @param ascent Indicates the distance that the pointer points to remain above the baseline.
+ * @param descent Indicates the pointer to the distance that remains below the baseline.
+ * @param leading Indicates the pointer to the line Spacing.
+ * @return Returns The total width of the typesetting border.
+ * @since 14
+ * @version 1.0
+ */
+double OH_Drawing_TextLineGetTypographicBounds(OH_Drawing_TextLine* line, double* ascent, double* descent,
+ double* leading);
+
+/**
+ * @brief Gets the text line image bounds.
+ *
+ * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing
+ * @param line Indicates the pointer to an OH_Drawing_TextLine object.
+ * @return Returns the pointer to the OH_Drawing_Rect struct created.
+ * @since 14
+ * @version 1.0
+ */
+OH_Drawing_Rect* OH_Drawing_TextLineGetImageBounds(OH_Drawing_TextLine* line);
+
+/**
+ * @brief Gets the tail space width.
+ *
+ * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing
+ * @param line Indicates the pointer to an OH_Drawing_TextLine object.
+ * @return Returns the tail space width.
+ * @since 14
+ * @version 1.0
+ */
+double OH_Drawing_TextLineGetTrailingSpaceWidth(OH_Drawing_TextLine* line);
+
+/**
+ * @brief Gets the string index of the given position.
+ *
+ * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing
+ * @param line Indicates the pointer to an OH_Drawing_TextLine object.
+ * @param point Indicates the pointer to an OH_Drawing_Point object.
+ * @return Returns the string index for a given position.
+ * @since 14
+ */
+int32_t OH_Drawing_TextLineGetStringIndexForPosition(OH_Drawing_TextLine* line, OH_Drawing_Point* point);
+
+/**
+ * @brief Gets the offset of the given string index.
+ *
+ * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing
+ * @param line Indicates the pointer to an OH_Drawing_TextLine object.
+ * @param index The given string index.
+ * @return Returns the offset for a given string index.
+ * @since 14
+ */
+double OH_Drawing_TextLineGetOffsetForStringIndex(OH_Drawing_TextLine* line, int32_t index);
+
+/**
+ * @brief User-defined callback functions for using offsets and indexes.
+ *
+ * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing
+ * @param offset Character offset is traversed as an argument to the callback function.
+ * @param index Character index is traversed as an argument to the callback function.
+ * @param leadingEdge Whether the current offset is at the character front, as an argument to the callback function.
+ * @return The return value of the user-defined callback function.
+ * If false is returned, the traversal continues.
+ * If true is returned, the traversal stops.
+ * @since 14
+ * @version 1.0
+ */
+typedef bool (*CustomCallback)(double offset, int32_t index, bool leadingEdge);
+
+/**
+ * @brief Enumerate caret offset and index in text lines.
+ *
+ * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing
+ * @param line Indicates the pointer to an OH_Drawing_TextLine object.
+ * @param callback User-defined callback functions, see CustomCallback.
+ * @since 14
+ */
+void OH_Drawing_TextLineEnumerateCaretOffsets(OH_Drawing_TextLine* line, CustomCallback callback);
+
+/**
+ * @brief Gets the text offset based on the given alignment factor and alignment width.
+ *
+ * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing
+ * @param line Indicates the pointer to an OH_Drawing_TextLine object.
+ * @param alignmentFactor The coefficients that text needs to be aligned.
+ * Less than or equal to 0 is left justified, 0.5 is center justified,
+ * and greater than or equal to 1 is right justified.
+ * @param alignmentWidth The width of the text to be aligned.
+ * Returns 0 if it is less than the actual width of the text.
+ * @return Returns the offset of the aligned text.
+ * @since 14
+ * @version 1.0
+ */
+double OH_Drawing_TextLineGetAlignmentOffset(OH_Drawing_TextLine* line, double alignmentFactor, double alignmentWidth);
+
+#ifdef __cplusplus
+}
+#endif
+/** @} */
+#endif // C_INCLUDE_DRAWING_TEXT_LINE_H
\ No newline at end of file
diff --git a/graphic/graphic_2d/native_drawing/drawing_text_typography.h b/graphic/graphic_2d/native_drawing/drawing_text_typography.h
index e4546ed6c55aa81547e3f2f9732506a6b4002859..378f7ba6c52e5f05bf31bce86b0fce3afa342175 100644
--- a/graphic/graphic_2d/native_drawing/drawing_text_typography.h
+++ b/graphic/graphic_2d/native_drawing/drawing_text_typography.h
@@ -2767,6 +2767,17 @@ void OH_Drawing_TypographyDestroyTextBox(OH_Drawing_TextBox*);
void OH_Drawing_SetTextShadow(OH_Drawing_TextShadow* shadow, uint32_t color, OH_Drawing_Point* offset,
double blurRadius);
+/**
+ * @brief Get DrawingArray size.
+ *
+ * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing
+ * @param drawingArray Indicates the pointer to the array object OH_Drawing_Array.
+ * @return Size of array.
+ * @since 14
+ * @version 1.0
+ */
+size_t OH_Drawing_GetDrawingArraySize(OH_Drawing_Array* drawingArray);
+
#ifdef __cplusplus
}
#endif
diff --git a/graphic/graphic_2d/native_drawing/libnative_drawing.ndk.json b/graphic/graphic_2d/native_drawing/libnative_drawing.ndk.json
index e81640a3fa4218b59fb9dc031eb4e7b90db2a47b..dfd500ced4fb8a38911bb0bf919d256a3ea2e229 100644
--- a/graphic/graphic_2d/native_drawing/libnative_drawing.ndk.json
+++ b/graphic/graphic_2d/native_drawing/libnative_drawing.ndk.json
@@ -1489,5 +1489,81 @@
{
"first_introduced": "13",
"name":"OH_Drawing_RecordCmdDestroy"
+ },
+ {
+ "first_introduced": "14",
+ "name":"OH_Drawing_GetDrawingArraySize"
+ },
+ {
+ "first_introduced": "14",
+ "name":"OH_Drawing_TypographyGetTextLines"
+ },
+ {
+ "first_introduced": "14",
+ "name":"OH_Drawing_DestroyTextLines"
+ },
+ {
+ "first_introduced": "14",
+ "name":"OH_Drawing_DestroyTextLine"
+ },
+ {
+ "first_introduced": "14",
+ "name":"OH_Drawing_GetTextLineByIndex"
+ },
+ {
+ "first_introduced": "14",
+ "name":"OH_Drawing_TextLineGetGlyphCount"
+ },
+ {
+ "first_introduced": "14",
+ "name":"OH_Drawing_TextLineGetTextRange"
+ },
+ {
+ "first_introduced": "14",
+ "name":"OH_Drawing_TextLineGetGlyphRuns"
+ },
+ {
+ "first_introduced": "14",
+ "name":"OH_Drawing_DestroyRuns"
+ },
+ {
+ "first_introduced": "14",
+ "name":"OH_Drawing_GetRunByIndex"
+ },
+ {
+ "first_introduced": "14",
+ "name":"OH_Drawing_TextLinePaint"
+ },
+ {
+ "first_introduced": "14",
+ "name":"OH_Drawing_TextLineCreateTruncatedLine"
+ },
+ {
+ "first_introduced": "14",
+ "name":"OH_Drawing_TextLineGetTypographicBounds"
+ },
+ {
+ "first_introduced": "14",
+ "name":"OH_Drawing_TextLineGetImageBounds"
+ },
+ {
+ "first_introduced": "14",
+ "name":"OH_Drawing_TextLineGetTrailingSpaceWidth"
+ },
+ {
+ "first_introduced": "14",
+ "name":"OH_Drawing_TextLineGetStringIndexForPosition"
+ },
+ {
+ "first_introduced": "14",
+ "name":"OH_Drawing_TextLineGetOffsetForStringIndex"
+ },
+ {
+ "first_introduced": "14",
+ "name":"OH_Drawing_TextLineEnumerateCaretOffsets"
+ },
+ {
+ "first_introduced": "14",
+ "name":"OH_Drawing_TextLineGetAlignmentOffset"
}
]
\ No newline at end of file