Merge with develop

--HG--
branch : compatibility-develop
This commit is contained in:
Nimetu 2017-06-08 22:38:03 +03:00
commit 2b7dac4450
5 changed files with 67 additions and 26 deletions

View file

@ -807,25 +807,27 @@ namespace NLGUI
// ImageDownload system // ImageDownload system
enum TDataType {ImgType= 0, BnpType}; enum TDataType {ImgType= 0, BnpType};
enum TImageType {NormalImage=0, OverImage};
struct CDataImageDownload struct CDataImageDownload
{ {
public: public:
CDataImageDownload(CViewBase *img, CStyleParams style): Image(img), Style(style) CDataImageDownload(CViewBase *img, CStyleParams style, TImageType type): Image(img), Style(style), Type(type)
{ {
} }
public: public:
CViewBase * Image; CViewBase * Image;
CStyleParams Style; CStyleParams Style;
TImageType Type;
}; };
struct CDataDownload struct CDataDownload
{ {
public: public:
CDataDownload(const std::string &u, const std::string &d, TDataType t, CViewBase *i, const std::string &s, const std::string &m, const CStyleParams &style = CStyleParams()) CDataDownload(const std::string &u, const std::string &d, TDataType t, CViewBase *i, const std::string &s, const std::string &m, const CStyleParams &style = CStyleParams(), const TImageType imagetype = NormalImage)
: data(NULL), fp(NULL), url(u), dest(d), type(t), luaScript(s), md5sum(m), redirects(0) : data(NULL), fp(NULL), url(u), dest(d), type(t), luaScript(s), md5sum(m), redirects(0)
{ {
if (t == ImgType) imgs.push_back(CDataImageDownload(i, style)); if (t == ImgType) imgs.push_back(CDataImageDownload(i, style, imagetype));
} }
public: public:
@ -848,12 +850,12 @@ namespace NLGUI
void initImageDownload(); void initImageDownload();
void checkImageDownload(); void checkImageDownload();
void addImageDownload(const std::string &url, CViewBase *img, const CStyleParams &style = CStyleParams()); void addImageDownload(const std::string &url, CViewBase *img, const CStyleParams &style = CStyleParams(), const TImageType type = NormalImage);
std::string localImageName(const std::string &url); std::string localImageName(const std::string &url);
std::string getAbsoluteUrl(const std::string &url); std::string getAbsoluteUrl(const std::string &url);
bool isTrustedDomain(const std::string &domain); bool isTrustedDomain(const std::string &domain);
void setImage(CViewBase *view, const std::string &file); void setImage(CViewBase *view, const std::string &file, const TImageType type);
void setImageSize(CViewBase *view, const CStyleParams &style = CStyleParams()); void setImageSize(CViewBase *view, const CStyleParams &style = CStyleParams());
// BnpDownload system // BnpDownload system

View file

@ -149,6 +149,8 @@ namespace NLGUI
HTML_ATTR(IMG,USEMAP), HTML_ATTR(IMG,USEMAP),
HTML_ATTR(IMG,VSPACE), HTML_ATTR(IMG,VSPACE),
HTML_ATTR(IMG,WIDTH), HTML_ATTR(IMG,WIDTH),
// not sorted to keep enum values
HTML_ATTR(IMG,DATA_OVER_SRC),
}; };
enum enum

View file

