This is one of three PRs across scratch-blocks, scratch-gui and scratch-vm that refactor each package to define block colors as Blockly BlockStyles, instead of using the colour attribute in Block JSON. This has several advantages:
Using the colour attribute causes the secondary/tertiary colors to be calculated, and Blockly does so in a way that slightly skews from the colors Scratch specifies. Scratch had previously modified core Blockly to read the secondary/tertiary colors out of the block JSON, but this isn't directly achievable using supported APIs.
Using block styles makes it easy to switch themes, and Scratch's themes (currently just the default and a high contrast variant) are now transformed into BlockStyles/Blockly themes.
In addition, these changes fix the coloration of dropdown fields in their various forms to align with Scratch's behavior. The ability for Scratch extensions to specify a custom block color is also preserved, even though that functionality is currently unused.
This is one of three PRs across scratch-blocks, scratch-gui and scratch-vm that refactor each package to define block colors as Blockly BlockStyles, instead of using the
colour
attribute in Block JSON. This has several advantages:colour
attribute causes the secondary/tertiary colors to be calculated, and Blockly does so in a way that slightly skews from the colors Scratch specifies. Scratch had previously modified core Blockly to read the secondary/tertiary colors out of the block JSON, but this isn't directly achievable using supported APIs.In addition, these changes fix the coloration of dropdown fields in their various forms to align with Scratch's behavior. The ability for Scratch extensions to specify a custom block color is also preserved, even though that functionality is currently unused.