Browse Source

SDL2: touch overlay support

Wei Mingzhi 10 years ago
parent
commit
c522bc8fb9
2 changed files with 46 additions and 7 deletions
  1. 15 6
      input.c
  2. 31 1
      video.c

+ 15 - 6
input.c

@@ -672,17 +672,17 @@ PAL_GetTouchArea(
       //
 	  return TOUCH_NONE;
    }
-   else if (X < 0.4)
+   else if (X < 1.0 / 3)
    {
-      if (Y - 0.5 < (0.2 - fabs(X - 0.2)) * (0.25 / 0.2))
+      if (Y - 0.5 < (1.0 / 6 - fabs(X - 1.0 / 3 / 2)) * (0.5 / (1.0 / 3)))
       {
          return TOUCH_UP;
       }
-	  else if (Y - 0.75 > fabs(X - 0.2) * (0.25 / 0.2))
+	  else if (Y - 0.75 > fabs(X - 1.0 / 3 / 2) * (0.5 / (1.0 / 3)))
 	  {
 		 return TOUCH_DOWN;
 	  }
-	  else if (X < 0.2 && fabs(Y - 0.75) < 0.25 - X * (0.25 / 0.2))
+	  else if (X < 1.0 / 3 / 2 && fabs(Y - 0.75) < 0.25 - X * (0.5 / (1.0 / 3)))
 	  {
 		 return TOUCH_LEFT;
 	  }
@@ -691,9 +691,9 @@ PAL_GetTouchArea(
 		 return TOUCH_RIGHT;
 	  }
    }
-   else if (X > 0.6)
+   else if (X > 1.0 - 1.0 / 3)
    {
-	  if (X < 0.8)
+	  if (X < 1.0 - (1.0 / 3 / 2))
 	  {
 		 if (Y < 0.75)
 		 {
@@ -748,6 +748,14 @@ PAL_SetTouchAction(
 	  break;
 
    case TOUCH_BUTTON1:
+      if (gpGlobals->fInBattle)
+      {
+         g_InputState.dwKeyPress |= kKeyRepeat;
+      }
+      else
+      {
+         g_InputState.dwKeyPress |= kKeyThrowItem;
+      }
 	  break;
 
    case TOUCH_BUTTON2:
@@ -755,6 +763,7 @@ PAL_SetTouchAction(
 	  break;
 
    case TOUCH_BUTTON3:
+      g_InputState.dwKeyPress |= kKeyUseItem;
 	  break;
 
    case TOUCH_BUTTON4:

+ 31 - 1
video.c

@@ -31,6 +31,7 @@ SDL_Surface              *gpScreenBak        = NULL;
 #if SDL_VERSION_ATLEAST(2,0,0)
 static SDL_Window        *gpWindow           = NULL;
 static SDL_Renderer      *gpRenderer         = NULL;
+static SDL_Texture       *gpTouchOverlay     = NULL;
 #else
 static SDL_Surface       *gpScreenReal       = NULL;
 #endif
@@ -83,6 +84,10 @@ VIDEO_Init(
 
 --*/
 {
+#if SDL_VERSION_ATLEAST(2,0,0)
+   SDL_Surface *overlay;
+#endif
+
    g_wInitialWidth = wScreenWidth;
    g_wInitialHeight = wScreenHeight;
 
@@ -114,7 +119,7 @@ VIDEO_Init(
 
 #if defined (__IOS__)
    SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 0);
- //  SDL_GL_SetAttribute(SDL_GL_RETAINED_BACKING, 1);
+   SDL_GL_SetAttribute(SDL_GL_RETAINED_BACKING, 1);
 #endif
 
    //
@@ -149,6 +154,15 @@ VIDEO_Init(
       return -2;
    }
 
+   overlay = SDL_LoadBMP(PAL_PREFIX "overlay.bmp");
+   if (overlay != NULL)
+   {
+      SDL_SetColorKey(overlay, SDL_RLEACCEL, SDL_MapRGB(overlay->format, 255, 0, 255));
+      gpTouchOverlay = SDL_CreateTextureFromSurface(gpRenderer, overlay);
+      SDL_SetTextureAlphaMod(gpTouchOverlay, 120);
+      SDL_FreeSurface(overlay);
+   }
+
 #else
 
    //
@@ -362,6 +376,10 @@ VIDEO_UpdateScreen(
       {
          SDL_RenderCopy(gpRenderer, pTexture, NULL, NULL);
       }
+      if (gpTouchOverlay)
+      {
+         SDL_RenderCopy(gpRenderer, gpTouchOverlay, NULL, NULL);
+      }
       SDL_RenderPresent(gpRenderer);
       SDL_DestroyTexture(pTexture);
    }
@@ -893,6 +911,10 @@ VIDEO_SwitchScreen(
         pTexture = SDL_CreateTextureFromSurface(gpRenderer, gpScreenBak);
         SDL_RenderClear(gpRenderer);
         SDL_RenderCopy(gpRenderer, pTexture, NULL, NULL);
+        if (gpTouchOverlay)
+        {
+            SDL_RenderCopy(gpRenderer, gpTouchOverlay, NULL, NULL);
+        }
         SDL_RenderPresent(gpRenderer);
         SDL_DestroyTexture(pTexture);
 
@@ -1048,6 +1070,10 @@ VIDEO_FadeScreen(
                 pTexture = SDL_CreateTextureFromSurface(gpRenderer, gpScreenBak);
                 SDL_RenderClear(gpRenderer);
                 SDL_RenderCopy(gpRenderer, pTexture, &srcrect, &dstrect);
+                if (gpTouchOverlay)
+                {
+                    SDL_RenderCopy(gpRenderer, gpTouchOverlay, NULL, NULL);
+                }
                 SDL_RenderPresent(gpRenderer);
                 SDL_DestroyTexture(pTexture);
 
@@ -1057,6 +1083,10 @@ VIDEO_FadeScreen(
             {
                 pTexture = SDL_CreateTextureFromSurface(gpRenderer, gpScreenBak);
                 SDL_RenderCopy(gpRenderer, pTexture,  NULL, NULL);
+                if (gpTouchOverlay)
+                {
+                    SDL_RenderCopy(gpRenderer, gpTouchOverlay, NULL, NULL);
+                }
                 SDL_RenderPresent(gpRenderer);
                 SDL_DestroyTexture(pTexture);
             }