From 98b1a63d26ce90c9be80126e8170c40da9c0b202 Mon Sep 17 00:00:00 2001
From: Svornost <11434-svornost@users.noreply.gitgud.io>
Date: Mon, 23 Nov 2020 02:09:55 -0800
Subject: [PATCH] FCHost - map Ctrl+Plus and Ctrl+Minus keybinds to zoom in and
 out.

---
 FCHost/fchost/fchost_handler.cc | 28 ++++++++++++++++++++++++----
 1 file changed, 24 insertions(+), 4 deletions(-)

diff --git a/FCHost/fchost/fchost_handler.cc b/FCHost/fchost/fchost_handler.cc
index 367b5f8ac47..970b4e0176b 100644
--- a/FCHost/fchost/fchost_handler.cc
+++ b/FCHost/fchost/fchost_handler.cc
@@ -190,10 +190,18 @@ bool FCHostHandler::OnPreKeyEvent(CefRefPtr<CefBrowser> browser,
 {
 	CEF_REQUIRE_UI_THREAD();
 
-	if (event.type == cef_key_event_type_t::KEYEVENT_CHAR)
+    // for nonwindows platforms, we need to know the windows equivalent keycode, because CEF will convert to them for us
+    const int key_f = 0x46;
+    const int key_j = 0x4A;
+    const int key_plus = 0xBB;
+    const int key_numpad_plus = 0x6B;
+    const int key_minus = 0xBD;
+    const int key_numpad_minus = 0x6D;
+
+	if (event.type == cef_key_event_type_t::KEYEVENT_RAWKEYDOWN)
 	{
 		// CTRL+SHIFT+J - bring up the Javascript debugger
-		if ((event.modifiers == (cef_event_flags_t::EVENTFLAG_CONTROL_DOWN | cef_event_flags_t::EVENTFLAG_SHIFT_DOWN)) && event.unmodified_character == 10 /* j? maybe only on windows? whatever */)
+		if ((event.modifiers == (cef_event_flags_t::EVENTFLAG_CONTROL_DOWN | cef_event_flags_t::EVENTFLAG_SHIFT_DOWN)) && event.windows_key_code == key_j)
 		{
 			CefWindowInfo windowInfo;
 			CefBrowserSettings settings;
@@ -204,12 +212,24 @@ bool FCHostHandler::OnPreKeyEvent(CefRefPtr<CefBrowser> browser,
 			return true;
 		}
 		// CTRL+F - bring up Find In Page
-		else if (event.modifiers == cef_event_flags_t::EVENTFLAG_CONTROL_DOWN && event.unmodified_character == 6 /* f? maybe only on windows? whatever */)
+		else if (event.modifiers == cef_event_flags_t::EVENTFLAG_CONTROL_DOWN && event.windows_key_code == key_f)
 		{
 			// probably can do this at some point by ripping off code from the full-fat cefclient, but damn there's a lot of it...
 			// return true;
 		}
-	}
+        // CTRL++ - zoom in
+        else if (event.modifiers == cef_event_flags_t::EVENTFLAG_CONTROL_DOWN && (event.windows_key_code == key_plus || event.windows_key_code == key_numpad_plus))
+        {
+            double curZoom = browser->GetHost()->GetZoomLevel();
+            browser->GetHost()->SetZoomLevel(curZoom + 1.0);
+        }
+        // CTRL+- - zoom out
+        else if (event.modifiers == cef_event_flags_t::EVENTFLAG_CONTROL_DOWN && (event.windows_key_code == key_minus || event.windows_key_code == key_numpad_minus))
+        {
+            double curZoom = browser->GetHost()->GetZoomLevel();
+            browser->GetHost()->SetZoomLevel(curZoom - 1.0);
+        }
+    }
 
 	return false;
 }
-- 
GitLab