sliders for font size and color settings

This commit is contained in:
Kartik K. Agaram 2023-11-21 02:19:56 -08:00
parent 10e99377d5
commit 76bfcba47e
22 changed files with 200 additions and 5 deletions

View File

@ -1,5 +1,8 @@
on.update = function()
refresh_debug_animations()
if App.mouse_down(1) then
update_any_sliders(App.mouse_x(), App.mouse_y())
end
if Current_pane.editor_state.scrollbar_drag then
adjust_scrollbar(Current_pane.editor_state, App.mouse_y())
elseif Current_pane.output_editor_state.scrollbar_drag then

View File

@ -3,10 +3,10 @@ on.draw = function()
draw_canvas()
if Show_code then
draw_editor_border()
edit.draw(Current_pane.editor_state, --[[fg]] nil, --[[hide_cursor]] nil, --[[show_line_numbers]] true)
edit.draw(Current_pane.editor_state, --[[fg]] Foreground_color, --[[hide_cursor]] nil, --[[show_line_numbers]] true)
draw_scrollbar(Current_pane.editor_state)
draw_output_border()
edit.draw(Current_pane.output_editor_state, Normal_color, --[[hide cursor]] true)
edit.draw(Current_pane.output_editor_state, Foreground_color, --[[hide cursor]] true)
draw_scrollbar(Current_pane.output_editor_state)
end
draw_menu()

View File

@ -2,6 +2,12 @@ on.mouse_press = function(x,y, mouse_button)
if mouse_press_consumed_by_any_button_handler(Global_state, x,y, mouse_button) then
return
end
if mouse_on_any_slider(x,y, mouse_button) then
return
end
if not on_area(Settings_menu_area, x,y) then
Show_settings = false
end
if on_editor_scrollbar(Current_pane.editor_state, x,y) then
Current_pane.editor_state.scrollbar_drag = true
elseif on_editor_scrollbar_area(Current_pane.editor_state, x,y) then

View File

@ -1,4 +1,5 @@
on.mouse_release = function(x,y, mouse_button)
Selected_slider = nil
if Current_pane.editor_state.scrollbar_drag then
adjust_scrollbar(Current_pane.editor_state, y)
Current_pane.editor_state.scrollbar_drag = nil

View File

@ -29,4 +29,7 @@ draw_menu = function()
if Current_pane_index < #Panes then
next_pane_button(Menu_left + Safe_width)
end
if Show_settings then
draw_settings_menu()
end
end

View File

@ -12,8 +12,7 @@ run_button = function(x)
Current_pane.canvas = love.graphics.newCanvas()
love.graphics.setCanvas(Current_pane.canvas)
love.graphics.push('all')
love.graphics.setBackgroundColor(1,1,1)
love.graphics.setColor(0,0,0)
-- love.graphics.setBackgroundColor(Background_color.r, Background_color.g, Background_color.b)
Current_pane.output_editor_state.lines = {}
Text.redraw_all(Current_pane.output_editor_state)
local real_print = print

View File

@ -6,7 +6,7 @@ settings_button = function(x, w)
love.graphics.print('settings', p.x+5,p.y+2)
end,
onpress1 = function()
print('settings')
Show_settings = not Show_settings
end,
})
return x+w+10

1
0080-Show_settings Normal file
View File

@ -0,0 +1 @@
Show_settings =false

99
0081-draw_settings_menu Normal file
View File

@ -0,0 +1,99 @@
draw_settings_menu = function()
App.color(Menu_background)
local w,h = 200, love.graphics.getFont():getHeight()*8
local x,y = Safe_width-30-w, Menu_bottom
Settings_menu_area = {x=x, y=y, w=w, h=h}
love.graphics.rectangle('fill', x,y, w,h)
App.color(Normal_color)
-- font size slider
love.graphics.print('font size', x+10,y+10)
y = y+10+Line_height
local sx = x+App.width('bg')+50 -- align all sliders
Settings_font_slider = {
name='font',
-- x limits
x0=sx+20, x1=Safe_width-30,
-- central y
y0=y+10,
-- slider knob dimensions
w=10, h=10,
-- extremes
lo=20, hi=40, -- font sizes
value=Current_pane.editor_state.font_height
}
draw_slider(Settings_font_slider)
y = y+10
-- colors
love.graphics.print('colors', x+10,y+10)
y = y+10+Line_height
-- colors/foreground
love.graphics.print('fg', x+20, y)
App.color(Foreground_color)
love.graphics.rectangle('fill', sx-20,y+5, 20,20)
Settings_foreground_sliders = {
r = {
name='fg/r',
x0 = sx+20, x1=Safe_width-30,
y0 = y,
w=10, h=10,
lo = 0, hi=1,
value = Foreground_color.r
},
g = {
name='fg/g',
x0 = sx+20, x1=Safe_width-30,
y0 = y+15,
w=10, h=10,
lo = 0, hi=1,
value = Foreground_color.g
},
b = {
name='fg/b',
x0 = sx+20, x1=Safe_width-30,
y0 = y+30,
w=10, h=10,
lo = 0, hi=1,
value = Foreground_color.b
},
}
App.color(Normal_color)
draw_slider(Settings_foreground_sliders.r)
draw_slider(Settings_foreground_sliders.g)
draw_slider(Settings_foreground_sliders.b)
y = y+10+Line_height+10
-- colors/background
love.graphics.print('bg', x+20, y)
App.color(Background_color)
love.graphics.rectangle('fill', sx-20,y+5, 20,20)
App.color(Normal_color)
Settings_background_sliders = {
r = {
name='bg/r',
x0 = sx+20, x1=Safe_width-30,
y0 = y,
w=10, h=10,
lo = 0, hi=1,
value = Background_color.r
},
g = {
name='bg/g',
x0 = sx+20, x1=Safe_width-30,
y0 = y+15,
w=10, h=10,
lo = 0, hi=1,
value = Background_color.g
},
b = {
name='bg/b',
x0 = sx+20, x1=Safe_width-30,
y0 = y+30,
w=10, h=10,
lo = 0, hi=1,
value = Background_color.b
},
}
App.color(Normal_color)
draw_slider(Settings_background_sliders.r)
draw_slider(Settings_background_sliders.g)
draw_slider(Settings_background_sliders.b)
end

