aboutsummaryrefslogtreecommitdiff
path: root/plugins/fontpreview.lua
blob: 0ce8fc09a2727ecc9177c54e00433bf8a714160b (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
65
66
67
68
69
70
71
72
73
74
75
--mod-version:3 --priority:110

local common = require 'core.common'
local style = require 'core.style'
local View = require 'core.view'

local FontView = View:extend()

local font_text = "The quick brown fox jumps over the lazy dog."

function FontView:new(path)
	FontView.super.new(self)
	self.path = path
	self.fonts = {}
	for i=1, 8 do self.fonts[i] = renderer.font.load(path, (12+i*7)*SCALE) end
	self.scrollable = true
end

function FontView:get_h_scrollable_size()
	return self.fonts[#self.fonts]:get_width(font_text) + style.padding.x
end

function FontView:get_scrollable_size() return 0 end

function FontView:get_name()
	return "Font: " .. self.path
end

local function draw_next_row(fv, y, text, font)
	local _
	_, y = common.draw_text(
		font, style.text, text, "left",
		fv.position.x - fv.scroll.x + style.padding.x, y - fv.scroll.y,
		0, style.padding.y + font:get_height() / 2
	)
	return y
end

function FontView:draw()
	self:draw_background(style.background)

	local y = self.position.y + self.fonts[1]:get_height() / 2 + style.padding.y

	for i=1, #self.fonts do
		y = draw_next_row(self, y, font_text, self.fonts[i])
	end

	local font = self.fonts[1]
	y = draw_next_row(self, y, "abcdefghijklmnopqrstuvwxyz", font)
	y = draw_next_row(self, y, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", font)
	y = draw_next_row(self, y, "0123456789", font)
	y = draw_next_row(self, y, "!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~", font)

	self:draw_scrollbar()
end

local supported_types = { "%.ttf$", "%.otf$" }

local RootView = require 'core.rootview'
local open_doc = RootView.open_doc
function RootView:open_doc(doc)
	local path = doc.filename or doc.abs_filename or ""

	for _, v in ipairs(supported_types) do
		if path:find(v) then
			local node = self:get_active_node_default()
			local view = FontView(path)
			node:add_view(view)
			self.root_node:update_layout()
			return view
		end
	end

	return open_doc(self, doc)
end