Files
keyboard/CustomKeyboard/View/KBKeyButton.m

107 lines
3.6 KiB
Mathematica
Raw Normal View History

2025-10-28 10:18:10 +08:00
//
// KBKeyButton.m
// CustomKeyboard
//
#import "KBKeyButton.h"
#import "KBKey.h"
2025-11-04 21:01:46 +08:00
#import "KBSkinManager.h"
2025-10-28 10:18:10 +08:00
2025-11-18 20:53:47 +08:00
@interface KBKeyButton ()
@property (nonatomic, strong) UIImageView *iconView;
@end
2025-10-28 10:18:10 +08:00
@implementation KBKeyButton
- (instancetype)initWithFrame:(CGRect)frame {
if (self = [super initWithFrame:frame]) {
[self applyDefaultStyle];
}
return self;
}
- (void)applyDefaultStyle {
2025-11-04 21:01:46 +08:00
self.titleLabel.font = [UIFont systemFontOfSize:18 weight:UIFontWeightSemibold];
KBSkinTheme *t = [KBSkinManager shared].current;
[self setTitleColor:t.keyTextColor forState:UIControlStateNormal];
[self setTitleColor:t.keyTextColor forState:UIControlStateHighlighted];
self.backgroundColor = t.keyBackground;
2025-10-28 10:18:10 +08:00
self.layer.cornerRadius = 6.0; //
self.layer.masksToBounds = NO;
self.layer.shadowColor = [UIColor colorWithWhite:0 alpha:0.1].CGColor; //
self.layer.shadowOpacity = 1.0;
self.layer.shadowOffset = CGSizeMake(0, 1);
self.layer.shadowRadius = 1.5;
2025-10-28 20:11:40 +08:00
[self refreshStateAppearance];
2025-11-18 20:53:47 +08:00
//
if (!self.iconView) {
UIImageView *iv = [[UIImageView alloc] initWithFrame:CGRectZero];
//
iv.contentMode = UIViewContentModeScaleAspectFill;
iv.clipsToBounds = YES;
iv.translatesAutoresizingMaskIntoConstraints = NO;
[self addSubview:iv];
//
[NSLayoutConstraint activateConstraints:@[
[iv.topAnchor constraintEqualToAnchor:self.topAnchor],
[iv.bottomAnchor constraintEqualToAnchor:self.bottomAnchor],
[iv.leadingAnchor constraintEqualToAnchor:self.leadingAnchor],
[iv.trailingAnchor constraintEqualToAnchor:self.trailingAnchor],
]];
self.iconView = iv;
//
self.titleEdgeInsets = UIEdgeInsetsZero;
[self bringSubviewToFront:self.titleLabel];
}
}
- (void)setKey:(KBKey *)key {
_key = key;
//
[self applyThemeForCurrentKey];
2025-10-28 10:18:10 +08:00
}
- (void)setHighlighted:(BOOL)highlighted {
[super setHighlighted:highlighted];
2025-10-28 20:11:40 +08:00
//
if (self.isSelected) {
self.alpha = 1.0;
} else {
2025-10-28 21:27:01 +08:00
self.alpha = highlighted ? 0.2 : 1.0;
2025-10-28 20:11:40 +08:00
}
}
- (void)setSelected:(BOOL)selected {
[super setSelected:selected];
[self refreshStateAppearance];
}
- (void)refreshStateAppearance {
// Shift/CapsLock
2025-11-04 21:01:46 +08:00
KBSkinTheme *t = [KBSkinManager shared].current;
2025-10-28 20:11:40 +08:00
if (self.isSelected) {
2025-11-04 21:01:46 +08:00
self.backgroundColor = t.keyHighlightBackground ?: t.keyBackground;
2025-10-28 20:11:40 +08:00
} else {
2025-11-04 21:01:46 +08:00
self.backgroundColor = t.keyBackground;
2025-10-28 20:11:40 +08:00
}
2025-10-28 10:18:10 +08:00
}
2025-11-18 20:53:47 +08:00
- (void)applyThemeForCurrentKey {
//
NSString *identifier = self.key.identifier;
BOOL hideText = [[KBSkinManager shared] shouldHideKeyTextForIdentifier:identifier];
self.titleLabel.hidden = hideText;
//
// - identifier: letter_q
// - caseVariant: 0/1/2 => //
NSInteger variant = (NSInteger)self.key.caseVariant;
UIImage *iconImg = [[KBSkinManager shared] iconImageForKeyIdentifier:identifier caseVariant:variant];
self.iconView.image = iconImg;
self.iconView.hidden = (iconImg == nil);
}
2025-10-28 10:18:10 +08:00
@end