function gui.enableAutoWindowScaling(b) _GuiPro.DPI_ENABLED=b or true _defaultfont=love.graphics.newFont(12*love.window.getPixelScale()) end function filter(name, x, y, w, h, sx ,sy ,sw ,sh) if type(name)~="string" then sh=sw sw=sy sy=sx sx=h h=w w=y y=x x=name end return x,y,w,h,sx,sy,sw,sh end function gui:newBase(tp,name, x, y, w, h, sx ,sy ,sw ,sh) _GuiPro.count=_GuiPro.count+1 local c = {} setmetatable(c, gui) if self==gui then c.Parent=_GuiPro else c.Parent=self end c.segments=nil c.ry=nil c.rx=nil c.DPI=1 if _GuiPro.DPI_ENABLED then c.DPI=love.window.getPixelScale() x, y, w, h=c.DPI*x,c.DPI*y,c.DPI*w,c.DPI*h end c.centerFontY=true c.FormFactor="rectangle" c.Type=tp c.Active=true c.form="rectangle" c.Draggable=false c.Name=name or "Gui"..tp c:SetName(name) c.BorderSize=1 c.BorderColor={0,0,0} c.VIS=true c.Visible=true c.oV=true c.Children={} c.hovering=false c.rclicked=false c.lclicked=false c.mclicked=false c.clicked=false c.Visibility=1 c.ClipDescendants=false c.TextWrap=true c.scale={} c.scale.size={} c.scale.size.x=sw or 0 c.scale.size.y=sh or 0 c.offset={} c.offset.size={} c.offset.size.x=w or 0 c.offset.size.y=h or 0 c.scale.pos={} c.scale.pos.x=sx or 0 c.scale.pos.y=sy or 0 c.offset.pos={} c.offset.pos.x=x or 0 c.offset.pos.y=y or 0 c.width = 0 c.height = 0 c.LRE=false c.RRE=false c.MRE=false c.Color = {255, 255, 255} function c:setRoundness(rx,ry,segments) self.segments=segments self.ry=ry self.rx=rx end function c.stfunc() love.graphics.rectangle("fill", c.x, c.y, c.width, c.height,c.rx,c.ry,c.segments) end function c:hasRoundness() return (self.ry or self.rx) end c.funcs={function(b,self) if b=="l" then self.LRE=true end end, function(b,self) if b=="r" then self.RRE=true end end, function(b,self) if b=="m" then self.MRE=true end end} c.funcs2={function(b,self) if b=="l" then self.LRE=false end end, function(b,self) if b=="r" then self.RRE=false end end, function(b,self) if b=="m" then self.MRE=false end end} c.HE=false c.funcs3={function(self) self.HE=true end} c.funcs4={function(self) self.HE=false end} c.funcs5={} c.tid={} c.touchcount=0 c.x=(c.Parent.width*c.scale.pos.x)+c.offset.pos.x+c.Parent.x c.y=(c.Parent.height*c.scale.pos.y)+c.offset.pos.y+c.Parent.y c.width=(c.Parent.width*c.scale.size.x)+c.offset.size.x c.height=(c.Parent.height*c.scale.size.y)+c.offset.size.y c.func6={} c.func7={function() _GuiPro.DragItem={} end} c.func8={function(self) _GuiPro.DragItem=self end} c.func9={} c.func10={} function c:ImageRule() if self.Image then local sx=self.width/self.ImageWidth local sy=self.height/self.ImageHeigth love.graphics.setColor(self.Color[1],self.Color[2],self.Color[3],self.ImageVisibility*255) if self.width~=self.ImageWidth and self.height~=self.ImageHeigth then love.graphics.draw(self.Image,self.x,self.y,math.rad(self.rotation),sx,sy) else love.graphics.draw(self.Image,self.Quad,self.x,self.y,math.rad(self.rotation),sx,sy) end end end function c:VideoRule() if self.Video then local sx=self.width/self.VideoWidth local sy=self.height/self.VideoHeigth love.graphics.setColor(self.Color[1],self.Color[2],self.Color[3],self.VideoVisibility*255) if self.width~=self.VideoWidth and self.height~=self.VideoHeigth then love.graphics.draw(self.Video,self.x,self.y,math.rad(self.rotation),sx,sy) else love.graphics.draw(self.Video,self.Quad,self.x,self.y,math.rad(self.rotation),sx,sy) end end end function c:repeatImage(b,b2) if b then self.Image:setWrap(b,b2 or "repeat") function self:ImageRule() love.graphics.setColor(self.Color[1],self.Color[2],self.Color[3],self.ImageVisibility*255) love.graphics.draw(self.Image,self.Quad,self.x,self.y,math.rad(self.rotation)) end else sx=self.width/self.ImageWidth sy=self.height/self.ImageHeigth love.graphics.setColor(self.Color[1],self.Color[2],self.Color[3],self.ImageVisibility*255) love.graphics.draw(self.Image,self.Quad,self.x,self.y,math.rad(self.rotation),sx,sy) end end function c:Mutate(t) for i,v in pairs(t) do _GuiPro.self=self if type(i)=="number" then loadstring("_GuiPro.self:"..v)() elseif i:match"__self__" then local ind=i:match"__self__(.+)" if not self[ind] then self[ind]={} end loadstring("_GuiPro.self."..ind.."=_GuiPro.self:"..v)() elseif i:match"__child__" then local ind,child = i:match"__child__(%S-)_(.+)" self[ind][child]=v else self[i]=v end end return self end c:WhileHovering(function(self) self.omx=self.nmx self.omy=self.nmy self.nmx=love.mouse.getX() self.nmy=love.mouse.getY() if self.omx~=self.nmx or self.omy~=self.nmy then for i=1,#self.func10 do if self and self.nmx and self.nmy and self.omx and self.omy then self.func10[i](self,self.nmx,self.nmy,self.omx,self.omy) end end end if self.WasBeingDragged==true and love.mouse.isDown(self.dragbut or "m")==false and self.Type~="TextImageButtonFrameDrag" then for i=1,#self.func7 do self.func7[i](self,(love.mouse.getX())-self.width/2,(love.mouse.getY())-self.height/2) end end if _GuiPro.hasDrag==false and love.mouse.isDown(self.dragbut or "m") then for i=1,#self.func8 do self.func8[i](self,(love.mouse.getX())-self.width/2,(love.mouse.getY())-self.height/2) end end if self.IsBeingDragged==true then _GuiPro.hasDrag=true self.WasBeingDragged=true elseif self.WasBeingDragged==true and self.IsBeingDragged==false then self.WasBeingDragged=false _GuiPro.hasDrag=false end if self.Draggable==true and love.mouse.isDown(self.dragbut or "m") and _GuiPro.hasDrag==false then for i=1,#self.func6 do self.func6[i](self,(love.mouse.getX())-self.width/2,(love.mouse.getY())-self.height/2) end _GuiPro.hasDrag=true if self.FormFactor:lower()=="circle" or self.FormFactor:lower()=="c" or self.FormFactor:lower()=="cir" then self.IsBeingDragged=true x=(love.mouse.getX()-self.x) y=(love.mouse.getY()-self.y) self:Move(x,y) elseif self.FormFactor:lower()=="rectangle" or self.FormFactor:lower()=="r" or self.FormFactor:lower()=="rect" then self.IsBeingDragged=true x=(love.mouse.getX()-self.x)-self.width/2 y=(love.mouse.getY()-self.y)-self.height/2 self:Move(x,y) end else self.IsBeingDragged=false end end) table.insert(c.Parent.Children,c) return c end