changed handling of channel logos, width and height are now mandatory

This commit is contained in:
louis 2014-11-21 19:19:59 +01:00
parent e7abb8557e
commit a34a824527
21 changed files with 26 additions and 95 deletions

View File

@ -87,3 +87,4 @@ Version 0.0.5
- added {newmails} Token in displaychannel statusinfo, mailbox plugin
has to be installed
- clearing displaymessage if it is called without text
- changed handling of channel logos, width and height are now mandatory

View File

@ -11,9 +11,6 @@ cDesignerConfig::cDesignerConfig() {
limitLogoCache = 1;
numLogosMax = 200;
debugImageLoading = 0;
//default logo width and height
logoWidth = 268;
logoHeight = 200;
replaceDecPoint = false;
//settings for rerun display
rerunAmount = 10;
@ -86,12 +83,6 @@ bool cDesignerConfig::GetSkin(string &skin) {
return true;
}
void cDesignerConfig::SetChannelLogoSize(void) {
cImageLoader imgLoader;
imgLoader.DeterminateChannelLogoSize(logoWidth, logoHeight);
dsyslog("skindesigner: using %dx%d px as original channel logo size", logoWidth, logoHeight);
}
void cDesignerConfig::CheckDecimalPoint(void) {
struct lconv *pLocInfo;
pLocInfo = localeconv();

View File

@ -36,7 +36,6 @@ public:
void ReadSkins(void);
void InitSkinIterator(void) { skinIterator = skins.begin(); };
bool GetSkin(string &skin);
void SetChannelLogoSize(void);
void CheckDecimalPoint(void);
void SetSkin(void);
bool SkinChanged(void);
@ -55,8 +54,6 @@ public:
int limitLogoCache;
int numLogosMax;
int debugImageLoading;
int logoWidth;
int logoHeight;
bool replaceDecPoint;
char decPoint;
vector<string> skins;

View File

@ -177,7 +177,6 @@ void cSkinDesigner::Init(void) {
}
dsyslog("skindesigner: initializing skin %s", skin.c_str());
config.SetChannelLogoSize();
config.CheckDecimalPoint();
if (fontManager)

View File

@ -25,8 +25,8 @@ cSDDisplayMessage::~cSDDisplayMessage() {
void cSDDisplayMessage::SetMessage(eMessageType Type, const char *Text) {
if (!doOutput)
return;
messageView->ClearMessage();
if (!Text) {
messageView->ClearMessage();
return;
}
messageView->DrawMessage(Type, Text);

View File

@ -133,8 +133,8 @@
<!ATTLIST drawimage
x CDATA #IMPLIED
y CDATA #IMPLIED
width CDATA #IMPLIED
height CDATA #IMPLIED
width CDATA #REQUIRED
height CDATA #REQUIRED
align (left|center|right) #IMPLIED
valign (top|center|bottom) #IMPLIED
imagetype (channellogo|seplogo|skinpart|menuicon|icon|image) #REQUIRED

View File

@ -16,7 +16,6 @@ cImageLoader::~cImageLoader() {
cImage *cImageLoader::CreateImage(int width, int height, bool preserveAspect) {
if (!importer)
return NULL;
int w, h;
importer->GetImageSize(w, h);
if (width == 0)
@ -92,43 +91,6 @@ bool cImageLoader::LoadImage(std::string Path, std::string FileName, std::string
return LoadImage(imgFile.c_str());
}
void cImageLoader::DeterminateChannelLogoSize(int &width, int &height) {
cString logoPath;
cString logoPathSkin = cString::sprintf("%s%s/themes/%s/logos/", *config.skinPath, Setup.OSDSkin, Setup.OSDTheme);
if (FolderExists(*logoPathSkin))
logoPath = logoPathSkin;
else
logoPath = config.logoPath;
DIR *folder = NULL;
struct dirent *file;
folder = opendir(logoPath);
if (!folder)
return;
while ( (file = readdir(folder)) ) {
if (endswith(file->d_name, ".png") ||
endswith(file->d_name, ".svg")) {
std::stringstream filePath;
filePath << *logoPath << file->d_name;
if (LoadImage(filePath.str().c_str())) {
int logoWidth = 0;
int logoHeight = 0;
importer->GetImageSize(logoWidth, logoHeight);
if (logoWidth > 0 && logoHeight > 0) {
width = logoWidth;
height = logoHeight;
delete(importer);
importer = NULL;
return;
}
}
}
}
}
//
// Image importer for PNG
//

View File

@ -76,7 +76,6 @@ public:
cImage *CreateImage(int width, int height, bool preserveAspect = true);
bool LoadImage(std::string Path, std::string FileName, std::string Extension);
bool LoadImage(const char *fullpath);
void DeterminateChannelLogoSize(int &width, int &height);
};
#endif //__NOPACITY_IMAGELOADER_H

View File

@ -305,24 +305,6 @@ bool cTemplateFunction::ReCalculateParameters(void) {
void cTemplateFunction::CompleteParameters(void) {
switch (type) {
case ftDrawImage: {
//Calculate img size
if ((GetNumericParameter(ptImageType) == itChannelLogo)||(GetNumericParameter(ptImageType) == itSepLogo)) {
int logoWidthOrig = config.logoWidth;
int logoHeightOrig = config.logoHeight;
int logoWidth = GetNumericParameter(ptWidth);
int logoHeight = GetNumericParameter(ptHeight);
if (logoWidth <= 0 && logoHeight <= 0)
break;
if (logoWidth <= 0 && logoHeightOrig > 0) {
logoWidth = logoHeight * logoWidthOrig / logoHeightOrig;
numericParameters.erase(ptWidth);
numericParameters.insert(pair<eParamType,int>(ptWidth, logoWidth));
} else if (logoHeight <= 0 && logoWidthOrig > 0) {
logoHeight = logoWidth * logoHeightOrig / logoWidthOrig;
numericParameters.erase(ptHeight);
numericParameters.insert(pair<eParamType,int>(ptHeight, logoHeight));
}
}
CalculateAlign(GetNumericParameter(ptWidth), GetNumericParameter(ptHeight));
if (imgPath.size() == 0) {
imgPath = GetParameter(ptPath);

View File

@ -31,7 +31,7 @@
<drawtext condition="{switching}" x="0" y="-10" font="{light}" fontsize="99%" color="{clrWhite}" text="{channelnumber}: {channelname}" />
</area>
<area x="0" y="80%" width="20%" height="20%" layer="3">
<drawimage cache="true" condition="{channellogoexists}" imagetype="channellogo" path="{channelid}" height="98%" align="center" valign="center" />
<drawimage cache="true" condition="{channellogoexists}" imagetype="channellogo" path="{channelid}" width="98%" height="98%" align="center" valign="center" />
<drawtext condition="not{channellogoexists}" x="5" valign="center" font="{light}" fontsize="40%" color="{clrWhite}" text="{channelnumber}: {channelname}" />
</area>
</channelinfo>
@ -150,7 +150,7 @@
-->
<channelgroup>
<area x="0" y="80%" width="20%" height="20%" layer="2">
<drawimage condition="{sepexists}" imagetype="seplogo" path="{seppath}" height="98%" align="center" valign="center" />
<drawimage condition="{sepexists}" imagetype="seplogo" path="{seppath}" width="98%" height="98%" align="center" valign="center" />
<drawimage condition="not{sepexists}" imagetype="icon" path="ico_channelsep" align="center" valign="center" width="{areaheight}*0.8" height="{areaheight}*0.8"/>
</area>
<area x="22%" y="85%" width="76%" height="10%" layer="2">

View File

@ -28,7 +28,7 @@
<fill condition="{separator}" color="{clrSemiTransBlack}" />
</area>
<area condition="not{separator}" x="1%" width="6%" layer="3">
<drawimage name="logo" imagetype="channellogo" path="{channelid}" x="10" height="100%" valign="center" />
<drawimage name="logo" imagetype="channellogo" path="{channelid}" x="0" width="100%" height="100%" valign="center" />
</area>
<areascroll condition="not{separator}" scrollelement="menutext" mode="forthandback" orientation="horizontal" delay="1000" scrollspeed="medium" x="7%" width="52%" layer="3">
<drawtext name="menutext" x="20" valign="center" font="{light}" fontsize="95%" color="{clrWhite}" text="{number} {name} - {sourcedescription}, Transp. {transponder}" />
@ -84,7 +84,7 @@
-->
<currentelement delay="500" fadetime="0">
<area x="63%" y="0" width="36%" height="85%" layer="2">
<drawimage name="logo" imagetype="channellogo" path="{channelid}" x="10" y="0" width="30%" />
<drawimage name="logo" imagetype="channellogo" path="{channelid}" x="10" y="0" width="30%" height="10%" />
<drawtext name="channame" align="right" y="{height(logo)}/2 - {height(channame)}/2" width="65%" font="{semibold}" fontsize="10%" color="{clrWhite}" text="{name}" />
<!-- now -->
<drawtext name="now" x="2%" y="{height(logo)}" width="96%" font="{semibold}" fontsize="8%" color="{clrWhite}" text="Now: {presenteventtitle}" />

View File

@ -119,7 +119,7 @@
-->
<detailheader>
<area x="1%" y="0" width="98%" height="20%" layer="3">
<drawimage name="logo" imagetype="channellogo" path="{channelid}" x="0" height="80%" valign="center" />
<drawimage name="logo" imagetype="channellogo" path="{channelid}" x="0" width="15%" height="80%" valign="center" />
<drawimage condition="{isseries}++{banneravailable}++not{epgpicavailable}" imagetype="image" path="{bannerpath}" x="{areawidth} - {areawidth}/3 - 10" valign="center" width="{areawidth}/3" height="{areawidth}/3 * {bannerheight} / {bannerwidth}"/>
<drawimage condition="{ismovie}++{posteravailable}++not{epgpicavailable}" imagetype="image" path="{posterpath}" x="{areawidth} - {areaheight}*8/10" valign="center" width="{areaheight}*8 / 10 * {posterheight} / {posterwidth}" height="{areaheight}*8 / 10"/>
<drawimage condition="{epgpicavailable}" imagetype="image" path="{epgpicpath}" x="{areawidth} - {areaheight}*8/10 * 174 / 130" valign="center" width="{areaheight}*8/10 * 174 / 130" height="{areaheight}*8 / 10"/>
@ -284,7 +284,7 @@
<tab condition="{hasreruns}" name="{tr(reruns)}" x="2%" y="20%" width="94%" height="65%" layer="2" scrollheight="{areaheight}/4">
<drawtext align="center" y="0" name="title" font="{light}" fontsize="10%" color="{clrWhite}" text="{tr(rerunsof)} '{title}'" />
<loop name="reruns" x="0" y="{height(title)} + 10" width="{areawidth}" orientation="vertical">
<drawimage name="logo" condition="{reruns[channellogoexists]}" imagetype="channellogo" path="{reruns[channelid]}" x="0" height="10%" />
<drawimage name="logo" condition="{reruns[channellogoexists]}" imagetype="channellogo" path="{reruns[channelid]}" x="0" width="10%" height="10%" />
<drawtext name="channelname" condition="not{reruns[channellogoexists]}" x="-5" font="{light}" fontsize="10%" color="{clrWhite}" text="{reruns[channelname]}" />
<drawtext condition="{reruns[channellogoexists]}" x="{width(logo)}+20" y="-5" width="{areawidth} - {width(logo)} - 20" font="{light}" fontsize="8%" color="{clrWhite}" text="{reruns[day]} {reruns[date]} {reruns[start]} - {reruns[stop]}: {reruns[title]} {reruns[shorttext]}" />
<drawtext condition="not{reruns[channellogoexists]}" x="{width(channelname)}+20" y="-5" width="{areawidth} - {width(logo)} - 20" font="{light}" fontsize="8%" color="{clrWhite}" text="{reruns[day]} {reruns[date]} {reruns[start]} - {reruns[stop]}: {reruns[title]} {reruns[shorttext]}" />

View File

@ -159,7 +159,7 @@
<area x="{areawidth}/8" y="75%" width="{areawidth}*0.875" height="25%" layer="2">
<loop name="timers" x="0" y="0" orientation="horizontal" columnwidth="{areawidth}/7" rowheight="{areaheight}" overflow="cut">
<drawrectangle condition="{timers[recording]}" x="0" y="0" width="{columnwidth}-5" height="{rowheight}" color="{clrRed}" />
<drawimage cache="true" name="logo" imagetype="channellogo" path="{timers[channelid]}" height="40%" align="center" y="10" />
<drawimage cache="true" name="logo" imagetype="channellogo" path="{timers[channelid]}" width="{columnwidth}-15" height="40%" align="center" y="10" />
<drawtextbox x="5" y="{height(logo)} + 10" width="{columnwidth}-10" align="center" maxlines="2" font="{light}" fontsize="15%" color="{clrWhite}" text="{timers[title]}" />
<drawtext align="center" y="75%" font="{light}" fontsize="20%" color="{clrWhite}" text="{timers[datetime]}" />
</loop>

View File

@ -16,7 +16,7 @@
<area x="0" y="0" width="38%" height="10%" layer="2">
<drawimage condition="{whatsonnow}||{whatsonnext}" name="menuicon" imagetype="menuicon" path="{icon}" x="5" valign="center" width="{areaheight}*8/10" height="80%"/>
<drawtext condition="{whatsonnow}||{whatsonnext}" x="{width(menuicon)} + 15" valign="center" font="{light}" fontsize="80%" color="{clrWhite}" text="{title}" />
<drawimage name="logo" condition="{whatson}" imagetype="channellogo" path="{channelid}" x="0" height="100%" align="left" valign="center" />
<drawimage name="logo" condition="{whatson}" imagetype="channellogo" path="{channelid}" x="0" width="15%" height="100%" align="left" valign="center" />
<drawtext condition="{whatson}" x="{width(logo)}+20" valign="center" font="{light}" fontsize="80%" color="{clrWhite}" text="{channelnumber} - {channelname}" />
</area>
</header>
@ -73,7 +73,7 @@
</area>
<!-- WHATSONNOW -->
<area condition="not{separator}++{whatsonnow}" x="1%" width="6%" layer="3">
<drawimage name="logo" imagetype="channellogo" path="{channelid}" x="10" height="100%" valign="center" />
<drawimage name="logo" imagetype="channellogo" path="{channelid}" x="0" width="100%" height="100%" valign="center" />
</area>
<area condition="not{separator}++{whatsonnow}++{running}" x="8%" width="7%" layer="3">
<drawrectangle condition="{current}" x="0" y="{areaheight}/3" width="{areawidth}" height="{areaheight}/3" color="{clrWhite}" />
@ -92,7 +92,7 @@
</areascroll>
<!-- WHATSONNEXT -->
<area condition="not{separator}++{whatsonnext}" x="1%" width="6%" layer="3">
<drawimage name="logo" imagetype="channellogo" path="{channelid}" x="10" height="100%" valign="center" />
<drawimage name="logo" imagetype="channellogo" path="{channelid}" x="0" width="100%" height="100%" valign="center" />
</area>
<area condition="not{separator}++{whatsonnext}++{timerfull}" x="53%" width="6%" layer="4">
<drawimage imagetype="icon" path="ico_activetimer" x="{areawidth} - 0.9*{areaheight} - 10" width="0.9*{areaheight}" height="0.9*{areaheight}" valign="center" />

View File

@ -68,7 +68,7 @@
-->
<currentelement delay="500" fadetime="0">
<area x="63%" y="0" width="36%" height="15%" layer="2">
<drawimage name="logo" imagetype="channellogo" path="{channelid}" x="10" y="0" height="100%" />
<drawimage name="logo" imagetype="channellogo" path="{channelid}" x="10" y="0" width="30%" height="100%" />
<drawtext name="channum" x="{width(logo)} + 20" y="{areaheight}/6" width="{areawidth} - {width(logo)} - 30" font="{light}" fontsize="40%" color="{clrWhite}" text="Channel No. {channelnumber}" />
<drawtext name="channame" x="{width(logo)} + 20" y="{areaheight}/3 + {areaheight}/6" width="{areawidth} - {width(logo)} - 30" font="{semibold}" fontsize="40%" color="{clrWhite}" text="{channelname}" />
</area>

View File

@ -23,7 +23,7 @@
-->
<channelinfo>
<area x="2%" y="80%" width="14%" height="18%" layer="2">
<drawimage cache="true" imagetype="channellogo" path="{channelid}" height="98%" align="center" valign="center"/>
<drawimage cache="true" imagetype="channellogo" path="{channelid}" width="94%" height="94%" align="center" valign="center"/>
</area>
<area x="18%" y="74%" width="60%" height="6%" layer="2">
<drawtext x="0" valign="center" font="{vdrOsd}" fontsize="95%" color="{clrWhite}" text="{channelnumber} {channelname}" />
@ -151,7 +151,7 @@
-->
<channelgroup>
<area x="2%" y="80%" width="14%" height="18%" layer="2">
<drawimage condition="{sepexists}" imagetype="seplogo" path="{seppath}" height="98%" align="center" valign="center" />
<drawimage condition="{sepexists}" imagetype="seplogo" path="{seppath}" width="96%" height="96%" align="center" valign="center" />
<drawimage condition="not{sepexists}" imagetype="icon" path="ico_channelsep" align="center" valign="center" width="{areaheight}*0.8" height="{areaheight}*0.8"/>
</area>
<area x="18%" y="82%" width="80%" height="10%" layer="2">

View File

@ -35,7 +35,7 @@
</area>
<!-- channel logo -->
<area condition="not{separator}" x="5" width="6%" layer="3">
<drawimage name="logo" imagetype="channellogo" path="{channelid}" x="0" height="100%" valign="center" />
<drawimage name="logo" imagetype="channellogo" path="{channelid}" x="0" width="100%" height="100%" valign="center" />
</area>
<!-- scrollable channel name -->
<areascroll condition="not{separator}++not{current}" scrollelement="channelname" mode="forthandback" orientation="horizontal" delay="1000" scrollspeed="medium" x="7%" width="20%" layer="3">
@ -104,7 +104,7 @@
</area>
<area x="32%" y="2%" width="67%" height="76%" layer="2">
<!-- Logo and Header -->
<drawimage name="logo" imagetype="channellogo" path="{channelid}" x="1%" y="1%" width="20%" />
<drawimage name="logo" imagetype="channellogo" path="{channelid}" x="1%" y="1%" width="20%" height="15%" />
<drawtext name="channelname" x="23%" y="{height(logo)} * 3 / 10" font="{vdrOsd}" fontsize="10%" color="{clrWhite}" text="{number} - {name}" />
<drawtext x="23%" y="{posy(channelname)} + {height(channelname)}" font="{vdrOsd}" fontsize="7%" color="{clrWhite}" text="{sourcedescription}, {tr(transponder)} {transponder}" />
<!-- NOW -->

View File

@ -44,7 +44,7 @@
<fill color="{clrTransBlack}" />
</area>
<area x="1%" y="10%" width="98%" height="15%" layer="3">
<drawimage name="logo" imagetype="channellogo" path="{channelid}" x="0" height="80%" valign="center" />
<drawimage name="logo" imagetype="channellogo" path="{channelid}" x="0" width="15%" height="80%" valign="center" />
<drawimage condition="{isseries}++{banneravailable}++not{epgpicavailable}" imagetype="image" path="{bannerpath}" x="{areawidth} - {areawidth}/3 - 10" valign="center" width="{areawidth}/3" height="{areawidth}/3 * {bannerheight} / {bannerwidth}"/>
<drawimage condition="{ismovie}++{posteravailable}++not{epgpicavailable}" imagetype="image" path="{posterpath}" x="{areawidth} - {areaheight}*8/10" valign="center" width="{areaheight}*8 / 10 * {posterheight} / {posterwidth}" height="{areaheight}*8 / 10"/>
@ -192,7 +192,7 @@
<tab condition="{hasreruns}" name="{tr(reruns)}" x="2%" y="25%" width="94%" height="60%" layer="2" scrollheight="{areaheight}/4">
<drawtext align="center" y="0" name="title" font="{vdrOsd}" fontsize="10%" color="{clrWhite}" text="{tr(rerunsof)} '{title}'" />
<loop name="reruns" x="0" y="{height(title)} + 10" width="{areawidth}" orientation="vertical">
<drawimage name="logo" condition="{reruns[channellogoexists]}" imagetype="channellogo" path="{reruns[channelid]}" x="0" height="10%" />
<drawimage name="logo" condition="{reruns[channellogoexists]}" imagetype="channellogo" path="{reruns[channelid]}" x="0" width="10%" height="10%" />
<drawtext name="channelname" condition="not{reruns[channellogoexists]}" x="-5" font="{vdrOsd}" fontsize="10%" color="{clrWhite}" text="{reruns[channelname]}" />
<drawtext condition="{reruns[channellogoexists]}" x="{width(logo)}+20" y="-5" width="{areawidth} - {width(logo)} - 20" font="{vdrOsd}" fontsize="8%" color="{clrWhite}" text="{reruns[day]} {reruns[date]} {reruns[start]} - {reruns[stop]}: {reruns[title]} {reruns[shorttext]}" />
<drawtext condition="not{reruns[channellogoexists]}" x="{width(channelname)}+20" y="-5" width="{areawidth} - {width(logo)} - 20" font="{vdrOsd}" fontsize="8%" color="{clrWhite}" text="{reruns[day]} {reruns[date]} {reruns[start]} - {reruns[stop]}: {reruns[title]} {reruns[shorttext]}" />

View File

@ -38,7 +38,7 @@
<area x="85%" y="28%" width="14%" height="60%" layer="2">
<loop name="timers" x="0" y="0" orientation="vertical" columnwidth="100%" rowheight="{areaheight} / 4" overflow="cut">
<drawrectangle condition="{timers[recording]}" x="0" y="0" width="{columnwidth}" height="{rowheight} * 99 / 100" color="{clrTransRed}" />
<drawimage cache="true" name="logo" imagetype="channellogo" path="{timers[channelid]}" height="{rowheight} / 2" align="center" y="5" />
<drawimage cache="true" name="logo" imagetype="channellogo" path="{timers[channelid]}" width="98%" height="{rowheight} / 2" align="center" y="5" />
<drawtextbox x="5" y="{height(logo)}+2" width="{columnwidth}-10" align="center" maxlines="2" font="{vdrOsd}" fontsize="4%" color="{clrWhite}" text="{timers[title]}" />
<drawtext name="datetime" align="center" y="{rowheight}*84/100" font="{vdrOsd}" fontsize="4%" color="{clrWhite}" text="{timers[datetime]}" />
</loop>

View File

@ -13,7 +13,7 @@
<header>
<area x="1%" y="0" width="64%" height="10%" layer="2">
<drawtext condition="{whatsonnow}||{whatsonnext}" x="5" valign="center" font="{vdrOsd}" fontsize="80%" color="{clrWhite}" text="{title}" />
<drawimage name="logo" condition="{whatson}" imagetype="channellogo" path="{channelid}" x="0" height="100%" align="left" valign="center" />
<drawimage name="logo" condition="{whatson}" imagetype="channellogo" path="{channelid}" x="0" width="15%" height="100%" align="left" valign="center" />
<drawtext condition="{whatson}" x="{width(logo)}+20" valign="center" font="{vdrOsd}" fontsize="50%" color="{clrWhite}" text="{channelnumber} - {channelname}" />
</area>
</header>
@ -78,7 +78,7 @@
</areascroll>
<!-- element whatsonnow -->
<area condition="not{separator}++{whatsonnow}" x="5" width="8%" layer="3">
<drawimage name="logo" imagetype="channellogo" path="{channelid}" x="0" height="100%" valign="center" />
<drawimage name="logo" imagetype="channellogo" path="{channelid}" x="0" width="100%" height="94%" valign="center" />
</area>
<area condition="not{separator}++{whatsonnow}++not{current}" x="9%" width="18%" layer="3">
<drawtext x="0" y="5%" font="{vdrOsd}" fontsize="40%" color="{clrFontMenuItem}" text="{start} - {stop}" />
@ -104,7 +104,7 @@
</area>
<!-- element whatsonnext -->
<area condition="not{separator}++{whatsonnext}" x="5" width="8%" layer="3">
<drawimage name="logo" imagetype="channellogo" path="{channelid}" x="0" height="100%" valign="center" />
<drawimage name="logo" imagetype="channellogo" path="{channelid}" x="0" width="100%" height="94%" valign="center" />
</area>
<area condition="not{separator}++{whatsonnext}++not{current}" x="9%" width="18%" layer="3">
<drawtext x="0" y="5%" font="{vdrOsd}" fontsize="40%" color="{clrFontMenuItem}" text="{start} - {stop}" />

View File

@ -35,7 +35,7 @@
</area>
<!-- channel logo -->
<area x="5" width="6%" layer="3">
<drawimage imagetype="channellogo" path="{channelid}" x="0" height="100%" valign="center" />
<drawimage imagetype="channellogo" path="{channelid}" x="0" width="100%" height="100%" valign="center" />
</area>
<!-- datetime and icons -->
<area x="1%" width="28%" layer="3">