8
0082-draw_slider Normal file
View File

@ -0,0 +1,8 @@
-- draw a slider widget starting at x,y, extending right w pixels
-- position 'value' on the slider
-- the leftmost point on the slider will have value 'lo', and the rightmost will have 'hi'. In between the value will be linearly interpolated.
draw_slider = function(s)
love.graphics.line(s.x0, s.y0, s.x1, s.y0)
s.x = s.x0 + (s.x1-s.x0)*(s.value-s.lo)/(s.hi-s.lo)
love.graphics.rectangle('fill', s.x-s.h/2, s.y0-s.h/2, s.w,s.h)
end

11
0083-Settings_font_slider Normal file
View File

@ -0,0 +1,11 @@
Settings_font_slider = {
name='font',
-- left extreme
x0=nil, y0=nil,
-- right extreme
x1=nil,
-- slider itself
x=nil, -- y=y0
w=nil, h=nil,
lo=20, hi=40,
}

18
0084-update_any_sliders Normal file
View File

@ -0,0 +1,18 @@
update_any_sliders = function(x,y)
if Selected_slider == Settings_font_slider.name then
update_font_settings(slider_value(Settings_font_slider, x))
return true
end
for color,slider in pairs(Settings_foreground_sliders) do
if Selected_slider == slider.name then
Foreground_color[color] = slider_value(slider, x)
return true
end
end
for color,slider in pairs(Settings_background_sliders) do
if Selected_slider == slider.name then
Background_color[color] = slider_value(slider, x)
return true
end
end
end

8
0085-slider_value Normal file
View File

@ -0,0 +1,8 @@
slider_value = function(slider, x)
local s = slider
if x < s.x0 then x = s.x0 end
if x > s.x1 then x = s.x1 end
s.x = x
s.value = s.lo + (s.x-s.x0)*(s.hi-s.lo)/(s.x1-s.x0)
return s.value
end

20
0086-mouse_on_any_slider Normal file
View File

@ -0,0 +1,20 @@
mouse_on_any_slider = function(x,y, mouse_button)
local result = false
if on_slider(Settings_font_slider, x,y) then
Selected_slider = Settings_font_slider.name
result = true
end
for color,slider in pairs(Settings_foreground_sliders) do
if on_slider(slider, x,y) then
Selected_slider = slider.name
result = true
end
end
for color,slider in pairs(Settings_background_sliders) do
if on_slider(slider, x,y) then
Selected_slider = slider.name
result = true
end
end
return result
end

5
0087-on_slider Normal file
View File

@ -0,0 +1,5 @@
on_slider = function(slider, x,y)
if x < slider.x0 or x > slider.x1 then return end
if y < slider.y0-slider.h/2 or y > slider.y0+slider.h/2 then return end
return true
end

View File

@ -0,0 +1 @@
Settings_foreground_sliders = {}

View File

@ -0,0 +1 @@
Settings_background_sliders = {}

1
0090-Background_color Normal file
View File

@ -0,0 +1 @@
Background_color = {r=1, g=1, b=1}

1
0091-Foreground_color Normal file
View File

@ -0,0 +1 @@
Foreground_color = {r=0, g=0, b=0}

1
0092-Settings_menu_area Normal file
View File

@ -0,0 +1 @@
Settings_menu_area = {}

7
0093-on_area Normal file
View File

@ -0,0 +1,7 @@
on_area = function(s, x,y)
if x < s.x then return end
if x > s.x+s.w then return end
if y < s.y then return end
if y > s.y+s.h then return end
return true
end

1
0095-Selected_slider Normal file
View File

@ -0,0 +1 @@
Selected_slider = nil