aboutsummaryrefslogtreecommitdiff
path: root/plugins/scale.lua
blob: 4fd82cc2b6fad3768cb7e7b12ad9a5ae7a6623f1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
local core = require "core"
local command = require "core.command"
local keymap = require "core.keymap"
local style = require "core.style"


local font_cache = setmetatable({}, { __mode = "k" })

-- the following should be kept in sync with core.style's default font settings
font_cache[style.font]      = { EXEDIR .. "/data/fonts/font.ttf",      14   * SCALE }
font_cache[style.big_font]  = { EXEDIR .. "/data/fonts/font.ttf",      34   * SCALE }
font_cache[style.icon_font] = { EXEDIR .. "/data/fonts/icons.ttf",     14   * SCALE }
font_cache[style.code_font] = { EXEDIR .. "/data/fonts/monospace.ttf", 13.5 * SCALE }


local load_font = renderer.font.load
function renderer.font.load(...)
  local res = load_font(...)
  font_cache[res] = { ... }
  return res
end


local function scale_font(font, s)
  local fc = font_cache[font]
  return renderer.font.load(fc[1], fc[2] * s)
end


local function set_scale(scale)
  local s = scale / SCALE

  style.padding.x      = style.padding.x      * s
  style.padding.y      = style.padding.y      * s
  style.divider_size   = style.divider_size   * s
  style.scrollbar_size = style.scrollbar_size * s
  style.caret_width    = style.caret_width    * s
  style.tab_width      = style.tab_width      * s

  style.font      = scale_font(style.font,      s)
  style.big_font  = scale_font(style.big_font,  s)
  style.icon_font = scale_font(style.icon_font, s)
  style.code_font = scale_font(style.code_font, s)

  SCALE = scale
  core.redraw = true
end


local default = SCALE

command.add(nil, {
  ["scale:reset"   ] = function() set_scale(default)     end,
  ["scale:decrease"] = function() set_scale(SCALE * 0.9) end,
  ["scale:increase"] = function() set_scale(SCALE * 1.1) end,
})

keymap.add {
  ["ctrl+0"] = "scale:reset",
  ["ctrl+-"] = "scale:decrease",
  ["ctrl+="] = "scale:increase",
}

return { set_scale = set_scale }