2014-10-30 18:42:18 +00:00
local _ = require ( " gettext " )
2019-03-11 09:01:37 +00:00
local Device = require ( " device " )
local Screen = Device.screen
2018-12-08 17:11:55 +00:00
local T = require ( " ffi/util " ) . template
2014-10-30 18:42:18 +00:00
2020-12-13 00:41:44 +00:00
local function isAutoDPI ( ) return Screen.dpi_override == nil end
2019-03-11 09:01:37 +00:00
2019-02-19 15:40:03 +00:00
local function dpi ( ) return Screen : getDPI ( ) end
2014-10-30 18:42:18 +00:00
local function custom ( ) return G_reader_settings : readSetting ( " custom_screen_dpi " ) end
2016-06-27 16:43:23 +00:00
local function setDPI ( _dpi )
2014-10-30 18:42:18 +00:00
local InfoMessage = require ( " ui/widget/infomessage " )
local UIManager = require ( " ui/uimanager " )
UIManager : show ( InfoMessage : new {
2019-02-01 09:15:22 +00:00
text = _dpi and T ( _ ( " DPI set to %1. This will take effect after restarting. " ) , _dpi )
or _ ( " DPI set to auto. This will take effect after restarting. " ) ,
2014-10-30 18:42:18 +00:00
} )
2020-12-13 00:41:44 +00:00
-- If this is set to nil, reader.lua doesn't call setScreenDPI
2018-12-08 21:12:18 +00:00
G_reader_settings : saveSetting ( " screen_dpi " , _dpi )
2020-12-13 00:41:44 +00:00
-- Passing a nil properly resets to defaults/auto
2019-03-11 09:01:37 +00:00
Device : setScreenDPI ( _dpi )
2014-10-30 18:42:18 +00:00
end
2019-08-03 14:45:17 +00:00
local function spinWidgetSetDPI ( touchmenu_instance )
local SpinWidget = require ( " ui/widget/spinwidget " )
local UIManager = require ( " ui/uimanager " )
local items = SpinWidget : new {
2020-06-12 23:56:36 +00:00
width = math.floor ( Screen : getWidth ( ) * 0.6 ) ,
2019-08-03 14:45:17 +00:00
value = custom ( ) or dpi ( ) ,
value_min = 90 ,
value_max = 900 ,
value_step = 10 ,
value_hold_step = 50 ,
ok_text = _ ( " Set DPI " ) ,
title_text = _ ( " Set custom screen DPI " ) ,
callback = function ( spin )
G_reader_settings : saveSetting ( " custom_screen_dpi " , spin.value )
setDPI ( spin.value )
touchmenu_instance : updateItems ( )
end
}
UIManager : show ( items )
end
2019-02-01 09:15:22 +00:00
local dpi_auto = Screen.device . screen_dpi
2018-12-08 21:12:18 +00:00
local dpi_small = 120
local dpi_medium = 160
local dpi_large = 240
local dpi_xlarge = 320
local dpi_xxlarge = 480
local dpi_xxxlarge = 640
2014-10-30 18:42:18 +00:00
return {
text = _ ( " Screen DPI " ) ,
sub_item_table = {
{
2019-02-01 09:15:22 +00:00
text = dpi_auto and T ( _ ( " Auto DPI (%1) " ) , dpi_auto ) or _ ( " Auto DPI " ) ,
2018-12-08 21:12:18 +00:00
help_text = _ ( " The DPI of your screen is automatically detected so items can be drawn with the right amount of pixels. This will usually display at (roughly) the same size on different devices, while remaining sharp. Increasing the DPI setting will result in larger text and icons, while a lower DPI setting will look smaller on the screen. " ) ,
2019-03-11 09:01:37 +00:00
checked_func = isAutoDPI ,
2014-10-30 18:42:18 +00:00
callback = function ( ) setDPI ( ) end
} ,
{
2018-12-08 21:12:18 +00:00
text = T ( _ ( " Small (%1) " ) , dpi_small ) ,
2014-10-30 18:42:18 +00:00
checked_func = function ( )
2019-03-11 09:01:37 +00:00
if isAutoDPI ( ) then return false end
2016-06-27 16:43:23 +00:00
local _dpi , _custom = dpi ( ) , custom ( )
return _dpi and _dpi <= 140 and _dpi ~= _custom
2014-10-30 18:42:18 +00:00
end ,
2018-12-08 21:12:18 +00:00
callback = function ( ) setDPI ( dpi_small ) end
2014-10-30 18:42:18 +00:00
} ,
{
2018-12-08 21:12:18 +00:00
text = T ( _ ( " Medium (%1) " ) , dpi_medium ) ,
2014-10-30 18:42:18 +00:00
checked_func = function ( )
2019-03-11 09:01:37 +00:00
if isAutoDPI ( ) then return false end
2016-06-27 16:43:23 +00:00
local _dpi , _custom = dpi ( ) , custom ( )
return _dpi and _dpi > 140 and _dpi <= 200 and _dpi ~= _custom
2014-10-30 18:42:18 +00:00
end ,
2018-12-08 21:12:18 +00:00
callback = function ( ) setDPI ( dpi_medium ) end
2014-10-30 18:42:18 +00:00
} ,
{
2018-12-08 21:12:18 +00:00
text = T ( _ ( " Large (%1) " ) , dpi_large ) ,
2014-10-30 18:42:18 +00:00
checked_func = function ( )
2019-03-11 09:01:37 +00:00
if isAutoDPI ( ) then return false end
2016-06-27 16:43:23 +00:00
local _dpi , _custom = dpi ( ) , custom ( )
2018-12-08 21:12:18 +00:00
return _dpi and _dpi > 200 and _dpi <= 280 and _dpi ~= _custom
2014-10-30 18:42:18 +00:00
end ,
2018-12-08 21:12:18 +00:00
callback = function ( ) setDPI ( dpi_large ) end
2014-10-30 18:42:18 +00:00
} ,
{
2018-12-08 21:12:18 +00:00
text = T ( _ ( " Extra large (%1) " ) , dpi_xlarge ) ,
checked_func = function ( )
2019-03-11 09:01:37 +00:00
if isAutoDPI ( ) then return false end
2018-12-08 21:12:18 +00:00
local _dpi , _custom = dpi ( ) , custom ( )
return _dpi and _dpi > 280 and _dpi <= 400 and _dpi ~= _custom
end ,
callback = function ( ) setDPI ( dpi_xlarge ) end
} ,
{
text = T ( _ ( " Extra-Extra Large (%1) " ) , dpi_xxlarge ) ,
checked_func = function ( )
2019-03-11 09:01:37 +00:00
if isAutoDPI ( ) then return false end
2018-12-08 21:12:18 +00:00
local _dpi , _custom = dpi ( ) , custom ( )
return _dpi and _dpi > 400 and _dpi <= 560 and _dpi ~= _custom
end ,
callback = function ( ) setDPI ( dpi_xxlarge ) end
} ,
{
text = T ( _ ( " Extra-Extra-Extra Large (%1) " ) , dpi_xxxlarge ) ,
checked_func = function ( )
2019-03-11 09:01:37 +00:00
if isAutoDPI ( ) then return false end
2018-12-08 21:12:18 +00:00
local _dpi , _custom = dpi ( ) , custom ( )
return _dpi and _dpi > 560 and _dpi ~= _custom
end ,
callback = function ( ) setDPI ( dpi_xxxlarge ) end
} ,
{
text_func = function ( )
2019-08-03 14:45:17 +00:00
local custom_dpi = custom ( ) or dpi_auto
if custom_dpi then
return T ( _ ( " Custom DPI: %1 (hold to set) " ) , custom ( ) or dpi_auto )
else
return _ ( " Custom DPI " )
end
2018-12-08 21:12:18 +00:00
end ,
2014-10-30 18:42:18 +00:00
checked_func = function ( )
2019-03-11 09:01:37 +00:00
if isAutoDPI ( ) then return false end
2016-06-27 16:43:23 +00:00
local _dpi , _custom = dpi ( ) , custom ( )
return _custom and _dpi == _custom
2014-10-30 18:42:18 +00:00
end ,
2019-08-03 14:45:17 +00:00
callback = function ( touchmenu_instance )
if custom ( ) then
setDPI ( custom ( ) or dpi_auto )
else
spinWidgetSetDPI ( touchmenu_instance )
end
end ,
hold_callback = function ( touchmenu_instance )
spinWidgetSetDPI ( touchmenu_instance )
end ,
2014-10-30 18:42:18 +00:00
} ,
}
}