Ticket #3205: t3205_enlighten_too_dark_chat_colors_a18.patch
File t3205_enlighten_too_dark_chat_colors_a18.patch, 7.6 KB (added by , 9 years ago) |
---|
-
binaries/data/mods/public/gui/common/color.js
1 // Ensure `value` is between 0 and 1. 2 function clampColorValue(value) 3 { 4 return Math.abs(1 - Math.abs(value - 1)); 5 } 6 7 function rgbToHsl(r, g, b) 8 { 9 r /= 255; 10 g /= 255; 11 b /= 255; 12 var max = Math.max(r, g, b), min = Math.min(r, g, b); 13 var h, s, l = (max + min) / 2; 14 15 if (max == min) 16 h = s = 0; // achromatic 17 else 18 { 19 var d = max - min; 20 s = l > 0.5 ? d / (2 - max - min) : d / (max + min); 21 switch (max) 22 { 23 case r: h = (g - b) / d + (g < b ? 6 : 0); break; 24 case g: h = (b - r) / d + 2; break; 25 case b: h = (r - g) / d + 4; break; 26 } 27 h /= 6; 28 } 29 30 return [h, s, l]; 31 } 32 33 function hslToRgb(h, s, l) 34 { 35 function hue2rgb(p, q, t) 36 { 37 if (t < 0) t += 1; 38 if (t > 1) t -= 1; 39 if (t < 1/6) return p + (q - p) * 6 * t; 40 if (t < 1/2) return q; 41 if (t < 2/3) return p + (q - p) * (2/3 - t) * 6; 42 return p; 43 } 44 45 [h, s, l] = [h, s, l].map(clampColorValue); 46 var r, g, b; 47 48 if (s == 0) 49 r = g = b = l; // achromatic 50 else { 51 var q = l < 0.5 ? l * (1 + s) : l + s - l * s; 52 var p = 2 * l - q; 53 r = hue2rgb(p, q, h + 1/3); 54 g = hue2rgb(p, q, h); 55 b = hue2rgb(p, q, h - 1/3); 56 } 57 58 return [r, g, b].map(function (n) Math.round(n * 255)); 59 } 60 No newline at end of file -
binaries/data/mods/public/gui/gamesetup/gamesetup.js
1717 1717 var mapData = loadMapData(mapName); 1718 1718 var mapSettings = (mapData && mapData.settings ? mapData.settings : {}); 1719 1719 var pData = mapSettings.PlayerData ? mapSettings.PlayerData[player] : {}; 1720 1720 var pDefs = g_DefaultPlayerData ? g_DefaultPlayerData[player] : {}; 1721 1721 1722 color = rgbToGuiColor(getSetting(pData, pDefs, "Colour")); 1722 + color = getSetting(pData, pDefs, "Colour"); 1723 1724 + // enlighten colors to improve readability 1725 + var [h, s, l] = rgbToHsl(color.r, color.g, color.b); 1726 + var [r, g, b] = hslToRgb(h, s, Math.max(0.7, l)); 1727 + color = rgbToGuiColor({"r": r, "g": g, "b": b}); 1723 1728 } 1724 1729 1725 1730 var formatted; 1726 1731 switch (msg.type) 1727 1732 { -
binaries/data/mods/public/gui/gamesetup/gamesetup.xml
1 1 <?xml version="1.0" encoding="utf-8"?> 2 2 3 3 <objects> 4 4 5 <script file="gui/common/color.js"/> 5 6 <script file="gui/common/network.js"/> 6 7 <script file="gui/common/functions_civinfo.js"/> 7 8 <script file="gui/common/functions_global_object.js"/> 8 9 <script file="gui/common/functions_utility.js"/> 9 10 <script file="gui/gamesetup/gamesetup.js"/> -
binaries/data/mods/public/gui/lobby/lobby.js
232 232 if (role && caller == "lobbylist") 233 233 { 234 234 // Make the role uppercase. 235 235 role = role.charAt(0).toUpperCase() + role.slice(1); 236 236 if (role == "Moderator") 237 role = '[color="0 1250"]' + translate(role) + '[/color]';237 role = '[color="0 219 0"]' + translate(role) + '[/color]'; 238 238 } 239 239 else 240 240 role = ""; 241 241 242 242 Engine.GetGUIObjectByName("usernameText").caption = user; … … 392 392 if(!filterGame(g)) 393 393 { 394 394 // 'waiting' games are highlighted in orange, 'running' in red, and 'init' in green. 395 395 let name; 396 396 if (g.state == 'init') 397 name = '[color="0 1250"]' + g.name + '[/color]';397 name = '[color="0 219 0"]' + g.name + '[/color]'; 398 398 else if (g.state == 'waiting') 399 399 name = '[color="255 127 0"]' + g.name + '[/color]'; 400 400 else 401 name = '[color="2 550 0"]' + g.name + '[/color]';401 name = '[color="219 0 0"]' + g.name + '[/color]'; 402 402 list_name.push(name); 403 403 list_ip.push(g.ip); 404 404 list_mapName.push(translate(g.niceMapName)); 405 405 list_mapSize.push(translatedMapSize(g.mapSize)); 406 406 let idx = g_mapTypes.indexOf(g.mapType); … … 450 450 case "away": 451 451 color = "229 76 13"; 452 452 status = translate("Away"); 453 453 break; 454 454 case "available": 455 color = "0 1250";455 color = "0 219 0"; 456 456 status = translate("Online"); 457 457 break; 458 458 case "offline": 459 459 color = "0 0 0"; 460 460 status = translate("Offline"); … … 1015 1015 // First create the color in RGB then HSL, clamp the lightness so it's not too dark to read, and then convert back to RGB to display. 1016 1016 // The reason for this roundabout method is this algorithm can generate values from 0 to 255 for RGB but only 0 to 100 for HSL; this gives 1017 1017 // us much more variety if we generate in RGB. Unfortunately, enforcing that RGB values are a certain lightness is very difficult, so 1018 1018 // we convert to HSL to do the computation. Since our GUI code only displays RGB colors, we have to convert back. 1019 1019 var [h, s, l] = rgbToHsl(hash >> 24 & 0xFF, hash >> 16 & 0xFF, hash >> 8 & 0xFF); 1020 return hslToRgb(h, s, Math.max(0. 4, l)).join(" ");1020 return hslToRgb(h, s, Math.max(0.7, l)).join(" "); 1021 1021 } 1022 1022 1023 1023 function repeatString(times, string) { 1024 1024 return Array(times + 1).join(string); 1025 1025 } … … 1043 1043 function clampColorValue(value) 1044 1044 { 1045 1045 return Math.abs(1 - Math.abs(value - 1)); 1046 1046 } 1047 1047 1048 // See http://stackoverflow.com/questions/2353211/hsl-to-rgb-color-conversion1049 function rgbToHsl(r, g, b)1050 {1051 r /= 255;1052 g /= 255;1053 b /= 255;1054 var max = Math.max(r, g, b), min = Math.min(r, g, b);1055 var h, s, l = (max + min) / 2;1056 1057 if (max == min)1058 h = s = 0; // achromatic1059 else1060 {1061 var d = max - min;1062 s = l > 0.5 ? d / (2 - max - min) : d / (max + min);1063 switch (max)1064 {1065 case r: h = (g - b) / d + (g < b ? 6 : 0); break;1066 case g: h = (b - r) / d + 2; break;1067 case b: h = (r - g) / d + 4; break;1068 }1069 h /= 6;1070 }1071 1072 return [h, s, l];1073 }1074 1075 function hslToRgb(h, s, l)1076 {1077 function hue2rgb(p, q, t)1078 {1079 if (t < 0) t += 1;1080 if (t > 1) t -= 1;1081 if (t < 1/6) return p + (q - p) * 6 * t;1082 if (t < 1/2) return q;1083 if (t < 2/3) return p + (q - p) * (2/3 - t) * 6;1084 return p;1085 }1086 1087 [h, s, l] = [h, s, l].map(clampColorValue);1088 var r, g, b;1089 1090 if (s == 0)1091 r = g = b = l; // achromatic1092 else {1093 var q = l < 0.5 ? l * (1 + s) : l + s - l * s;1094 var p = 2 * l - q;1095 r = hue2rgb(p, q, h + 1/3);1096 g = hue2rgb(p, q, h);1097 b = hue2rgb(p, q, h - 1/3);1098 }1099 1100 return [r, g, b].map(function (n) Math.round(n * 255));1101 }1102 1103 1048 (function () { 1104 1049 function hexToRgb(hex) { 1105 1050 return parseInt(hex.slice(0, 2), 16) + "." + parseInt(hex.slice(2, 4), 16) + "." + parseInt(hex.slice(4, 6), 16) + "."; 1106 1051 } 1107 1052 function r(times, hex) { -
binaries/data/mods/public/gui/lobby/lobby.xml
1 1 <?xml version="1.0" encoding="utf-8"?> 2 2 3 3 <objects> 4 4 <script file="gui/common/functions_global_object.js"/> 5 5 <script file="gui/common/functions_utility.js"/> 6 <script file="gui/common/color.js"/> 6 7 <script file="gui/common/timer.js"/> 7 8 <script file="gui/common/music.js"/> 8 9 9 <script file="gui/lobby/lobby.js"/> 10 10 11 11 <object type="image" style="ModernWindow" size="0 0 100% 100%" name="lobbyWindow"> 12 12 13 13 <object style="ModernLabelText" type="text" size="50%-128 0%+4 50%+128 36">