| -- Experimental helpers for skia -- |
| |
| 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 |
| |
| ------------------------------------------------------------------------------- |