diff --git a/GuiManager/Core/canPress.int b/GuiManager/Core/canPress.int index 0e33f11..05db3f9 100644 --- a/GuiManager/Core/canPress.int +++ b/GuiManager/Core/canPress.int @@ -59,9 +59,9 @@ end function gui:canPress() local ref = self if self.ClipReference then ref = self.ClipReference end - if self.Visible==true and self:parentVisible() and not(self:isBeingCovering()) then + if self:isVisible() and not(self:isBeingCovering()) then local x,y = love.mouse.getX(),love.mouse.getY() - if (x > ref.x and x < ref.x+ref.width and y > ref.y and y < ref.y+ref.height) and (x > self.x and x < self.x+self.width and y > self.y and y < self.y+self.height and self:Clickable() and (self:eventable() or self:touchable())) then + if (x > ref.x and x < ref.x+ref.width and y > ref.y and y < ref.y+ref.height) and (self:eventable() or self:touchable()) then return true else return false diff --git a/GuiManager/Image-Animation/SetImage.int b/GuiManager/Image-Animation/SetImage.int index cf6b37e..6525bc2 100644 --- a/GuiManager/Image-Animation/SetImage.int +++ b/GuiManager/Image-Animation/SetImage.int @@ -34,6 +34,11 @@ end) local cache = {} function gui:SetImage(i,inthread,backup) if not i then return end + if self.scale.size.x~=0 or self.scale.size.y~=0 then + gui.OnScreenSizeChanged(function() + multi:newAlarm(.01):OnRing(function() self.Quad=love.graphics.newQuad(0,0,self.width,self.height,self.ImageWidth,self.ImageHeigth) end) + end) + end if type(i) == "userdata" and i:type() == "Image" then self.Image=i self.ImageHeigth=self.Image:getHeight() @@ -51,7 +56,6 @@ function gui:SetImage(i,inthread,backup) end DownloadImage(i,hash).connect(function(img) if img == "noimage" then - print("Need backup") if backup then return self:SetImage(backup) else diff --git a/GuiManager/Misc/isVisible.int b/GuiManager/Misc/isVisible.int new file mode 100644 index 0000000..f816121 --- /dev/null +++ b/GuiManager/Misc/isVisible.int @@ -0,0 +1,11 @@ +function gui:isVisible() + if self.Visible == false then return false end + local parent = self.Parent + while parent~=_GuiPro do + if parent.Visible == false then + return false + end + parent = parent.Parent + end + return true +end \ No newline at end of file diff --git a/GuiManager/Misc/newScrollMenu.int b/GuiManager/Misc/newScrollMenu.int index f7ee5ac..ecf0996 100644 --- a/GuiManager/Misc/newScrollMenu.int +++ b/GuiManager/Misc/newScrollMenu.int @@ -60,6 +60,13 @@ function gui:newScrollMenu(name) self.ref = ref end temp.max = 40 + function temp:reset() + temp.max = 40 + for i,v in pairs(temp.list) do + v:Destroy() + end + temp.list = {} + end function temp:addItem(text, height, padding, obj) local padding = padding or 10 local height = height or 30 diff --git a/GuiManager/init.lua b/GuiManager/init.lua index f8da029..43fd29a 100644 --- a/GuiManager/init.lua +++ b/GuiManager/init.lua @@ -67,10 +67,16 @@ gui.LoadAll("GuiManager/Drawing") -- End of Load gui:respectHierarchy() _GuiPro.width,_GuiPro.height=love.graphics.getDimensions() +gui.OnScreenSizeChanged = multi:newConnection() multi:newThread("GuiManager",function() + local x,y while true do + x,y = love.graphics.getDimensions() thread.sleep(.01) _GuiPro.width,_GuiPro.height=love.graphics.getDimensions() + if x~=_GuiPro.width or y~=_GuiPro.height then + gui.OnScreenSizeChanged:Fire(x,y,_GuiPro.width,_GuiPro.height) + end end end) multi:onDraw(function() diff --git a/app.lua b/app.lua index 1c43253..3ee80a9 100644 --- a/app.lua +++ b/app.lua @@ -16,8 +16,16 @@ local spd = 7 -- keep at top local head function app.createPage(name,path) - local page = require("pages/"..path).init(app.workspace:newFullFrame(name),app.workspace) - page.Color = theme.menu + local page = app.workspace:newFullFrame(name) + local bg = page:newImageLabel("images/bg.jpg",0,0,0,0,0,0,1,1) + multi:newThread(function() + thread.hold(function() + return bg.Image + end) + bg:repeatImage("repeat","repeat") + end) + bg.Color = theme.menu + require("pages/"..path).init(page,app.workspace) table.insert(app.pages,page) page.Visible = false function page:Goto() @@ -28,27 +36,25 @@ function app.createPage(name,path) end local button if head == app.header then - button = head:newTextButton(name,name,5,0,100,60) + button = head:newTextLabel(name,name,5,0,100,60) else - button = head:newTextButton(name,name,5,0,100,60,1) + button = head:newTextLabel(name,name,5,0,100,60,1) end button:centerY() head = button button:fitFont() button.Color = theme.menuitem button:OnReleased(function() - page:Goto() end) - print("done") - return page + return page, button end local function init(a) love.filesystem.setIdentity("MangaPro") + app.workspace = a:newFrame(0,headersize,0,-headersize,0,0,1,1) app.header = a:newFrame(0,0,0,headersize,0,0,1) head = app.header app.header.Color = theme.header - app.workspace = a:newFrame(0,headersize,0,-headersize,0,0,1,1) app.menu = a:newFrame(0,headersize,menusize,-headersize,0,0,0,1) app.menu.Color = theme.menu app.menu:OnReleasedOuter(function(b,self) @@ -59,8 +65,9 @@ local function init(a) app.workspace.Color = Color.Black app.menu.Visible = false local search = app.createPage("Search","search") - app.createPage("Favorites","favs") - --search:Goto() + local favs = app.createPage("Favorites","favs") + search:Goto() + --app.createPage("Favorites","favs") end return { init = init diff --git a/images/bg.jpg b/images/bg.jpg new file mode 100644 index 0000000..32445ad Binary files /dev/null and b/images/bg.jpg differ diff --git a/images/star.png b/images/star.png new file mode 100644 index 0000000..775526d Binary files /dev/null and b/images/star.png differ diff --git a/images/unstar.png b/images/unstar.png new file mode 100644 index 0000000..7f308a7 Binary files /dev/null and b/images/unstar.png differ diff --git a/manga/init.lua b/manga/init.lua index bd16567..d229e8c 100644 --- a/manga/init.lua +++ b/manga/init.lua @@ -35,6 +35,7 @@ m.getManga = queue:newFunction("queue",function(title) local http = require("socket.http") local manga = http.request(title.Link) local tab = {} + tab.Link = title.Link tab.Cover = manga:match([[
%s*([^<]*)]]) tab.AltTitle = manga:match([[Alternate Name:.-([^<]*)]]) diff --git a/multi/integration/loveManager/extensions.lua b/multi/integration/loveManager/extensions.lua index 9c53733..db99a10 100644 --- a/multi/integration/loveManager/extensions.lua +++ b/multi/integration/loveManager/extensions.lua @@ -135,14 +135,13 @@ function multi:newSystemThreadedJobQueue(n) end end end) - print("Cores: ",c.cores) for i=1,c.cores do multi:newSystemThread("JobQueue_"..jqc.."_worker_"..i,function(jqc) local multi, thread = require("multi"):init() + require("love.timer") local function atomic(channel) return channel:pop() end - require("love.timer") local clock = os.clock local funcs = THREAD.createStaticTable("__JobQueue_"..jqc.."_table") local queue = love.thread.getChannel("__JobQueue_"..jqc.."_queue") diff --git a/pages/search.lua b/pages/search.lua index 7a2a985..5dddfbe 100644 --- a/pages/search.lua +++ b/pages/search.lua @@ -50,23 +50,140 @@ local chars = {"#"} for i=65,90 do table.insert(chars,string.char(i)) end +local onNav = false +function saveFavs(favs) + local f = bin.new() + f:addBlock(favs or {}) + f:tofile("favs.dat") +end +function getFavs() + if bin.fileExists("favs.dat") then + return bin.load("favs.dat"):getBlock("t") + else + return {} + end +end local function init(page,workspace) + local favs = getFavs() local holder = page:newFrame("",15,80,-30,-95,0,0,1,1) + local nav = page:newFrame(10,10,-20,40,0,0,1) + local SBL = page:newFrame(0,55,0,40,0,0,1) + local mangaViewer = page:newFrame(0,0,0,0,.1,.1,.8,.8) + mangaViewer.Visible = false + local cover = mangaViewer:newImageLabel(nil,10,10,mangaSize.x,mangaSize.y) + local desc = mangaViewer:newTextLabel("","",15+mangaSize.x,10,-25-mangaSize.x,-13,0,0,1,.5) + local chaps = mangaViewer:newTextLabel("","",15+mangaSize.x,3,-25-mangaSize.x,-13,0,.5,1,.5) + local dets = mangaViewer:newTextLabel("","",10,15+mangaSize.y,mangaSize.x,-25-mangaSize.y,0,0,0,1) + local menu = chaps:newScrollMenu("Chapters") + local goback = mangaViewer:newTextLabel("Back","Back",0,5,80,40,0,1) + goback:fitFont() + goback:OnUpdate(function() + goback:centerX() + end) + goback:OnReleased(function() + multi:newThread(function() + thread.sleep(.1) + mangaViewer.Visible = false + end) + end) + goback.Color = theme.button + function setViewer(manga) + menu:reset() + mangaViewer.Visible = true + + mangaViewer:setRoundness(10,10,60) + mangaViewer.BorderSize = 2 + mangaViewer.Color = theme.menu + + cover:SetImage(manga.Cover,nil,"images/notfound.png") + + desc.text = manga.Desc + desc.TextFormat = "left" + desc.XTween = 2 + + dets.text = "Title: " .. manga.Title .. "\n" .. + "Author: " .. manga.Author .. "\n" .. + "Artist: " .. manga.Artist .. "\n" .. + "ReadingDir: " .. manga.ReadingDir .. "\n" .. + "Chapters: " .. #manga.Chapters .. "\n" .. + "Status: " .. manga.Status + dets.XTween = 2 + dets.TextFormat = "left" + + gui.massMutate({ + Visibility = 0, + BorderSize = 0, + },desc,chaps,dets) + + menu.BorderSize = 0 + menu.scrollM = 4 + menu.scroll.Color = theme.header + menu.scroll.Mover.Color = theme.menuitem + menu.first:SetDualDim(nil,13) + menu:SetDualDim(nil,0) + menu.header.Color = theme.header + menu.ref = { + [[setRoundness(5,5,30)]], + Color = theme.menuitem + } + for i,v in ipairs(manga.Chapters) do + menu:addItem(v.Lead, 20, 3) + end + end function addManga(manga,v) - local temp = holder:newImageButton(nil,0,0,mangaSize.x,mangaSize.y) + local temp = holder:newImageLabel(nil,0,0,mangaSize.x,mangaSize.y) + temp.Visible = false local text = temp:newTextLabel(v.Title,v.Title,0,-30,0,30,0,1,1) + local onStar = false + local fav = false + local star + if favs[v.Title] then + star = temp:newImageLabel("images/star.png",-40,0,40,40,1) + else + star = temp:newImageLabel("images/unstar.png",-40,0,40,40,1) + end + star:OnMouseEnter(function() + onStar = true + end) + star:OnMouseMoved(function() + onStar = true + end) + star:OnReleasedOuter(function() + onStar = false + end) + star:OnReleased(function() + fav = not fav + if fav then + star:SetImage("images/star.png") + favs[v.Title] = v + saveFavs(favs) + else + star:SetImage("images/unstar.png") + favs[v.Title] = nil + saveFavs(favs) + end + end) + star.BorderSize = 0 text.Visibility = .6 text.Color = Color.Black text.TextColor = Color.White text.TextFormat = "center" text:fitFont() temp.BorderSize = 2 - temp:SetImage(manga.Cover,nil,"Images/notfound.png") + temp:SetImage(manga.Cover,nil,"images/notfound.png") + multi:newThread(function() + thread.hold(function() + return temp.Image + end) + temp.Visible = true + end) temp:OnReleased(function(b,self) - print("Manga",v.Title) + if onNav or onStar or mangaViewer:isVisible() then return end + setViewer(manga) end) end page:OnMouseWheelMoved(function(self,x,y) + if mangaViewer:isVisible() then return end holder:Move(0,y*60) if holder.offset.pos.y>85 then holder:SetDualDim(nil,85) @@ -74,7 +191,6 @@ local function init(page,workspace) end) holder.Visibility = 0 holder.BorderSize = 0 - page.ClipDescendants = true holder:OnUpdate(function() local c = holder:getChildren() for i=1,#c do @@ -84,16 +200,33 @@ local function init(page,workspace) local size = math.floor(holder.width/(mangaSize.x+5))*(mangaSize.x+5) holder:SetDualDim((page.width-size)/2) end) - local nav = page:newFrame(10,10,-20,40,0,0,1) - local SBL = page:newFrame(0,55,0,40,0,0,1) SBL.BorderSize = 0 + local FAV = SBL:newTextLabel("*","*",0,0,0,0,0/28,0,1/28,1) + FAV.Color = theme.button + FAV:OnReleased(thread:newFunction(function() + if mangaViewer:isVisible() then return end + holder:SetDualDim(nil,85) + local c = holder:getChildren() + for i=#c,1,-1 do + c[i]:Destroy() + end + for i,v in pairs(favs) do + thread.yield() + print(v.Title,v.Link) + mangaReader.getManga(v).connect(function(manga) + print(manga.Title) + addManga(manga,{Title=manga.Title,Link=manga.Link}) + end) + end + end)) for i,v in pairs(chars) do - local temp = SBL:newTextLabel(v,v,0,0,0,0,(i-1)/27,0,1/27,1) + local temp = SBL:newTextLabel(v,v,0,0,0,0,(i)/28,0,1/28,1) temp.Color = theme.button multi.setTimeout(function() temp:fitFont() end,.1) temp:OnReleased(thread:newFunction(function() + if mangaViewer:isVisible() then return end holder:SetDualDim(nil,85) thread.hold(function() return titles end) local list = searchBy(temp.text) @@ -103,34 +236,41 @@ local function init(page,workspace) end for i,v in pairs(list) do thread.yield() + print(v) mangaReader.getManga(v).connect(function(manga) - addManga(manga,v) + addManga(manga,{Title=manga.Title,Link=manga.Link}) end) end end)) end - --[[ - local temp = holder:newImageLabel("images/test.jpg",0,0,mangaSize.x,mangaSize.y) - temp.BorderSize = 2 - ]] + nav:OnMouseEnter(function() + onNav = true + end) + local function exiter() + onNav = false + end + nav:OnMouseExit(exiter) + nav:OnReleasedOuter(exiter) nav.Color = theme.header nav:setRoundness(5,5,60) - local search = nav:newTextButton("Search","Search",5,5,60,-10,0,0,0,1) + local search = nav:newTextLabel("Search","Search",5,5,60,-10,0,0,0,1) search.Color = theme.button search:fitFont() local bar = nav:newTextBox("","",70,5,-75,-10,0,0,1,1) search:OnReleased(thread:newFunction(function() + if mangaViewer:isVisible() then return end + local c = holder:getChildren() + for i=#c,1,-1 do + c[i]:Destroy() + end holder:SetDualDim(nil,85) thread.hold(function() return titles end) local list = searchFor(bar.text) for i,v in pairs(list) do mangaReader.getManga(v).connect(function(manga) - addManga(manga,v) + addManga(manga,{Title=manga.Title,Link=manga.Link}) end) - -- local manga = mangaReader.getManga(title) - -- local page = mangaReader.getPages(manga,1) end - print(page) end)) bar:fitFont() bar.Color = theme.input