From 6335753e382eec1cf9037545851f1de2459b94cc Mon Sep 17 00:00:00 2001
From: gdkchan <gab.dark.100@gmail.com>
Date: Mon, 18 Feb 2019 21:12:53 -0300
Subject: [PATCH] Implement ConvertScalingMode properly (#596)

* Implement ConvertScalingMode properly

* Fix up the naming

* Only values 2 and 4 are allowed

* Return a nullable enum from ConvetScalingMode

* Fix typo on method name

* Use convertedScalingMode
---
 .../Services/Vi/IApplicationDisplayService.cs | 21 +++++++++++++-----
 Ryujinx.HLE/HOS/Services/Vi/ScalingMode.cs    | 22 ++++++++-----------
 2 files changed, 24 insertions(+), 19 deletions(-)

diff --git a/Ryujinx.HLE/HOS/Services/Vi/IApplicationDisplayService.cs b/Ryujinx.HLE/HOS/Services/Vi/IApplicationDisplayService.cs
index b272e0788d..48cf328806 100644
--- a/Ryujinx.HLE/HOS/Services/Vi/IApplicationDisplayService.cs
+++ b/Ryujinx.HLE/HOS/Services/Vi/IApplicationDisplayService.cs
@@ -180,22 +180,31 @@ namespace Ryujinx.HLE.HOS.Services.Vi
 
         public long ConvertScalingMode(ServiceCtx context)
         {
-            SrcScalingMode  scalingMode     = (SrcScalingMode)context.RequestData.ReadInt32();
-            DstScalingMode? destScalingMode = ConvetScalingModeImpl(scalingMode);
+            SrcScalingMode scalingMode = (SrcScalingMode)context.RequestData.ReadInt32();
 
-            if (!destScalingMode.HasValue)
+            DstScalingMode? convertedScalingMode = ConvertScalingMode(scalingMode);
+
+            if (!convertedScalingMode.HasValue)
             {
+                //Scaling mode out of the range of valid values.
                 return MakeError(ErrorModule.Vi, 1);
             }
 
-            context.ResponseData.Write((ulong)destScalingMode);
+            if (scalingMode != SrcScalingMode.ScaleToWindow &&
+                scalingMode != SrcScalingMode.PreserveAspectRatio)
+            {
+                //Invalid scaling mode specified.
+                return MakeError(ErrorModule.Vi, 6);
+            }
+
+            context.ResponseData.Write((ulong)convertedScalingMode);
 
             return 0;
         }
 
-        private DstScalingMode? ConvetScalingModeImpl(SrcScalingMode srcScalingMode)
+        private DstScalingMode? ConvertScalingMode(SrcScalingMode source)
         {
-            switch (srcScalingMode)
+            switch (source)
             {
                 case SrcScalingMode.None:                return DstScalingMode.None;
                 case SrcScalingMode.Freeze:              return DstScalingMode.Freeze;
diff --git a/Ryujinx.HLE/HOS/Services/Vi/ScalingMode.cs b/Ryujinx.HLE/HOS/Services/Vi/ScalingMode.cs
index 824a27b70a..7b555b5999 100644
--- a/Ryujinx.HLE/HOS/Services/Vi/ScalingMode.cs
+++ b/Ryujinx.HLE/HOS/Services/Vi/ScalingMode.cs
@@ -1,24 +1,20 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-
-namespace Ryujinx.HLE.HOS.Services.Vi
+namespace Ryujinx.HLE.HOS.Services.Vi
 {
     enum SrcScalingMode
     {
-        Freeze = 0,
-        ScaleToWindow = 1,
-        ScaleAndCrop = 2,
-        None = 3,
+        None                = 0,
+        Freeze              = 1,
+        ScaleToWindow       = 2,
+        ScaleAndCrop        = 3,
         PreserveAspectRatio = 4
     }
 
     enum DstScalingMode
     {
-        None = 0,
-        Freeze = 1,
-        ScaleToWindow = 2,
-        ScaleAndCrop = 3,
+        Freeze              = 0,
+        ScaleToWindow       = 1,
+        ScaleAndCrop        = 2,
+        None                = 3,
         PreserveAspectRatio = 4
     }
 }