--==CelesteAttachment21242== Content-type: text/plain;charset=UTF-8
from preamble:
"Change Set: InheritanceButtonInBrowser Date: 9 December 2022 Author: Pete
Changes to the themes and CodeHolder to use the themes' colors on the Inheritance button. Updated colors in the theme so that the button text looks reasonable. The color changes are in the themes' addToolColors: method.
Added methods to the themes to start with a different font size (a parameter to the new methods). Mainly a convinience for me to allow me to test with larger font settings as the default ones are microscopic in my display.
Regards Pete!
PS. hopefully the email server won't delete the attachment this time...
["InheritanceButtonInBrowser.cs.gz"] --==CelesteAttachment21242== Content-transfer-encoding: base64 Content-disposition: attachment;filename="InheritanceButtonInBrowser.cs.gz" Content-type: application/octet-stream;name="InheritanceButtonInBrowser.cs.gz"
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 --==CelesteAttachment21242==--
--==CelesteAttachment26984== Content-type: text/plain;charset=UTF-8
Maybe this will work...
["InheritanceButtonInBrowser.1.cs"] --==CelesteAttachment26984== Content-transfer-encoding: base64 Content-disposition: attachment;filename="InheritanceButtonInBrowser.1.cs" Content-type: application/octet-stream;name="InheritanceButtonInBrowser.1.cs"
77u/J0Zyb20gU3F1ZWFrNi4xYWxwaGEgb2YgNyBEZWNlbWJlciAyMDIyIFtsYXRlc3QgdXBk YXRlOiAjMjIzMDFdIG9uIDkgRGVjZW1iZXIgMjAyMiBhdCAyOjEwOjU5IHBtJyENIkNoYW5n ZSBTZXQ6CQlJbmhlcml0YW5jZUJ1dHRvbkluQnJvd3Nlcg1EYXRlOgkJCTkgRGVjZW1iZXIg MjAyMg1BdXRob3I6CQkJUGV0ZQ0NQ2hhbmdlcyB0byB0aGUgdGhlbWVzIGFuZCBDb2RlSG9s ZGVyIHRvIHVzZSB0aGUgdGhlbWVzJyBjb2xvcnMgb24gdGhlIEluaGVyaXRhbmNlIGJ1dHRv bi4gVXBkYXRlZCBjb2xvcnMgaW4gdGhlIHRoZW1lIHNvIHRoYXQgdGhlIGJ1dHRvbiB0ZXh0 IGxvb2tzIHJlYXNvbmFibGUuIFRoZSBjb2xvciBjaGFuZ2VzIGFyZSBpbiB0aGUgdGhlbWVz JyBhZGRUb29sQ29sb3JzOiBtZXRob2QuDQ1BZGRlZCBtZXRob2RzIHRvIHRoZSB0aGVtZXMg dG8gc3RhcnQgd2l0aCBhIGRpZmZlcmVudCBmb250IHNpemUgKGEgcGFyYW1ldGVyIHRvIHRo ZSBuZXcgbWV0aG9kcykuICBNYWlubHkgYSBjb252aW5pZW5jZSBmb3IgbWUgdG8gYWxsb3cg bWUgdG8gdGVzdCB3aXRoIGxhcmdlciBmb250IHNldHRpbmdzIGFzIHRoZSBkZWZhdWx0IG9u ZXMgYXJlIG1pY3Jvc2NvcGljIGluIG15IGRpc3BsYXkuDQ1SZWdhcmRzIA1QZXRlIQ0NDSFD b2RlSG9sZGVyIG1ldGhvZHNGb3I6ICd0b29sYnVpbGRlcicgc3RhbXA6ICdQQVAgMTIvOC8y MDIyIDE4OjUzJyENaW5oZXJpdGFuY2VCdXR0b25Db2xvcg0JIkNoZWNrIHRvIHNlZSBpZiB0 aGUgY3VycmVudGx5LXZpZXdlZCBtZXRob2QgaGFzIGEgc3VwZXIgc2VuZCBvciBhbiBvdmVy cmlkZSwgYW5kIGlmIHNvLCBjaGFuZ2Ugc2NyZWVuIGZlZWRiYWNrLCB1bmxlc3MgdGhlICNk ZWNvcmF0ZUJyb3dzZXJCdXR0b25zIHNheXMgbm90IHRvLiINDQl8IGZsYWdzIGFDb2xvciBj bSBkZWZhdWx0QnV0dG9uQ29sb3IgfA0JZGVmYXVsdEJ1dHRvbkNvbG9yIDo9IChVc2VySW50 ZXJmYWNlVGhlbWUgY3VycmVudCBnZXQ6ICNjb2xvciBmb3I6ICNQbHVnZ2FibGVCdXR0b25N b3JwaCkgaWZOaWw6IFtDb2xvciBncmF5OiAwLjkxXS4NCWNtIDo9IGN1cnJlbnRDb21waWxl ZE1ldGhvZC4NCSgoY20gaXNLaW5kT2Y6IENvbXBpbGVkTWV0aG9kKSBhbmQ6IFtQcmVmZXJl bmNlcyBkZWNvcmF0ZUJyb3dzZXJCdXR0b25zXSkNCQlpZkZhbHNlOiBbXiBkZWZhdWx0QnV0 dG9uQ29sb3JdLg0JDQkiVGhpcyB0YWJsZSBkdXBsaWNhdGVzIHRoZSBvbGQgbG9naWMsIGJ1 dCBhZGRzIHR3byBuZXcgY29sb3JzIGZvciB0aGUgY2FzZXMgd2hlcmUgdGhlcmUgaXMgYSBz dXBlcmNsYXNzIGRlZmluaXRpb24sIGJ1dCB0aGlzIG1ldGhvZCBkb2Vzbid0IGNhbGwgaXQu Ig0NCWZsYWdzIDo9IDAuDQlzZWxmIGlzVGhpc0FuT3ZlcnJpZGUgaWZUcnVlOiBbIGZsYWdz IDo9IGZsYWdzIGJpdE9yOiA0IF0uDQljbSBzZW5kc1RvU3VwZXIgaWZUcnVlOiBbIGZsYWdz IDo9IGZsYWdzIGJpdE9yOiAyIF0uDQlzZWxmIGlzVGhlcmVBbk92ZXJyaWRlIGlmVHJ1ZTog WyBmbGFncyA6PSBmbGFncyBiaXRPcjogMSBdLg0JYUNvbG9yIDo9IHsNCQlkZWZhdWx0QnV0 dG9uQ29sb3IuDQkJKFVzZXJJbnRlcmZhY2VUaGVtZSBjdXJyZW50IGdldDogI2luaGVyaXRh bmNlQnV0dG9uQ29sb3JIYXNPdmVycmlkZSBmb3I6ICNDb2RlSG9sZGVyKS4NCQkoVXNlcklu dGVyZmFjZVRoZW1lIGN1cnJlbnQgZ2V0OiAjaW5oZXJpdGFuY2VCdXR0b25Db2xvclNlbmRz U3VwZXIgZm9yOiAjQ29kZUhvbGRlcikuDQkJKFVzZXJJbnRlcmZhY2VUaGVtZSBjdXJyZW50 IGdldDogI2luaGVyaXRhbmNlQnV0dG9uQ29sb3JIYXNPdmVycmlkZUFuZFNlbmRzU3VwZXIg Zm9yOiAjQ29kZUhvbGRlcikuDQkJKFVzZXJJbnRlcmZhY2VUaGVtZSBjdXJyZW50IGdldDog I2luaGVyaXRhbmNlQnV0dG9uQ29sb3JJc092ZXJyaWRlIGZvcjogI0NvZGVIb2xkZXIpLgki aGFzIHN1cGVyIGJ1dCBkb2Vzbid0IGNhbGwgaXQiDQkJKFVzZXJJbnRlcmZhY2VUaGVtZSBj dXJyZW50IGdldDogI2luaGVyaXRhbmNlQnV0dG9uQ29sb3JIYXNPdmVycmlkZUlzT3ZlcnJp ZGUgZm9yOiAjQ29kZUhvbGRlcikuCSJoYXMgc3ViOyBoYXMgc3VwZXIgYnV0IGRvZXNuJ3Qg Y2FsbCBpdCINCQkoVXNlckludGVyZmFjZVRoZW1lIGN1cnJlbnQgZ2V0OiAjaW5oZXJpdGFu Y2VCdXR0b25Db2xvcklzT3ZlcnJpZGVBbmRTZW5kc1N1cGVyIGZvcjogI0NvZGVIb2xkZXIp Lg0JCShVc2VySW50ZXJmYWNlVGhlbWUgY3VycmVudCBnZXQ6ICNpbmhlcml0YW5jZUJ1dHRv bkNvbG9ySGFzT3ZlcnJpZGVBbmRTZW5kc1N1cGVyIGZvcjogI0NvZGVIb2xkZXIpLg0JfSBh dDogZmxhZ3MgKyAxLg0NCV5hQ29sb3IhICENDQ0hQ29tbXVuaXR5VGhlbWUgY2xhc3MgbWV0 aG9kc0ZvcjogJ2luc3RhbmNlIGNyZWF0aW9uJyBzdGFtcDogJ1BBUCAxMi85LzIwMjIgMTM6 NDQnIQ1hZGREYXJrRm9udHM6IGFVc2VySW50ZXJmYWNlVGhlbWUgd2l0aEZvbnRTaXplOiBz aXplDQkiU2V0LXVwIGZvbnRzLiINCWFVc2VySW50ZXJmYWNlVGhlbWUNCQlzZXQ6ICNiYWxs b29uSGVscEZvbnQgdG86IChTdHJpa2VGb250IGZhbWlseU5hbWU6ICdCaXRzdHJlYW1WZXJh U2Fuc0ZvclNxdWVhaycgcG9pbnRTaXplOiA3LjUgZW1waGFzaXplZDogVGV4dEVtcGhhc2lz IGl0YWxpYyBlbXBoYXNpc0NvZGUpOw0JCXNldDogI3N0YW5kYXJkQnV0dG9uRm9udCB0bzog KFN0cmlrZUZvbnQgZmFtaWx5TmFtZTogJ0JpdHN0cmVhbVZlcmFTYW5zRm9yU3F1ZWFrJyBw b2ludFNpemU6IHNpemUpOw0JCXNldDogI3N0YW5kYXJkQ29kZUZvbnQgdG86IChTdHJpa2VG b250IGZhbWlseU5hbWU6ICdCaXRzdHJlYW1WZXJhU2Fuc0ZvclNxdWVhaycgcG9pbnRTaXpl OiBzaXplKTsNCQlzZXQ6ICNzdGFuZGFyZEZsYXBGb250IHRvOiAoU3RyaWtlRm9udCBmYW1p bHlOYW1lOiAnQml0c3RyZWFtVmVyYVNhbnNGb3JTcXVlYWsnIHBvaW50U2l6ZTogNy41IGVt cGhhc2l6ZWQ6IFRleHRFbXBoYXNpcyBib2xkIGVtcGhhc2lzQ29kZSk7DQkJc2V0OiAjaGFs b0xhYmVsRm9udCB0bzogKFN0cmlrZUZvbnQgZmFtaWx5TmFtZTogJ0JpdHN0cmVhbVZlcmFT YW5zRm9yU3F1ZWFrJyBwb2ludFNpemU6IDEwLjUpOw0JCXNldDogI3N0YW5kYXJkTGlzdEZv bnQgdG86IChTdHJpa2VGb250IGZhbWlseU5hbWU6ICdCaXRzdHJlYW1WZXJhU2Fuc0ZvclNx dWVhaycgcG9pbnRTaXplOiBzaXplKTsNCQlzZXQ6ICNzdGFuZGFyZE1lbnVGb250IHRvOiAo U3RyaWtlRm9udCBmYW1pbHlOYW1lOiAnQml0c3RyZWFtVmVyYVNhbnNGb3JTcXVlYWsnIHBv aW50U2l6ZTogc2l6ZSk7DQkJc2V0OiAjc3RhbmRhcmRTeXN0ZW1Gb250IHRvOiAoU3RyaWtl Rm9udCBmYW1pbHlOYW1lOiAnQml0c3RyZWFtVmVyYVNhbnNGb3JTcXVlYWsnIHBvaW50U2l6 ZTogc2l6ZSk7DQkJc2V0OiAjd2luZG93VGl0bGVGb250IHRvOiAoU3RyaWtlRm9udCBmYW1p bHlOYW1lOiAnQml0c3RyZWFtVmVyYVNhbnNGb3JTcXVlYWsnIHBvaW50U2l6ZTogKHNpemUv MS4zKSBlbXBoYXNpemVkOiBUZXh0RW1waGFzaXMgYm9sZCBlbXBoYXNpc0NvZGUpISAhDQ0h Q29tbXVuaXR5VGhlbWUgY2xhc3MgbWV0aG9kc0ZvcjogJ2luc3RhbmNlIGNyZWF0aW9uJyBz dGFtcDogJ1BBUCAxMi85LzIwMjIgMTM6MjgnIQ1hZGREYXJrVG9vbENvbG9yczogdGhlbWUN CSJUb29sLXNwZWNpZmljIGNvbG9ycy4iDQkNCXRoZW1lIA0JCXNldDogI2ZhaWx1cmVDb2xv ciBmb3I6ICNUZXN0UnVubmVyIHRvOiBzZWxmIGRiWWVsbG93Ow0JCXNldDogI2Vycm9yQ29s b3IgZm9yOiAjVGVzdFJ1bm5lciB0bzogc2VsZiBkYlJlZDsNCQlzZXQ6ICNwYXNzQ29sb3Ig Zm9yOiAjVGVzdFJ1bm5lciB0bzogc2VsZiBkYkdyZWVuLg0JCQ0JIkJyb3dzZXIuIg0JdGhl bWUNCQlzZXQ6ICNub0NsYXNzQ29tbWVudENvbG9yIGZvcjogI0Jyb3dzZXIgdG86IHNlbGYg ZGJSZWQ7DQkJc2V0OiAjZGVwcmVjYXRlZE1lc3NhZ2VBdHRyaWJ1dGVzIGZvcjogI0NvZGVI b2xkZXIgdG86IHsgVGV4dEVtcGhhc2lzIHN0cnVja091dC4gVGV4dENvbG9yIGNvbG9yOiBz ZWxmIGRiR3JheSB9Lg0JCQ0JIkNvZGVIb2xkZXIiDQl0aGVtZQ0JCXNldDogI2luaGVyaXRh bmNlQnV0dG9uQ29sb3JEZWZhdWx0IGZvcjogI0NvZGVIb2xkZXIgdG86IHNlbGYgZGJCYWNr Z3JvdW5kOw0JCXNldDogI2luaGVyaXRhbmNlQnV0dG9uQ29sb3JIYXNPdmVycmlkZSBmb3I6 ICNDb2RlSG9sZGVyIHRvOiBDb2xvciB0YW4gbXVjaERhcmtlcjsNCQlzZXQ6ICNpbmhlcml0 YW5jZUJ1dHRvbkNvbG9ySXNPdmVycmlkZSBmb3I6ICNDb2RlSG9sZGVyIHRvOiBDb2xvciBy ZWQgIG11Y2hEYXJrZXI7DQkJc2V0OiAjaW5oZXJpdGFuY2VCdXR0b25Db2xvclNlbmRzU3Vw ZXIgZm9yOiAjQ29kZUhvbGRlciB0bzogQ29sb3IgZ3JlZW4gbXVjaERhcmtlcjsNCQlzZXQ6 ICNpbmhlcml0YW5jZUJ1dHRvbkNvbG9ySXNPdmVycmlkZUFuZFNlbmRzU3VwZXIgZm9yOiAj Q29kZUhvbGRlciB0bzogQ29sb3IgZ3JlZW4gbXVjaERhcmtlcjsNCQlzZXQ6ICNpbmhlcml0 YW5jZUJ1dHRvbkNvbG9ySGFzT3ZlcnJpZGVBbmRTZW5kc1N1cGVyIGZvcjogI0NvZGVIb2xk ZXIgdG86IENvbG9yIGJsdWUgbXVjaERhcmtlcjsNCQlzZXQ6ICNpbmhlcml0YW5jZUJ1dHRv bkNvbG9ySGFzT3ZlcnJpZGVJc092ZXJyaWRlIGZvcjogI0NvZGVIb2xkZXIgdG86IENvbG9y IG9yYW5nZSBtdWNoRGFya2VyLg0JCSEgIQ0NIUNvbW11bml0eVRoZW1lIGNsYXNzIG1ldGhv ZHNGb3I6ICdpbnN0YW5jZSBjcmVhdGlvbicgc3RhbXA6ICdQQVAgMTIvOS8yMDIyIDExOjQ5 JyENY3JlYXRlRGFya1dpdGhGb250U2l6ZTogc2l6ZQ0JInNlbGYgY3JlYXRlRGFyayBhcHBs eS4iDQl8IG5hbWUgfA0JbmFtZSA6PSAnQ29tbXVuaXR5IChkYXJrKScuDQleIChzZWxmIG5h bWVkOiBuYW1lKSBpbjogWzp0aGVtZSB8DQkJdGhlbWUgbWVyZ2U6IChzZWxmIG5hbWVkOiAn U3F1ZWFrJykgb3ZlcndyaXRlOiB0cnVlLg0JCXRoZW1lIG5hbWU6IG5hbWUuDQkJIkdlbmVy YWwgbW9ycGggc3R1ZmYuIg0JCXRoZW1lDQkJCXNldDogI2JvcmRlckNvbG9yIGZvcjogI1Nj cm9sbFBhbmUgdG86IChDb2xvciB0cmFuc3BhcmVudCkgOw0JCQlzZXQ6ICNrZXlib2FyZEZv Y3VzQ29sb3IgZm9yOiAjTW9ycGggdG86IChzZWxmIGRiU2VsZWN0aW9uIGFkanVzdFNhdHVy YXRpb246IC0wLjMgYnJpZ2h0bmVzczogMC4xMCk7DQkJCXNldDogI2tleWJvYXJkRm9jdXNX aWR0aCBmb3I6ICNNb3JwaCB0bzogMTsNCQkJc2V0OiAjc29mdFNoYWRvd0NvbG9yIGZvcjog I01vcnBoIHRvOiAoc2VsZiBkYlNlbGVjdGlvbiBtdWNoTGlnaHRlciBhbHBoYTogMC4wMjUp Ow0JCQlzZXQ6ICNzb2Z0U2hhZG93T2Zmc2V0IGZvcjogI01vcnBoIHRvOiAoMTBAOCBjb3Ju ZXI6IDEwQDEyKTsNCQkJc2V0OiAjaGFyZFNoYWRvd0NvbG9yIGZvcjogI01vcnBoIHRvOiAo c2VsZiBkYlNlbGVjdGlvbiBtdWNoTGlnaHRlciBhbHBoYTogMC4wMik7DQkJCXNldDogI2hh cmRTaGFkb3dPZmZzZXQgZm9yOiAjTW9ycGggdG86IDFAMS4NCQkNCQlzZWxmDQkJCWFkZERh cmtGb250czogdGhlbWUgd2l0aEZvbnRTaXplOiBzaXplOw0JCQlhZGREYXJrV2luZG93Q29s b3JzOiB0aGVtZTsNCQkJYWRkRGFya1N5bnRheEhpZ2hsaWdodGluZzogdGhlbWU7DQkJCWFk ZERhcmtTY3JvbGxhYmxlczogdGhlbWU7DQkJCWFkZERhcmtCdXR0b25zOiB0aGVtZTsNCQkJ YWRkRGFya0RpYWxvZ3M6IHRoZW1lOw0JCQlhZGREYXJrTWVudXNBbmREb2NraW5nQmFyczog dGhlbWU7DQkJCWFkZERhcmtUb29sQ29sb3JzOiB0aGVtZS4NCQl0aGVtZV0hICENDQ0hTW9u b2thaVRoZW1lIGNsYXNzIG1ldGhvZHNGb3I6ICdpbnN0YW5jZSBjcmVhdGlvbicgc3RhbXA6 ICdQQVAgMTIvOS8yMDIyIDEzOjA1JyENYWRkRGFya0ZvbnRzOiB0aGVtZSB3aXRoRm9udFNp emU6IHNpemUNDQkiU2V0LXVwIGZvbnRzLiINCXRoZW1lDQkJc2V0OiAjYmFsbG9vbkhlbHBG b250IHRvOiAoU3RyaWtlRm9udCBmYW1pbHlOYW1lOiAnQml0c3RyZWFtVmVyYVNhbnNGb3JT cXVlYWsnIHBvaW50U2l6ZTogKHNpemUvMikpOw0JCXNldDogI3N0YW5kYXJkQnV0dG9uRm9u dCB0bzogKFN0cmlrZUZvbnQgZmFtaWx5TmFtZTogJ0JpdHN0cmVhbVZlcmFTYW5zRm9yU3F1 ZWFrJyBwb2ludFNpemU6IHNpemUpOw0JCXNldDogI3N0YW5kYXJkQ29kZUZvbnQgdG86IChT dHJpa2VGb250IGZhbWlseU5hbWU6ICdCaXRzdHJlYW1WZXJhU2Fuc0ZvclNxdWVhaycgcG9p bnRTaXplOiBzaXplKTsNCQlzZXQ6ICNzdGFuZGFyZEZsYXBGb250IHRvOiAoU3RyaWtlRm9u dCBmYW1pbHlOYW1lOiAnQml0c3RyZWFtVmVyYVNhbnNGb3JTcXVlYWsnIHBvaW50U2l6ZTog Ny41IGVtcGhhc2l6ZWQ6IFRleHRFbXBoYXNpcyBib2xkIGVtcGhhc2lzQ29kZSk7DQkJc2V0 OiAjaGFsb0xhYmVsRm9udCB0bzogKFN0cmlrZUZvbnQgZmFtaWx5TmFtZTogJ0JpdHN0cmVh bVZlcmFTYW5zRm9yU3F1ZWFrJyBwb2ludFNpemU6IDEwLjUpOw0JCXNldDogI3N0YW5kYXJk TGlzdEZvbnQgdG86IChTdHJpa2VGb250IGZhbWlseU5hbWU6ICdCaXRzdHJlYW1WZXJhU2Fu c0ZvclNxdWVhaycgcG9pbnRTaXplOiBzaXplKTsNCQlzZXQ6ICNzdGFuZGFyZE1lbnVGb250 IHRvOiAoU3RyaWtlRm9udCBmYW1pbHlOYW1lOiAnQml0c3RyZWFtVmVyYVNhbnNGb3JTcXVl YWsnIHBvaW50U2l6ZTogc2l6ZSk7DQkJc2V0OiAjc3RhbmRhcmRTeXN0ZW1Gb250IHRvOiAo U3RyaWtlRm9udCBmYW1pbHlOYW1lOiAnQml0c3RyZWFtVmVyYVNhbnNGb3JTcXVlYWsnIHBv aW50U2l6ZTogc2l6ZSk7DQkJc2V0OiAjd2luZG93VGl0bGVGb250IHRvOiAoU3RyaWtlRm9u dCBmYW1pbHlOYW1lOiAnQml0c3RyZWFtVmVyYVNhbnNGb3JTcXVlYWsnIHBvaW50U2l6ZTog KHNpemUvMS41KSkuISAhDQ0hTW9ub2thaVRoZW1lIGNsYXNzIG1ldGhvZHNGb3I6ICdpbnN0 YW5jZSBjcmVhdGlvbicgc3RhbXA6ICdQQVAgMTIvOS8yMDIyIDEyOjAzJyENYWRkRGFya1Rv b2xDb2xvcnM6IHRoZW1lDQkiVG9vbC1zcGVjaWZpYyBjb2xvcnMuIg0JDQl0aGVtZSANCQlz ZXQ6ICNmYWlsdXJlQ29sb3IgZm9yOiAjVGVzdFJ1bm5lciB0bzogc2VsZiB5ZWxsb3c7DQkJ c2V0OiAjZXJyb3JDb2xvciBmb3I6ICNUZXN0UnVubmVyIHRvOiBzZWxmIHJlZDsNCQlzZXQ6 ICNwYXNzQ29sb3IgZm9yOiAjVGVzdFJ1bm5lciB0bzogc2VsZiBncmVlbjsNCQkNCQlzZXQ6 ICNmYWlsdXJlVGV4dENvbG9yIGZvcjogI1Rlc3RSdW5uZXIgdG86IHNlbGYgYmFja2dyb3Vu ZENvbG9yOw0JCXNldDogI2Vycm9yVGV4dENvbG9yIGZvcjogI1Rlc3RSdW5uZXIgdG86IHNl bGYgYmFja2dyb3VuZENvbG9yOw0JCXNldDogI3Bhc3NUZXh0Q29sb3IgZm9yOiAjVGVzdFJ1 bm5lciB0bzogc2VsZiBiYWNrZ3JvdW5kQ29sb3IuDQkJDQl0aGVtZQ0JCXNldDogI2lnbm9y ZWRPcGVyYXRpb25BdHRyaWJ1dGVzIGZvcjogI01DT3BlcmF0aW9uc0Jyb3dzZXIgdG86IHtU ZXh0Q29sb3IgY29sb3I6IHNlbGYgZ3JheUxpZ2h0fS4NCQkNCSJCcm93c2VyLiINCXRoZW1l DQkJc2V0OiAjbm9DbGFzc0NvbW1lbnRDb2xvciBmb3I6ICNCcm93c2VyIHRvOiBzZWxmIHJl ZDsNCQlzZXQ6ICNkZXByZWNhdGVkTWVzc2FnZUF0dHJpYnV0ZXMgZm9yOiAjQ29kZUhvbGRl ciB0bzogeyBUZXh0RW1waGFzaXMgc3RydWNrT3V0LiBUZXh0Q29sb3IgY29sb3I6IHNlbGYg Z3JheUxpZ2h0IH0uDQkJDQkiQ29kZUhvbGRlciINCXRoZW1lDQkJc2V0OiAjaW5oZXJpdGFu Y2VCdXR0b25Db2xvckRlZmF1bHQgZm9yOiAjQ29kZUhvbGRlciB0bzogc2VsZiBiYWNrZ3Jv dW5kQ29sb3IgOw0JCXNldDogI2luaGVyaXRhbmNlQnV0dG9uQ29sb3JIYXNPdmVycmlkZSBm b3I6ICNDb2RlSG9sZGVyIHRvOiAoQ29sb3IgcjogMC42IGc6IDAuNiBiOiAwLjMpOw0JCXNl dDogI2luaGVyaXRhbmNlQnV0dG9uQ29sb3JJc092ZXJyaWRlIGZvcjogI0NvZGVIb2xkZXIg dG86IENvbG9yIHJlZCBtdWNoRGFya2VyOw0JCXNldDogI2luaGVyaXRhbmNlQnV0dG9uQ29s b3JTZW5kc1N1cGVyIGZvcjogI0NvZGVIb2xkZXIgdG86IENvbG9yIGdyZWVuIG11Y2hEYXJr ZXI7DQkJc2V0OiAjaW5oZXJpdGFuY2VCdXR0b25Db2xvcklzT3ZlcnJpZGVBbmRTZW5kc1N1 cGVyIGZvcjogI0NvZGVIb2xkZXIgdG86IENvbG9yIGdyZWVuIG11Y2hEYXJrZXI7DQkJc2V0 OiAjaW5oZXJpdGFuY2VCdXR0b25Db2xvckhhc092ZXJyaWRlQW5kU2VuZHNTdXBlciBmb3I6 ICNDb2RlSG9sZGVyIHRvOiBDb2xvciBibHVlIG11Y2hEYXJrZXI7DQkJc2V0OiAjaW5oZXJp dGFuY2VCdXR0b25Db2xvckhhc092ZXJyaWRlSXNPdmVycmlkZSBmb3I6ICNDb2RlSG9sZGVy IHRvOiBDb2xvciBvcmFuZ2UgbXVjaERhcmtlci4NCQkhICENDSFNb25va2FpVGhlbWUgY2xh c3MgbWV0aG9kc0ZvcjogJ2luc3RhbmNlIGNyZWF0aW9uJyBzdGFtcDogJ210IDgvMTYvMjAx NiAxMzoyNCchDWFkZERhcmtXaW5kb3dDb2xvcnM6IHRoZW1lDQkic2VsZiBjcmVhdGVEYXJr IGFwcGx5LiINCXRoZW1lDQkJc2V0OiAjdW5pZm9ybVdpbmRvd0NvbG9yIGZvcjogI01vZGVs IHRvOiggc2VsZiBpbnZpc2libGVDb2xvciBhZGp1c3RCcmlnaHRuZXNzOiAwLjE2KSAibGln aHRlciB0d2ljZSI7DQkJDQkJc2V0OiAjdW5mb2N1c2VkV2luZG93Q29sb3JNb2RpZmllciBm b3I6ICNTeXN0ZW1XaW5kb3cgdG86IFsgWzpjb2xvciB8IGNvbG9yIGFkanVzdEJyaWdodG5l c3M6IC0wLjE2ICJkYXJrZXIgdHdpY2UiXSBdOw0JCXNldDogI3VuZm9jdXNlZExhYmVsQ29s b3IgZm9yOiAjU3lzdGVtV2luZG93IHRvOiBbDQkJCU1vZGVsIHVzZUNvbG9yZnVsV2luZG93 cw0JCQkJaWZUcnVlOiBbKENvbG9yIHI6IDAuMjg1IGc6IDAuMjgyIGI6IDAuMjQyKSAiaW52 aXNpYmxlIGNvbG9yIl0NCQkJCWlmRmFsc2U6IFsoQ29sb3IgcjogMC45NzIgZzogMC45NzIg YjogMC45NDgpICJmb3JlZ3JvdW5kIGNvbG9yIl0gXTsNCQlzZXQ6ICNmb2N1c2VkTGFiZWxD b2xvciBmb3I6ICNTeXN0ZW1XaW5kb3cgdG86IFsNCQkJTW9kZWwgdXNlQ29sb3JmdWxXaW5k b3dzDQkJCQlpZlRydWU6IFsoQ29sb3IgcjogMC4xNTIgZzogMC4xNTYgYjogMC4xMzMpICJi YWNrZ3JvdW5kIGNvbG9yIl0NCQkJCWlmRmFsc2U6IFsoQ29sb3IgcjogMC45MDEgZzogMC44 NTggYjogMC40NTUpICJ5ZWxsb3ciXSBdOw0NCQlzZXQ6ICNjdXN0b21XaW5kb3dDb2xvciBm b3I6ICNCcm93c2VyIHRvOiBzZWxmIGdyZWVuIGR1bGxlcjsNCQlzZXQ6ICNjdXN0b21XaW5k b3dDb2xvciBmb3I6ICNDaGFuZ2VMaXN0IHRvOiBzZWxmIGJsdWUgZHVsbGVyOw0JCXNldDog I2N1c3RvbVdpbmRvd0NvbG9yIGZvcjogI0NoYW5nZVNvcnRlciB0bzogc2VsZiBibHVlIGR1 bGxlcjsNCQlzZXQ6ICNjdXN0b21XaW5kb3dDb2xvciBmb3I6ICNDaGF0Tm90ZXMgdG86IHNl bGYgbWFnZW50YSBkdWxsZXI7DQkJc2V0OiAjY3VzdG9tV2luZG93Q29sb3IgZm9yOiAjQ2xh c3NDb21tZW50VmVyc2lvbnNCcm93c2VyIHRvOiBzZWxmIHZpb2xldCBkdWxsZXI7DQkJc2V0 OiAjY3VzdG9tV2luZG93Q29sb3IgZm9yOiAjRGVidWdnZXIgdG86IHNlbGYgcmVkIGR1bGxl cjsNCQlzZXQ6ICNjdXN0b21XaW5kb3dDb2xvciBmb3I6ICNEdWFsQ2hhbmdlU29ydGVyIHRv OiBzZWxmIGJsdWUgZHVsbGVyOw0JCXNldDogI2N1c3RvbVdpbmRvd0NvbG9yIGZvcjogI0Zp bGVDb250ZW50c0Jyb3dzZXIgdG86IHNlbGYgeWVsbG93IGR1bGxlcjsNCQlzZXQ6ICNjdXN0 b21XaW5kb3dDb2xvciBmb3I6ICNGaWxlTGlzdCB0bzogc2VsZiB5ZWxsb3cgZHVsbGVyOw0J CXNldDogI2N1c3RvbVdpbmRvd0NvbG9yIGZvcjogI0luc3RhbmNlQnJvd3NlciB0bzogc2Vs ZiBjeWFuIGR1bGxlcjsNCQlzZXQ6ICNjdXN0b21XaW5kb3dDb2xvciBmb3I6ICNMZXhpY29u IHRvOiBzZWxmIGN5YW4gZHVsbGVyOw0JCXNldDogI2N1c3RvbVdpbmRvd0NvbG9yIGZvcjog I01DVG9vbCB0bzogc2VsZiB2aW9sZXQgZHVsbGVyOw0JCXNldDogI2N1c3RvbVdpbmRvd0Nv bG9yIGZvcjogI01lc3NhZ2VOYW1lcyB0bzogc2VsZiBncmVlbiBkdWxsZXI7DQkJc2V0OiAj Y3VzdG9tV2luZG93Q29sb3IgZm9yOiAjTWVzc2FnZVNldCB0bzogc2VsZiBjeWFuIGR1bGxl cjsNCQlzZXQ6ICNjdXN0b21XaW5kb3dDb2xvciBmb3I6ICNQYWNrYWdlUGFuZUJyb3dzZXIg dG86IHNlbGYgZ3JlZW4gZHVsbGVyOw0JCXNldDogI2N1c3RvbVdpbmRvd0NvbG9yIGZvcjog I1BsdWdnYWJsZUZpbGVMaXN0IHRvOiBzZWxmIHllbGxvdyBkdWxsZXI7DQkJc2V0OiAjY3Vz dG9tV2luZG93Q29sb3IgZm9yOiAjUHJlZmVyZW5jZUJyb3dzZXIgdG86IHNlbGYgY3lhbiBk dWxsZXI7DQkJc2V0OiAjY3VzdG9tV2luZG93Q29sb3IgZm9yOiAjU01Mb2FkZXIgdG86IHNl bGYgb3JhbmdlIGR1bGxlcjsNCQlzZXQ6ICNjdXN0b21XaW5kb3dDb2xvciBmb3I6ICNTTUxv YWRlclBsdXMgdG86IHNlbGYgb3JhbmdlIGR1bGxlcjsNCQlzZXQ6ICNjdXN0b21XaW5kb3dD b2xvciBmb3I6ICNTTVJlbGVhc2VCcm93c2VyIHRvOiBzZWxmIG9yYW5nZSBkdWxsZXI7DQkJ c2V0OiAjY3VzdG9tV2luZG93Q29sb3IgZm9yOiAjU2NyaXB0aW5nRG9tYWluIHRvOiBzZWxm IHllbGxvdyBkdWxsZXI7DQkJc2V0OiAjY3VzdG9tV2luZG93Q29sb3IgZm9yOiAjU2VsZWN0 b3JCcm93c2VyIHRvOiBzZWxmIGN5YW4gZHVsbGVyOw0JCXNldDogI2N1c3RvbVdpbmRvd0Nv bG9yIGZvcjogI1N0cmluZ0hvbGRlciB0bzogc2VsZiB5ZWxsb3cgZHVsbGVyOw0JCXNldDog I2N1c3RvbVdpbmRvd0NvbG9yIGZvcjogI1Rlc3RSdW5uZXIgdG86IHNlbGYgb3JhbmdlIGR1 bGxlcjsNCQlzZXQ6ICNjdXN0b21XaW5kb3dDb2xvciBmb3I6ICNUcmFuc2NyaXB0U3RyZWFt IHRvOiBzZWxmIG9yYW5nZSBkdWxsZXI7DQkJc2V0OiAjY3VzdG9tV2luZG93Q29sb3IgZm9y OiAjVmVyc2lvbnNCcm93c2VyIHRvOiBzZWxmIHZpb2xldCBkdWxsZXIuISAhDQ0hTW9ub2th aVRoZW1lIGNsYXNzIG1ldGhvZHNGb3I6ICdpbnN0YW5jZSBjcmVhdGlvbicgc3RhbXA6ICdQ QVAgMTIvOC8yMDIyIDE0OjM3JyENY3JlYXRlRGFyaw0JInNlbGYgY3JlYXRlRGFyayBhcHBs eS4iDQl8IHRoZW1lTmFtZSB8DQl0aGVtZU5hbWUgOj0gJ01vbm9rYWkgKGRhcmspJy4NCV4g KHNlbGYgbmFtZWQ6IHRoZW1lTmFtZSkgaW46IFs6dGhlbWUgfA0JCXRoZW1lIG1lcmdlOiAo c2VsZiBuYW1lZDogJ1NxdWVhaycpIG92ZXJ3cml0ZTogdHJ1ZS4NCQl0aGVtZSBuYW1lOiB0 aGVtZU5hbWUuDQkJDQkJIkdlbmVyYWwgbW9ycGggc3R1ZmYuIg0JCXRoZW1lDQkJCXNldDog I2tleWJvYXJkRm9jdXNDb2xvciBmb3I6ICNNb3JwaCB0bzogc2VsZiB5ZWxsb3c7DQkJCXNl dDogI2tleWJvYXJkRm9jdXNXaWR0aCBmb3I6ICNNb3JwaCB0bzogMS4NDQkJdGhlbWUgc2V0 OiAjYmFja2dyb3VuZCBmb3I6ICNTeXN0ZW1XaW5kb3cgdG86IHNlbGYgYmFja2dyb3VuZENv bG9yLg0NCQlzZWxmDQkJCWFkZERhcmtGb250czogdGhlbWU7DQkJCWFkZERhcmtXaW5kb3dD b2xvcnM6IHRoZW1lOw0JCQlhZGREYXJrU3ludGF4SGlnaGxpZ2h0aW5nOiB0aGVtZTsNCQkJ YWRkRGFya1Njcm9sbGFibGVzOiB0aGVtZTsNCQkJYWRkRGFya0J1dHRvbnM6IHRoZW1lOw0J CQlhZGREYXJrRGlhbG9nczogdGhlbWU7DQkJCWFkZERhcmtNZW51c0FuZERvY2tpbmdCYXJz OiB0aGVtZTsNCQkJYWRkRGFya1Rvb2xDb2xvcnM6IHRoZW1lLg0NCQl0aGVtZV0hICENDSFN b25va2FpVGhlbWUgY2xhc3MgbWV0aG9kc0ZvcjogJ2luc3RhbmNlIGNyZWF0aW9uJyBzdGFt cDogJ1BBUCAxMi85LzIwMjIgMTE6NDYnIQ1jcmVhdGVEYXJrV2l0aEZvbnRTaXplOiBzaXpl DQkic2VsZiBjcmVhdGVEYXJrIGFwcGx5LiINCXwgdGhlbWVOYW1lIHwNCXRoZW1lTmFtZSA6 PSAnTW9ub2thaSAoZGFyayknLg0JXiAoc2VsZiBuYW1lZDogdGhlbWVOYW1lKSBpbjogWzp0 aGVtZSB8DQkJdGhlbWUgbWVyZ2U6IChzZWxmIG5hbWVkOiAnU3F1ZWFrJykgb3ZlcndyaXRl OiB0cnVlLg0JCXRoZW1lIG5hbWU6IHRoZW1lTmFtZS4NCQkNCQkiR2VuZXJhbCBtb3JwaCBz dHVmZi4iDQkJdGhlbWUNCQkJc2V0OiAja2V5Ym9hcmRGb2N1c0NvbG9yIGZvcjogI01vcnBo IHRvOiBzZWxmIHllbGxvdzsNCQkJc2V0OiAja2V5Ym9hcmRGb2N1c1dpZHRoIGZvcjogI01v cnBoIHRvOiAxLg0NCQl0aGVtZSBzZXQ6ICNiYWNrZ3JvdW5kIGZvcjogI1N5c3RlbVdpbmRv dyB0bzogc2VsZiBiYWNrZ3JvdW5kQ29sb3IuDQ0JCXNlbGYNCQkJYWRkRGFya0ZvbnRzOiB0 aGVtZSB3aXRoRm9udFNpemU6IHNpemU7DQkJCWFkZERhcmtXaW5kb3dDb2xvcnM6IHRoZW1l Ow0JCQlhZGREYXJrU3ludGF4SGlnaGxpZ2h0aW5nOiB0aGVtZTsNCQkJYWRkRGFya1Njcm9s bGFibGVzOiB0aGVtZTsNCQkJYWRkRGFya0J1dHRvbnM6IHRoZW1lOw0JCQlhZGREYXJrRGlh bG9nczogdGhlbWU7DQkJCWFkZERhcmtNZW51c0FuZERvY2tpbmdCYXJzOiB0aGVtZTsNCQkJ YWRkRGFya1Rvb2xDb2xvcnM6IHRoZW1lLg0NCQl0aGVtZV0hICENDQ0hU29sYXJpemVkVGhl bWUgY2xhc3MgbWV0aG9kc0ZvcjogJ2luc3RhbmNlIGNyZWF0aW9uJyBzdGFtcDogJ1BBUCAx Mi85LzIwMjIgMTE6NTknIQ1hZGREYXJrRm9udHM6IHRoZW1lIHdpdGhGb250U2l6ZTogc2l6 ZQ0NCSJTZXQtdXAgZm9udHMuIg0JdGhlbWUNCQlzZXQ6ICNiYWxsb29uSGVscEZvbnQgdG86 IChTdHJpa2VGb250IGZhbWlseU5hbWU6ICdEYXJrbWFwIERlamFWdSBTYW5zJyBwb2ludFNp emU6IChzaXplLzIpKTsNCQlzZXQ6ICNzdGFuZGFyZEJ1dHRvbkZvbnQgdG86IChTdHJpa2VG b250IGZhbWlseU5hbWU6ICdEYXJrbWFwIERlamFWdSBTYW5zJyBwb2ludFNpemU6IHNpemUp Ow0JCXNldDogI3N0YW5kYXJkQ29kZUZvbnQgdG86IChTdHJpa2VGb250IGZhbWlseU5hbWU6 ICdEYXJrbWFwIERlamFWdSBTYW5zJyBwb2ludFNpemU6IHNpemUpOw0JCXNldDogI3N0YW5k YXJkRmxhcEZvbnQgdG86IChTdHJpa2VGb250IGZhbWlseU5hbWU6ICdEYXJrbWFwIERlamFW dSBTYW5zJyBwb2ludFNpemU6IDcuNSBlbXBoYXNpemVkOiBUZXh0RW1waGFzaXMgYm9sZCBl bXBoYXNpc0NvZGUpOw0JCXNldDogI2hhbG9MYWJlbEZvbnQgdG86IChTdHJpa2VGb250IGZh bWlseU5hbWU6ICdEYXJrbWFwIERlamFWdSBTYW5zJyBwb2ludFNpemU6IHNpemUpOw0JCXNl dDogI3N0YW5kYXJkTGlzdEZvbnQgdG86IChTdHJpa2VGb250IGZhbWlseU5hbWU6ICdEYXJr bWFwIERlamFWdSBTYW5zJyBwb2ludFNpemU6IHNpemUpOw0JCXNldDogI3N0YW5kYXJkTWVu dUZvbnQgdG86IChTdHJpa2VGb250IGZhbWlseU5hbWU6ICdEYXJrbWFwIERlamFWdSBTYW5z JyBwb2ludFNpemU6IHNpemUpOw0JCXNldDogI3N0YW5kYXJkU3lzdGVtRm9udCB0bzogKFN0 cmlrZUZvbnQgZmFtaWx5TmFtZTogJ0RhcmttYXAgRGVqYVZ1IFNhbnMnIHBvaW50U2l6ZTog c2l6ZSk7DQkJc2V0OiAjd2luZG93VGl0bGVGb250IHRvOiAoU3RyaWtlRm9udCBmYW1pbHlO YW1lOiAnRGFya21hcCBEZWphVnUgU2FucycgcG9pbnRTaXplOiAoc2l6ZS8xLjUpKS4hICEN DSFTb2xhcml6ZWRUaGVtZSBjbGFzcyBtZXRob2RzRm9yOiAnaW5zdGFuY2UgY3JlYXRpb24n IHN0YW1wOiAnUEFQIDEyLzgvMjAyMiAxODozMCchDWFkZERhcmtUb29sQ29sb3JzOiB0aGVt ZQ0JIlRvb2wtc3BlY2lmaWMgY29sb3JzLiINCQ0JdGhlbWUgDQkJc2V0OiAjZmFpbHVyZUNv bG9yIGZvcjogI1Rlc3RSdW5uZXIgdG86IHNlbGYgeWVsbG93Ow0JCXNldDogI2Vycm9yQ29s b3IgZm9yOiAjVGVzdFJ1bm5lciB0bzogc2VsZiByZWQ7DQkJc2V0OiAjcGFzc0NvbG9yIGZv cjogI1Rlc3RSdW5uZXIgdG86IHNlbGYgZ3JlZW47DQkJDQkJc2V0OiAjZmFpbHVyZVRleHRD b2xvciBmb3I6ICNUZXN0UnVubmVyIHRvOiBzZWxmIGRhcmtCYWNrZ3JvdW5kOw0JCXNldDog I2Vycm9yVGV4dENvbG9yIGZvcjogI1Rlc3RSdW5uZXIgdG86IHNlbGYgZGFya0JhY2tncm91 bmQ7DQkJc2V0OiAjcGFzc1RleHRDb2xvciBmb3I6ICNUZXN0UnVubmVyIHRvOiBzZWxmIGRh cmtCYWNrZ3JvdW5kLg0JCQ0JdGhlbWUNCQlzZXQ6ICNpZ25vcmVkT3BlcmF0aW9uQXR0cmli dXRlcyBmb3I6ICNNQ09wZXJhdGlvbnNCcm93c2VyIHRvOiB7VGV4dENvbG9yIGNvbG9yOiBz ZWxmIGRhcmtDb250ZW50U2Vjb25kYXJ5fS4NCQ0JIkJyb3dzZXIuIg0JdGhlbWUNCQlzZXQ6 ICNub0NsYXNzQ29tbWVudENvbG9yIGZvcjogI0Jyb3dzZXIgdG86IHNlbGYgcmVkOw0JCXNl dDogI2RlcHJlY2F0ZWRNZXNzYWdlQXR0cmlidXRlcyBmb3I6ICNDb2RlSG9sZGVyIHRvOiB7 IFRleHRFbXBoYXNpcyBzdHJ1Y2tPdXQuIFRleHRDb2xvciBjb2xvcjogc2VsZiBkYXJrQ29u dGVudFNlY29uZGFyeSB9Lg0JCQ0JIkNvZGVIb2xkZXIiDQl0aGVtZQ0JCXNldDogI2luaGVy aXRhbmNlQnV0dG9uQ29sb3JEZWZhdWx0IGZvcjogI0NvZGVIb2xkZXIgdG86IHNlbGYgZGFy a0JhY2tncm91bmQ7DQkJc2V0OiAjaW5oZXJpdGFuY2VCdXR0b25Db2xvckhhc092ZXJyaWRl IGZvcjogI0NvZGVIb2xkZXIgdG86IENvbG9yIHRhbjsNCQlzZXQ6ICNpbmhlcml0YW5jZUJ1 dHRvbkNvbG9ySXNPdmVycmlkZSBmb3I6ICNDb2RlSG9sZGVyIHRvOiBDb2xvciByZWQ7DQkJ c2V0OiAjaW5oZXJpdGFuY2VCdXR0b25Db2xvclNlbmRzU3VwZXIgZm9yOiAjQ29kZUhvbGRl ciB0bzogQ29sb3IgZ3JlZW47DQkJc2V0OiAjaW5oZXJpdGFuY2VCdXR0b25Db2xvcklzT3Zl cnJpZGVBbmRTZW5kc1N1cGVyIGZvcjogI0NvZGVIb2xkZXIgdG86IENvbG9yIGdyZWVuIGRh cmtlcjsNCQlzZXQ6ICNpbmhlcml0YW5jZUJ1dHRvbkNvbG9ySGFzT3ZlcnJpZGVBbmRTZW5k c1N1cGVyIGZvcjogI0NvZGVIb2xkZXIgdG86IENvbG9yIGJsdWU7DQkJc2V0OiAjaW5oZXJp dGFuY2VCdXR0b25Db2xvckhhc092ZXJyaWRlSXNPdmVycmlkZSBmb3I6ICNDb2RlSG9sZGVy IHRvOiBDb2xvciBvcmFuZ2UuISAhDQ0hU29sYXJpemVkVGhlbWUgY2xhc3MgbWV0aG9kc0Zv cjogJ2luc3RhbmNlIGNyZWF0aW9uJyBzdGFtcDogJ1BBUCAxMi85LzIwMjIgMTE6NTgnIQ1h ZGRMaWdodEZvbnRzOiB0aGVtZSB3aXRoRm9udFNpemU6IHNpemUNDQkiU2V0LXVwIGZvbnRz LiINCXRoZW1lDQkJc2V0OiAjYmFsbG9vbkhlbHBGb250IHRvOiAoU3RyaWtlRm9udCBmYW1p bHlOYW1lOiAnQml0bWFwIERlamFWdSBTYW5zJyBwb2ludFNpemU6IChzaXplLzIpKTsNCQlz ZXQ6ICNzdGFuZGFyZEJ1dHRvbkZvbnQgdG86IChTdHJpa2VGb250IGZhbWlseU5hbWU6ICdC aXRtYXAgRGVqYVZ1IFNhbnMnIHBvaW50U2l6ZTogc2l6ZSk7DQkJc2V0OiAjc3RhbmRhcmRD b2RlRm9udCB0bzogKFN0cmlrZUZvbnQgZmFtaWx5TmFtZTogJ0JpdG1hcCBEZWphVnUgU2Fu cycgcG9pbnRTaXplOiBzaXplKTsNCQlzZXQ6ICNzdGFuZGFyZEZsYXBGb250IHRvOiAoU3Ry aWtlRm9udCBmYW1pbHlOYW1lOiAnQml0bWFwIERlamFWdSBTYW5zJyBwb2ludFNpemU6IDcu NSBlbXBoYXNpemVkOiBUZXh0RW1waGFzaXMgYm9sZCBlbXBoYXNpc0NvZGUpOw0JCXNldDog I2hhbG9MYWJlbEZvbnQgdG86IChTdHJpa2VGb250IGZhbWlseU5hbWU6ICdCaXRtYXAgRGVq YVZ1IFNhbnMnIHBvaW50U2l6ZTogc2l6ZSk7DQkJc2V0OiAjc3RhbmRhcmRMaXN0Rm9udCB0 bzogKFN0cmlrZUZvbnQgZmFtaWx5TmFtZTogJ0JpdG1hcCBEZWphVnUgU2FucycgcG9pbnRT aXplOiBzaXplKTsNCQlzZXQ6ICNzdGFuZGFyZE1lbnVGb250IHRvOiAoU3RyaWtlRm9udCBm YW1pbHlOYW1lOiAnQml0bWFwIERlamFWdSBTYW5zJyBwb2ludFNpemU6IHNpemUpOw0JCXNl dDogI3N0YW5kYXJkU3lzdGVtRm9udCB0bzogKFN0cmlrZUZvbnQgZmFtaWx5TmFtZTogJ0Jp dG1hcCBEZWphVnUgU2FucycgcG9pbnRTaXplOiBzaXplKTsNCQlzZXQ6ICN3aW5kb3dUaXRs ZUZvbnQgdG86IChTdHJpa2VGb250IGZhbWlseU5hbWU6ICdCaXRtYXAgRGVqYVZ1IFNhbnMn IHBvaW50U2l6ZTogKHNpemUvMS41KSBlbXBoYXNpemVkOiBUZXh0RW1waGFzaXMgYm9sZCBl bXBoYXNpc0NvZGUpLiEgIQ0NIVNvbGFyaXplZFRoZW1lIGNsYXNzIG1ldGhvZHNGb3I6ICdp bnN0YW5jZSBjcmVhdGlvbicgc3RhbXA6ICdQQVAgMTIvOS8yMDIyIDEyOjAwJyENY3JlYXRl RGFya1dpdGhGb250U2l6ZTogc2l6ZQ0JImRvSXQ6IFtzZWxmIGNyZWF0ZURhcmsgYXBwbHku XSINDQl8IHRoZW1lTmFtZSB8DQl0aGVtZU5hbWUgOj0gJ1NvbGFyaXplZCAoZGFyayknLg0J XiAoc2VsZiBuYW1lZDogdGhlbWVOYW1lKSBpbjogWzp0aGVtZSB8DQkJdGhlbWUgbWVyZ2U6 IChzZWxmIG5hbWVkOiAnU3F1ZWFrJykgb3ZlcndyaXRlOiB0cnVlLg0JCXRoZW1lIG5hbWU6 IHRoZW1lTmFtZS4NDQkJIkdlbmVyYWwgbW9ycGggc3R1ZmYuIg0JCXRoZW1lDQkJCXNldDog I2tleWJvYXJkRm9jdXNDb2xvciBmb3I6ICNNb3JwaCB0bzogc2VsZiBkYXJrQ29udGVudFNl Y29uZGFyeTsNCQkJc2V0OiAja2V5Ym9hcmRGb2N1c1dpZHRoIGZvcjogI01vcnBoIHRvOiAx Lg0NCQl0aGVtZSBzZXQ6ICNiYWNrZ3JvdW5kIGZvcjogI01vcnBoaWNQcm9qZWN0IHRvOiBz ZWxmIGRhcmtCYWNrZ3JvdW5kRm9ybS4NDQkJc2VsZg0JCQlhZGREYXJrRm9udHM6IHRoZW1l IHdpdGhGb250U2l6ZTogc2l6ZTsNCQkJYWRkRGFya1dpbmRvd0NvbG9yczogdGhlbWU7DQkJ CWFkZERhcmtTeW50YXhIaWdobGlnaHRpbmc6IHRoZW1lOw0JCQlhZGREYXJrU2Nyb2xsYWJs ZXM6IHRoZW1lOw0JCQlhZGREYXJrQnV0dG9uczogdGhlbWU7DQkJCWFkZERhcmtEaWFsb2dz OiB0aGVtZTsNCQkJYWRkRGFya01lbnVzQW5kRG9ja2luZ0JhcnM6IHRoZW1lOw0JCQlhZGRE YXJrVG9vbENvbG9yczogdGhlbWUuDQ0JCXRoZW1lXSEgIQ0NIVNvbGFyaXplZFRoZW1lIGNs YXNzIG1ldGhvZHNGb3I6ICdpbnN0YW5jZSBjcmVhdGlvbicgc3RhbXA6ICdQQVAgMTIvOS8y MDIyIDEyOjAwJyENY3JlYXRlTGlnaHRXaXRoRm9udFNpemU6IHNpemUNCSJZb3UgaGF2ZSB0 byBjcmVhdGUgZGFyayBmaXJzdC4NCWRvSXQ6IFtzZWxmIGNyZWF0ZURhcmsuIHNlbGYgY3Jl YXRlTGlnaHQgYXBwbHkuXSINDQl8IHRoZW1lTmFtZSB8DQl0aGVtZU5hbWUgOj0gJ1NvbGFy aXplZCAobGlnaHQpJy4NCV4gKHNlbGYgbmFtZWQ6IHRoZW1lTmFtZSkgaW46IFs6dGhlbWUg fA0JCXRoZW1lIG1lcmdlOiAoc2VsZiBuYW1lZDogJ1NvbGFyaXplZCAoZGFyayknKSBvdmVy d3JpdGU6IHRydWUuDQkJdGhlbWUgbmFtZTogdGhlbWVOYW1lLg0NCQkiR2VuZXJhbCBtb3Jw aCBzdHVmZi4iDQkJdGhlbWUNCQkJc2V0OiAja2V5Ym9hcmRGb2N1c0NvbG9yIGZvcjogI01v cnBoIHRvOiBzZWxmIGxpZ2h0Q29udGVudFNlY29uZGFyeTsNCQkJc2V0OiAja2V5Ym9hcmRG b2N1c1dpZHRoIGZvcjogI01vcnBoIHRvOiAxLg0JCXRoZW1lIHNldDogI2JhY2tncm91bmQg Zm9yOiAjTW9ycGhpY1Byb2plY3QgdG86IHNlbGYgbGlnaHRCYWNrZ3JvdW5kRm9ybS4NDQkJ c2VsZg0JCQlhZGRMaWdodEZvbnRzOiB0aGVtZSB3aXRoRm9udFNpemU6IHNpemU7DQkJCWFk ZExpZ2h0V2luZG93Q29sb3JzOiB0aGVtZTsNCQkJYWRkTGlnaHRTeW50YXhIaWdobGlnaHRp bmc6IHRoZW1lOw0JCQlhZGRMaWdodFNjcm9sbGFibGVzOiB0aGVtZTsNCQkJYWRkTGlnaHRC dXR0b25zOiB0aGVtZTsNCQkJYWRkTGlnaHREaWFsb2dzOiB0aGVtZTsNCQkJYWRkTGlnaHRN ZW51c0FuZERvY2tpbmdCYXJzOiB0aGVtZTsNCQkJYWRkTGlnaHRUb29sQ29sb3JzOiB0aGVt ZS4NDQkJdGhlbWVdISAhDQ0NIVNxdWVha1RoZW1lIGNsYXNzIG1ldGhvZHNGb3I6ICdpbnN0 YW5jZSBjcmVhdGlvbicgc3RhbXA6ICdQQVAgMTIvOS8yMDIyIDEzOjEwJyENYWRkRm9udHM6 IHRoZW1lIHdpdGhGb250U2l6ZTogc2l6ZQ0NCXRoZW1lDQkJc2V0OiAjc3RhbmRhcmRTeXN0 ZW1Gb250IHRvOiAoU3RyaWtlRm9udCBmYW1pbHlOYW1lOiAjQml0c3RyZWFtVmVyYVNhbnNG b3JTcXVlYWsgcG9pbnRTaXplOiBzaXplKTsNCQlzZXQ6ICNzdGFuZGFyZEZpeGVkRm9udCB0 bzogKFRUQ0ZvbnQgZmFtaWx5TmFtZTogI0JpdHN0cmVhbVZlcmFTYW5zTW9ub0ZvclNxdWVh ayBwb2ludFNpemU6IHNpemUpOw0NCQlzZXQ6ICNzdGFuZGFyZENvZGVGb250IHRvOiAoU3Ry aWtlRm9udCBmYW1pbHlOYW1lOiAjQml0c3RyZWFtVmVyYVNhbnNGb3JTcXVlYWsgcG9pbnRT aXplOiBzaXplKTsNCQlzZXQ6ICNzdGFuZGFyZExpc3RGb250IHRvOiAoU3RyaWtlRm9udCBm YW1pbHlOYW1lOiAjQml0c3RyZWFtVmVyYVNhbnNGb3JTcXVlYWsgcG9pbnRTaXplOiBzaXpl KTsNCQlzZXQ6ICNzdGFuZGFyZEJ1dHRvbkZvbnQgdG86IChTdHJpa2VGb250IGZhbWlseU5h bWU6ICNCaXRzdHJlYW1WZXJhU2Fuc0ZvclNxdWVhayBwb2ludFNpemU6IHNpemUpOw0JCXNl dDogI3N0YW5kYXJkTWVudUZvbnQgdG86IChTdHJpa2VGb250IGZhbWlseU5hbWU6ICNCaXRz dHJlYW1WZXJhU2Fuc0ZvclNxdWVhayBwb2ludFNpemU6IHNpemUpOw0JCXNldDogI3N0YW5k YXJkRmxhcEZvbnQgdG86IChTdHJpa2VGb250IGZhbWlseU5hbWU6ICNCaXRzdHJlYW1WZXJh U2Fuc0ZvclNxdWVhayBwb2ludFNpemU6IHNpemUgZW1waGFzaXplZDogVGV4dEVtcGhhc2lz IGJvbGQgZW1waGFzaXNDb2RlKTsNDQkJc2V0OiAjd2luZG93VGl0bGVGb250IHRvOiAoU3Ry aWtlRm9udCBmYW1pbHlOYW1lOiAjQml0c3RyZWFtVmVyYVNhbnNGb3JTcXVlYWsgcG9pbnRT aXplOiAoc2l6ZS8xLjI1KSBlbXBoYXNpemVkOiBUZXh0RW1waGFzaXMgYm9sZCBlbXBoYXNp c0NvZGUpOw0JCXNldDogI2JhbGxvb25IZWxwRm9udCB0bzogKFN0cmlrZUZvbnQgZmFtaWx5 TmFtZTogI0JpdHN0cmVhbVZlcmFTYW5zRm9yU3F1ZWFrIHBvaW50U2l6ZTogKHNpemUvMikp Ow0JCXNldDogI2hhbG9MYWJlbEZvbnQgdG86IChTdHJpa2VGb250IGZhbWlseU5hbWU6ICNC aXRzdHJlYW1WZXJhU2Fuc0ZvclNxdWVhayBwb2ludFNpemU6IDEwLjUpOw0NCQlzZXQ6ICN3 aXphcmRTdGFuZGFyZEZvbnQgdG86IChTdHJpa2VGb250IGZhbWlseU5hbWU6ICNCaXRzdHJl YW1WZXJhU2Fuc0ZvclNxdWVhayBwb2ludFNpemU6IHNpemUpOw0JCXNldDogI3dpemFyZEJ1 dHRvbkZvbnQgdG86IChTdHJpa2VGb250IGZhbWlseU5hbWU6ICNCaXRzdHJlYW1WZXJhU2Fu c0ZvclNxdWVhayBwb2ludFNpemU6IHNpemUpOw0JCXNldDogI3dpemFyZEhlbHBGb250IHRv OiAoU3RyaWtlRm9udCBmYW1pbHlOYW1lOiAjQml0c3RyZWFtVmVyYVNhbnNGb3JTcXVlYWsg cG9pbnRTaXplOiBzaXplKTsNCQlzZXQ6ICN3aXphcmRUaXRsZUZvbnQgdG86IChTdHJpa2VG b250IGZhbWlseU5hbWU6ICNCaXRzdHJlYW1WZXJhU2Fuc0ZvclNxdWVhayBwb2ludFNpemU6 IChzaXplLzEuNSkpLiEgIQ0NIVNxdWVha1RoZW1lIGNsYXNzIG1ldGhvZHNGb3I6ICdpbnN0 YW5jZSBjcmVhdGlvbicgc3RhbXA6ICdQQVAgMTIvOS8yMDIyIDEzOjE5JyENYWRkVG9vbENv bG9yczogdGhlbWUNCSJUb29sLXNwZWNpZmljIGNvbG9ycy4iDQkNCSJTVW5pdCdzIFRlc3RS dW5uZXIuIg0JdGhlbWUgDQkJc2V0OiAjZmFpbHVyZUNvbG9yIGZvcjogI1Rlc3RSdW5uZXIg dG86IENvbG9yIHllbGxvdzsNCQlzZXQ6ICNlcnJvckNvbG9yIGZvcjogI1Rlc3RSdW5uZXIg dG86IENvbG9yIHJlZDsNCQlzZXQ6ICNwYXNzQ29sb3IgZm9yOiAjVGVzdFJ1bm5lciB0bzog Q29sb3IgZ3JlZW47DQkJDQkJZGVyaXZlOiAjZmFpbHVyZVRleHRDb2xvciBmb3I6ICNUZXN0 UnVubmVyIGZyb206ICNQbHVnZ2FibGVUZXh0TW9ycGggYXQ6ICN0ZXh0Q29sb3I7DQkJZGVy aXZlOiAjZXJyb3JUZXh0Q29sb3IgZm9yOiAjVGVzdFJ1bm5lciBmcm9tOiAjUGx1Z2dhYmxl VGV4dE1vcnBoIGF0OiAjdGV4dENvbG9yOw0JCWRlcml2ZTogI3Bhc3NUZXh0Q29sb3IgZm9y OiAjVGVzdFJ1bm5lciBmcm9tOiAjUGx1Z2dhYmxlVGV4dE1vcnBoIGF0OiAjdGV4dENvbG9y Lg0JCQ0JIk1vbnRpY2VsbG8gVG9vbHMuIg0JdGhlbWUNCQlzZXQ6ICNyZXZlcnRlZE9wZXJh dGlvbkF0dHJpYnV0ZXMgZm9yOiAjTUNPcGVyYXRpb25zQnJvd3NlciB0bzoge1RleHRFbXBo YXNpcyBzdHJ1Y2tPdXR9Ow0JCXNldDogI2lnbm9yZWRPcGVyYXRpb25BdHRyaWJ1dGVzIGZv cjogI01DT3BlcmF0aW9uc0Jyb3dzZXIgdG86IHtUZXh0Q29sb3IgY29sb3I6IENvbG9yIGdy YXl9Lg0JCSJzZXQ6ICNyZWplY3RlZE9wZXJhdGlvbkF0dHJpYnV0ZXMgZm9yOiAjTUNPcGVy YXRpb25zQnJvd3NlciB0bzoge1RleHRFbXBoYXNpcyBzdHJ1Y2tPdXR9Ow0JCXNldDogI2Fj Y2VwdGVkT3BlcmF0aW9uQXR0cmlidXRlcyBmb3I6ICNNQ09wZXJhdGlvbnNCcm93c2VyIHRv OiB7VGV4dEVtcGhhc2lzIHVuZGVybGluZWR9Ow0JCXNldDogI2NvbmZsaWN0aW5nT3BlcmF0 aW9uQXR0cmlidXRlcyBmb3I6ICNNQ09wZXJhdGlvbnNCcm93c2VyIHRvOiB7VGV4dEVtcGhh c2lzIGJvbGR9LiINCQkNCSJIYWxvcy4iDQl0aGVtZQ0JCWRlcml2ZTogI2JvcmRlckNvbG9y IGZvcjogI0hhbG9Nb3JwaCBmcm9tOiAjTWVudUl0ZW1Nb3JwaCBhdDogI3NlbGVjdGlvbkNv bG9yIGRvOiBbOmMgfCBjIGFscGhhOiAwLjhdOw0JCWRlcml2ZTogI2JvcmRlckNvbG9yIGZv cjogI1NlbGVjdGlvbk1vcnBoIGZyb206ICNNZW51SXRlbU1vcnBoIGF0OiAjc2VsZWN0aW9u Q29sb3IgZG86IFs6YyB8IGMgdHdpY2VEYXJrZXIgYWxwaGE6IDAuNzVdOw0JCWRlcml2ZTog I2NvbG9yIGZvcjogI1NlbGVjdGlvbk1vcnBoIGZyb206ICNNZW51SXRlbU1vcnBoIGF0OiAj c2VsZWN0aW9uQ29sb3IgZG86IFs6YyB8IGMgYWxwaGE6IDAuMDhdLg0JDQkiQ29kZS1icm93 c2luZyB0b29scy4iDQl0aGVtZQ0JCXNldDogI25vQ2xhc3NDb21tZW50Q29sb3IgZm9yOiAj QnJvd3NlciB0bzogQ29sb3IgcmVkOw0JCXNldDogI2RlcHJlY2F0ZWRNZXNzYWdlQXR0cmli dXRlcyBmb3I6ICNDb2RlSG9sZGVyIHRvOiB7IFRleHRFbXBoYXNpcyBzdHJ1Y2tPdXQuIFRl eHRDb2xvciBncmF5IH0uDQ0JIk9iamVjdHMgVG9vbC4iDQl0aGVtZQ0JCWRlcml2ZTogI2Jv cmRlcldpZHRoIGZvcjogI09iamVjdHNUb29sIGZyb206ICNNZW51TW9ycGg7DQkJZGVyaXZl OiAjYm9yZGVyQ29sb3IgZm9yOiAjT2JqZWN0c1Rvb2wgZnJvbTogI01lbnVNb3JwaDsNCQlk ZXJpdmU6ICNib3JkZXJTdHlsZSBmb3I6ICNPYmplY3RzVG9vbCBmcm9tOiAjTWVudU1vcnBo Ow0JCWRlcml2ZTogI2NvbG9yIGZvcjogI09iamVjdHNUb29sIGZyb206ICNNZW51TW9ycGg7 DQkJZGVyaXZlOiAjdGV4dENvbG9yIGZvcjogI09iamVjdHNUb29sIGZyb206ICNNZW51SXRl bU1vcnBoOw0JCWRlcml2ZTogI3NlbGVjdGlvblRleHRDb2xvciBmb3I6ICNPYmplY3RzVG9v bCBmcm9tOiAjTWVudUl0ZW1Nb3JwaC4NCQ0JIkNvZGVIb2xkZXIiDQl0aGVtZQ0JCXNldDog I2luaGVyaXRhbmNlQnV0dG9uQ29sb3JEZWZhdWx0IGZvcjogI0NvZGVIb2xkZXIgdG86IChD b2xvciBncmF5OiAwLjkpOw0JCXNldDogI2luaGVyaXRhbmNlQnV0dG9uQ29sb3JIYXNPdmVy cmlkZSBmb3I6ICNDb2RlSG9sZGVyIHRvOiBDb2xvciB0YW47DQkJc2V0OiAjaW5oZXJpdGFu Y2VCdXR0b25Db2xvcklzT3ZlcnJpZGUgZm9yOiAjQ29kZUhvbGRlciB0bzogQ29sb3IgcmVk Ow0JCXNldDogI2luaGVyaXRhbmNlQnV0dG9uQ29sb3JTZW5kc1N1cGVyIGZvcjogI0NvZGVI b2xkZXIgdG86IENvbG9yIGdyZWVuOw0JCXNldDogI2luaGVyaXRhbmNlQnV0dG9uQ29sb3JJ c092ZXJyaWRlQW5kU2VuZHNTdXBlciBmb3I6ICNDb2RlSG9sZGVyIHRvOiBDb2xvciBncmVl biBkYXJrZXI7DQkJc2V0OiAjaW5oZXJpdGFuY2VCdXR0b25Db2xvckhhc092ZXJyaWRlQW5k U2VuZHNTdXBlciBmb3I6ICNDb2RlSG9sZGVyIHRvOiAoQ29sb3IgcjogMC4zIGc6MC4zIGI6 IDEuMCk7DQkJc2V0OiAjaW5oZXJpdGFuY2VCdXR0b25Db2xvckhhc092ZXJyaWRlSXNPdmVy cmlkZSBmb3I6ICNDb2RlSG9sZGVyIHRvOiBDb2xvciBvcmFuZ2UuDSEgIQ0NIVNxdWVha1Ro ZW1lIGNsYXNzIG1ldGhvZHNGb3I6ICdpbnN0YW5jZSBjcmVhdGlvbicgc3RhbXA6ICdQQVAg MTIvOS8yMDIyIDEzOjI0JyENY3JlYXRlRHVsbGVyV2l0aEZvbnRTaXplOiBzaXplDQkic2Vs ZiBjcmVhdGVEdWxsZXIgYXBwbHkiDQkNCXwgbmFtZSB8DQluYW1lIDo9ICdTcXVlYWsgKGR1 bGxlciknLg0JXiAoc2VsZiBuYW1lZDpuYW1lKSBpbjogWzp0aGVtZSB8DQkJdGhlbWUgbWVy Z2U6IChzZWxmIG5hbWVkOiAnU3F1ZWFrJykgb3ZlcndyaXRlOiB0cnVlLg0JCXRoZW1lIG5h bWU6IG5hbWUuDQkJc2VsZg0JCQlhZGRGb250czogdGhlbWUgd2l0aEZvbnRTaXplOiBzaXpl OyANCQkJYWRkRHVsbGVyV2luZG93Q29sb3JzOiB0aGVtZTsNCQkJYWRkRHVsbGVyU2Nyb2xs YWJsZXM6IHRoZW1lOw0JCQlhZGREdWxsZXJEaWFsb2dzOiB0aGVtZTsNCQkJYWRkRHVsbGVy TWVudXNBbmREb2NraW5nQmFyczogdGhlbWU7DQkJCWFkZER1bGxlckJ1dHRvbnM6IHRoZW1l Ow0JCQlhZGREdWxsZXJUb29sQ29sb3JzOiB0aGVtZS4NCQkJDQkJdGhlbWUgc2V0OiAjY29s b3IgZm9yOiAjVGV4dEFjdGlvbiB0bzogQ29sb3Igb2NlYW4uDQkJDQkJdGhlbWVdISAhDQ0h U3F1ZWFrVGhlbWUgY2xhc3MgbWV0aG9kc0ZvcjogJ2luc3RhbmNlIGNyZWF0aW9uJyBzdGFt cDogJ1BBUCAxMi85LzIwMjIgMTE6NTcnIQ1jcmVhdGVXaXRoRm9udFNpemU6IHNpemUNCSJU aGlzIGlzIHRoZSBkZWZhdWx0IHRoZW1lIGZvciBTcXVlYWsuDQkNCXNlbGYgY3JlYXRlIGFw cGx5LiAiDQkNCV4gKHNlbGYgbmFtZWQ6ICdTcXVlYWsnKSBpbjogWzp0aGVtZSB8CQkNCQki R2VuZXJhbCBtb3JwaCBzdHVmZi4iDQkJdGhlbWUNCQkJc2V0OiAja2V5Ym9hcmRGb2N1c0Nv bG9yIGZvcjogI01vcnBoIHRvOiAoVHJhbnNsdWNlbnRDb2xvciByOiAwLjMgZzogMC41IGI6 IDAuNSBhbHBoYTogMC41KTsNCQkJc2V0OiAja2V5Ym9hcmRGb2N1c1dpZHRoIGZvcjogI01v cnBoIHRvOiAyOw0JCQlzZXQ6ICNzb2Z0U2hhZG93Q29sb3IgZm9yOiAjTW9ycGggdG86IChD b2xvciBibGFjayBhbHBoYTogMC4wMSk7DQkJCXNldDogI3NvZnRTaGFkb3dPZmZzZXQgZm9y OiAjTW9ycGggdG86ICgxMEA4IGNvcm5lcjogMTBAMTIpOw0JCQlzZXQ6ICNoYXJkU2hhZG93 Q29sb3IgZm9yOiAjTW9ycGggdG86IChDb2xvciBibGFjayBhbHBoYTogMC41KTsNCQkJc2V0 OiAjaGFyZFNoYWRvd09mZnNldCBmb3I6ICNNb3JwaCB0bzogMUAxLg0JCQkNCQl0aGVtZSBz ZXQ6ICNiYWNrZ3JvdW5kIGZvcjogI01vcnBoaWNQcm9qZWN0IHRvOiBzZWxmIGxpbmVuYmx1 ZS4NCQkJDQkJc2VsZg0JCQlhZGRGb250czogdGhlbWUgd2l0aEZvbnRTaXplOiBzaXplOw0J CQlhZGRXaW5kb3dDb2xvcnM6IHRoZW1lOw0JCQlhZGRTeW50YXhIaWdobGlnaHRpbmc6IHRo ZW1lOw0JCQlhZGRNZW51c0FuZERvY2tpbmdCYXJzOiB0aGVtZTsNCQkJYWRkRGlhbG9nczog dGhlbWU7DQkJCWFkZEJ1dHRvbnM6IHRoZW1lOw0JCQlhZGRTY3JvbGxhYmxlczogdGhlbWU7 DQkJCWFkZFRvb2xDb2xvcnM6IHRoZW1lOw0JCQlhZGRNVkM6IHRoZW1lLg0JCQ0JCXRoZW1l XSEgIQ0NDSFUcmltVGhlbWUgY2xhc3MgbWV0aG9kc0ZvcjogJ2luc3RhbmNlIGNyZWF0aW9u JyBzdGFtcDogJ1BBUCAxMi85LzIwMjIgMTM6MDknIQ1hZGRGb250czogdGhlbWUgd2l0aEZv bnRTaXplOiBzaXplDQ0JIlNldC11cCBmb250cy4iDQl0aGVtZQ0JCXNldDogI2JhbGxvb25I ZWxwRm9udCB0bzogKFN0cmlrZUZvbnQgZmFtaWx5TmFtZTogJ0JpdHN0cmVhbVZlcmFTYW5z Rm9yU3F1ZWFrJyBwb2ludFNpemU6IChzaXplLzIpKTsNCQlzZXQ6ICNzdGFuZGFyZEJ1dHRv bkZvbnQgdG86IChTdHJpa2VGb250IGZhbWlseU5hbWU6ICdCaXRzdHJlYW1WZXJhU2Fuc0Zv clNxdWVhaycgcG9pbnRTaXplOiBzaXplKTsNCQlzZXQ6ICNzdGFuZGFyZENvZGVGb250IHRv OiAoU3RyaWtlRm9udCBmYW1pbHlOYW1lOiAnQml0c3RyZWFtVmVyYVNhbnNGb3JTcXVlYWsn IHBvaW50U2l6ZTogc2l6ZSk7DQkJc2V0OiAjc3RhbmRhcmRGbGFwRm9udCB0bzogKFN0cmlr ZUZvbnQgZmFtaWx5TmFtZTogJ0JpdHN0cmVhbVZlcmFTYW5zRm9yU3F1ZWFrJyBwb2ludFNp emU6IDcuNSBlbXBoYXNpemVkOiBUZXh0RW1waGFzaXMgYm9sZCBlbXBoYXNpc0NvZGUpOw0J CXNldDogI2hhbG9MYWJlbEZvbnQgdG86IChTdHJpa2VGb250IGZhbWlseU5hbWU6ICdCaXRz dHJlYW1WZXJhU2Fuc0ZvclNxdWVhaycgcG9pbnRTaXplOiAxMC41KTsNCQlzZXQ6ICNzdGFu ZGFyZExpc3RGb250IHRvOiAoU3RyaWtlRm9udCBmYW1pbHlOYW1lOiAnQml0c3RyZWFtVmVy YVNhbnNGb3JTcXVlYWsnIHBvaW50U2l6ZTogc2l6ZSk7DQkJc2V0OiAjc3RhbmRhcmRNZW51 Rm9udCB0bzogKFN0cmlrZUZvbnQgZmFtaWx5TmFtZTogJ0JpdHN0cmVhbVZlcmFTYW5zRm9y U3F1ZWFrJyBwb2ludFNpemU6IHNpemUpOw0JCXNldDogI3N0YW5kYXJkU3lzdGVtRm9udCB0 bzogKFN0cmlrZUZvbnQgZmFtaWx5TmFtZTogJ0JpdHN0cmVhbVZlcmFTYW5zRm9yU3F1ZWFr JyBwb2ludFNpemU6IHNpemUpOw0JCXNldDogI3dpbmRvd1RpdGxlRm9udCB0bzogKFN0cmlr ZUZvbnQgZmFtaWx5TmFtZTogJ0JpdHN0cmVhbVZlcmFTYW5zRm9yU3F1ZWFrJyBwb2ludFNp emU6IHNpemUpLiEgIQ0NIVRyaW1UaGVtZSBjbGFzcyBtZXRob2RzRm9yOiAnaW5zdGFuY2Ug Y3JlYXRpb24nIHN0YW1wOiAnUEFQIDEyLzkvMjAyMiAxMzoyMichDWFkZFRvb2xDb2xvcnM6 IHRoZW1lDQkiVG9vbC1zcGVjaWZpYyBjb2xvcnMuIg0JDQkiU1VuaXQncyBUZXN0UnVubmVy LiINCXRoZW1lIA0JCXNldDogI2ZhaWx1cmVDb2xvciBmb3I6ICNUZXN0UnVubmVyIHRvOiBz ZWxmIHllbGxvdzsNCQlzZXQ6ICNlcnJvckNvbG9yIGZvcjogI1Rlc3RSdW5uZXIgdG86IHNl bGYgcmVkOw0JCXNldDogI3Bhc3NDb2xvciBmb3I6ICNUZXN0UnVubmVyIHRvOiBzZWxmIGdy ZWVuLg0JCQ0JIk1vbnRpY2VsbG8gVG9vbHMuIg0JdGhlbWUNCQlzZXQ6ICNyZXZlcnRlZE9w ZXJhdGlvbkF0dHJpYnV0ZXMgZm9yOiAjTUNPcGVyYXRpb25zQnJvd3NlciB0bzoge1RleHRF bXBoYXNpcyBzdHJ1Y2tPdXR9Ow0JCXNldDogI2lnbm9yZWRPcGVyYXRpb25BdHRyaWJ1dGVz IGZvcjogI01DT3BlcmF0aW9uc0Jyb3dzZXIgdG86IHtUZXh0Q29sb3IgY29sb3I6IHNlbGYg Z3JheTEyOH0uDQkJDQkiQnJvd3Nlci4iDQl0aGVtZQ0JCXNldDogI25vQ2xhc3NDb21tZW50 Q29sb3IgZm9yOiAjQnJvd3NlciB0bzogc2VsZiByZWQ7DQkJc2V0OiAjZGVwcmVjYXRlZE1l c3NhZ2VBdHRyaWJ1dGVzIGZvcjogI0NvZGVIb2xkZXIgdG86IHsgVGV4dEVtcGhhc2lzIHN0 cnVja091dC4gVGV4dENvbG9yIGNvbG9yOiBzZWxmIGdyYXkxMjggfS4NCQkNCXRoZW1lDQkJ c2V0OiAjaW5oZXJpdGFuY2VCdXR0b25Db2xvckRlZmF1bHQgZm9yOiAjQ29kZUhvbGRlciB0 bzogc2VsZiBncmF5Mjc7DQkJc2V0OiAjaW5oZXJpdGFuY2VCdXR0b25Db2xvckhhc092ZXJy aWRlIGZvcjogI0NvZGVIb2xkZXIgdG86ICAoQ29sb3IgcjogMC41MzMgZzogMC41MzMgYjog MC4zMzMpOw0JCXNldDogI2luaGVyaXRhbmNlQnV0dG9uQ29sb3JJc092ZXJyaWRlIGZvcjog I0NvZGVIb2xkZXIgdG86IHNlbGYgcmVkOw0JCXNldDogI2luaGVyaXRhbmNlQnV0dG9uQ29s b3JTZW5kc1N1cGVyIGZvcjogI0NvZGVIb2xkZXIgdG86IHNlbGYgZ3JlZW47DQkJc2V0OiAj aW5oZXJpdGFuY2VCdXR0b25Db2xvcklzT3ZlcnJpZGVBbmRTZW5kc1N1cGVyIGZvcjogI0Nv ZGVIb2xkZXIgdG86IHNlbGYgZ3JlZW47DQkJc2V0OiAjaW5oZXJpdGFuY2VCdXR0b25Db2xv ckhhc092ZXJyaWRlQW5kU2VuZHNTdXBlciBmb3I6ICNDb2RlSG9sZGVyIHRvOiBzZWxmIGJs dWU7DQkJc2V0OiAjaW5oZXJpdGFuY2VCdXR0b25Db2xvckhhc092ZXJyaWRlSXNPdmVycmlk ZSBmb3I6ICNDb2RlSG9sZGVyIHRvOiBzZWxmIG9yYW5nZS4NISAhDQ0hVHJpbVRoZW1lIGNs YXNzIG1ldGhvZHNGb3I6ICdpbnN0YW5jZSBjcmVhdGlvbicgc3RhbXA6ICdQQVAgMTIvOS8y MDIyIDExOjU2JyENY3JlYXRlV2l0aEZvbnRTaXplOiBzaXplDQkiZG9JdDogW3NlbGYgY3Jl YXRlIGFwcGx5Ll0iDQ0JfCB0aGVtZU5hbWUgfA0JdGhlbWVOYW1lIDo9ICdUcmltIChkYXJr KScuDQleIChzZWxmIG5hbWVkOiB0aGVtZU5hbWUpIGluOiBbOnRoZW1lIHwNCQl0aGVtZSBt ZXJnZTogKHNlbGYgbmFtZWQ6ICdTcXVlYWsnKSBvdmVyd3JpdGU6IHRydWUuDQkJdGhlbWUg bmFtZTogdGhlbWVOYW1lLg0NCQkiR2VuZXJhbCBtb3JwaCBzdHVmZi4iDQkJdGhlbWUNCQkJ c2V0OiAja2V5Ym9hcmRGb2N1c0NvbG9yIGZvcjogI01vcnBoIHRvOiBzZWxmIGJsdWU7DQkJ CXNldDogI2tleWJvYXJkRm9jdXNXaWR0aCBmb3I6ICNNb3JwaCB0bzogMS4NDQkJdGhlbWUg c2V0OiAjYmFja2dyb3VuZCBmb3I6ICNNb3JwaGljUHJvamVjdCB0bzogc2VsZiBiYWNrZ3Jv dW5kRm9ybS4NDQkJc2VsZiBhZGRGb250czogdGhlbWUgd2l0aEZvbnRTaXplOiBzaXplLg0J CXNlbGYgYWRkV2luZG93Q29sb3JzOiB0aGVtZS4NCQlzZWxmIGFkZFN5bnRheEhpZ2hsaWdo dGluZzogdGhlbWUuDQkJc2VsZiBhZGRNZW51c0FuZERvY2tpbmdCYXJzOiB0aGVtZS4NCQlz ZWxmIGFkZERpYWxvZ3M6IHRoZW1lLg0JCXNlbGYgYWRkQnV0dG9uczogdGhlbWUuDQkJc2Vs ZiBhZGRTY3JvbGxhYmxlczogdGhlbWUuDQkJc2VsZiBhZGRUb29sQ29sb3JzOiB0aGVtZS4N DQkJdGhlbWVdISAhDQ1TcXVlYWtUaGVtZSBjbGFzcyByZW1vdmVTZWxlY3RvcjogI2NyZWF0 ZXdpdGhGb250U2l6ZTohDQ== --==CelesteAttachment26984==--
'From Squeak6.1alpha of 7 December 2022 [latest update: #22301] on 9 December 2022 at 2:10:59 pm'! "Change Set: InheritanceButtonInBrowser Date: 9 December 2022 Author: Pete
Changes to the themes and CodeHolder to use the themes' colors on the Inheritance button. Updated colors in the theme so that the button text looks reasonable. The color changes are in the themes' addToolColors: method.
Added methods to the themes to start with a different font size (a parameter to the new methods). Mainly a convinience for me to allow me to test with larger font settings as the default ones are microscopic in my display.
Regards Pete!
!CodeHolder methodsFor: 'toolbuilder' stamp: 'PAP 12/8/2022 18:53'! inheritanceButtonColor "Check to see if the currently-viewed method has a super send or an override, and if so, change screen feedback, unless the #decorateBrowserButtons says not to."
| flags aColor cm defaultButtonColor | defaultButtonColor := (UserInterfaceTheme current get: #color for: #PluggableButtonMorph) ifNil: [Color gray: 0.91]. cm := currentCompiledMethod. ((cm isKindOf: CompiledMethod) and: [Preferences decorateBrowserButtons]) ifFalse: [^ defaultButtonColor]. "This table duplicates the old logic, but adds two new colors for the cases where there is a superclass definition, but this method doesn't call it."
flags := 0. self isThisAnOverride ifTrue: [ flags := flags bitOr: 4 ]. cm sendsToSuper ifTrue: [ flags := flags bitOr: 2 ]. self isThereAnOverride ifTrue: [ flags := flags bitOr: 1 ]. aColor := { defaultButtonColor. (UserInterfaceTheme current get: #inheritanceButtonColorHasOverride for: #CodeHolder). (UserInterfaceTheme current get: #inheritanceButtonColorSendsSuper for: #CodeHolder). (UserInterfaceTheme current get: #inheritanceButtonColorHasOverrideAndSendsSuper for: #CodeHolder). (UserInterfaceTheme current get: #inheritanceButtonColorIsOverride for: #CodeHolder). "has super but doesn't call it" (UserInterfaceTheme current get: #inheritanceButtonColorHasOverrideIsOverride for: #CodeHolder). "has sub; has super but doesn't call it" (UserInterfaceTheme current get: #inheritanceButtonColorIsOverrideAndSendsSuper for: #CodeHolder). (UserInterfaceTheme current get: #inheritanceButtonColorHasOverrideAndSendsSuper for: #CodeHolder). } at: flags + 1.
^aColor! !
!CommunityTheme class methodsFor: 'instance creation' stamp: 'PAP 12/9/2022 13:44'! addDarkFonts: aUserInterfaceTheme withFontSize: size "Set-up fonts." aUserInterfaceTheme set: #balloonHelpFont to: (StrikeFont familyName: 'BitstreamVeraSansForSqueak' pointSize: 7.5 emphasized: TextEmphasis italic emphasisCode); set: #standardButtonFont to: (StrikeFont familyName: 'BitstreamVeraSansForSqueak' pointSize: size); set: #standardCodeFont to: (StrikeFont familyName: 'BitstreamVeraSansForSqueak' pointSize: size); set: #standardFlapFont to: (StrikeFont familyName: 'BitstreamVeraSansForSqueak' pointSize: 7.5 emphasized: TextEmphasis bold emphasisCode); set: #haloLabelFont to: (StrikeFont familyName: 'BitstreamVeraSansForSqueak' pointSize: 10.5); set: #standardListFont to: (StrikeFont familyName: 'BitstreamVeraSansForSqueak' pointSize: size); set: #standardMenuFont to: (StrikeFont familyName: 'BitstreamVeraSansForSqueak' pointSize: size); set: #standardSystemFont to: (StrikeFont familyName: 'BitstreamVeraSansForSqueak' pointSize: size); set: #windowTitleFont to: (StrikeFont familyName: 'BitstreamVeraSansForSqueak' pointSize: (size/1.3) emphasized: TextEmphasis bold emphasisCode)! !
!CommunityTheme class methodsFor: 'instance creation' stamp: 'PAP 12/9/2022 13:28'! addDarkToolColors: theme "Tool-specific colors." theme set: #failureColor for: #TestRunner to: self dbYellow; set: #errorColor for: #TestRunner to: self dbRed; set: #passColor for: #TestRunner to: self dbGreen. "Browser." theme set: #noClassCommentColor for: #Browser to: self dbRed; set: #deprecatedMessageAttributes for: #CodeHolder to: { TextEmphasis struckOut. TextColor color: self dbGray }. "CodeHolder" theme set: #inheritanceButtonColorDefault for: #CodeHolder to: self dbBackground; set: #inheritanceButtonColorHasOverride for: #CodeHolder to: Color tan muchDarker; set: #inheritanceButtonColorIsOverride for: #CodeHolder to: Color red muchDarker; set: #inheritanceButtonColorSendsSuper for: #CodeHolder to: Color green muchDarker; set: #inheritanceButtonColorIsOverrideAndSendsSuper for: #CodeHolder to: Color green muchDarker; set: #inheritanceButtonColorHasOverrideAndSendsSuper for: #CodeHolder to: Color blue muchDarker; set: #inheritanceButtonColorHasOverrideIsOverride for: #CodeHolder to: Color orange muchDarker. ! !
!CommunityTheme class methodsFor: 'instance creation' stamp: 'PAP 12/9/2022 11:49'! createDarkWithFontSize: size "self createDark apply." | name | name := 'Community (dark)'. ^ (self named: name) in: [:theme | theme merge: (self named: 'Squeak') overwrite: true. theme name: name. "General morph stuff." theme set: #borderColor for: #ScrollPane to: (Color transparent) ; set: #keyboardFocusColor for: #Morph to: (self dbSelection adjustSaturation: -0.3 brightness: 0.10); set: #keyboardFocusWidth for: #Morph to: 1; set: #softShadowColor for: #Morph to: (self dbSelection muchLighter alpha: 0.025); set: #softShadowOffset for: #Morph to: (10@8 corner: 10@12); set: #hardShadowColor for: #Morph to: (self dbSelection muchLighter alpha: 0.02); set: #hardShadowOffset for: #Morph to: 1@1. self addDarkFonts: theme withFontSize: size; addDarkWindowColors: theme; addDarkSyntaxHighlighting: theme; addDarkScrollables: theme; addDarkButtons: theme; addDarkDialogs: theme; addDarkMenusAndDockingBars: theme; addDarkToolColors: theme. theme]! !
!MonokaiTheme class methodsFor: 'instance creation' stamp: 'PAP 12/9/2022 13:05'! addDarkFonts: theme withFontSize: size
"Set-up fonts." theme set: #balloonHelpFont to: (StrikeFont familyName: 'BitstreamVeraSansForSqueak' pointSize: (size/2)); set: #standardButtonFont to: (StrikeFont familyName: 'BitstreamVeraSansForSqueak' pointSize: size); set: #standardCodeFont to: (StrikeFont familyName: 'BitstreamVeraSansForSqueak' pointSize: size); set: #standardFlapFont to: (StrikeFont familyName: 'BitstreamVeraSansForSqueak' pointSize: 7.5 emphasized: TextEmphasis bold emphasisCode); set: #haloLabelFont to: (StrikeFont familyName: 'BitstreamVeraSansForSqueak' pointSize: 10.5); set: #standardListFont to: (StrikeFont familyName: 'BitstreamVeraSansForSqueak' pointSize: size); set: #standardMenuFont to: (StrikeFont familyName: 'BitstreamVeraSansForSqueak' pointSize: size); set: #standardSystemFont to: (StrikeFont familyName: 'BitstreamVeraSansForSqueak' pointSize: size); set: #windowTitleFont to: (StrikeFont familyName: 'BitstreamVeraSansForSqueak' pointSize: (size/1.5)).! !
!MonokaiTheme class methodsFor: 'instance creation' stamp: 'PAP 12/9/2022 12:03'! addDarkToolColors: theme "Tool-specific colors." theme set: #failureColor for: #TestRunner to: self yellow; set: #errorColor for: #TestRunner to: self red; set: #passColor for: #TestRunner to: self green; set: #failureTextColor for: #TestRunner to: self backgroundColor; set: #errorTextColor for: #TestRunner to: self backgroundColor; set: #passTextColor for: #TestRunner to: self backgroundColor. theme set: #ignoredOperationAttributes for: #MCOperationsBrowser to: {TextColor color: self grayLight}. "Browser." theme set: #noClassCommentColor for: #Browser to: self red; set: #deprecatedMessageAttributes for: #CodeHolder to: { TextEmphasis struckOut. TextColor color: self grayLight }. "CodeHolder" theme set: #inheritanceButtonColorDefault for: #CodeHolder to: self backgroundColor ; set: #inheritanceButtonColorHasOverride for: #CodeHolder to: (Color r: 0.6 g: 0.6 b: 0.3); set: #inheritanceButtonColorIsOverride for: #CodeHolder to: Color red muchDarker; set: #inheritanceButtonColorSendsSuper for: #CodeHolder to: Color green muchDarker; set: #inheritanceButtonColorIsOverrideAndSendsSuper for: #CodeHolder to: Color green muchDarker; set: #inheritanceButtonColorHasOverrideAndSendsSuper for: #CodeHolder to: Color blue muchDarker; set: #inheritanceButtonColorHasOverrideIsOverride for: #CodeHolder to: Color orange muchDarker. ! !
!MonokaiTheme class methodsFor: 'instance creation' stamp: 'mt 8/16/2016 13:24'! addDarkWindowColors: theme "self createDark apply." theme set: #uniformWindowColor for: #Model to:( self invisibleColor adjustBrightness: 0.16) "lighter twice"; set: #unfocusedWindowColorModifier for: #SystemWindow to: [ [:color | color adjustBrightness: -0.16 "darker twice"] ]; set: #unfocusedLabelColor for: #SystemWindow to: [ Model useColorfulWindows ifTrue: [(Color r: 0.285 g: 0.282 b: 0.242) "invisible color"] ifFalse: [(Color r: 0.972 g: 0.972 b: 0.948) "foreground color"] ]; set: #focusedLabelColor for: #SystemWindow to: [ Model useColorfulWindows ifTrue: [(Color r: 0.152 g: 0.156 b: 0.133) "background color"] ifFalse: [(Color r: 0.901 g: 0.858 b: 0.455) "yellow"] ];
set: #customWindowColor for: #Browser to: self green duller; set: #customWindowColor for: #ChangeList to: self blue duller; set: #customWindowColor for: #ChangeSorter to: self blue duller; set: #customWindowColor for: #ChatNotes to: self magenta duller; set: #customWindowColor for: #ClassCommentVersionsBrowser to: self violet duller; set: #customWindowColor for: #Debugger to: self red duller; set: #customWindowColor for: #DualChangeSorter to: self blue duller; set: #customWindowColor for: #FileContentsBrowser to: self yellow duller; set: #customWindowColor for: #FileList to: self yellow duller; set: #customWindowColor for: #InstanceBrowser to: self cyan duller; set: #customWindowColor for: #Lexicon to: self cyan duller; set: #customWindowColor for: #MCTool to: self violet duller; set: #customWindowColor for: #MessageNames to: self green duller; set: #customWindowColor for: #MessageSet to: self cyan duller; set: #customWindowColor for: #PackagePaneBrowser to: self green duller; set: #customWindowColor for: #PluggableFileList to: self yellow duller; set: #customWindowColor for: #PreferenceBrowser to: self cyan duller; set: #customWindowColor for: #SMLoader to: self orange duller; set: #customWindowColor for: #SMLoaderPlus to: self orange duller; set: #customWindowColor for: #SMReleaseBrowser to: self orange duller; set: #customWindowColor for: #ScriptingDomain to: self yellow duller; set: #customWindowColor for: #SelectorBrowser to: self cyan duller; set: #customWindowColor for: #StringHolder to: self yellow duller; set: #customWindowColor for: #TestRunner to: self orange duller; set: #customWindowColor for: #TranscriptStream to: self orange duller; set: #customWindowColor for: #VersionsBrowser to: self violet duller.! !
!MonokaiTheme class methodsFor: 'instance creation' stamp: 'PAP 12/8/2022 14:37'! createDark "self createDark apply." | themeName | themeName := 'Monokai (dark)'. ^ (self named: themeName) in: [:theme | theme merge: (self named: 'Squeak') overwrite: true. theme name: themeName. "General morph stuff." theme set: #keyboardFocusColor for: #Morph to: self yellow; set: #keyboardFocusWidth for: #Morph to: 1.
theme set: #background for: #SystemWindow to: self backgroundColor.
self addDarkFonts: theme; addDarkWindowColors: theme; addDarkSyntaxHighlighting: theme; addDarkScrollables: theme; addDarkButtons: theme; addDarkDialogs: theme; addDarkMenusAndDockingBars: theme; addDarkToolColors: theme.
theme]! !
!MonokaiTheme class methodsFor: 'instance creation' stamp: 'PAP 12/9/2022 11:46'! createDarkWithFontSize: size "self createDark apply." | themeName | themeName := 'Monokai (dark)'. ^ (self named: themeName) in: [:theme | theme merge: (self named: 'Squeak') overwrite: true. theme name: themeName. "General morph stuff." theme set: #keyboardFocusColor for: #Morph to: self yellow; set: #keyboardFocusWidth for: #Morph to: 1.
theme set: #background for: #SystemWindow to: self backgroundColor.
self addDarkFonts: theme withFontSize: size; addDarkWindowColors: theme; addDarkSyntaxHighlighting: theme; addDarkScrollables: theme; addDarkButtons: theme; addDarkDialogs: theme; addDarkMenusAndDockingBars: theme; addDarkToolColors: theme.
theme]! !
!SolarizedTheme class methodsFor: 'instance creation' stamp: 'PAP 12/9/2022 11:59'! addDarkFonts: theme withFontSize: size
"Set-up fonts." theme set: #balloonHelpFont to: (StrikeFont familyName: 'Darkmap DejaVu Sans' pointSize: (size/2)); set: #standardButtonFont to: (StrikeFont familyName: 'Darkmap DejaVu Sans' pointSize: size); set: #standardCodeFont to: (StrikeFont familyName: 'Darkmap DejaVu Sans' pointSize: size); set: #standardFlapFont to: (StrikeFont familyName: 'Darkmap DejaVu Sans' pointSize: 7.5 emphasized: TextEmphasis bold emphasisCode); set: #haloLabelFont to: (StrikeFont familyName: 'Darkmap DejaVu Sans' pointSize: size); set: #standardListFont to: (StrikeFont familyName: 'Darkmap DejaVu Sans' pointSize: size); set: #standardMenuFont to: (StrikeFont familyName: 'Darkmap DejaVu Sans' pointSize: size); set: #standardSystemFont to: (StrikeFont familyName: 'Darkmap DejaVu Sans' pointSize: size); set: #windowTitleFont to: (StrikeFont familyName: 'Darkmap DejaVu Sans' pointSize: (size/1.5)).! !
!SolarizedTheme class methodsFor: 'instance creation' stamp: 'PAP 12/8/2022 18:30'! addDarkToolColors: theme "Tool-specific colors." theme set: #failureColor for: #TestRunner to: self yellow; set: #errorColor for: #TestRunner to: self red; set: #passColor for: #TestRunner to: self green; set: #failureTextColor for: #TestRunner to: self darkBackground; set: #errorTextColor for: #TestRunner to: self darkBackground; set: #passTextColor for: #TestRunner to: self darkBackground. theme set: #ignoredOperationAttributes for: #MCOperationsBrowser to: {TextColor color: self darkContentSecondary}. "Browser." theme set: #noClassCommentColor for: #Browser to: self red; set: #deprecatedMessageAttributes for: #CodeHolder to: { TextEmphasis struckOut. TextColor color: self darkContentSecondary }. "CodeHolder" theme set: #inheritanceButtonColorDefault for: #CodeHolder to: self darkBackground; set: #inheritanceButtonColorHasOverride for: #CodeHolder to: Color tan; set: #inheritanceButtonColorIsOverride for: #CodeHolder to: Color red; set: #inheritanceButtonColorSendsSuper for: #CodeHolder to: Color green; set: #inheritanceButtonColorIsOverrideAndSendsSuper for: #CodeHolder to: Color green darker; set: #inheritanceButtonColorHasOverrideAndSendsSuper for: #CodeHolder to: Color blue; set: #inheritanceButtonColorHasOverrideIsOverride for: #CodeHolder to: Color orange.! !
!SolarizedTheme class methodsFor: 'instance creation' stamp: 'PAP 12/9/2022 11:58'! addLightFonts: theme withFontSize: size
"Set-up fonts." theme set: #balloonHelpFont to: (StrikeFont familyName: 'Bitmap DejaVu Sans' pointSize: (size/2)); set: #standardButtonFont to: (StrikeFont familyName: 'Bitmap DejaVu Sans' pointSize: size); set: #standardCodeFont to: (StrikeFont familyName: 'Bitmap DejaVu Sans' pointSize: size); set: #standardFlapFont to: (StrikeFont familyName: 'Bitmap DejaVu Sans' pointSize: 7.5 emphasized: TextEmphasis bold emphasisCode); set: #haloLabelFont to: (StrikeFont familyName: 'Bitmap DejaVu Sans' pointSize: size); set: #standardListFont to: (StrikeFont familyName: 'Bitmap DejaVu Sans' pointSize: size); set: #standardMenuFont to: (StrikeFont familyName: 'Bitmap DejaVu Sans' pointSize: size); set: #standardSystemFont to: (StrikeFont familyName: 'Bitmap DejaVu Sans' pointSize: size); set: #windowTitleFont to: (StrikeFont familyName: 'Bitmap DejaVu Sans' pointSize: (size/1.5) emphasized: TextEmphasis bold emphasisCode).! !
!SolarizedTheme class methodsFor: 'instance creation' stamp: 'PAP 12/9/2022 12:00'! createDarkWithFontSize: size "doIt: [self createDark apply.]"
| themeName | themeName := 'Solarized (dark)'. ^ (self named: themeName) in: [:theme | theme merge: (self named: 'Squeak') overwrite: true. theme name: themeName.
"General morph stuff." theme set: #keyboardFocusColor for: #Morph to: self darkContentSecondary; set: #keyboardFocusWidth for: #Morph to: 1.
theme set: #background for: #MorphicProject to: self darkBackgroundForm.
self addDarkFonts: theme withFontSize: size; addDarkWindowColors: theme; addDarkSyntaxHighlighting: theme; addDarkScrollables: theme; addDarkButtons: theme; addDarkDialogs: theme; addDarkMenusAndDockingBars: theme; addDarkToolColors: theme.
theme]! !
!SolarizedTheme class methodsFor: 'instance creation' stamp: 'PAP 12/9/2022 12:00'! createLightWithFontSize: size "You have to create dark first. doIt: [self createDark. self createLight apply.]"
| themeName | themeName := 'Solarized (light)'. ^ (self named: themeName) in: [:theme | theme merge: (self named: 'Solarized (dark)') overwrite: true. theme name: themeName.
"General morph stuff." theme set: #keyboardFocusColor for: #Morph to: self lightContentSecondary; set: #keyboardFocusWidth for: #Morph to: 1. theme set: #background for: #MorphicProject to: self lightBackgroundForm.
self addLightFonts: theme withFontSize: size; addLightWindowColors: theme; addLightSyntaxHighlighting: theme; addLightScrollables: theme; addLightButtons: theme; addLightDialogs: theme; addLightMenusAndDockingBars: theme; addLightToolColors: theme.
theme]! !
!SqueakTheme class methodsFor: 'instance creation' stamp: 'PAP 12/9/2022 13:10'! addFonts: theme withFontSize: size
theme set: #standardSystemFont to: (StrikeFont familyName: #BitstreamVeraSansForSqueak pointSize: size); set: #standardFixedFont to: (TTCFont familyName: #BitstreamVeraSansMonoForSqueak pointSize: size);
set: #standardCodeFont to: (StrikeFont familyName: #BitstreamVeraSansForSqueak pointSize: size); set: #standardListFont to: (StrikeFont familyName: #BitstreamVeraSansForSqueak pointSize: size); set: #standardButtonFont to: (StrikeFont familyName: #BitstreamVeraSansForSqueak pointSize: size); set: #standardMenuFont to: (StrikeFont familyName: #BitstreamVeraSansForSqueak pointSize: size); set: #standardFlapFont to: (StrikeFont familyName: #BitstreamVeraSansForSqueak pointSize: size emphasized: TextEmphasis bold emphasisCode);
set: #windowTitleFont to: (StrikeFont familyName: #BitstreamVeraSansForSqueak pointSize: (size/1.25) emphasized: TextEmphasis bold emphasisCode); set: #balloonHelpFont to: (StrikeFont familyName: #BitstreamVeraSansForSqueak pointSize: (size/2)); set: #haloLabelFont to: (StrikeFont familyName: #BitstreamVeraSansForSqueak pointSize: 10.5);
set: #wizardStandardFont to: (StrikeFont familyName: #BitstreamVeraSansForSqueak pointSize: size); set: #wizardButtonFont to: (StrikeFont familyName: #BitstreamVeraSansForSqueak pointSize: size); set: #wizardHelpFont to: (StrikeFont familyName: #BitstreamVeraSansForSqueak pointSize: size); set: #wizardTitleFont to: (StrikeFont familyName: #BitstreamVeraSansForSqueak pointSize: (size/1.5)).! !
!SqueakTheme class methodsFor: 'instance creation' stamp: 'PAP 12/9/2022 13:19'! addToolColors: theme "Tool-specific colors." "SUnit's TestRunner." theme set: #failureColor for: #TestRunner to: Color yellow; set: #errorColor for: #TestRunner to: Color red; set: #passColor for: #TestRunner to: Color green; derive: #failureTextColor for: #TestRunner from: #PluggableTextMorph at: #textColor; derive: #errorTextColor for: #TestRunner from: #PluggableTextMorph at: #textColor; derive: #passTextColor for: #TestRunner from: #PluggableTextMorph at: #textColor. "Monticello Tools." theme set: #revertedOperationAttributes for: #MCOperationsBrowser to: {TextEmphasis struckOut}; set: #ignoredOperationAttributes for: #MCOperationsBrowser to: {TextColor color: Color gray}. "set: #rejectedOperationAttributes for: #MCOperationsBrowser to: {TextEmphasis struckOut}; set: #acceptedOperationAttributes for: #MCOperationsBrowser to: {TextEmphasis underlined}; set: #conflictingOperationAttributes for: #MCOperationsBrowser to: {TextEmphasis bold}." "Halos." theme derive: #borderColor for: #HaloMorph from: #MenuItemMorph at: #selectionColor do: [:c | c alpha: 0.8]; derive: #borderColor for: #SelectionMorph from: #MenuItemMorph at: #selectionColor do: [:c | c twiceDarker alpha: 0.75]; derive: #color for: #SelectionMorph from: #MenuItemMorph at: #selectionColor do: [:c | c alpha: 0.08]. "Code-browsing tools." theme set: #noClassCommentColor for: #Browser to: Color red; set: #deprecatedMessageAttributes for: #CodeHolder to: { TextEmphasis struckOut. TextColor gray }.
"Objects Tool." theme derive: #borderWidth for: #ObjectsTool from: #MenuMorph; derive: #borderColor for: #ObjectsTool from: #MenuMorph; derive: #borderStyle for: #ObjectsTool from: #MenuMorph; derive: #color for: #ObjectsTool from: #MenuMorph; derive: #textColor for: #ObjectsTool from: #MenuItemMorph; derive: #selectionTextColor for: #ObjectsTool from: #MenuItemMorph. "CodeHolder" theme set: #inheritanceButtonColorDefault for: #CodeHolder to: (Color gray: 0.9); set: #inheritanceButtonColorHasOverride for: #CodeHolder to: Color tan; set: #inheritanceButtonColorIsOverride for: #CodeHolder to: Color red; set: #inheritanceButtonColorSendsSuper for: #CodeHolder to: Color green; set: #inheritanceButtonColorIsOverrideAndSendsSuper for: #CodeHolder to: Color green darker; set: #inheritanceButtonColorHasOverrideAndSendsSuper for: #CodeHolder to: (Color r: 0.3 g:0.3 b: 1.0); set: #inheritanceButtonColorHasOverrideIsOverride for: #CodeHolder to: Color orange. ! !
!SqueakTheme class methodsFor: 'instance creation' stamp: 'PAP 12/9/2022 13:24'! createDullerWithFontSize: size "self createDuller apply" | name | name := 'Squeak (duller)'. ^ (self named:name) in: [:theme | theme merge: (self named: 'Squeak') overwrite: true. theme name: name. self addFonts: theme withFontSize: size; addDullerWindowColors: theme; addDullerScrollables: theme; addDullerDialogs: theme; addDullerMenusAndDockingBars: theme; addDullerButtons: theme; addDullerToolColors: theme. theme set: #color for: #TextAction to: Color ocean. theme]! !
!SqueakTheme class methodsFor: 'instance creation' stamp: 'PAP 12/9/2022 11:57'! createWithFontSize: size "This is the default theme for Squeak. self create apply. " ^ (self named: 'Squeak') in: [:theme | "General morph stuff." theme set: #keyboardFocusColor for: #Morph to: (TranslucentColor r: 0.3 g: 0.5 b: 0.5 alpha: 0.5); set: #keyboardFocusWidth for: #Morph to: 2; set: #softShadowColor for: #Morph to: (Color black alpha: 0.01); set: #softShadowOffset for: #Morph to: (10@8 corner: 10@12); set: #hardShadowColor for: #Morph to: (Color black alpha: 0.5); set: #hardShadowOffset for: #Morph to: 1@1. theme set: #background for: #MorphicProject to: self linenblue. self addFonts: theme withFontSize: size; addWindowColors: theme; addSyntaxHighlighting: theme; addMenusAndDockingBars: theme; addDialogs: theme; addButtons: theme; addScrollables: theme; addToolColors: theme; addMVC: theme. theme]! !
!TrimTheme class methodsFor: 'instance creation' stamp: 'PAP 12/9/2022 13:09'! addFonts: theme withFontSize: size
"Set-up fonts." theme set: #balloonHelpFont to: (StrikeFont familyName: 'BitstreamVeraSansForSqueak' pointSize: (size/2)); set: #standardButtonFont to: (StrikeFont familyName: 'BitstreamVeraSansForSqueak' pointSize: size); set: #standardCodeFont to: (StrikeFont familyName: 'BitstreamVeraSansForSqueak' pointSize: size); set: #standardFlapFont to: (StrikeFont familyName: 'BitstreamVeraSansForSqueak' pointSize: 7.5 emphasized: TextEmphasis bold emphasisCode); set: #haloLabelFont to: (StrikeFont familyName: 'BitstreamVeraSansForSqueak' pointSize: 10.5); set: #standardListFont to: (StrikeFont familyName: 'BitstreamVeraSansForSqueak' pointSize: size); set: #standardMenuFont to: (StrikeFont familyName: 'BitstreamVeraSansForSqueak' pointSize: size); set: #standardSystemFont to: (StrikeFont familyName: 'BitstreamVeraSansForSqueak' pointSize: size); set: #windowTitleFont to: (StrikeFont familyName: 'BitstreamVeraSansForSqueak' pointSize: size).! !
!TrimTheme class methodsFor: 'instance creation' stamp: 'PAP 12/9/2022 13:22'! addToolColors: theme "Tool-specific colors." "SUnit's TestRunner." theme set: #failureColor for: #TestRunner to: self yellow; set: #errorColor for: #TestRunner to: self red; set: #passColor for: #TestRunner to: self green. "Monticello Tools." theme set: #revertedOperationAttributes for: #MCOperationsBrowser to: {TextEmphasis struckOut}; set: #ignoredOperationAttributes for: #MCOperationsBrowser to: {TextColor color: self gray128}. "Browser." theme set: #noClassCommentColor for: #Browser to: self red; set: #deprecatedMessageAttributes for: #CodeHolder to: { TextEmphasis struckOut. TextColor color: self gray128 }. theme set: #inheritanceButtonColorDefault for: #CodeHolder to: self gray27; set: #inheritanceButtonColorHasOverride for: #CodeHolder to: (Color r: 0.533 g: 0.533 b: 0.333); set: #inheritanceButtonColorIsOverride for: #CodeHolder to: self red; set: #inheritanceButtonColorSendsSuper for: #CodeHolder to: self green; set: #inheritanceButtonColorIsOverrideAndSendsSuper for: #CodeHolder to: self green; set: #inheritanceButtonColorHasOverrideAndSendsSuper for: #CodeHolder to: self blue; set: #inheritanceButtonColorHasOverrideIsOverride for: #CodeHolder to: self orange. ! !
!TrimTheme class methodsFor: 'instance creation' stamp: 'PAP 12/9/2022 11:56'! createWithFontSize: size "doIt: [self create apply.]"
| themeName | themeName := 'Trim (dark)'. ^ (self named: themeName) in: [:theme | theme merge: (self named: 'Squeak') overwrite: true. theme name: themeName.
"General morph stuff." theme set: #keyboardFocusColor for: #Morph to: self blue; set: #keyboardFocusWidth for: #Morph to: 1.
theme set: #background for: #MorphicProject to: self backgroundForm.
self addFonts: theme withFontSize: size. self addWindowColors: theme. self addSyntaxHighlighting: theme. self addMenusAndDockingBars: theme. self addDialogs: theme. self addButtons: theme. self addScrollables: theme. self addToolColors: theme.
theme]! !
SqueakTheme class removeSelector: #createwithFontSize:!
Hi Pete,
thanks for the patch! :-)
Regarding the optics: The inheritance button now looks very beautiful to me in the themes Community (dark) and Monokai (dark). For the other themes, my personal impression is that for some states, the button now has a very garish color (esp. the bright red and green). Maybe you could desaturize the colors a bit for these themes?
Regarding the implementation: * You can rewrite all the "(UserInterfaceTheme current get: #inheritanceButtonColorHasOverride for: #CodeHolder)" to just "self userInterfaceTheme inheritanceButtonColorHasOverride" for simplicity. :) * I don't think we need all these *withFontSize: selectors. Mainly, they introduce a lot of duplication, making it harder to apply any further changes to the themes. I did not understand why you need this convenience. You can simply evaluate "UserInterfaceTheme cleanUpAndReset" after accepting a change in any of the methods, and the prior scale factor should be kept. (We will also need to remember to add a postscript to the patch that automatically evaluates this script after the changes are loaded. This is also described in the "Contributing to Squeak" help under Advanced.) * Otherwise, everything looks great to me. :-)
Regarding the patch format: I had some problems with downloading the attachment from archive, but this is likely not your fault, no idea what is going on here ... Also, when I tried to install the changeset in my image, I got a syntax error for a missing quote in preamble. Probably you removed that by accident. No biggie. :-)
Please keep your ideas coming, I'm looking forward to your next patch!
Best, Christoph
--- Sent from Squeak Inbox Talk
On 2022-12-09T14:31:49-08:00, ppadilcdx@gmail.com wrote:
'From Squeak6.1alpha of 7 December 2022 [latest update: #22301] on 9 December 2022 at 2:10:59 pm'! "Change Set: InheritanceButtonInBrowser Date: 9 December 2022 Author: Pete
Changes to the themes and CodeHolder to use the themes' colors on the Inheritance button. Updated colors in the theme so that the button text looks reasonable. The color changes are in the themes' addToolColors: method.
Added methods to the themes to start with a different font size (a parameter to the new methods). Mainly a convinience for me to allow me to test with larger font settings as the default ones are microscopic in my display.
Regards Pete!
!CodeHolder methodsFor: 'toolbuilder' stamp: 'PAP 12/8/2022 18:53'! inheritanceButtonColor "Check to see if the currently-viewed method has a super send or an override, and if so, change screen feedback, unless the #decorateBrowserButtons says not to."
| flags aColor cm defaultButtonColor | defaultButtonColor := (UserInterfaceTheme current get: #color for: #PluggableButtonMorph) ifNil: [Color gray: 0.91]. cm := currentCompiledMethod. ((cm isKindOf: CompiledMethod) and: [Preferences decorateBrowserButtons]) ifFalse: [^ defaultButtonColor]. "This table duplicates the old logic, but adds two new colors for the cases where there is a superclass definition, but this method doesn't call it."
flags := 0. self isThisAnOverride ifTrue: [ flags := flags bitOr: 4 ]. cm sendsToSuper ifTrue: [ flags := flags bitOr: 2 ]. self isThereAnOverride ifTrue: [ flags := flags bitOr: 1 ]. aColor := { defaultButtonColor. (UserInterfaceTheme current get: #inheritanceButtonColorHasOverride for: #CodeHolder). (UserInterfaceTheme current get: #inheritanceButtonColorSendsSuper for: #CodeHolder). (UserInterfaceTheme current get: #inheritanceButtonColorHasOverrideAndSendsSuper for: #CodeHolder). (UserInterfaceTheme current get: #inheritanceButtonColorIsOverride for: #CodeHolder). "has super but doesn't call it" (UserInterfaceTheme current get: #inheritanceButtonColorHasOverrideIsOverride for: #CodeHolder). "has sub; has super but doesn't call it" (UserInterfaceTheme current get: #inheritanceButtonColorIsOverrideAndSendsSuper for: #CodeHolder). (UserInterfaceTheme current get: #inheritanceButtonColorHasOverrideAndSendsSuper for: #CodeHolder). } at: flags + 1.
^aColor! !
!CommunityTheme class methodsFor: 'instance creation' stamp: 'PAP 12/9/2022 13:44'! addDarkFonts: aUserInterfaceTheme withFontSize: size "Set-up fonts." aUserInterfaceTheme set: #balloonHelpFont to: (StrikeFont familyName: 'BitstreamVeraSansForSqueak' pointSize: 7.5 emphasized: TextEmphasis italic emphasisCode); set: #standardButtonFont to: (StrikeFont familyName: 'BitstreamVeraSansForSqueak' pointSize: size); set: #standardCodeFont to: (StrikeFont familyName: 'BitstreamVeraSansForSqueak' pointSize: size); set: #standardFlapFont to: (StrikeFont familyName: 'BitstreamVeraSansForSqueak' pointSize: 7.5 emphasized: TextEmphasis bold emphasisCode); set: #haloLabelFont to: (StrikeFont familyName: 'BitstreamVeraSansForSqueak' pointSize: 10.5); set: #standardListFont to: (StrikeFont familyName: 'BitstreamVeraSansForSqueak' pointSize: size); set: #standardMenuFont to: (StrikeFont familyName: 'BitstreamVeraSansForSqueak' pointSize: size); set: #standardSystemFont to: (StrikeFont familyName: 'BitstreamVeraSansForSqueak' pointSize: size); set: #windowTitleFont to: (StrikeFont familyName: 'BitstreamVeraSansForSqueak' pointSize: (size/1.3) emphasized: TextEmphasis bold emphasisCode)! !
!CommunityTheme class methodsFor: 'instance creation' stamp: 'PAP 12/9/2022 13:28'! addDarkToolColors: theme "Tool-specific colors." theme set: #failureColor for: #TestRunner to: self dbYellow; set: #errorColor for: #TestRunner to: self dbRed; set: #passColor for: #TestRunner to: self dbGreen. "Browser." theme set: #noClassCommentColor for: #Browser to: self dbRed; set: #deprecatedMessageAttributes for: #CodeHolder to: { TextEmphasis struckOut. TextColor color: self dbGray }. "CodeHolder" theme set: #inheritanceButtonColorDefault for: #CodeHolder to: self dbBackground; set: #inheritanceButtonColorHasOverride for: #CodeHolder to: Color tan muchDarker; set: #inheritanceButtonColorIsOverride for: #CodeHolder to: Color red muchDarker; set: #inheritanceButtonColorSendsSuper for: #CodeHolder to: Color green muchDarker; set: #inheritanceButtonColorIsOverrideAndSendsSuper for: #CodeHolder to: Color green muchDarker; set: #inheritanceButtonColorHasOverrideAndSendsSuper for: #CodeHolder to: Color blue muchDarker; set: #inheritanceButtonColorHasOverrideIsOverride for: #CodeHolder to: Color orange muchDarker. ! !
!CommunityTheme class methodsFor: 'instance creation' stamp: 'PAP 12/9/2022 11:49'! createDarkWithFontSize: size "self createDark apply." | name | name := 'Community (dark)'. ^ (self named: name) in: [:theme | theme merge: (self named: 'Squeak') overwrite: true. theme name: name. "General morph stuff." theme set: #borderColor for: #ScrollPane to: (Color transparent) ; set: #keyboardFocusColor for: #Morph to: (self dbSelection adjustSaturation: -0.3 brightness: 0.10); set: #keyboardFocusWidth for: #Morph to: 1; set: #softShadowColor for: #Morph to: (self dbSelection muchLighter alpha: 0.025); set: #softShadowOffset for: #Morph to: (10 at 8 corner: 10 at 12); set: #hardShadowColor for: #Morph to: (self dbSelection muchLighter alpha: 0.02); set: #hardShadowOffset for: #Morph to: 1 at 1. self addDarkFonts: theme withFontSize: size; addDarkWindowColors: theme; addDarkSyntaxHighlighting: theme; addDarkScrollables: theme; addDarkButtons: theme; addDarkDialogs: theme; addDarkMenusAndDockingBars: theme; addDarkToolColors: theme. theme]! !
!MonokaiTheme class methodsFor: 'instance creation' stamp: 'PAP 12/9/2022 13:05'! addDarkFonts: theme withFontSize: size
"Set-up fonts." theme set: #balloonHelpFont to: (StrikeFont familyName: 'BitstreamVeraSansForSqueak' pointSize: (size/2)); set: #standardButtonFont to: (StrikeFont familyName: 'BitstreamVeraSansForSqueak' pointSize: size); set: #standardCodeFont to: (StrikeFont familyName: 'BitstreamVeraSansForSqueak' pointSize: size); set: #standardFlapFont to: (StrikeFont familyName: 'BitstreamVeraSansForSqueak' pointSize: 7.5 emphasized: TextEmphasis bold emphasisCode); set: #haloLabelFont to: (StrikeFont familyName: 'BitstreamVeraSansForSqueak' pointSize: 10.5); set: #standardListFont to: (StrikeFont familyName: 'BitstreamVeraSansForSqueak' pointSize: size); set: #standardMenuFont to: (StrikeFont familyName: 'BitstreamVeraSansForSqueak' pointSize: size); set: #standardSystemFont to: (StrikeFont familyName: 'BitstreamVeraSansForSqueak' pointSize: size); set: #windowTitleFont to: (StrikeFont familyName: 'BitstreamVeraSansForSqueak' pointSize: (size/1.5)).! !
!MonokaiTheme class methodsFor: 'instance creation' stamp: 'PAP 12/9/2022 12:03'! addDarkToolColors: theme "Tool-specific colors." theme set: #failureColor for: #TestRunner to: self yellow; set: #errorColor for: #TestRunner to: self red; set: #passColor for: #TestRunner to: self green; set: #failureTextColor for: #TestRunner to: self backgroundColor; set: #errorTextColor for: #TestRunner to: self backgroundColor; set: #passTextColor for: #TestRunner to: self backgroundColor. theme set: #ignoredOperationAttributes for: #MCOperationsBrowser to: {TextColor color: self grayLight}. "Browser." theme set: #noClassCommentColor for: #Browser to: self red; set: #deprecatedMessageAttributes for: #CodeHolder to: { TextEmphasis struckOut. TextColor color: self grayLight }. "CodeHolder" theme set: #inheritanceButtonColorDefault for: #CodeHolder to: self backgroundColor ; set: #inheritanceButtonColorHasOverride for: #CodeHolder to: (Color r: 0.6 g: 0.6 b: 0.3); set: #inheritanceButtonColorIsOverride for: #CodeHolder to: Color red muchDarker; set: #inheritanceButtonColorSendsSuper for: #CodeHolder to: Color green muchDarker; set: #inheritanceButtonColorIsOverrideAndSendsSuper for: #CodeHolder to: Color green muchDarker; set: #inheritanceButtonColorHasOverrideAndSendsSuper for: #CodeHolder to: Color blue muchDarker; set: #inheritanceButtonColorHasOverrideIsOverride for: #CodeHolder to: Color orange muchDarker. ! !
!MonokaiTheme class methodsFor: 'instance creation' stamp: 'mt 8/16/2016 13:24'! addDarkWindowColors: theme "self createDark apply." theme set: #uniformWindowColor for: #Model to:( self invisibleColor adjustBrightness: 0.16) "lighter twice"; set: #unfocusedWindowColorModifier for: #SystemWindow to: [ [:color | color adjustBrightness: -0.16 "darker twice"] ]; set: #unfocusedLabelColor for: #SystemWindow to: [ Model useColorfulWindows ifTrue: [(Color r: 0.285 g: 0.282 b: 0.242) "invisible color"] ifFalse: [(Color r: 0.972 g: 0.972 b: 0.948) "foreground color"] ]; set: #focusedLabelColor for: #SystemWindow to: [ Model useColorfulWindows ifTrue: [(Color r: 0.152 g: 0.156 b: 0.133) "background color"] ifFalse: [(Color r: 0.901 g: 0.858 b: 0.455) "yellow"] ];
set: #customWindowColor for: #Browser to: self green duller; set: #customWindowColor for: #ChangeList to: self blue duller; set: #customWindowColor for: #ChangeSorter to: self blue duller; set: #customWindowColor for: #ChatNotes to: self magenta duller; set: #customWindowColor for: #ClassCommentVersionsBrowser to: self violet duller; set: #customWindowColor for: #Debugger to: self red duller; set: #customWindowColor for: #DualChangeSorter to: self blue duller; set: #customWindowColor for: #FileContentsBrowser to: self yellow duller; set: #customWindowColor for: #FileList to: self yellow duller; set: #customWindowColor for: #InstanceBrowser to: self cyan duller; set: #customWindowColor for: #Lexicon to: self cyan duller; set: #customWindowColor for: #MCTool to: self violet duller; set: #customWindowColor for: #MessageNames to: self green duller; set: #customWindowColor for: #MessageSet to: self cyan duller; set: #customWindowColor for: #PackagePaneBrowser to: self green duller; set: #customWindowColor for: #PluggableFileList to: self yellow duller; set: #customWindowColor for: #PreferenceBrowser to: self cyan duller; set: #customWindowColor for: #SMLoader to: self orange duller; set: #customWindowColor for: #SMLoaderPlus to: self orange duller; set: #customWindowColor for: #SMReleaseBrowser to: self orange duller; set: #customWindowColor for: #ScriptingDomain to: self yellow duller; set: #customWindowColor for: #SelectorBrowser to: self cyan duller; set: #customWindowColor for: #StringHolder to: self yellow duller; set: #customWindowColor for: #TestRunner to: self orange duller; set: #customWindowColor for: #TranscriptStream to: self orange duller; set: #customWindowColor for: #VersionsBrowser to: self violet duller.! !
!MonokaiTheme class methodsFor: 'instance creation' stamp: 'PAP 12/8/2022 14:37'! createDark "self createDark apply." | themeName | themeName := 'Monokai (dark)'. ^ (self named: themeName) in: [:theme | theme merge: (self named: 'Squeak') overwrite: true. theme name: themeName. "General morph stuff." theme set: #keyboardFocusColor for: #Morph to: self yellow; set: #keyboardFocusWidth for: #Morph to: 1.
theme set: #background for: #SystemWindow to: self backgroundColor.
self addDarkFonts: theme; addDarkWindowColors: theme; addDarkSyntaxHighlighting: theme; addDarkScrollables: theme; addDarkButtons: theme; addDarkDialogs: theme; addDarkMenusAndDockingBars: theme; addDarkToolColors: theme.
theme]! !
!MonokaiTheme class methodsFor: 'instance creation' stamp: 'PAP 12/9/2022 11:46'! createDarkWithFontSize: size "self createDark apply." | themeName | themeName := 'Monokai (dark)'. ^ (self named: themeName) in: [:theme | theme merge: (self named: 'Squeak') overwrite: true. theme name: themeName. "General morph stuff." theme set: #keyboardFocusColor for: #Morph to: self yellow; set: #keyboardFocusWidth for: #Morph to: 1.
theme set: #background for: #SystemWindow to: self backgroundColor.
self addDarkFonts: theme withFontSize: size; addDarkWindowColors: theme; addDarkSyntaxHighlighting: theme; addDarkScrollables: theme; addDarkButtons: theme; addDarkDialogs: theme; addDarkMenusAndDockingBars: theme; addDarkToolColors: theme.
theme]! !
!SolarizedTheme class methodsFor: 'instance creation' stamp: 'PAP 12/9/2022 11:59'! addDarkFonts: theme withFontSize: size
"Set-up fonts." theme set: #balloonHelpFont to: (StrikeFont familyName: 'Darkmap DejaVu Sans' pointSize: (size/2)); set: #standardButtonFont to: (StrikeFont familyName: 'Darkmap DejaVu Sans' pointSize: size); set: #standardCodeFont to: (StrikeFont familyName: 'Darkmap DejaVu Sans' pointSize: size); set: #standardFlapFont to: (StrikeFont familyName: 'Darkmap DejaVu Sans' pointSize: 7.5 emphasized: TextEmphasis bold emphasisCode); set: #haloLabelFont to: (StrikeFont familyName: 'Darkmap DejaVu Sans' pointSize: size); set: #standardListFont to: (StrikeFont familyName: 'Darkmap DejaVu Sans' pointSize: size); set: #standardMenuFont to: (StrikeFont familyName: 'Darkmap DejaVu Sans' pointSize: size); set: #standardSystemFont to: (StrikeFont familyName: 'Darkmap DejaVu Sans' pointSize: size); set: #windowTitleFont to: (StrikeFont familyName: 'Darkmap DejaVu Sans' pointSize: (size/1.5)).! !
!SolarizedTheme class methodsFor: 'instance creation' stamp: 'PAP 12/8/2022 18:30'! addDarkToolColors: theme "Tool-specific colors." theme set: #failureColor for: #TestRunner to: self yellow; set: #errorColor for: #TestRunner to: self red; set: #passColor for: #TestRunner to: self green; set: #failureTextColor for: #TestRunner to: self darkBackground; set: #errorTextColor for: #TestRunner to: self darkBackground; set: #passTextColor for: #TestRunner to: self darkBackground. theme set: #ignoredOperationAttributes for: #MCOperationsBrowser to: {TextColor color: self darkContentSecondary}. "Browser." theme set: #noClassCommentColor for: #Browser to: self red; set: #deprecatedMessageAttributes for: #CodeHolder to: { TextEmphasis struckOut. TextColor color: self darkContentSecondary }. "CodeHolder" theme set: #inheritanceButtonColorDefault for: #CodeHolder to: self darkBackground; set: #inheritanceButtonColorHasOverride for: #CodeHolder to: Color tan; set: #inheritanceButtonColorIsOverride for: #CodeHolder to: Color red; set: #inheritanceButtonColorSendsSuper for: #CodeHolder to: Color green; set: #inheritanceButtonColorIsOverrideAndSendsSuper for: #CodeHolder to: Color green darker; set: #inheritanceButtonColorHasOverrideAndSendsSuper for: #CodeHolder to: Color blue; set: #inheritanceButtonColorHasOverrideIsOverride for: #CodeHolder to: Color orange.! !
!SolarizedTheme class methodsFor: 'instance creation' stamp: 'PAP 12/9/2022 11:58'! addLightFonts: theme withFontSize: size
"Set-up fonts." theme set: #balloonHelpFont to: (StrikeFont familyName: 'Bitmap DejaVu Sans' pointSize: (size/2)); set: #standardButtonFont to: (StrikeFont familyName: 'Bitmap DejaVu Sans' pointSize: size); set: #standardCodeFont to: (StrikeFont familyName: 'Bitmap DejaVu Sans' pointSize: size); set: #standardFlapFont to: (StrikeFont familyName: 'Bitmap DejaVu Sans' pointSize: 7.5 emphasized: TextEmphasis bold emphasisCode); set: #haloLabelFont to: (StrikeFont familyName: 'Bitmap DejaVu Sans' pointSize: size); set: #standardListFont to: (StrikeFont familyName: 'Bitmap DejaVu Sans' pointSize: size); set: #standardMenuFont to: (StrikeFont familyName: 'Bitmap DejaVu Sans' pointSize: size); set: #standardSystemFont to: (StrikeFont familyName: 'Bitmap DejaVu Sans' pointSize: size); set: #windowTitleFont to: (StrikeFont familyName: 'Bitmap DejaVu Sans' pointSize: (size/1.5) emphasized: TextEmphasis bold emphasisCode).! !
!SolarizedTheme class methodsFor: 'instance creation' stamp: 'PAP 12/9/2022 12:00'! createDarkWithFontSize: size "doIt: [self createDark apply.]"
| themeName | themeName := 'Solarized (dark)'. ^ (self named: themeName) in: [:theme | theme merge: (self named: 'Squeak') overwrite: true. theme name: themeName.
"General morph stuff." theme set: #keyboardFocusColor for: #Morph to: self darkContentSecondary; set: #keyboardFocusWidth for: #Morph to: 1.
theme set: #background for: #MorphicProject to: self darkBackgroundForm.
self addDarkFonts: theme withFontSize: size; addDarkWindowColors: theme; addDarkSyntaxHighlighting: theme; addDarkScrollables: theme; addDarkButtons: theme; addDarkDialogs: theme; addDarkMenusAndDockingBars: theme; addDarkToolColors: theme.
theme]! !
!SolarizedTheme class methodsFor: 'instance creation' stamp: 'PAP 12/9/2022 12:00'! createLightWithFontSize: size "You have to create dark first. doIt: [self createDark. self createLight apply.]"
| themeName | themeName := 'Solarized (light)'. ^ (self named: themeName) in: [:theme | theme merge: (self named: 'Solarized (dark)') overwrite: true. theme name: themeName.
"General morph stuff." theme set: #keyboardFocusColor for: #Morph to: self lightContentSecondary; set: #keyboardFocusWidth for: #Morph to: 1. theme set: #background for: #MorphicProject to: self lightBackgroundForm.
self addLightFonts: theme withFontSize: size; addLightWindowColors: theme; addLightSyntaxHighlighting: theme; addLightScrollables: theme; addLightButtons: theme; addLightDialogs: theme; addLightMenusAndDockingBars: theme; addLightToolColors: theme.
theme]! !
!SqueakTheme class methodsFor: 'instance creation' stamp: 'PAP 12/9/2022 13:10'! addFonts: theme withFontSize: size
theme set: #standardSystemFont to: (StrikeFont familyName: #BitstreamVeraSansForSqueak pointSize: size); set: #standardFixedFont to: (TTCFont familyName: #BitstreamVeraSansMonoForSqueak pointSize: size);
set: #standardCodeFont to: (StrikeFont familyName: #BitstreamVeraSansForSqueak pointSize: size); set: #standardListFont to: (StrikeFont familyName: #BitstreamVeraSansForSqueak pointSize: size); set: #standardButtonFont to: (StrikeFont familyName: #BitstreamVeraSansForSqueak pointSize: size); set: #standardMenuFont to: (StrikeFont familyName: #BitstreamVeraSansForSqueak pointSize: size); set: #standardFlapFont to: (StrikeFont familyName: #BitstreamVeraSansForSqueak pointSize: size emphasized: TextEmphasis bold emphasisCode);
set: #windowTitleFont to: (StrikeFont familyName: #BitstreamVeraSansForSqueak pointSize: (size/1.25) emphasized: TextEmphasis bold emphasisCode); set: #balloonHelpFont to: (StrikeFont familyName: #BitstreamVeraSansForSqueak pointSize: (size/2)); set: #haloLabelFont to: (StrikeFont familyName: #BitstreamVeraSansForSqueak pointSize: 10.5);
set: #wizardStandardFont to: (StrikeFont familyName: #BitstreamVeraSansForSqueak pointSize: size); set: #wizardButtonFont to: (StrikeFont familyName: #BitstreamVeraSansForSqueak pointSize: size); set: #wizardHelpFont to: (StrikeFont familyName: #BitstreamVeraSansForSqueak pointSize: size); set: #wizardTitleFont to: (StrikeFont familyName: #BitstreamVeraSansForSqueak pointSize: (size/1.5)).! !
!SqueakTheme class methodsFor: 'instance creation' stamp: 'PAP 12/9/2022 13:19'! addToolColors: theme "Tool-specific colors." "SUnit's TestRunner." theme set: #failureColor for: #TestRunner to: Color yellow; set: #errorColor for: #TestRunner to: Color red; set: #passColor for: #TestRunner to: Color green; derive: #failureTextColor for: #TestRunner from: #PluggableTextMorph at: #textColor; derive: #errorTextColor for: #TestRunner from: #PluggableTextMorph at: #textColor; derive: #passTextColor for: #TestRunner from: #PluggableTextMorph at: #textColor. "Monticello Tools." theme set: #revertedOperationAttributes for: #MCOperationsBrowser to: {TextEmphasis struckOut}; set: #ignoredOperationAttributes for: #MCOperationsBrowser to: {TextColor color: Color gray}. "set: #rejectedOperationAttributes for: #MCOperationsBrowser to: {TextEmphasis struckOut}; set: #acceptedOperationAttributes for: #MCOperationsBrowser to: {TextEmphasis underlined}; set: #conflictingOperationAttributes for: #MCOperationsBrowser to: {TextEmphasis bold}." "Halos." theme derive: #borderColor for: #HaloMorph from: #MenuItemMorph at: #selectionColor do: [:c | c alpha: 0.8]; derive: #borderColor for: #SelectionMorph from: #MenuItemMorph at: #selectionColor do: [:c | c twiceDarker alpha: 0.75]; derive: #color for: #SelectionMorph from: #MenuItemMorph at: #selectionColor do: [:c | c alpha: 0.08]. "Code-browsing tools." theme set: #noClassCommentColor for: #Browser to: Color red; set: #deprecatedMessageAttributes for: #CodeHolder to: { TextEmphasis struckOut. TextColor gray }.
"Objects Tool." theme derive: #borderWidth for: #ObjectsTool from: #MenuMorph; derive: #borderColor for: #ObjectsTool from: #MenuMorph; derive: #borderStyle for: #ObjectsTool from: #MenuMorph; derive: #color for: #ObjectsTool from: #MenuMorph; derive: #textColor for: #ObjectsTool from: #MenuItemMorph; derive: #selectionTextColor for: #ObjectsTool from: #MenuItemMorph. "CodeHolder" theme set: #inheritanceButtonColorDefault for: #CodeHolder to: (Color gray: 0.9); set: #inheritanceButtonColorHasOverride for: #CodeHolder to: Color tan; set: #inheritanceButtonColorIsOverride for: #CodeHolder to: Color red; set: #inheritanceButtonColorSendsSuper for: #CodeHolder to: Color green; set: #inheritanceButtonColorIsOverrideAndSendsSuper for: #CodeHolder to: Color green darker; set: #inheritanceButtonColorHasOverrideAndSendsSuper for: #CodeHolder to: (Color r: 0.3 g:0.3 b: 1.0); set: #inheritanceButtonColorHasOverrideIsOverride for: #CodeHolder to: Color orange. ! !
!SqueakTheme class methodsFor: 'instance creation' stamp: 'PAP 12/9/2022 13:24'! createDullerWithFontSize: size "self createDuller apply" | name | name := 'Squeak (duller)'. ^ (self named:name) in: [:theme | theme merge: (self named: 'Squeak') overwrite: true. theme name: name. self addFonts: theme withFontSize: size; addDullerWindowColors: theme; addDullerScrollables: theme; addDullerDialogs: theme; addDullerMenusAndDockingBars: theme; addDullerButtons: theme; addDullerToolColors: theme. theme set: #color for: #TextAction to: Color ocean. theme]! !
!SqueakTheme class methodsFor: 'instance creation' stamp: 'PAP 12/9/2022 11:57'! createWithFontSize: size "This is the default theme for Squeak. self create apply. " ^ (self named: 'Squeak') in: [:theme | "General morph stuff." theme set: #keyboardFocusColor for: #Morph to: (TranslucentColor r: 0.3 g: 0.5 b: 0.5 alpha: 0.5); set: #keyboardFocusWidth for: #Morph to: 2; set: #softShadowColor for: #Morph to: (Color black alpha: 0.01); set: #softShadowOffset for: #Morph to: (10 at 8 corner: 10 at 12); set: #hardShadowColor for: #Morph to: (Color black alpha: 0.5); set: #hardShadowOffset for: #Morph to: 1 at 1. theme set: #background for: #MorphicProject to: self linenblue. self addFonts: theme withFontSize: size; addWindowColors: theme; addSyntaxHighlighting: theme; addMenusAndDockingBars: theme; addDialogs: theme; addButtons: theme; addScrollables: theme; addToolColors: theme; addMVC: theme. theme]! !
!TrimTheme class methodsFor: 'instance creation' stamp: 'PAP 12/9/2022 13:09'! addFonts: theme withFontSize: size
"Set-up fonts." theme set: #balloonHelpFont to: (StrikeFont familyName: 'BitstreamVeraSansForSqueak' pointSize: (size/2)); set: #standardButtonFont to: (StrikeFont familyName: 'BitstreamVeraSansForSqueak' pointSize: size); set: #standardCodeFont to: (StrikeFont familyName: 'BitstreamVeraSansForSqueak' pointSize: size); set: #standardFlapFont to: (StrikeFont familyName: 'BitstreamVeraSansForSqueak' pointSize: 7.5 emphasized: TextEmphasis bold emphasisCode); set: #haloLabelFont to: (StrikeFont familyName: 'BitstreamVeraSansForSqueak' pointSize: 10.5); set: #standardListFont to: (StrikeFont familyName: 'BitstreamVeraSansForSqueak' pointSize: size); set: #standardMenuFont to: (StrikeFont familyName: 'BitstreamVeraSansForSqueak' pointSize: size); set: #standardSystemFont to: (StrikeFont familyName: 'BitstreamVeraSansForSqueak' pointSize: size); set: #windowTitleFont to: (StrikeFont familyName: 'BitstreamVeraSansForSqueak' pointSize: size).! !
!TrimTheme class methodsFor: 'instance creation' stamp: 'PAP 12/9/2022 13:22'! addToolColors: theme "Tool-specific colors." "SUnit's TestRunner." theme set: #failureColor for: #TestRunner to: self yellow; set: #errorColor for: #TestRunner to: self red; set: #passColor for: #TestRunner to: self green. "Monticello Tools." theme set: #revertedOperationAttributes for: #MCOperationsBrowser to: {TextEmphasis struckOut}; set: #ignoredOperationAttributes for: #MCOperationsBrowser to: {TextColor color: self gray128}. "Browser." theme set: #noClassCommentColor for: #Browser to: self red; set: #deprecatedMessageAttributes for: #CodeHolder to: { TextEmphasis struckOut. TextColor color: self gray128 }. theme set: #inheritanceButtonColorDefault for: #CodeHolder to: self gray27; set: #inheritanceButtonColorHasOverride for: #CodeHolder to: (Color r: 0.533 g: 0.533 b: 0.333); set: #inheritanceButtonColorIsOverride for: #CodeHolder to: self red; set: #inheritanceButtonColorSendsSuper for: #CodeHolder to: self green; set: #inheritanceButtonColorIsOverrideAndSendsSuper for: #CodeHolder to: self green; set: #inheritanceButtonColorHasOverrideAndSendsSuper for: #CodeHolder to: self blue; set: #inheritanceButtonColorHasOverrideIsOverride for: #CodeHolder to: self orange. ! !
!TrimTheme class methodsFor: 'instance creation' stamp: 'PAP 12/9/2022 11:56'! createWithFontSize: size "doIt: [self create apply.]"
| themeName | themeName := 'Trim (dark)'. ^ (self named: themeName) in: [:theme | theme merge: (self named: 'Squeak') overwrite: true. theme name: themeName.
"General morph stuff." theme set: #keyboardFocusColor for: #Morph to: self blue; set: #keyboardFocusWidth for: #Morph to: 1.
theme set: #background for: #MorphicProject to: self backgroundForm.
self addFonts: theme withFontSize: size. self addWindowColors: theme. self addSyntaxHighlighting: theme. self addMenusAndDockingBars: theme. self addDialogs: theme. self addButtons: theme. self addScrollables: theme. self addToolColors: theme.
theme]! !
SqueakTheme class removeSelector: #createwithFontSize:!
Thanks for the info. I tried that but it reset my font size selections. But that was a testing covenience so I should have deleted them prior to send the patch. Will update and send in a couple of days. Thanks.
On 2022-12-18T22:04:21+01:00, christoph.thiede@student.hpi.uni-potsdam.de wrote:
Hi Pete,
thanks for the patch! :-)
Regarding the optics: The inheritance button now looks very beautiful to me in the themes Community (dark) and Monokai (dark). For the other themes, my personal impression is that for some states, the button now has a very garish color (esp. the bright red and green). Maybe you could desaturize the colors a bit for these themes?
Regarding the implementation:
- You can rewrite all the "(UserInterfaceTheme current get: #inheritanceButtonColorHasOverride for: #CodeHolder)" to just "self userInterfaceTheme inheritanceButtonColorHasOverride" for simplicity. :)
- I don't think we need all these *withFontSize: selectors. Mainly, they introduce a lot of duplication, making it harder to apply any further changes to the themes. I did not understand why you need this convenience. You can simply evaluate "UserInterfaceTheme cleanUpAndReset" after accepting a change in any of the methods, and the prior scale factor should be kept. (We will also need to remember to add a postscript to the patch that automatically evaluates this script after the changes are loaded. This is also described in the "Contributing to Squeak" help under Advanced.)
- Otherwise, everything looks great to me. :-)
Regarding the patch format: I had some problems with downloading the attachment from archive, but this is likely not your fault, no idea what is going on here ... Also, when I tried to install the changeset in my image, I got a syntax error for a missing quote in preamble. Probably you removed that by accident. No biggie. :-)
Please keep your ideas coming, I'm looking forward to your next patch!
Best, Christoph
Sent from Squeak Inbox Talk
On 2022-12-09T14:31:49-08:00, ppadilcdx at gmail.com wrote:
'From Squeak6.1alpha of 7 December 2022 [latest update: #22301] on 9 December 2022 at 2:10:59 pm'! "Change Set: InheritanceButtonInBrowser Date: 9 December 2022 Author: Pete
Changes to the themes and CodeHolder to use the themes' colors on the Inheritance button. Updated colors in the theme so that the button text looks reasonable. The color changes are in the themes' addToolColors: method.
Added methods to the themes to start with a different font size (a parameter to the new methods). Mainly a convinience for me to allow me to test with larger font settings as the default ones are microscopic in my display.
Regards Pete!
!CodeHolder methodsFor: 'toolbuilder' stamp: 'PAP 12/8/2022 18:53'! inheritanceButtonColor "Check to see if the currently-viewed method has a super send or an override, and if so, change screen feedback, unless the #decorateBrowserButtons says not to."
| flags aColor cm defaultButtonColor | defaultButtonColor := (UserInterfaceTheme current get: #color for: #PluggableButtonMorph) ifNil: [Color gray: 0.91]. cm := currentCompiledMethod. ((cm isKindOf: CompiledMethod) and: [Preferences decorateBrowserButtons]) ifFalse: [^ defaultButtonColor]. "This table duplicates the old logic, but adds two new colors for the cases where there is a superclass definition, but this method doesn't call it."
flags := 0. self isThisAnOverride ifTrue: [ flags := flags bitOr: 4 ]. cm sendsToSuper ifTrue: [ flags := flags bitOr: 2 ]. self isThereAnOverride ifTrue: [ flags := flags bitOr: 1 ]. aColor := { defaultButtonColor. (UserInterfaceTheme current get: #inheritanceButtonColorHasOverride for: #CodeHolder). (UserInterfaceTheme current get: #inheritanceButtonColorSendsSuper for: #CodeHolder). (UserInterfaceTheme current get: #inheritanceButtonColorHasOverrideAndSendsSuper for: #CodeHolder). (UserInterfaceTheme current get: #inheritanceButtonColorIsOverride for: #CodeHolder). "has super but doesn't call it" (UserInterfaceTheme current get: #inheritanceButtonColorHasOverrideIsOverride for: #CodeHolder). "has sub; has super but doesn't call it" (UserInterfaceTheme current get: #inheritanceButtonColorIsOverrideAndSendsSuper for: #CodeHolder). (UserInterfaceTheme current get: #inheritanceButtonColorHasOverrideAndSendsSuper for: #CodeHolder). } at: flags + 1.
^aColor! !
!CommunityTheme class methodsFor: 'instance creation' stamp: 'PAP 12/9/2022 13:44'! addDarkFonts: aUserInterfaceTheme withFontSize: size "Set-up fonts." aUserInterfaceTheme set: #balloonHelpFont to: (StrikeFont familyName: 'BitstreamVeraSansForSqueak' pointSize: 7.5 emphasized: TextEmphasis italic emphasisCode); set: #standardButtonFont to: (StrikeFont familyName: 'BitstreamVeraSansForSqueak' pointSize: size); set: #standardCodeFont to: (StrikeFont familyName: 'BitstreamVeraSansForSqueak' pointSize: size); set: #standardFlapFont to: (StrikeFont familyName: 'BitstreamVeraSansForSqueak' pointSize: 7.5 emphasized: TextEmphasis bold emphasisCode); set: #haloLabelFont to: (StrikeFont familyName: 'BitstreamVeraSansForSqueak' pointSize: 10.5); set: #standardListFont to: (StrikeFont familyName: 'BitstreamVeraSansForSqueak' pointSize: size); set: #standardMenuFont to: (StrikeFont familyName: 'BitstreamVeraSansForSqueak' pointSize: size); set: #standardSystemFont to: (StrikeFont familyName: 'BitstreamVeraSansForSqueak' pointSize: size); set: #windowTitleFont to: (StrikeFont familyName: 'BitstreamVeraSansForSqueak' pointSize: (size/1.3) emphasized: TextEmphasis bold emphasisCode)! !
!CommunityTheme class methodsFor: 'instance creation' stamp: 'PAP 12/9/2022 13:28'! addDarkToolColors: theme "Tool-specific colors." theme set: #failureColor for: #TestRunner to: self dbYellow; set: #errorColor for: #TestRunner to: self dbRed; set: #passColor for: #TestRunner to: self dbGreen. "Browser." theme set: #noClassCommentColor for: #Browser to: self dbRed; set: #deprecatedMessageAttributes for: #CodeHolder to: { TextEmphasis struckOut. TextColor color: self dbGray }. "CodeHolder" theme set: #inheritanceButtonColorDefault for: #CodeHolder to: self dbBackground; set: #inheritanceButtonColorHasOverride for: #CodeHolder to: Color tan muchDarker; set: #inheritanceButtonColorIsOverride for: #CodeHolder to: Color red muchDarker; set: #inheritanceButtonColorSendsSuper for: #CodeHolder to: Color green muchDarker; set: #inheritanceButtonColorIsOverrideAndSendsSuper for: #CodeHolder to: Color green muchDarker; set: #inheritanceButtonColorHasOverrideAndSendsSuper for: #CodeHolder to: Color blue muchDarker; set: #inheritanceButtonColorHasOverrideIsOverride for: #CodeHolder to: Color orange muchDarker. ! !
!CommunityTheme class methodsFor: 'instance creation' stamp: 'PAP 12/9/2022 11:49'! createDarkWithFontSize: size "self createDark apply." | name | name := 'Community (dark)'. ^ (self named: name) in: [:theme | theme merge: (self named: 'Squeak') overwrite: true. theme name: name. "General morph stuff." theme set: #borderColor for: #ScrollPane to: (Color transparent) ; set: #keyboardFocusColor for: #Morph to: (self dbSelection adjustSaturation: -0.3 brightness: 0.10); set: #keyboardFocusWidth for: #Morph to: 1; set: #softShadowColor for: #Morph to: (self dbSelection muchLighter alpha: 0.025); set: #softShadowOffset for: #Morph to: (10 at 8 corner: 10 at 12); set: #hardShadowColor for: #Morph to: (self dbSelection muchLighter alpha: 0.02); set: #hardShadowOffset for: #Morph to: 1 at 1. self addDarkFonts: theme withFontSize: size; addDarkWindowColors: theme; addDarkSyntaxHighlighting: theme; addDarkScrollables: theme; addDarkButtons: theme; addDarkDialogs: theme; addDarkMenusAndDockingBars: theme; addDarkToolColors: theme. theme]! !
!MonokaiTheme class methodsFor: 'instance creation' stamp: 'PAP 12/9/2022 13:05'! addDarkFonts: theme withFontSize: size
"Set-up fonts." theme set: #balloonHelpFont to: (StrikeFont familyName: 'BitstreamVeraSansForSqueak' pointSize: (size/2)); set: #standardButtonFont to: (StrikeFont familyName: 'BitstreamVeraSansForSqueak' pointSize: size); set: #standardCodeFont to: (StrikeFont familyName: 'BitstreamVeraSansForSqueak' pointSize: size); set: #standardFlapFont to: (StrikeFont familyName: 'BitstreamVeraSansForSqueak' pointSize: 7.5 emphasized: TextEmphasis bold emphasisCode); set: #haloLabelFont to: (StrikeFont familyName: 'BitstreamVeraSansForSqueak' pointSize: 10.5); set: #standardListFont to: (StrikeFont familyName: 'BitstreamVeraSansForSqueak' pointSize: size); set: #standardMenuFont to: (StrikeFont familyName: 'BitstreamVeraSansForSqueak' pointSize: size); set: #standardSystemFont to: (StrikeFont familyName: 'BitstreamVeraSansForSqueak' pointSize: size); set: #windowTitleFont to: (StrikeFont familyName: 'BitstreamVeraSansForSqueak' pointSize: (size/1.5)).! !
!MonokaiTheme class methodsFor: 'instance creation' stamp: 'PAP 12/9/2022 12:03'! addDarkToolColors: theme "Tool-specific colors." theme set: #failureColor for: #TestRunner to: self yellow; set: #errorColor for: #TestRunner to: self red; set: #passColor for: #TestRunner to: self green; set: #failureTextColor for: #TestRunner to: self backgroundColor; set: #errorTextColor for: #TestRunner to: self backgroundColor; set: #passTextColor for: #TestRunner to: self backgroundColor. theme set: #ignoredOperationAttributes for: #MCOperationsBrowser to: {TextColor color: self grayLight}. "Browser." theme set: #noClassCommentColor for: #Browser to: self red; set: #deprecatedMessageAttributes for: #CodeHolder to: { TextEmphasis struckOut. TextColor color: self grayLight }. "CodeHolder" theme set: #inheritanceButtonColorDefault for: #CodeHolder to: self backgroundColor ; set: #inheritanceButtonColorHasOverride for: #CodeHolder to: (Color r: 0.6 g: 0.6 b: 0.3); set: #inheritanceButtonColorIsOverride for: #CodeHolder to: Color red muchDarker; set: #inheritanceButtonColorSendsSuper for: #CodeHolder to: Color green muchDarker; set: #inheritanceButtonColorIsOverrideAndSendsSuper for: #CodeHolder to: Color green muchDarker; set: #inheritanceButtonColorHasOverrideAndSendsSuper for: #CodeHolder to: Color blue muchDarker; set: #inheritanceButtonColorHasOverrideIsOverride for: #CodeHolder to: Color orange muchDarker. ! !
!MonokaiTheme class methodsFor: 'instance creation' stamp: 'mt 8/16/2016 13:24'! addDarkWindowColors: theme "self createDark apply." theme set: #uniformWindowColor for: #Model to:( self invisibleColor adjustBrightness: 0.16) "lighter twice"; set: #unfocusedWindowColorModifier for: #SystemWindow to: [ [:color | color adjustBrightness: -0.16 "darker twice"] ]; set: #unfocusedLabelColor for: #SystemWindow to: [ Model useColorfulWindows ifTrue: [(Color r: 0.285 g: 0.282 b: 0.242) "invisible color"] ifFalse: [(Color r: 0.972 g: 0.972 b: 0.948) "foreground color"] ]; set: #focusedLabelColor for: #SystemWindow to: [ Model useColorfulWindows ifTrue: [(Color r: 0.152 g: 0.156 b: 0.133) "background color"] ifFalse: [(Color r: 0.901 g: 0.858 b: 0.455) "yellow"] ];
set: #customWindowColor for: #Browser to: self green duller; set: #customWindowColor for: #ChangeList to: self blue duller; set: #customWindowColor for: #ChangeSorter to: self blue duller; set: #customWindowColor for: #ChatNotes to: self magenta duller; set: #customWindowColor for: #ClassCommentVersionsBrowser to: self violet duller; set: #customWindowColor for: #Debugger to: self red duller; set: #customWindowColor for: #DualChangeSorter to: self blue duller; set: #customWindowColor for: #FileContentsBrowser to: self yellow duller; set: #customWindowColor for: #FileList to: self yellow duller; set: #customWindowColor for: #InstanceBrowser to: self cyan duller; set: #customWindowColor for: #Lexicon to: self cyan duller; set: #customWindowColor for: #MCTool to: self violet duller; set: #customWindowColor for: #MessageNames to: self green duller; set: #customWindowColor for: #MessageSet to: self cyan duller; set: #customWindowColor for: #PackagePaneBrowser to: self green duller; set: #customWindowColor for: #PluggableFileList to: self yellow duller; set: #customWindowColor for: #PreferenceBrowser to: self cyan duller; set: #customWindowColor for: #SMLoader to: self orange duller; set: #customWindowColor for: #SMLoaderPlus to: self orange duller; set: #customWindowColor for: #SMReleaseBrowser to: self orange duller; set: #customWindowColor for: #ScriptingDomain to: self yellow duller; set: #customWindowColor for: #SelectorBrowser to: self cyan duller; set: #customWindowColor for: #StringHolder to: self yellow duller; set: #customWindowColor for: #TestRunner to: self orange duller; set: #customWindowColor for: #TranscriptStream to: self orange duller; set: #customWindowColor for: #VersionsBrowser to: self violet duller.! !
!MonokaiTheme class methodsFor: 'instance creation' stamp: 'PAP 12/8/2022 14:37'! createDark "self createDark apply." | themeName | themeName := 'Monokai (dark)'. ^ (self named: themeName) in: [:theme | theme merge: (self named: 'Squeak') overwrite: true. theme name: themeName. "General morph stuff." theme set: #keyboardFocusColor for: #Morph to: self yellow; set: #keyboardFocusWidth for: #Morph to: 1.
theme set: #background for: #SystemWindow to: self backgroundColor.
self addDarkFonts: theme; addDarkWindowColors: theme; addDarkSyntaxHighlighting: theme; addDarkScrollables: theme; addDarkButtons: theme; addDarkDialogs: theme; addDarkMenusAndDockingBars: theme; addDarkToolColors: theme.
theme]! !
!MonokaiTheme class methodsFor: 'instance creation' stamp: 'PAP 12/9/2022 11:46'! createDarkWithFontSize: size "self createDark apply." | themeName | themeName := 'Monokai (dark)'. ^ (self named: themeName) in: [:theme | theme merge: (self named: 'Squeak') overwrite: true. theme name: themeName. "General morph stuff." theme set: #keyboardFocusColor for: #Morph to: self yellow; set: #keyboardFocusWidth for: #Morph to: 1.
theme set: #background for: #SystemWindow to: self backgroundColor.
self addDarkFonts: theme withFontSize: size; addDarkWindowColors: theme; addDarkSyntaxHighlighting: theme; addDarkScrollables: theme; addDarkButtons: theme; addDarkDialogs: theme; addDarkMenusAndDockingBars: theme; addDarkToolColors: theme.
theme]! !
!SolarizedTheme class methodsFor: 'instance creation' stamp: 'PAP 12/9/2022 11:59'! addDarkFonts: theme withFontSize: size
"Set-up fonts." theme set: #balloonHelpFont to: (StrikeFont familyName: 'Darkmap DejaVu Sans' pointSize: (size/2)); set: #standardButtonFont to: (StrikeFont familyName: 'Darkmap DejaVu Sans' pointSize: size); set: #standardCodeFont to: (StrikeFont familyName: 'Darkmap DejaVu Sans' pointSize: size); set: #standardFlapFont to: (StrikeFont familyName: 'Darkmap DejaVu Sans' pointSize: 7.5 emphasized: TextEmphasis bold emphasisCode); set: #haloLabelFont to: (StrikeFont familyName: 'Darkmap DejaVu Sans' pointSize: size); set: #standardListFont to: (StrikeFont familyName: 'Darkmap DejaVu Sans' pointSize: size); set: #standardMenuFont to: (StrikeFont familyName: 'Darkmap DejaVu Sans' pointSize: size); set: #standardSystemFont to: (StrikeFont familyName: 'Darkmap DejaVu Sans' pointSize: size); set: #windowTitleFont to: (StrikeFont familyName: 'Darkmap DejaVu Sans' pointSize: (size/1.5)).! !
!SolarizedTheme class methodsFor: 'instance creation' stamp: 'PAP 12/8/2022 18:30'! addDarkToolColors: theme "Tool-specific colors." theme set: #failureColor for: #TestRunner to: self yellow; set: #errorColor for: #TestRunner to: self red; set: #passColor for: #TestRunner to: self green; set: #failureTextColor for: #TestRunner to: self darkBackground; set: #errorTextColor for: #TestRunner to: self darkBackground; set: #passTextColor for: #TestRunner to: self darkBackground. theme set: #ignoredOperationAttributes for: #MCOperationsBrowser to: {TextColor color: self darkContentSecondary}. "Browser." theme set: #noClassCommentColor for: #Browser to: self red; set: #deprecatedMessageAttributes for: #CodeHolder to: { TextEmphasis struckOut. TextColor color: self darkContentSecondary }. "CodeHolder" theme set: #inheritanceButtonColorDefault for: #CodeHolder to: self darkBackground; set: #inheritanceButtonColorHasOverride for: #CodeHolder to: Color tan; set: #inheritanceButtonColorIsOverride for: #CodeHolder to: Color red; set: #inheritanceButtonColorSendsSuper for: #CodeHolder to: Color green; set: #inheritanceButtonColorIsOverrideAndSendsSuper for: #CodeHolder to: Color green darker; set: #inheritanceButtonColorHasOverrideAndSendsSuper for: #CodeHolder to: Color blue; set: #inheritanceButtonColorHasOverrideIsOverride for: #CodeHolder to: Color orange.! !
!SolarizedTheme class methodsFor: 'instance creation' stamp: 'PAP 12/9/2022 11:58'! addLightFonts: theme withFontSize: size
"Set-up fonts." theme set: #balloonHelpFont to: (StrikeFont familyName: 'Bitmap DejaVu Sans' pointSize: (size/2)); set: #standardButtonFont to: (StrikeFont familyName: 'Bitmap DejaVu Sans' pointSize: size); set: #standardCodeFont to: (StrikeFont familyName: 'Bitmap DejaVu Sans' pointSize: size); set: #standardFlapFont to: (StrikeFont familyName: 'Bitmap DejaVu Sans' pointSize: 7.5 emphasized: TextEmphasis bold emphasisCode); set: #haloLabelFont to: (StrikeFont familyName: 'Bitmap DejaVu Sans' pointSize: size); set: #standardListFont to: (StrikeFont familyName: 'Bitmap DejaVu Sans' pointSize: size); set: #standardMenuFont to: (StrikeFont familyName: 'Bitmap DejaVu Sans' pointSize: size); set: #standardSystemFont to: (StrikeFont familyName: 'Bitmap DejaVu Sans' pointSize: size); set: #windowTitleFont to: (StrikeFont familyName: 'Bitmap DejaVu Sans' pointSize: (size/1.5) emphasized: TextEmphasis bold emphasisCode).! !
!SolarizedTheme class methodsFor: 'instance creation' stamp: 'PAP 12/9/2022 12:00'! createDarkWithFontSize: size "doIt: [self createDark apply.]"
| themeName | themeName := 'Solarized (dark)'. ^ (self named: themeName) in: [:theme | theme merge: (self named: 'Squeak') overwrite: true. theme name: themeName.
"General morph stuff." theme set: #keyboardFocusColor for: #Morph to: self darkContentSecondary; set: #keyboardFocusWidth for: #Morph to: 1.
theme set: #background for: #MorphicProject to: self darkBackgroundForm.
self addDarkFonts: theme withFontSize: size; addDarkWindowColors: theme; addDarkSyntaxHighlighting: theme; addDarkScrollables: theme; addDarkButtons: theme; addDarkDialogs: theme; addDarkMenusAndDockingBars: theme; addDarkToolColors: theme.
theme]! !
!SolarizedTheme class methodsFor: 'instance creation' stamp: 'PAP 12/9/2022 12:00'! createLightWithFontSize: size "You have to create dark first. doIt: [self createDark. self createLight apply.]"
| themeName | themeName := 'Solarized (light)'. ^ (self named: themeName) in: [:theme | theme merge: (self named: 'Solarized (dark)') overwrite: true. theme name: themeName.
"General morph stuff." theme set: #keyboardFocusColor for: #Morph to: self lightContentSecondary; set: #keyboardFocusWidth for: #Morph to: 1. theme set: #background for: #MorphicProject to: self lightBackgroundForm.
self addLightFonts: theme withFontSize: size; addLightWindowColors: theme; addLightSyntaxHighlighting: theme; addLightScrollables: theme; addLightButtons: theme; addLightDialogs: theme; addLightMenusAndDockingBars: theme; addLightToolColors: theme.
theme]! !
!SqueakTheme class methodsFor: 'instance creation' stamp: 'PAP 12/9/2022 13:10'! addFonts: theme withFontSize: size
theme set: #standardSystemFont to: (StrikeFont familyName: #BitstreamVeraSansForSqueak pointSize: size); set: #standardFixedFont to: (TTCFont familyName: #BitstreamVeraSansMonoForSqueak pointSize: size);
set: #standardCodeFont to: (StrikeFont familyName: #BitstreamVeraSansForSqueak pointSize: size); set: #standardListFont to: (StrikeFont familyName: #BitstreamVeraSansForSqueak pointSize: size); set: #standardButtonFont to: (StrikeFont familyName: #BitstreamVeraSansForSqueak pointSize: size); set: #standardMenuFont to: (StrikeFont familyName: #BitstreamVeraSansForSqueak pointSize: size); set: #standardFlapFont to: (StrikeFont familyName: #BitstreamVeraSansForSqueak pointSize: size emphasized: TextEmphasis bold emphasisCode);
set: #windowTitleFont to: (StrikeFont familyName: #BitstreamVeraSansForSqueak pointSize: (size/1.25) emphasized: TextEmphasis bold emphasisCode); set: #balloonHelpFont to: (StrikeFont familyName: #BitstreamVeraSansForSqueak pointSize: (size/2)); set: #haloLabelFont to: (StrikeFont familyName: #BitstreamVeraSansForSqueak pointSize: 10.5);
set: #wizardStandardFont to: (StrikeFont familyName: #BitstreamVeraSansForSqueak pointSize: size); set: #wizardButtonFont to: (StrikeFont familyName: #BitstreamVeraSansForSqueak pointSize: size); set: #wizardHelpFont to: (StrikeFont familyName: #BitstreamVeraSansForSqueak pointSize: size); set: #wizardTitleFont to: (StrikeFont familyName: #BitstreamVeraSansForSqueak pointSize: (size/1.5)).! !
!SqueakTheme class methodsFor: 'instance creation' stamp: 'PAP 12/9/2022 13:19'! addToolColors: theme "Tool-specific colors." "SUnit's TestRunner." theme set: #failureColor for: #TestRunner to: Color yellow; set: #errorColor for: #TestRunner to: Color red; set: #passColor for: #TestRunner to: Color green; derive: #failureTextColor for: #TestRunner from: #PluggableTextMorph at: #textColor; derive: #errorTextColor for: #TestRunner from: #PluggableTextMorph at: #textColor; derive: #passTextColor for: #TestRunner from: #PluggableTextMorph at: #textColor. "Monticello Tools." theme set: #revertedOperationAttributes for: #MCOperationsBrowser to: {TextEmphasis struckOut}; set: #ignoredOperationAttributes for: #MCOperationsBrowser to: {TextColor color: Color gray}. "set: #rejectedOperationAttributes for: #MCOperationsBrowser to: {TextEmphasis struckOut}; set: #acceptedOperationAttributes for: #MCOperationsBrowser to: {TextEmphasis underlined}; set: #conflictingOperationAttributes for: #MCOperationsBrowser to: {TextEmphasis bold}." "Halos." theme derive: #borderColor for: #HaloMorph from: #MenuItemMorph at: #selectionColor do: [:c | c alpha: 0.8]; derive: #borderColor for: #SelectionMorph from: #MenuItemMorph at: #selectionColor do: [:c | c twiceDarker alpha: 0.75]; derive: #color for: #SelectionMorph from: #MenuItemMorph at: #selectionColor do: [:c | c alpha: 0.08]. "Code-browsing tools." theme set: #noClassCommentColor for: #Browser to: Color red; set: #deprecatedMessageAttributes for: #CodeHolder to: { TextEmphasis struckOut. TextColor gray }.
"Objects Tool." theme derive: #borderWidth for: #ObjectsTool from: #MenuMorph; derive: #borderColor for: #ObjectsTool from: #MenuMorph; derive: #borderStyle for: #ObjectsTool from: #MenuMorph; derive: #color for: #ObjectsTool from: #MenuMorph; derive: #textColor for: #ObjectsTool from: #MenuItemMorph; derive: #selectionTextColor for: #ObjectsTool from: #MenuItemMorph. "CodeHolder" theme set: #inheritanceButtonColorDefault for: #CodeHolder to: (Color gray: 0.9); set: #inheritanceButtonColorHasOverride for: #CodeHolder to: Color tan; set: #inheritanceButtonColorIsOverride for: #CodeHolder to: Color red; set: #inheritanceButtonColorSendsSuper for: #CodeHolder to: Color green; set: #inheritanceButtonColorIsOverrideAndSendsSuper for: #CodeHolder to: Color green darker; set: #inheritanceButtonColorHasOverrideAndSendsSuper for: #CodeHolder to: (Color r: 0.3 g:0.3 b: 1.0); set: #inheritanceButtonColorHasOverrideIsOverride for: #CodeHolder to: Color orange. ! !
!SqueakTheme class methodsFor: 'instance creation' stamp: 'PAP 12/9/2022 13:24'! createDullerWithFontSize: size "self createDuller apply" | name | name := 'Squeak (duller)'. ^ (self named:name) in: [:theme | theme merge: (self named: 'Squeak') overwrite: true. theme name: name. self addFonts: theme withFontSize: size; addDullerWindowColors: theme; addDullerScrollables: theme; addDullerDialogs: theme; addDullerMenusAndDockingBars: theme; addDullerButtons: theme; addDullerToolColors: theme. theme set: #color for: #TextAction to: Color ocean. theme]! !
!SqueakTheme class methodsFor: 'instance creation' stamp: 'PAP 12/9/2022 11:57'! createWithFontSize: size "This is the default theme for Squeak. self create apply. " ^ (self named: 'Squeak') in: [:theme | "General morph stuff." theme set: #keyboardFocusColor for: #Morph to: (TranslucentColor r: 0.3 g: 0.5 b: 0.5 alpha: 0.5); set: #keyboardFocusWidth for: #Morph to: 2; set: #softShadowColor for: #Morph to: (Color black alpha: 0.01); set: #softShadowOffset for: #Morph to: (10 at 8 corner: 10 at 12); set: #hardShadowColor for: #Morph to: (Color black alpha: 0.5); set: #hardShadowOffset for: #Morph to: 1 at 1. theme set: #background for: #MorphicProject to: self linenblue. self addFonts: theme withFontSize: size; addWindowColors: theme; addSyntaxHighlighting: theme; addMenusAndDockingBars: theme; addDialogs: theme; addButtons: theme; addScrollables: theme; addToolColors: theme; addMVC: theme. theme]! !
!TrimTheme class methodsFor: 'instance creation' stamp: 'PAP 12/9/2022 13:09'! addFonts: theme withFontSize: size
"Set-up fonts." theme set: #balloonHelpFont to: (StrikeFont familyName: 'BitstreamVeraSansForSqueak' pointSize: (size/2)); set: #standardButtonFont to: (StrikeFont familyName: 'BitstreamVeraSansForSqueak' pointSize: size); set: #standardCodeFont to: (StrikeFont familyName: 'BitstreamVeraSansForSqueak' pointSize: size); set: #standardFlapFont to: (StrikeFont familyName: 'BitstreamVeraSansForSqueak' pointSize: 7.5 emphasized: TextEmphasis bold emphasisCode); set: #haloLabelFont to: (StrikeFont familyName: 'BitstreamVeraSansForSqueak' pointSize: 10.5); set: #standardListFont to: (StrikeFont familyName: 'BitstreamVeraSansForSqueak' pointSize: size); set: #standardMenuFont to: (StrikeFont familyName: 'BitstreamVeraSansForSqueak' pointSize: size); set: #standardSystemFont to: (StrikeFont familyName: 'BitstreamVeraSansForSqueak' pointSize: size); set: #windowTitleFont to: (StrikeFont familyName: 'BitstreamVeraSansForSqueak' pointSize: size).! !
!TrimTheme class methodsFor: 'instance creation' stamp: 'PAP 12/9/2022 13:22'! addToolColors: theme "Tool-specific colors." "SUnit's TestRunner." theme set: #failureColor for: #TestRunner to: self yellow; set: #errorColor for: #TestRunner to: self red; set: #passColor for: #TestRunner to: self green. "Monticello Tools." theme set: #revertedOperationAttributes for: #MCOperationsBrowser to: {TextEmphasis struckOut}; set: #ignoredOperationAttributes for: #MCOperationsBrowser to: {TextColor color: self gray128}. "Browser." theme set: #noClassCommentColor for: #Browser to: self red; set: #deprecatedMessageAttributes for: #CodeHolder to: { TextEmphasis struckOut. TextColor color: self gray128 }. theme set: #inheritanceButtonColorDefault for: #CodeHolder to: self gray27; set: #inheritanceButtonColorHasOverride for: #CodeHolder to: (Color r: 0.533 g: 0.533 b: 0.333); set: #inheritanceButtonColorIsOverride for: #CodeHolder to: self red; set: #inheritanceButtonColorSendsSuper for: #CodeHolder to: self green; set: #inheritanceButtonColorIsOverrideAndSendsSuper for: #CodeHolder to: self green; set: #inheritanceButtonColorHasOverrideAndSendsSuper for: #CodeHolder to: self blue; set: #inheritanceButtonColorHasOverrideIsOverride for: #CodeHolder to: self orange. ! !
!TrimTheme class methodsFor: 'instance creation' stamp: 'PAP 12/9/2022 11:56'! createWithFontSize: size "doIt: [self create apply.]"
| themeName | themeName := 'Trim (dark)'. ^ (self named: themeName) in: [:theme | theme merge: (self named: 'Squeak') overwrite: true. theme name: themeName.
"General morph stuff." theme set: #keyboardFocusColor for: #Morph to: self blue; set: #keyboardFocusWidth for: #Morph to: 1.
theme set: #background for: #MorphicProject to: self backgroundForm.
self addFonts: theme withFontSize: size. self addWindowColors: theme. self addSyntaxHighlighting: theme. self addMenusAndDockingBars: theme. self addDialogs: theme. self addButtons: theme. self addScrollables: theme. self addToolColors: theme.
theme]! !
SqueakTheme class removeSelector: #createwithFontSize:!
squeak-dev@lists.squeakfoundation.org