VR-Forces Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
DtTextLayout.h
Go to the documentation of this file.
1 /*****************************************************************************
2  * Copyright (c) 2023 MAK Technologies, Inc.
3  * All rights reserved.
4  *****************************************************************************/
5 
9 
10 #pragma once
11 
14 #include <vrvUtil/DtUnicode.h>
15 #include <unordered_map>
16 
17 struct hb_buffer_t;
18 struct hb_font_t;
19 struct hb_glyph_position_t;
20 struct hb_glyph_info_t;
21 
22 namespace makVrv
23 {
24  class DtFreeTypeFace;
25  class DtBoundingBox;
26  struct DtObserverRenderData;
27 
31  {
32  public:
34  {
35  public:
38 
40  virtual ~HarfBuzzShaper();
41 
43  void setFont(DtFontInterface* f);
44 
46  void layoutText(const DtUnicode& string);
47 
49  hb_glyph_position_t *getGlyphPositions(unsigned int* glyph_count) const;
50 
52  hb_glyph_info_t* getGlyphInfos(unsigned int* glyph_count) const;
53 
54  protected:
55  hb_font_t* myHarfBuzzFont;
56  hb_buffer_t *myHarfBuzzBuffer;
57  };
58 
59  public:
61  DtTextLayout();
62 
64  virtual ~DtTextLayout();
65 
68  const DtTextLayout &other) = delete;
69 
71  DtTextLayout &operator=(
72  const DtTextLayout &other) = delete;
73 
75  virtual void renderText(DtTexturedGlyphRenderer*, const DtTextProxy*, DtFontInterface* font, const DtBoundingBox& bBox,
76  const DtObserverRenderData& channelRenderData,
77  int proxyIndex, DtQuadsRenderData* renderData);
78 
80  virtual DtUnicode bidiFix(const DtUnicode&) const;
81 
90  virtual DtBoundingBox calculateBoundingBox(DtFontInterface* font, const DtUnicode& string,
91  const DtPen& pen = DtPen(), unsigned int pos = 0, int len = -1) const;
92 
93  virtual bool isShaped(void) const{ return true; }
94 
95  virtual void layoutRightToLeft(const DtTextProxy*, DtFontInterface*, const DtBoundingBox&);
96  virtual void layoutLeftToRight(const DtTextProxy*, DtFontInterface*, const DtBoundingBox&);
97 
98  protected:
100  virtual bool renderCharacter(DtGlyphRenderer* renderer, const DtTextProxy* textProxy
101  , DtPen& pen, DtFontInterface* font, const unsigned int& character, int& vertexIndex
102  , const std::unordered_map<unsigned int, int>& mapTextureIdToTextureIndex);
103 
105  virtual void renderLayout(DtTexturedGlyphRenderer*, const DtTextProxy*, DtFontInterface*, const DtBoundingBox&, int& vertexIndex
106  , const std::unordered_map<unsigned int, int>& mapTextureIdToTextureIndex);
107 
108  protected:
110 
113  std::vector<std::string> myFontFilePaths;
114  unsigned int myPointSize;
117 
120  {
121  CharacterInformation() : advance(0.0f), offset(0.0f), glyphIndex(0), changeColor(false), glyphDefined(true)
122  {
123  color[0] = color[1] = color[2] = color[3] = 1.0;
124  };
126  advance(orig.advance), offset(orig.offset), glyphIndex(orig.glyphIndex), changeColor(orig.changeColor),
127  glyphDefined(orig.glyphDefined) { memcpy(color, orig.color, sizeof(color)); };
128 
129  float color[4];
132  unsigned short glyphIndex;
135  };
136 
140  {
141  LineInformation() : margin(0.0f), alignment(0) {}
143  margin(orig.margin), alignment(orig.alignment), characters(orig.characters) {};
144 
145  float margin;
146  unsigned int alignment;
147  std::vector<CharacterInformation> characters;
148  };
149 
150  typedef std::vector<LineInformation> Lines;
152 
153  double myLineLength;
155  };
156 }
Generic base class for text layout renderers.
Definition: DtTextLayoutInterface.h:26
virtual bool isShaped(void) const
Definition: DtTextLayout.h:93
A unicode string. DtUnicode stores a UTF-16 encoded unicode string. Code Point, a Unicode character...
Definition: DtUnicode.h:33
std::vector< std::string > myFontFilePaths
Members that are used to store information about the last font/point size used. Used for efficiency...
Definition: DtTextLayout.h:113
std::vector< LineInformation > Lines
Definition: DtTextLayout.h:150
unsigned short glyphIndex
Definition: DtTextLayout.h:132
hb_font_t * myHarfBuzzFont
Definition: DtTextLayout.h:55
A 2D point.
Definition: DtBoundingBox.h:19
Contains the makVrv::DtTextLayoutInterface class declaration.
bool glyphDefined
Definition: DtTextLayout.h:134
A glyph renderer which renders the texture associated with a glyph.
Definition: DtTexturedGlyphRenderer.h:28
A class for controlling text owned by the TextRenderer.
Definition: DtTextProxy.h:33
Abstract class for handling glyph rendering.
Definition: DtGlyphRenderer.h:21
unsigned int alignment
Definition: DtTextLayout.h:146
bool changeColor
Definition: DtTextLayout.h:133
LineInformation()
Definition: DtTextLayout.h:141
Lines myLines
Definition: DtTextLayout.h:151
std::vector< CharacterInformation > characters
Definition: DtTextLayout.h:147
float color[4]
Definition: DtTextLayout.h:127
double myLineLength
Definition: DtTextLayout.h:153
DtUnicode myLastStringRendered
Definition: DtTextLayout.h:115
hb_buffer_t * myHarfBuzzBuffer
Definition: DtTextLayout.h:56
Dt2dPoint advance
Definition: DtTextLayout.h:130
#define DT_DLL_VRVGRAPHICS
Contains DLL export macros.
Definition: vrvGraphics.h:19
DtUnicode myRenderedText
Definition: DtTextLayout.h:116
A class with encapsulated a font loaded from disk with a given size.
Definition: DtFontInterface.h:22
CharacterInformation()
Definition: DtTextLayout.h:121
A class for rendering text objects using harfbuzz layout for right to left and left to right text sha...
Definition: DtTextLayout.h:30
Structure that contains information about the layout of a line of text. The margin is measure from th...
Definition: DtTextLayout.h:139
Dt2dPoint offset
Definition: DtTextLayout.h:131
Definition: DtCommonRenderData.h:19
HarfBuzzShaper myShaper
Definition: DtTextLayout.h:109
A pen object with parameters on how to draw text.
Definition: DtBoundingBox.h:80
unsigned int myPointSize
Definition: DtTextLayout.h:114
bool myRightToLeftLayout
Definition: DtTextLayout.h:154
Definition: DtTextLayout.h:33
CharacterInformation(const CharacterInformation &orig)
Definition: DtTextLayout.h:125
voidpf uLong offset
Definition: ioapi.h:42
LineInformation(const LineInformation &orig)
Definition: DtTextLayout.h:142
Definition: DtCommonRenderData.h:32
A simple bounding box.
Definition: DtBoundingBox.h:101
Structure that contains information about a particular character, color change or simple line/charact...
Definition: DtTextLayout.h:119

Document ID: Generated on Tue Sep 24 19:28:17 EDT 2024 from SVN revision 269799
Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)