|
| 1 | +//Copyright (c) 2011 <>< Charles Lohr - Under the MIT/x11 or NewBSD License you choose. |
| 2 | + |
| 3 | +#include <stdio.h> |
| 4 | +#include <stdlib.h> |
| 5 | +#include <math.h> |
| 6 | +#include "os_generic.h" |
| 7 | + |
| 8 | +#define CNFG3D |
| 9 | +#define CNFG_IMPLEMENTATION |
| 10 | +//#define CNFGOGL |
| 11 | +//#define CNFGRASTERIZER |
| 12 | +//#define CNFG_WINDOWS_DISABLE_BATCH |
| 13 | + |
| 14 | +#include "rawdraw_sf.h" |
| 15 | + |
| 16 | +#define gx 6 |
| 17 | +#define gy 6 |
| 18 | +int margin = 5; |
| 19 | +float gsx = 50; |
| 20 | +float gsy = 50; |
| 21 | +float ofsx, ofsy; |
| 22 | + |
| 23 | +int grid[gx][gy]; |
| 24 | + |
| 25 | +void InvCell( int cx, int cy ) |
| 26 | +{ |
| 27 | + if( cx >= 0 && cx < gx && cy >= 0 && cy < gy ) |
| 28 | + { |
| 29 | + grid[cx][cy] ^= 1; |
| 30 | + } |
| 31 | +} |
| 32 | + |
| 33 | +void InvCross( int cx, int cy ) |
| 34 | +{ |
| 35 | + InvCell( cx, cy ); |
| 36 | + InvCell( cx+1, cy ); |
| 37 | + InvCell( cx-1, cy ); |
| 38 | + InvCell( cx, cy+1 ); |
| 39 | + InvCell( cx, cy-1 ); |
| 40 | +} |
| 41 | + |
| 42 | +void HandleKey( int keycode, int bDown ) |
| 43 | +{ |
| 44 | +} |
| 45 | + |
| 46 | +void HandleButton( int x, int y, int button, int bDown ) |
| 47 | +{ |
| 48 | + if( !bDown ) return; |
| 49 | + |
| 50 | + int tsx = gsx+margin; |
| 51 | + int tsy = gsy+margin; |
| 52 | + |
| 53 | + x -= ofsx; |
| 54 | + y -= ofsy; |
| 55 | + if( x%tsx > gsx ) return; |
| 56 | + if( y%tsy > gsy ) return; |
| 57 | + int coordx = x / (gsx+margin); |
| 58 | + int coordy = y / (gsy+margin); |
| 59 | + if( coordx < gx && coordy < gy ) |
| 60 | + { |
| 61 | + InvCross( coordx, coordy ); |
| 62 | + } |
| 63 | +} |
| 64 | + |
| 65 | +void HandleMotion( int x, int y, int mask ) |
| 66 | +{ |
| 67 | +} |
| 68 | + |
| 69 | +int HandleDestroy() |
| 70 | +{ |
| 71 | + printf( "Destroying\n" ); |
| 72 | + exit(10); |
| 73 | + return 0; |
| 74 | +} |
| 75 | + |
| 76 | +int main() |
| 77 | +{ |
| 78 | + |
| 79 | + CNFGBGColor = 0x000080FF; //Darkblue |
| 80 | + CNFGSetup( "Test Bench", 640, 480 ); |
| 81 | + |
| 82 | + srand( OGGetAbsoluteTime() ); |
| 83 | + |
| 84 | + int i; |
| 85 | + for( i = 0; i < 5; i++ ) |
| 86 | + { |
| 87 | + InvCross( rand()%gx, rand()%gy ); |
| 88 | + } |
| 89 | + |
| 90 | + while(CNFGHandleInput()) |
| 91 | + { |
| 92 | + short wx, wy; |
| 93 | + CNFGGetDimensions( &wx, &wy ); |
| 94 | + |
| 95 | + float scalex = wx / gx; |
| 96 | + float scaley = wy / gy; |
| 97 | + float scale = scaley; |
| 98 | + if( scalex < scaley ) scale = scalex; |
| 99 | + gsx = gsy = scale-margin; |
| 100 | + |
| 101 | + float extraw = wx - gsx * gx; |
| 102 | + float extrah = wy - gsy * gy; |
| 103 | + ofsx = extraw/2; |
| 104 | + ofsy = extrah/2; |
| 105 | + |
| 106 | + CNFGClearFrame(); |
| 107 | + int x; |
| 108 | + int y; |
| 109 | + |
| 110 | + for( y = 0; y < gy; y++ ) |
| 111 | + for( x = 0; x < gx; x++ ) |
| 112 | + { |
| 113 | + int xco = x * (gsy+margin) + ofsx; |
| 114 | + int yco = y * (gsx+margin) + ofsy; |
| 115 | + CNFGColor( grid[x][y]?0xffffffff:0x00000ff ); |
| 116 | + CNFGTackRectangle( xco+margin/2, yco+margin/2, xco+gsx, yco+gsy ); |
| 117 | + } |
| 118 | + |
| 119 | + CNFGSwapBuffers(); |
| 120 | + }} |
| 121 | + |
0 commit comments