1779bf8a99dc7f03e5c43b26d4b85d7920ce89aeeDerek Sollenberger-- Experimental helpers for skia -- 2779bf8a99dc7f03e5c43b26d4b85d7920ce89aeeDerek Sollenberger 358190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerfunction string.startsWith(String,Start) 458190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger return string.sub(String,1,string.len(Start))==Start 558190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerend 658190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger 758190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerfunction string.endsWith(String,End) 858190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger return End=='' or string.sub(String,-string.len(End))==End 958190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerend 1058190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger 1158190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger 127839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek SollenbergerSk = {} 137839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger 147839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenbergerfunction Sk.isFinite(x) 157839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger return x * 0 == 0 167839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenbergerend 177839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger 187839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger------------------------------------------------------------------------------- 197839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger 207839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek SollenbergerSk.Rect = { left = 0, top = 0, right = 0, bottom = 0 } 217839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek SollenbergerSk.Rect.__index = Sk.Rect 227839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger 237839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenbergerfunction Sk.Rect.new(l, t, r, b) 247839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger local rect 257839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger if r then 267839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger -- 4 arguments 277839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger rect = { left = l, top = t, right = r, bottom = b } 287839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger elseif l then 297839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger -- 2 arguments 307839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger rect = { right = l, bottom = t } 317839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger else 327839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger -- 0 arguments 337839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger rect = {} 347839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger end 357839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger setmetatable(rect, Sk.Rect) 367839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger return rect; 377839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenbergerend 387839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger 397839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenbergerfunction Sk.Rect:width() 407839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger return self.right - self.left 417839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenbergerend 427839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger 437839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenbergerfunction Sk.Rect:height() 447839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger return self.bottom - self.top 457839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenbergerend 467839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger 477839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenbergerfunction Sk.Rect:isEmpty() 487839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger return self:width() <= 0 or self:height() <= 0 497839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenbergerend 507839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger 517839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenbergerfunction Sk.Rect:isFinite() 527839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger local value = self.left * 0 537839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger value = value * self.top 547839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger value = value * self.right 557839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger value = value * self.bottom 567839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger return 0 == value 577839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenbergerend 587839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger 597839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenbergerfunction Sk.Rect:setEmpty() 607839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger self.left = 0 617839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger self.top = 0 627839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger self.right = 0 637839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger self.bottom = 0 647839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenbergerend 657839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger 667839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenbergerfunction Sk.Rect:set(l, t, r, b) 677839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger self.left = l 687839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger self.top = t 697839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger self.right = r 707839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger self.bottom = b 717839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenbergerend 727839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger 737839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenbergerfunction Sk.Rect:offset(dx, dy) 747839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger dy = dy or dx 757839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger 767839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger self.left = self.left + dx 777839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger self.top = self.top + dy 787839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger self.right = self.right + dx 797839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger self.bottom = self.bottom + dy 807839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenbergerend 817839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger 827839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenbergerfunction Sk.Rect:inset(dx, dy) 837839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger dy = dy or dx 847839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger 857839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger self.left = self.left + dx 867839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger self.top = self.top + dy 877839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger self.right = self.right - dx 887839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger self.bottom = self.bottom - dy 897839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenbergerend 907839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger 917839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger------------------------------------------------------------------------------- 92