From 9bf1c9a4dba0f30a96b6e2152c44c3051d330e4e Mon Sep 17 00:00:00 2001 From: Jim Grandpre Date: Fri, 16 Jul 2010 20:48:43 -0400 Subject: [PATCH] Bug fixes, now using RWops instead of File pointers. --- include/SDL_gesture.h | 6 ++--- src/events/SDL_gesture.c | 45 +++++++++++++++++++++++++------------- touchTest/gestureSDLTest.c | 21 +++++++++++------- 3 files changed, 46 insertions(+), 26 deletions(-) diff --git a/include/SDL_gesture.h b/include/SDL_gesture.h index cade7d13e..497b86e1f 100644 --- a/include/SDL_gesture.h +++ b/include/SDL_gesture.h @@ -57,7 +57,7 @@ extern "C" { * * */ - extern DECLSPEC int SDLCALL SDL_SaveAllDollarTemplates(FILE *fp); + extern DECLSPEC int SDLCALL SDL_SaveAllDollarTemplates(SDL_RWops *src); /** * \brief Save a currently loaded Dollar Gesture template @@ -65,7 +65,7 @@ extern "C" { * */ extern DECLSPEC int - SDLCALL SDL_SaveDollarTemplate(unsigned long gestureId,FILE *fp); + SDLCALL SDL_SaveDollarTemplate(unsigned long gestureId,SDL_RWops *src); /** @@ -73,7 +73,7 @@ extern "C" { * * */ - extern DECLSPEC int SDLCALL SDL_LoadDollarTemplates(int touchId, FILE *fp); + extern DECLSPEC int SDLCALL SDL_LoadDollarTemplates(int touchId, SDL_RWops *src); diff --git a/src/events/SDL_gesture.c b/src/events/SDL_gesture.c index b80717fe7..64e484e5d 100644 --- a/src/events/SDL_gesture.c +++ b/src/events/SDL_gesture.c @@ -110,40 +110,50 @@ unsigned long SDL_HashDollar(Point* points) { return hash; } -int SaveTemplate(DollarTemplate *templ, FILE *fp) { +int SaveTemplate(DollarTemplate *templ, SDL_RWops * src) { + if(src == NULL) return 0; int i; - fprintf(fp,"%lu ",templ->hash); + + //No Longer storing the Hash, rehash on load + //fprintf(fp,"%lu ",templ->hash); + //if(SDL_RWops.write(src,&(templ->hash),sizeof(templ->hash),1) != 1) return 0; + + /* for(i = 0;i < DOLLARNPOINTS;i++) { fprintf(fp,"%i %i ",(int)templ->path[i].x,(int)templ->path[i].y); } fprintf(fp,"\n"); + */ + if(SDL_RWwrite(src,templ->path,sizeof(templ->path[0]),DOLLARNPOINTS) != DOLLARNPOINTS) return 0; + return 1; } -int SDL_SaveAllDollarTemplates(FILE *fp) { +int SDL_SaveAllDollarTemplates(SDL_RWops *src) { int i,j,rtrn = 0; for(i = 0; i < numGestureTouches; i++) { GestureTouch* touch = &gestureTouch[i]; for(j = 0;j < touch->numDollarTemplates; j++) { - rtrn += SaveTemplate(&touch->dollarTemplate[i],fp); + rtrn += SaveTemplate(&touch->dollarTemplate[i],src); } } return rtrn; } -int SDL_SaveDollarTemplate(unsigned long gestureId, FILE *fp) { +int SDL_SaveDollarTemplate(unsigned long gestureId, SDL_RWops *src) { int i,j; for(i = 0; i < numGestureTouches; i++) { GestureTouch* touch = &gestureTouch[i]; for(j = 0;j < touch->numDollarTemplates; j++) { if(touch->dollarTemplate[i].hash == gestureId) { - return SaveTemplate(&touch->dollarTemplate[i],fp); + return SaveTemplate(&touch->dollarTemplate[i],src); } } } } -int SDL_LoadDollarTemplates(int touchId, FILE *fp) { +int SDL_LoadDollarTemplates(int touchId, SDL_RWops *src) { + if(src == NULL) return 0; int i,loaded = 0; GestureTouch *touch = NULL; if(touchId >= 0) { @@ -153,9 +163,10 @@ int SDL_LoadDollarTemplates(int touchId, FILE *fp) { if(touch == NULL) return -1; } - while(!feof(fp)) { + while(1) { DollarTemplate templ; - fscanf(fp,"%lu ",&templ.hash); + //fscanf(fp,"%lu ",&templ.hash); + /* for(i = 0;i < DOLLARNPOINTS; i++) { int x,y; if(fscanf(fp,"%i %i ",&x,&y) != 2) break; @@ -163,22 +174,26 @@ int SDL_LoadDollarTemplates(int touchId, FILE *fp) { templ.path[i].y = y; } fscanf(fp,"\n"); + */ + if(SDL_RWread(src,templ.path,sizeof(templ.path[0]),DOLLARNPOINTS) < DOLLARNPOINTS) break; if(touchId >= 0) { - if(SDL_AddDollarGesture(touch,templ)) loaded++; + printf("Adding loaded gesture to 1 touch\n"); + if(SDL_AddDollarGesture(touch,templ.path)) loaded++; } else { + printf("Adding to: %i touches\n",numGestureTouches); for(i = 0;i < numGestureTouches; i++) { - if(gestureTouch[i].id == touchId) { - touch = &gestureTouch[i]; - SDL_AddDollarGesture(touch,templ); - } + touch = &gestureTouch[i]; + printf("Adding loaded gesture to + touches\n"); + //TODO: What if this fails? + SDL_AddDollarGesture(touch,templ.path); } loaded++; } } - return 1; + return loaded; } diff --git a/touchTest/gestureSDLTest.c b/touchTest/gestureSDLTest.c index 25d99dc74..4b9c256bc 100644 --- a/touchTest/gestureSDLTest.c +++ b/touchTest/gestureSDLTest.c @@ -305,16 +305,21 @@ int main(int argc, char* argv[]) SDL_RecordGesture(-1); } else if(event.key.keysym.sym == 115) { - FILE *fp; - fp = fopen("gestureSave","w"); - SDL_SaveAllDollarTemplates(fp); - fclose(fp); + SDL_RWops *src; + //fp = fopen("gestureSave","w"); + src = SDL_RWFromFile("gestureSave","w"); + + printf("Wrote %i templates\n",SDL_SaveAllDollarTemplates(src)); + //fclose(fp); + SDL_RWclose(src); } else if(event.key.keysym.sym == 108) { - FILE *fp; - fp = fopen("gestureSave","r"); - printf("Loaded: %i\n",SDL_LoadDollarTemplates(-1,fp)); - fclose(fp); + SDL_RWops *src; + //fp = fopen("gestureSave","r"); + src = SDL_RWFromFile("gestureSave","r"); + printf("Loaded: %i\n",SDL_LoadDollarTemplates(-1,src)); + //fclose(fp); + SDL_RWclose(src); } //keypress = 1;