Allow `TreeView` item icon and text styling
This commit is contained in:
parent
7b82d787c0
commit
e500368ce4
|
@ -288,9 +288,27 @@ function TreeView:draw_tooltip()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
function TreeView:color_for_item(abs_filename)
|
function TreeView:get_item_icon(item, active, hovered)
|
||||||
-- other plugins can override this to customize the color of each icon
|
local character = "f"
|
||||||
return nil
|
if item.type == "dir" then
|
||||||
|
character = item.expanded and "D" or "d"
|
||||||
|
end
|
||||||
|
local font = style.icon_font
|
||||||
|
local color = style.text
|
||||||
|
if active or hovered then
|
||||||
|
color = style.accent
|
||||||
|
end
|
||||||
|
return character, font, color
|
||||||
|
end
|
||||||
|
|
||||||
|
function TreeView:get_item_text(item, active, hovered)
|
||||||
|
local text = item.name
|
||||||
|
local font = style.font
|
||||||
|
local color = style.text
|
||||||
|
if active or hovered then
|
||||||
|
color = style.accent
|
||||||
|
end
|
||||||
|
return text, font, color
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
@ -304,40 +322,32 @@ function TreeView:draw()
|
||||||
local active_filename = doc and system.absolute_path(doc.filename or "")
|
local active_filename = doc and system.absolute_path(doc.filename or "")
|
||||||
|
|
||||||
for item, x,y,w,h in self:each_item() do
|
for item, x,y,w,h in self:each_item() do
|
||||||
local color = style.text
|
local icon_char, icon_font, icon_color =
|
||||||
|
self:get_item_icon(item, item.abs_filename == active_filename,
|
||||||
-- highlight active_view doc
|
item == self.hovered_item)
|
||||||
if item.abs_filename == active_filename then
|
local item_text, item_font, item_color =
|
||||||
color = style.accent
|
self:get_item_text(item, item.abs_filename == active_filename,
|
||||||
end
|
item == self.hovered_item)
|
||||||
|
|
||||||
-- hovered item background
|
-- hovered item background
|
||||||
if item == self.hovered_item then
|
if item == self.hovered_item then
|
||||||
renderer.draw_rect(x, y, w, h, style.line_highlight)
|
renderer.draw_rect(x, y, w, h, style.line_highlight)
|
||||||
color = style.accent
|
|
||||||
end
|
end
|
||||||
|
|
||||||
-- allow for color overrides
|
|
||||||
local icon_color = self:color_for_item(item.abs_filename) or color
|
|
||||||
|
|
||||||
-- icons
|
-- icons
|
||||||
x = x + item.depth * style.padding.x + style.padding.x
|
x = x + item.depth * style.padding.x + style.padding.x
|
||||||
if item.type == "dir" then
|
if item.type == "dir" then
|
||||||
local icon1 = item.expanded and "-" or "+"
|
local expand_icon = item.expanded and "-" or "+"
|
||||||
local icon2 = item.expanded and "D" or "d"
|
local expand_color = item == self.hovered_item and style.accent or style.text
|
||||||
common.draw_text(style.icon_font, color, icon1, nil, x, y, 0, h)
|
common.draw_text(style.icon_font, expand_color, expand_icon, nil, x, y, 0, h)
|
||||||
x = x + style.padding.x
|
|
||||||
common.draw_text(style.icon_font, icon_color, icon2, nil, x, y, 0, h)
|
|
||||||
x = x + icon_width
|
|
||||||
else
|
|
||||||
x = x + style.padding.x
|
|
||||||
common.draw_text(style.icon_font, icon_color, "f", nil, x, y, 0, h)
|
|
||||||
x = x + icon_width
|
|
||||||
end
|
end
|
||||||
|
x = x + style.padding.x
|
||||||
|
common.draw_text(icon_font, icon_color, icon_char, nil, x, y, 0, h)
|
||||||
|
x = x + icon_width
|
||||||
|
|
||||||
-- text
|
-- text
|
||||||
x = x + spacing
|
x = x + spacing
|
||||||
x = common.draw_text(style.font, color, item.name, nil, x, y, 0, h)
|
x = common.draw_text(item_font, item_color, item_text, nil, x, y, 0, h)
|
||||||
end
|
end
|
||||||
|
|
||||||
self:draw_scrollbar()
|
self:draw_scrollbar()
|
||||||
|
|
Loading…
Reference in New Issue