[fix] Scale ImageWidget by screen size as well as DPI

Fix #3204
pull/3251/head
Frans de Jonge 7 years ago
parent f0b9a66359
commit cfb039a91b

@ -1,19 +1,20 @@
--[[--
A button widget that shows text or a icon and handles callback when tapped.
--]]
local Blitbuffer = require("ffi/blitbuffer")
local CenterContainer = require("ui/widget/container/centercontainer")
local InputContainer = require("ui/widget/container/inputcontainer")
local Device = require("device")
local Font = require("ui/font")
local FrameContainer = require("ui/widget/container/framecontainer")
local Geom = require("ui/geometry")
local GestureRange = require("ui/gesturerange")
local ImageWidget = require("ui/widget/imagewidget")
local InputContainer = require("ui/widget/container/inputcontainer")
local TextWidget = require("ui/widget/textwidget")
local GestureRange = require("ui/gesturerange")
local Blitbuffer = require("ffi/blitbuffer")
local UIManager = require("ui/uimanager")
local Geom = require("ui/geometry")
local Device = require("device")
local Font = require("ui/font")
local _ = require("gettext")
--[[
a button widget that shows text or a icon and handles callback when tapped
--]]
local Button = InputContainer:new{
text = nil, -- mandatory
icon = nil,
@ -45,6 +46,7 @@ function Button:init()
self.label_widget = ImageWidget:new{
file = self.icon,
dim = not self.enabled,
scale_for_dpi = true,
}
end
local widget_size = self.label_widget:getSize()

@ -177,9 +177,9 @@ function ImageWidget:_render()
-- scale_for_dpi setting: update scale_factor (even if not set) with it
if self.scale_for_dpi then
local size_scale = math.min(Screen:getWidth(), Screen:getHeight())/600
local dpi_scale = Screen:getDPI() / 167
-- rounding off to power of 2 to avoid alias with pow(2, floor(log(x)/log(2))
dpi_scale = math.pow(2, math.max(0, math.floor(math.log(dpi_scale)/0.69)))
dpi_scale = math.pow(2, math.max(0, math.log((size_scale+dpi_scale)/2)/0.69))
if self.scale_factor == nil then
self.scale_factor = 1
end

Loading…
Cancel
Save