// Copyright 2023 The Flutter team. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. import 'dart:math'; import 'package:flutter/material.dart'; import '../components/components.dart'; // WonkyAnimPalette class is meant to be used with WonkyChar // to create animations based on variable font settings (aka 'axes'), // and a few basic settings like scale, rotation, etc. // The choice of variable font axes to implement in this class and // default min/max values for variable font axes are hard-coded // for Amstelvar font, packaged and used in this project. // Other variable fonts will have different available axes and min/max values. // // See articles on variable fonts at https://fonts.google.com/knowledge/topics/variable_fonts // See a list of variable fonts in the Google Fonts lineup, along with // an enumeration of variable font axes at https://fonts.google.com/variablefonts class WonkyAnimPalette { const WonkyAnimPalette({ Key? key, }); static const Curve defaultCurve = Curves.easeInOut; // basic (settings unrelated to variable font) static WonkyAnimSetting scale({ double from = 1, double to = 2, double startAt = 0, double endAt = 1, Curve curve = defaultCurve, }) { return WonkyAnimSetting( type: 'basic', property: 'scale', fromTo: RangeDbl(from: from, to: to), startAt: startAt, endAt: endAt, curve: curve, ); } static WonkyAnimSetting offsetX({ double from = -50, double to = 50, double startAt = 0, double endAt = 1, Curve curve = defaultCurve, }) { return WonkyAnimSetting( type: 'basic', property: 'offsetX', fromTo: RangeDbl(from: from, to: to), startAt: startAt, endAt: endAt, curve: curve, ); } static WonkyAnimSetting offsetY({ double from = -50, double to = 50, double startAt = 0, double endAt = 1, Curve curve = defaultCurve, }) { return WonkyAnimSetting( type: 'basic', property: 'offsetY', fromTo: RangeDbl(from: from, to: to), startAt: startAt, endAt: endAt, curve: curve, ); } static WonkyAnimSetting rotation({ double from = -pi, double to = pi, double startAt = 0, double endAt = 1, Curve curve = defaultCurve, }) { return WonkyAnimSetting( type: 'basic', property: 'rotation', fromTo: RangeDbl(from: from, to: to), startAt: startAt, endAt: endAt, curve: curve, ); } static WonkyAnimSetting color({ Color from = Colors.blue, Color to = Colors.red, double startAt = 0, double endAt = 1, Curve curve = defaultCurve, }) { return WonkyAnimSetting( type: 'basic', property: 'color', fromTo: RangeColor(from: from, to: to), startAt: startAt, endAt: endAt, curve: curve, ); } // font variants (variable font settings) static WonkyAnimSetting opticalSize({ double from = 8, double to = 144, double startAt = 0, double endAt = 1, Curve curve = defaultCurve, }) { return WonkyAnimSetting( type: 'fv', property: 'opsz', fromTo: RangeDbl(from: from, to: to), startAt: startAt, endAt: endAt, curve: curve, ); } static WonkyAnimSetting weight({ double from = 100, double to = 1000, double startAt = 0, double endAt = 1, Curve curve = defaultCurve, }) { return WonkyAnimSetting( type: 'fv', property: 'wght', fromTo: RangeDbl(from: from, to: to), startAt: startAt, endAt: endAt, curve: curve, ); } static WonkyAnimSetting grade({ double from = -300, double to = 500, double startAt = 0, double endAt = 1, Curve curve = defaultCurve, }) { return WonkyAnimSetting( type: 'fv', property: 'GRAD', fromTo: RangeDbl(from: from, to: to), startAt: startAt, endAt: endAt, curve: curve, ); } static WonkyAnimSetting slant({ double from = -10, double to = 0, double startAt = 0, double endAt = 1, Curve curve = defaultCurve, }) { return WonkyAnimSetting( type: 'fv', property: 'slnt', fromTo: RangeDbl(from: from, to: to), startAt: startAt, endAt: endAt, curve: curve, ); } static WonkyAnimSetting width({ double from = 50, double to = 125, double startAt = 0, double endAt = 1, Curve curve = defaultCurve, }) { return WonkyAnimSetting( type: 'fv', property: 'wdth', fromTo: RangeDbl(from: from, to: to), startAt: startAt, endAt: endAt, curve: curve, ); } static WonkyAnimSetting thickStroke({ double from = 18, double to = 263, double startAt = 0, double endAt = 1, Curve curve = defaultCurve, }) { return WonkyAnimSetting( type: 'fv', property: 'XOPQ', fromTo: RangeDbl(from: from, to: to), startAt: startAt, endAt: endAt, curve: curve, ); } static WonkyAnimSetting thinStroke({ double from = 15, double to = 132, double startAt = 0, double endAt = 1, Curve curve = defaultCurve, }) { return WonkyAnimSetting( type: 'fv', property: 'YOPQ', fromTo: RangeDbl(from: from, to: to), startAt: startAt, endAt: endAt, curve: curve, ); } static WonkyAnimSetting counterWd({ double from = 324, double to = 640, double startAt = 0, double endAt = 1, Curve curve = defaultCurve, }) { return WonkyAnimSetting( type: 'fv', property: 'XTRA', fromTo: RangeDbl(from: from, to: to), startAt: startAt, endAt: endAt, curve: curve, ); } static WonkyAnimSetting upperCaseHt({ double from = 500, double to = 1000, double startAt = 0, double endAt = 1, Curve curve = defaultCurve, }) { return WonkyAnimSetting( type: 'fv', property: 'YTUC', fromTo: RangeDbl(from: from, to: to), startAt: startAt, endAt: endAt, curve: curve, ); } static WonkyAnimSetting lowerCaseHt({ double from = 420, double to = 570, double startAt = 0, double endAt = 1, Curve curve = defaultCurve, }) { return WonkyAnimSetting( type: 'fv', property: 'YTLC', fromTo: RangeDbl(from: from, to: to), startAt: startAt, endAt: endAt, curve: curve, ); } static WonkyAnimSetting ascenderHt({ double from = 500, double to = 983, double startAt = 0, double endAt = 1, Curve curve = defaultCurve, }) { return WonkyAnimSetting( type: 'fv', property: 'YTAS', fromTo: RangeDbl(from: from, to: to), startAt: startAt, endAt: endAt, curve: curve, ); } static WonkyAnimSetting descenderDepth({ double from = -500, double to = -138, double startAt = 0, double endAt = 1, Curve curve = defaultCurve, }) { return WonkyAnimSetting( type: 'fv', property: 'YTDE', fromTo: RangeDbl(from: from, to: to), startAt: startAt, endAt: endAt, curve: curve, ); } static WonkyAnimSetting figureHt({ double from = 425, double to = 1000, double startAt = 0, double endAt = 1, Curve curve = defaultCurve, }) { return WonkyAnimSetting( type: 'fv', property: 'YTFI', fromTo: RangeDbl(from: from, to: to), startAt: startAt, endAt: endAt, curve: curve, ); } }