174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com-- Experimental helpers for skia --
274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com
32815c19c4d52f0fb522e21d1938d63e01c039124humper@google.comfunction string.startsWith(String,Start)
42815c19c4d52f0fb522e21d1938d63e01c039124humper@google.com   return string.sub(String,1,string.len(Start))==Start
52815c19c4d52f0fb522e21d1938d63e01c039124humper@google.comend
62815c19c4d52f0fb522e21d1938d63e01c039124humper@google.com
72815c19c4d52f0fb522e21d1938d63e01c039124humper@google.comfunction string.endsWith(String,End)
82815c19c4d52f0fb522e21d1938d63e01c039124humper@google.com   return End=='' or string.sub(String,-string.len(End))==End
92815c19c4d52f0fb522e21d1938d63e01c039124humper@google.comend
102815c19c4d52f0fb522e21d1938d63e01c039124humper@google.com
112815c19c4d52f0fb522e21d1938d63e01c039124humper@google.com
120e59b796e596cd51af4ded378f2881459fd288e4mike@reedtribe.orgSk = {}
130e59b796e596cd51af4ded378f2881459fd288e4mike@reedtribe.org
140e59b796e596cd51af4ded378f2881459fd288e4mike@reedtribe.orgfunction Sk.isFinite(x)
150e59b796e596cd51af4ded378f2881459fd288e4mike@reedtribe.org    return x * 0 == 0
160e59b796e596cd51af4ded378f2881459fd288e4mike@reedtribe.orgend
170e59b796e596cd51af4ded378f2881459fd288e4mike@reedtribe.org
180e59b796e596cd51af4ded378f2881459fd288e4mike@reedtribe.org-------------------------------------------------------------------------------
190e59b796e596cd51af4ded378f2881459fd288e4mike@reedtribe.org
200e59b796e596cd51af4ded378f2881459fd288e4mike@reedtribe.orgSk.Rect = { left = 0, top = 0, right = 0, bottom = 0 }
210e59b796e596cd51af4ded378f2881459fd288e4mike@reedtribe.orgSk.Rect.__index = Sk.Rect
220e59b796e596cd51af4ded378f2881459fd288e4mike@reedtribe.org
230e59b796e596cd51af4ded378f2881459fd288e4mike@reedtribe.orgfunction Sk.Rect.new(l, t, r, b)
240e59b796e596cd51af4ded378f2881459fd288e4mike@reedtribe.org    local rect
250e59b796e596cd51af4ded378f2881459fd288e4mike@reedtribe.org    if r then
260e59b796e596cd51af4ded378f2881459fd288e4mike@reedtribe.org        -- 4 arguments
270e59b796e596cd51af4ded378f2881459fd288e4mike@reedtribe.org        rect = { left = l, top = t, right = r, bottom = b }
280e59b796e596cd51af4ded378f2881459fd288e4mike@reedtribe.org    elseif l then
290e59b796e596cd51af4ded378f2881459fd288e4mike@reedtribe.org        -- 2 arguments
300e59b796e596cd51af4ded378f2881459fd288e4mike@reedtribe.org        rect = { right = l, bottom = t }
310e59b796e596cd51af4ded378f2881459fd288e4mike@reedtribe.org    else
320e59b796e596cd51af4ded378f2881459fd288e4mike@reedtribe.org        -- 0 arguments
330e59b796e596cd51af4ded378f2881459fd288e4mike@reedtribe.org        rect = {}
340e59b796e596cd51af4ded378f2881459fd288e4mike@reedtribe.org    end
350e59b796e596cd51af4ded378f2881459fd288e4mike@reedtribe.org    setmetatable(rect, Sk.Rect)
360e59b796e596cd51af4ded378f2881459fd288e4mike@reedtribe.org    return rect;
370e59b796e596cd51af4ded378f2881459fd288e4mike@reedtribe.orgend
380e59b796e596cd51af4ded378f2881459fd288e4mike@reedtribe.org
390e59b796e596cd51af4ded378f2881459fd288e4mike@reedtribe.orgfunction Sk.Rect:width()
400e59b796e596cd51af4ded378f2881459fd288e4mike@reedtribe.org    return self.right - self.left
410e59b796e596cd51af4ded378f2881459fd288e4mike@reedtribe.orgend
420e59b796e596cd51af4ded378f2881459fd288e4mike@reedtribe.org
430e59b796e596cd51af4ded378f2881459fd288e4mike@reedtribe.orgfunction Sk.Rect:height()
440e59b796e596cd51af4ded378f2881459fd288e4mike@reedtribe.org    return self.bottom - self.top
450e59b796e596cd51af4ded378f2881459fd288e4mike@reedtribe.orgend
460e59b796e596cd51af4ded378f2881459fd288e4mike@reedtribe.org
470e59b796e596cd51af4ded378f2881459fd288e4mike@reedtribe.orgfunction Sk.Rect:isEmpty()
480e59b796e596cd51af4ded378f2881459fd288e4mike@reedtribe.org    return self:width() <= 0 or self:height() <= 0
490e59b796e596cd51af4ded378f2881459fd288e4mike@reedtribe.orgend
500e59b796e596cd51af4ded378f2881459fd288e4mike@reedtribe.org
510e59b796e596cd51af4ded378f2881459fd288e4mike@reedtribe.orgfunction Sk.Rect:isFinite()
520e59b796e596cd51af4ded378f2881459fd288e4mike@reedtribe.org    local value = self.left * 0
530e59b796e596cd51af4ded378f2881459fd288e4mike@reedtribe.org    value = value * self.top
540e59b796e596cd51af4ded378f2881459fd288e4mike@reedtribe.org    value = value * self.right
550e59b796e596cd51af4ded378f2881459fd288e4mike@reedtribe.org    value = value * self.bottom
560e59b796e596cd51af4ded378f2881459fd288e4mike@reedtribe.org    return 0 == value
570e59b796e596cd51af4ded378f2881459fd288e4mike@reedtribe.orgend
580e59b796e596cd51af4ded378f2881459fd288e4mike@reedtribe.org
590e59b796e596cd51af4ded378f2881459fd288e4mike@reedtribe.orgfunction Sk.Rect:setEmpty()
600e59b796e596cd51af4ded378f2881459fd288e4mike@reedtribe.org    self.left = 0
610e59b796e596cd51af4ded378f2881459fd288e4mike@reedtribe.org    self.top = 0
620e59b796e596cd51af4ded378f2881459fd288e4mike@reedtribe.org    self.right = 0
630e59b796e596cd51af4ded378f2881459fd288e4mike@reedtribe.org    self.bottom = 0
640e59b796e596cd51af4ded378f2881459fd288e4mike@reedtribe.orgend
650e59b796e596cd51af4ded378f2881459fd288e4mike@reedtribe.org
660e59b796e596cd51af4ded378f2881459fd288e4mike@reedtribe.orgfunction Sk.Rect:set(l, t, r, b)
670e59b796e596cd51af4ded378f2881459fd288e4mike@reedtribe.org    self.left = l
680e59b796e596cd51af4ded378f2881459fd288e4mike@reedtribe.org    self.top = t
690e59b796e596cd51af4ded378f2881459fd288e4mike@reedtribe.org    self.right = r
700e59b796e596cd51af4ded378f2881459fd288e4mike@reedtribe.org    self.bottom = b
710e59b796e596cd51af4ded378f2881459fd288e4mike@reedtribe.orgend
720e59b796e596cd51af4ded378f2881459fd288e4mike@reedtribe.org
730e59b796e596cd51af4ded378f2881459fd288e4mike@reedtribe.orgfunction Sk.Rect:offset(dx, dy)
740e59b796e596cd51af4ded378f2881459fd288e4mike@reedtribe.org    dy = dy or dx
750e59b796e596cd51af4ded378f2881459fd288e4mike@reedtribe.org
760e59b796e596cd51af4ded378f2881459fd288e4mike@reedtribe.org    self.left = self.left + dx
770e59b796e596cd51af4ded378f2881459fd288e4mike@reedtribe.org    self.top = self.top + dy
780e59b796e596cd51af4ded378f2881459fd288e4mike@reedtribe.org    self.right = self.right + dx
790e59b796e596cd51af4ded378f2881459fd288e4mike@reedtribe.org    self.bottom = self.bottom + dy
800e59b796e596cd51af4ded378f2881459fd288e4mike@reedtribe.orgend
810e59b796e596cd51af4ded378f2881459fd288e4mike@reedtribe.org
820e59b796e596cd51af4ded378f2881459fd288e4mike@reedtribe.orgfunction Sk.Rect:inset(dx, dy)
830e59b796e596cd51af4ded378f2881459fd288e4mike@reedtribe.org    dy = dy or dx
840e59b796e596cd51af4ded378f2881459fd288e4mike@reedtribe.org
850e59b796e596cd51af4ded378f2881459fd288e4mike@reedtribe.org    self.left = self.left + dx
860e59b796e596cd51af4ded378f2881459fd288e4mike@reedtribe.org    self.top = self.top + dy
870e59b796e596cd51af4ded378f2881459fd288e4mike@reedtribe.org    self.right = self.right - dx
880e59b796e596cd51af4ded378f2881459fd288e4mike@reedtribe.org    self.bottom = self.bottom - dy
890e59b796e596cd51af4ded378f2881459fd288e4mike@reedtribe.orgend
900e59b796e596cd51af4ded378f2881459fd288e4mike@reedtribe.org
910e59b796e596cd51af4ded378f2881459fd288e4mike@reedtribe.org-------------------------------------------------------------------------------
92