diff --git a/gui b/gui index 79ad2b8..c4cf5cb 160000 --- a/gui +++ b/gui @@ -1 +1 @@ -Subproject commit 79ad2b839b4e7138ea4babedbe4acf35e735991b +Subproject commit c4cf5cbc9e5a570fc3611c795c169e4e2d02db1a diff --git a/menus/board.lua b/menus/board.lua index 7fee5f5..a604528 100644 --- a/menus/board.lua +++ b/menus/board.lua @@ -19,30 +19,10 @@ local playerList = {} local playerStaticList = {} local scoreboard = {} --- Create a table to manage GUI elements -local manage = {} - local boardLog = log:child("board") -- Function to resize fonts for all managed elements boardLog:debug("Creating resize fonts handler") -local function resizeFonts() - -- Use multi-threading to improve performance - thread.skip(2) - -- Iterate over each element in the 'manage' table - for i = 1, #manage do - local elem = manage[i] - - -- Check if the current element has a centerFont property - if elem.centerFont then - -- Adjust font size and re-center the text - elem:fitFont(nil, nil, {scale = 2/3}) - elem:centerFont() - end - end -end - -gui.Events.OnResized(resizeFonts) local completed_questions = 0 local min_questions = 0 @@ -236,12 +216,8 @@ function Menu(frame, path) label.color = color.bg label.textColor = color.status_font label:setRoundness(20,20,60) - local updateLabel = function() - label:fitFont(nil, nil, {scale = 2/3}) - label:centerFont() - end - boardUpdater:newThread(updateLabel) - gui.Events.OnResized(updateLabel) + label:scaleFont(2/3) + label:centerFont() local data = loader:new(path) board, question, dailydouble = qframe:newFrame(), qframe:newFrame(), qframe:newImageLabel("assets/images/double.jpg") @@ -315,7 +291,8 @@ function Menu(frame, path) img:fullFrame() end - table.insert(manage,c) + c:scaleFont(.25) + c:centerFont() for tier = 1,tiers do local t = board:newTextButton("$" .. start + inc*(tier-1),0,0,0,0,(1/#index.categories)*(cat-1),1/(tiers+1)*tier,(1/#index.categories),1/(tiers+1)) @@ -407,13 +384,10 @@ function Menu(frame, path) end) end) end)) - table.insert(manage,t) + t:centerFont() + t:scaleFont(.5) end end - - resizeFonts() - resizeFonts() - return background end @@ -514,30 +488,16 @@ function ScoreBoard(frame, x, y, w, h, sx, sy, sw, sh) textColor = C_TEXT_MUTED, }, headernum, headerplayer, headerscore) - local updateList = {header, headernum, headerplayer, headerscore} - - local function ScoreResize() - scoreUpdater:newThread(function() - thread.skip(2) - - for _,object in pairs(updateList) do - object:fitFont(nil, nil, {scale = 5/6}) - object:centerFont() - end - - for _,object in pairs(playerList) do - if type(object) == "table" and object.Ref then - for i, player in pairs(object.Ref) do - if player:hasType(gui.TYPE_TEXT) then - player:fitFont(nil, nil, {scale = 5/6}) - player:centerFont() - end - end - end - end - end) - end + local updateList = {headernum, headerplayer, headerscore} + header:centerFont() + header:scaleFont(2/3) + + for _,object in pairs(updateList) do + object:fitFont(nil, nil, {scale = 5/6}) + object:centerFont() + end + function scoreboard:AddPlayer(name, score, icon) local player = { Name = name, @@ -553,13 +513,11 @@ function ScoreBoard(frame, x, y, w, h, sx, sy, sw, sh) return tonumber(a.Score) > tonumber(b.Score) end) scoreboard:RenderPlayer(playerList) - ScoreResize() end, } table.insert(playerList, player) table.insert(playerStaticList, player) scoreboard:RenderPlayer(playerList) - ScoreResize() return player end @@ -578,13 +536,7 @@ function ScoreBoard(frame, x, y, w, h, sx, sy, sw, sh) remove_player:setFont(20) remove_player.align = gui.ALIGN_CENTER local embededWatch = {remove_player} - - gui.Events.OnMousePressed(boardUpdater:newFunction(function() - for i,v in pairs(embededWatch) do - v:centerFont() - v:centerFont() - end - end)) + remove_player:centerFont() local function embedTextEdit(reference, default, but_text, callback) reference.color = C_BORDER_NRM @@ -604,10 +556,9 @@ function ScoreBoard(frame, x, y, w, h, sx, sy, sw, sh) end) gui.apply({ setFont = {20}, - align = gui.ALIGN_CENTER + align = gui.ALIGN_CENTER, + centerFont = {}, },textbox,button,reference) - table.insert(embededWatch,textbox) - table.insert(embededWatch,button) end remove_player.color = color.new("#a13a3a") @@ -709,7 +660,9 @@ function ScoreBoard(frame, x, y, w, h, sx, sy, sw, sh) gui.apply({ visibility = 0, drawBorder = false, - textColor = MapColor(index) + textColor = MapColor(index), + scaleFont = {5/6}, + centerFont = {} },playernum, playerName, playerScore, playerIcon, playerLine) player.Ref = {playerName, playerScore, playernum, playerIcon, playerLine, Frame = playerFrame} @@ -717,8 +670,6 @@ function ScoreBoard(frame, x, y, w, h, sx, sy, sw, sh) end end - gui.Events.OnResized(ScoreResize) - ScoreResize() return scoreboard end diff --git a/menus/title.lua b/menus/title.lua index 388ebe4..63b11b4 100644 --- a/menus/title.lua +++ b/menus/title.lua @@ -25,17 +25,9 @@ function Menu(frame) title.visibility = 0 title.textColor = color.title_font title.drawBorder = false + title:centerFont() titleLog:debug("Creating font thread") - proc:newThread(function() - local function enabled() - return background.visible - end - while true do - thread.hold(enabled) - title:centerFont() - end - end) local items = 0 local MenuOption = function(str) @@ -43,13 +35,10 @@ function Menu(frame) local text = item:newTextLabel(str) text:fullFrame() text.align = gui.ALIGN_CENTER - thread:newThread(function() - thread.skip(2) - text:fitFont(nil,nil,{scale = 1/2}) - text:centerFont() - text.visibility = 0 - text.textColor = color.new("#24269a") - end) + text:scaleFont(.4) + text:centerFont() + text.visibility = 0 + text.textColor = color.new("#24269a") items = items + 1 return item, text end diff --git a/templates/imageword.lua b/templates/imageword.lua index 04f0916..d12be36 100644 --- a/templates/imageword.lua +++ b/templates/imageword.lua @@ -11,6 +11,7 @@ local function index(window, q, callback) label.textColor = color.white label.color = color.new("#363ac8") label.borderColor = color.new("#363ac8") + label:scaleFont(.075) if not q.imageA or q.imageA == "" then error("Missing 'imageA' field for question!") @@ -49,7 +50,8 @@ local function index(window, q, callback) }, imageHolder, plusLabel, imageHolder2) window.apply({ - fitFont={}, + scaleFont={.7}, + centerFont={}, align=window.ALIGN_CENTER, OnReleased=function(self) if self.text == "Skip" then @@ -62,7 +64,7 @@ local function index(window, q, callback) end local function update(dt) - label:fitFont() + end return { diff --git a/templates/multiplechoice.lua b/templates/multiplechoice.lua index f7ab96d..2742dee 100644 --- a/templates/multiplechoice.lua +++ b/templates/multiplechoice.lua @@ -23,7 +23,10 @@ local function index(window, q, callback) label.textColor = color.white label.color = color.new("#363ac8") label:setFont(50) - choices = window:newFrame(noOf(0,.3,1,.7)) + label:centerFont() + label:scaleFont(2/3) + + local choices = window:newFrame(noOf(0,.3,1,.7)) choices.color = color.new("#363ac8") function choices:newChoice(choice, i) @@ -52,9 +55,8 @@ local function index(window, q, callback) choiceText.textColor = color.white -- choiceText.align = window.ALIGN_CENTER choiceText:setFont(40) - table.insert(choiceList,choiceText) + choiceText:centerFont() table.insert(allBoxes,box) - end for i,choice in pairs(q.choices) do @@ -84,16 +86,7 @@ local function index(window, q, callback) end local function update(dt) -- time in seconds that has passed since - -- label:fitFont() - label:centerFont() - for _, obj in pairs(choiceList) do - obj:centerFont() - -- obj:fitFont(nil, nil, {scale = 2/3}) - end - confirm:fitFont(nil, nil, {scale = 2/3}) - confirm:centerFont() - -- print(box.parent:getAbsolutes()) - -- print(box:getAbsolutes()) + end return { diff --git a/templates/one-image.lua b/templates/one-image.lua index 015fa8a..2acbfd7 100644 --- a/templates/one-image.lua +++ b/templates/one-image.lua @@ -16,6 +16,8 @@ local function index(window, q, callback) label.align = ALIGN_CENTER label.textColor = color.white label.color = color.new("#363ac8") + label:scaleFont(.5) + label:centerFont() if not q.image or q.image == "" then error("Missing 'image' field for question!") end @@ -31,7 +33,8 @@ local function index(window, q, callback) local skip = window:newTextButton("Skip",0,-100,0,100,.25,1,.5) skip.color = color.new("#5d5d5d") window.apply({ - fitFont={}, + scaleFont={.7}, + centerFont={}, align=window.ALIGN_CENTER, OnReleased=function(self) if self.text == "Skip" then @@ -47,7 +50,6 @@ local function update(dt) -- time in seconds that has passed since _,_,w,h = imageHolder.parent:getAbsolutes() local x,y,w,h = imageHolder:GetSizeAdjustedToAspectRatio(w,h) imageHolder:setDualDim(w,h,x,y) - label:fitFont() end return { diff --git a/templates/whatis.lua b/templates/whatis.lua index 6a5458d..f0e0cc3 100644 --- a/templates/whatis.lua +++ b/templates/whatis.lua @@ -14,6 +14,8 @@ local function index(window, q, callback) label:fullFrame() label.textColor = color.white label.color = color.new("#363ac8") + label:centerFont() + label:scaleFont(.075) local correct = window:newTextButton("Correct",0,-200,0,100,0,1,.5) correct.color = color.new("#52b11b") local wrong = window:newTextButton("Wrong",0,-200,0,100,.5,1,.5) @@ -21,7 +23,8 @@ local function index(window, q, callback) local skip = window:newTextButton("Skip",0,-100,0,100,.25,1,.5) skip.color = color.new("#5d5d5d") gui.apply({ - fitFont={}, + scaleFont={.7}, + centerFont={}, align=gui.ALIGN_CENTER, OnReleased=function(self) if self.text == "Skip" then @@ -31,8 +34,6 @@ local function index(window, q, callback) callback(self.text == "Correct") end, },correct,wrong,skip) - label:setFont(60) - -- label:centerFont() end local function update(dt) -- time in seconds that has passed since diff --git a/templates/whatvideo.lua b/templates/whatvideo.lua index 89e1f90..433ca73 100644 --- a/templates/whatvideo.lua +++ b/templates/whatvideo.lua @@ -21,6 +21,8 @@ local function index(window, q, callback) label.align = ALIGN_CENTER label.textColor = color.white label.color = color.new("#363ac8") + label:centerFont() + label:scaleFont(.5) local holder = frame:newFrame(-300, -200, 600, 400, .5, .5) holder:centerX(true) holder:centerY(true) @@ -38,7 +40,8 @@ local function index(window, q, callback) local skip = window:newTextButton("Skip",0,-100,0,100,.25,1,.5) skip.color = color.new("#5d5d5d") window.apply({ - fitFont={}, + scaleFont={.7}, + centerFont={}, align=window.ALIGN_CENTER, OnReleased=function(self) video:stop() @@ -52,8 +55,7 @@ local function index(window, q, callback) end local function update(dt) -- time in seconds that has passed since - label:fitFont() - label:centerFont() + end return { diff --git a/templates/zoom.lua b/templates/zoom.lua new file mode 100644 index 0000000..a206e9a --- /dev/null +++ b/templates/zoom.lua @@ -0,0 +1,98 @@ +--[[ Constants + * (all lua builtins that don't allow io/executing code) + color (interface) + gui (interface) + multi (interface bound to a processor) no thread module + + callback true/false correct/wrong +]] +local label +local imageHolder + +local function index(window, q, callback) + frame = window:newFrame(0,0,0,-200,0,.2,1,.8) + frame.visibility = 0 + label = window:newTextLabel(" " ..q.title.. " ",0,0,0,0,0,0,1,.2) + label.align = ALIGN_CENTER + label.textColor = color.white + label.color = color.new("#363ac8") + label:scaleFont(.5) + label:centerFont() + local errors = {} + + if type(q.zoom) ~= "string" and q.zoom ~= "" then + table.insert(errors, "Missing 'zoom' fiels for queston! Should be a path to an image.") + end + + if type(q.minzoom) ~= "string" and q.minzoom ~= "" then + table.insert(errors, "Missing 'minzoom' field for question! Should be a path to an image.") + end + + if type(q.fullimage) ~= "string" and q.fullimage ~= "" then + table.insert(errors, "Missing 'fullimage' field for question! Should be a path to an image.") + end + + local zooms = {q.zoom, q.minzoom, q.fullimage} + print(q.fullimage) + local index = 1 + local mul = 1 + + imageHolder = frame:newImageLabel(q.zoom) + imageHolder:setAspectSize(imageHolder.imageWidth,imageHolder.imageHeight) + imageHolder:centerX(true) + imageHolder:centerY(true) + imageHolder:setDualDim(0,0,imageHolder.imageWidth,imageHolder.imageHeight) + + imageHolder:OnEnter(function(self) + self:setShader(gui.SHADERS.glow) + end) + + imageHolder:OnExit(function(self) + self:setShader() + end) + + imageHolder:shaderTime(true) + + imageHolder:OnReleased(function() + index = index + 1 + print(index) + if index == 2 then + mul = .5 + elseif index == 3 then + mul = .25 + else + index = 3 + end + imageHolder:setImage(zooms[index]) + end) + + local correct = window:newTextButton("Correct",0,-200,0,100,0,1,.5) + correct.color = color.new("#52b11b") + local wrong = window:newTextButton("Wrong",0,-200,0,100,.5,1,.5) + wrong.color = color.new("#bd2626") + local skip = window:newTextButton("Skip",0,-100,0,100,.25,1,.5) + skip.color = color.new("#5d5d5d") + window.apply({ + scaleFont={.7}, + centerFont={}, + align=window.ALIGN_CENTER, + OnReleased=function(self) + if self.text == "Skip" then + callback() + return + end + callback(self.text == "Correct", mul) + end, + },correct,wrong,skip) +end + +local function update(dt) -- time in seconds that has passed since + _,_,w,h = imageHolder.parent:getAbsolutes() + local x,y,w,h = imageHolder:GetSizeAdjustedToAspectRatio(w,h) + imageHolder:setDualDim(w,h,x,y) +end + +return { + index = index, + update = update +} diff --git a/utils/utils.lua b/utils/utils.lua index 5699b0e..490e30e 100644 --- a/utils/utils.lua +++ b/utils/utils.lua @@ -37,6 +37,8 @@ local function startTimer(opt) tlabel.align = gui.ALIGN_CENTER tlabel:fullFrame() tlabel.visibility = 0 + tlabel:centerFont() + tlabel:scaleFont(.5) tpie.color = opt.startColor tpie.visibility = opt.visibility @@ -82,8 +84,6 @@ local function startTimer(opt) if opt.autoText then tlabel.text = num - tlabel:fitFont(nil, nil, {scale=1/2}) - tlabel:centerFont() end if opt.finegrained then diff --git a/version.txt b/version.txt index e6d5cb8..e4c0d46 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -1.0.2 \ No newline at end of file +1.0.3 \ No newline at end of file