rescale image if width or height is specified in ImageWidget

pull/797/head
chrox 10 years ago
parent 4df4a62de9
commit 9f3eb0b784

@ -1,6 +1,6 @@
local Widget = require("ui/widget/widget") local Widget = require("ui/widget/widget")
local Image = require("ffi/mupdfimg")
local Geom = require("ui/geometry") local Geom = require("ui/geometry")
-- Image
--[[ --[[
ImageWidget shows an image from a file ImageWidget shows an image from a file
@ -10,6 +10,9 @@ local ImageWidget = Widget:new{
invert = nil, invert = nil,
dim = nil, dim = nil,
hide = nil, hide = nil,
-- if width or height is given, image will rescale to the given size
width = nil,
height = nil,
_bb = nil _bb = nil
} }
@ -20,6 +23,10 @@ function ImageWidget:_render()
elseif itype == "png" then elseif itype == "png" then
self._bb = Image:fromPNG(self.file) self._bb = Image:fromPNG(self.file)
end end
local w, h = self._bb:getWidth(), self._bb:getHeight()
if (self.width and self.width ~= w) or (self.height and self.height ~= h) then
self._bb = self._bb:scale(self.width or w, self.height or h)
end
end end
function ImageWidget:getSize() function ImageWidget:getSize()
@ -34,7 +41,7 @@ function ImageWidget:paintTo(bb, x, y)
self.dimen = Geom:new{ self.dimen = Geom:new{
x = x, y = y, x = x, y = y,
w = size.w, w = size.w,
h = size.h h = size.h
} }
if self.hide then return end if self.hide then return end
bb:blitFrom(self._bb, x, y, 0, 0, size.w, size.h) bb:blitFrom(self._bb, x, y, 0, 0, size.w, size.h)

Loading…
Cancel
Save