summaryrefslogtreecommitdiff
path: root/offapi/com/sun/star/rendering/XTextLayout.idl
diff options
context:
space:
mode:
Diffstat (limited to 'offapi/com/sun/star/rendering/XTextLayout.idl')
-rw-r--r--offapi/com/sun/star/rendering/XTextLayout.idl432
1 files changed, 432 insertions, 0 deletions
diff --git a/offapi/com/sun/star/rendering/XTextLayout.idl b/offapi/com/sun/star/rendering/XTextLayout.idl
new file mode 100644
index 000000000000..04b6c4f0103b
--- /dev/null
+++ b/offapi/com/sun/star/rendering/XTextLayout.idl
@@ -0,0 +1,432 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef __com_sun_star_rendering_XTextLayout_idl__
+#define __com_sun_star_rendering_XTextLayout_idl__
+
+#ifndef __com_sun_star_uno_XInterface_idl__
+#include <com/sun/star/uno/XInterface.idl>
+#endif
+#ifndef __com_sun_star_lang_IllegalArgumentException_idl__
+#include <com/sun/star/lang/IllegalArgumentException.idl>
+#endif
+#ifndef __com_sun_star_lang_IndexOutOfBoundsException_idl__
+#include <com/sun/star/lang/IndexOutOfBoundsException.idl>
+#endif
+#ifndef __com_sun_star_geometry_RealPoint2D_idl__
+#include <com/sun/star/geometry/RealPoint2D.idl>
+#endif
+#ifndef __com_sun_star_geometry_RealBezierSegment2D_idl__
+#include <com/sun/star/geometry/RealBezierSegment2D.idl>
+#endif
+#ifndef __com_sun_star_geometry_RealRectangle2D_idl__
+#include <com/sun/star/geometry/RealRectangle2D.idl>
+#endif
+#ifndef __com_sun_star_rendering_ViewState_idl__
+#include <com/sun/star/rendering/ViewState.idl>
+#endif
+#ifndef __com_sun_star_rendering_RenderState_idl__
+#include <com/sun/star/rendering/RenderState.idl>
+#endif
+#ifndef __com_sun_star_rendering_StringContext_idl__
+#include <com/sun/star/rendering/StringContext.idl>
+#endif
+#ifndef __com_sun_star_rendering_TextHit_idl__
+#include <com/sun/star/rendering/TextHit.idl>
+#endif
+#ifndef __com_sun_star_rendering_Caret_idl__
+#include <com/sun/star/rendering/Caret.idl>
+#endif
+
+
+module com { module sun { module star { module rendering {
+
+published interface XCanvas;
+published interface XCanvasFont;
+published interface XPolyPolygon2D;
+
+/** This is the central interface for text layouting.<p>
+
+ This is the central interface for text-related tasks more
+ complicated than simple string rendering. Note that all query
+ methods are subject to the current layout state of this
+ object. That is, calls to <member>XTextLayout::justify()</member>
+ or <member>XTextLayout::applyLogicalAdvancements()</member> are
+ likely to change subsequent output of those query methods.<p>
+
+ Similar to <type>XCanvasFont</type>, all measurements and
+ coordinates accepted and returned by this interface are relative
+ to the font's local coordinate system (which only equals device
+ coordinate space, if the combined render transformation used
+ during text output is the identity transformation). Conversely, if
+ the combined transformation used during text output is
+ <em>not</em> the identity transformation, all measurements
+ returned by this interface should be subjected to that
+ transformation, to yield values in device coordinate space.
+ Depending on the underlying font technology, actual device output
+ might be off by up to one device pixel from the transformed
+ metrics.<p>
+
+ @since OOo 2.0
+ */
+published interface XTextLayout : ::com::sun::star::uno::XInterface
+{
+ /** Extract the polygonal shapes of the layouted text.<p>
+
+ Each glyph is represented by a separate
+ <type>XPolyPolygon2D</type> in the returned sequence.<p>
+
+ @returns a sequence of <type>XPolyPolygon2D</type> in font
+ coordinate space, one for every glyph.
+ */
+ sequence<XPolyPolygon2D> queryTextShapes();
+
+ //-------------------------------------------------------------------------
+
+ /** Query the ink bounding boxes for every glyph in the layouted
+ text.<p>
+
+ Ink, or tight bounding boxes in this case means that for
+ e.g. an 'a', the bounding box for the
+ <type>XPolyPolygon2D</type> describing the glyph 'a' is
+ returned, not the logical dimensions of the character in the
+ font.<p>
+
+ @returns a sequence of rectangles in font coordinate space,
+ specifying the bounds, one for every glyph.
+
+ @see <member>XTextLayout::queryMeasures()</member>
+ */
+ sequence<::com::sun::star::geometry::RealRectangle2D > queryInkMeasures();
+
+ //-------------------------------------------------------------------------
+
+ /** Query the logical bounding boxes of every character in the
+ given text string.<p>
+
+ Logical bounding boxes means the space that the font allocates
+ for the given character, which, e.g. for a '.', might be
+ significantly broader than the bounds returned via
+ <member>XTextLayout::queryInkMeasures()</member>.
+
+ @returns a sequence of rectangles specifying the bounds in
+ font coordinate space, one for every glyph.
+
+ @see <member>XTextLayout::queryInkMeasures()</member>
+ */
+ sequence<::com::sun::star::geometry::RealRectangle2D> queryMeasures();
+
+ //-------------------------------------------------------------------------
+
+ /** Query the advancements for every character in the input string.<p>
+
+ This method returns a sequence of advancements, one for each
+ character in the input string (<em>not</em> for every
+ glyph. There might be multiple glyphs per input character, or
+ multiple input characters per glyph). Adding up all
+ advancements yields the total advancement of this layout. To
+ manipulate the layout of a string on the level of characters,
+ this method can be used to query for the layout's default
+ advancements, which can subsequently be changed and applied to
+ the layout via
+ <member>XTextLayout::applyLogicalAdvancements()</member>.<p>
+
+ @returns a sequence of <type>double</type> specifying the
+ advancements per character in font coordinate space.
+
+ @see <member>XTextLayout::applyLogicalAdvancements()</member>
+ */
+ sequence<double> queryLogicalAdvancements();
+
+ //-------------------------------------------------------------------------
+
+ /** Apply explicit advancements for every character in the layout
+ string.<p>
+
+ This method applies the specified advancements to every
+ logical character in the input string (<em>not</em> for every
+ glyph. There might be multiple glyphs per input character, or
+ multiple input characters per glyph). This is useful to
+ explicitely manipulate the exact output positions of
+ characters, e.g. relative to a reference output device.<p>
+
+ @param aAdvancements
+ A sequence of character advancements, in font coordinate
+ space.
+
+ @see <member>XTextLayout::queryLogicalAdvancements()</member>
+
+ @throws <type>com::sun::star::lang::IllegalArgumentException</type>
+ if the size of aAdvancements does not match the number of
+ characters in the text.
+ */
+ void applyLogicalAdvancements( [in] sequence< double > aAdvancements )
+ raises (com::sun::star::lang::IllegalArgumentException);
+
+ //-------------------------------------------------------------------------
+
+ /** Query the overall bounding box of the text.<p>
+
+ This method is similar to
+ <member>XTextLayout::queryTextMeasures</member>, only that the
+ overall bounds are returned by this method.<p>
+
+ @return the overall bounding box for the given layout, in font
+ coordinate space.
+ */
+ ::com::sun::star::geometry::RealRectangle2D queryTextBounds();
+
+ //-------------------------------------------------------------------------
+
+ /** Justify the text to the given size.<p>
+
+ This method is the core of the <type>XTextLayout</type>
+ interface, because it layouts the text in a typographically
+ correct way into the available space.<p>
+
+ @param nSize
+ The requested size of the text after justification (either
+ width or height, depending on the writing mode). This
+ parameter is interpreted in font coordinate space.
+
+ @return the actual size of the text after the justification in
+ the font coordinate space. Depending on the font and the
+ script type, this might be somewhat different from the size
+ requested. If the requested size was smaller than the
+ justification algorithm could compress the text, this value
+ might even be significantly larger than nSize.
+
+ @throws <type>com::sun::star::lang::IllegalArgumentException</type>
+ if nSize is 0 or negative.
+ */
+ double justify( [in] double nSize )
+ raises (com::sun::star::lang::IllegalArgumentException);
+
+ //-------------------------------------------------------------------------
+
+ /** Justify a number of text layouts to the given size.<p>
+
+ This method can be used to combine the layout of a text line
+ into a single justification run. This is e.g. useful if the
+ line consists of several text portions (e.g. because of
+ different fonts or colors), but it is desirable to spread the
+ available space more globally across the different layout
+ objects. If, for example, one layout object contains
+ significantly more whitespace or Kashidas than the rest, this
+ method can assign proportionally more space to this layout
+ object.<p>
+
+ @param aNextLayouts
+ A sequence of layouts following this one in logical text
+ order.
+
+ @param nSize
+ The requested size of the text for <em>all</em>
+ <type>XTextLayout</type>s after justification in font
+ coordinate space (either width or height, depending on the
+ writing mode).
+
+ @return the actual size of the text after the justification,
+ in font coordinate space. Depending on the font and the
+ script type, this might be somewhat different from the size
+ requested. If the requested size was smaller than the
+ justification algorithm could compress the text, this value
+ might even be significantly larger than nSize.
+
+ @throws <type>com::sun::star::lang::IllegalArgumentException</type>
+ if one of the parameters are not in the valid range.
+ */
+ double combinedJustify( [in] sequence< XTextLayout > aNextLayouts, [in] double nSize )
+ raises (com::sun::star::lang::IllegalArgumentException);
+
+ //-------------------------------------------------------------------------
+
+ /** This method determines the hit position in the text.<p>
+
+ This method determines the index of the character hit at the
+ specified position (in font coordinate space).<p>
+
+ @param aHitPoint
+ The position in font coordinate space to determine the
+ underlying character index for.
+
+ */
+ TextHit getTextHit( [in] ::com::sun::star::geometry::RealPoint2D aHitPoint );
+
+ //-------------------------------------------------------------------------
+
+ /** This method converts an insertion index to a caret.<p>
+
+ This method generates caret information for a given insertion
+ point in the layout text.<p>
+
+ @param nInsertionIndex
+ The insertion index, as e.g. returned by
+ <member>XTextLayout::getTextHit()</member>. This value must be
+ in the range 0 up to the number of characters in the string.
+
+ @param bExcludeLigatures
+ Set this to <TRUE/>, to skip the positions inside ligatures as
+ valid caret placements. That means, on cannot e.g. set the
+ caret between the 'f' and the 'i' in a 'fi' ligature.
+
+ @returns the generated Caret structure.
+
+ @throws <type>com::sun::star::lang::IndexOutOfBoundsException</type>
+ if nInsertionIndex is outside the permissible range.
+ */
+ Caret getCaret( [in] long nInsertionIndex,
+ [in] boolean bExcludeLigatures )
+ raises (com::sun::star::lang::IndexOutOfBoundsException);
+
+ //-------------------------------------------------------------------------
+
+ /** This method calculates a new insertion index.<p>
+
+ This method calculates a new insertion index, given a start
+ index and the number of characters to skip. This is most
+ useful for caret traveling.<p>
+
+ @param nStartIndex
+ The insertion index to start from.
+
+ @param nCaretAdvancement
+ For values greater than 0, the caret is visually moved to the
+ right. For values smaller than 0, the caret is visually moved
+ to the left.
+
+ @returns the new insertion index.
+
+ @throws <type>com::sun::star::lang::IndexOutOfBoundsException</type>
+ if nStartIndex or nCaretAdvancement is outside the permissible
+ range.
+ */
+ long getNextInsertionIndex( [in] long nStartIndex,
+ [in] long nCaretAdvancement,
+ [in] boolean bExcludeLigatures )
+ raises (com::sun::star::lang::IndexOutOfBoundsException);
+
+ //-------------------------------------------------------------------------
+
+ /** This method generates a highlight polygon.<p>
+
+ This method generates a highlighting polygon from two
+ insertion indices. This polygon will be visually continuous,
+ i.e. will not have non-highlighted text in between.<p>
+
+ @param nStartIndex
+ Start of the selection range.
+
+ @param nEndIndex
+ End of the selection range.
+
+ @return the highlight polygon in the font coordinate space.
+
+ @throws <type>com::sun::star::lang::IndexOutOfBoundsException</type>
+ if nStartIndex or nEndIndex are outside the permissible
+ range.
+ */
+ XPolyPolygon2D queryVisualHighlighting( [in] long nStartIndex,
+ [in] long nEndIndex )
+ raises (com::sun::star::lang::IndexOutOfBoundsException);
+
+ //-------------------------------------------------------------------------
+
+ /** This method generates a highlight polygon.<p>
+
+ This method generates a highlighting polygon from two
+ insertion indices. This polygon will not always be visually
+ continuous, if e.g. the text direction changes in the middle
+ of the selection, the might be parts visually between start
+ and end position that are not selected.<p>
+
+ @param nStartIndex
+ Start of the selection range.
+
+ @param nEndIndex
+ End of the selection range.
+
+ @return the highlight polygon in the font coordinate space.
+
+ @throws <type>com::sun::star::lang::IndexOutOfBoundsException</type>
+ if nStartIndex or nEndIndex are outside the permissible
+ range.
+ */
+ XPolyPolygon2D queryLogicalHighlighting( [in] long nStartIndex,
+ [in] long nEndIndex )
+ raises (com::sun::star::lang::IndexOutOfBoundsException);
+
+ //-------------------------------------------------------------------------
+
+ /** This method yields the baseline offset.<p>
+
+ This method returns the baseline offset for this layout
+ object, either measured from the top or the left edge,
+ depending on the writing direction (horizontally or
+ vertically). Since rendering this layout via
+ <member>XCanvas::drawTextLayout()</member> outputs relative to
+ the layout object's baseline, this method can be used to
+ e.g. output relative to the left, top edge.<p>
+
+ @returns the distance of the main baseline from the top or the
+ left edge of this object, depending on the writing direction.
+ */
+ double getBaselineOffset();
+
+ //-------------------------------------------------------------------------
+
+ /** This method returns the main writing direction.<p>
+
+ This method returns the main writing direction of this layout,
+ i.e. either LEFT_TO_RIGHT or RIGHT_TO_LEFT.<p>
+
+ @returns the main text direction of this layout.
+ */
+ byte getMainTextDirection();
+
+ //-------------------------------------------------------------------------
+
+ /** Request the associated font for this layout..
+
+ @returns the associated font for this layout.
+ */
+ XCanvasFont getFont();
+
+ //-------------------------------------------------------------------------
+
+ /** Request the text this layout contains.
+
+ @returns the text this layout contains.
+ */
+ StringContext getText();
+
+ //-------------------------------------------------------------------------
+
+};
+
+}; }; }; };
+
+#endif