From 9bd753c5d429cc69e1b013042e499cdd492fbd05 Mon Sep 17 00:00:00 2001 From: =?utf8?q?=E8=AB=8F=E8=A8=AA=E5=AD=90?= Date: Thu, 2 May 2024 19:58:42 +0900 Subject: [PATCH] =?utf8?q?=E3=82=BA=E3=83=BC=E3=83=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- main.c | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/main.c b/main.c index cd5449c..c4001d9 100644 --- a/main.c +++ b/main.c @@ -18,6 +18,9 @@ int screenHeight; int init = 0; SDL_Rect renderQuad; +// ズーム +float zoom = 1.0f; + const char* sofname = "mivfx"; const char* version = "0.5.0"; @@ -64,6 +67,59 @@ void windowevent(SDL_Event e) { } else if (e.key.keysym.sym == SDLK_a) { // GIFアニメーションの停止・続き、0.6.0から追加する予定 } + } else if (e.type == SDL_MOUSEWHEEL) { + // TODO: ノートパソコンでおかしくなる + float zoomSpeed = 0.1f; + if (e.wheel.y > 0) { + zoom += zoomSpeed; + } else if (e.wheel.y < 0) { + zoom -= zoomSpeed; + } + + if (zoom < 0.1f) { + zoom = 0.1f; + } + + // 画像のサイズが変わった場合 + float newWidth = (float)imgWidth * zoom; + float newHeight = (float)imgHeight * zoom; + + float minLimit = 50.0f; + float maxLimitW = (screenWidth - 20); + float maxLimitH = (screenHeight - 20); + + // 画像は50x50以下じゃ駄目 + if (newWidth < minLimit && newWidth < minLimit) { + newWidth = minLimit; + newHeight = minLimit; + } else if (newWidth < minLimit && newHeight >= minLimit) { + newWidth = minLimit; + } else if (newWidth >= minLimit && newHeight < minLimit) { + newHeight = minLimit; + } + + // 大きすぎの場合もふざけんな + // TODO: 大きすぎの場合は、ズームインを辞める様にして + if (newWidth >= maxLimitW && newHeight >= maxLimitH) { + newHeight = (screenHeight * aspectRatio) - 20; + newWidth = (screenWidth * aspectRatio) - 20; + } else if (newWidth >= maxLimitW && newHeight < maxLimitH) { + newWidth = (screenWidth * aspectRatio) - 20; + } else if (newWidth < maxLimitW && newHeight >= maxLimitH) { + newHeight = (screenHeight * aspectRatio) - 20; + } + + // テキスチャーのレンダーリングサイズの設定 + SDL_RenderClear(renderer); + + renderQuad.w = (int)newWidth; + renderQuad.h = (int)newHeight; + renderQuad.x = (windowWidth - renderQuad.w) / 2; + renderQuad.y = (windowHeight - renderQuad.h) / 2; + + SDL_RenderClear(renderer); + SDL_RenderCopy(renderer, texture, NULL, &renderQuad); + SDL_RenderPresent(renderer); } else if (e.type == SDL_WINDOWEVENT && e.window.event == SDL_WINDOWEVENT_RESIZED) { // ウィンドウのサイズが変わった場合 int newWidth = e.window.data1; -- 2.43.0