bsnes/hiro/cocoa/widget/widget.cpp

79 lines
1.7 KiB
C++

#if defined(Hiro_Widget)
namespace hiro {
auto pWidget::construct() -> void {
@autoreleasepool {
if(!cocoaView) {
abstract = true;
cocoaView = [[NSView alloc] initWithFrame:NSMakeRect(0, 0, 0, 0)];
[cocoaView setHidden:true];
}
if(auto window = self().parentWindow(true)) {
if(auto p = window->self()) p->_append(self());
setEnabled(self().enabled(true));
setFont(self().font(true));
setVisible(self().visible(true));
}
}
}
auto pWidget::destruct() -> void {
@autoreleasepool {
[cocoaView removeFromSuperview];
[cocoaView release];
}
}
auto pWidget::focused() const -> bool {
@autoreleasepool {
return cocoaView == [[cocoaView window] firstResponder];
}
}
auto pWidget::setEnabled(bool enabled) -> void {
if(abstract) enabled = false;
@autoreleasepool {
if([cocoaView respondsToSelector:@selector(setEnabled:)]) {
[cocoaView setEnabled:enabled];
}
}
}
auto pWidget::setFocused() -> void {
@autoreleasepool {
[[cocoaView window] makeFirstResponder:cocoaView];
}
}
auto pWidget::setFont(const Font& font) -> void {
@autoreleasepool {
if([cocoaView respondsToSelector:@selector(setFont:)]) {
[cocoaView setFont:pFont::create(font)];
}
}
}
auto pWidget::setGeometry(Geometry geometry) -> void {
@autoreleasepool {
CGFloat windowHeight = [[cocoaView superview] frame].size.height;
[cocoaView setFrame:NSMakeRect(geometry.x(), windowHeight - geometry.y() - geometry.height(), geometry.width(), geometry.height())];
[[cocoaView superview] setNeedsDisplay:YES];
}
self().doSize();
}
auto pWidget::setVisible(bool visible) -> void {
if(abstract) visible = false;
@autoreleasepool {
[cocoaView setHidden:!visible];
}
}
}
#endif