From ea093962189ab29da1cea9b69dcffa8bb32d64da Mon Sep 17 00:00:00 2001 From: Brandon Wright Date: Sat, 29 Mar 2014 05:48:35 -0500 Subject: [PATCH] Add more aspect correction options. --- gtk/src/gtk_display.cpp | 24 +++- gtk/src/gtk_s9xwindow.cpp | 66 +++-------- gtk/src/gtk_s9xwindow.h | 1 + gtk/src/snes9x.ui | 237 +++++--------------------------------- 4 files changed, 66 insertions(+), 262 deletions(-) diff --git a/gtk/src/gtk_display.cpp b/gtk/src/gtk_display.cpp index 31e3947d..b14d47c2 100644 --- a/gtk/src/gtk_display.cpp +++ b/gtk/src/gtk_display.cpp @@ -63,10 +63,26 @@ S9xSetEndianess (int type) double S9xGetAspect (void) { - if (gui_config->aspect_ratio) - return (4.0 / 3.0); - else - return (8.0 / 7.0); + double native_aspect = 256.0 / (gui_config->overscan ? 240.0 : 224.0); + double aspect; + + switch (gui_config->aspect_ratio) + { + case 0: /* Square pixels */ + aspect = native_aspect; + break; + + case 1: /* 4:3 */ + aspect = native_aspect * 7 / 6; + break; + + case 2: + default: /* Correct */ + aspect = native_aspect * 8 / 7; + break; + } + + return aspect; } void diff --git a/gtk/src/gtk_s9xwindow.cpp b/gtk/src/gtk_s9xwindow.cpp index 21e5ea34..d9b8ba05 100644 --- a/gtk/src/gtk_s9xwindow.cpp +++ b/gtk/src/gtk_s9xwindow.cpp @@ -307,7 +307,7 @@ event_fullscreen (GtkWidget *widget, gpointer data) static void event_exact_pixels_1x (GtkWidget *widget, gpointer data) { - ((Snes9xWindow *) data)->resize_viewport (256, 224); + ((Snes9xWindow *) data)->resize_to_multiple (1); return; } @@ -315,7 +315,7 @@ event_exact_pixels_1x (GtkWidget *widget, gpointer data) static void event_exact_pixels_2x (GtkWidget *widget, gpointer data) { - ((Snes9xWindow *) data)->resize_viewport (256 * 2, 224 * 2); + ((Snes9xWindow *) data)->resize_to_multiple (2); return; } @@ -323,7 +323,7 @@ event_exact_pixels_2x (GtkWidget *widget, gpointer data) static void event_exact_pixels_3x (GtkWidget *widget, gpointer data) { - ((Snes9xWindow *) data)->resize_viewport (256 * 3, 224 * 3); + ((Snes9xWindow *) data)->resize_to_multiple (3); return; } @@ -331,7 +331,7 @@ event_exact_pixels_3x (GtkWidget *widget, gpointer data) static void event_exact_pixels_4x (GtkWidget *widget, gpointer data) { - ((Snes9xWindow *) data)->resize_viewport (256 * 4, 224 * 4); + ((Snes9xWindow *) data)->resize_to_multiple (4); return; } @@ -339,47 +339,7 @@ event_exact_pixels_4x (GtkWidget *widget, gpointer data) static void event_exact_pixels_5x (GtkWidget *widget, gpointer data) { - ((Snes9xWindow *) data)->resize_viewport (256 * 5, 224 * 5); - - return; -} - -static void -event_correct_aspect_1x (GtkWidget *widget, gpointer data) -{ - ((Snes9xWindow *) data)->resize_viewport (224 * 4 / 3, 224); - - return; -} - -static void -event_correct_aspect_2x (GtkWidget *widget, gpointer data) -{ - ((Snes9xWindow *) data)->resize_viewport (224 * 4 * 2 / 3, 224 * 2); - - return; -} - -static void -event_correct_aspect_3x (GtkWidget *widget, gpointer data) -{ - ((Snes9xWindow *) data)->resize_viewport (224 * 4 * 3 / 3, 224 * 3); - - return; -} - -static void -event_correct_aspect_4x (GtkWidget *widget, gpointer data) -{ - ((Snes9xWindow *) data)->resize_viewport (224 * 4 * 4 / 3, 224 * 4); - - return; -} - -static void -event_correct_aspect_5x (GtkWidget *widget, gpointer data) -{ - ((Snes9xWindow *) data)->resize_viewport (224 * 4 * 5 / 3, 224 * 5); + ((Snes9xWindow *) data)->resize_to_multiple (5); return; } @@ -626,11 +586,6 @@ Snes9xWindow::Snes9xWindow (Snes9xConfig *config) : { "exact_3x", G_CALLBACK (event_exact_pixels_3x) }, { "exact_4x", G_CALLBACK (event_exact_pixels_4x) }, { "exact_5x", G_CALLBACK (event_exact_pixels_5x) }, - { "correct_1x", G_CALLBACK (event_correct_aspect_1x) }, - { "correct_2x", G_CALLBACK (event_correct_aspect_2x) }, - { "correct_3x", G_CALLBACK (event_correct_aspect_3x) }, - { "correct_4x", G_CALLBACK (event_correct_aspect_4x) }, - { "correct_5x", G_CALLBACK (event_correct_aspect_5x) }, { "open_multicart", G_CALLBACK (event_open_multicart) }, { NULL, NULL } @@ -2044,3 +1999,14 @@ Snes9xWindow::update_accels (void) return; } + +void +Snes9xWindow::resize_to_multiple (int factor) +{ + int h = (config->overscan ? 240 : 224) * factor; + int w = h * S9xGetAspect (); + + resize_viewport (w, h); + + return; +} diff --git a/gtk/src/gtk_s9xwindow.h b/gtk/src/gtk_s9xwindow.h index 8ae3bb4b..3a911c70 100644 --- a/gtk/src/gtk_s9xwindow.h +++ b/gtk/src/gtk_s9xwindow.h @@ -62,6 +62,7 @@ class Snes9xWindow : public GtkBuilderWindow void reset_screensaver (void); void update_accels (void); void toggle_ui (void); + void resize_to_multiple (int factor); void resize_viewport (int width, int height); void expose (GdkEventExpose *event, cairo_t *cr); diff --git a/gtk/src/snes9x.ui b/gtk/src/snes9x.ui index bff0a613..051c2cd8 100644 --- a/gtk/src/snes9x.ui +++ b/gtk/src/snes9x.ui @@ -102,7 +102,6 @@ True True True - False True @@ -264,7 +263,6 @@ True True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - False True @@ -385,7 +383,6 @@ True True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - False True @@ -402,7 +399,6 @@ True True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - False True @@ -459,7 +455,6 @@ True True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - False True @@ -477,7 +472,6 @@ True True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - False True @@ -795,6 +789,9 @@ 4:3 SNES correct aspect + + 8*8:7*7 NTSC + @@ -1038,7 +1035,6 @@ True False - False _File True @@ -1049,7 +1045,6 @@ _Open ROM Image... True False - False True image2 False @@ -1061,7 +1056,6 @@ True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - False Open Recent True @@ -1078,7 +1072,6 @@ True False Open a ROM to use with NetPlay - False True image3 False @@ -1089,7 +1082,6 @@ True False - False Open _MultiCart... True @@ -1105,7 +1097,6 @@ True False - False _Load State True @@ -1116,7 +1107,6 @@ True False - False Slot _0 True @@ -1126,7 +1116,6 @@ True False - False Slot _1 True @@ -1136,7 +1125,6 @@ True False - False Slot _2 True @@ -1146,7 +1134,6 @@ True False - False Slot _3 True @@ -1156,7 +1143,6 @@ True False - False Slot _4 True @@ -1166,7 +1152,6 @@ True False - False Slot _5 True @@ -1176,7 +1161,6 @@ True False - False Slot _6 True @@ -1186,7 +1170,6 @@ True False - False Slot _7 True @@ -1196,7 +1179,6 @@ True False - False Slot _8 True @@ -1212,7 +1194,6 @@ True False - False From _File... True @@ -1226,7 +1207,6 @@ True False - False _Save State True @@ -1237,7 +1217,6 @@ True False - False Slot _0 True @@ -1247,7 +1226,6 @@ True False - False Slot _1 True @@ -1257,7 +1235,6 @@ True False - False Slot _2 True @@ -1267,7 +1244,6 @@ True False - False Slot _3 True @@ -1277,7 +1253,6 @@ True False - False Slot _4 True @@ -1287,7 +1262,6 @@ True False - False Slot _5 True @@ -1297,7 +1271,6 @@ True False - False Slot _6 True @@ -1307,7 +1280,6 @@ True False - False Slot _7 True @@ -1317,7 +1289,6 @@ True False - False Slot _8 True @@ -1333,7 +1304,6 @@ True False - False To _File... True @@ -1354,7 +1324,6 @@ Save SPC... True False - False True image4 False @@ -1372,7 +1341,6 @@ Show ROM _Info... True False - False True image5 False @@ -1390,7 +1358,6 @@ _Quit True False - False True image18 False @@ -1405,7 +1372,6 @@ True False - False _Emulation True @@ -1416,7 +1382,6 @@ Run / _Continue True False - False True image6 False @@ -1428,7 +1393,6 @@ _Pause True False - False True image7 False @@ -1448,7 +1412,6 @@ True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - False True image8 False @@ -1461,7 +1424,6 @@ True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - False True image19 False @@ -1474,7 +1436,6 @@ True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - False True image9 False @@ -1487,7 +1448,6 @@ True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - False True image10 False @@ -1505,7 +1465,6 @@ Sy_nc Clients True False - False True image11 False @@ -1524,7 +1483,6 @@ True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - False True image12 False @@ -1536,7 +1494,6 @@ Soft _Reset True False - False True image13 False @@ -1551,7 +1508,6 @@ True False - False _View True @@ -1563,7 +1519,6 @@ _Hide Menu True False - False True image14 False @@ -1574,7 +1529,6 @@ True False - False _Status Bar True @@ -1591,7 +1545,6 @@ _Change Size True False - False True image17 False @@ -1599,21 +1552,10 @@ True False - - - True - False - False - False - Exact Pixels - True - - True False - False _1x True @@ -1623,7 +1565,6 @@ True False - False _2x True @@ -1633,7 +1574,6 @@ True False - False _3x True @@ -1643,7 +1583,6 @@ True False - False _4x True @@ -1653,78 +1592,11 @@ True False - False _5x True - - - True - False - - - - - True - False - False - False - Correct Aspect - True - - - - - True - False - False - 1x - True - - - - - - True - False - False - 2x - True - - - - - - True - False - False - 3x - True - - - - - - True - False - False - 4x - True - - - - - - True - False - False - 5x - True - - - @@ -1740,7 +1612,6 @@ _Fullscreen True False - False True image15 False @@ -1755,7 +1626,6 @@ True False - False _Options True @@ -1765,7 +1635,6 @@ True False - False Controller Ports True @@ -1775,7 +1644,6 @@ True False - False SNES Port 1 True @@ -1786,7 +1654,6 @@ True False - False Joypad True @@ -1796,7 +1663,6 @@ True False - False Mouse True joypad1 @@ -1807,7 +1673,6 @@ True False - False Superscope True True @@ -1823,7 +1688,6 @@ True False - False SNES Port 2 True @@ -1834,7 +1698,6 @@ True False - False Joypad True @@ -1844,7 +1707,6 @@ True False - False Mouse True joypad2 @@ -1855,7 +1717,6 @@ True False - False Multitap True joypad2 @@ -1866,7 +1727,6 @@ True False - False Superscope True True @@ -1893,7 +1753,6 @@ True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - False _Cheats... True @@ -1911,7 +1770,6 @@ _Preferences... True False - False True image16 False @@ -1985,7 +1843,6 @@ True True True - False True @@ -2000,7 +1857,6 @@ True True True - False True @@ -2130,7 +1986,6 @@ True True True - False True @@ -2146,7 +2001,6 @@ True True True - False True @@ -2209,7 +2063,6 @@ True True True - False @@ -2223,7 +2076,6 @@ True True True - False @@ -2283,7 +2135,6 @@ True False Connect to another computer that is running Snes9x NetPlay as a server - False True True @@ -2372,7 +2223,6 @@ True False Host a game on this computer as Player 1, requiring extra throughput to support multitple users - False True True connect_radio @@ -2427,7 +2277,6 @@ True False Reset the game when players join instead of transferring potentially unreliable freeze states - False True @@ -2443,7 +2292,6 @@ True False Send the running game image to players instead of requiring them to have their own copies - False True @@ -2608,7 +2456,6 @@ True True False - False True @@ -2624,7 +2471,6 @@ True True False - False True @@ -2641,7 +2487,6 @@ True True False - False True @@ -2656,7 +2501,6 @@ True True True - False True @@ -2729,7 +2573,6 @@ True False Go to fullscreen mode immediately after opening a ROM - False True True @@ -2745,7 +2588,6 @@ True True False - False True True @@ -2762,7 +2604,6 @@ True False Use SNES extended height. Will probably cause letterboxing - False True True @@ -2784,7 +2625,6 @@ True False Changes the screen resolution when running Snes9x in fullscreen mode - False True True @@ -2863,7 +2703,6 @@ True False Scales the image so no black bars are present - False True True @@ -2874,20 +2713,16 @@ - + True False 12 - - Maintain aspect-ratio: + True - True - False - Scales the image as large as possible without distortion - False - True - True + False + 0 + Aspect ratio: False @@ -2909,17 +2744,33 @@ False - True + False 1 - False + True True 1 + + + Maintain aspect-ratio + True + True + False + Scales the image as large as possible without distortion + True + True + + + False + False + 2 + + True @@ -2932,7 +2783,6 @@ True False Allows scaling and filtering to use multiple processors - False True True @@ -2976,7 +2826,7 @@ False True - 2 + 3 @@ -3018,7 +2868,7 @@ False True - 3 + 4 @@ -3062,7 +2912,7 @@ False False - 4 + 5 @@ -3133,7 +2983,6 @@ True True True - False @@ -3148,7 +2997,6 @@ True True True - False @@ -3163,7 +3011,6 @@ True True True - False @@ -3178,7 +3025,6 @@ True True True - False @@ -3571,7 +3417,6 @@ True True False - False True @@ -3755,7 +3600,6 @@ True True False - False True True @@ -3778,7 +3622,6 @@ True False Sync the image to the vertical retrace to stop tearing - False True True @@ -3795,7 +3638,6 @@ True False Sync the program with the video output after every displayed frame to reduce input latency - False True @@ -3811,7 +3653,6 @@ True False Prevents edge artifacts, but can slow performance - False True @@ -3828,7 +3669,6 @@ False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK Can be faster or slower depending on drivers - False True @@ -3902,7 +3742,6 @@ True True False - False 0 True @@ -3935,7 +3774,6 @@ True True True - False @@ -3969,7 +3807,6 @@ True False Forces a swapped byte-ordering for cases where the system's endian is used instead of the video card - False True @@ -4123,7 +3960,6 @@ True False Base emulation speed on the rate sound is output - False True @@ -4139,7 +3975,6 @@ True False Disables output of sound - False True True @@ -4156,7 +3991,6 @@ True False Output two channels, left and right - False True True @@ -4479,7 +4313,6 @@ Block invalid VRAM access True False - False True @@ -4495,7 +4328,6 @@ True False Let left and right or up and down be pressed at the same time - False True @@ -4547,7 +4379,6 @@ True True False - False True @@ -4640,7 +4471,6 @@ True True False - False True @@ -4857,7 +4687,6 @@ True True True - False @@ -4873,7 +4702,6 @@ True True True - False @@ -4891,7 +4719,6 @@ True True True - False @@ -4909,7 +4736,6 @@ True True True - False @@ -4927,7 +4753,6 @@ True True True - False @@ -5213,7 +5038,6 @@ True True True - False True @@ -5270,7 +5094,6 @@ True True True - False True @@ -5294,7 +5117,6 @@ True False Allow using modifier keys as independent keys instead of modifiers - False True True @@ -6357,7 +6179,6 @@ True True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - False True