LMMS
Loading...
Searching...
No Matches
juce_TextLayout.h
Go to the documentation of this file.
1/*
2 ==============================================================================
3
4 This file is part of the JUCE library.
5 Copyright (c) 2022 - Raw Material Software Limited
6
7 JUCE is an open source library subject to commercial or open-source
8 licensing.
9
10 By using JUCE, you agree to the terms of both the JUCE 7 End-User License
11 Agreement and JUCE Privacy Policy.
12
13 End User License Agreement: www.juce.com/juce-7-licence
14 Privacy Policy: www.juce.com/juce-privacy-policy
15
16 Or: You may also use this code under the terms of the GPL v3 (see
17 www.gnu.org/licenses).
18
19 JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
20 EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
21 DISCLAIMED.
22
23 ==============================================================================
24*/
25
26namespace juce
27{
28
29//==============================================================================
41{
42private:
43 template <typename Iterator>
45 {
46 public:
47 using value_type = typename std::remove_reference<decltype(**std::declval<Iterator>())>::type;
48 using difference_type = typename std::iterator_traits<Iterator>::difference_type;
51 using iterator_category = typename std::iterator_traits<Iterator>::iterator_category;
52
53 explicit DereferencingIterator (Iterator in) : iterator (std::move (in)) {}
54
56 {
57 iterator += distance;
58 return *this;
59 }
60
63
65 {
66 iterator -= distance;
67 return *this;
68 }
69
71
72 friend difference_type operator- (DereferencingIterator a, DereferencingIterator b) { return a.iterator - b.iterator; }
73
74 reference operator[] (difference_type d) const { return *iterator[d]; }
75
76 friend bool operator< (DereferencingIterator a, DereferencingIterator b) { return a.iterator < b.iterator; }
77 friend bool operator<= (DereferencingIterator a, DereferencingIterator b) { return a.iterator <= b.iterator; }
78 friend bool operator> (DereferencingIterator a, DereferencingIterator b) { return a.iterator > b.iterator; }
79 friend bool operator>= (DereferencingIterator a, DereferencingIterator b) { return a.iterator >= b.iterator; }
80 friend bool operator== (DereferencingIterator a, DereferencingIterator b) { return a.iterator == b.iterator; }
81 friend bool operator!= (DereferencingIterator a, DereferencingIterator b) { return a.iterator != b.iterator; }
82
85 DereferencingIterator operator++ (int) const { DereferencingIterator copy (*this); ++(*this); return copy; }
86 DereferencingIterator operator-- (int) const { DereferencingIterator copy (*this); --(*this); return copy; }
87
88 reference operator* () const { return **iterator; }
89 pointer operator->() const { return *iterator; }
90
91 private:
92 Iterator iterator;
93 };
94
95public:
100 TextLayout();
101 TextLayout (const TextLayout&);
102 TextLayout& operator= (const TextLayout&);
104 TextLayout& operator= (TextLayout&&) noexcept;
105
107 ~TextLayout();
108
109 //==============================================================================
113 void createLayout (const AttributedString&, float maxWidth);
114
118 void createLayout (const AttributedString&, float maxWidth, float maxHeight);
119
127
134 void createLayoutWithBalancedLineLengths (const AttributedString&, float maxWidth, float maxHeight);
135
140 void draw (Graphics&, Rectangle<float> area) const;
141
142 //==============================================================================
145 {
146 public:
147 Glyph (int glyphCode, Point<float> anchor, float width) noexcept;
148
151
156
157 float width;
158
159 private:
161 };
162
163 //==============================================================================
166 {
167 public:
168 Run() = default;
169 Run (Range<int> stringRange, int numGlyphsToPreallocate);
170
173
175 Colour colour { 0xff000000 };
179 private:
181 };
182
183 //==============================================================================
186 {
187 public:
188 Line() = default;
190 float ascent, float descent, float leading, int numRunsToPreallocate);
191
192 Line (const Line&);
193 Line& operator= (const Line&);
194
195 Line (Line&&) noexcept = default;
196 Line& operator= (Line&&) noexcept = default;
197
198 ~Line() noexcept = default;
199
202
205
208
209 void swap (Line& other) noexcept;
210
215 float ascent = 0.0f, descent = 0.0f, leading = 0.0f;
216
217 private:
219 };
220
221 //==============================================================================
223 float getWidth() const noexcept { return width; }
224
226 float getHeight() const noexcept { return height; }
227
229 int getNumLines() const noexcept { return lines.size(); }
230
232 Line& getLine (int index) const noexcept;
233
236 void addLine (std::unique_ptr<Line>);
237
239 void ensureStorageAllocated (int numLinesNeeded);
240
243
245 iterator begin() { return iterator (lines.begin()); }
246 const_iterator begin() const { return const_iterator (lines.begin()); }
247 const_iterator cbegin() const { return const_iterator (lines.begin()); }
248
250 iterator end() { return iterator (lines.end()); }
251 const_iterator end() const { return const_iterator (lines.end()); }
252 const_iterator cend() const { return const_iterator (lines.end()); }
253
257 void recalculateSize();
258
259private:
261 float width, height;
263
266
268};
269
270} // namespace juce
#define copy(x)
Definition ADnoteParameters.cpp:1011
#define noexcept
Definition DistrhoDefines.h:72
#define final
Definition DistrhoDefines.h:74
uint8_t a
Definition Spc_Cpu.h:141
CAdPlugDatabase::CRecord::RecordType type
Definition adplugdb.cpp:93
Definition juce_Array.h:56
Definition juce_AttributedString.h:47
Definition juce_Colour.h:38
Definition juce_Font.h:42
Definition juce_GraphicsContext.h:45
Definition juce_Justification.h:41
Definition juce_Line.h:47
Definition juce_OwnedArray.h:51
Definition juce_Point.h:42
Definition juce_Range.h:40
Definition juce_Rectangle.h:67
Definition juce_TextLayout.h:45
value_type * pointer
Definition juce_TextLayout.h:49
DereferencingIterator(Iterator in)
Definition juce_TextLayout.h:53
typename std::remove_reference< decltype(**std::declval< Iterator >())>::type value_type
Definition juce_TextLayout.h:47
Line *const * iterator
Definition juce_TextLayout.h:92
typename std::iterator_traits< Iterator >::iterator_category iterator_category
Definition juce_TextLayout.h:51
pointer operator->() const
Definition juce_TextLayout.h:89
typename std::iterator_traits< Iterator >::difference_type difference_type
Definition juce_TextLayout.h:48
value_type & reference
Definition juce_TextLayout.h:50
DereferencingIterator & operator++()
Definition juce_TextLayout.h:83
DereferencingIterator & operator--()
Definition juce_TextLayout.h:84
Point< float > anchor
Definition juce_TextLayout.h:155
int glyphCode
Definition juce_TextLayout.h:150
float width
Definition juce_TextLayout.h:157
Glyph(int glyphCode, Point< float > anchor, float width) noexcept
Definition juce_TextLayout.cpp:34
float ascent
Definition juce_TextLayout.h:215
float descent
Definition juce_TextLayout.h:215
float leading
Definition juce_TextLayout.h:215
Line(Line &&) noexcept=default
Range< float > getLineBoundsY() const noexcept
Definition juce_TextLayout.cpp:115
Range< int > stringRange
Definition juce_TextLayout.h:212
void swap(Line &other) noexcept
Definition juce_TextLayout.cpp:129
Rectangle< float > getLineBounds() const noexcept
Definition juce_TextLayout.cpp:121
Point< float > lineOrigin
Definition juce_TextLayout.h:214
Range< float > getLineBoundsX() const noexcept
Definition juce_TextLayout.cpp:92
OwnedArray< Run > runs
Definition juce_TextLayout.h:211
Definition juce_TextLayout.h:166
Range< int > stringRange
Definition juce_TextLayout.h:177
Range< float > getRunBoundsX() const noexcept
Definition juce_TextLayout.cpp:46
Array< Glyph > glyphs
Definition juce_TextLayout.h:176
Colour colour
Definition juce_TextLayout.h:175
Font font
Definition juce_TextLayout.h:174
float width
Definition juce_TextLayout.h:261
DereferencingIterator< Line *const * > iterator
Definition juce_TextLayout.h:241
Justification justification
Definition juce_TextLayout.h:262
void createLayoutWithBalancedLineLengths(const AttributedString &, float maxWidth)
Definition juce_TextLayout.cpp:261
iterator begin()
Definition juce_TextLayout.h:245
int getNumLines() const noexcept
Definition juce_TextLayout.h:229
bool createNativeLayout(const AttributedString &)
Definition juce_linux_Fonts.cpp:108
float getWidth() const noexcept
Definition juce_TextLayout.h:223
void createStandardLayout(const AttributedString &)
Definition juce_TextLayout.cpp:571
const_iterator end() const
Definition juce_TextLayout.h:251
iterator end()
Definition juce_TextLayout.h:250
float height
Definition juce_TextLayout.h:261
OwnedArray< Line > lines
Definition juce_TextLayout.h:260
const_iterator cend() const
Definition juce_TextLayout.h:252
void draw(Graphics &, Rectangle< float > area) const
Definition juce_TextLayout.cpp:197
float getHeight() const noexcept
Definition juce_TextLayout.h:226
void createLayout(const AttributedString &, float maxWidth)
Definition juce_TextLayout.cpp:243
TextLayout()
Definition juce_TextLayout.cpp:140
const_iterator cbegin() const
Definition juce_TextLayout.h:247
const_iterator begin() const
Definition juce_TextLayout.h:246
DereferencingIterator< const Line *const * > const_iterator
Definition juce_TextLayout.h:242
unsigned d
Definition inflate.c:940
register unsigned i
Definition inflate.c:1575
unsigned f
Definition inflate.c:1572
#define JUCE_LEAK_DETECTOR(OwnerClass)
Definition juce_LeakedObjectDetector.h:138
#define JUCE_API
Definition juce_StandardHeader.h:152
float in
Definition lilv_test.c:1460
Definition carla_juce.cpp:31
Definition juce_Uuid.h:141
b
Definition crypt.c:628
#define const
Definition zconf.h:137