bsnes/hiro/cocoa/widget/widget.cpp
Tim Allen 47d4bd4d81 Update to v096r01 release.
byuu says:

Changelog:

- restructured the project and removed a whole bunch of old/dead
  directives from higan/GNUmakefile
- huge amounts of work on hiro/cocoa (compiles but ~70% of the
  functionality is commented out)
- fixed a masking error in my ARM CPU disassembler [Lioncash]
- SFC: decided to change board cic=(411,413) back to board
  region=(ntsc,pal) ... the former was too obtuse

If you rename Boolean (it's a problem with an include from ruby, not
from hiro) and disable all the ruby drivers, you can compile an
OS X binary, but obviously it's not going to do anything.

It's a boring WIP, I just wanted to push out the project structure
change now at the start of this WIP cycle.
2015-12-30 17:54:59 +11:00

86 lines
1.9 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 release];
}
}
/*
bool pWidget::enabled() {
@autoreleasepool {
return [cocoaView respondsToSelector:@selector(enabled)] && [cocoaView enabled];
}
}
*/
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