// Generated by gmmproc 2.49.5 -- DO NOT MODIFY! #ifndef _PANGOMM_GLYPHSTRING_H #define _PANGOMM_GLYPHSTRING_H #include #include /* $Id: glyphstring.hg,v 1.2 2006/05/30 17:14:21 murrayc Exp $ */ /* glyphstring.h * * Copyright (C) 1998-1999 The gtkmm Development Team * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include #include #include #include #include #include //For PangoAnalysis. #ifndef DOXYGEN_SHOULD_SKIP_THIS extern "C" { typedef struct _PangoGlyphString PangoGlyphString; } #endif namespace Pango { /** A Pango::GlyphString is used to store strings of glyphs with geometry and visual attribute information. * It can be measured or drawn to the screen. */ class GlyphString { public: #ifndef DOXYGEN_SHOULD_SKIP_THIS using CppObjectType = GlyphString; using BaseObjectType = PangoGlyphString; #endif /* DOXYGEN_SHOULD_SKIP_THIS */ /** Get the GType for this class, for use with the underlying GObject type system. */ static GType get_type() G_GNUC_CONST; GlyphString(); explicit GlyphString(PangoGlyphString* gobject, bool make_a_copy = true); GlyphString(const GlyphString& other); GlyphString& operator=(const GlyphString& other); GlyphString(GlyphString&& other) noexcept; GlyphString& operator=(GlyphString&& other) noexcept; ~GlyphString() noexcept; void swap(GlyphString& other) noexcept; ///Provides access to the underlying C instance. PangoGlyphString* gobj() { return gobject_; } ///Provides access to the underlying C instance. const PangoGlyphString* gobj() const { return gobject_; } ///Provides access to the underlying C instance. The caller is responsible for freeing it. Use when directly setting fields in structs. PangoGlyphString* gobj_copy() const; protected: PangoGlyphString* gobject_; private: //gtkmmproc error: pango_glyph_string_copy_static : ignored method defs lookup failed//gtkmmproc error: pango_glyph_string_equal : ignored method defs lookup failed public: /** Construct a string of glyphs from a string of characters. * Given a segment of text and the corresponding Pango::Analysis structure * returned from Pango::Context::itemize(), convert the characters into glyphs. * You may also pass in only a sub-string of the item. * @param text The text to process. You must pass the same string into those member functions expecting a const Glib::ustring&. * @param analysis The analysis information return from Pango::Context::itemize(). */ GlyphString(const Glib::ustring& text, const Analysis& analysis); /** Resize a glyph string to the given length. * * @param new_len The new length of the string. */ void set_size(int new_len); /** Compute the logical and ink extents of a glyph string. See the documentation * for Pango::Font::get_glyph_extents() for details about the interpretation * of the rectangles. * * @param font A Pango::Font. * @param ink_rect Rectangle used to store the extents of the glyph string as drawn. * @param logical_rect Rectangle used to store the logical extents of the glyph string. */ void get_extents(const Glib::RefPtr& font, Rectangle& ink_rect, Rectangle& logical_rect) const; /** Computes the extents of a sub-portion of a glyph string. The extents are * relative to the start of the glyph string range (the origin of their * coordinate system is at the start of the range, not at the start of the entire * glyph string). * * @param start Start index. * @param end End index (the range is the set of bytes with * indices such that start <= index < end). * @param font A Pango::Font. * @param ink_rect Rectangle used to store the extents of the glyph string range as drawn. * @param logical_rect Rectangle used to store the logical extents of the glyph string range. */ void get_extents(int start, int end, const Glib::RefPtr& font, Rectangle& ink_rect, Rectangle& logical_rect) const; /** Computes the logical width of the glyph string as can also be computed * using extents(). However, since this only computes the * width, it's much faster. This is in fact only a convenience function that * computes the sum of geometry.width for each glyph in the @a glyphs. * * @newin{1,14} * * @return The logical width of the glyph string. */ int get_width() const; /** Computes the extents of the glyph string as drawn. * @param font A Pango::Font. * @return The extents of the glyph string as drawn. */ Rectangle get_ink_extents(const Glib::RefPtr& font) const; /** Computes the extents of a sub-portion of the glyph string as drawn. * @param start The start index. * @param end The end index. * @param font A Panog::Font * @return The extents of the sub-portion of the glyph string as drawn. */ Rectangle get_ink_extents(int start, int end, const Glib::RefPtr& font) const; /** Computes the logical extents of a sub-portion of the glyph string. * @param font A Pango::Font. * @return The logical extents of the glyph string. */ Rectangle get_logical_extents(const Glib::RefPtr& font) const; /** Computes the logical extents of a sub-portion of the glyph string. * @param start The start index. * @param end The end index. * @param font A Pango::Font. * @return The logical extents of the sub-portion of the glyph string. */ Rectangle get_logical_extents(int start, int end, const Glib::RefPtr& font) const; /** Determine the screen width corresponding to each character. * When multiple characters compose a single cluster, the width of the entire cluster * is divided equally among the characters. * @param text The text corresponding to the glyphs. * @param embedding_level The embedding level of the string. * @return An array of integers representing the resulting character widths. */ Glib::ArrayHandle get_logical_widths(const Glib::ustring& text, int embedding_level) const; /** Converts from character position to x position. * (X position is measured from the left edge of the run). Character positions are computed by dividing up each cluster into equal portions. * @param text The text corresponding to the glyphs. * @param analysis The analysis information return from Pango::Context::itemize(). * @param index The byte index within text. * @param trailing Whether we should compute the result for the beginning or end of the character. * @return The x position. */ int index_to_x(const Glib::ustring& text, const Analysis& analysis, int index, bool trailing) const; /** Convert from x offset to character position. * Character positions are computed by dividing up each cluster into equal portions. * In scripts where positioning within a cluster is not allowed (such as Thai), * the returned value may not be a valid cursor position; the caller must combine the * result with the logical attributes for the text to compute the valid cursor position. * @param text The text corresponding to the glyphs. * @param analysis The analysis information return from Pango::Context::itemize(). * @param x_pos The x offset (in thousands of a device unit). * @param index The location to store calculated byte index within. * @param trailing The location to store a boolean indicating whether the user clicked on the leading or trailing edge of the character. */ void x_to_index(const Glib::ustring& text, const Analysis& analysis, int x_pos, int& index, bool& trailing) const; /** Gharacter positions are computed by dividing up each cluster into equal portions. * @return An array of Pango::GlyphInfo objects. */ Glib::ArrayHandle get_glyphs() const; //TODO: //void pango_cairo_glyph_string_path (cairo_t *cr, // PangoFont *font, // PangoGlyphString *glyphs); }; } //namespace Pango namespace Pango { /** @relates Pango::GlyphString * @param lhs The left-hand side * @param rhs The right-hand side */ inline void swap(GlyphString& lhs, GlyphString& rhs) noexcept { lhs.swap(rhs); } } // namespace Pango namespace Glib { /** A Glib::wrap() method for this object. * * @param object The C instance. * @param take_copy False if the result should take ownership of the C instance. True if it should take a new copy or ref. * @result A C++ instance that wraps this C instance. * * @relates Pango::GlyphString */ Pango::GlyphString wrap(PangoGlyphString* object, bool take_copy = false); #ifndef DOXYGEN_SHOULD_SKIP_THIS template <> class Value : public Glib::Value_Boxed {}; #endif /* DOXYGEN_SHOULD_SKIP_THIS */ } // namespace Glib #endif /* _PANGOMM_GLYPHSTRING_H */