test/testdrawchessboard.c
author Cole Campbell <cole.campbell@twistedlogik.net>
Tue, 09 Jan 2018 19:11:34 -0500
changeset 11854 934d77867168
parent 11811 5d94cb6b24d3
child 12503 806492103856
permissions -rw-r--r--
Allow Android Java shim to be built as an AAR
     1 /*
     2    Copyright (C) 1997-2018 Sam Lantinga <slouken@libsdl.org>
     3 
     4    This software is provided 'as-is', without any express or implied
     5    warranty.  In no event will the authors be held liable for any damages
     6    arising from the use of this software.
     7 
     8    Permission is granted to anyone to use this software for any purpose,
     9    including commercial applications, and to alter it and redistribute it
    10    freely.
    11 
    12    This file is created by : Nitin Jain (nitin.j4@samsung.com)
    13 */
    14 
    15 /* Sample program:  Draw a Chess Board  by using SDL_CreateSoftwareRenderer API */
    16 
    17 #include <stdlib.h>
    18 #include <stdio.h>
    19 
    20 #ifdef __EMSCRIPTEN__
    21 #include <emscripten/emscripten.h>
    22 #endif
    23 
    24 #include "SDL.h"
    25 
    26 SDL_Window *window;
    27 SDL_Renderer *renderer;
    28 SDL_Surface *surface;
    29 int done;
    30 
    31 void
    32 DrawChessBoard(SDL_Renderer * renderer)
    33 {
    34     int row = 0,column = 0,x = 0;
    35     SDL_Rect rect, darea;
    36 
    37     /* Get the Size of drawing surface */
    38     SDL_RenderGetViewport(renderer, &darea);
    39 
    40     for( ; row < 8; row++)
    41     {
    42         column = row%2;
    43         x = column;
    44         for( ; column < 4+(row%2); column++)
    45         {
    46             SDL_SetRenderDrawColor(renderer, 0, 0, 0, 0xFF);
    47 
    48             rect.w = darea.w/8;
    49             rect.h = darea.h/8;
    50             rect.x = x * rect.w;
    51             rect.y = row * rect.h;
    52             x = x + 2;
    53             SDL_RenderFillRect(renderer, &rect);
    54         }
    55     }
    56 }
    57 
    58 void
    59 loop()
    60 {
    61     SDL_Event e;
    62     while (SDL_PollEvent(&e)) {
    63        
    64        /* Re-create when window has been resized */
    65        if ((e.type == SDL_WINDOWEVENT) && (e.window.event == SDL_WINDOWEVENT_SIZE_CHANGED)) {
    66 
    67           SDL_DestroyRenderer(renderer);
    68 
    69           surface = SDL_GetWindowSurface(window);
    70           renderer = SDL_CreateSoftwareRenderer(surface);
    71           /* Clear the rendering surface with the specified color */
    72           SDL_SetRenderDrawColor(renderer, 0xFF, 0xFF, 0xFF, 0xFF);
    73           SDL_RenderClear(renderer);
    74        }
    75 
    76        if (e.type == SDL_QUIT) {
    77             done = 1;
    78 #ifdef __EMSCRIPTEN__
    79             emscripten_cancel_main_loop();
    80 #endif
    81             return;
    82         }
    83 
    84         if ((e.type == SDL_KEYDOWN) && (e.key.keysym.sym == SDLK_ESCAPE)) {
    85             done = 1;
    86 #ifdef __EMSCRIPTEN__
    87             emscripten_cancel_main_loop();
    88 #endif
    89             return;
    90         }
    91     }
    92 
    93     DrawChessBoard(renderer);
    94 
    95     /* Got everything on rendering surface,
    96        now Update the drawing image on window screen */
    97     SDL_UpdateWindowSurface(window);
    98 }
    99 
   100 int
   101 main(int argc, char *argv[])
   102 {
   103     /* Enable standard application logging */
   104     SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO);
   105 
   106     /* Initialize SDL */
   107     if(SDL_Init(SDL_INIT_VIDEO) != 0)
   108     {
   109         SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDL_Init fail : %s\n", SDL_GetError());
   110         return 1;
   111     }
   112 
   113 
   114     /* Create window and renderer for given surface */
   115     window = SDL_CreateWindow("Chess Board", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 640, 480, SDL_WINDOW_RESIZABLE);
   116     if(!window)
   117     {
   118         SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Window creation fail : %s\n",SDL_GetError());
   119         return 1;
   120     }
   121     surface = SDL_GetWindowSurface(window);
   122     renderer = SDL_CreateSoftwareRenderer(surface);
   123     if(!renderer)
   124     {
   125         SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Render creation for surface fail : %s\n",SDL_GetError());
   126         return 1;
   127     }
   128 
   129     /* Clear the rendering surface with the specified color */
   130     SDL_SetRenderDrawColor(renderer, 0xFF, 0xFF, 0xFF, 0xFF);
   131     SDL_RenderClear(renderer);
   132 
   133 
   134     /* Draw the Image on rendering surface */
   135     done = 0;
   136 #ifdef __EMSCRIPTEN__
   137     emscripten_set_main_loop(loop, 0, 1);
   138 #else
   139     while (!done) {
   140         loop();
   141     }
   142 #endif
   143 
   144     SDL_Quit();
   145     return 0;
   146 }
   147