Corrects a bug in an font scaling test that assumed the test host had its
content sizes category set to `UIContentSizeCategoryLarge`.
Discovered while authoring #8476.
This method's logic exists frequently throughout our componentry and theming extensions as a mechanism for scaling a scalable font with the preferred content size category.
This change introduces a new API that can be invoked by each of the components and theming extensions that support Dynamic Type.
Part of https://github.com/material-components/material-components-ios/issues/7470
Prior to this change, mdc_scalingCurve was implemented using retain semantics insteaad of copy semantics. This potentially enabled a class of surprising bugs if mutable dictionaries were being assigned and then modified after the fact.
After this change, mdc_scalingCurve implements copy semantics as its public API defines.
The added test was verified to fail prior to this PR's change, and passes with the PR's change.
Closes https://github.com/material-components/material-components-ios/issues/7472
Adds a new scheme that vends fonts with an associated scaling curve.
This is a BREAKING CHANGE due to a new, required property in the MDCTypographyScheming protocol.
To easily migrate, clients can add the following method to their custom implementations of MDCTypographyScheming.
- (BOOL)mdc_adjustsFontForContentSizeCategory {
return NO;
}
MDCFontScalar allows us to add an associated scaling curve to UIFont instances. This scaling curve allows us to support Dynamic Type by creating differently sized fonts based on a UIContentSizeCategory.
MDCFontScaler offers similar, but limited, functionality as UIKit's UIFontMetrics.
Replacing all non-integral, single-precision floating point literals with double-precision values explicitly cast to CGFloat. For example, `0.1f` should become `(CGFloat)0.1`.
Regex used:
```
([0-9]*\.)([0-9]*?)([1-9]+)([0-9]*?)[fF]
```
PiperOrigin-RevId: 220683126
Our creativity knows no bounds.
### Find
```
/\*
*Copyright ([0-9]+)-present the Material Components for iOS authors\. All Rights Reserved\.
*
*Licensed under the Apache License,? Version 2\.0 \(the "License"\);
*you may not use this file except in compliance with the License\.
*You may obtain a copy of the License at
*
*http://www\.apache\.org/licenses/LICENSE-2\.0
*
*Unless required by applicable law or agreed to in writing,? software
*distributed under the License is distributed on an "AS IS" BASIS,?
*WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,? either express or implied\.
*See the License for the specific language governing permissions and
*limitations under the License\.
*\*/
```
```
/\*
*Copyright ([0-9]+)-present the Material Components for iOS authors\. All Rights Reserved\.
*Licensed under the Apache License, Version 2\.0 \(the "License"\);
*you may not use this file except in compliance with the License\.
*You may obtain a copy of the License at
*http://www\.apache\.org/licenses/LICENSE-2\.0
*Unless required by applicable law or agreed to in writing, software
*distributed under the License is distributed on an "AS IS" BASIS,
*WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied\.
*See the License for the specific language governing permissions and
*limitations under the License\.
*\*/
```
```
/\*
*Copyright ([0-9]+)-present the Material Components for iOS authors\. All Rights Reserved\.
*
*Licensed under the Apache License, Version 2\.0 \(the "License"\);
*you may not use this file except in compliance with the License\.
*You may obtain a copy of the License at
*
*http://www\.apache\.org/licenses/LICENSE-2\.0
*
*Unless required by applicable law or agreed to in writing, software
*distributed under the License is distributed on an "AS IS" BASIS,
*WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied\.
*See the License for the specific language governing permissions and
*limitations under the License\.
*\*/
```
```
/\*
*Copyright ([0-9]+)-present the Material Components for iOS authors\. All Rights Reserved\.
*
*Licensed under the Apache License, Version 2\.0 \(the "License"\);
*you may not use this file except in compliance with the License\.
*You may obtain a copy of the License at
*
*http://www\.apache\.org/licenses/LICENSE-2\.0
*
*Unless required by applicable law or agreed to in writing, software
*distributed under the License is distributed on an "AS IS" BASIS,
*WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied\.
*See the License for the specific language governing permissions and
*limitations under the License\.
*\*/
```
```
/\*
Copyright ([0-9]+)-present the Material Components for iOS authors\. All Rights Reserved\.
Licensed under the Apache License, Version 2\.0 \(the "License"\);
you may not use this file except in compliance with the License\.
You may obtain a copy of the License at
http://www\.apache\.org/licenses/LICENSE-2\.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied\.
See the License for the specific language governing permissions and
limitations under the License\.
\*/
```
```
/\*
Copyright ([0-9]+)-present the Material Components for iOS authors\. All Rights Reserved\.
+Licensed under the Apache License, Version 2\.0 \(the "License"\);
+you may not use this file except in compliance with the License\.
+You may obtain a copy of the License at
+http://www\.apache\.org/licenses/LICENSE-2\.0
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied\.
+See the License for the specific language governing permissions and
+limitations under the License\. *\*/
```
```
/\*
Copyright ([0-9]+)-present the Material Components for iOS authors\. All Rights Reserved\.
+Licensed under the Apache License, Version 2\.0 \(the "License"\);
+you may not use this file except in compliance with the License\.
+You may obtain a copy of the License at
+http://www\.apache\.org/licenses/LICENSE-2\.0
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied\.
+See the License for the specific language governing permissions and
+limitations under the License\.
*\*/
```
```
/\*
Copyright ([0-9]+)-present the Material Components for iOS authors\. All Rights Reserved\.
Licensed under the Apache License, Version 2\.0 \(the "License"\)
you may not use this file except in compliance with the License\.
You may obtain a copy of the License at
http://www\.apache\.org/licenses/LICENSE-2\.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied\.
See the License for the specific language governing permissions and
limitations under the License\.
\*/
```
```
/\*
Copyright ([0-9]+)-present the Material Components for iOS authors\. All Rights Reserved\.
Licensed under the Apache License, Version 2\.0 \(the "License"\);
you may not use this file except in compliance with the License\.
You may obtain a copy of the License at
http://www\.apache\.org/licenses/LICENSE-2\.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied\.
See the License for the specific language governing permissions and
limitations under the License\.
\*/
```
```
/\*
Copyright ([0-9]+)-present the Material Components for iOS authors\. All Rights Reserved\.
Licensed under the Apache License, Version 2\.0 \(the "License"\);
you may not use this file except in compliance with the License\.
You may obtain a copy of the License at
http://www\.apache\.org/licenses/LICENSE-2\.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied\.
See the License for the specific language governing permissions and
limitations under the License\.
\*/
```
### Replace
```
// Copyright $1-present the Material Components for iOS authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
```
Removes the need to copy-paste stanzas from other files anymore as we'll rely on #4478 to generate the correct stanza for us instead.
This was an automated change generated by running a find-and-replace regular expression:
```
/\*
Copyright ([0-9]+)-present the Material Components for iOS authors\. All Rights Reserved\.
Licensed under the Apache License, Version 2\.0 \(the "License"\);
you may not use this file except in compliance with the License\.
You may obtain a copy of the License at
http://www\.apache\.org/licenses/LICENSE-2\.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied\.
See the License for the specific language governing permissions and
limitations under the License\.
\*/
```
```
/\*
Copyright ([0-9]+)-present the Material Components for iOS authors\. All Rights Reserved\.
Licensed under the Apache License, Version 2\.0 \(the "License"\);
you may not use this file except in compliance with the License\.
You may obtain a copy of the License at
http://www\.apache\.org/licenses/LICENSE-2\.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied\.
See the License for the specific language governing permissions and
limitations under the License\.
\*/
```
```
/\*
Copyright ([0-9]+)-present the Material Components for iOS authors\. All Rights Reserved\.
Licensed under the Apache License, Version 2\.0 \(the "License"\);
you may not use this file except in compliance with the License\.
You may obtain a copy of the License at
http://www\.apache\.org/licenses/LICENSE-2\.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied\.
See the License for the specific language governing permissions and
limitations under the License\.
\*/
```
```
// Copyright $1-present the Material Components for iOS authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
```
* [TextFields] Adding todos for #4331
* [TextFields] Creating simple equality files.
* [TextFields] Prevents fonts that are almost the same but not quite from messing up the rendering.
* [Typography] Adding tests for font equality.
* [TextFields] Formatting.
* [Typography] Adding Math to the bazel file.
* [Typography] PR feedback.
* [Typography] PR feedback.
* [Typography] Comment.
* [Typography] PR feedback.
* [Typography] PR feedback.
* [Typography] Updating podspec.
* [Typography] Asserts for bazel.
* [Typography] Logging for tests.
* [Typography] Loggin.g
* [Typography] Removing logging and the deeper check.
* [Typography] Making simple equality a category.
* [TextFields] Using new method.
* [TextFields] Adding todos for #4331
* [TextFields] Creating simple equality files.
* [TextFields] Prevents fonts that are almost the same but not quite from messing up the rendering.
* [Typography] Adding tests for font equality.
* [TextFields] Formatting.
* [Typography] Adding Math to the bazel file.
* [Typography] PR feedback.
* [Typography] PR feedback.
* [Typography] Comment.
* [Typography] PR feedback.
* [Typography] PR feedback.
* [Typography] Updating podspec.
* [Typography] Asserts for bazel.
* [Typography] Logging for tests.
* [Typography] Loggin.g
* [Typography] Removing logging and the deeper check.
* [Tests] Suppress partial availability warnings
`- UIFont systemFontOfSize:weight:` was not introduced until iOS 8.2. Although
most of the code was already performing runtime checks on the selector, the
compiler still emits warnings for the use of the selectors.
Closes 2779
* Use systemFontOfSize: instead of fontWithName:size:
* [Typography] added boldItalic font to optional protocol of the TypographyFontLoading protocol
* revert cocoa pods version number
* fixed bold/regular variable name
* added comment for font size must be greater than 0
* [Typography] Added isLargeForContrastRatio so that we can make the font tell us if it is has large fonts.
* lint
* added fuller doc
* fixed system font loader to return optional protocol method isLargeForContrastRatio
* removed class method
* moved bold and italic to be optional properties.
* Update MDCTypography.m
* added UIFontWeightMedium weak check.
* [Typography] Removes the runtime inspection that uses Roboto if it can be found (via MDCRobotoFontLoader) (#712)
* [Typography] Removed runtime inspection for MDCRobotoFontLoader and using Roboto if found.
* corrected readme's
* [Typography] Removed runtime inspection for MDCRobotoFontLoader and using Roboto if found.
Summary:
Corrected readme's
Fixed tests
Reviewers: O1 Material components iOS!
Tags: #material_components_ios
Differential Revision: http://codereview.cc/D1672
* Switch to roboto in apppDel
* Removed default clause in Typography readme and added similar clause to RobotoFontLoader warning about font assets being added to your App
* sort imports for appdel
* fix app delegate imports
* removed roboto font loader form app del
* reorder swift objective c examples
* [Typography] Removed runtime inspection for MDCRobotoFontLoader and using Roboto if found.
* corrected readme's
* [Typography] Removed runtime inspection for MDCRobotoFontLoader and using Roboto if found.
Summary:
Corrected readme's
Fixed tests
Reviewers: O1 Material components iOS!
Tags: #material_components_ios
Differential Revision: http://codereview.cc/D1672
* Switch to roboto in apppDel
* Removed default clause in Typography readme and added similar clause to RobotoFontLoader warning about font assets being added to your App
* sort imports for appdel
Summary:
internal reference: cl/121301531
- Renamed some of the FontDiskLoader's APIs to be more readable.
- |registerFont| renamed to |load|
- |unregisterFont| renamed to |unload|
- |isRegistered| renamed to |loaded|
- Made FondDiskLoader thread safe.
- Made fontName and fontURL copy, readonly, nonnull properties.
- More comments across the board and other miscellaneous Objective C Readability issues.
- Readded to be deprecated setFontName and other APIs.
Internal implementation detail refactors:
- Removed references to 'resource' as that was part of the old name of the FontDiskLoader class.
- Using dispatch queue for |loaded| protection instead of @syncronized. Also using class method for |setLoaded|.
- Fixed tests to make them not set the name of the font
- Added more descriptive messages for tests
Reviewers: O1 Material components iOS, iangordon
Reviewed By: O1 Material components iOS, iangordon
Subscribers: iangordon
Tags: #material_components_ios
Differential Revision: http://codereview.cc/D1265
We can credit any contributor who would like to be credited this way, by adding them on request to the AUTHORS file. The copyright statement changes are required for this to work. Note that this has...
Summary:
We can credit any contributor who would like to be credited this way, by adding them on request to the AUTHORS file. The copyright statement changes are required for this to work. Note that this has no legal change, since the contributors always retained their copyright despite the copyright notice, but it's a nice acknowledgement.
Changed copyright statement to include non-Google authors.
Command run:
find * \( -name '*\.m' -or -name '*\.h' -or -name '*\.swift' \) -and -not \( -path 'scripts/external*' -name Pods \) -print0 | xargs -0 sed -i '' 's/Copyright \(.*\) Google Inc/Copyright \1 the Material Components for iOS authors/'
Added non-source files.
Command run:
grep -Rl 'Copyright .* Google Inc' * --exclude-dir scripts/external --null | xargs -0 sed -i '' 's/Copyright \(.*\) Google Inc/Copyright \1 the Material Components for iOS authors/'
Reviewers: featherless, O1 Material components iOS, randallli
Reviewed By: O1 Material components iOS, randallli
Tags: #material_components_ios
Differential Revision: http://codereview.cc/D1415
Summary:
Breaking changes:
Typography Component will no longer depends on Roboto Font Loader Component.
Instructions on how to fix:
Depend on Roboto Font Loader directly if you need to use it.
Reviewers: ajsecord, #mdc_ios_owners
Reviewed By: ajsecord, #mdc_ios_owners
Subscribers: lpromero, featherless
Projects: #material_components_ios
Differential Revision: http://codereview.cc/D459