]> Nishi Git Mirror - mivfx.git/commitdiff
画像は大き過ぎるの場合、画面に合うまで小さくにする様に
author諏訪子 <suwako@076.moe>
Thu, 2 May 2024 10:00:38 +0000 (19:00 +0900)
committer諏訪子 <suwako@076.moe>
Thu, 2 May 2024 10:00:38 +0000 (19:00 +0900)
.gitignore
CHANGELOG.md
main.c

index d4d3cd9209eb16ad79ac3e8e12a4569fdda3d6f0..ac2f9afdef7b520b269d04be5283590ea8a1a94d 100644 (file)
@@ -1,2 +1,3 @@
 mivfx
 release
+*.core
index 302b9b0f70130eb0f8002ca41397df4f5a372101..93bae8d762b6d33133bc4c49b03610480a3491c9 100644 (file)
@@ -1,6 +1,7 @@
 # 0.5.0
 * .desktopファイルの追加
 * CDNを回避する様に
+* 画像は大き過ぎるの場合、画面に合うまで小さくにする様に
 
 # 0.4.0
 * URLから画像ファイルを開ける様に
diff --git a/main.c b/main.c
index db2e31b979ab27ae8726100be2d8bd4e12943678..07b161b837f90c81e314a7834a63a4a77043b2d6 100644 (file)
--- a/main.c
+++ b/main.c
@@ -15,6 +15,8 @@ int imgWidth;
 int imgHeight;
 int screenWidth;
 int screenHeight;
+int init = 0;
+SDL_Rect renderQuad;
 
 const char* sofname = "mivfx";
 const char* version = "0.5.0";
@@ -50,6 +52,10 @@ bool dlfile(const char* url, const char* filename) {
 }
 
 void windowevent(SDL_Event e) {
+  int windowWidth, windowHeight;
+  SDL_GetWindowSize(window, &windowWidth, &windowHeight);
+  SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);
+
   if (e.type == SDL_QUIT) {
     quit = true;
   } else if (e.type == SDL_WINDOWEVENT && e.window.event == SDL_WINDOWEVENT_RESIZED) {
@@ -85,15 +91,38 @@ void windowevent(SDL_Event e) {
     SDL_RenderCopy(renderer, texture, NULL, &renderQuad);
     SDL_SetWindowSize(window, scaledWidth, scaledHeight);
   } else if (e.type == SDL_WINDOWEVENT && e.window.event == SDL_WINDOWEVENT_EXPOSED) {
-    // 再描画が必要な場合
-
-    // 画面の更新
+    SDL_Rect renderQuad = { imgWidth, imgHeight, imgWidth, imgHeight };
     SDL_RenderClear(renderer);
 
-    // テキスチャーの表示
-    SDL_RenderCopy(renderer, texture, NULL, NULL);
+    renderQuad.x = (windowWidth - renderQuad.w) / 2;
+    renderQuad.y = (windowHeight - renderQuad.h) / 2;
+
+    if (init == 0) {
+      renderQuad.w = imgWidth;
+      renderQuad.h = imgHeight;
+    }
 
-    // 画面の更新
+    if (
+        (imgWidth >= (screenWidth - 100)) &&
+        imgHeight >= (screenHeight - 100)
+    ) {
+      imgWidth -= (screenWidth * 3);
+      imgHeight -= (screenHeight * 3);
+    } else if (
+        (imgWidth >= (screenWidth - 100)) &&
+        imgHeight <= (screenHeight - 100)
+    ) {
+      imgWidth -= (screenWidth * 3);
+    } else if (
+        (imgWidth <= (screenWidth - 100)) &&
+        imgHeight >= (screenHeight - 100)
+    ) {
+      imgHeight -= (screenHeight * 3);
+    }
+
+    SDL_RenderCopy(renderer, texture, NULL, &renderQuad);
+    if (init == 0) SDL_SetWindowSize(window, imgWidth + 20, imgHeight + 20);
+    init = 1;
     SDL_RenderPresent(renderer);
   }
 }