This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
|
sdl_app [2017/09/01 15:56] 1.241.172.144 |
sdl_app [2017/09/01 16:00] (current) 1.241.172.144 |
||
|---|---|---|---|
| Line 2: | Line 2: | ||
| Key Pad 를 이용해 image file 을 읽어 화면에 출력 하거나 그림을 그리고 글자를 출력한다. | Key Pad 를 이용해 image file 을 읽어 화면에 출력 하거나 그림을 그리고 글자를 출력한다. | ||
| + | 한글을 사용하기 위해서는 UTF-8로 작성되어야 한다. | ||
| TODO : Touch screen | TODO : Touch screen | ||
| Source Code | Source Code | ||
| + | |||
| + | /* Application Action | ||
| + | Key : Test Action | ||
| + | F1 : make Blue Screen | ||
| + | F2 : Display VI_logo.bmp | ||
| + | F3 : Display String.. | ||
| + | F4 : Clear Screen | ||
| + | ENTER : Exit App | ||
| + | */ | ||
| + | | ||
| + | #include <stdio.h> | ||
| + | #include <stdint.h> | ||
| + | #include <string.h> /* for memset */ | ||
| + | #include <unistd.h> /* for open/close .. */ | ||
| + | #include <fcntl.h> /* for O_RDWR */ | ||
| + | #include <sys/ioctl.h> /* for ioctl */ | ||
| + | #include <sys/mman.h> /* for mmap */ | ||
| + | #include <linux/fb.h> /* for fb_var_screeninfo, FBIOGET_VSCREENINFO */ | ||
| + | #include <linux/input.h> | ||
| + | #include <poll.h> | ||
| + | #include "SDL.h" | ||
| + | #include "SDL_ttf.h" | ||
| + | | ||
| + | #define DEV_LCD_BACKLIGHT "/sys/class/backlight/backlight/brightness" | ||
| + | | ||
| + | #define TEST_IMAGE_FILE_1 "VI_logo_320_240_R90.jpg" | ||
| + | #define TEST_IMAGE_FILE_2 "VI_logo_320_240_R270.jpg" | ||
| + | #define TEST_FONT_FILE "D2Coding.ttf" | ||
| + | #define TEST_DISPLAY_STRING "밸류이노베이션" | ||
| + | //#define TEST_DISPLAY_STRING "VI" | ||
| + | | ||
| + | /* | ||
| + | #define DEBUG_LOW_LEVEL_KEY_INPUT_INFO | ||
| + | */ | ||
| + | int sdl_copy_surface( SDL_Surface *pDestination, int X, int Y, SDL_Surface *pSource ) | ||
| + | { | ||
| + | int Result; | ||
| + | SDL_Rect Offset; /* Make a temporary rectangle to hold the offsets */ | ||
| + | | ||
| + | Result = -1; | ||
| + | if ( ( pDestination != (SDL_Surface *)0 ) | ||
| + | && ( pSource != (SDL_Surface *)0 ) ) | ||
| + | { | ||
| + | /* Give the offsets to the rectangle */ | ||
| + | Offset.x = X; | ||
| + | Offset.y = Y; | ||
| + | /* Blit the surface */ | ||
| + | Result = SDL_BlitSurface( pSource, NULL, pDestination, &Offset ); | ||
| + | } | ||
| + | return Result; | ||
| + | } | ||
| + | | ||
| + | int sdl_clear_surface( SDL_Surface *pDestination ) | ||
| + | { | ||
| + | if ( pDestination != (SDL_Surface *)0 ) | ||
| + | { | ||
| + | if ( SDL_FillRect(pDestination, NULL, SDL_MapRGB(pDestination->format, 0, 0, 0)) < 0) | ||
| + | { | ||
| + | printf("clear surface fail! : %s\n", SDL_GetError()); | ||
| + | } | ||
| + | else | ||
| + | { | ||
| + | printf("clear surface OK\n"); | ||
| + | SDL_Flip( pDestination ); | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | | ||
| + | int bright_set(const uint8_t Brightness) | ||
| + | { | ||
| + | FILE * pDeviceFile; | ||
| + | char pString[10] = {0}; | ||
| + | int StringLength; | ||
| + | | ||
| + | pDeviceFile = fopen(DEV_LCD_BACKLIGHT, "w+"); | ||
| + | if ( pDeviceFile == (FILE *)0 ) | ||
| + | { | ||
| + | printf("failed to open back light device : %s\n", DEV_LCD_BACKLIGHT); | ||
| + | return -1; | ||
| + | } | ||
| + | | ||
| + | sprintf(pString, "%d", Brightness); | ||
| + | StringLength = (int)strlen(pString); | ||
| + | | ||
| + | if ( fwrite(pString, StringLength, 1, pDeviceFile) < 0 ) | ||
| + | { | ||
| + | return -1; | ||
| + | } | ||
| + | | ||
| + | fclose(pDeviceFile); | ||
| + | | ||
| + | return 0; | ||
| + | } | ||
| + | | ||
| + | int bright_get(uint8_t *pBrightness) | ||
| + | { | ||
| + | FILE * pDeviceFile; | ||
| + | char pCommand[128] = {0}; | ||
| + | char pString[10] = {0}; | ||
| + | | ||
| + | char buf[10] = {0}; | ||
| + | int level = 0; | ||
| + | | ||
| + | if ( pBrightness == (uint8_t *)0 ) | ||
| + | { | ||
| + | printf("bright_get : Input Parameter error\n"); | ||
| + | return -1; | ||
| + | } | ||
| + | | ||
| + | sprintf(pCommand, "cat %s", DEV_LCD_BACKLIGHT); | ||
| + | pDeviceFile = popen(pCommand, "r"); | ||
| + | if ( pDeviceFile == (FILE *)0 ) | ||
| + | { | ||
| + | return -1; | ||
| + | } | ||
| + | | ||
| + | while( fgets(pString, 10, pDeviceFile) ); | ||
| + | *pBrightness = (uint8_t)strtoul(pString, NULL, 10); | ||
| + | | ||
| + | fclose(pDeviceFile); | ||
| + | | ||
| + | return 0; | ||
| + | } | ||
| + | | ||
| + | | ||
| + | int main() | ||
| + | { | ||
| + | SDL_Surface * pScreen; | ||
| + | SDL_Event Event; | ||
| + | char * pGetENV; | ||
| + | | ||
| + | #if 1 | ||
| + | pGetENV = SDL_getenv("SDL_VIDEODRIVER"); | ||
| + | if( pGetENV == (char *)0 ) | ||
| + | { | ||
| + | printf("No ENV!\n"); | ||
| + | SDL_putenv("SDL_VIDEODRIVER=directfb"); | ||
| + | } | ||
| + | // else | ||
| + | // { | ||
| + | printf("SDL_VIDEODRIVER=%s\n",SDL_getenv("SDL_VIDEODRIVER")); | ||
| + | // } | ||
| + | | ||
| + | #endif | ||
| + | | ||
| + | if ( SDL_Init(SDL_INIT_VIDEO) < 0) | ||
| + | { | ||
| + | printf("SDL initialized Fail! : %s\n", SDL_GetError()); | ||
| + | return -1; | ||
| + | } | ||
| + | else | ||
| + | { | ||
| + | printf("SDL initialized OK!\n"); | ||
| + | } | ||
| + | | ||
| + | pScreen = SDL_SetVideoMode(240, 320, 32, SDL_SWSURFACE); | ||
| + | if( pScreen == (SDL_Surface *)0 ) | ||
| + | { | ||
| + | printf("Fail to SetVideoMode !\n"); | ||
| + | } | ||
| + | else | ||
| + | { | ||
| + | SDL_KeyboardEvent * pKeyEvent; | ||
| + | int IsInLoop; | ||
| + | uint8_t Brightness; | ||
| + | | ||
| + | printf("Screen SDL SetVideoMode OK\n"); | ||
| + | | ||
| + | printf("SDL Surface Address = 0x%X(%d)\n", (uint32_t)pScreen, (uint32_t)pScreen); | ||
| + | printf(" flags : 0x%08X\n", pScreen->flags); | ||
| + | // SDL_PixelFormat *format; /**< Read-only */ | ||
| + | printf(" w : %d\n", pScreen->w); | ||
| + | printf(" h : %d\n", pScreen->h); | ||
| + | printf(" pitch : %d\n", pScreen->pitch); | ||
| + | printf(" *pixels : 0x%X(%d)\n", (uint32_t)pScreen->pixels, (uint32_t)pScreen->pixels); | ||
| + | printf(" offset : 0x%X(%d)\n", (uint32_t)pScreen->offset, (uint32_t)pScreen->offset); | ||
| + | // struct private_hwdata *hwdata; /** Hardware-specific surface info */ | ||
| + | /** clipping information */ | ||
| + | // SDL_Rect clip_rect; /**< Read-only */ | ||
| + | /** Allow recursive locks */ | ||
| + | printf(" locked : 0x%X(%d)\n", (uint32_t)pScreen->locked, (uint32_t)pScreen->locked); | ||
| + | Uint32 locked; /**< Private */ | ||
| + | /** info for fast blit mapping to other surfaces */ | ||
| + | // struct SDL_BlitMap *map; /**< Private */ | ||
| + | /** format version, bumped at every change to invalidate blit maps */ | ||
| + | printf(" format_version : 0x%X(%d)\n", (uint32_t)pScreen->format_version, (uint32_t)pScreen->format_version); | ||
| + | /** Reference count -- used when freeing surface */ | ||
| + | printf(" refcount : 0x%X(%d)\n", (uint32_t)pScreen->refcount, (uint32_t)pScreen->refcount); | ||
| + | | ||
| + | SDL_ShowCursor(SDL_DISABLE/* SDL_ENABLE or SDL_DISABLE */); | ||
| + | /* Must be clear action before doing other actions.. */ | ||
| + | sdl_clear_surface( pScreen ); | ||
| + | // SDL_Delay(1000/*ms*/); | ||
| + | // sdl_clear_surface( pScreen ); | ||
| + | | ||
| + | IsInLoop = 1; | ||
| + | /* Start event loop */ | ||
| + | while (IsInLoop) | ||
| + | { | ||
| + | if ( SDL_PollEvent( &Event ) == 0) /* While there's an event to handle */ | ||
| + | { | ||
| + | continue; | ||
| + | } | ||
| + | | ||
| + | if ( ( Event.type == SDL_KEYDOWN ) || ( Event.type == SDL_KEYUP ) ) | ||
| + | { /* Keys pressed or reased */ | ||
| + | pKeyEvent = (SDL_KeyboardEvent *)&Event; | ||
| + | switch ( pKeyEvent->keysym.sym ) | ||
| + | { | ||
| + | case SDLK_BACKSPACE: | ||
| + | if ( Event.type == SDL_KEYDOWN ) | ||
| + | { | ||
| + | printf("SDL Event Keys pressed! - BACKSPACE\n"); | ||
| + | } | ||
| + | else | ||
| + | { | ||
| + | printf("SDL Event Keys release! - BACKSPACE\n"); | ||
| + | } | ||
| + | break; | ||
| + | case SDLK_RETURN: | ||
| + | if ( Event.type == SDL_KEYDOWN ) | ||
| + | { | ||
| + | printf("SDL Event Keys pressed! - RETURN\n"); | ||
| + | } | ||
| + | else | ||
| + | { | ||
| + | printf("SDL Event Keys release! - RETURN\n"); | ||
| + | IsInLoop = 0; | ||
| + | } | ||
| + | break; | ||
| + | case SDLK_0: | ||
| + | if ( Event.type == SDL_KEYDOWN ) | ||
| + | { | ||
| + | printf("SDL Event Keys pressed! - 0\n"); | ||
| + | } | ||
| + | else | ||
| + | { | ||
| + | printf("SDL Event Keys release! - 0\n"); | ||
| + | } | ||
| + | break; | ||
| + | case SDLK_1: | ||
| + | if ( Event.type == SDL_KEYDOWN ) | ||
| + | { | ||
| + | printf("SDL Event Keys pressed! - 1\n"); | ||
| + | } | ||
| + | else | ||
| + | { | ||
| + | printf("SDL Event Keys release! - 1\n"); | ||
| + | } | ||
| + | break; | ||
| + | case SDLK_2: | ||
| + | if ( Event.type == SDL_KEYDOWN ) | ||
| + | { | ||
| + | printf("SDL Event Keys pressed! - 2\n"); | ||
| + | } | ||
| + | else | ||
| + | { | ||
| + | printf("SDL Event Keys release! - 2\n"); | ||
| + | } | ||
| + | break; | ||
| + | case SDLK_3: | ||
| + | if ( Event.type == SDL_KEYDOWN ) | ||
| + | { | ||
| + | printf("SDL Event Keys pressed! - 3\n"); | ||
| + | } | ||
| + | else | ||
| + | { | ||
| + | printf("SDL Event Keys release! - 3\n"); | ||
| + | } | ||
| + | break; | ||
| + | case SDLK_4: | ||
| + | if ( Event.type == SDL_KEYDOWN ) | ||
| + | { | ||
| + | printf("SDL Event Keys pressed! - 4\n"); | ||
| + | } | ||
| + | else | ||
| + | { | ||
| + | printf("SDL Event Keys release! - 4\n"); | ||
| + | } | ||
| + | break; | ||
| + | case SDLK_5: | ||
| + | if ( Event.type == SDL_KEYDOWN ) | ||
| + | { | ||
| + | printf("SDL Event Keys pressed! - 5\n"); | ||
| + | } | ||
| + | else | ||
| + | { | ||
| + | printf("SDL Event Keys release! - 5\n"); | ||
| + | } | ||
| + | break; | ||
| + | case SDLK_6: | ||
| + | if ( Event.type == SDL_KEYDOWN ) | ||
| + | { | ||
| + | printf("SDL Event Keys pressed! - 6\n"); | ||
| + | } | ||
| + | else | ||
| + | { | ||
| + | printf("SDL Event Keys release! - 6\n"); | ||
| + | } | ||
| + | break; | ||
| + | case SDLK_7: | ||
| + | if ( Event.type == SDL_KEYDOWN ) | ||
| + | { | ||
| + | printf("SDL Event Keys pressed! - 7\n"); | ||
| + | } | ||
| + | else | ||
| + | { | ||
| + | printf("SDL Event Keys release! - 7\n"); | ||
| + | } | ||
| + | break; | ||
| + | case SDLK_8: | ||
| + | if ( Event.type == SDL_KEYDOWN ) | ||
| + | { | ||
| + | printf("SDL Event Keys pressed! - 8\n"); | ||
| + | } | ||
| + | else | ||
| + | { | ||
| + | printf("SDL Event Keys release! - 8\n"); | ||
| + | } | ||
| + | break; | ||
| + | case SDLK_9: | ||
| + | if ( Event.type == SDL_KEYDOWN ) | ||
| + | { | ||
| + | printf("SDL Event Keys pressed! - 9\n"); | ||
| + | } | ||
| + | else | ||
| + | { | ||
| + | printf("SDL Event Keys release! - 9\n"); | ||
| + | } | ||
| + | break; | ||
| + | case SDLK_F1: | ||
| + | if ( Event.type == SDL_KEYDOWN ) | ||
| + | { | ||
| + | printf("SDL Event Keys pressed! - F1\n"); | ||
| + | } | ||
| + | else | ||
| + | { | ||
| + | printf("SDL Event Keys release! - F1\n"); | ||
| + | if ( SDL_FillRect(pScreen, NULL, SDL_MapRGB(pScreen->format, 255/*B*/, 0/*G*/, 0/*R*/)) < 0) | ||
| + | { | ||
| + | printf("SDL_FillRect Fail! : %s\n", SDL_GetError()); | ||
| + | } | ||
| + | else | ||
| + | { | ||
| + | printf("SDL_FillRect OK\n"); | ||
| + | SDL_Flip( pScreen ); | ||
| + | } | ||
| + | } | ||
| + | break; | ||
| + | case SDLK_F2: | ||
| + | if ( Event.type == SDL_KEYDOWN ) | ||
| + | { | ||
| + | printf("SDL Event Keys pressed! - F2\n"); | ||
| + | } | ||
| + | else | ||
| + | { | ||
| + | SDL_Surface * pBMP; | ||
| + | printf("SDL Event Keys release! - F2\n"); | ||
| + | | ||
| + | pBMP = SDL_LoadBMP("logo.bmp"); | ||
| + | if( pBMP == (SDL_Surface *)0 ) | ||
| + | { | ||
| + | printf("Fail to SDL_LoadBMP !\n"); | ||
| + | } | ||
| + | else | ||
| + | { | ||
| + | printf("BMP SDL LoadBMP OK\n"); | ||
| + | | ||
| + | printf("BMP Surface Address = 0x%X(%d)\n", (uint32_t)pBMP, (uint32_t)pBMP); | ||
| + | printf(" flags : 0x%08X\n", pBMP->flags); | ||
| + | // SDL_PixelFormat *format; /**< Read-only */ | ||
| + | printf(" w : %d\n", pBMP->w); | ||
| + | printf(" h : %d\n", pBMP->h); | ||
| + | printf(" pitch : %d\n", pBMP->pitch); | ||
| + | printf(" *pixels : 0x%X(%d)\n", (uint32_t)pBMP->pixels, (uint32_t)pBMP->pixels); | ||
| + | printf(" offset : 0x%X(%d)\n", (uint32_t)pBMP->offset, (uint32_t)pBMP->offset); | ||
| + | // struct private_hwdata *hwdata; /** Hardware-specific surface info */ | ||
| + | /** clipping information */ | ||
| + | // SDL_Rect clip_rect; /**< Read-only */ | ||
| + | /** Allow recursive locks */ | ||
| + | printf(" locked : 0x%X(%d)\n", (uint32_t)pBMP->locked, (uint32_t)pBMP->locked); | ||
| + | Uint32 locked; /**< Private */ | ||
| + | /** info for fast blit mapping to other surfaces */ | ||
| + | // struct SDL_BlitMap *map; /**< Private */ | ||
| + | /** format version, bumped at every change to invalidate blit maps */ | ||
| + | printf(" format_version : 0x%X(%d)\n", (uint32_t)pBMP->format_version, (uint32_t)pBMP->format_version); | ||
| + | /** Reference count -- used when freeing surface */ | ||
| + | printf(" refcount : 0x%X(%d)\n", (uint32_t)pBMP->refcount, (uint32_t)pBMP->refcount); | ||
| + | | ||
| + | // SDL_BlitSurface( pBMP, NULL, pScreen, NULL ); | ||
| + | sdl_copy_surface( pScreen, 0/*X*/, 0/*Y*/, pBMP ); | ||
| + | | ||
| + | // 화면을 갱신 | ||
| + | SDL_Flip( pScreen ); | ||
| + | SDL_FreeSurface( pBMP ); | ||
| + | } | ||
| + | } | ||
| + | break; | ||
| + | case SDLK_F3: | ||
| + | if ( Event.type == SDL_KEYDOWN ) | ||
| + | { | ||
| + | printf("SDL Event Keys pressed! - F3\n"); | ||
| + | } | ||
| + | else | ||
| + | { | ||
| + | SDL_Surface * pText; | ||
| + | TTF_Font * pFont; | ||
| + | SDL_Color pTextColor = { 255, 255, 255 }; /* The color of the font */ | ||
| + | | ||
| + | printf("SDL Event Keys release! - F3\n"); | ||
| + | | ||
| + | if( TTF_Init() < 0 ) | ||
| + | { | ||
| + | printf("Fail to TTF_Init !\n"); | ||
| + | } | ||
| + | else | ||
| + | { | ||
| + | printf("OK to TTF_Init !\n"); | ||
| + | /* Open the font */ | ||
| + | pFont = TTF_OpenFont( TEST_FONT_FILE, 28 ); | ||
| + | /* If there was an error in loading the font */ | ||
| + | if( pFont == (TTF_Font *)0 ) | ||
| + | { | ||
| + | printf("Fail to TTF_OpenFont !\n"); | ||
| + | } | ||
| + | else | ||
| + | { | ||
| + | printf("OK to TTF_OpenFont !\n"); | ||
| + | | ||
| + | /* 한글 출력을 위해 TTF_RenderUTF8_Solid 사용 */ | ||
| + | /* For display HanGul using TTF_RenderUTF8_Solid */ | ||
| + | pText = TTF_RenderUTF8_Solid( pFont, TEST_DISPLAY_STRING, pTextColor ); /* Render the text */ | ||
| + | /* | ||
| + | TTF_RenderText_Solid Draw LATIN1 text in solid mode | ||
| + | TTF_RenderUTF8_Solid Draw UTF8 text in solid mode | ||
| + | TTF_RenderUNICODE_Solid Draw UNICODE text in solid mode | ||
| + | TTF_RenderGlyph_Solid Draw a UNICODE glyph in solid mode | ||
| + | */ | ||
| + | /* If there was an error in rendering the text */ | ||
| + | if( pText == (SDL_Surface *)0 ) | ||
| + | { | ||
| + | printf("Fail to TTF_RenderText_Solid !\n"); | ||
| + | } | ||
| + | else | ||
| + | { | ||
| + | printf("OK to TTF_RenderText_Solid !\n"); | ||
| + | | ||
| + | /* Apply the images to the screen */ | ||
| + | sdl_copy_surface( pScreen, 0/*X*/, 150/*Y*/, pText ); | ||
| + | /* Update the screen */ | ||
| + | SDL_Flip( pScreen ); | ||
| + | | ||
| + | /* Free the text surface */ | ||
| + | SDL_FreeSurface( pText ); | ||
| + | } | ||
| + | /* Close the font that was used */ | ||
| + | TTF_CloseFont( pFont ); | ||
| + | } | ||
| + | /* Quit SDL_ttf */ | ||
| + | TTF_Quit(); | ||
| + | } | ||
| + | } | ||
| + | break; | ||
| + | case SDLK_F4: | ||
| + | if ( Event.type == SDL_KEYDOWN ) | ||
| + | { | ||
| + | printf("SDL Event Keys pressed! - F4\n"); | ||
| + | } | ||
| + | else | ||
| + | { | ||
| + | printf("SDL Event Keys release! - F4\n"); | ||
| + | if ( sdl_clear_surface( pScreen ) != 0 ) | ||
| + | { | ||
| + | printf("clar scrren fail\n"); | ||
| + | } | ||
| + | else | ||
| + | { | ||
| + | printf("clar scrren OK\n"); | ||
| + | } | ||
| + | } | ||
| + | break; | ||
| + | case SDLK_F5: | ||
| + | if ( Event.type == SDL_KEYDOWN ) | ||
| + | { | ||
| + | printf("SDL Event Keys pressed! - F5\n"); | ||
| + | } | ||
| + | else | ||
| + | { | ||
| + | printf("SDL Event Keys release! - F5\n"); | ||
| + | } | ||
| + | break; | ||
| + | case SDLK_F6: | ||
| + | if ( Event.type == SDL_KEYDOWN ) | ||
| + | { | ||
| + | printf("SDL Event Keys pressed! - F6\n"); | ||
| + | } | ||
| + | else | ||
| + | { | ||
| + | printf("SDL Event Keys release! - F6\n"); | ||
| + | if( Brightness != 7 ) | ||
| + | { | ||
| + | Brightness ++; | ||
| + | if( bright_set(Brightness) != 0 ) | ||
| + | { | ||
| + | printf("Fail to bright_set\n"); | ||
| + | } | ||
| + | printf("bright -\n"); | ||
| + | } | ||
| + | } | ||
| + | break; | ||
| + | case SDLK_F7: | ||
| + | if ( Event.type == SDL_KEYDOWN ) | ||
| + | { | ||
| + | printf("SDL Event Keys pressed! - F7\n"); | ||
| + | } | ||
| + | else | ||
| + | { | ||
| + | printf("SDL Event Keys release! - F7\n"); | ||
| + | if( Brightness != 0 ) | ||
| + | { | ||
| + | Brightness --; | ||
| + | if( bright_set(Brightness) != 0 ) | ||
| + | { | ||
| + | printf("Fail to bright_set\n"); | ||
| + | } | ||
| + | printf("bright +\n"); | ||
| + | } | ||
| + | } | ||
| + | break; | ||
| + | default: | ||
| + | if ( Event.type == SDL_KEYDOWN ) | ||
| + | { | ||
| + | printf("SDL Event Keys pressed! - ??\n"); | ||
| + | } | ||
| + | else | ||
| + | { | ||
| + | printf("SDL Event Keys release! - ??\n"); | ||
| + | } | ||
| + | break; | ||
| + | } | ||
| + | #ifdef DEBUG_LOW_LEVEL_KEY_INPUT_INFO | ||
| + | printf(" The keyboard device index = %d\n", pKeyEvent->which); | ||
| + | printf(" The SDL_PRESSED or SDL_RELEASED = %d\n", pKeyEvent->state); | ||
| + | printf(" hardware specific scancode = %d\n", pKeyEvent->keysym.scancode); | ||
| + | printf(" SDL virtual keysym = %d\n", pKeyEvent->keysym.sym); | ||
| + | printf(" current key modifiers = %d\n", pKeyEvent->keysym.mod); | ||
| + | printf(" translated character = %d\n", pKeyEvent->keysym.unicode); | ||
| + | #endif | ||
| + | } | ||
| + | else | ||
| + | { | ||
| + | switch (Event.type) | ||
| + | { | ||
| + | case SDL_ACTIVEEVENT: /**< Application loses/gains visibility */ | ||
| + | printf("SDL Event Application loses/gains visibility!\n"); | ||
| + | break; | ||
| + | case SDL_KEYDOWN: /**< Keys pressed */ | ||
| + | printf("SDL Event Keys pressed!\n"); | ||
| + | break; | ||
| + | case SDL_KEYUP: /**< Keys released */ | ||
| + | printf("SDL Event Keys released!\n"); | ||
| + | break; | ||
| + | case SDL_MOUSEMOTION: /**< Mouse moved */ | ||
| + | printf("SDL Event Mouse moved!\n"); | ||
| + | break; | ||
| + | case SDL_MOUSEBUTTONDOWN:/**< Mouse button pressed */ | ||
| + | printf("SDL Event Mouse button pressed!\n"); | ||
| + | break; | ||
| + | case SDL_MOUSEBUTTONUP: /**< Mouse button released */ | ||
| + | printf("SDL Event Mouse button released!\n"); | ||
| + | break; | ||
| + | case SDL_JOYAXISMOTION: /**< Joystick axis motion */ | ||
| + | printf("SDL Event Joystick axis motion!\n"); | ||
| + | break; | ||
| + | case SDL_JOYBALLMOTION: /**< Joystick trackball motion */ | ||
| + | printf("SDL Event Joystick trackball motion!\n"); | ||
| + | break; | ||
| + | case SDL_JOYHATMOTION: /**< Joystick hat position change */ | ||
| + | printf("SDL Event Joystick hat position change!\n"); | ||
| + | break; | ||
| + | case SDL_JOYBUTTONDOWN: /**< Joystick button pressed */ | ||
| + | printf("SDL Event Joystick button pressed!\n"); | ||
| + | break; | ||
| + | case SDL_JOYBUTTONUP: /**< Joystick button released */ | ||
| + | printf("SDL Event Joystick button released!\n"); | ||
| + | break; | ||
| + | case SDL_QUIT: /**< User-requested quit */ | ||
| + | printf("SDL Event User-requested quit!\n"); | ||
| + | break; | ||
| + | case SDL_SYSWMEVENT: /**< System specific event */ | ||
| + | printf("SDL Event System specific!\n"); | ||
| + | break; | ||
| + | case SDL_EVENT_RESERVEDA:/**< Reserved for future use.. */ | ||
| + | printf("SDL Event reserved!\n"); | ||
| + | break; | ||
| + | case SDL_EVENT_RESERVEDB:/**< Reserved for future use.. */ | ||
| + | printf("SDL Event reserved!\n"); | ||
| + | break; | ||
| + | case SDL_VIDEORESIZE: /**< User resized video mode */ | ||
| + | printf("SDL Event User resized video mode!\n"); | ||
| + | break; | ||
| + | case SDL_VIDEOEXPOSE: /**< Screen needs to be redrawn */ | ||
| + | printf("SDL Event Screen needs to be redrawn!\n"); | ||
| + | break; | ||
| + | case SDL_EVENT_RESERVED2:/**< Reserved for future use.. */ | ||
| + | case SDL_EVENT_RESERVED3:/**< Reserved for future use.. */ | ||
| + | case SDL_EVENT_RESERVED4:/**< Reserved for future use.. */ | ||
| + | case SDL_EVENT_RESERVED5:/**< Reserved for future use.. */ | ||
| + | case SDL_EVENT_RESERVED6:/**< Reserved for future use.. */ | ||
| + | case SDL_EVENT_RESERVED7:/**< Reserved for future use.. */ | ||
| + | printf("SDL Event reserved!\n"); | ||
| + | break; | ||
| + | case SDL_USEREVENT: | ||
| + | printf("SDL Event user!\n"); | ||
| + | break; | ||
| + | default: | ||
| + | printf("SDL Event unknown!\n"); | ||
| + | break; | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | | ||
| + | SDL_FreeSurface( pScreen ); | ||
| + | } | ||
| + | | ||
| + | SDL_Quit(); | ||
| + | return 0; | ||
| + | } | ||
| make | make | ||