summaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authorTuomas Virtanen <katajakasa@gmail.com>2018-06-23 23:24:02 +0300
committerTuomas Virtanen <katajakasa@gmail.com>2018-06-23 23:24:02 +0300
commit33311c1fae634f1c1530d019aebecc08edebdb5d (patch)
tree7fd265afa100a311a6306d0fe54cce7449adb303 /examples
parentdd449f2c7d32d5c7d909fabed5875e195784e794 (diff)
Properly scale window contents in examples
Diffstat (limited to 'examples')
-rw-r--r--examples/example_cust_video.c25
-rw-r--r--examples/example_video.c30
2 files changed, 32 insertions, 23 deletions
diff --git a/examples/example_cust_video.c b/examples/example_cust_video.c
index c764989..09f8e23 100644
--- a/examples/example_cust_video.c
+++ b/examples/example_cust_video.c
@@ -61,6 +61,14 @@ int64_t seek_callback(void *userdata, int64_t offset, int whence) {
return ftell(fd);
}
+void find_viewport_size(int sw, int sh, int vw, int vh, int *rw, int *rh) {
+ float r_x = (float)sw / (float)vw;
+ float r_y = (float)sh / (float)vh;
+ float r_t = r_x < r_y ? r_x : r_y;
+ *rw = vw * r_t;
+ *rh = vh * r_t;
+}
+
int main(int argc, char *argv[]) {
int err = 0, ret = 0;
const char* filename = NULL;
@@ -243,9 +251,10 @@ int main(int argc, char *argv[]) {
int size_h = 0;
int screen_w = 0;
int screen_h = 0;
- SDL_RenderGetLogicalSize(renderer, &size_w, &size_h);
SDL_GetWindowSize(window, &screen_w, &screen_h);
- bool gui_enabled = false;
+ find_viewport_size(screen_w, screen_h, pinfo.video.width, pinfo.video.height, &size_w, &size_h);
+ SDL_RenderSetLogicalSize(renderer, size_w, size_h);
+ Kit_SetPlayerScreenSize(player, size_w, size_h);
bool fullscreen = false;
while(run) {
if(Kit_GetPlayerState(player) == KIT_STOPPED) {
@@ -285,7 +294,9 @@ int main(int argc, char *argv[]) {
switch(event.window.event) {
case SDL_WINDOWEVENT_SIZE_CHANGED:
SDL_GetWindowSize(window, &screen_w, &screen_h);
- Kit_SetPlayerScreenSize(player, screen_w, screen_h);
+ find_viewport_size(screen_w, screen_h, pinfo.video.width, pinfo.video.height, &size_w, &size_h);
+ SDL_RenderSetLogicalSize(renderer, size_w, size_h);
+ Kit_SetPlayerScreenSize(player, size_w, size_h);
break;
}
break;
@@ -315,10 +326,6 @@ int main(int argc, char *argv[]) {
}
}
- // Enable GUI if mouse is hovering over the bottom third of the screen
- int limit = (pinfo.video.height / 3) * 2;
- gui_enabled = (mouse_y >= limit);
-
// Refresh audio
int queued = SDL_GetQueuedAudioSize(audio_dev);
if(queued < AUDIOBUFFER_SIZE) {
@@ -361,8 +368,8 @@ int main(int argc, char *argv[]) {
}
SDL_RenderSetLogicalSize(renderer, pinfo.video.width, pinfo.video.height);
- // Render GUI
- if(gui_enabled) {
+ // Enable GUI if mouse is hovering over the bottom third of the screen
+ if(mouse_y >= ((size_h / 3) * 2)) {
double percent = Kit_GetPlayerPosition(player) / Kit_GetPlayerDuration(player);
render_gui(renderer, percent);
}
diff --git a/examples/example_video.c b/examples/example_video.c
index 03d13f2..1487173 100644
--- a/examples/example_video.c
+++ b/examples/example_video.c
@@ -45,6 +45,14 @@ void render_gui(SDL_Renderer *renderer, double percent) {
SDL_RenderFillRect(renderer, &progress_top);
}
+void find_viewport_size(int sw, int sh, int vw, int vh, int *rw, int *rh) {
+ float r_x = (float)sw / (float)vw;
+ float r_y = (float)sh / (float)vh;
+ float r_t = r_x < r_y ? r_x : r_y;
+ *rw = vw * r_t;
+ *rh = vh * r_t;
+}
+
int main(int argc, char *argv[]) {
int err = 0, ret = 0;
const char* filename = NULL;
@@ -207,9 +215,6 @@ int main(int argc, char *argv[]) {
// Make sure subtitle texture is in correct blendmode
SDL_SetTextureBlendMode(subtitle_tex, SDL_BLENDMODE_BLEND);
- // Set logical size for the renderer. This way when we scale, we keep aspect ratio.
- SDL_RenderSetLogicalSize(renderer, pinfo.video.width, pinfo.video.height);
-
// Start playback
Kit_PlayerPlay(player);
@@ -220,9 +225,10 @@ int main(int argc, char *argv[]) {
int size_h = 0;
int screen_w = 0;
int screen_h = 0;
- SDL_RenderGetLogicalSize(renderer, &size_w, &size_h);
SDL_GetWindowSize(window, &screen_w, &screen_h);
- bool gui_enabled = false;
+ find_viewport_size(screen_w, screen_h, pinfo.video.width, pinfo.video.height, &size_w, &size_h);
+ SDL_RenderSetLogicalSize(renderer, size_w, size_h);
+ Kit_SetPlayerScreenSize(player, size_w, size_h);
bool fullscreen = false;
while(run) {
if(Kit_GetPlayerState(player) == KIT_STOPPED) {
@@ -262,7 +268,9 @@ int main(int argc, char *argv[]) {
switch(event.window.event) {
case SDL_WINDOWEVENT_SIZE_CHANGED:
SDL_GetWindowSize(window, &screen_w, &screen_h);
- Kit_SetPlayerScreenSize(player, screen_w, screen_h);
+ find_viewport_size(screen_w, screen_h, pinfo.video.width, pinfo.video.height, &size_w, &size_h);
+ SDL_RenderSetLogicalSize(renderer, size_w, size_h);
+ Kit_SetPlayerScreenSize(player, size_w, size_h);
break;
}
break;
@@ -292,10 +300,6 @@ int main(int argc, char *argv[]) {
}
}
- // Enable GUI if mouse is hovering over the bottom third of the screen
- int limit = (pinfo.video.height / 3) * 2;
- gui_enabled = (mouse_y >= limit);
-
// Refresh audio
int queued = SDL_GetQueuedAudioSize(audio_dev);
if(queued < AUDIOBUFFER_SIZE) {
@@ -329,17 +333,15 @@ int main(int argc, char *argv[]) {
// Refresh subtitle texture atlas and render subtitle frames from it
// For subtitles, use screen size instead of video size for best quality
- SDL_RenderSetLogicalSize(renderer, screen_w, screen_h);
SDL_Rect sources[ATLAS_MAX];
SDL_Rect targets[ATLAS_MAX];
int got = Kit_GetPlayerSubtitleData(player, subtitle_tex, sources, targets, ATLAS_MAX);
for(int i = 0; i < got; i++) {
SDL_RenderCopy(renderer, subtitle_tex, &sources[i], &targets[i]);
}
- SDL_RenderSetLogicalSize(renderer, pinfo.video.width, pinfo.video.height);
- // Render GUI
- if(gui_enabled) {
+ // Enable GUI if mouse is hovering over the bottom third of the screen
+ if(mouse_y >= ((size_h / 3) * 2)) {
double percent = Kit_GetPlayerPosition(player) / Kit_GetPlayerDuration(player);
render_gui(renderer, percent);
}