-- Experimental helpers for skia -- function string.startsWith(String,Start) return string.sub(String,1,string.len(Start))==Start end function string.endsWith(String,End) return End=='' or string.sub(String,-string.len(End))==End end Sk = {} function Sk.isFinite(x) return x * 0 == 0 end ------------------------------------------------------------------------------- Sk.Rect = { left = 0, top = 0, right = 0, bottom = 0 } Sk.Rect.__index = Sk.Rect function Sk.Rect.new(l, t, r, b) local rect if r then -- 4 arguments rect = { left = l, top = t, right = r, bottom = b } elseif l then -- 2 arguments rect = { right = l, bottom = t } else -- 0 arguments rect = {} end setmetatable(rect, Sk.Rect) return rect; end function Sk.Rect:width() return self.right - self.left end function Sk.Rect:height() return self.bottom - self.top end function Sk.Rect:isEmpty() return self:width() <= 0 or self:height() <= 0 end function Sk.Rect:isFinite() local value = self.left * 0 value = value * self.top value = value * self.right value = value * self.bottom return 0 == value end function Sk.Rect:setEmpty() self.left = 0 self.top = 0 self.right = 0 self.bottom = 0 end function Sk.Rect:set(l, t, r, b) self.left = l self.top = t self.right = r self.bottom = b end function Sk.Rect:offset(dx, dy) dy = dy or dx self.left = self.left + dx self.top = self.top + dy self.right = self.right + dx self.bottom = self.bottom + dy end function Sk.Rect:inset(dx, dy) dy = dy or dx self.left = self.left + dx self.top = self.top + dy self.right = self.right - dx self.bottom = self.bottom - dy end -------------------------------------------------------------------------------