2015-12-30 06:41:46 +00:00
|
|
|
#if defined(Hiro_Viewport)
|
|
|
|
|
2013-03-19 08:48:50 +00:00
|
|
|
@implementation CocoaViewport : NSView
|
|
|
|
|
2015-12-30 06:41:46 +00:00
|
|
|
-(id) initWith:(hiro::mViewport&)viewportReference {
|
2013-03-19 08:48:50 +00:00
|
|
|
if(self = [super initWithFrame:NSMakeRect(0, 0, 0, 0)]) {
|
|
|
|
viewport = &viewportReference;
|
|
|
|
}
|
|
|
|
return self;
|
|
|
|
}
|
|
|
|
|
2019-07-26 15:52:29 +00:00
|
|
|
-(void) resetCursorRects {
|
|
|
|
if(auto mouseCursor = NSMakeCursor(label->mouseCursor())) {
|
|
|
|
[self addCursorRect:self.bounds cursor:mouseCursor];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2013-03-21 12:59:01 +00:00
|
|
|
-(void) drawRect:(NSRect)rect {
|
|
|
|
[[NSColor blackColor] setFill];
|
|
|
|
NSRectFillUsingOperation(rect, NSCompositeSourceOver);
|
|
|
|
}
|
|
|
|
|
|
|
|
-(BOOL) acceptsFirstResponder {
|
|
|
|
return YES;
|
|
|
|
}
|
|
|
|
|
2013-07-29 09:42:45 +00:00
|
|
|
-(NSDragOperation) draggingEntered:(id<NSDraggingInfo>)sender {
|
|
|
|
return DropPathsOperation(sender);
|
|
|
|
}
|
|
|
|
|
|
|
|
-(BOOL) performDragOperation:(id<NSDraggingInfo>)sender {
|
2016-07-01 11:58:12 +00:00
|
|
|
auto paths = DropPaths(sender);
|
2016-05-04 10:07:13 +00:00
|
|
|
if(!paths) return NO;
|
2015-12-30 06:41:46 +00:00
|
|
|
viewport->doDrop(paths);
|
2013-07-29 09:42:45 +00:00
|
|
|
return YES;
|
|
|
|
}
|
|
|
|
|
2013-03-21 12:59:01 +00:00
|
|
|
-(void) keyDown:(NSEvent*)event {
|
|
|
|
}
|
|
|
|
|
|
|
|
-(void) keyUp:(NSEvent*)event {
|
2013-03-19 08:48:50 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
@end
|
|
|
|
|
2015-12-30 06:41:46 +00:00
|
|
|
namespace hiro {
|
2013-03-15 13:11:33 +00:00
|
|
|
|
2015-12-30 06:41:46 +00:00
|
|
|
auto pViewport::construct() -> void {
|
2013-07-29 09:42:45 +00:00
|
|
|
@autoreleasepool {
|
2015-12-30 06:41:46 +00:00
|
|
|
cocoaView = cocoaViewport = [[CocoaViewport alloc] initWith:self()];
|
|
|
|
pWidget::construct();
|
2013-07-29 09:42:45 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2015-12-30 06:41:46 +00:00
|
|
|
auto pViewport::destruct() -> void {
|
2013-03-19 08:48:50 +00:00
|
|
|
@autoreleasepool {
|
2016-01-07 08:14:33 +00:00
|
|
|
[cocoaView removeFromSuperview];
|
2015-12-30 06:41:46 +00:00
|
|
|
[cocoaView release];
|
2013-03-19 08:48:50 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
Update to v099r14 release.
byuu says:
Changelog:
- (u)int(max,ptr) abbreviations removed; use _t suffix now [didn't feel
like they were contributing enough to be worth it]
- cleaned up nall::integer,natural,real functionality
- toInteger, toNatural, toReal for parsing strings to numbers
- fromInteger, fromNatural, fromReal for creating strings from numbers
- (string,Markup::Node,SQL-based-classes)::(integer,natural,real)
left unchanged
- template<typename T> numeral(T value, long padding, char padchar)
-> string for print() formatting
- deduces integer,natural,real based on T ... cast the value if you
want to override
- there still exists binary,octal,hex,pointer for explicit print()
formatting
- lstring -> string_vector [but using lstring = string_vector; is
declared]
- would be nice to remove the using lstring eventually ... but that'd
probably require 10,000 lines of changes >_>
- format -> string_format [no using here; format was too ambiguous]
- using integer = Integer<sizeof(int)*8>; and using natural =
Natural<sizeof(uint)*8>; declared
- for consistency with boolean. These three are meant for creating
zero-initialized values implicitly (various uses)
- R65816::io() -> idle() and SPC700::io() -> idle() [more clear; frees
up struct IO {} io; naming]
- SFC CPU, PPU, SMP use struct IO {} io; over struct (Status,Registers) {}
(status,registers); now
- still some CPU::Status status values ... they didn't really fit into
IO functionality ... will have to think about this more
- SFC CPU, PPU, SMP now use step() exclusively instead of addClocks()
calling into step()
- SFC CPU joypad1_bits, joypad2_bits were unused; killed them
- SFC PPU CGRAM moved into PPU::Screen; since nothing else uses it
- SFC PPU OAM moved into PPU::Object; since nothing else uses it
- the raw uint8[544] array is gone. OAM::read() constructs values from
the OAM::Object[512] table now
- this avoids having to determine how we want to sub-divide the two
OAM memory sections
- this also eliminates the OAM::synchronize() functionality
- probably more I'm forgetting
The FPS fluctuations are driving me insane. This WIP went from 128fps to
137fps. Settled on 133.5fps for the final build. But nothing I changed
should have affected performance at all. This level of fluctuation makes
it damn near impossible to know whether I'm speeding things up or slowing
things down with changes.
2016-07-01 11:50:32 +00:00
|
|
|
auto pViewport::handle() const -> uintptr_t {
|
|
|
|
return (uintptr_t)cocoaViewport;
|
2015-12-30 06:41:46 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
auto pViewport::setDroppable(bool droppable) -> void {
|
2013-03-19 08:48:50 +00:00
|
|
|
@autoreleasepool {
|
2015-12-30 06:41:46 +00:00
|
|
|
if(droppable) {
|
|
|
|
[cocoaViewport registerForDraggedTypes:[NSArray arrayWithObject:NSFilenamesPboardType]];
|
|
|
|
} else {
|
|
|
|
[cocoaViewport unregisterDraggedTypes];
|
|
|
|
}
|
2013-03-19 08:48:50 +00:00
|
|
|
}
|
2013-03-15 13:11:33 +00:00
|
|
|
}
|
|
|
|
|
2019-07-07 09:44:09 +00:00
|
|
|
auto pViewport::setFocusable(bool focusable) -> void {
|
|
|
|
//TODO
|
2013-03-15 13:11:33 +00:00
|
|
|
}
|
2015-12-30 06:41:46 +00:00
|
|
|
|
2019-07-18 10:34:23 +00:00
|
|
|
}
|
|
|
|
|
2015-12-30 06:41:46 +00:00
|
|
|
#endif
|