Skip to content

Commit 8d7f717

Browse files
committed
fix(ui-canvas): ios support for iosAccessibilityAdjustsFontSize
1 parent fca29cd commit 8d7f717

File tree

2 files changed

+52
-3
lines changed

2 files changed

+52
-3
lines changed

src/ui-canvas/canvas.ios.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import { CSSType, Color, Font, ImageSource, Utils, View } from '@nativescript/core';
33
import { FontStyleType, FontWeightType } from '@nativescript/core/ui/styling/font';
44
import { Canvas as ICanvas, FontMetrics as IFontMetrics, Matrix as IMatrix, Paint as IPaint, Path as IPath, PorterDuffXfermode as IPorterDuffXfermode, Rect as IRect, RectF as IRectF } from './canvas';
5+
import type { CanvasView } from './index.ios';
56
export * from './canvas.common';
67

78
const identity = CGAffineTransformIdentity;
@@ -1288,6 +1289,7 @@ export class Canvas implements ICanvas {
12881289
mWidth: number;
12891290
mHeight: number;
12901291
mScale = 1;
1292+
view: WeakRef<CanvasView>;
12911293

12921294
setBitmap(image) {
12931295
// if (image instanceof ImageSource) {
@@ -2263,10 +2265,11 @@ export class StaticLayout {
22632265
this.nsAttributedString = NSAttributedString.alloc().initWithString(text + '');
22642266
}
22652267
}
2266-
createAttributedStringToDraw() {
2268+
createAttributedStringToDraw(canvas?) {
22672269
if (this.mToDraw) {
22682270
return;
22692271
}
2272+
22702273
const nsAttributedString: NSMutableAttributedString = NSMutableAttributedString.alloc().initWithStringAttributes(this.nsAttributedString.string, this.paint.getDrawTextAttribs());
22712274

22722275
const paragraphStyle = NSMutableParagraphStyle.alloc().init();
@@ -2298,7 +2301,7 @@ export class StaticLayout {
22982301
draw(canvas: Canvas, maxHeight = Number.MAX_VALUE) {
22992302
canvas.startApplyPaint(this.paint);
23002303
const ctx = canvas.ctx;
2301-
this.createAttributedStringToDraw();
2304+
this.createAttributedStringToDraw(canvas);
23022305
// const attributes = this.paint.getDrawTextAttribs();
23032306
// if (this.align || this.ellipsize) {
23042307
// let paragraphStyle = attributes.objectForKey(NSParagraphStyleAttributeName) as NSMutableParagraphStyle;

src/ui-canvas/index.ios.ts

Lines changed: 47 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,29 @@
11
/* eslint-disable no-redeclare */
2-
import { CSSType, Utils } from '@nativescript/core';
2+
import { CSSType, Font, Utils } from '@nativescript/core';
33
import { Canvas, Paint } from './canvas.ios';
44
import { CanvasBase } from './index.common';
5+
import { iosAccessibilityAdjustsFontSizeProperty, iosAccessibilityMaxFontScaleProperty, iosAccessibilityMinFontScaleProperty } from '@nativescript/core/accessibility/accessibility-properties';
6+
import { fontScaleInternalProperty } from '@nativescript/core/ui/styling/style-properties';
57

68
export * from './canvas';
79

10+
export function adjustMinMaxFontScale(value, view) {
11+
let finalValue;
12+
if (view.iosAccessibilityAdjustsFontSize) {
13+
finalValue = value;
14+
15+
if (view.iosAccessibilityMinFontScale && view.iosAccessibilityMinFontScale > value) {
16+
finalValue = view.iosAccessibilityMinFontScale;
17+
}
18+
if (view.iosAccessibilityMaxFontScale && view.iosAccessibilityMaxFontScale < value) {
19+
finalValue = view.iosAccessibilityMaxFontScale;
20+
}
21+
} else {
22+
finalValue = 1.0;
23+
}
24+
return finalValue;
25+
}
26+
827
@NativeClass
928
export class UICustomCanvasView extends UIView {
1029
mCanvas: Canvas; // CGContextRef;
@@ -31,6 +50,7 @@ export class UICustomCanvasView extends UIView {
3150
}
3251
if (!this.mCanvas) {
3352
this.mCanvas = new Canvas(0, 0);
53+
this.mCanvas.view = this.mOwner;
3454
}
3555
this.mCanvas.setContext(context, size.width, size.height);
3656
if (owner.callDrawBeforeShapes) {
@@ -96,4 +116,30 @@ export class CanvasView extends CanvasBase {
96116
this.nativeViewProtected.setNeedsDisplay();
97117
}
98118
}
119+
120+
[fontScaleInternalProperty.setNative](value) {
121+
const font = this.style.fontInternal || Font.default.withFontSize(16);
122+
const finalValue = adjustMinMaxFontScale(value, this);
123+
124+
// Request layout on font scale as it's not done automatically
125+
if (font.fontScale !== finalValue) {
126+
this.style.fontInternal = font.withFontScale(finalValue);
127+
this.requestLayout();
128+
} else {
129+
if (!this.style.fontInternal) {
130+
this.style.fontInternal = font;
131+
}
132+
}
133+
}
134+
[iosAccessibilityAdjustsFontSizeProperty.setNative](value: boolean) {
135+
this[fontScaleInternalProperty.setNative](this.style.fontScaleInternal);
136+
}
137+
138+
[iosAccessibilityMinFontScaleProperty.setNative](value: number) {
139+
this[fontScaleInternalProperty.setNative](this.style.fontScaleInternal);
140+
}
141+
142+
[iosAccessibilityMaxFontScaleProperty.setNative](value: number) {
143+
this[fontScaleInternalProperty.setNative](this.style.fontScaleInternal);
144+
}
99145
}

0 commit comments

Comments
 (0)