You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
85 lines
2.6 KiB
85 lines
2.6 KiB
-- Register all Toolbar actions and intialize all UI stuff |
|
function initUi() |
|
app.registerUi({["menu"] = "Migrate font sizes with factor displayDPI / 72", ["callback"] = "migrate"}); |
|
app.registerUi({["menu"] = "Show font size migration dialog", ["callback"] = "showDialog"}); |
|
|
|
sourcePath = debug.getinfo(1).source:match("@?(.*/)") |
|
end |
|
|
|
function migrate() |
|
local displayDpi = app.getDisplayDpi() |
|
local dpiNormalizationFactor = 72 |
|
local factor = displayDpi / dpiNormalizationFactor |
|
-- print("Display DPI is " .. displayDpi .. " => scaling by factor " .. displayDpi .. "/72 = " .. factor) |
|
local result = app.msgbox("Display DPI is " .. displayDpi .. ". By proceeding the font sizes of all text elements will be scaled by the factor " .. displayDpi .. "/72 = " .. factor, {[1]="Cancel", [2]="OK"}) |
|
if result == 2 then |
|
resize(factor) |
|
end |
|
end |
|
|
|
local currDpi |
|
|
|
function showDialog() |
|
local hasLgi, lgi = pcall(require, "lgi") |
|
if not hasLgi then |
|
app.msgbox("You need to have the Lua lgi-module installed and included in your Lua package path in order to use the GUI for migrating font sizes. \n\n", {[1]="OK"}) |
|
return |
|
end |
|
|
|
--lgi module has been found |
|
local Gtk = lgi.require("Gtk", "3.0") |
|
local Gdk = lgi.Gdk |
|
local assert = lgi.assert |
|
local builder = Gtk.Builder() |
|
assert(builder:add_from_file(sourcePath .. "dialog.glade")) |
|
local ui = builder.objects |
|
local dialog = ui.dlgMigrateFontSizes |
|
|
|
if not currDpi then |
|
currDpi = app.getDisplayDpi() |
|
end |
|
ui.spbtOldDpi:set_value(currDpi) |
|
ui.lblCurrentDpi:set_text(app.getDisplayDpi()) |
|
ui.spbtScaleFactor:set_value(currDpi/72) |
|
|
|
-- Connect actions |
|
function ui.btApply.on_clicked() |
|
local factor = ui.spbtScaleFactor:get_value() |
|
resize(factor) |
|
end |
|
|
|
function ui.btCancel.on_clicked() |
|
dialog:destroy() |
|
end |
|
|
|
function ui.spbtScaleFactor.on_value_changed() |
|
factor = ui.spbtScaleFactor:get_value() |
|
currDpi = math.floor(factor*72+0.5) |
|
ui.spbtOldDpi:set_value(currDpi) |
|
end |
|
|
|
function ui.spbtOldDpi.on_value_changed() |
|
oldDpi = ui.spbtOldDpi:get_value() |
|
ui.spbtScaleFactor:set_value(oldDpi/72) |
|
end |
|
|
|
dialog:show_all() |
|
end |
|
|
|
function resize(factor) |
|
local docStructure = app.getDocumentStructure() |
|
local numPages = #docStructure["pages"] |
|
local page = docStructure["currentPage"] |
|
local layer = docStructure["pages"][page]["currentLayer"] |
|
|
|
for i=1, numPages do |
|
app.setCurrentPage(i) |
|
local numLayers = #docStructure["pages"][page]["layers"] |
|
for j=1, numLayers do |
|
app.setCurrentLayer(j) |
|
app.scaleTextElements(factor) |
|
end |
|
end |
|
app.setCurrentPage(page) |
|
app.setCurrentLayer(layer) |
|
end
|
|
|