o_W__%_#
zBNlIv?*}RB2xD>b40DG15@L;twcdl
zd(sX&w?T-6e7A8pJ|D#8eF1|Gj5e)|>>H0efp`hjI8+9CX-$!5E#WN6H`YkmYGb$x
z$5Du#JLjw3!WM?jr`2
{f#c!Ke5hA#ROl>x>)dTD!zofO+pLqR
zWYBZw;IlX-8nFJ>tc{9RGRIb!)az>1f!(^H=RkFB{~4tRM$GHIdQ6+ep1hW0-7@{z
z*=By%`-?Y4PSFE1n+h0Da{C@;$vI|tH-HSn-qySh{2yaQjy5%TQkD|#Q1Uw3w1htp
zjMw*oop3IeHT$wk!DLwx;JTq|>!O@oNALr)mcE7yLc|c9d(LSl#EYoH$6$#E%Cc&h
zwk{C_n5fCq{Y_YZo4U~}6H^po;o5nMO#a%uD1r8@d494<7tJ$1DSpa6Q1k)2P+8z0
zuBccF#pXpw;&m@`z(evspppk5O*<&bzc+5ja$u4*9pZj8euYo060M9RP2UEHkR+&{
zKI^Uv1bm1!b#ZBOk_#-aX){i*w47+vV?^JAB>S$XZnFKiHjiJKCOt?r-%CH;EN##D
zG~Vg}U(`5tg$ubKx}BT3hE~G)_q=&U=IPS^f=J(irb2=eEkhS?{OCX*@!RTnC0g{=
z0Dq#i7oBCR|Nk@@!3TR+Hl$c4HdJb=(+!m+6$JSNfN6klb
ze(yK(HA&jmRmKx(SJ8u32nU@=6%Tc6TSW`bYp6_Ac^c+06o0yk~rCCL)#!lE&3
zBkP_3<;cqP&+mq18M%Fy+SpRrbJ2f~b}LPT{6v9Ts8=iTi}%F=6Pao)=gZ(B#@LNG
zrA||*W}Fgj2%?WYr&Zz#oZ_JejmfX34Z}UQ3A2#$pS&%LW`)*
zy)RGxCRm(dli0jmQuVmOzTI3Ug}(So-j^dk6+dqDx9{|q!3jlR1re;va02g|`Eq(X
zFQR$(62u>LtP70%bpoGq+-Pq)>ff-xcENSA5WqBWqc2$8=T
zVDWjvkhn<#rJl;2#3)ot>`rUT7A6M#KDbiP@QsO~9x|g9U3-oL@Ez(8u9Ko6(U-nh
zq`93cVn+`gLv$uZv?o``ns#O`YM%BEAMRA=921+?T>96g^fnwHHS9N@4BoK??Lvdb
z*6z?n!-U&D_1cw!PWv|RT8wy@;eiu(@7(A76W9Yk9iMI|Gy7eYprPpIc1SuAOxQ9T
zoDF7zZ3uQb;@oD8n7By@>)9xsnGh-sfyix
zj;cFkl1Dc=v^gzluc_l&?@-3om&ac7%xbPY?RxI4q@yMY_1noGUbo>iIET3GZoZb!7`pktcjP+b(NOv-tjK_lY4A6)deZ!fLBV9V
z-Q?pzsYX!ZHxA65h{l9zDXXWy*5lrNgX_#dBblM;S1
zh#U2^XJxR-lIk;6QRry=z}4Ik^t2UjV|}0RWEH@^+#Y8*rc{@cd5V@8xDo9LU0B&WWv#W!9R`td~{GN{8a0(M_PovaSoavZnK~77mqX
z!pTQVFzNswyAhPyo1bjZLy_73W+RTl(`k~I#sbG}e53F8r9-dAlX4P1MV;CXg5l@O
zkYktQkg+UmOK*g<=Gj2ycV0d$`K)CS`(5U|FAXCCbg&il^#T`sy4PDD?oyzNWAD#*yr
zdRkl{4F3G<{E(a|SlCiC80f$ejxd`_S^K9~*P*mv#aH6q|uHdPwcjPG(DYxH)josRZTKXJVwf{vuO6WA#GcU+6Vi
znVKanvie2hR-q*&47ruVkbV}PCYCZJcrH{VmJb8=cr!y_$z99kJdF@k+
zjWdI08VTX+>}eOR*O
z=)U+bo9<__TSdDUxY9(s5Fs5e4t8aVcK^QBy*$#J7##{;st@|t{e6<_EdR^l@t+3U
zpoL9{xAY&q#s*@~7Ak_c_(J`JY7Nn=&5*#C8%k`=PUDW%o|T!gUK0i6tL^aXnQY#*
zwkbZ2?^WsdW074?poauIkJOm=uQ1$dI-#c7=$E_ZARSt(KY)&H&5g{Ibqw*Z^oD#a
zdGoJ!Wo3-{TWmh2lFD7S+u3UEJeYt*{+;zPh!9zy?&bDS8TOgAJkl#$m^&9yB(=dX
z#J=du2^Vw#A)LDWm>AA;;lpcRedNC~d~X{Xh36CZ?$hzUBkR|OS;!^w`8QKc
z{?|@5)2pJ~1c@PFxJqm-=u%SycV5PXMv6RZzSwBfr!WYRrN`*ER|6Y-bNK@NQFD$@
z3-w<=m2n%!K-=_h)5XnPzVI?TSB1KB@7&~O`Cw8vd9gMQ5EFzp(U*#k@iMB_dtw63
z9CQ1v2XuirdQ2TKj_$u349-&w&&8kG#YrNSO%ub!yS)(H#^xpIga~wOhurSfd1>{~{r8!>r%u(_O_^tb{6Q(Oo?Q3h
zf>6jB_j0cN@}6gX0psexCsp0V$1xeaYD1{CQjkgqVjSzGV+ogkGqEV`JeJ$jy
zZ7!lv&Mct}sH|02$9xjKh+c(
z`PNK4Uu=vL2V!@oo1?$oSYJNHfmlgCK|GI&^;o(m81m+JGu@s$XaAAuSOcA5aX05`
zB^PqSahPKm)4L-hx=WSTd7-Cznt?+9cy1*uE~zbjfv4@+`U|@DCz9WJGN~8msAqNF
z*!OFlWN~jOeJMfC^lU=Xg*|!`o$69)fA?=7*r4rcXM$Zx07Ir2`j3w8L|0gQOx#l}
z>Q=hb*D=Wd`FF=5%3_ZfJnwf@a_TCs~t
zm@oZ#j0uW#HnSqX*$1*oYl;Fi|ATIXV{K}S^Hu)x?w<>njFsU$gm7rrKLO`_<))or
zF+80|pjOBw3h%GZhqnTQAt5xei+g7ckz^)j#K)u5kCqvb*BZ1nYgNu1!M?FrzGdAZ
zCy_srPj3V2OQ?9uUAILBh7X4YxP
zYHCM>2_dzXuC4&MvphaH_67Q*u}WNZ&FgDapvPReaa$;X>~$q&E!vv8A@@5?IysNkUiX>Q
z`6$AP`ewG6YP<+2k&v7P7Yha*zI#c~qm$$Ve~6;3JyD&!58-hW0k7N_};L|1p7OiSFM0x|9dW7tE39?$BD;z00-hMGCQ`EWlc_e1$0Gb-s8>i$3S
z#|yWhJB!0!Y0|kmk6gVKr#FYY31gs(ebId0wLbgsZ^rHGXYtUwkL|LWuJS|r-6_2!
zGj2`o9O6kSRP@DqG)(a;UoO9);_&2h=M2}yeHqv76Q^gvf@^P%%#
zASSfc1*g*%Bndbr&DzzB+2I6TjT1TRY4mxN1Pxy^ON3dheQw(N4Pzi&Tac=&)RT4<
zo;E4<*%z-{TXte&QgO6VJb`ZXj5>sm3zhY{L^d7HN(cmG#cUYZ_)e+)Hj~sWFS;W;
z`Zc;}v@#9(thInvcH_m)xA&enHacHkcV0(1N|Q8rR2u)BsjbIYJ^Ei`l&g8H#i63g
zyn9zv`>@O8@UpY~?Ra$o2|1T%O?s3~R_6J0uZOfhIp}%TONp4~!7=gf^8H2m>NS;A
zseYP*-JQ#XXzZ00iaBlR7iO7jGbwjVGzESNLDJWIf2kO{UxXK$?DRKNo<~gLLQLnV
z#wRMpAKGyo0E=FE){^l8iK15-9dsim+_1k9iY9i|2)M!wveKBcwX13>DOWj_bwVJf
zTk{@0DEjE~#RZH{>RAX=x^+1>y&4b`-}-oe?1kg67ZEM%CDxSz0eR*?zL%R>l}iHa
zt8QFOPy;9Tyxi832c(Bu4~UdlEV?hpT9ahkOZ1@&{3`-u5I}+McWr20ZxvsM=q!I0
zdeKJJ>SRNxzyFC|6W8h>_WNsYSMS+Whp#3I`^l}w{?sDOm}W|~^xXJaT}iipeF4FY
z!}^bO2Z(6PzJH1fWN%tp`s{;f^-&WY+wH<2cDID1E6KP;eQXW%N%avth|;y^h4q!h
zNgwWzQZCFBlQ~P}rym)uqxK@GFilSMaOg2wZ2yh5j4z4PvDF6LqfSTCX1nF=bm^+u
zsSDp^uEfPvSx0s{Pb|qUT^Fou$e0%P+3cJKluA!i9!Kfx1RYenTv|9jtp&m|Hr?+XUW5&^y0PK#hPM=hkMZ7q;Ep|@3&&)
z^hY_xaZ7vWQ_kIqUU?Ui)|}EfN+%=93f|iqD2};eWDL9*rU1nF+}rGj{L_E4yka-u
z=lgaN0EakeMf&U#c4}}JP
zA}D00V$~IRU(pfKURO)jhul};q9QloV#VsAbQH~y7zIB&D!Dgp<+n(+OQ!_n1#ch(
z^E{iDtan6(gKp%bB7C3Dyf;g#D;mJFx(P`;4jIfpFRsf(jqsroWc)D&+vJwBJk-3C
z`k-k2m2unH$Refm#Aob
z^z<+C0E&Q?j|7xUu6Aa_H?Ep9jOgZBymgK+b5j3h--L}t!RDt+5(C~VJ=C0r
ze8H9so8=>Ek6mEvCa`|J{hmFE@fRpIU}g}2lCwCe#x;ml-k*yjTSn+1kNbGfdo;Pf1qP)VpO0uf)9DTh6qKrD
z4NqhzEu(Zo@=1-e%;aUPd7sQiCU}NCJ4q<9_?A
zOor6mz&QAR5jYf4A)Ij0-6etczW)gA{DB`rwvV5l|QtBxKvY-cykD2C)NsCA@TXl9gcl>t>
zY6{B?p&go2^tL{4Aa(zvx-~=sYDx6;Sb
z_Fdc!ZH^I6(C4?rYFAr%SsSLw^;Yee`tJ2Uk49~5gTXxM-A
zeZRB&OkzHyeshB(6hjAjMYwN_7CN!jU-*
zUSVoRtPk+za=VXQ!}|QySZS`DZIh~JW!}$!R}Yr;?ha=}S4o2+GuAN4Ru?;yP(2Kp
z1Iz|Z&jvBU8XHaf=;p!eYgdL+lh*4{oFj9Wt9>j&8p&uN%;1Y@dXf=y(iL~zlV*cFq^xzYQj&h8k3J
zY-XYxc)t^1CIKv|tYh(`BCfWFieM+vutE6Vnlh$SNz67FrOMj+sM9WP$TY9s~}V24$6-;ndGoM5alGu*379k~ZV5>({Kiu&?b
z?|Zi|sAy2O=1y`|lW9yVj+ir}^4Na9RJE1v`BLEz5Z3?6T>6+B#}&qtSr!lMO}^jU
zWJMUk;@pp)ed%2>X}=xA^w;So2kZWeTxwyZNq7r}=ccLDNlw%-wJyKhS!jwDBHf
zjpUtu^P;MTHbp^6+`jpqP}g_+9o-pN7j10`I@`RGWeI-d)=EOK5YrqD
zlRkq&Zw}r4OY6Uo*|@h{B|9v%-q=YIeAdAhT$MKI3m(O#3)cl-@`_jXaF49?vgRs+8~A7mgdS}fvJDFC
zrHUgkM+wIe{(7cb;Mpvz3@2kKKf(u5v4534lrHtEvhve7#)|M#X6uJp?GCaPCxkmD
zv@+_4No*|QZD!bdv+e*Eo2A9-sDJ-a01Dkau5?A4((*D^uS70Qf6^ORdBaeR611(B
z?3oZgm5t+E=RgE`B@SMpMm4MTsylCoth)ggh
z7R7#ZxB&P)TBnYXqAT8}60J0tFfdNpUUyaE01|lX(H8L7rYE=5CD_ggkrsID<~0M}
zUipFXY%z+h5X#+w_gMEvon!q9+f`P~#{rDD?M0t|jl0k0{@a-G{<#<*5$yVjbfKV6
zDlPZPOTw&-FvA9%WF&HrJd76k;K3Y*8Pj=4$}k~oE*y*heq3yRRu(GJ1ZLIC7z}ex
zTO80mo)Bt}RT>@K@U&wH9c^py0*`zr_`2YgWM0c;dxgmC7$11YlP_@-(e4&-P)C4ty?fs~hc?q8Tw^u_)+=Tsi9&l8B05K~I63+O6eeOEJ>52~$P_bP#R
z0iqDlj`Rx$pM2izi5~I{_l)rqoM)Hku#Y)Aj0S>ZY;iHsv3|Cb`F{*;j6mOfwrSwE
zESN+@1)${!h&Ox_O*Y^$rG6M)e=D=BBj`5b-5y)bXaf7EqVf87vtWZ^<@92fyPOk^
zeN|jw;x0u95A~-Hv{!pWUZ#bB6pz~v@)h|3<4FnTcL)QBh3m?1TMF=&ZMt8kdD(H!
z3W7qaQoV`3cO=wlMhB;N`s;$wC_NMhBJ{(9?Ae3>kZ>6@;7zX|PTH%(by`Q=JXNb4
zB`^})JrlL$$kfa>)mP&w#4Rrd5mZGZ(m#$=2#$g4UcUzvV)IQo69!$#&65F?Mz8N0
zalc4m8)?R;g>{l2U#{h)Wyb}MwEYW3x<@0};BSqT;^H=FaP31m@rgVXUWr8{WGs*V0^
zpa*2h1<}81*VEFToFQ8NbnTh-y1H)}B9HZT){U0Q>;uszChHk{fB&1DuRm#H?A40%
zED=VRJ8FhD;`Xks#@+}Y3UVoN%t%Yd+NTWhHeJf0c{nYDbzkVMY~jF2PIX?!>og8#
zOUexK1J-34wxUmfy3ySNmw!@Uis47%WESO?>$a~nMfKCcbme`Y*}z$Fe}c51_@}Lk
s=O#aLwB>?$=Qgd2>>Qc`f8XP&P~GW|gC;sK54ZqS-e@ZPkhh5Ve@rse#Q*>R
diff --git a/RetroFE/Source/Graphics/FontCache.cpp b/RetroFE/Source/Graphics/FontCache.cpp
index fb00867..47fe0f1 100644
--- a/RetroFE/Source/Graphics/FontCache.cpp
+++ b/RetroFE/Source/Graphics/FontCache.cpp
@@ -52,11 +52,11 @@ void FontCache::Initialize()
//todo: make bool
TTF_Init();
}
-Font *FontCache::GetFont(std::string fontPath)
+Font *FontCache::GetFont(std::string fontPath, int fontSize, SDL_Color color)
{
Font *t = NULL;
- std::map::iterator it = FontFaceMap.find(fontPath);
+ std::map::iterator it = FontFaceMap.find(BuildFontKey(fontPath, fontSize, color));
if(it != FontFaceMap.end())
{
@@ -66,15 +66,24 @@ Font *FontCache::GetFont(std::string fontPath)
return t;
}
+std::string FontCache::BuildFontKey(std::string font, int fontSize, SDL_Color color)
+{
+ std::stringstream ss;
+ ss << font << "_SIZE=" << fontSize << " RGB=" << color.r << "." << color.g << "." << color.b;
+
+ return ss.str();
+}
+
bool FontCache::LoadFont(std::string fontPath, int fontSize, SDL_Color color)
{
- std::map::iterator it = FontFaceMap.find(fontPath);
+ std::string key = BuildFontKey(fontPath, fontSize, color);
+ std::map::iterator it = FontFaceMap.find(key);
if(it == FontFaceMap.end())
{
Font *f = new Font();
f->Initialize(fontPath, fontSize, color);
- FontFaceMap[fontPath] = f;
+ FontFaceMap[key] = f;
}
return true;
diff --git a/RetroFE/Source/Graphics/FontCache.h b/RetroFE/Source/Graphics/FontCache.h
index a38bdf0..9552cf4 100644
--- a/RetroFE/Source/Graphics/FontCache.h
+++ b/RetroFE/Source/Graphics/FontCache.h
@@ -26,11 +26,12 @@ public:
void DeInitialize();
FontCache();
bool LoadFont(std::string font, int fontSize, SDL_Color color);
- Font *GetFont(std::string font);
+ Font *GetFont(std::string font, int fontSize, SDL_Color color);
virtual ~FontCache();
private:
std::map FontFaceMap;
+ std::string BuildFontKey(std::string font, int fontSize, SDL_Color color);
};
diff --git a/RetroFE/Source/Graphics/PageBuilder.cpp b/RetroFE/Source/Graphics/PageBuilder.cpp
index 3dde688..d4dc61b 100644
--- a/RetroFE/Source/Graphics/PageBuilder.cpp
+++ b/RetroFE/Source/Graphics/PageBuilder.cpp
@@ -47,8 +47,9 @@ static const int MENU_END = -2; // last item transitions here after it scroll
static const int MENU_CENTER = -4;
//todo: this file is starting to become a god class of building. Consider splitting into sub-builders
-PageBuilder::PageBuilder(std::string layoutKey, Configuration &c, FontCache *fc)
+PageBuilder::PageBuilder(std::string layoutKey, std::string layoutPage, Configuration &c, FontCache *fc)
: LayoutKey(layoutKey)
+ , LayoutPage(layoutPage)
, Config(c)
, ScaleX(1)
, ScaleY(1)
@@ -77,7 +78,7 @@ Page *PageBuilder::BuildPage()
std::string layoutName = LayoutKey;
LayoutPath = Configuration::GetAbsolutePath() + "/Layouts/" + layoutName;
- layoutFile = LayoutPath + "/Layout.xml";
+ layoutFile = LayoutPath + "/" + LayoutPage + ".xml";
Logger::Write(Logger::ZONE_INFO, "Layout", "Initializing " + layoutFile);
@@ -369,7 +370,7 @@ bool PageBuilder::BuildComponents(xml_node<> *layout, Page *page)
else
{
FC->LoadFont(Font, FontSize, FontColor);
- Text *c = new Text(value->value(), FC->GetFont(Font), FontColor, ScaleX, ScaleY);
+ Text *c = new Text(value->value(), FC->GetFont(Font, FontSize, FontColor), FontColor, ScaleX, ScaleY);
ViewInfo *v = c->GetBaseViewInfo();
BuildViewInfo(componentXml, v);
@@ -382,7 +383,7 @@ bool PageBuilder::BuildComponents(xml_node<> *layout, Page *page)
for(xml_node<> *componentXml = layout->first_node("statusText"); componentXml; componentXml = componentXml->next_sibling("statusText"))
{
FC->LoadFont(Font, FontSize, FontColor);
- Text *c = new Text("", FC->GetFont(Font), FontColor, ScaleX, ScaleY);
+ Text *c = new Text("", FC->GetFont(Font, FontSize, FontColor), FontColor, ScaleX, ScaleY);
ViewInfo *v = c->GetBaseViewInfo();
BuildViewInfo(componentXml, v);
@@ -431,13 +432,13 @@ void PageBuilder::LoadReloadableImages(xml_node<> *layout, std::string tagName,
if(type)
{
FC->LoadFont(Font, FontSize, FontColor);
- c = new ReloadableText(type->value(), FC->GetFont(Font), FontColor, LayoutKey, ScaleX, ScaleY);
+ c = new ReloadableText(type->value(), FC->GetFont(Font, FontSize, FontColor), FontColor, LayoutKey, ScaleX, ScaleY);
}
}
else
{
FC->LoadFont(Font, FontSize, FontColor);
- c = new ReloadableMedia(Config, type->value(), (tagName == "reloadableVideo"), FC->GetFont(Font), FontColor, ScaleX, ScaleY);
+ c = new ReloadableMedia(Config, type->value(), (tagName == "reloadableVideo"), FC->GetFont(Font, FontSize, FontColor), FontColor, ScaleX, ScaleY);
xml_attribute<> *textFallback = componentXml->first_attribute("textFallback");
if(textFallback && Utils::ToLower(textFallback->value()) == "true")
@@ -527,7 +528,7 @@ ScrollingList * PageBuilder::BuildMenu(xml_node<> *menuXml)
// on default, text will be rendered to the menu. Preload it into cache.
FC->LoadFont(Font, FontSize, FontColor);
- menu = new ScrollingList(Config, ScaleX, ScaleY, FC->GetFont(Font), FontColor, LayoutKey, imageType);
+ menu = new ScrollingList(Config, ScaleX, ScaleY, FC->GetFont(Font, FontSize, FontColor), FontColor, LayoutKey, imageType);
if(scrollTimeXml)
{
diff --git a/RetroFE/Source/Graphics/PageBuilder.h b/RetroFE/Source/Graphics/PageBuilder.h
index fdc8986..b344491 100644
--- a/RetroFE/Source/Graphics/PageBuilder.h
+++ b/RetroFE/Source/Graphics/PageBuilder.h
@@ -30,12 +30,13 @@ class Configuration;
class PageBuilder
{
public:
- PageBuilder(std::string layoutKey, Configuration &c, FontCache *fc);
+ PageBuilder(std::string layoutKey, std::string layoutPage, Configuration &c, FontCache *fc);
virtual ~PageBuilder();
Page *BuildPage();
private:
std::string LayoutKey;
+ std::string LayoutPage;
std::string LayoutPath;
Configuration &Config;
float ScaleX;
diff --git a/RetroFE/Source/RetroFE.cpp b/RetroFE/Source/RetroFE.cpp
index cdaaeb5..233a07b 100644
--- a/RetroFE/Source/RetroFE.cpp
+++ b/RetroFE/Source/RetroFE.cpp
@@ -452,7 +452,7 @@ Page *RetroFE::LoadPage()
Config.GetProperty("layout", layoutName);
- PageBuilder pb(layoutName, Config, &FC);
+ PageBuilder pb(layoutName, "Layout", Config, &FC);
Page *page = pb.BuildPage();
if(!page)
@@ -469,7 +469,10 @@ Page *RetroFE::LoadPage()
Page *RetroFE::LoadSplashPage()
{
- PageBuilder pb("Splash", Config, &FC);
+ std::string layoutName;
+ Config.GetProperty("layout", layoutName);
+
+ PageBuilder pb(layoutName, "Splash", Config, &FC);
Page * page = pb.BuildPage();
page->Start();