diff --git a/components/Buttons/src/ShapeThemer/MDCFloatingButtonShapeThemer.h b/components/Buttons/src/ShapeThemer/MDCFloatingButtonShapeThemer.h new file mode 100644 index 00000000000..3a02703a315 --- /dev/null +++ b/components/Buttons/src/ShapeThemer/MDCFloatingButtonShapeThemer.h @@ -0,0 +1,35 @@ +// Copyright 2018-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. + +#import + +#import "MaterialButtons.h" +#import "MaterialShapeLibrary.h" +#import "MaterialShapeScheme.h" + +/** + The Material Design shape system's themer for instances of MDCFloatingButton. + */ +@interface MDCFloatingButtonShapeThemer : NSObject + +/** + Applies a shape scheme's properties to an MDCFloatingButton. + + @param shapeScheme The shape scheme to apply to the component instance. + @param button A component instance to which the shape scheme should be applied. + */ ++ (void)applyShapeScheme:(nonnull id)shapeScheme + toButton:(nonnull MDCFloatingButton *)button; + +@end diff --git a/components/Buttons/src/ShapeThemer/MDCFloatingButtonShapeThemer.m b/components/Buttons/src/ShapeThemer/MDCFloatingButtonShapeThemer.m new file mode 100644 index 00000000000..680f8407542 --- /dev/null +++ b/components/Buttons/src/ShapeThemer/MDCFloatingButtonShapeThemer.m @@ -0,0 +1,32 @@ +// Copyright 2018-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. + +#import "MDCFloatingButtonShapeThemer.h" + +static const CGFloat kFloatingButtonBaselineShapePercentageValue = 0.5f; + +@implementation MDCFloatingButtonShapeThemer + ++ (void)applyShapeScheme:(nonnull id)shapeScheme + toButton:(nonnull MDCFloatingButton *)button { + // This is an override of the default scheme to fit the baseline values. + MDCRectangleShapeGenerator *rectangleShape = [[MDCRectangleShapeGenerator alloc] init]; + MDCCornerTreatment *cornerTreatment = + [MDCCornerTreatment cornerWithRadius:kFloatingButtonBaselineShapePercentageValue + valueType:MDCCornerTreatmentValueTypePercentage]; + [rectangleShape setCorners:cornerTreatment]; + button.shapeGenerator = rectangleShape; +} + +@end diff --git a/components/Buttons/src/ShapeThemer/MaterialButtons+ShapeThemer.h b/components/Buttons/src/ShapeThemer/MaterialButtons+ShapeThemer.h index 2fca51052ae..3b25204061f 100644 --- a/components/Buttons/src/ShapeThemer/MaterialButtons+ShapeThemer.h +++ b/components/Buttons/src/ShapeThemer/MaterialButtons+ShapeThemer.h @@ -13,3 +13,4 @@ // limitations under the License. #import "MDCButtonShapeThemer.h" +#import "MDCFloatingButtonShapeThemer.h" diff --git a/components/Buttons/tests/unit/ButtonsShapeThemerTests.m b/components/Buttons/tests/unit/ButtonsShapeThemerTests.m index e362c69b318..8331059af3c 100644 --- a/components/Buttons/tests/unit/ButtonsShapeThemerTests.m +++ b/components/Buttons/tests/unit/ButtonsShapeThemerTests.m @@ -56,6 +56,27 @@ - (void)testMDCButtonShapeThemer { self.shapeScheme.smallSurfaceShape.bottomRightCorner); } +- (void)testMDCFloatingButtonShapeThemer { + // Given + MDCFloatingButton *FAB = [[MDCFloatingButton alloc] initWithFrame:CGRectZero + shape:MDCFloatingButtonShapeDefault]; + self.shapeScheme.smallSurfaceShape = + [[MDCShapeCategory alloc] initCornersWithFamily:MDCShapeCornerFamilyAngled andSize:10]; + FAB.shapeGenerator = [[MDCRectangleShapeGenerator alloc] init]; + + // When + [MDCFloatingButtonShapeThemer applyShapeScheme:self.shapeScheme toButton:FAB]; + + // Then + MDCRectangleShapeGenerator *rect = (MDCRectangleShapeGenerator *)FAB.shapeGenerator; + MDCCornerTreatment *corner = [MDCCornerTreatment cornerWithRadius:0.5f]; + corner.valueType = MDCCornerTreatmentValueTypePercentage; + XCTAssertEqualObjects(rect.topLeftCorner, corner); + XCTAssertEqualObjects(rect.topRightCorner, corner); + XCTAssertEqualObjects(rect.bottomLeftCorner, corner); + XCTAssertEqualObjects(rect.bottomRightCorner, corner); +} + - (void)testBackgroundColorAfterButtonTheming { // Given UIColor *bgColor = [UIColor blueColor];