greatly simplify slider implementation

akkartik
Dec 17, 2023, 7:28 AM
OC4P6P36KEBO2FIYTKXUQOP6VSQRFONDCLSZDGN7ZNYN23UMNH7AC

Dependencies

  • [2] WYTWSZR3 bugfix: crash unless first mouse click on settings
  • [3] LEE7TNZM sync all sliders with the font slider where possible
  • [4] LR4HHCRH responsive layout for settings menu
  • [5] W4EQ6IW4 simplify state management for menus
  • [6] 3MJ2PYMW resolve conflicts
  • [7] OGUV4HSA remove some memory leaks from rendered fragments
  • [8] 3QNOKBFM beginnings of a test harness
  • [9] 2Q437U4F starting to experiment with animated pane transitions
  • [10] 5OVKHVY6 nice way to make on.* handlers more discoverable
  • [11] BJ5X5O4A let's prevent the text cursor from ever getting on a drawing
  • [12] ZOGPQR4S really ignore hidden sliders
  • [13] VEAVIL4X resize handler
  • [14] 6LJZN727 handle chords
  • [15] 2CFLXLIE Merge text.love
  • [16] WR2WMEPE implement 'Run' button
  • [17] UEG224LH debug animations
  • [18] 4GX6NAY4 some very basic animations for switching panes
  • [19] JV27LDDK sliders for font size and color settings
  • [20] 4YDBYBA4 clean up memory leak experiments
  • [21] LWPFEZBI Merge lines.love
  • [22] GWLETNMW Mike's suggested button layout
  • [23] KMSL74GA support selections in the source editor
  • [24] YV2GBDNW preserve settings across restart
  • [25] 4QFVRJ5U get rid of pane transition animations
  • [26] MZ3DMYPD start sketching out a scrollbar
  • [27] ED4Z6ORC cleaner API for file-system access
  • [28] VXORMHME delete experimental REPL
  • [29] CAG7PP5Y Merge text.love
  • [30] ESOJS6ZW extract a function
  • [31] FS2ITYYH record a known issue
  • [32] NVZTMKER partition handlers between screen regions
  • [33] RSZD5A7G forgot to add json.lua
  • [34] I52S4E5F running `print` now appends to output editor
  • [35] D2TYFYG2 Merge text.love
  • [36] 73OCE2MC after much struggle, a brute-force undo
  • [37] 6RYGW5H3 bugfix: output border color
  • [38] TVCPXAAU rename
  • [39] LGIEVJE6 activate buttons for some time
  • [40] BULPIBEG beginnings of a module for the text editor
  • [41] SW5GN5LP suggest a default layout for freewheeling apps
  • [42] VLTU33KW resolve conflicts
  • [43] AVTNUQYR basic test-enabled framework
  • [44] CMKUVBXQ permit smaller font sizes
  • [45] E75L5QGU ok/cancel buttons in file dialog
  • [46] XX7G2FFJ intermingle freehand line drawings with text
  • [47] UUAIVZ4U 2 bugfixes in font rendering
  • [48] 66X36NZN a little more prose describing manual_tests
  • [49] 4SR3Z4Y3 document the version of LÖVE I've been using
  • [50] 6DJMOJKE support event handlers
  • [51] FIUQJVL2 first draft of load/save buttons
  • [52] QD4LOFQR Merge text.love
  • [53] 6VJTQKW7 start supporting LÖVE v12
  • [54] 47VXAH2H delete some old code
  • [55] D43U7GQ4 alter on-disk representation (manifest files)
  • [56] PRE6XPRN responsively increase/decrease font height
  • [57] W3RRTO4P extract a second helper for buttons
  • [58] RK2ASPN7 add lots of buttons to the toolbar
  • [59] HVXZLNCC send errors from event handlers to output editor
  • [60] D2GCFTTT clean up repl functionality
  • [61] ZLJYLPOT Merge lines.love
  • [62] LXTTOB33 extract a couple of files
  • [63] TBTRYEBP Merge lines.love
  • [64] VHUNJHXB Merge lines.love
  • [65] YT7NMQ6Z delete dead code
  • [66] VHQCNMAR several more modules
  • [67] VXRYVZ74 Merge text.love
  • [68] ZM7NOBRM new fork: carousel shell
  • [69] YF2ATH2Q Merge lines.love
  • [70] LRDM35CE app running again
  • [71] VP5KC4XZ Merge lines.love
  • [72] ORKN6EOB Merge lines.love
  • [73] SGMA5JLE save the list of tests in repo
  • [74] RU4HIK43 Merge lines.love
  • [75] VAVXKWZV aggregate global state inside a 'pane' object
  • [76] LXR2FNDC resolve conflicts
  • [77] PUXFYOQ4 rename a function
  • [78] 3PSFWAIL Merge lines.love
  • [79] PJ5PQAQE record support for multiple versions
  • [80] 2DVVKKVA flesh out Readme
  • [81] BLWAYPKV extract a module
  • [82] OOSUBWKX subject people to a tutorial
  • [83] 36Z442IV back to commit 8123959e52f without code editing
  • [84] GRB4J4QK make slider easier to acquire on the extremes
  • [85] CSXIZ4FA resolve conflicts
  • [86] 57HKHZ7Z include the tool that's mentioned in representation.md
  • [87] BQTHWI4A check slider state more precisely
  • [88] 5RUFNRJO start of the visual skeleton
  • [89] SIJ5I4NZ extract a helper for buttons
  • [90] IP4LD33D mouse events for scrollbar
  • [91] ZENSSO3D pass remaining love handlers through
  • [92] Q6RXCILQ Merge text.love
  • [93] M5JXTW56 Merge text.love
  • [94] K2X6G75Z start writing some tests for drawings
  • [95] T4FRZSYL delete an ancient, unused file
  • [96] SIASJPGR save the list of open files across restart
  • [97] 2L5MEZV3 experiment: new edit namespace
  • [98] OL7ZCZWD Merge text.love
  • [99] QLJY3CKC bugfix: use border color in scrollbars
  • [100] 34BZ5ZKN Merge lines.love
  • [101] N2NUGNN4 include a brief reference enabling many useful apps
  • [102] Z5M23NTK implement second, 'output' editor
  • [103] VUF2SX7B implement carousel buttons for inserting/switching current pane
  • [104] CE4LZV4T drop last couple of manual tests
  • [105] R5QXEHUI somebody stop me
  • [106] JOPVPUSA editing source code from within the app
  • [107] GFBOJWNE resolve conflicts
  • [108] TLOAPLBJ add a license
  • [109] SJXIMERS type out a filename to load/save
  • [110] 6MQCFHXM remember when someone deletes an example
  • [111] KKQKPGCI resolve conflicts
  • [112] CMZDG7CJ bugfix: tapping in scrollbar area
  • [113] OTIBCAUJ love2d scaffold
  • [114] EZHO4TSW new file-system format for freewheeling apps
  • [115] FM5LDKGT Merge text.love
  • [116] KKMFQDR4 editing source code from within the app
  • [117] CZQ3NJ4N Merge text0
  • [118] 5MEJ7XNH lay out buttons based on device dimensions
  • [119] QIG72BFJ really really ignore invisible sliders X-(

Change contents

  • file deletion: 0095-Selected_slider (----------)
    [6.2][6.24:68](),[6.68][6.1:1]()
    Selected_slider = nil
  • file deletion: 0089-Settings_background_sliders (----------)
    [6.2][6.547:603](),[6.603][6.513:513]()
    Settings_background_sliders = {}
  • file deletion: 0086-select_settings_slider (----------)
    [6.2][6.554:605](),[6.605][6.1:1]()
    select_settings_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
  • file deletion: 0088-Settings_foreground_sliders (----------)
    [6.2][6.639:695](),[6.695][6.605:605]()
    Settings_foreground_sliders = {}
  • file deletion: 0084-update_any_sliders (----------)
    [6.2][6.2248:2295](),[6.2295][6.1715:1715]()
    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
  • file deletion: 0083-Settings_font_slider (----------)
    [6.2][6.2465:2514](),[6.2514][6.2297:2297]()
    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,
    }
  • edit in 0087-on_slider at line 2
    [6.732][2.66:128]()
    if slider.x0 == nil then return end -- slider uninitialized
  • file addition: 0086-mouse_press_consumed_by_any_slider (----------)
    [6.2]
    mouse_press_consumed_by_any_slider = function(State, x, y)
    for name, slider in pairs(State.slider_handlers) do
    if on_slider(slider, x,y) then
    State.selected_slider = name -- used by update across frames; slider_handlers is recreated every frame
    return true
    end
    end
    end
  • file addition: 0084-update_sliders (----------)
    [6.2]
    update_sliders = function(State, x)
    for name, slider in pairs(State.slider_handlers) do
    if State.selected_slider == name then
    slider.update(slider_value(slider, x))
    break
    end
    end
    end
  • file addition: 0083-slider (----------)
    [6.2]
    slider = function(State, name, params)
    draw_slider(params)
    State.slider_handlers[name] = params
    end
  • edit in 0082-draw_slider at line 5
    [6.2787]
    [6.2787]
    App.color(s.fg)
  • replacement in 0081-draw_settings_menu at line 12
    [6.3408][6.3408:3449]()
    Settings_font_slider = {
    name='font',
    [6.3408]
    [6.3449]
    slider(Global_state, 'font', {
    fg=Normal_color,
  • replacement in 0081-draw_settings_menu at line 23
    [3.47][6.3652:3690](),[6.3652][6.3652:3690]()
    }
    draw_slider(Settings_font_slider)
    [3.47]
    [6.3690]
    update=update_font_settings,
    })
  • replacement in 0081-draw_settings_menu at line 33
    [6.3913][3.48:83](),[3.83][6.3913:3970](),[6.3913][6.3913:3970]()
    local prev = Settings_font_slider
    Settings_foreground_sliders = {
    r = {
    name='fg/r',
    [6.3913]
    [3.84]
    local prev = Global_state.slider_handlers.font
    for _,color in ipairs{'r', 'g', 'b'} do
    slider(Global_state, 'fg/'..color, {
    fg=Normal_color,
  • replacement in 0081-draw_settings_menu at line 41
    [3.158][3.158:187](),[3.187][6.4076:4105](),[6.4076][6.4076:4105](),[6.4105][3.188:294](),[3.294][6.4214:4243](),[6.4214][6.4214:4243](),[6.4243][3.295:401](),[3.401][6.4352:4517](),[6.4352][6.4352:4517](),[6.4517][4.95:105]()
    value=Foreground_color.r,
    },
    g = {
    name='fg/g',
    x0=prev.x0, x1=prev.x1,
    y0=y+15,
    w=prev.w, h=prev.h,
    lo=0, hi=1,
    value=Foreground_color.g,
    },
    b = {
    name='fg/b',
    x0=prev.x0, x1=prev.x1,
    y0=y+30,
    w=prev.w, h=prev.h,
    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+50
    [3.158]
    [6.4542]
    value=Foreground_color[color],
    update=function(v) Foreground_color[color] = v end,
    })
    y = y+15
    end
    y = y+5
  • replacement in 0081-draw_settings_menu at line 51
    [6.4680][6.4680:4762]()
    App.color(Normal_color)
    Settings_background_sliders = {
    r = {
    name='bg/r',
    [6.4680]
    [3.402]
    for _,color in ipairs{'r', 'g', 'b'} do
    slider(Global_state, 'bg/'..color, {
    fg=Normal_color,
  • edit in 0081-draw_settings_menu at line 56
    [3.438][3.438:504](),[3.504][6.4868:4897](),[6.4868][6.4868:4897](),[6.4897][3.505:544]()
    w=prev.w, h=prev.h,
    lo=0, hi=1,
    value=Background_color.r
    },
    g = {
    name='bg/g',
    x0=prev.x0, x1=prev.x1,
    y0=y+15,
  • replacement in 0081-draw_settings_menu at line 58
    [3.582][3.582:610](),[3.610][6.5006:5035](),[6.5006][6.5006:5035](),[6.5035][3.611:640](),[3.640][6.5068:5082](),[6.5068][6.5068:5082](),[6.5082][3.641:664](),[3.664][6.5097:5309](),[6.5097][6.5097:5309]()
    value=Background_color.g
    },
    b = {
    name='bg/b',
    x0 = prev.x0, x1=prev.x1,
    y0 = y+30,
    w=prev.w, h=prev.h,
    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)
    [3.582]
    [6.5309]
    value=Background_color[color],
    update=function(v) Background_color[color] = v end,
    })
    y = y+15
    end
  • edit in 0017-on.mouse_release at line 3
    [6.83][6.5799:5822](),[6.2259][6.5799:5822]()
    Selected_slider = nil
  • edit in 0017-on.mouse_release at line 8
    [6.166]
    [5.661]
    Global_state.selected_slider = nil
  • replacement in 0017-on.mouse_release at line 40
    [6.1421][5.695:699]()
    end
    [6.1421]
    end
  • edit in 0016-on.mouse_press at line 10
    [6.304]
    [5.700]
    if mouse_press_consumed_by_any_slider(Global_state, x,y) then
    return
    end
  • replacement in 0016-on.mouse_press at line 15
    [6.370][6.777:822]()
    select_settings_slider(x,y, mouse_button)
    [6.370]
    [6.412]
    -- nothing atm in settings menu that isn't a button or slider
  • edit in 0012-on.draw at line 3
    [6.4113]
    [6.4084]
    Global_state.slider_handlers = {}
  • replacement in 0004-on.update at line 8
    [6.657][6.151:176](),[6.704][6.151:176](),[6.176][6.6210:6266](),[6.6210][6.6210:6266](),[6.6266][6.658:672]()
    if Selected_slider then
    update_any_sliders(App.mouse_x(), App.mouse_y())
    end
    -- main area
    [6.657]
    [6.4658]
    update_sliders(Global_state, App.mouse_x())
    -- == main area