X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fvisuals%2Fvisual-url.cpp;h=354123fc39330365cf570a0151215ab379c5da8b;hb=304180106d1b3d08fbcd9ce594ea1f7180e79bc4;hp=e49831302a10ffad508b0ae27ebc59ed2f78886b;hpb=6970e395a31aae5e97be905e01e47fd49e043f94;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git diff --git a/dali-toolkit/internal/visuals/visual-url.cpp b/dali-toolkit/internal/visuals/visual-url.cpp index e498313..354123f 100644 --- a/dali-toolkit/internal/visuals/visual-url.cpp +++ b/dali-toolkit/internal/visuals/visual-url.cpp @@ -20,6 +20,10 @@ // EXTERNAL HEADERS #include // for toupper() +// INTERNAL HEADERS +#include +#include + namespace Dali { namespace Toolkit @@ -34,15 +38,28 @@ VisualUrl::ProtocolType ResolveLocation(const std::string& url) const uint32_t length = url.size(); if((length > 7) && urlCStr[5] == ':' && urlCStr[6] == '/' && urlCStr[7] == '/') { - // https:// - if(('h' == tolower(urlCStr[0])) && - ('t' == tolower(urlCStr[1])) && - ('t' == tolower(urlCStr[2])) && - ('p' == tolower(urlCStr[3])) && - ('s' == tolower(urlCStr[4]))) + // https:// or enbuf:// + const char hOre = tolower(urlCStr[0]); + const char tOrn = tolower(urlCStr[1]); + const char tOrb = tolower(urlCStr[2]); + const char pOru = tolower(urlCStr[3]); + const char sOrf = tolower(urlCStr[4]); + if(('h' == hOre) && + ('t' == tOrn) && + ('t' == tOrb) && + ('p' == pOru) && + ('s' == sOrf)) { return VisualUrl::REMOTE; } + if(('e' == hOre) && + ('n' == tOrn) && + ('b' == tOrb) && + ('u' == pOru) && + ('f' == sOrf)) + { + return VisualUrl::BUFFER; + } } else if((length > 6) && urlCStr[4] == ':' && urlCStr[5] == '/' && urlCStr[6] == '/') { @@ -69,18 +86,20 @@ VisualUrl::ProtocolType ResolveLocation(const std::string& url) else if((length > 5) && urlCStr[3] == ':' && urlCStr[4] == '/' && urlCStr[5] == '/') { // ftp:// or ssh:// - const char fOrS = tolower(urlCStr[0]); - if(('f' == fOrS) || ('s' == fOrS)) + const char fOrs = tolower(urlCStr[0]); + const char tOrs = tolower(urlCStr[1]); + const char pOrh = tolower(urlCStr[2]); + if(('f' == fOrs) && + ('t' == tOrs) && + ('p' == pOrh)) { - const char tOrs = tolower(urlCStr[1]); - if(('t' == tOrs) || ('s' == tOrs)) - { - const char pOrh = tolower(urlCStr[2]); - if(('p' == pOrh) || ('h' == pOrh)) - { - return VisualUrl::REMOTE; - } - } + return VisualUrl::REMOTE; + } + if(('s' == fOrs) && + ('s' == tOrs) && + ('h' == pOrh)) + { + return VisualUrl::REMOTE; } } return VisualUrl::LOCAL; @@ -204,11 +223,19 @@ VisualUrl::VisualUrl(const std::string& url) if(!url.empty()) { mLocation = ResolveLocation(url); - if(VisualUrl::TEXTURE != mLocation) + if(VisualUrl::TEXTURE != mLocation && VisualUrl::BUFFER != mLocation) { - // TEXTURE location url doesn't need type resolving, REGULAR_IMAGE is fine + // TEXTURE and BUFFER location url doesn't need type resolving, REGULAR_IMAGE is fine mType = ResolveType(url); } + else + { + Toolkit::VisualFactory factory = Toolkit::VisualFactory::Get(); + if(factory) + { + GetImplementation(factory).GetTextureManager().UseExternalTexture(*this); + } + } } } @@ -217,15 +244,53 @@ VisualUrl::VisualUrl(const VisualUrl& url) mType(url.mType), mLocation(url.mLocation) { + if(VisualUrl::TEXTURE == mLocation || VisualUrl::BUFFER == mLocation) + { + Toolkit::VisualFactory factory = Toolkit::VisualFactory::Get(); + if(factory) + { + GetImplementation(factory).GetTextureManager().UseExternalTexture(*this); + } + } +} + +VisualUrl::~VisualUrl() +{ + if(VisualUrl::TEXTURE == mLocation || VisualUrl::BUFFER == mLocation) + { + Toolkit::VisualFactory factory = Toolkit::VisualFactory::Get(); + if(factory) + { + GetImplementation(factory).GetTextureManager().RemoveExternalTexture(mUrl); + } + } } VisualUrl& VisualUrl::operator=(const VisualUrl& url) { if(&url != this) { + if(VisualUrl::TEXTURE == mLocation || VisualUrl::BUFFER == mLocation) + { + Toolkit::VisualFactory factory = Toolkit::VisualFactory::Get(); + if(factory) + { + GetImplementation(factory).GetTextureManager().RemoveExternalTexture(mUrl); + } + } + mUrl = url.mUrl; mType = url.mType; mLocation = url.mLocation; + + if(VisualUrl::TEXTURE == mLocation || VisualUrl::BUFFER == mLocation) + { + Toolkit::VisualFactory factory = Toolkit::VisualFactory::Get(); + if(factory) + { + GetImplementation(factory).GetTextureManager().UseExternalTexture(*this); + } + } } return *this; } @@ -255,14 +320,14 @@ bool VisualUrl::IsLocalResource() const return mLocation == VisualUrl::LOCAL; } +bool VisualUrl::IsBufferResource() const +{ + return mLocation == VisualUrl::BUFFER; +} + std::string VisualUrl::GetLocation() const { - const auto location = mUrl.find("://"); - if(std::string::npos != location) - { - return mUrl.substr(location + 3u); // 3 characters forwards from the start of :// - } - return mUrl; + return GetLocation(mUrl); } std::string VisualUrl::CreateTextureUrl(const std::string& location) @@ -270,6 +335,26 @@ std::string VisualUrl::CreateTextureUrl(const std::string& location) return "dali://" + location; } +std::string VisualUrl::CreateBufferUrl(const std::string& location) +{ + return "enbuf://" + location; +} + +VisualUrl::ProtocolType VisualUrl::GetProtocolType(const std::string& url) +{ + return ResolveLocation(url); +} + +std::string VisualUrl::GetLocation(const std::string& url) +{ + const auto location = url.find("://"); + if(std::string::npos != location) + { + return url.substr(location + 3u); // 3 characters forwards from the start of :// + } + return url; +} + } // namespace Internal } // namespace Toolkit