From 7019ff15bd4b36c4f9200dae9b82d98e97e2ed5e Mon Sep 17 00:00:00 2001 From: Frans de Jonge Date: Thu, 5 Sep 2019 23:30:13 +0200 Subject: [PATCH] [chore] Drop SDL 1.2 (#5324) Depends on https://github.com/koreader/koreader-base/pull/963. Also includes Initial import of related stuff https://github.com/koreader/koreader-base/pull/965 --- base | 2 +- frontend/device/sdl/device.lua | 209 ++++++++++++-------------- frontend/device/sdl/event_map_sdl.lua | 31 ---- 3 files changed, 101 insertions(+), 141 deletions(-) delete mode 100644 frontend/device/sdl/event_map_sdl.lua diff --git a/base b/base index 639de5fa0..0ef40965b 160000 --- a/base +++ b/base @@ -1 +1 @@ -Subproject commit 639de5fa009b5688f2e86920b68b1a863c9f3c7a +Subproject commit 0ef40965bb83f37b2d94c9e7b85c23a97c3a1504 diff --git a/frontend/device/sdl/device.lua b/frontend/device/sdl/device.lua index 66bcf02fc..b647fcf78 100644 --- a/frontend/device/sdl/device.lua +++ b/frontend/device/sdl/device.lua @@ -1,6 +1,5 @@ local Event = require("ui/event") local Generic = require("device/generic/device") -local util = require("ffi/util") local logger = require("logger") local function yes() return true end @@ -107,125 +106,117 @@ function Device:init() self.isAlwaysPortrait = yes end - if util.haveSDL2() then - self.hasClipboard = yes - self.screen = require("ffi/framebuffer_SDL2_0"):new{device = self, debug = logger.dbg} + self.hasClipboard = yes + self.screen = require("ffi/framebuffer_SDL2_0"):new{device = self, debug = logger.dbg} - local ok, re = pcall(self.screen.setWindowIcon, self.screen, "resources/koreader.png") - if not ok then logger.warn(re) end + local ok, re = pcall(self.screen.setWindowIcon, self.screen, "resources/koreader.png") + if not ok then logger.warn(re) end - local input = require("ffi/input") - self.input = require("device/input"):new{ - device = self, - event_map = require("device/sdl/event_map_sdl2"), - handleSdlEv = function(device_input, ev) - local Geom = require("ui/geometry") - local TimeVal = require("ui/timeval") - local UIManager = require("ui/uimanager") + local input = require("ffi/input") + self.input = require("device/input"):new{ + device = self, + event_map = require("device/sdl/event_map_sdl2"), + handleSdlEv = function(device_input, ev) + local Geom = require("ui/geometry") + local TimeVal = require("ui/timeval") + local UIManager = require("ui/uimanager") - -- SDL events can remain cdata but are almost completely transparent - local SDL_MOUSEWHEEL = 1027 - local SDL_MULTIGESTURE = 2050 - local SDL_DROPFILE = 4096 - local SDL_WINDOWEVENT_RESIZED = 5 + -- SDL events can remain cdata but are almost completely transparent + local SDL_MOUSEWHEEL = 1027 + local SDL_MULTIGESTURE = 2050 + local SDL_DROPFILE = 4096 + local SDL_WINDOWEVENT_RESIZED = 5 - if ev.code == SDL_MOUSEWHEEL then - local scrolled_x = ev.value.x - local scrolled_y = ev.value.y + if ev.code == SDL_MOUSEWHEEL then + local scrolled_x = ev.value.x + local scrolled_y = ev.value.y - local up = 1 - local down = -1 + local up = 1 + local down = -1 - local pos = Geom:new{ - x = 0, - y = 0, - w = 0, h = 0, - } + local pos = Geom:new{ + x = 0, + y = 0, + w = 0, h = 0, + } - local timev = TimeVal:new(ev.time) + local timev = TimeVal:new(ev.time) - local fake_ges = { - ges = "pan", - distance = 200, - distance_delayed = 200, - relative = { - x = 50*scrolled_x, - y = 100*scrolled_y, - }, - relative_delayed = { - x = 50*scrolled_x, - y = 100*scrolled_y, - }, - pos = pos, - time = timev, - mousewheel_direction = scrolled_y, - } - local fake_ges_release = { - ges = "pan_release", - distance = fake_ges.distance, - distance_delayed = fake_ges.distance_delayed, - relative = fake_ges.relative, - relative_delayed = fake_ges.relative_delayed, - pos = pos, - time = timev, - } - local fake_pan_ev = Event:new("Pan", nil, fake_ges) - local fake_release_ev = Event:new("Gesture", fake_ges_release) - if scrolled_y == down then - fake_ges.direction = "north" - UIManager:broadcastEvent(fake_pan_ev) - UIManager:broadcastEvent(fake_release_ev) - elseif scrolled_y == up then - fake_ges.direction = "south" - UIManager:broadcastEvent(fake_pan_ev) - UIManager:broadcastEvent(fake_release_ev) - end - elseif ev.code == SDL_MULTIGESTURE then - -- no-op for now - do end -- luacheck: ignore 541 - elseif ev.code == SDL_DROPFILE then - local dropped_file_path = ev.value - if dropped_file_path and dropped_file_path ~= "" then - local ReaderUI = require("apps/reader/readerui") - ReaderUI:doShowReader(dropped_file_path) - end - elseif ev.code == SDL_WINDOWEVENT_RESIZED then - device_input.device.screen.screen_size.w = ev.value.data1 - device_input.device.screen.screen_size.h = ev.value.data2 - device_input.device.screen.resize(device_input.device.screen, ev.value.data1, ev.value.data2) + local fake_ges = { + ges = "pan", + distance = 200, + distance_delayed = 200, + relative = { + x = 50*scrolled_x, + y = 100*scrolled_y, + }, + relative_delayed = { + x = 50*scrolled_x, + y = 100*scrolled_y, + }, + pos = pos, + time = timev, + mousewheel_direction = scrolled_y, + } + local fake_ges_release = { + ges = "pan_release", + distance = fake_ges.distance, + distance_delayed = fake_ges.distance_delayed, + relative = fake_ges.relative, + relative_delayed = fake_ges.relative_delayed, + pos = pos, + time = timev, + } + local fake_pan_ev = Event:new("Pan", nil, fake_ges) + local fake_release_ev = Event:new("Gesture", fake_ges_release) + if scrolled_y == down then + fake_ges.direction = "north" + UIManager:broadcastEvent(fake_pan_ev) + UIManager:broadcastEvent(fake_release_ev) + elseif scrolled_y == up then + fake_ges.direction = "south" + UIManager:broadcastEvent(fake_pan_ev) + UIManager:broadcastEvent(fake_release_ev) + end + elseif ev.code == SDL_MULTIGESTURE then + -- no-op for now + do end -- luacheck: ignore 541 + elseif ev.code == SDL_DROPFILE then + local dropped_file_path = ev.value + if dropped_file_path and dropped_file_path ~= "" then + local ReaderUI = require("apps/reader/readerui") + ReaderUI:doShowReader(dropped_file_path) + end + elseif ev.code == SDL_WINDOWEVENT_RESIZED then + device_input.device.screen.screen_size.w = ev.value.data1 + device_input.device.screen.screen_size.h = ev.value.data2 + device_input.device.screen.resize(device_input.device.screen, ev.value.data1, ev.value.data2) - local new_size = device_input.device.screen:getSize() - logger.dbg("Resizing screen to", new_size) + 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 - UIManager:broadcastEvent(Event:new("SetDimensions", new_size)) - UIManager:broadcastEvent(Event:new("ScreenResize", new_size)) - --- @todo Toggle this elsewhere based on ScreenResize? + -- try to catch as many flies as we can + -- this means we can't just return one ScreenResize or SetDimensons event + UIManager:broadcastEvent(Event:new("SetDimensions", new_size)) + UIManager:broadcastEvent(Event:new("ScreenResize", new_size)) + --- @todo Toggle this elsewhere based on ScreenResize? - -- this triggers paged media like PDF and DjVu to redraw - -- CreDocument doesn't need it - UIManager:broadcastEvent(Event:new("RedrawCurrentPage")) - end - end, - hasClipboardText = function() - return input.hasClipboardText() - end, - getClipboardText = function() - return input.getClipboardText() - end, - setClipboardText = function(text) - return input.setClipboardText(text) - end, - file_chooser = input.file_chooser, - } - else - self.screen = require("ffi/framebuffer_SDL1_2"):new{device = self, debug = logger.dbg} - self.input = require("device/input"):new{ - device = self, - event_map = require("device/sdl/event_map_sdl"), - } - end + -- this triggers paged media like PDF and DjVu to redraw + -- CreDocument doesn't need it + UIManager:broadcastEvent(Event:new("RedrawCurrentPage")) + end + end, + hasClipboardText = function() + return input.hasClipboardText() + end, + getClipboardText = function() + return input.getClipboardText() + end, + setClipboardText = function(text) + return input.setClipboardText(text) + end, + file_chooser = input.file_chooser, + } self.keyboard_layout = require("device/sdl/keyboard_layout") diff --git a/frontend/device/sdl/event_map_sdl.lua b/frontend/device/sdl/event_map_sdl.lua deleted file mode 100644 index db1e1a576..000000000 --- a/frontend/device/sdl/event_map_sdl.lua +++ /dev/null @@ -1,31 +0,0 @@ -return { - [10] = "1", [11] = "2", [12] = "3", [13] = "4", [14] = "5", [15] = "6", [16] = "7", [17] = "8", [18] = "9", [19] = "0", - [24] = "Q", [25] = "W", [26] = "E", [27] = "R", [28] = "T", [29] = "Y", [30] = "U", [31] = "I", [32] = "O", [33] = "P", - [38] = "A", [39] = "S", [40] = "D", [41] = "F", [42] = "G", [43] = "H", [44] = "J", [45] = "K", [46] = "L", - [52] = "Z", [53] = "X", [54] = "C", [55] = "V", [56] = "B", [57] = "N", [58] = "M", - - [22] = "Backspace", -- Backspace - [36] = "Press", -- Enter - [50] = "Shift", -- left shift - [60] = ".", - [61] = "/", - [62] = "Sym", -- right shift key - [64] = "Alt", -- left alt - [65] = " ", -- Spacebar - [67] = "Menu", -- F[1] - [68] = "Power", -- F[2] - [72] = "LPgBack", -- F[6] - [73] = "LPgFwd", -- F[7] - [95] = "VPlus", -- F[11] - [96] = "VMinus", -- F[12] - [105] = "AA", -- right alt key - [110] = "Home", -- Home - [111] = "Up", -- arrow up - [112] = "RPgBack", -- normal PageUp - [113] = "Left", -- arrow left - [114] = "Right", -- arrow right - [115] = "End", -- End (above arrows) - [116] = "Down", -- arrow down - [117] = "RPgFwd", -- normal PageDown - [119] = "Del", -- Delete -}