Merge pull request #797 from chrox/master

rescale image if width or height is specified in ImageWidget
pull/800/head
Qingping Hou 10 years ago
commit 3eab7e0917

@ -8,6 +8,7 @@ local FileChooser = require("ui/widget/filechooser")
local VerticalSpan = require("ui/widget/verticalspan")
local VerticalGroup = require("ui/widget/verticalgroup")
local ButtonDialog = require("ui/widget/buttondialog")
local lfs = require("libs/libkoreader-lfs")
local UIManager = require("ui/uimanager")
local Font = require("ui/font")
local Screen = require("ui/screen")

@ -1,10 +1,11 @@
local InputContainer = require("ui/widget/container/inputcontainer")
local CenterContainer = require("ui/widget/container/centercontainer")
local Menu = require("ui/widget/menu")
local ButtonDialog = require("ui/widget/buttondialog")
local Screen = require("ui/screen")
local lfs = require("libs/libkoreader-lfs")
local UIManager = require("ui/uimanager")
local DocSettings = require("docsettings")
local Menu = require("ui/widget/menu")
local Screen = require("ui/screen")
local DEBUG = require("dbg")
local _ = require("gettext")

@ -1,11 +1,12 @@
local InfoMessage = require("ui/widget/infomessage")
local UIManager = require("ui/uimanager")
local _ = require("gettext")
local CenterContainer = require("ui/widget/container/centercontainer")
local InputContainer = require("ui/widget/container/inputcontainer")
local InputDialog = require("ui/widget/inputdialog")
local CenterContainer = require("ui/widget/container/centercontainer")
local Screen = require("ui/screen")
local InfoMessage = require("ui/widget/infomessage")
local lfs = require("libs/libkoreader-lfs")
local UIManager = require("ui/uimanager")
local Menu = require("ui/widget/menu")
local Screen = require("ui/screen")
local _ = require("gettext")
local Search = InputContainer:new{
calibrefile = nil,
@ -72,7 +73,7 @@ function Search:init()
self.results = {}
-- check if we find the calibre file
if LIBRARY_PATH == nil then
if LIBRARY_PATH == nil then
self.calibrefile = findcalibre("/mnt")
if not self.calibrefile then
error = "LIBRARY_PATH in DEFAULTS.LUA is not set!"
@ -100,7 +101,7 @@ function Search:init()
self.calibrefile = findcalibre("/mnt")
end
end
if self.calibrefile ~= nil then
LIBRARY_PATH = string.gsub(self.calibrefile,"/[^/]*$","")
if string.sub(LIBRARY_PATH,string.len(LIBRARY_PATH)) ~= "/" then
@ -197,7 +198,7 @@ function Search:find()
else
upsearch = string.upper(self.search_value)
end
self.data[i] = {"-","-","-","-","-","-","-","-"}
while line do
if line == " }, " or line == " }" then

@ -1,11 +1,11 @@
local InputContainer = require("ui/widget/container/inputcontainer")
local ConfirmBox = require("ui/widget/confirmbox")
local lfs = require("libs/libkoreader-lfs")
local UIManager = require("ui/uimanager")
local Screen = require("ui/screen")
local Event = require("ui/event")
local DEBUG = require("dbg")
local _ = require("gettext")
-- lfs
local ReaderTypeset = InputContainer:new{
css_menu_title = _("Set render style"),

@ -1,5 +1,5 @@
local lfs = require("libs/libkoreader-lfs")
local DEBUG = require("dbg")
-- lfs
local PluginLoader = {
plugin_path = "plugins"

@ -2,6 +2,7 @@
A global LRU cache
]]--
require("MD5")
local lfs = require("libs/libkoreader-lfs")
local DEBUG = require("dbg")
local function calcFreeMem()

@ -1,5 +1,5 @@
local lfs = require("libs/libkoreader-lfs")
local DocSettings = {}
-- lfs
function DocSettings:getHistoryPath(fullpath)
local i = #fullpath - 1

@ -1,14 +1,13 @@
local Geom = require("ui/geometry")
local Blitbuffer = require("ffi/blitbuffer")
local CreOptions = require("ui/data/creoptions")
local Document = require("document/document")
local Configurable = require("configurable")
local Blitbuffer = require("ffi/blitbuffer")
local lfs = require("libs/libkoreader-lfs")
local Geom = require("ui/geometry")
local Font = require("ui/font")
local Device = require("ui/device")
local Screen = require("ui/screen")
local Font = require("ui/font")
local DEBUG = require("dbg")
local Configurable = require("configurable")
-- TBD: DrawContext
local CreDocument = Document:new{
-- this is defined in kpvcrlib/crengine/crengine/include/lvdocview.h

@ -1,12 +1,12 @@
local AndroidPowerd = require("ui/device/androidpowerd")
local KindlePowerD = require("ui/device/kindlepowerd")
local isAndroid, android = pcall(require, "android")
local KoboPowerD = require("ui/device/kobopowerd")
local BasePowerD = require("ui/device/basepowerd")
local lfs = require("libs/libkoreader-lfs")
local Screen = require("ui/device/screen")
local util = require("ffi/util")
local ffi = require("ffi")
local isAndroid, android = pcall(require, "android")
-- lfs
local Device = {
screen_saver_mode = false,

@ -1,12 +1,10 @@
local Blitbuffer = require("ffi/blitbuffer")
local einkfb = require("ffi/framebuffer")
local Geom = require("ui/geometry")
local util = require("ffi/util")
local DEBUG = require("dbg")
local _ = require("gettext")
-- Blitbuffer
-- einkfb
--[[
Codes for rotation modes:

@ -1,3 +1,5 @@
local lfs = require("libs/libkoreader-lfs")
local Freetype = require("ffi/freetype")
local Screen = require("ui/screen")
local DEBUG = require("dbg")
@ -62,7 +64,7 @@ function Font:getFace(font, size)
realname = font
end
realname = self.fontdir.."/"..realname
ok, face = pcall(freetype.newFace, realname, size)
ok, face = pcall(Freetype.newFace, realname, size)
if not ok then
DEBUG("#! Font "..font.." ("..realname..") not supported: "..face)
return nil

@ -3,11 +3,12 @@ local GestureDetector = require("ui/gesturedetector")
local Event = require("ui/event")
local TimeVal = require("ui/timeval")
local Screen = require("ui/screen")
local input = require("ffi/input")
local util = require("ffi/util")
local Math = require("optmath")
local DEBUG = require("dbg")
local _ = require("gettext")
local ffi = require("ffi")
local util = require("ffi/util")
local _ = require("gettext")
-- constants from <linux/input.h>
local EV_SYN = 0

@ -1,9 +1,9 @@
local lfs = require("libs/libkoreader-lfs")
local Menu = require("ui/widget/menu")
local Screen = require("ui/screen")
local UIManager = require("ui/uimanager")
local DEBUG = require("dbg")
local util = require("ffi/util")
-- lfs
local ffi = require("ffi")
ffi.cdef[[
int strcoll (char *str1, char *str2);

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

@ -1,11 +1,5 @@
#!./koreader-base
require "libs/libkoreader-lfs"
einkfb = require("ffi/framebuffer")
input = require("ffi/input")
freetype = require("ffi/freetype")
Image = require("ffi/mupdfimg")
require "defaults"
pcall(dofile, "defaults.persistent.lua")
package.path = "?.lua;common/?.lua;frontend/?.lua"
@ -27,14 +21,15 @@ end
local DocumentRegistry = require("document/documentregistry")
local FileManager = require("apps/filemanager/filemanager")
local InfoMessage = require("ui/widget/infomessage")
local ReaderUI = require("apps/reader/readerui")
local lfs = require("libs/libkoreader-lfs")
local UIManager = require("ui/uimanager")
local Menu = require("ui/widget/menu")
local Device = require("ui/device")
local Screen = require("ui/screen")
local input = require("ffi/input")
local DEBUG = require("dbg")
local ReaderUI = require("apps/reader/readerui")
local Profiler = nil
function exitReader()

@ -1,11 +1,5 @@
#!./koreader-base
require "libs/libkoreader-lfs"
einkfb = require("ffi/framebuffer")
input = require("ffi/input")
freetype = require("ffi/freetype")
Image = require("ffi/mupdfimg")
require "defaults"
print(package.path)
package.path = "?.lua;common/?.lua;frontend/?.lua"
@ -64,7 +58,7 @@ end
function TestVisible:paintTo(bb)
--Draw three lines at the borders to assess what the maximum visible coordinates are
v_line = math.floor(bb:getWidth() / 50)
h_line = math.floor(bb:getHeight() / 50)
-- Paint white background for higher contrast
@ -78,40 +72,40 @@ function TestVisible:paintTo(bb)
x_num = i*50
RenderText:renderUtf8Text(bb, x_num, 40, Font:getFace("ffont", 12), x_num, true)
end
-- Handtunable minimal and maximal visible coordinates
local x_min = 0 + 4
local x_max = bb:getWidth() - 4
local y_min = 0 + 3
local y_max = bb:getHeight() - 3 - 12
-- Render extremes on screen
RenderText:renderUtf8Text(bb, 150, 100, Font:getFace("ffont", 22), "x_min = "..x_min, true)
RenderText:renderUtf8Text(bb, 500, 100, Font:getFace("ffont", 22), "x_max = "..x_max, true)
RenderText:renderUtf8Text(bb, 100, 150, Font:getFace("ffont", 22), "y_min = "..y_min, true)
RenderText:renderUtf8Text(bb, 100, 300, Font:getFace("ffont", 22), "y_max = "..y_max, true)
RenderText:renderUtf8Text(bb, 100, 500, Font:getFace("ffont", 26), "Visible screen size : "..(x_max-x_min).."x"..(y_max-y_min), true)
-- Three parallel lines at the top
bb:paintRect(x_min,y_min, x_max, 1 , 10)
bb:paintRect(x_min,y_min + 3, x_max, 1 , 10)
bb:paintRect(x_min,y_min + 6, x_max, 1 , 10)
-- Three parallel lines at the bottom
bb:paintRect(x_min,y_max, x_max, 1 , 10)
bb:paintRect(x_min,y_max - 3, x_max, 1 , 10)
bb:paintRect(x_min,y_max - 6, x_max, 1 , 10)
-- Three parallel lines at the left
bb:paintRect(x_min,y_min, 1, y_max , 10)
bb:paintRect(x_min + 3,y_min, 1, y_max, 10)
bb:paintRect(x_min + 6,y_min, 1, y_max, 10)
-- Three parallel lines at the right
bb:paintRect(x_max,y_min, 1, y_max , 10)
bb:paintRect(x_max - 3,y_min, 1, y_max, 10)
bb:paintRect(x_max - 6,y_min, 1, y_max, 10)
--Two lines spaces 600 pixels
bb:paintRect(100,600, 1, 250 , 10)
bb:paintRect(700,600, 1, 250 , 10)

Loading…
Cancel
Save