Skip to content

Commit

Permalink
[Buttons] Addition of a FAB shape themer (#5131)
Browse files Browse the repository at this point in the history
This is an addition of a FAB shape themer.

This resolves issue #5055
  • Loading branch information
yarneo committed Sep 17, 2018
1 parent f233981 commit a87ad9a
Show file tree
Hide file tree
Showing 4 changed files with 89 additions and 0 deletions.
35 changes: 35 additions & 0 deletions 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 <UIKit/UIKit.h>

#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<MDCShapeScheming>)shapeScheme
toButton:(nonnull MDCFloatingButton *)button;

@end
32 changes: 32 additions & 0 deletions 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<MDCShapeScheming>)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
Expand Up @@ -13,3 +13,4 @@
// limitations under the License.

#import "MDCButtonShapeThemer.h"
#import "MDCFloatingButtonShapeThemer.h"
21 changes: 21 additions & 0 deletions components/Buttons/tests/unit/ButtonsShapeThemerTests.m
Expand Up @@ -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];
Expand Down

0 comments on commit a87ad9a

Please sign in to comment.