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