From c82197f4089a9e1c9f46ddd411d8029d7de2c309 Mon Sep 17 00:00:00 2001 From: Pietro Gagliardi Date: Fri, 9 Mar 2018 18:01:23 -0500 Subject: [PATCH] And fixed other compile errors. Of course I forgot to add uiFontButton back in (I wanted to properly comment that first :/ ). Now for linker errors, which may result in some warning fixes along the way. --- darwin/drawtext.m | 8 ++--- darwin/fontmatch.m | 18 +++++------ darwin/fonttraits.m | 68 +++++++++++++++++++++--------------------- darwin/fontvariation.m | 10 +++---- darwin/opentype.m | 2 +- old_ui_attrstr.h | 8 ----- ui_attrstr.h | 8 +++++ 7 files changed, 61 insertions(+), 61 deletions(-) diff --git a/darwin/drawtext.m b/darwin/drawtext.m index ed200f76..21c6e45e 100644 --- a/darwin/drawtext.m +++ b/darwin/drawtext.m @@ -6,7 +6,7 @@ // problem: for a CTFrame made from an empty string, the CTLine array will be empty, and we will crash when doing anything requiring a CTLine // solution: for those cases, maintain a separate framesetter just for computing those things // in the usual case, the separate copy will just be identical to the regular one, with extra references to everything within -@interface uiprivTextFrame { +@interface uiprivTextFrame : NSObject { CFAttributedStringRef attrstr; NSArray *backgroundBlocks; CTFramesetterRef framesetter; @@ -25,7 +25,7 @@ - (id)initWithLayoutParams:(uiDrawTextLayoutParams *)p { CFRange range; - CGFloat width; + CGFloat cgwidth; CFRange unused; CGRect rect; @@ -54,7 +54,7 @@ rect.origin = CGPointZero; rect.size = self->size; self->path = CGPathCreateWithRect(rect, NULL); - self->frame = CTFramesetterCreateFrame(tl->framesetter, + self->frame = CTFramesetterCreateFrame(self->framesetter, range, self->path, // TODO kCTFramePathWidthAttributeName? @@ -144,7 +144,7 @@ uiDrawTextLayout *uiDrawNewTextLayout(uiDrawTextLayoutParams *p) tl = uiprivNew(uiDrawTextLayout); tl->frame = [[uiprivTextFrame alloc] initWithLayoutParams:p]; - if (uiAttributedStringLength(p->String) != 0) + if (uiAttributedStringLen(p->String) != 0) tl->forLines = [tl->frame retain]; else { uiAttributedString *space; diff --git a/darwin/fontmatch.m b/darwin/fontmatch.m index 2c3de4bc..9645662f 100644 --- a/darwin/fontmatch.m +++ b/darwin/fontmatch.m @@ -275,9 +275,9 @@ FONTNAME(familyName, struct closeness { CFIndex index; - uiDrawTextWeight weight; + uiTextWeight weight; double italic; - uiDrawTextStretch stretch; + uiTextStretch stretch; double distance; }; @@ -287,14 +287,14 @@ static const double italicClosenessNormal[] = { 0, 1, 1 }; static const double italicClosenessOblique[] = { 1, 0, 0.5 }; static const double italicClosenessItalic[] = { 1, 0.5, 0 }; static const double *italicClosenesses[] = { - [uiDrawTextItalicNormal] = italicClosenessNormal, - [uiDrawTextItalicOblique] = italicClosenessOblique, - [uiDrawTextItalicItalic] = italicClosenessItalic, + [uiTextItalicNormal] = italicClosenessNormal, + [uiTextItalicOblique] = italicClosenessOblique, + [uiTextItalicItalic] = italicClosenessItalic, }; // Core Text doesn't seem to differentiate between Italic and Oblique. // Pango's Core Text code just does a g_strrstr() (backwards case-sensitive search) for "Oblique" in the font's style name (see https://git.gnome.org/browse/pango/tree/pango/pangocoretext-fontmap.c); let's do that too I guess -static uiDrawTextItalic guessItalicOblique(uiprivFontStyleData *d) +static uiTextItalic guessItalicOblique(uiprivFontStyleData *d) { CFStringRef styleName; BOOL isOblique; @@ -309,8 +309,8 @@ static uiDrawTextItalic guessItalicOblique(uiprivFontStyleData *d) isOblique = YES; } if (isOblique) - return uiDrawTextItalicOblique; - return uiDrawTextItalicItalic; + return uiTextItalicOblique; + return uiTextItalicItalic; } // Italics are hard because Core Text does NOT distinguish between italic and oblique. @@ -320,7 +320,7 @@ static uiDrawTextItalic guessItalicOblique(uiprivFontStyleData *d) // TODO there is still one catch that might matter from a user's POV: the reverse is not true — the italic bit can be set even if the style of the font face/subfamily/style isn't named as Italic (for example, script typefaces like Adobe's Palace Script MT Std); I don't know what to do about this... I know how to start: find a script font that has an italic form (Adobe's Palace Script MT Std does not; only Regular and Semibold) static void setItalic(uiprivFontStyleData *d, uiFontDescriptor *out) { - out->Italic = uiDrawTextItalicNormal; + out->Italic = uiTextItalicNormal; if (([d symbolicTraits] & kCTFontItalicTrait) != 0) out->Italic = guessItalicOblique(d); } diff --git a/darwin/fonttraits.m b/darwin/fonttraits.m index b3989c37..a51492c9 100644 --- a/darwin/fonttraits.m +++ b/darwin/fonttraits.m @@ -31,18 +31,18 @@ static BOOL fontRegistered(uiprivFontStyleData *d) // Core Text does (usWidthClass / 10) - 0.5 here. // This roughly maps to our values with increments of 0.1, except for the fact 0 and 10 are allowed by Core Text, despite being banned by TrueType and OpenType themselves. // We'll just treat them as identical to 1 and 9, respectively. -static const uiDrawTextStretch os2WidthsToStretches[] = { - uiDrawTextStretchUltraCondensed, - uiDrawTextStretchUltraCondensed, - uiDrawTextStretchExtraCondensed, - uiDrawTextStretchCondensed, - uiDrawTextStretchSemiCondensed, - uiDrawTextStretchNormal, - uiDrawTextStretchSemiExpanded, - uiDrawTextStretchExpanded, - uiDrawTextStretchExtraExpanded, - uiDrawTextStretchUltraExpanded, - uiDrawTextStretchUltraExpanded, +static const uiTextStretch os2WidthsToStretches[] = { + uiTextStretchUltraCondensed, + uiTextStretchUltraCondensed, + uiTextStretchExtraCondensed, + uiTextStretchCondensed, + uiTextStretchSemiCondensed, + uiTextStretchNormal, + uiTextStretchSemiExpanded, + uiTextStretchExpanded, + uiTextStretchExtraExpanded, + uiTextStretchUltraExpanded, + uiTextStretchUltraExpanded, }; static const CFStringRef exceptions[] = { @@ -174,50 +174,50 @@ void uiprivProcessFontTraits(uiprivFontStyleData *d, uiFontDescriptor *out) if (!hasWeight) // TODO this scale is a bit lopsided if (weight <= -0.7) - out->Weight = uiDrawTextWeightThin; + out->Weight = uiTextWeightThin; else if (weight <= -0.5) - out->Weight = uiDrawTextWeightUltraLight; + out->Weight = uiTextWeightUltraLight; else if (weight <= -0.3) - out->Weight = uiDrawTextWeightLight; + out->Weight = uiTextWeightLight; else if (weight <= -0.23) { - out->Weight = uiDrawTextWeightBook; + out->Weight = uiTextWeightBook; if (shouldReallyBeThin(d)) - out->Weight = uiDrawTextWeightThin; + out->Weight = uiTextWeightThin; } else if (weight <= 0.0) - out->Weight = uiDrawTextWeightNormal; + out->Weight = uiTextWeightNormal; else if (weight <= 0.23) - out->Weight = uiDrawTextWeightMedium; + out->Weight = uiTextWeightMedium; else if (weight <= 0.3) - out->Weight = uiDrawTextWeightSemiBold; + out->Weight = uiTextWeightSemiBold; else if (weight <= 0.4) - out->Weight = uiDrawTextWeightBold; + out->Weight = uiTextWeightBold; else if (weight <= 0.5) - out->Weight = uiDrawTextWeightUltraBold; + out->Weight = uiTextWeightUltraBold; else if (weight <= 0.7) - out->Weight = uiDrawTextWeightHeavy; + out->Weight = uiTextWeightHeavy; else - out->Weight = uiDrawTextWeightUltraHeavy; + out->Weight = uiTextWeightUltraHeavy; if (!hasWidth) // TODO this scale is a bit lopsided if (width <= -0.7) { - out->Stretch = uiDrawTextStretchUltraCondensed; + out->Stretch = uiTextStretchUltraCondensed; if (shouldReallyBeSemiCondensed(d)) - out->Stretch = uiDrawTextStretchSemiCondensed; + out->Stretch = uiTextStretchSemiCondensed; } else if (width <= -0.5) - out->Stretch = uiDrawTextStretchExtraCondensed; + out->Stretch = uiTextStretchExtraCondensed; else if (width <= -0.2) - out->Stretch = uiDrawTextStretchCondensed; + out->Stretch = uiTextStretchCondensed; else if (width <= -0.1) - out->Stretch = uiDrawTextStretchSemiCondensed; + out->Stretch = uiTextStretchSemiCondensed; else if (width <= 0.0) - out->Stretch = uiDrawTextStretchNormal; + out->Stretch = uiTextStretchNormal; else if (width <= 0.1) - out->Stretch = uiDrawTextStretchSemiExpanded; + out->Stretch = uiTextStretchSemiExpanded; else if (width <= 0.2) - out->Stretch = uiDrawTextStretchExpanded; + out->Stretch = uiTextStretchExpanded; else if (width <= 0.6) - out->Stretch = uiDrawTextStretchExtraExpanded; + out->Stretch = uiTextStretchExtraExpanded; else - out->Stretch = uiDrawTextStretchUltraExpanded; + out->Stretch = uiTextStretchUltraExpanded; } diff --git a/darwin/fontvariation.m b/darwin/fontvariation.m index d59f0c7a..60a124bd 100644 --- a/darwin/fontvariation.m +++ b/darwin/fontvariation.m @@ -310,8 +310,8 @@ void uiprivProcessFontVariation(uiprivFontStyleData *d, NSDictionary *axisDict, CFDictionaryRef var; double v; - out->Weight = uiDrawTextWeightNormal; - out->Stretch = uiDrawTextStretchNormal; + out->Weight = uiTextWeightNormal; + out->Stretch = uiTextStretchNormal; var = [d variation]; @@ -320,14 +320,14 @@ void uiprivProcessFontVariation(uiprivFontStyleData *d, NSDictionary *axisDict, // we want a linear value between 0 and 1000 with 400 being normal if (v < 0) { v += 1; - out->Weight = (uiDrawTextWeight) (v * 400); + out->Weight = (uiTextWeight) (v * 400); } else if (v > 0) - out->Weight += (uiDrawTextWeight) (v * 600); + out->Weight += (uiTextWeight) (v * 600); } if (tryAxis(axisDict, var, fvarAxisKey(fvarWidth), &v)) { // likewise, but with stretches, we go from 0 to 8 with 4 being directly between the two, so this is sufficient v += 1; - out->Stretch = (uiDrawTextStretch) (v * 4); + out->Stretch = (uiTextStretch) (v * 4); } } diff --git a/darwin/opentype.m b/darwin/opentype.m index 079197ed..84dbde36 100644 --- a/darwin/opentype.m +++ b/darwin/opentype.m @@ -92,7 +92,7 @@ static uiForEach otfArrayForEachOT(const uiOpenTypeFeatures *otf, char a, char b p.valueValue = (const SInt32 *) (&value); addCTFeatureEntry(&p); - CFRelease(strTag); + CFRelease(tagstr); return uiForEachContinue; } diff --git a/old_ui_attrstr.h b/old_ui_attrstr.h index 5dfc921c..75df996d 100644 --- a/old_ui_attrstr.h +++ b/old_ui_attrstr.h @@ -61,11 +61,3 @@ _UI_EXTERN double uiDrawTextLayoutByteLocationInLine(uiDrawTextLayout *tl, size_ _UI_EXTERN void uiDrawCaret(uiDrawContext *c, double x, double y, uiDrawTextLayout *layout, size_t pos, int *line); // TODO allow blinking // TODO allow secondary carets - -typedef struct uiFontButton uiFontButton; -#define uiFontButton(this) ((uiFontButton *) (this)) -// TODO have a function that sets an entire font descriptor to a range in a uiAttributedString at once, for SetFont? -_UI_EXTERN void uiFontButtonFont(uiFontButton *b, uiDrawFontDescriptor *desc); -// TOOD SetFont, mechanics -_UI_EXTERN void uiFontButtonOnChanged(uiFontButton *b, void (*f)(uiFontButton *, void *), void *data); -_UI_EXTERN uiFontButton *uiNewFontButton(void); diff --git a/ui_attrstr.h b/ui_attrstr.h index 3a22e6ed..6dd738ee 100644 --- a/ui_attrstr.h +++ b/ui_attrstr.h @@ -495,3 +495,11 @@ _UI_EXTERN void uiDrawTextLayoutLineByteRange(uiDrawTextLayout *tl, int line, si // TODO metrics functions // TODO number of lines visible for clipping rect, range visible for clipping rect? + +typedef struct uiFontButton uiFontButton; +#define uiFontButton(this) ((uiFontButton *) (this)) +// TODO have a function that sets an entire font descriptor to a range in a uiAttributedString at once, for SetFont? +_UI_EXTERN void uiFontButtonFont(uiFontButton *b, uiFontDescriptor *desc); +// TOOD SetFont, mechanics +_UI_EXTERN void uiFontButtonOnChanged(uiFontButton *b, void (*f)(uiFontButton *, void *), void *data); +_UI_EXTERN uiFontButton *uiNewFontButton(void);