diff --git a/docs/source/techspecs/layout_files.rst b/docs/source/techspecs/layout_files.rst index 760d584cd757a..8d8fa8d544563 100644 --- a/docs/source/techspecs/layout_files.rst +++ b/docs/source/techspecs/layout_files.rst @@ -118,8 +118,8 @@ intensity). Alpha ranges from 0.0 (fully transparent) to 1.0 (opaque). Colour channel values are not pre-multiplied by the alpha value. Component and view item colour is specified using ``color`` elements. -Meaningful attributes are ``red``, ``green``, ``blue`` and ``alpha``. This -example ``color`` element specifies all channel values: +Meaningful attributes are ``red``, ``green``, ``blue`` and ``alpha`` and ``hex``. This +example ``color`` element specifies all channel values individually: .. code-block:: XML @@ -129,6 +129,20 @@ Any omitted channel attributes default to 1.0 (full intensity or opaque). It is an error if any channel value falls outside the range of 0.0 to 1.0 (inclusive). +Alternatively, you can specify a single hex value, for either RGB (six hex digits) +or RGBA (eight hex digits): + +.. code-block:: XML + + + +(RGB) or + +.. code-block:: XML + + + +(RGBA). .. _layfile-concepts-params: diff --git a/src/emu/rendlay.cpp b/src/emu/rendlay.cpp index bd393d5d31d6c..f547c9e599959 100644 --- a/src/emu/rendlay.cpp +++ b/src/emu/rendlay.cpp @@ -887,6 +887,39 @@ class layout_environment if (!node) return render_color{ 1.0F, 1.0F, 1.0F, 1.0F }; + if (node->has_attribute("hex")) + { + // Use the single hex attribute + if (node->has_attribute("red") || node->has_attribute("green") || node->has_attribute("blue") || node->has_attribute("alpha")) + throw layout_syntax_error(util::string_format("specify either hex or (red,green,blue) colors")); + + const std::string hex{node->get_attribute_string("hex", "")}; + auto l = hex.length(); + if (l == 6 || l == 8) + { + std::size_t pos; + unsigned long val = std::stoul(hex, &pos, 16); + if (pos != l) + throw layout_syntax_error(util::string_format("illegal hex color %s", hex)); + + float alpha = 1.0; + size_t offset = 0; + if (l == 8) + { + alpha = BIT(val, 0, 8) / 255.0; + offset = 8; + } + float blue = BIT(val, offset + 0, 8) / 255.0; + float green = BIT(val, offset + 8, 8) / 255.0; + float red = BIT(val, offset + 16, 8) / 255.0; + return render_color { alpha, red, green, blue }; + } + else + { + throw layout_syntax_error(util::string_format("illegal hex color %s", hex)); + } + } + // parse attributes render_color const result{ get_attribute_float(*node, "alpha", 1.0F), diff --git a/src/mame/layout/sd1.lay b/src/mame/layout/sd1.lay index c285d77c3d000..3d1e2b3dadab5 100644 --- a/src/mame/layout/sd1.lay +++ b/src/mame/layout/sd1.lay @@ -181,42 +181,42 @@ - + - + - + - + - + - + - + - + @@ -239,23 +239,23 @@ - + - + - + - + - + @@ -272,7 +272,7 @@ - + @@ -548,23 +548,23 @@ - + - + - + ]]> - + @@ -573,14 +573,14 @@ - + ]]> - + @@ -589,14 +589,14 @@ - + ]]> - + @@ -605,14 +605,14 @@ - + ]]> - + @@ -621,14 +621,14 @@ - + ]]> - + @@ -637,14 +637,14 @@ - + ]]> - + @@ -655,176 +655,176 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -843,31 +843,31 @@ - + - + - + - + - + - + @@ -1679,495 +1679,495 @@ - + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + @@ -2223,303 +2223,303 @@ - + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + diff --git a/src/mame/layout/sd132.lay b/src/mame/layout/sd132.lay index dc8976311c3bf..39125471e4734 100644 --- a/src/mame/layout/sd132.lay +++ b/src/mame/layout/sd132.lay @@ -181,42 +181,42 @@ - + - + - + - + - + - + - + - + @@ -239,23 +239,23 @@ - + - + - + - + - + @@ -272,7 +272,7 @@ - + @@ -551,23 +551,23 @@ - + - + - + ]]> - + @@ -576,14 +576,14 @@ - + ]]> - + @@ -592,14 +592,14 @@ - + ]]> - + @@ -608,14 +608,14 @@ - + ]]> - + @@ -624,14 +624,14 @@ - + ]]> - + @@ -640,14 +640,14 @@ - + ]]> - + @@ -658,176 +658,176 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -846,31 +846,31 @@ - + - + - + - + - + - + @@ -1682,495 +1682,495 @@ - + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + @@ -2226,303 +2226,303 @@ - + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + @@ -2644,7 +2644,7 @@ - + diff --git a/src/mame/layout/vfx.lay b/src/mame/layout/vfx.lay index 0199b90cc6ed3..83bce0dd068dd 100644 --- a/src/mame/layout/vfx.lay +++ b/src/mame/layout/vfx.lay @@ -129,42 +129,42 @@ - + - + - + - + - + - + - + - + @@ -187,23 +187,23 @@ - + - + - + - + - + @@ -220,7 +220,7 @@ - + @@ -457,23 +457,23 @@ - + - + - + ]]> - + @@ -482,14 +482,14 @@ - + ]]> - + @@ -498,14 +498,14 @@ - + ]]> - + @@ -514,14 +514,14 @@ - + ]]> - + @@ -530,14 +530,14 @@ - + ]]> - + @@ -548,168 +548,168 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -728,31 +728,31 @@ - + - + - + - + - + - + @@ -1456,495 +1456,495 @@ - + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + @@ -2000,303 +2000,303 @@ - + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + diff --git a/src/mame/layout/vfxsd.lay b/src/mame/layout/vfxsd.lay index 25ccd81e6ab54..617c498671514 100644 --- a/src/mame/layout/vfxsd.lay +++ b/src/mame/layout/vfxsd.lay @@ -181,42 +181,42 @@ - + - + - + - + - + - + - + - + @@ -239,23 +239,23 @@ - + - + - + - + - + @@ -272,7 +272,7 @@ - + @@ -548,23 +548,23 @@ - + - + - + ]]> - + @@ -573,14 +573,14 @@ - + ]]> - + @@ -589,14 +589,14 @@ - + ]]> - + @@ -605,14 +605,14 @@ - + ]]> - + @@ -621,14 +621,14 @@ - + ]]> - + @@ -637,14 +637,14 @@ - + ]]> - + @@ -655,176 +655,176 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -843,31 +843,31 @@ - + - + - + - + - + - + @@ -1679,495 +1679,495 @@ - + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + @@ -2223,303 +2223,303 @@ - + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + +