mirror of
https://github.com/zoriya/react-native-svg.git
synced 2025-12-21 06:15:15 +00:00
Finish TextPath
Finish TextPath step two: add `dy` support
This commit is contained in:
@@ -86,36 +86,36 @@
|
||||
CTFontRef runFont = CFDictionaryGetValue(attributes, kCTFontAttributeName);
|
||||
|
||||
CGFloat lineStartX;
|
||||
CGFloat lastX;
|
||||
RNSVGGlyphPoint computedPoint;
|
||||
for(CFIndex i = 0; i < runGlyphCount; i++) {
|
||||
RNSVGGlyphPoint computedPoint = [self getComputedGlyphPoint:i glyphOffset:positions[i]];
|
||||
computedPoint = [self getComputedGlyphPoint:i glyphOffset:positions[i]];
|
||||
|
||||
if (!i) {
|
||||
lineStartX = computedPoint.x;
|
||||
lastX = lineStartX;
|
||||
}
|
||||
|
||||
CGPathRef letter = CTFontCreatePathForGlyph(runFont, glyphs[i], nil);
|
||||
|
||||
CGAffineTransform textPathTransform = [self getTextPathTransform:computedPoint.x];
|
||||
|
||||
if (!textPathTransform.a || !textPathTransform.d) {
|
||||
return path;
|
||||
break;
|
||||
}
|
||||
|
||||
CGPathRef letter = CTFontCreatePathForGlyph(runFont, glyphs[i], nil);
|
||||
CGAffineTransform transform;
|
||||
|
||||
if (_bezierPath) {
|
||||
textPathTransform = CGAffineTransformConcat(CGAffineTransformMakeTranslation(0, computedPoint.y), textPathTransform);
|
||||
transform = CGAffineTransformScale(textPathTransform, 1.0, -1.0);
|
||||
} else {
|
||||
transform = CGAffineTransformTranslate(upsideDown, computedPoint.x, -computedPoint.y);
|
||||
}
|
||||
|
||||
CGPathAddPath(path, &transform, letter);
|
||||
lastX += CGPathGetBoundingBox(letter).size.width;
|
||||
CGPathRelease(letter);
|
||||
}
|
||||
|
||||
[self getTextRoot].lastX = lastX;
|
||||
[self getTextRoot].lastX = computedPoint.x;
|
||||
|
||||
return path;
|
||||
}
|
||||
|
||||
@@ -8,8 +8,7 @@ const fontRegExp = /^\s*((?:(?:normal|bold|italic)\s+)*)(?:(\d+(?:\.\d+)?)[ptexm
|
||||
const fontFamilyPrefix = /^[\s"']*/;
|
||||
const fontFamilySuffix = /[\s"']*$/;
|
||||
const spaceReg = /\s+/;
|
||||
const deltaReg = /^((-?\d*(\.\d+)?)+\s*)+$/;
|
||||
const commaReg = /,/;
|
||||
const commaReg = /,/g;
|
||||
|
||||
const anchors = {
|
||||
auto: 0,
|
||||
@@ -70,8 +69,12 @@ function extractFont(props) {
|
||||
}
|
||||
|
||||
function parseDelta(delta) {
|
||||
if (typeof delta === 'string' && deltaReg.test(delta)) {
|
||||
return delta.trim().split(spaceReg).map(d => +d);
|
||||
if (typeof delta === 'string') {
|
||||
if (isNaN(+delta)) {
|
||||
return delta.trim().replace(commaReg, ' ').split(spaceReg).map(d => +d || 0);
|
||||
} else {
|
||||
return [+delta];
|
||||
}
|
||||
} else if (typeof delta === 'number') {
|
||||
return [delta];
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user