diff options
Diffstat (limited to 'Data/DefaultContent/Libraries/addons/addons/bluguide/ui/buttons.lua')
-rw-r--r-- | Data/DefaultContent/Libraries/addons/addons/bluguide/ui/buttons.lua | 119 |
1 files changed, 119 insertions, 0 deletions
diff --git a/Data/DefaultContent/Libraries/addons/addons/bluguide/ui/buttons.lua b/Data/DefaultContent/Libraries/addons/addons/bluguide/ui/buttons.lua new file mode 100644 index 0000000..98c52ef --- /dev/null +++ b/Data/DefaultContent/Libraries/addons/addons/bluguide/ui/buttons.lua @@ -0,0 +1,119 @@ +local texts = require('texts') + +local buttons = {} +local buttonlist = {} + +function buttons.new(label, settings) + label = label or "" + settings = settings or {} + + settings.flags = settings.flags or {} + settings.flags.draggable = false + + local button = {} + + button.left_click = settings.left_click + button.hover_on = settings.hover_on + button.hover_off = settings.hover_off + + button.text = texts.new(label, settings) + button.destroy = function() buttons.destroy(button) end + + setmetatable(button, {__index = function(t, k) + if t.text[k] ~= nil then + return function(...) + return t.text[k](t.text, ...) + end + end + end }) + + buttonlist[#buttonlist +1] = button + return button +end + +function buttons.destroy(me) + for k, v in pairs(buttonlist) do + if v == me then + buttonlist[k] = nil + end + end + me.text.destroy(me.text) +end + +local mousemoved = true +local ignorerelease = false + +windower.register_event('mouse', function(eventtype, x, y, delta, blocked) + if blocked then + return + end + + -- Mouse drag + if eventtype == 0 then + mousemoved = true + + for _, button in pairs(buttonlist) do + if type(button.hover_on) == "function" and type(button.hover_off) == "function" then + if button.text:hover(x, y) then + button:hover_on() + else + button:hover_off() + end + end + end + + -- Mouse left click + elseif eventtype == 1 then + mousemoved = false + for _, button in pairs(buttonlist) do + if button.text:hover(x, y) then + ignorerelease = true + return true + end + end + ignorerelease = false + + -- Mouse left release + elseif eventtype == 2 then + for _, button in pairs(buttonlist) do + if button.text:hover(x, y) and button.text:visible() and not mousemoved and type(button.left_click) == "function" then + button:left_click() + return true + end + end + + if ignorerelease then + return true + end + end + + return false +end) + +return buttons + +--Copyright © 2015, Anissa +--All rights reserved. + +--Redistribution and use in source and binary forms, with or without +--modification, are permitted provided that the following conditions are met: + +-- * Redistributions of source code must retain the above copyright +-- notice, this list of conditions and the following disclaimer. +-- * Redistributions in binary form must reproduce the above copyright +-- notice, this list of conditions and the following disclaimer in the +-- documentation and/or other materials provided with the distribution. +-- * Neither the name of bluGuide nor the +-- names of its contributors may be used to endorse or promote products +-- derived from this software without specific prior written permission. + +--THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +--ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +--WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +--DISCLAIMED. IN NO EVENT SHALL ANISSA BE LIABLE FOR ANY +--DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +--(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +--LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +--ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +--(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +--SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
\ No newline at end of file |