@ -172,18 +172,25 @@ namespace NLGUI
} }
// Update view after download has finished // Update view after download has finished
void CGroupHTML::setImage(CViewBase * view, const string &file) void CGroupHTML::setImage(CViewBase * view, const string &file, const TImageType type)
{ {
CCtrlButton *btn = dynamic_cast<CCtrlButton*>(view); CCtrlButton *btn = dynamic_cast<CCtrlButton*>(view);
if(btn) if(btn)
{ {
btn->setTexture (file); if (type == NormalImage)
btn->setTexturePushed(file); {
btn->invalidateCoords(); btn->setTexture (file);
btn->invalidateContent(); btn->setTexturePushed(file);
btn->resetInvalidCoords(); btn->invalidateCoords();
btn->updateCoords(); btn->invalidateContent();
paragraphChange(); btn->resetInvalidCoords();
btn->updateCoords();
paragraphChange();
}
else
{
btn->setTextureOver(file);
}
} }
else else
{ {
@ -318,7 +325,7 @@ namespace NLGUI
time(&currentTime); time(&currentTime);
CHttpCacheObject cache = CHttpCache::getInstance()->lookup(download.dest); CHttpCacheObject cache = CHttpCache::getInstance()->lookup(download.dest);
if (cache.Expires > currentTime) if (CFile::fileExists(download.dest) && cache.Expires > currentTime)
{ {
#ifdef LOG_DL #ifdef LOG_DL
nlwarning("Cache for (%s) is not expired (%s, expires:%d)", download.url.c_str(), download.dest.c_str(), cache.Expires - currentTime); nlwarning("Cache for (%s) is not expired (%s, expires:%d)", download.url.c_str(), download.dest.c_str(), cache.Expires - currentTime);
@ -389,7 +396,7 @@ namespace NLGUI
} }
// Add a image download request in the multi_curl // Add a image download request in the multi_curl
void CGroupHTML::addImageDownload(const string &url, CViewBase *img, const CStyleParams &style) void CGroupHTML::addImageDownload(const string &url, CViewBase *img, const CStyleParams &style, TImageType type)
{ {
string finalUrl = getAbsoluteUrl(url); string finalUrl = getAbsoluteUrl(url);
@ -401,7 +408,7 @@ namespace NLGUI
#ifdef LOG_DL #ifdef LOG_DL
nlwarning("already downloading '%s' img %p", finalUrl.c_str(), img); nlwarning("already downloading '%s' img %p", finalUrl.c_str(), img);
#endif #endif
Curls[i].imgs.push_back(CDataImageDownload(img, style)); Curls[i].imgs.push_back(CDataImageDownload(img, style, type));
return; return;
} }
} }
@ -412,7 +419,7 @@ namespace NLGUI
nlwarning("add to download '%s' dest '%s' img %p", finalUrl.c_str(), dest.c_str(), img); nlwarning("add to download '%s' dest '%s' img %p", finalUrl.c_str(), dest.c_str(), img);
#endif #endif
Curls.push_back(CDataDownload(finalUrl, dest, ImgType, img, "", "", style)); Curls.push_back(CDataDownload(finalUrl, dest, ImgType, img, "", "", style, type));
if (Curls.size() < options.curlMaxConnections) { if (Curls.size() < options.curlMaxConnections) {
if (!startCurlDownload(Curls.back())) if (!startCurlDownload(Curls.back()))
{ {
@ -728,7 +735,7 @@ namespace NLGUI
CFile::moveFile(it->dest, tmpfile); CFile::moveFile(it->dest, tmpfile);
for(uint i = 0; i < it->imgs.size(); i++) for(uint i = 0; i < it->imgs.size(); i++)
{ {
setImage(it->imgs[i].Image, it->dest); setImage(it->imgs[i].Image, it->dest, it->imgs[i].Type);
setImageSize(it->imgs[i].Image, it->imgs[i].Style); setImageSize(it->imgs[i].Image, it->imgs[i].Style);
} }
} }
@ -1686,16 +1693,34 @@ namespace NLGUI
if (present[MY_HTML_IMG_STYLE] && value[MY_HTML_IMG_STYLE]) if (present[MY_HTML_IMG_STYLE] && value[MY_HTML_IMG_STYLE])
getStyleParams(value[MY_HTML_IMG_STYLE], style); getStyleParams(value[MY_HTML_IMG_STYLE], style);
// Tooltip
const char *tooltip = NULL;
// keep "alt" attribute for backward compatibility
if (present[MY_HTML_IMG_ALT] && value[MY_HTML_IMG_ALT])
tooltip = value[MY_HTML_IMG_ALT];
// tooltip
if (present[MY_HTML_IMG_TITLE] && value[MY_HTML_IMG_TITLE])
tooltip = value[MY_HTML_IMG_TITLE];
// Mouse over image
const char *overSrc = value[MY_HTML_IMG_SRC];
if (present[MY_HTML_IMG_DATA_OVER_SRC] && value[MY_HTML_IMG_DATA_OVER_SRC])
{
overSrc = value[MY_HTML_IMG_DATA_OVER_SRC];
}
if (getA() && getParent () && getParent ()->getParent()) if (getA() && getParent () && getParent ()->getParent())
{ {
// Tooltip
const char *tooltip = NULL;
if (present[MY_HTML_IMG_ALT] && value[MY_HTML_IMG_ALT])
tooltip = value[MY_HTML_IMG_ALT];
string params = "name=" + getId() + "|url=" + getLink (); string params = "name=" + getId() + "|url=" + getLink ();
addButton(CCtrlButton::PushButton, value[MY_HTML_IMG_SRC], value[MY_HTML_IMG_SRC], value[MY_HTML_IMG_SRC], addButton(CCtrlButton::PushButton, value[MY_HTML_IMG_SRC], value[MY_HTML_IMG_SRC], value[MY_HTML_IMG_SRC],
"", "browse", params.c_str(), tooltip, style); overSrc, "browse", params.c_str(), tooltip, style);
}
else
if (tooltip || overSrc)
{
addButton(CCtrlButton::PushButton, value[MY_HTML_IMG_SRC], value[MY_HTML_IMG_SRC], value[MY_HTML_IMG_SRC],
overSrc, "", "", tooltip, style);
} }
else else
{ {
@ -4596,6 +4621,18 @@ namespace NLGUI
} }
string over = overBitmap.empty()?"":CFile::getPath(overBitmap) + CFile::getFilenameWithoutExtension(overBitmap) + ".tga"; string over = overBitmap.empty()?"":CFile::getPath(overBitmap) + CFile::getFilenameWithoutExtension(overBitmap) + ".tga";
// schedule mouseover bitmap for download if its different from normal
if (!over.empty() && !CPath::exists(over))
{
if (overBitmap != normalBitmap)
{
over = localImageName(overBitmap);
if (!CFile::fileExists(over))
{
addImageDownload(overBitmap, ctrlButton, style, TImageType::OverImage);
}
}
}
ctrlButton->setType (type); ctrlButton->setType (type);
if (!normal.empty()) if (!normal.empty())

View file

@ -150,6 +150,8 @@ namespace NLGUI
HTML_ATTR(IMG,USEMAP), HTML_ATTR(IMG,USEMAP),
HTML_ATTR(IMG,VSPACE), HTML_ATTR(IMG,VSPACE),
HTML_ATTR(IMG,WIDTH), HTML_ATTR(IMG,WIDTH),
// not sorted to keep enum values
HTML_ATTR(IMG,DATA-OVER-SRC),
{ 0 } { 0 }
}; };

View file

@ -529,10 +529,8 @@
posref="TL TL" posref="TL TL"
group_onclick_r="active_menu" group_onclick_r="active_menu"
group_params_r="menu=ui:interface:base_menu_with_color"> group_params_r="menu=ui:interface:base_menu_with_color">
<!--
<view type="text_number" id="fps" posref="MR MR" x="-20" y="-2" color="255 255 255 255" shadow="true" fontsize="10" value="UI:VARIABLES:FPS" global_color="false" positive="true"/> <view type="text_number" id="fps" posref="MR MR" x="-20" y="-2" color="255 255 255 255" shadow="true" fontsize="10" value="UI:VARIABLES:FPS" global_color="false" positive="true"/>
<view type="text" id="fpstext" posref="MR MR" x="-40" y="-2" color="255 255 255 255" shadow="true" fontsize="10" global_color="false" positive="true" hardtext="uiFPS" /> <view type="text" id="fpstext" posref="MR MR" x="-40" y="-2" color="255 255 255 255" shadow="true" fontsize="10" global_color="false" positive="true" hardtext="uiFPS" />
-->
</group> </group>
<group id="content" <group id="content"
x="0" x="0"