type
Rect = object
x: float
y: float
width: float
height: float
View = object
frame: Rect
bounds: Rect
Button = object of View
clickEnabled: bool
proc initView[T=View](frame: Rect, obj: T=nil): T =
if obj != null: result = obj
result.frame = frame
proc initButton[T=Button](frame: Rect, clickEnabled: bool=true, obj: T=nil): T =
result = initView(frame)
result.clickEnabled = clickEnabled
dHlwZQogIFJlY3QgPSBvYmplY3QKICAgIHg6IGZsb2F0CiAgICB5OiBmbG9hdAogICAgd2lkdGg6IGZsb2F0CiAgICBoZWlnaHQ6IGZsb2F0CiAgCiAgVmlldyA9IG9iamVjdAogICAgZnJhbWU6IFJlY3QKICAgIGJvdW5kczogUmVjdAogIAogIEJ1dHRvbiA9IG9iamVjdCBvZiBWaWV3CiAgICBjbGlja0VuYWJsZWQ6IGJvb2wKCnByb2MgaW5pdFZpZXdbVD1WaWV3XShmcmFtZTogUmVjdCwgb2JqOiBUPW5pbCk6IFQgPQogIGlmIG9iaiAhPSBudWxsOiByZXN1bHQgPSBvYmoKICByZXN1bHQuZnJhbWUgPSBmcmFtZQoKcHJvYyBpbml0QnV0dG9uW1Q9QnV0dG9uXShmcmFtZTogUmVjdCwgY2xpY2tFbmFibGVkOiBib29sPXRydWUsIG9iajogVD1uaWwpOiBUID0KICByZXN1bHQgPSBpbml0VmlldyhmcmFtZSkKICByZXN1bHQuY2xpY2tFbmFibGVkID0gY2xpY2tFbmFibGVkCgo=