1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
|
#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
|