59 clearSingletonInstance();
85 jassert (faceName.isNotEmpty());
90 for (
int i =
faces.size(); --
i >= 0;)
106 int replaceIndex = 0;
107 auto bestLastUsageCount = std::numeric_limits<size_t>::max();
109 for (
int i =
faces.size(); --
i >= 0;)
111 auto lu =
faces.getReference(
i).lastUsageCount;
113 if (bestLastUsageCount > lu)
115 bestLastUsageCount = lu;
120 auto& face =
faces.getReference (replaceIndex);
121 face.typefaceName = faceName;
122 face.typefaceStyle = faceStyle;
123 face.lastUsageCount = ++
counter;
130 jassert (face.typeface !=
nullptr);
135 return face.typeface;
170 TypefaceCache::getInstance()->setSize (numFontsToCache);
177 TypefaceCache::getInstance()->clear();
203 if (styleFlags ==
plain)
204 typeface = TypefaceCache::getInstance()->getDefaultFace();
214 typeface = TypefaceCache::getInstance()->getDefaultFace();
253 return tie() == other.tie();
258 return tie() < other.tie();
275 typeface = TypefaceCache::getInstance()->findTypefaceFor (
f);
403 :
font (std::move (other.font))
409 font = std::move (other.font);
417 return font == other.font
418 || *
font == *other.font;
421bool Font::operator!= (
const Font& other)
const noexcept
423 return ! operator== (other);
428 return *
a.font < *
b.font;
433 if (
font->getReferenceCount() > 1)
439 font->checkTypefaceSuitability (*
this);
461struct FontNamePreloader { FontNamePreloader() { getFontPlaceholderNames(); } };
462static FontNamePreloader fnp;
475 if (faceName !=
font->getTypefaceName())
480 font->setTypefaceName (faceName);
481 font->setTypeface (
nullptr);
488 if (typefaceStyle !=
font->getTypefaceStyle())
491 font->setTypefaceStyle (typefaceStyle);
492 font->setTypeface (
nullptr);
500 f.setTypefaceStyle (newStyle);
511 return font->getTypefacePtr (*
this);
529 #if JUCE_MAC || JUCE_IOS
543 #if JUCE_MAC || JUCE_IOS
552 f.setHeight (newHeight);
572 if (
font->getHeight() != newHeight)
575 font->setHeight (newHeight);
584 if (
font->getHeight() != newHeight)
587 font->setHorizontalScale (
font->getHorizontalScale() * (
font->getHeight() / newHeight));
588 font->setHeight (newHeight);
606 f.setStyleFlags (newFlags);
615 font->setTypeface (
nullptr);
623 const int newStyleFlags,
624 const float newHorizontalScale,
625 const float newKerningAmount)
629 if (
font->getHeight() != newHeight
630 ||
font->getHorizontalScale() != newHorizontalScale
631 ||
font->getKerning() != newKerningAmount)
634 font->setHeight (newHeight);
635 font->setHorizontalScale (newHorizontalScale);
636 font->setKerning (newKerningAmount);
645 const float newHorizontalScale,
646 const float newKerningAmount)
650 if (
font->getHeight() != newHeight
651 ||
font->getHorizontalScale() != newHorizontalScale
652 ||
font->getKerning() != newKerningAmount)
655 font->setHeight (newHeight);
656 font->setHorizontalScale (newHorizontalScale);
657 font->setKerning (newKerningAmount);
667 f.setHorizontalScale (newHorizontalScale);
674 font->setHorizontalScale (scaleFactor);
680 return font->getHorizontalScale();
685 return font->getKerning();
691 f.setExtraKerningFactor (extraKerning);
698 font->setKerning (extraKerning);
726 font->setUnderline (shouldBeUnderlined);
732 return font->getAscent (*
this);
751 if (
font->getKerning() != 0.0f)
752 w +=
font->getKerning() * (float)
text.length();
754 return w *
font->getHeight() *
font->getHorizontalScale();
761 if (
auto num = xOffsets.
size())
763 auto scale =
font->getHeight() *
font->getHorizontalScale();
766 if (
font->getKerning() != 0.0f)
768 for (
int i = 0;
i < num; ++
i)
769 x[
i] = (
x[
i] + (
float)
i *
font->getKerning()) * scale;
773 for (
int i = 0;
i < num; ++
i)
787 if (! styles.contains (
style,
true))
812 const int separator = fontDescription.
indexOfChar (
';');
#define noexcept
Definition DistrhoDefines.h:72
uint8_t a
Definition Spc_Cpu.h:141
Definition juce_Array.h:56
int size() const noexcept
Definition juce_Array.h:215
ElementType * getRawDataPointer() noexcept
Definition juce_Array.h:310
void add(const ElementType &newElement)
Definition juce_Array.h:418
Definition juce_CriticalSection.h:43
DeletedAtShutdown()
Definition juce_DeletedAtShutdown.cpp:34
Definition juce_Font.cpp:187
void setHorizontalScale(float x)
Definition juce_Font.cpp:343
float height
Definition juce_Font.cpp:370
SharedFontInternal() noexcept
Definition juce_Font.cpp:189
SharedFontInternal(const String &name, const String &style, float fontHeight) noexcept
Definition juce_Font.cpp:217
float getKerning() const
Definition juce_Font.cpp:309
bool getUnderline() const
Definition juce_Font.cpp:310
void setHeight(float x)
Definition juce_Font.cpp:337
float kerning
Definition juce_Font.cpp:370
float getHeight() const
Definition juce_Font.cpp:307
String typefaceStyle
Definition juce_Font.cpp:369
void setUnderline(bool x)
Definition juce_Font.cpp:361
Typeface::Ptr getTypefacePtr(const Font &f)
Definition juce_Font.cpp:269
float ascent
Definition juce_Font.cpp:370
void setTypefaceStyle(String x)
Definition juce_Font.cpp:331
SharedFontInternal(const String &name, int styleFlags, float fontHeight) noexcept
Definition juce_Font.cpp:207
bool underline
Definition juce_Font.cpp:371
void checkTypefaceSuitability(const Font &f)
Definition juce_Font.cpp:282
String getTypefaceName() const
Definition juce_Font.cpp:305
SharedFontInternal(const SharedFontInternal &other) noexcept
Definition juce_Font.cpp:233
SharedFontInternal(int styleFlags, float fontHeight) noexcept
Definition juce_Font.cpp:197
void setAscent(float x)
Definition juce_Font.cpp:355
Typeface::Ptr typeface
Definition juce_Font.cpp:368
String getTypefaceStyle() const
Definition juce_Font.cpp:306
String typefaceName
Definition juce_Font.cpp:369
void setTypeface(Typeface::Ptr x)
Definition juce_Font.cpp:319
float getHorizontalScale() const
Definition juce_Font.cpp:308
auto tie() const
Definition juce_Font.cpp:246
CriticalSection mutex
Definition juce_Font.cpp:373
float getAscent(const Font &f)
Definition juce_Font.cpp:290
void setTypefaceName(String x)
Definition juce_Font.cpp:325
SharedFontInternal(const Typeface::Ptr &face) noexcept
Definition juce_Font.cpp:224
void setKerning(float x)
Definition juce_Font.cpp:349
float horizontalScale
Definition juce_Font.cpp:370
Definition juce_Font.h:42
JUCE_NODISCARD Font withExtraKerningFactor(float extraKerning) const
Definition juce_Font.cpp:688
void setExtraKerningFactor(float extraKerning)
Definition juce_Font.cpp:695
static const String & getFallbackFontStyle()
Definition juce_Font.cpp:534
JUCE_NODISCARD Font withHeight(float height) const
Definition juce_Font.cpp:549
int getStyleFlags() const noexcept
Definition juce_Font.cpp:593
float getHeightInPoints() const
Definition juce_Font.cpp:738
static const String & getDefaultStyle()
Definition juce_Font.cpp:468
static const String & getFallbackFontName()
Definition juce_Font.cpp:520
void getGlyphPositions(const String &text, Array< int > &glyphs, Array< float > &xOffsets) const
Definition juce_Font.cpp:757
void setUnderline(bool shouldBeUnderlined)
Definition juce_Font.cpp:723
static float getDefaultMinimumHorizontalScaleFactor() noexcept
Definition juce_Font.cpp:45
Font(float fontHeight, int styleFlags=plain)
Definition juce_Font.cpp:381
static Typeface::Ptr getDefaultTypefaceForFont(const Font &font)
Definition juce_linux_Fonts.cpp:215
void setSizeAndStyle(float newHeight, int newStyleFlags, float newHorizontalScale, float newKerningAmount)
Definition juce_Font.cpp:622
static const String & getDefaultSansSerifFontName()
Definition juce_Font.cpp:465
static Font fromString(const String &fontDescription)
Definition juce_Font.cpp:810
float getDescent() const
Definition juce_Font.cpp:736
Typeface::Ptr getTypefacePtr() const
Definition juce_Font.cpp:509
float getHeight() const noexcept
Definition juce_Font.cpp:735
String getTypefaceName() const noexcept
Definition juce_Font.cpp:470
static const String & getDefaultMonospacedFontName()
Definition juce_Font.cpp:467
void setStyleFlags(int newFlags)
Definition juce_Font.cpp:610
String getTypefaceStyle() const noexcept
Definition juce_Font.cpp:471
String toString() const
Definition juce_Font.cpp:795
bool isItalic() const noexcept
Definition juce_Font.cpp:706
static StringArray findAllTypefaceStyles(const String &family)
Definition juce_linux_Fonts.cpp:103
float getStringWidthFloat(const String &text) const
Definition juce_Font.cpp:747
void dupeInternalIfShared()
Definition juce_Font.cpp:431
void setItalic(bool shouldBeItalic)
Definition juce_Font.cpp:716
void setBold(bool shouldBeBold)
Definition juce_Font.cpp:709
int getStringWidth(const String &text) const
Definition juce_Font.cpp:742
StringArray getAvailableStyles() const
Definition juce_Font.cpp:504
void setTypefaceStyle(const String &newStyle)
Definition juce_Font.cpp:486
void setHorizontalScale(float scaleFactor)
Definition juce_Font.cpp:671
void setTypefaceName(const String &faceName)
Definition juce_Font.cpp:473
float getAscent() const
Definition juce_Font.cpp:730
static bool compare(const Font &, const Font &) noexcept
Definition juce_Font.cpp:426
static StringArray findAllTypefaceNames()
Definition juce_linux_Fonts.cpp:98
static void findFonts(Array< Font > &results)
Definition juce_Font.cpp:779
JUCE_NODISCARD Font boldened() const
Definition juce_Font.cpp:702
JUCE_NODISCARD Font withTypefaceStyle(const String &newStyle) const
Definition juce_Font.cpp:497
JUCE_NODISCARD Font withStyle(int styleFlags) const
Definition juce_Font.cpp:603
bool isBold() const noexcept
Definition juce_Font.cpp:705
float getExtraKerningFactor() const noexcept
Definition juce_Font.cpp:683
JUCE_NODISCARD Font italicised() const
Definition juce_Font.cpp:703
@ bold
Definition juce_Font.h:51
@ underlined
Definition juce_Font.h:53
@ plain
Definition juce_Font.h:50
@ italic
Definition juce_Font.h:52
bool isUnderlined() const noexcept
Definition juce_Font.cpp:707
float getHeightToPointsFactor() const
Definition juce_Font.cpp:556
float getAscentInPoints() const
Definition juce_Font.cpp:739
float getDescentInPoints() const
Definition juce_Font.cpp:740
static const String & getDefaultSerifFontName()
Definition juce_Font.cpp:466
void setHeightWithoutChangingWidth(float newHeight)
Definition juce_Font.cpp:580
ReferenceCountedObjectPtr< SharedFontInternal > font
Definition juce_Font.h:483
void setHeight(float newHeight)
Definition juce_Font.cpp:568
JUCE_NODISCARD Font withHorizontalScale(float scaleFactor) const
Definition juce_Font.cpp:664
static void setDefaultMinimumHorizontalScaleFactor(float newMinimumScaleFactor) noexcept
Definition juce_Font.cpp:46
float getHorizontalScale() const noexcept
Definition juce_Font.cpp:678
Typeface * getTypeface() const
Definition juce_Font.cpp:514
JUCE_NODISCARD Font withPointHeight(float heightInPoints) const
Definition juce_Font.cpp:561
static void setFallbackFontName(const String &name)
Definition juce_Font.cpp:525
static void setFallbackFontStyle(const String &style)
Definition juce_Font.cpp:539
void checkTypefaceSuitability()
Definition juce_Font.cpp:437
Definition juce_ReadWriteLock.h:48
ReferenceCountedObject()=default
int getReferenceCount() const noexcept
Definition juce_ReferenceCountedObject.h:101
static void clearGlyphCache()
Definition juce_RenderingHelpers.h:2529
Definition juce_ScopedReadLock.h:52
Definition juce_ScopedWriteLock.h:52
Definition juce_StringArray.h:35
Definition juce_String.h:53
int indexOfChar(juce_wchar characterToLookFor) const noexcept
Definition juce_String.cpp:874
String trim() const
Definition juce_String.cpp:1656
float getFloatValue() const noexcept
Definition juce_String.cpp:1873
String trimStart() const
Definition juce_String.cpp:1674
String substring(int startIndex, int endIndex) const
Definition juce_String.cpp:1498
bool isNotEmpty() const noexcept
Definition juce_String.h:316
String fromFirstOccurrenceOf(StringRef substringToStartFrom, bool includeSubStringInResult, bool ignoreCase) const
Definition juce_String.cpp:1565
Definition juce_Font.cpp:50
size_t counter
Definition juce_Font.cpp:161
~TypefaceCache()
Definition juce_Font.cpp:57
void clear()
Definition juce_Font.cpp:72
Array< CachedFace > faces
Definition juce_Font.cpp:160
Typeface::Ptr getDefaultFace() const noexcept
Definition juce_Font.cpp:138
ReadWriteLock lock
Definition juce_Font.cpp:159
TypefaceCache()
Definition juce_Font.cpp:52
Typeface::Ptr defaultFace
Definition juce_Font.cpp:158
void setSize(const int numToCache)
Definition juce_Font.cpp:64
Typeface::Ptr findTypefaceFor(const Font &font)
Definition juce_Font.cpp:80
Definition juce_Typeface.h:47
virtual bool isSuitableForFont(const Font &) const
Definition juce_Typeface.h:83
Typeface(const String &name, const String &style) noexcept
Definition juce_Typeface.cpp:108
ReferenceCountedObjectPtr< Typeface > Ptr
Definition juce_Typeface.h:51
static void clearTypefaceCache()
Definition juce_Font.cpp:175
static void setTypefaceCacheSize(int numFontsToCache)
Definition juce_Font.cpp:168
UINT_D64 w
Definition inflate.c:942
register unsigned i
Definition inflate.c:1575
unsigned s
Definition inflate.c:1555
unsigned x[BMAX+1]
Definition inflate.c:1586
unsigned f
Definition inflate.c:1572
static const char * name
Definition pugl.h:1582
static int int height
Definition pugl.h:1594
#define JUCE_IMPLEMENT_SINGLETON(Classname)
Definition juce_Singleton.h:201
#define JUCE_DECLARE_SINGLETON(Classname, doNotRecreateAfterDeletion)
Definition juce_Singleton.h:184
Definition juce_Font.cpp:30
static float limitFontHeight(const float height) noexcept
Definition juce_Font.cpp:31
const float defaultFontHeight
Definition juce_Font.cpp:36
float minimumHorizontalScale
Definition juce_Font.cpp:37
String fallbackFontStyle
Definition juce_Font.cpp:39
String fallbackFont
Definition juce_Font.cpp:38
Definition carla_juce.cpp:31
CriticalSection::ScopedLockType ScopedLock
Definition juce_CriticalSection.h:186
void(* clearOpenGLGlyphCache)()
Definition juce_Font.cpp:173
Type jlimit(Type lowerLimit, Type upperLimit, Type valueToConstrain) noexcept
Definition juce_MathsFunctions.h:262
static const FontPlaceholderNames & getFontPlaceholderNames()
Definition juce_Font.cpp:451
GetTypefaceForFont juce_getTypefaceForFont
Definition juce_Font.cpp:43
Typeface::Ptr(*)(const Font &) GetTypefaceForFont
Definition juce_Font.cpp:42
jack_client_t client jack_client_t client jack_client_t client jack_client_t JackInfoShutdownCallback void arg jack_client_t jack_port_t port void func jack_client_t const char const char unsigned long flags
Definition juce_linux_JackAudio.cpp:69
Definition juce_Font.cpp:444
String serif
Definition juce_Font.cpp:446
String sans
Definition juce_Font.cpp:445
String mono
Definition juce_Font.cpp:447
String regular
Definition juce_Font.cpp:448
static bool isItalic(const String &style) noexcept
Definition juce_Typeface.cpp:51
static bool isBold(const String &style) noexcept
Definition juce_Typeface.cpp:46
static const char * getStyleName(const bool bold, const bool italic) noexcept
Definition juce_Typeface.cpp:31
Definition juce_Font.cpp:146
String typefaceStyle
Definition juce_Font.cpp:153
String typefaceName
Definition juce_Font.cpp:153
CachedFace() noexcept
Definition juce_Font.cpp:147
size_t lastUsageCount
Definition juce_Font.cpp:154
Typeface::Ptr typeface
Definition juce_Font.cpp:155
const char * text
Definition swell-functions.h:167
#define void
Definition unzip.h:396
#define const
Definition zconf.h:137