From cfb039a91bd895b1b4d11846c5630ad4054108d5 Mon Sep 17 00:00:00 2001 From: Frans de Jonge Date: Sun, 10 Sep 2017 23:07:29 +0200 Subject: [PATCH] [fix] Scale ImageWidget by screen size as well as DPI Fix #3204 --- frontend/ui/widget/button.lua | 20 +++++++++++--------- frontend/ui/widget/imagewidget.lua | 4 ++-- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/frontend/ui/widget/button.lua b/frontend/ui/widget/button.lua index c451efbd1..3a1b6b2d3 100644 --- a/frontend/ui/widget/button.lua +++ b/frontend/ui/widget/button.lua @@ -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() diff --git a/frontend/ui/widget/imagewidget.lua b/frontend/ui/widget/imagewidget.lua index 2ad2efe8a..44cea90be 100644 --- a/frontend/ui/widget/imagewidget.lua +++ b/frontend/ui/widget/imagewidget.lua @@ -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