Add remaining keycodes

Now all keys should be usable.
Added SLK_conf.h for later features
This commit is contained in:
Captain4LK 2020-05-25 17:29:01 +02:00
parent 4d74feccec
commit 6c536f5d65
8 changed files with 147 additions and 109 deletions

View file

@ -32,8 +32,8 @@ Linux:
SoftLK has been tested and is working on the following plattforms/os:
* Void GNU/Linux, amd64: [Enter the void](https://voidlinux.org/)
* Raspbian 10, raspberry pi 4b: [Teach, learn and make](https://www.raspberrypi.org/)
* Void GNU/Linux, amd64 (glibc/musl-libc)
* Raspbian 10, raspberry pi 4b
SoftLK should work on any plattform that has a C compiler, SDL2 and OpenGL 2.1, the plattforms listed here are just the ones I frequently test SoftLK on.
@ -46,4 +46,4 @@ SoftLK should work on any plattform that has a C compiler, SDL2 and OpenGL 2.1,
![performance example](screenshots/performance.png)
![efleder example](screenshots/efelder.png)
![efleder example](screenshots/efelder.png)

View file

@ -121,7 +121,7 @@ void SLK_layer_set_size(unsigned index, int width, int height);
void SLK_layer_set_current(unsigned index);
//Core subsystem: SLK_core.c
void SLK_setup(const int width, const int height, const int layer_num, const char *title, const int fullscreen, int scale, int resizable);
void SLK_setup(int width, int height, int layer_num, const char *title, int fullscreen, int scale, int resizable);
void SLK_update();
void SLK_core_set_title(const char *title);
void SLK_core_set_fullscreen(int fullscreen);

View file

@ -118,8 +118,8 @@ enum SLK_key
SLK_KEY_H,SLK_KEY_I,SLK_KEY_J,SLK_KEY_K,SLK_KEY_L,SLK_KEY_M,SLK_KEY_N,
SLK_KEY_O,SLK_KEY_P,SLK_KEY_Q,SLK_KEY_R,SLK_KEY_S,SLK_KEY_T,SLK_KEY_U,
SLK_KEY_V,SLK_KEY_W,SLK_KEY_X,SLK_KEY_Y,SLK_KEY_Z,
SLK_KEY_K0,SLK_KEY_K1,SLK_KEY_K2,SLK_KEY_K3,SLK_KEY_K4,SLK_KEY_K5,
SLK_KEY_K6,SLK_KEY_K7,SLK_KEY_K8,SLK_KEY_K9,
SLK_KEY_0,SLK_KEY_1,SLK_KEY_2,SLK_KEY_3,SLK_KEY_4,SLK_KEY_5,
SLK_KEY_6,SLK_KEY_7,SLK_KEY_8,SLK_KEY_9,
SLK_KEY_F1,SLK_KEY_F2,SLK_KEY_F3,SLK_KEY_F4,SLK_KEY_F5,SLK_KEY_F6,
SLK_KEY_F7,SLK_KEY_F8,SLK_KEY_F9,SLK_KEY_F10,SLK_KEY_F11,SLK_KEY_F12,
SLK_KEY_UP,SLK_KEY_DOWN,SLK_KEY_LEFT,SLK_KEY_RIGHT,

View file

@ -20,7 +20,7 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
#include "../../include/SLK/SLK_types.h"
#include "../../include/SLK/SLK_functions.h"
//-------------------------------------
//
//#defines
//-------------------------------------

23
src/SLK/SLK_config.h Normal file
View file

@ -0,0 +1,23 @@
/*
Copyright (c) 2020, Lukas Holzbeierlein (Captain4LK)
All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef _SLK_CONFIG_H_
#define _SLK_CONFIG_H_
//SLK config file,
//optional features are specified here
#endif

View file

@ -36,8 +36,6 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
//-------------------------------------
//Variables
uint8_t key_map[SDL_NUM_SCANCODES];
uint8_t mouse_map[6];
int running;
//-------------------------------------
@ -180,13 +178,14 @@ void SLK_update()
//The first function you should call in your code.
//Creates a window, sets its title and allocates space for the layers.
//Also loads the font files in the data dir if availible.
void SLK_setup(const int width, const int height, const int layer_num, const char *title, const int fullscreen, int scale, int resizable)
void SLK_setup(int width, int height, int layer_num, const char *title, int fullscreen, int scale, int resizable)
{
pixel_scale = scale;
screen_width = width;
screen_height = height;
layer_count = layer_num;
dynamic = resizable;
running = 1;
layers = malloc(sizeof(SLK_Layer)*layer_num);
memset(layers,0,sizeof(SLK_Layer)*layer_num);
@ -248,103 +247,7 @@ void SLK_setup(const int width, const int height, const int layer_num, const cha
text_sprite_pal = SLK_pal_sprite_load("data/font8x8.slk");
text_sprite_rgb = SLK_rgb_sprite_load("data/font8x8.png");
key_map[0x00] = SLK_KEY_NONE;
key_map[SDL_SCANCODE_A] = SLK_KEY_A;
key_map[SDL_SCANCODE_B] = SLK_KEY_B;
key_map[SDL_SCANCODE_C] = SLK_KEY_C;
key_map[SDL_SCANCODE_D] = SLK_KEY_D;
key_map[SDL_SCANCODE_E] = SLK_KEY_E;
key_map[SDL_SCANCODE_F] = SLK_KEY_F;
key_map[SDL_SCANCODE_G] = SLK_KEY_G;
key_map[SDL_SCANCODE_H] = SLK_KEY_H;
key_map[SDL_SCANCODE_I] = SLK_KEY_I;
key_map[SDL_SCANCODE_J] = SLK_KEY_J;
key_map[SDL_SCANCODE_K] = SLK_KEY_K;
key_map[SDL_SCANCODE_L] = SLK_KEY_L;
key_map[SDL_SCANCODE_M] = SLK_KEY_M;
key_map[SDL_SCANCODE_N] = SLK_KEY_N;
key_map[SDL_SCANCODE_O] = SLK_KEY_O;
key_map[SDL_SCANCODE_P] = SLK_KEY_P;
key_map[SDL_SCANCODE_Q] = SLK_KEY_Q;
key_map[SDL_SCANCODE_R] = SLK_KEY_R;
key_map[SDL_SCANCODE_S] = SLK_KEY_S;
key_map[SDL_SCANCODE_T] = SLK_KEY_T;
key_map[SDL_SCANCODE_U] = SLK_KEY_U;
key_map[SDL_SCANCODE_V] = SLK_KEY_V;
key_map[SDL_SCANCODE_W] = SLK_KEY_W;
key_map[SDL_SCANCODE_X] = SLK_KEY_X;
key_map[SDL_SCANCODE_Y] = SLK_KEY_Y;
key_map[SDL_SCANCODE_Z] = SLK_KEY_Z;
key_map[SDL_SCANCODE_F1] = SLK_KEY_F1;
key_map[SDL_SCANCODE_F2] = SLK_KEY_F2;
key_map[SDL_SCANCODE_F3] = SLK_KEY_F3;
key_map[SDL_SCANCODE_F4] = SLK_KEY_F4;
key_map[SDL_SCANCODE_F5] = SLK_KEY_F5;
key_map[SDL_SCANCODE_F6] = SLK_KEY_F6;
key_map[SDL_SCANCODE_F7] = SLK_KEY_F7;
key_map[SDL_SCANCODE_F8] = SLK_KEY_F8;
key_map[SDL_SCANCODE_F9] = SLK_KEY_F9;
key_map[SDL_SCANCODE_F10] = SLK_KEY_F10;
key_map[SDL_SCANCODE_F11] = SLK_KEY_F11;
key_map[SDL_SCANCODE_F12] = SLK_KEY_F12;
key_map[SDL_SCANCODE_DOWN] = SLK_KEY_DOWN;
key_map[SDL_SCANCODE_LEFT] = SLK_KEY_LEFT;
key_map[SDL_SCANCODE_RIGHT] = SLK_KEY_RIGHT;
key_map[SDL_SCANCODE_UP] = SLK_KEY_UP;
key_map[SDL_SCANCODE_RETURN] = SLK_KEY_ENTER;
key_map[SDL_SCANCODE_BACKSPACE] = SLK_KEY_BACK;
key_map[SDL_SCANCODE_ESCAPE] = SLK_KEY_ESCAPE;
key_map[SDL_SCANCODE_TAB] = SLK_KEY_TAB;
key_map[SDL_SCANCODE_LGUI] = SLK_KEY_HOME;
/*key_map[XK_End] = SLK_KEY_END;
key_map[XK_Page_Up] = SLK_KEY_PGUP;
key_map[XK_Page_Down] = SLK_KEY_PGDN;
key_map[XK_Insert] = SLK_KEY_INS;
key_map[XK_Shift_L] = SLK_KEY_SHIFT;
key_map[XK_Shift_R] = SLK_KEY_SHIFT;*/
key_map[SDL_SCANCODE_LCTRL] = SLK_KEY_CTRL;
key_map[SDL_SCANCODE_RCTRL] = SLK_KEY_CTRL;
key_map[SDL_SCANCODE_SPACE] = SLK_KEY_SPACE;
/*key_map[XK_0] = SLK_KEY_K0;
key_map[XK_1] = SLK_KEY_K1;
key_map[XK_2] = SLK_KEY_K2;
key_map[XK_3] = SLK_KEY_K3;
key_map[XK_4] = SLK_KEY_K4;
key_map[XK_5] = SLK_KEY_K5;
key_map[XK_6] = SLK_KEY_K6;
key_map[XK_7] = SLK_KEY_K7;
key_map[XK_8] = SLK_KEY_K8;
key_map[XK_9] = SLK_KEY_K9;
key_map[XK_KP_0] = SLK_KEY_NP0;
key_map[XK_KP_1] = SLK_KEY_NP1;
key_map[XK_KP_2] = SLK_KEY_NP2;
key_map[XK_KP_3] = SLK_KEY_NP3;
key_map[XK_KP_4] = SLK_KEY_NP4;
key_map[XK_KP_5] = SLK_KEY_NP5;
key_map[XK_KP_6] = SLK_KEY_NP6;
key_map[XK_KP_7] = SLK_KEY_NP7;
key_map[XK_KP_8] = SLK_KEY_NP8;
key_map[XK_KP_9] = SLK_KEY_NP9;
key_map[XK_KP_Multiply] = SLK_KEY_NP_MUL;
key_map[XK_KP_Add] = SLK_KEY_NP_ADD;
key_map[XK_KP_Divide] = SLK_KEY_NP_DIV;
key_map[XK_KP_Subtract] = SLK_KEY_NP_SUB;
key_map[XK_KP_Decimal] = SLK_KEY_NP_DECIMAL;*/
mouse_map[SDL_BUTTON_LEFT] = SLK_BUTTON_LEFT;
mouse_map[SDL_BUTTON_RIGHT] = SLK_BUTTON_RIGHT;
mouse_map[SDL_BUTTON_MIDDLE] = SLK_BUTTON_MIDDLE;
mouse_map[SDL_BUTTON_X1] = SLK_BUTTON_X1;
mouse_map[SDL_BUTTON_X2] = SLK_BUTTON_X2;
running = 1;
memset(new_key_state,0,sizeof(new_key_state));
memset(new_mouse_state,0,sizeof(new_mouse_state));
}
SLK_i_input_init();
}
//-------------------------------------

