mirror of
https://github.com/koreader/koreader.git
synced 2025-08-10 00:52:38 +00:00
Merge pull request #797 from chrox/master
rescale image if width or height is specified in ImageWidget
This commit is contained in:
@@ -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)
|
||||
|
||||
11
reader.lua
11
reader.lua
@@ -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()
|
||||
|
||||
22
wtest.lua
22
wtest.lua
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user