micromenu/src/hal/linux.cpp

118 lines
3.1 KiB
C++

//
// Created by jedi on 10/30/18.
//
#include <iostream>
//Using SDL and standard IO
#include <SDL2/SDL.h>
#include <cstdio>
SDL_Window *window = nullptr;
SDL_Event event;
SDL_Renderer *renderer;
void hal_init() {
if (SDL_Init(SDL_INIT_VIDEO) < 0) {
printf("SDL could not initialize! SDL_Error: %s\n", SDL_GetError());
exit(1);
}
//Create window
window = SDL_CreateWindow("SDL Tutorial", 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT,
SDL_WINDOW_SHOWN); //|SDL_WINDOW_BORDERLESS
if (window == nullptr) {
printf( "Window could not be created! SDL_Error: %s\n", SDL_GetError() );
exit(1);
}
renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
if (renderer == nullptr) {
printf("Renderer could not be created! SDL_Error: %s\n", SDL_GetError());
exit(1);
}
}
void hal_draw(int x, int y){
SDL_RenderDrawPoint(renderer, x, y);
}
void hal_print(int x, int y, const char* str){
//TODO delete
}
void hal_render() {
bool quit = false;
while (!quit) {
if (SDL_PollEvent(&event)) {
switch (event.type) {
case SDL_KEYDOWN:
switch (event.key.keysym.sym) {
case SDLK_LEFT:
input[I_LEFT]=true;
break;
case SDLK_RIGHT:
input[I_RIGHT]=true;
break;
case SDLK_UP:
input[I_UP]=true;
break;
case SDLK_DOWN:
input[I_DOWN]=true;
break;
case 'q':
case 0x1b: //ESC
quit = true;
break;
}
break;
case SDL_KEYUP:
switch (event.key.keysym.sym) {
case SDLK_LEFT:
input[I_LEFT]=false;
break;
case SDLK_RIGHT:
input[I_RIGHT]=false;
break;
case SDLK_UP:
input[I_UP]=false;
break;
case SDLK_DOWN:
input[I_DOWN]=false;
break;
default:
printf("key %x\n", event.key.keysym.sym);
}
break;
case SDL_QUIT:
quit = true;
break;
}
} else {
SDL_Delay(10);
}
SDL_SetRenderDrawColor(renderer, 0, 0, 0, 0);
SDL_RenderClear(renderer);
SDL_SetRenderDrawColor(renderer, 0, 255, 255, 255);
render();
SDL_RenderPresent(renderer);
}
SDL_DestroyRenderer(renderer);
SDL_DestroyWindow(window);
SDL_Quit();
}
void debug(const char* str){
std::cout << str << std::flush;
}