Skip to content

Commit

Permalink
add font preview plugin (#392)
Browse files Browse the repository at this point in the history
* add font preview plugin

* remove get_scrollable_size and unused variable

* add a list of supported font types

I also realized I haven't been returning the view that `open_doc`
returns, so I fixed that too

* add rows for every printable character in ASCII

* deactivate vertical scrolling

* properly mark patterns in supported_types list

Co-authored-by: Guldoman <[email protected]>

---------

Co-authored-by: Guldoman <[email protected]>
  • Loading branch information
thacuber2a03 and Guldoman authored Mar 28, 2024
1 parent 4077626 commit 6506a53
Show file tree
Hide file tree
Showing 2 changed files with 82 additions and 0 deletions.
7 changes: 7 additions & 0 deletions manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -300,6 +300,13 @@
"remote": "https://github.com/LolsonX/endwise-lite-xl.git:d9ced6089ab7f54bad197c30ba581055270f2dad",
"version": "0.1"
},
{
"description": "Automatically displays a font with increasing sizes in a new view.",
"version": "0.1",
"path": "plugins/fontpreview.lua",
"id": "fontpreview",
"mod_version": "3"
},
{
"description": "Debug Lite-XL's Lua VM interactively, if you're running it from a terminal. Warning: Will significantly slow down Lite-XL if installed.",
"id": "lite-debugger",
Expand Down
75 changes: 75 additions & 0 deletions plugins/fontpreview.lua
Original file line number Diff line number Diff line change
@@ -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

0 comments on commit 6506a53

Please sign in to comment.