Ticket #3205: t3205_enlighten_too_dark_chat_colors.patch
File t3205_enlighten_too_dark_chat_colors.patch, 7.8 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
1674 1674 var mapData = loadMapData(mapName); 1675 1675 var mapSettings = (mapData && mapData.settings ? mapData.settings : {}); 1676 1676 var pData = mapSettings.PlayerData ? mapSettings.PlayerData[player] : {}; 1677 1677 var pDefs = g_DefaultPlayerData ? g_DefaultPlayerData[player] : {}; 1678 1678 1679 color = rgbToGuiColor(getSetting(pData, pDefs, "Color")); 1679 color = getSetting(pData, pDefs, "Color"); 1680 1681 // enlighten colors to improve readability 1682 var [h, s, l] = rgbToHsl(color.r, color.g, color.b); 1683 var [r, g, b] = hslToRgb(h, s, Math.max(0.7, l)); 1684 color = rgbToGuiColor({"r": r, "g": g, "b": b}); 1680 1685 } 1681 1686 1682 1687 var formatted; 1683 1688 switch (msg.type) 1684 1689 { -
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
233 233 if (role && caller == "lobbylist") 234 234 { 235 235 // Make the role uppercase. 236 236 role = role.charAt(0).toUpperCase() + role.slice(1); 237 237 if (role == "Moderator") 238 role = '[color="0 1250"]' + translate(role) + '[/color]';238 role = '[color="0 219 0"]' + translate(role) + '[/color]'; 239 239 } 240 240 else 241 241 role = ""; 242 242 243 243 Engine.GetGUIObjectByName("usernameText").caption = user; … … 393 393 if(!filterGame(g)) 394 394 { 395 395 // 'waiting' games are highlighted in orange, 'running' in red, and 'init' in green. 396 396 let name = escapeText(g.name); 397 397 if (g.state == 'init') 398 name = '[color="0 1250"]' + name + '[/color]';398 name = '[color="0 219 0"]' + name + '[/color]'; 399 399 else if (g.state == 'waiting') 400 400 name = '[color="255 127 0"]' + name + '[/color]'; 401 401 else 402 name = '[color="2 550 0"]' + name + '[/color]';402 name = '[color="219 0 0"]' + name + '[/color]'; 403 403 list_name.push(name); 404 404 list_ip.push(g.ip); 405 405 list_mapName.push(translate(g.niceMapName)); 406 406 list_mapSize.push(translatedMapSize(g.mapSize)); 407 407 let idx = g_mapTypes.indexOf(g.mapType); … … 451 451 case "away": 452 452 color = "229 76 13"; 453 453 status = translate("Away"); 454 454 break; 455 455 case "available": 456 color = "0 1250";456 color = "0 219 0"; 457 457 status = translate("Online"); 458 458 break; 459 459 case "offline": 460 460 color = "0 0 0"; 461 461 status = translate("Offline"); … … 1036 1036 // 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. 1037 1037 // 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 1038 1038 // us much more variety if we generate in RGB. Unfortunately, enforcing that RGB values are a certain lightness is very difficult, so 1039 1039 // we convert to HSL to do the computation. Since our GUI code only displays RGB colors, we have to convert back. 1040 1040 var [h, s, l] = rgbToHsl(hash >> 24 & 0xFF, hash >> 16 & 0xFF, hash >> 8 & 0xFF); 1041 return hslToRgb(h, s, Math.max(0. 4, l)).join(" ");1041 return hslToRgb(h, s, Math.max(0.7, l)).join(" "); 1042 1042 } 1043 1043 1044 1044 function repeatString(times, string) { 1045 1045 return Array(times + 1).join(string); 1046 1046 } … … 1064 1064 function clampColorValue(value) 1065 1065 { 1066 1066 return Math.abs(1 - Math.abs(value - 1)); 1067 1067 } 1068 1068 1069 // See http://stackoverflow.com/questions/2353211/hsl-to-rgb-color-conversion1070 function rgbToHsl(r, g, b)1071 {1072 r /= 255;1073 g /= 255;1074 b /= 255;1075 var max = Math.max(r, g, b), min = Math.min(r, g, b);1076 var h, s, l = (max + min) / 2;1077 1078 if (max == min)1079 h = s = 0; // achromatic1080 else1081 {1082 var d = max - min;1083 s = l > 0.5 ? d / (2 - max - min) : d / (max + min);1084 switch (max)1085 {1086 case r: h = (g - b) / d + (g < b ? 6 : 0); break;1087 case g: h = (b - r) / d + 2; break;1088 case b: h = (r - g) / d + 4; break;1089 }1090 h /= 6;1091 }1092 1093 return [h, s, l];1094 }1095 1096 function hslToRgb(h, s, l)1097 {1098 function hue2rgb(p, q, t)1099 {1100 if (t < 0) t += 1;1101 if (t > 1) t -= 1;1102 if (t < 1/6) return p + (q - p) * 6 * t;1103 if (t < 1/2) return q;1104 if (t < 2/3) return p + (q - p) * (2/3 - t) * 6;1105 return p;1106 }1107 1108 [h, s, l] = [h, s, l].map(clampColorValue);1109 var r, g, b;1110 1111 if (s == 0)1112 r = g = b = l; // achromatic1113 else {1114 var q = l < 0.5 ? l * (1 + s) : l + s - l * s;1115 var p = 2 * l - q;1116 r = hue2rgb(p, q, h + 1/3);1117 g = hue2rgb(p, q, h);1118 b = hue2rgb(p, q, h - 1/3);1119 }1120 1121 return [r, g, b].map(function (n) Math.round(n * 255));1122 }1123 1124 1069 (function () { 1125 1070 function hexToRgb(hex) { 1126 1071 return parseInt(hex.slice(0, 2), 16) + "." + parseInt(hex.slice(2, 4), 16) + "." + parseInt(hex.slice(4, 6), 16) + "."; 1127 1072 } 1128 1073 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">