From 24c013274430addac6e51b0d9d1c91df0999c132 Mon Sep 17 00:00:00 2001 From: Frans de Jonge Date: Sun, 18 Mar 2018 21:32:39 +0100 Subject: [PATCH] [feat] SDL2: resize window (#3775) References #1417 Bumps base for https://github.com/koreader/koreader-base/pull/614 Also includes: * Speedup loading from cache EPUB with many files https://github.com/koreader/crengine/pull/133 * Avoid rewriting cache file when no change were made https://github.com/koreader/crengine/pull/134 --- base | 2 +- frontend/device/sdl/device.lua | 26 ++++++++++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/base b/base index 2e134c9c5..9e001e18f 160000 --- a/base +++ b/base @@ -1 +1 @@ -Subproject commit 2e134c9c58a9a3f52f7c58b2e1a79ee550331f89 +Subproject commit 9e001e18f13cd233ce4ddf8505c3472928668297 diff --git a/frontend/device/sdl/device.lua b/frontend/device/sdl/device.lua index a1920ac78..e7ef1c371 100644 --- a/frontend/device/sdl/device.lua +++ b/frontend/device/sdl/device.lua @@ -1,3 +1,4 @@ +local Event = require("ui/event") local Generic = require("device/generic/device") local util = require("ffi/util") local logger = require("logger") @@ -41,6 +42,31 @@ function Device:init() self.input = require("device/input"):new{ device = self, event_map = require("device/sdl/event_map_sdl2"), + handleMiscEv = function(device_input, ev) + -- bit of a hack for passing SDL window resize events + local SDL_WINDOWEVENT_RESIZED = 5 + local w = 0 + local h = 1 + + if ev.code == w then + device_input.new_w = ev.value + elseif ev.code == h then + device_input.new_h = ev.value + elseif ev.code == SDL_WINDOWEVENT_RESIZED then + device_input.device.screen.screen_size.w = device_input.new_w + device_input.device.screen.screen_size.h = device_input.new_h + device_input.device.screen.resize(device_input.device.screen, device_input.new_w, device_input.new_h) + + local new_size = device_input.device.screen:getSize() + logger.dbg("Resizing screen to", new_size) + + -- try to catch as many flies as we can + -- this means we can't just return one ScreenResize or SetDimensons event + local UIManager = require("ui/uimanager") + UIManager:handleInputEvent(Event:new("SetDimensions", new_size)) + UIManager:handleInputEvent(Event:new("ScreenResize", new_size)) + end + end, hasClipboardText = function() return input.hasClipboardText() end,