mirror of
https://github.com/koreader/koreader.git
synced 2025-08-10 00:52:38 +00:00
[RFC] Make default UI tapzones more generous (#6918)
* Top menu & bottom menu tapzones are now full-width, thanks to the now sane override system. * A separate, extra tapzone was also created for each of them to provide a taller, but narrower tapzone extension (one that doesn't clash with the prev/next tapzones). * The footer tapzone was made much taller.
This commit is contained in:
@@ -26,7 +26,9 @@ read_globals = {
|
||||
"DOVERLAPPIXELS",
|
||||
"FOLLOW_LINK_TIMEOUT",
|
||||
"DTAP_ZONE_MENU",
|
||||
"DTAP_ZONE_MENU_EXT",
|
||||
"DTAP_ZONE_CONFIG",
|
||||
"DTAP_ZONE_CONFIG_EXT",
|
||||
"DTAP_ZONE_MINIBAR",
|
||||
"DTAP_ZONE_FORWARD",
|
||||
"DTAP_ZONE_BACKWARD",
|
||||
|
||||
@@ -72,9 +72,11 @@ FOLLOW_LINK_TIMEOUT = 0.5
|
||||
-- y: y coordinate of top left corner in proportion to screen height
|
||||
-- w: tap zone width in proportion to screen width
|
||||
-- h: tap zone height in proportion to screen height
|
||||
DTAP_ZONE_MENU = {x = 1/8, y = 0, w = 3/4, h = 1/8}
|
||||
DTAP_ZONE_CONFIG = {x = 1/8, y = 7/8, w = 3/4, h = 1/8}
|
||||
DTAP_ZONE_MINIBAR = {x = 0, y = 31/32, w = 1, h = 1/32}
|
||||
DTAP_ZONE_MENU = {x = 0, y = 0, w = 1, h = 1/8}
|
||||
DTAP_ZONE_MENU_EXT = {x = 1/4, y = 0, w = 2/4, h = 1/5} -- taller, narrower extension
|
||||
DTAP_ZONE_CONFIG = {x = 0, y = 7/8, w = 1, h = 1/8}
|
||||
DTAP_ZONE_CONFIG_EXT = {x = 1/4, y = 2/3, w = 2/4, h = 1/5} -- taller, narrower extension
|
||||
DTAP_ZONE_MINIBAR = {x = 0, y = 12/13, w = 1, h = 1/13}
|
||||
DTAP_ZONE_FORWARD = {x = 1/4, y = 0, w = 3/4, h = 1}
|
||||
DTAP_ZONE_BACKWARD = {x = 0, y = 0, w = 1/4, h = 1}
|
||||
-- DTAP_ZONE_BOOKMARK = {x = 7/8, y = 0, w = 1/8, h = 1/8} -- deprecated
|
||||
|
||||
@@ -72,6 +72,18 @@ function FileManagerMenu:initGesListener()
|
||||
},
|
||||
handler = function(ges) return self:onTapShowMenu(ges) end,
|
||||
},
|
||||
{
|
||||
id = "filemanager_ext_tap",
|
||||
ges = "tap",
|
||||
screen_zone = {
|
||||
ratio_x = DTAP_ZONE_MENU_EXT.x, ratio_y = DTAP_ZONE_MENU_EXT.y,
|
||||
ratio_w = DTAP_ZONE_MENU_EXT.w, ratio_h = DTAP_ZONE_MENU_EXT.h,
|
||||
},
|
||||
overrides = {
|
||||
"filemanager_tap",
|
||||
},
|
||||
handler = function(ges) return self:onTapShowMenu(ges) end,
|
||||
},
|
||||
{
|
||||
id = "filemanager_swipe",
|
||||
ges = "swipe",
|
||||
@@ -85,6 +97,18 @@ function FileManagerMenu:initGesListener()
|
||||
},
|
||||
handler = function(ges) return self:onSwipeShowMenu(ges) end,
|
||||
},
|
||||
{
|
||||
id = "filemanager_ext_swipe",
|
||||
ges = "swipe",
|
||||
screen_zone = {
|
||||
ratio_x = DTAP_ZONE_MENU_EXT.x, ratio_y = DTAP_ZONE_MENU_EXT.y,
|
||||
ratio_w = DTAP_ZONE_MENU_EXT.w, ratio_h = DTAP_ZONE_MENU_EXT.h,
|
||||
},
|
||||
overrides = {
|
||||
"filemanager_swipe",
|
||||
},
|
||||
handler = function(ges) return self:onSwipeShowMenu(ges) end,
|
||||
},
|
||||
})
|
||||
end
|
||||
|
||||
|
||||
@@ -50,6 +50,18 @@ function ReaderConfig:initGesListener()
|
||||
},
|
||||
handler = function() return self:onTapShowConfigMenu() end,
|
||||
},
|
||||
{
|
||||
id = "readerconfigmenu_ext_tap",
|
||||
ges = "tap",
|
||||
screen_zone = {
|
||||
ratio_x = DTAP_ZONE_CONFIG_EXT.x, ratio_y = DTAP_ZONE_CONFIG_EXT.y,
|
||||
ratio_w = DTAP_ZONE_CONFIG_EXT.w, ratio_h = DTAP_ZONE_CONFIG_EXT.h,
|
||||
},
|
||||
overrides = {
|
||||
"readerconfigmenu_tap",
|
||||
},
|
||||
handler = function() return self:onTapShowConfigMenu() end,
|
||||
},
|
||||
{
|
||||
id = "readerconfigmenu_swipe",
|
||||
ges = "swipe",
|
||||
@@ -63,6 +75,18 @@ function ReaderConfig:initGesListener()
|
||||
},
|
||||
handler = function(ges) return self:onSwipeShowConfigMenu(ges) end,
|
||||
},
|
||||
{
|
||||
id = "readerconfigmenu_ext_swipe",
|
||||
ges = "swipe",
|
||||
screen_zone = {
|
||||
ratio_x = DTAP_ZONE_CONFIG_EXT.x, ratio_y = DTAP_ZONE_CONFIG_EXT.y,
|
||||
ratio_w = DTAP_ZONE_CONFIG_EXT.w, ratio_h = DTAP_ZONE_CONFIG_EXT.h,
|
||||
},
|
||||
overrides = {
|
||||
"readerconfigmenu_swipe",
|
||||
},
|
||||
handler = function(ges) return self:onSwipeShowConfigMenu(ges) end,
|
||||
},
|
||||
{
|
||||
id = "readerconfigmenu_pan",
|
||||
ges = "pan",
|
||||
@@ -76,6 +100,18 @@ function ReaderConfig:initGesListener()
|
||||
},
|
||||
handler = function(ges) return self:onSwipeShowConfigMenu(ges) end,
|
||||
},
|
||||
{
|
||||
id = "readerconfigmenu_ext_pan",
|
||||
ges = "pan",
|
||||
screen_zone = {
|
||||
ratio_x = DTAP_ZONE_CONFIG_EXT.x, ratio_y = DTAP_ZONE_CONFIG_EXT.y,
|
||||
ratio_w = DTAP_ZONE_CONFIG_EXT.w, ratio_h = DTAP_ZONE_CONFIG_EXT.h,
|
||||
},
|
||||
overrides = {
|
||||
"readerconfigmenu_pan",
|
||||
},
|
||||
handler = function(ges) return self:onSwipeShowConfigMenu(ges) end,
|
||||
},
|
||||
})
|
||||
end
|
||||
|
||||
|
||||
@@ -632,9 +632,10 @@ function ReaderFooter:setupTouchZones()
|
||||
screen_zone = footer_screen_zone,
|
||||
handler = function(ges) return self:onTapFooter(ges) end,
|
||||
overrides = {
|
||||
"readerconfigmenu_ext_tap",
|
||||
"readerconfigmenu_tap",
|
||||
"tap_forward",
|
||||
"tap_backward",
|
||||
"readerconfigmenu_tap",
|
||||
},
|
||||
-- (Low priority: tap on existing highlights
|
||||
-- or links have priority)
|
||||
|
||||
@@ -192,15 +192,17 @@ function ReaderHighlight:setupTouchZones()
|
||||
-- Tap on existing highlights have priority over
|
||||
-- everything but tap on links (as links can be
|
||||
-- part of some highlighted text)
|
||||
"tap_forward",
|
||||
"tap_backward",
|
||||
"readermenu_tap",
|
||||
"readerconfigmenu_tap",
|
||||
"readerfooter_tap",
|
||||
"tap_top_left_corner",
|
||||
"tap_top_right_corner",
|
||||
"tap_left_bottom_corner",
|
||||
"tap_right_bottom_corner",
|
||||
"readerfooter_tap",
|
||||
"readerconfigmenu_ext_tap",
|
||||
"readerconfigmenu_tap",
|
||||
"readermenu_ext_tap",
|
||||
"readermenu_tap",
|
||||
"tap_forward",
|
||||
"tap_backward",
|
||||
},
|
||||
handler = function(ges) return self:onTap(nil, ges) end
|
||||
},
|
||||
|
||||
@@ -56,16 +56,18 @@ function ReaderLink:init()
|
||||
overrides = {
|
||||
-- Tap on links have priority over everything (it can
|
||||
-- be disabled with "Tap to follow links" menu item)
|
||||
"tap_forward",
|
||||
"tap_backward",
|
||||
"readermenu_tap",
|
||||
"readerconfigmenu_tap",
|
||||
"readerhighlight_tap",
|
||||
"readerfooter_tap",
|
||||
"tap_top_left_corner",
|
||||
"tap_top_right_corner",
|
||||
"tap_left_bottom_corner",
|
||||
"tap_right_bottom_corner",
|
||||
"readerfooter_tap",
|
||||
"readerconfigmenu_ext_tap",
|
||||
"readerconfigmenu_tap",
|
||||
"readermenu_ext_tap",
|
||||
"readermenu_tap",
|
||||
"tap_forward",
|
||||
"tap_backward",
|
||||
},
|
||||
handler = function(ges) return self:onTap(_, ges) end,
|
||||
},
|
||||
|
||||
@@ -101,6 +101,18 @@ function ReaderMenu:onReaderReady()
|
||||
},
|
||||
handler = function(ges) return self:onTapShowMenu(ges) end,
|
||||
},
|
||||
{
|
||||
id = "readermenu_ext_tap",
|
||||
ges = "tap",
|
||||
screen_zone = {
|
||||
ratio_x = DTAP_ZONE_MENU_EXT.x, ratio_y = DTAP_ZONE_MENU_EXT.y,
|
||||
ratio_w = DTAP_ZONE_MENU_EXT.w, ratio_h = DTAP_ZONE_MENU_EXT.h,
|
||||
},
|
||||
overrides = {
|
||||
"readermenu_tap",
|
||||
},
|
||||
handler = function(ges) return self:onTapShowMenu(ges) end,
|
||||
},
|
||||
{
|
||||
id = "readermenu_swipe",
|
||||
ges = "swipe",
|
||||
@@ -114,6 +126,18 @@ function ReaderMenu:onReaderReady()
|
||||
},
|
||||
handler = function(ges) return self:onSwipeShowMenu(ges) end,
|
||||
},
|
||||
{
|
||||
id = "readermenu_ext_swipe",
|
||||
ges = "swipe",
|
||||
screen_zone = {
|
||||
ratio_x = DTAP_ZONE_MENU_EXT.x, ratio_y = DTAP_ZONE_MENU_EXT.y,
|
||||
ratio_w = DTAP_ZONE_MENU_EXT.w, ratio_h = DTAP_ZONE_MENU_EXT.h,
|
||||
},
|
||||
overrides = {
|
||||
"readermenu_swipe",
|
||||
},
|
||||
handler = function(ges) return self:onSwipeShowMenu(ges) end,
|
||||
},
|
||||
{
|
||||
id = "readermenu_pan",
|
||||
ges = "pan",
|
||||
@@ -127,6 +151,18 @@ function ReaderMenu:onReaderReady()
|
||||
},
|
||||
handler = function(ges) return self:onSwipeShowMenu(ges) end,
|
||||
},
|
||||
{
|
||||
id = "readermenu_ext_pan",
|
||||
ges = "pan",
|
||||
screen_zone = {
|
||||
ratio_x = DTAP_ZONE_MENU_EXT.x, ratio_y = DTAP_ZONE_MENU_EXT.y,
|
||||
ratio_w = DTAP_ZONE_MENU_EXT.w, ratio_h = DTAP_ZONE_MENU_EXT.h,
|
||||
},
|
||||
overrides = {
|
||||
"readermenu_pan",
|
||||
},
|
||||
handler = function(ges) return self:onSwipeShowMenu(ges) end,
|
||||
},
|
||||
})
|
||||
end
|
||||
|
||||
|
||||
@@ -1379,8 +1379,14 @@ function ConfigDialog:onSwipeCloseMenu(arg, ges_ev)
|
||||
w = DTAP_ZONE_CONFIG.w * Screen:getWidth(),
|
||||
h = DTAP_ZONE_CONFIG.h * Screen:getHeight(),
|
||||
}
|
||||
local range_ext = {
|
||||
x = DTAP_ZONE_CONFIG_EXT.x * Screen:getWidth(),
|
||||
y = DTAP_ZONE_CONFIG_EXT.y * Screen:getHeight(),
|
||||
w = DTAP_ZONE_CONFIG_EXT.w * Screen:getWidth(),
|
||||
h = DTAP_ZONE_CONFIG_EXT.h * Screen:getHeight(),
|
||||
}
|
||||
if ges_ev.direction == "south" and (ges_ev.pos:intersectWith(self.dialog_frame.dimen)
|
||||
or ges_ev.pos:intersectWith(range)) then
|
||||
or ges_ev.pos:intersectWith(range) or ges_ev.pos:intersectWith(range_ext)) then
|
||||
self:closeDialog()
|
||||
return true
|
||||
end
|
||||
|
||||
@@ -823,18 +823,22 @@ function Gestures:setupGesture(ges)
|
||||
local overrides_swipe_pan, overrides_swipe_pan_release
|
||||
if self.is_docless then
|
||||
overrides_tap_corner = {
|
||||
"filemanager_ext_tap",
|
||||
"filemanager_tap",
|
||||
}
|
||||
overrides_horizontal_edge = {
|
||||
"filemanager_ext_swipe",
|
||||
"filemanager_swipe",
|
||||
}
|
||||
else
|
||||
overrides_tap_corner = {
|
||||
"tap_backward",
|
||||
"tap_forward",
|
||||
"readermenu_tap",
|
||||
"readerconfigmenu_tap",
|
||||
"readerfooter_tap",
|
||||
"readerconfigmenu_ext_tap",
|
||||
"readerconfigmenu_tap",
|
||||
"readermenu_ext_tap",
|
||||
"readermenu_tap",
|
||||
"tap_forward",
|
||||
"tap_backward",
|
||||
}
|
||||
overrides_hold_corner = {
|
||||
-- As hold corners are "ignored" by default, and we have
|
||||
@@ -844,17 +848,21 @@ function Gestures:setupGesture(ges)
|
||||
"readerfooter_hold",
|
||||
}
|
||||
overrides_vertical_edge = {
|
||||
"readerconfigmenu_ext_swipe",
|
||||
"readerconfigmenu_swipe",
|
||||
"readermenu_ext_swipe",
|
||||
"readermenu_swipe",
|
||||
"paging_swipe",
|
||||
"rolling_swipe",
|
||||
"readermenu_swipe",
|
||||
"readerconfigmenu_swipe",
|
||||
}
|
||||
overrides_horizontal_edge = {
|
||||
"swipe_link",
|
||||
"readerconfigmenu_ext_swipe",
|
||||
"readerconfigmenu_swipe",
|
||||
"readermenu_ext_swipe",
|
||||
"readermenu_swipe",
|
||||
"paging_swipe",
|
||||
"rolling_swipe",
|
||||
"readermenu_swipe",
|
||||
"readerconfigmenu_swipe",
|
||||
}
|
||||
overrides_pan = {
|
||||
"paging_swipe",
|
||||
@@ -1034,13 +1042,15 @@ function Gestures:setupGesture(ges)
|
||||
distance = "short"
|
||||
if self.is_docless then
|
||||
overrides = {
|
||||
"filemanager_ext_tap",
|
||||
"filemanager_tap",
|
||||
"filemanager_swipe"
|
||||
"filemanager_ext_swipe",
|
||||
"filemanager_swipe",
|
||||
}
|
||||
else
|
||||
overrides = {
|
||||
"rolling_swipe",
|
||||
"paging_swipe",
|
||||
"rolling_swipe",
|
||||
}
|
||||
end
|
||||
elseif ges == "spread_gesture" then
|
||||
|
||||
@@ -8,7 +8,7 @@ describe("defaults module", function()
|
||||
|
||||
it("should load all defaults from defaults.lua", function()
|
||||
Defaults:init()
|
||||
assert.is_same(98, #Defaults.defaults_name)
|
||||
assert.is_same(100, #Defaults.defaults_name)
|
||||
end)
|
||||
|
||||
it("should save changes to defaults.persistent.lua", function()
|
||||
@@ -16,7 +16,7 @@ describe("defaults module", function()
|
||||
os.remove(persistent_filename)
|
||||
|
||||
-- To see indices and help updating this when new settings are added:
|
||||
-- for i=1, 98 do print(i.." ".. Defaults.defaults_name[i]) end
|
||||
-- for i=1, 100 do print(i.." ".. Defaults.defaults_name[i]) end
|
||||
|
||||
-- not in persistent but checked in defaults
|
||||
Defaults.changed[20] = true
|
||||
@@ -24,7 +24,7 @@ describe("defaults module", function()
|
||||
Defaults.changed[56] = true
|
||||
Defaults.changed[85] = true
|
||||
Defaults:saveSettings()
|
||||
assert.is_same(98, #Defaults.defaults_name)
|
||||
assert.is_same(100, #Defaults.defaults_name)
|
||||
assert.is_same("DTAP_ZONE_BACKWARD", Defaults.defaults_name[85])
|
||||
assert.is_same("DCREREADER_CONFIG_WORD_SPACING_LARGE", Defaults.defaults_name[50])
|
||||
assert.is_same("DCREREADER_CONFIG_H_MARGIN_SIZES_XXX_LARGE", Defaults.defaults_name[20])
|
||||
|
||||
Reference in New Issue
Block a user