X-Git-Url: https://git.distorted.org.uk/~mdw/sgt/puzzles/blobdiff_plain/48dcdd627698354063fa1b551cfa1917dea1b25e..9c63a0112329c153911475b014dfdbf2f36b943c:/osx.m diff --git a/osx.m b/osx.m index 039f081..bc87021 100644 --- a/osx.m +++ b/osx.m @@ -470,7 +470,8 @@ struct frontend { frame.origin.y = 0; frame.origin.x = 0; - midend_size(me, &w, &h); + w = h = INT_MAX; + midend_size(me, &w, &h, FALSE); frame.size.width = w; frame.size.height = h; @@ -501,7 +502,8 @@ struct frontend { * initWithGame: simply call that one and pass it NULL. */ midend_new_game(me); - midend_size(me, &w, &h); + w = h = INT_MAX; + midend_size(me, &w, &h, FALSE); rect.size.width = w; rect.size.height = h; @@ -771,7 +773,8 @@ struct frontend { NSSize size = {0,0}; int w, h; - midend_size(me, &w, &h); + w = h = INT_MAX; + midend_size(me, &w, &h, FALSE); size.width = w; size.height = h; @@ -1169,6 +1172,26 @@ void draw_polygon(frontend *fe, int *coords, int npoints, else [path stroke]; } +void draw_circle(frontend *fe, int cx, int cy, int radius, + int fill, int colour) +{ + NSBezierPath *path = [NSBezierPath bezierPath]; + + [[NSGraphicsContext currentContext] setShouldAntialias:YES]; + + assert(colour >= 0 && colour < fe->ncolours); + [fe->colours[colour] set]; + + [path appendBezierPathWithArcWithCenter:NSMakePoint(cx + 0.5, cy + 0.5) + radius:radius startAngle:0.0 endAngle:360.0]; + + [path closePath]; + + if (fill) + [path fill]; + else + [path stroke]; +} void draw_line(frontend *fe, int x1, int y1, int x2, int y2, int colour) { NSBezierPath *path = [NSBezierPath bezierPath]; @@ -1229,6 +1252,48 @@ void draw_text(frontend *fe, int x, int y, int fonttype, int fontsize, [string drawAtPoint:point withAttributes:attr]; } +struct blitter { + int w, h; + int x, y; + NSImage *img; +}; +blitter *blitter_new(int w, int h) +{ + blitter *bl = snew(blitter); + bl->x = bl->y = -1; + bl->w = w; + bl->h = h; + bl->img = [[NSImage alloc] initWithSize:NSMakeSize(w, h)]; + [bl->img setFlipped:YES]; + return bl; +} +void blitter_free(blitter *bl) +{ + [bl->img release]; + sfree(bl); +} +void blitter_save(frontend *fe, blitter *bl, int x, int y) +{ + [fe->image unlockFocus]; + [bl->img lockFocus]; + [fe->image drawInRect:NSMakeRect(0, 0, bl->w, bl->h) + fromRect:NSMakeRect(x, y, bl->w, bl->h) + operation:NSCompositeCopy fraction:1.0]; + [bl->img unlockFocus]; + [fe->image lockFocus]; + bl->x = x; + bl->y = y; +} +void blitter_load(frontend *fe, blitter *bl, int x, int y) +{ + if (x == BLITTER_FROMSAVED && y == BLITTER_FROMSAVED) { + x = bl->x; + y = bl->y; + } + [bl->img drawInRect:NSMakeRect(x, y, bl->w, bl->h) + fromRect:NSMakeRect(0, 0, bl->w, bl->h) + operation:NSCompositeCopy fraction:1.0]; +} void draw_update(frontend *fe, int x, int y, int w, int h) { [fe->view setNeedsDisplayInRect:NSMakeRect(x,y,w,h)];