From 025a929f059b04ff16c20ae41392deea993f5f50 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Cz=C3=A9m=C3=A1n=20Barnab=C3=A1s?= <trabarni@gmail.com>
Date: Sat, 9 Nov 2013 00:06:46 +0100
Subject: [PATCH] =?UTF-8?q?Beviteli=20mez=C5=91=20modified?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 input.c | 119 +++++++++++++++-----------------------------------------
 input.h |   2 +-
 main.c  |   8 ++--
 3 files changed, 37 insertions(+), 92 deletions(-)

diff --git a/input.c b/input.c
index 625d160..1d24d5b 100644
--- a/input.c
+++ b/input.c
@@ -1,53 +1,6 @@
 #include "input.h"
 #define NUMBERS 10
 #define ABC 27
-/*Beviteli típus*/
-typedef struct Key{
-    int key;
-    char character;
-}Key;
-/*Számok*/
-Key number[NUMBERS]={
-    {SDLK_0,'0'},
-    {SDLK_1,'1'},
-    {SDLK_2,'2'},
-    {SDLK_3,'3'},
-    {SDLK_4,'4'},
-    {SDLK_5,'5'},
-    {SDLK_6,'6'},
-    {SDLK_7,'7'},
-    {SDLK_8,'8'},
-    {SDLK_9,'9'}
-};
-/*Betük*/
-Key abc[ABC]={
-    {SDLK_a,'a'},
-    {SDLK_b,'b'},
-    {SDLK_c,'c'},
-    {SDLK_d,'d'},
-    {SDLK_e,'e'},
-    {SDLK_f,'f'},
-    {SDLK_g,'g'},
-    {SDLK_h,'h'},
-    {SDLK_i,'i'},
-    {SDLK_j,'j'},
-    {SDLK_k,'k'},
-    {SDLK_l,'l'},
-    {SDLK_m,'m'},
-    {SDLK_n,'n'},
-    {SDLK_o,'o'},
-    {SDLK_p,'p'},
-    {SDLK_q,'q'},
-    {SDLK_r,'r'},
-    {SDLK_s,'s'},
-    {SDLK_t,'t'},
-    {SDLK_u,'u'},
-    {SDLK_v,'v'},
-    {SDLK_x,'x'},
-    {SDLK_y,'y'},
-    {SDLK_z,'z'}
-
-};
 
 void drawInput(SDL_Surface* screen,Input* input){/*Kirajzol egy inputot*/
         SDL_Rect siz={0}, pos={0};
@@ -59,7 +12,7 @@ void drawInput(SDL_Surface* screen,Input* input){/*Kirajzol egy inputot*/
         SDL_BlitSurface(input->bg,&siz,screen,&pos);
         if(input->textS!=NULL)
         pos.y+=(siz.h-input->textS->h)/2;
-        SDL_BlitSurface(input->textS,&siz,screen,&pos);
+        SDL_BlitSurface(input->textS,NULL,screen,&pos);
 }
 
 void setInput(Input* input,SDL_Surface* bg,SDL_Rect rect){/*Inicializáció*/
@@ -79,35 +32,28 @@ void setInputActive(Input* input,SDL_Event* evt){/*Aktívba állítja az bevitel
 }
 
 
-int addNewElement(Input* input,SDL_Event* evt,Key* in,int n){/*hozzáad egy új karaktert*/
+int addNewElement(Input* input,Uint16 element){/*hozzáad egy új karaktert*/
     int i,exit=0,index=-1;
-    char* cache;
-    for(i=0;i<n && exit!=1;i++){
-        if(evt->key.keysym.sym==in[i].key){
-            exit=1;
-            index=i;
-        }
-    }
-    if(i<n){
-            i=0;
-            cache=(char*)malloc(sizeof(char)*(input->textSize+1));
-            //if(input->text!=NULL)
-            for(i=0;i<input->textSize-1;i++){
-                cache[i]=input->text[i];
-            }
-            cache[i]=in[index].character;
-            cache[i+1]='\0';
-            free(input->text);
-            input->text=cache;
-            input->textSize++;
+    Uint16* cache;
+    i=0;
+    cache=(Uint16*)malloc(sizeof(Uint16)*(input->textSize+1));
+    //if(input->text!=NULL)
+    for(i=0;i<input->textSize-1;i++){
+        cache[i]=input->text[i];
     }
+        cache[i]=element;
+        cache[i+1]='\0';
+        free(input->text);
+        input->text=cache;
+        input->textSize++;
+
     return index;
 }
 
 void deleteAElement(Input* input){/*kitöröl egy karakter*/
     int i=0;
-    char* cache;
-    cache=(char*)malloc(sizeof(char*)*(input->textSize-1));
+    Uint16* cache;
+    cache=(Uint16*)malloc(sizeof(Uint16)*(input->textSize-1));
     for(i=0;i<input->textSize-2;i++){
         cache[i]=input->text[i];
     }
@@ -121,12 +67,13 @@ void renderNewText(Input* input,TTF_Font* font){/*Létrehozza a modosított kép
     SDL_Surface* cache;
     SDL_Color c={0,0,0,255};
     SDL_FreeSurface(input->textS);
-    input->textS=TTF_RenderText_Solid(font,input->text,c);
+    input->textS=TTF_RenderUNICODE_Solid(font,input->text,c);
 
 }
 
 void setInputEvents(Input* input,SDL_Event* evt,TTF_Font* font,int flag){/*Beállítja az eseményeket*/
     int succes=0;
+    SDL_EnableUNICODE(1);
     switch(evt->type){
         case SDL_MOUSEBUTTONDOWN:
             setInputActive(input,evt);
@@ -134,26 +81,24 @@ void setInputEvents(Input* input,SDL_Event* evt,TTF_Font* font,int flag){/*Beál
         case SDL_KEYDOWN:
         /*Ha volt billentyű nyomás és aktiv a bevitelimező akkor keres*/
         if(input->isActive==1){
-            /*Ha nem backspace nyomunk akkor meg keresi a karakter*/
-            if(evt->key.keysym.sym!=SDLK_BACKSPACE){
-                /*Ha csak számokat lehet bevinni vagy ha számokat és betűket*/
-                if(flag==INPUT_NUM||flag==INPUT_ALL){
-                    succes=addNewElement(input,evt,number,NUMBERS+1);
-                }
-                /*Ha számok között talált akkor nem keres a betűk közöt vagy ha csak számokat leheet bevinni*/
-                if((flag==INPUT_ABC||flag==INPUT_ALL)&&succes==-1){
-                    succes=addNewElement(input,evt,abc,ABC);
-                }
-                /*Ha nem talált akkor nem csinál feleslegesen új képet*/
-                if(succes!=-1)
-                renderNewText(input,font);
-            }
-            /*ha backspace-t nyomtunk akkor töröl ha szöveg mérete nem 0*/
-            else{
+            switch(evt->key.keysym.unicode){
+            case 0x0000:
+                /*Nincs megfelelő karaktere*/
+            break;
+            case '\r':
+            case '\n':
+                input->isActive=0;
+            break;
+            case '\b':
                 if(input->textSize!=1){
                     deleteAElement(input);
                     renderNewText(input,font);
                 }
+            break;
+            default:
+                addNewElement(input,evt->key.keysym.unicode);
+                renderNewText(input,font);
+            break;
             }
         }
         break;
diff --git a/input.h b/input.h
index fc5bd0c..5706689 100644
--- a/input.h
+++ b/input.h
@@ -11,7 +11,7 @@
 typedef struct{
     SDL_Surface* bg;
     SDL_Surface* textS;
-    char* text;
+    Uint16* text;
     int textSize;
     SDL_Rect rect;
     int isActive;
diff --git a/main.c b/main.c
index 1c5b556..6d77617 100644
--- a/main.c
+++ b/main.c
@@ -58,10 +58,10 @@ int main()
     setButton(&btn[2],highScore,m_images[1],font,"HighScore");
     setButton(&btn[3],exitGame,m_images[1],font,"Exit");
 
-    //setInput(&inp,m_images[1],inp1);
+    setInput(&inp,m_images[1],inp1);
 
 
-   //SDL_SetColorKey(m_images[0],SDL_SRCCOLORKEY,SDL_MapRGB(m_images[0]->format,0,0,255));
+   //SDL_SetColortúlélőKey(m_images[0],SDL_SRCCOLORKEY,SDL_MapRGB(m_images[0]->format,0,0,255));
     while(btn[3].leftButtonClicked!=1){
         SDL_WaitEvent(&evt);/*Eseményre vát*/
         SDL_BlitSurface(m_images[0],NULL,screen,NULL);/*Háttér*/
@@ -72,7 +72,7 @@ int main()
         drawButton(screen,&evt,btn[1]);
         drawButton(screen,&evt,btn[2]);
         drawButton(screen,&evt,btn[3]);
-        //drawInput(screen,&inp);
+        drawInput(screen,&inp);
 
 
         /*Gomb eseményei*/
@@ -81,7 +81,7 @@ int main()
         setButtonEvents(&btn[2],&evt);
         setButtonEvents(&btn[3],&evt);
 
-        //setInputEvents(&inp,&evt,font,INPUT_ALL);
+        setInputEvents(&inp,&evt,font,INPUT_ALL);
 
         sprintf(debug,"%d",btn[0].leftButtonClicked);
         SDL_BlitSurface(TTF_RenderUTF8_Solid(font,debug,color),NULL,screen,NULL);
-- 
GitLab