View file

@ -187,4 +187,112 @@ void SLK_text_input_stop()
SDL_StopTextInput();
}
//Internal function.
//Input init function.
//Creates keymaps and mousemaps.
void SLK_i_input_init()
{
//Create keymaps, if I would change backends (remove SDL2, not likely though)
//code will not break, since key names stay the same
key_map[0x00] = SLK_KEY_NONE;
key_map[SDL_SCANCODE_A] = SLK_KEY_A;
key_map[SDL_SCANCODE_B] = SLK_KEY_B;
key_map[SDL_SCANCODE_C] = SLK_KEY_C;
key_map[SDL_SCANCODE_D] = SLK_KEY_D;
key_map[SDL_SCANCODE_E] = SLK_KEY_E;
key_map[SDL_SCANCODE_F] = SLK_KEY_F;
key_map[SDL_SCANCODE_G] = SLK_KEY_G;
key_map[SDL_SCANCODE_H] = SLK_KEY_H;
key_map[SDL_SCANCODE_I] = SLK_KEY_I;
key_map[SDL_SCANCODE_J] = SLK_KEY_J;
key_map[SDL_SCANCODE_K] = SLK_KEY_K;
key_map[SDL_SCANCODE_L] = SLK_KEY_L;
key_map[SDL_SCANCODE_M] = SLK_KEY_M;
key_map[SDL_SCANCODE_N] = SLK_KEY_N;
key_map[SDL_SCANCODE_O] = SLK_KEY_O;
key_map[SDL_SCANCODE_P] = SLK_KEY_P;
key_map[SDL_SCANCODE_Q] = SLK_KEY_Q;
key_map[SDL_SCANCODE_R] = SLK_KEY_R;
key_map[SDL_SCANCODE_S] = SLK_KEY_S;
key_map[SDL_SCANCODE_T] = SLK_KEY_T;
key_map[SDL_SCANCODE_U] = SLK_KEY_U;
key_map[SDL_SCANCODE_V] = SLK_KEY_V;
key_map[SDL_SCANCODE_W] = SLK_KEY_W;
key_map[SDL_SCANCODE_X] = SLK_KEY_X;
key_map[SDL_SCANCODE_Y] = SLK_KEY_Y;
key_map[SDL_SCANCODE_Z] = SLK_KEY_Z;
key_map[SDL_SCANCODE_F1] = SLK_KEY_F1;
key_map[SDL_SCANCODE_F2] = SLK_KEY_F2;
key_map[SDL_SCANCODE_F3] = SLK_KEY_F3;
key_map[SDL_SCANCODE_F4] = SLK_KEY_F4;
key_map[SDL_SCANCODE_F5] = SLK_KEY_F5;
key_map[SDL_SCANCODE_F6] = SLK_KEY_F6;
key_map[SDL_SCANCODE_F7] = SLK_KEY_F7;
key_map[SDL_SCANCODE_F8] = SLK_KEY_F8;
key_map[SDL_SCANCODE_F9] = SLK_KEY_F9;
key_map[SDL_SCANCODE_F10] = SLK_KEY_F10;
key_map[SDL_SCANCODE_F11] = SLK_KEY_F11;
key_map[SDL_SCANCODE_F12] = SLK_KEY_F12;
key_map[SDL_SCANCODE_DOWN] = SLK_KEY_DOWN;
key_map[SDL_SCANCODE_LEFT] = SLK_KEY_LEFT;
key_map[SDL_SCANCODE_RIGHT] = SLK_KEY_RIGHT;
key_map[SDL_SCANCODE_UP] = SLK_KEY_UP;
key_map[SDL_SCANCODE_RETURN] = SLK_KEY_ENTER;
key_map[SDL_SCANCODE_BACKSPACE] = SLK_KEY_BACK;
key_map[SDL_SCANCODE_ESCAPE] = SLK_KEY_ESCAPE;
key_map[SDL_SCANCODE_TAB] = SLK_KEY_TAB;
key_map[SDL_SCANCODE_LGUI] = SLK_KEY_HOME;
key_map[SDL_SCANCODE_END] = SLK_KEY_END;
key_map[SDL_SCANCODE_PAGEUP] = SLK_KEY_PGUP;
key_map[SDL_SCANCODE_PAGEDOWN] = SLK_KEY_PGDN;
key_map[SDL_SCANCODE_INSERT] = SLK_KEY_INS;
key_map[SDL_SCANCODE_LSHIFT] = SLK_KEY_SHIFT;
key_map[SDL_SCANCODE_RSHIFT] = SLK_KEY_SHIFT;
key_map[SDL_SCANCODE_LCTRL] = SLK_KEY_CTRL;
key_map[SDL_SCANCODE_RCTRL] = SLK_KEY_CTRL;
key_map[SDL_SCANCODE_SPACE] = SLK_KEY_SPACE;
key_map[SDL_SCANCODE_0] = SLK_KEY_0;
key_map[SDL_SCANCODE_1] = SLK_KEY_1;
key_map[SDL_SCANCODE_2] = SLK_KEY_2;
key_map[SDL_SCANCODE_3] = SLK_KEY_3;
key_map[SDL_SCANCODE_4] = SLK_KEY_4;
key_map[SDL_SCANCODE_5] = SLK_KEY_5;
key_map[SDL_SCANCODE_6] = SLK_KEY_6;
key_map[SDL_SCANCODE_7] = SLK_KEY_7;
key_map[SDL_SCANCODE_8] = SLK_KEY_8;
key_map[SDL_SCANCODE_9] = SLK_KEY_9;
key_map[SDL_SCANCODE_KP_0] = SLK_KEY_NP0;
key_map[SDL_SCANCODE_KP_1] = SLK_KEY_NP1;
key_map[SDL_SCANCODE_KP_2] = SLK_KEY_NP2;
key_map[SDL_SCANCODE_KP_3] = SLK_KEY_NP3;
key_map[SDL_SCANCODE_KP_4] = SLK_KEY_NP4;
key_map[SDL_SCANCODE_KP_5] = SLK_KEY_NP5;
key_map[SDL_SCANCODE_KP_6] = SLK_KEY_NP6;
key_map[SDL_SCANCODE_KP_7] = SLK_KEY_NP7;
key_map[SDL_SCANCODE_KP_8] = SLK_KEY_NP8;
key_map[SDL_SCANCODE_KP_9] = SLK_KEY_NP9;
key_map[SDL_SCANCODE_KP_MULTIPLY] = SLK_KEY_NP_MUL;
key_map[SDL_SCANCODE_KP_PLUS] = SLK_KEY_NP_ADD;
key_map[SDL_SCANCODE_KP_DIVIDE] = SLK_KEY_NP_DIV;
key_map[SDL_SCANCODE_KP_MINUS] = SLK_KEY_NP_SUB;
key_map[SDL_SCANCODE_KP_PERIOD] = SLK_KEY_NP_DECIMAL;
mouse_map[SDL_BUTTON_LEFT] = SLK_BUTTON_LEFT;
mouse_map[SDL_BUTTON_RIGHT] = SLK_BUTTON_RIGHT;
mouse_map[SDL_BUTTON_MIDDLE] = SLK_BUTTON_MIDDLE;
mouse_map[SDL_BUTTON_X1] = SLK_BUTTON_X1;
mouse_map[SDL_BUTTON_X2] = SLK_BUTTON_X2;
//Clear key states, just in case,
//should already be empty since known at compile time
memset(new_key_state,0,sizeof(new_key_state));
memset(new_mouse_state,0,sizeof(new_mouse_state));
}
//-------------------------------------

View file

@ -3,15 +3,19 @@
#define _SLK_INPUT_I_H_
#include <stdint.h>
#include <SDL2/SDL.h>
uint8_t new_key_state[256];
uint8_t old_key_state[256];
uint8_t new_mouse_state[6];
uint8_t old_mouse_state[6];
uint8_t key_map[SDL_NUM_SCANCODES];
uint8_t mouse_map[6];
char *text_input;
int text_input_active;
void SLK_i_mouse_update(int x, int y);
void SLK_i_mouse_update_wheel(int wheel);
void SLK_i_input_init();
#endif