From 31722f421283a761ad85b439ce72bb34aadcd8b3 Mon Sep 17 00:00:00 2001 From: Curtis McEnroe Date: Sat, 3 Feb 2018 23:09:58 -0500 Subject: Add dirty but working cocoa frontend --- bin/gfcocoa.m | 105 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 bin/gfcocoa.m (limited to 'bin') diff --git a/bin/gfcocoa.m b/bin/gfcocoa.m new file mode 100644 index 00000000..ae2a1445 --- /dev/null +++ b/bin/gfcocoa.m @@ -0,0 +1,105 @@ +/* Copyright (c) 2018, Curtis McEnroe + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +#import +#import +#import + +extern int init(int argc, char *argv[]); +extern void draw(uint32_t *buf, size_t xres, size_t yres); +extern void input(char in); + +#define WIDTH (640) +#define HEIGHT (480) + +static size_t size = 4 * WIDTH * HEIGHT; +static uint32_t buf[WIDTH * HEIGHT]; + +@interface BufferView : NSView { } +@end + +@implementation BufferView +- (void) drawRect: (NSRect) dirtyRect { + CGContextRef ctx = [[NSGraphicsContext currentContext] CGContext]; + CGColorSpaceRef rgb = CGColorSpaceCreateDeviceRGB(); + CGDataProviderRef data = CGDataProviderCreateWithData(NULL, buf, size, NULL); + CGImageRef image = CGImageCreate( + WIDTH, + HEIGHT, + 8, + 32, + WIDTH * 4, + rgb, + kCGBitmapByteOrder32Little | kCGImageAlphaNoneSkipFirst, + data, + NULL, + false, + kCGRenderingIntentDefault + ); + CGContextDrawImage(ctx, CGRectMake(0, 0, WIDTH, HEIGHT), image); + CGImageRelease(image); + CGDataProviderRelease(data); + CGColorSpaceRelease(rgb); +} + +- (BOOL) acceptsFirstResponder { + return YES; +} + +- (void) keyDown: (NSEvent *) event { + char in; + [ + [event characters] + getBytes: &in + maxLength: 1 + usedLength: NULL + encoding: NSASCIIStringEncoding + options: NSStringEncodingConversionAllowLossy + range: NSMakeRange(0, 1) + remainingRange: NULL + ]; + input(in); + draw(buf, WIDTH, HEIGHT); + [self setNeedsDisplay: YES]; +} +@end + +int main(int argc, char *argv[]) { + int error = init(argc, argv); + if (error) return error; + + [NSApplication sharedApplication]; + [NSApp setActivationPolicy: NSApplicationActivationPolicyRegular]; + + NSWindow *window = [ + [NSWindow alloc] + initWithContentRect: NSMakeRect(0, 0, 640, 480) + styleMask: NSTitledWindowMask | NSClosableWindowMask + backing: NSBackingStoreBuffered + defer: NO + ]; + [window setTitle: [[NSString alloc] initWithUTF8String: argv[0]]]; + [window center]; + + BufferView *view = [[BufferView alloc] initWithFrame: [window frame]]; + [window setContentView: view]; + + draw(buf, WIDTH, HEIGHT); + + [window makeKeyAndOrderFront: nil]; + [NSApp activateIgnoringOtherApps: YES]; + [NSApp run]; +} -- cgit 1.4.1 n>Add ConcreteJune McEnroe Fun. 2019-10-14Set the write variable for nvim man modeJune McEnroe Embarrassing... 2019-10-13Add All Systems RedJune McEnroe 2019-10-10Add The Book of PhoenixJune McEnroe 2019-10-03Add two Kim Petras songsJune McEnroe 2019-10-02Update neovim 0.4.2June McEnroe Finally a release with my man mode fix... Meanwhile neovim itself has probably gotten worse. 2019-10-02Claim to be curl(1) in titleJune McEnroe IMDB serves a page to our dumb User-Agent whose <title> is past the 8K boundary but serves something normal to curl(1). 2019-10-02Add The Red Threads of FortuneJune McEnroe 2019-09-28Add The Black Tides of HeavenJune McEnroe 2019-09-27Fail on HTTP failure status in titleJune McEnroe 2019-09-23Add Trail of LightningJune McEnroe 2019-09-22Revert "Enable cookies in title"June McEnroe This reverts commit 279111dda15dd9170e11b9688eb973f2af2e6300. 2019-09-20Enable cookies in titleJune McEnroe Perhaps this will make it less suspicious to Google. Who knows. 2019-09-16Use sensitivity aliases in TF2June McEnroe 2019-09-16Add The Just CityJune McEnroe 2019-09-12Only GET the final redirect locationJune McEnroe 2019-09-12Consume entire bodyJune McEnroe Aborting the request and leaving data around may be causing intermittent errors. Just discard the rest of the data. 2019-09-10Add title -v flagJune McEnroe 2019-09-10Use curl error bufferJune McEnroe 2019-09-10Set Accept-Encoding in titleJune McEnroe Because apparently it's fine for servers to respond with Content-Encoding you didn't ask for, and curl won't decode it if you didn't ask for it. 2019-09-08Set title User-AgentJune McEnroe Some things don't like you if you don't send one. 2019-09-07Add -x flag to titleJune McEnroe 2019-09-07Ignore SIGPIPE in relayJune McEnroe Allows restarting consumers safely. 2019-09-07Add A Memory Called EmpireJune McEnroe 2019-09-05Handle lack of Content-TypeJune McEnroe 2019-09-05Use CURLINFO_CONTENT_TYPEJune McEnroe Oops, didn't see this. 2019-09-05Decode entities in titlesJune McEnroe 2019-09-05Print title as soon as it's availableJune McEnroe 2019-09-05Use CURL_PREFIX to set flagsJune McEnroe 2019-09-05Add titleJune McEnroe 2019-09-04Add Avorter n'est pas tuerJune McEnroe 2019-08-29Unset executable on shell scriptsJune McEnroe 2019-08-29Add long-missing setopt to bin.7June McEnroe 2019-08-29Add editJune McEnroe