aboutsummaryrefslogtreecommitdiff
path: root/plugins/fontpreview.lua
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/fontpreview.lua')
-rw-r--r--plugins/fontpreview.lua75
1 files changed, 75 insertions, 0 deletions
diff --git a/plugins/fontpreview.lua b/plugins/fontpreview.lua
new file mode 100644
index 0000000..0ce8fc0
--- /dev/null
+++ b/plugins/fontpreview.lua
@@ -0,0 +1,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