X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali%2Fintegration-api%2Fresource-types.h;h=053245119f04027a79f6b43c0a0aad7825b8587b;hb=f690706a5f0b4c2d553fbc52a36bb76d8f65f69a;hp=8539145491faea2d95686de9b0cd9c66b456206e;hpb=21a41c6781177b439cf61719e06454c2d7e8cfa9;p=platform%2Fcore%2Fuifw%2Fdali-core.git diff --git a/dali/integration-api/resource-types.h b/dali/integration-api/resource-types.h index 8539145..0532451 100644 --- a/dali/integration-api/resource-types.h +++ b/dali/integration-api/resource-types.h @@ -1,117 +1,76 @@ -#ifndef __DALI_INTEGRATION_RESOURCE_TYPES_H__ -#define __DALI_INTEGRATION_RESOURCE_TYPES_H__ - -// -// Copyright (c) 2014 Samsung Electronics Co., Ltd. -// -// Licensed under the Flora License, Version 1.0 (the License); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://floralicense.org/license/ -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an AS IS BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// +#ifndef DALI_INTEGRATION_RESOURCE_TYPES_H +#define DALI_INTEGRATION_RESOURCE_TYPES_H + +/* + * Copyright (c) 2019 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ // EXTERNAL INCLUDES #include // INTERNAL INCLUDES -#include -#include -#include +#include +#include namespace Dali { -namespace Integration -{ +typedef Uint16Pair ImageDimensions; -// Resource Types - -/** - * Extendable set of resource types - */ -enum ResourceTypeId +namespace Integration { - ResourceBitmap, - ResourceNativeImage, - ResourceTargetImage, - ResourceShader, - ResourceModel, - ResourceMesh, - ResourceText -}; /** - * The abstract base class for resource types. + * BitmapResourceType describes a bitmap resource. */ -struct DALI_IMPORT_API ResourceType +struct BitmapResourceType { /** * Constructor. - * @param[in] typeId resource type id - */ - ResourceType(ResourceTypeId typeId) - : id(typeId) {} + * @param[in] size The requested size for the bitmap. + * @param[in] scalingMode The method to use to map the source bitmap to the desired + * dimensions. + * @param[in] samplingMode The filter to use if the bitmap needs to be downsampled + * to the requested size. + * @param[in] orientationCorrection Whether to use bitmap metadata to rotate or + * flip the bitmap, e.g., from portrait to landscape. + */ + BitmapResourceType( ImageDimensions size = ImageDimensions( 0, 0 ), + FittingMode::Type scalingMode = FittingMode::DEFAULT, + SamplingMode::Type samplingMode = SamplingMode::DEFAULT, + bool orientationCorrection = true ) + : size( size ), + scalingMode( scalingMode ), + samplingMode( samplingMode ), + orientationCorrection( orientationCorrection ) + {} /** * Destructor. */ - virtual ~ResourceType() {} - - /** - * Create a copy of the resource type with the same attributes. - * @return pointer to the new ResourceType. - */ - virtual ResourceType* Clone() const = 0; - - const ResourceTypeId id; - -private: - - // Undefined copy constructor. - ResourceType(const ResourceType& typePath); - - // Undefined assignment operator. - ResourceType& operator=(const ResourceType& rhs); -}; - -/** - * BitmapResourceType describes a bitmap resource, which can be requested - * from ResourceLoader::LoadResource() or AllocateBitmapImage. - */ -struct DALI_IMPORT_API BitmapResourceType : public ResourceType -{ - /** - * Constructor. - * @param[in] attribs parameters for image loading request - */ - BitmapResourceType(const ImageAttributes& attribs) - : ResourceType(ResourceBitmap), - imageAttributes(attribs) {} - - /** - * Destructor. - */ - virtual ~BitmapResourceType() {} - - /** - * @copydoc ResourceType::Clone - */ - virtual ResourceType* Clone() const - { - return new BitmapResourceType(imageAttributes); - } + ~BitmapResourceType() + {} /** * Attributes are copied from the request. */ - ImageAttributes imageAttributes; + ImageDimensions size; + FittingMode::Type scalingMode; + SamplingMode::Type samplingMode; + bool orientationCorrection; private: @@ -120,369 +79,11 @@ private: // Undefined assignment operator. BitmapResourceType& operator=(const BitmapResourceType& rhs); -}; - -/** - * NativeImageResourceType describes a native image resource, which can be injected - * through ResourceManager::AddNativeImage() or requested through ResourceLoader::LoadResource(). - * If the adaptor does not support NativeImages, it can fall back to Bitmap type. - */ -struct DALI_IMPORT_API NativeImageResourceType : public ResourceType -{ - /** - * Constructor. - */ - NativeImageResourceType() - : ResourceType(ResourceNativeImage) {} - - /** - * Constructor. - * @param[in] attribs parameters for image loading request - */ - NativeImageResourceType(const ImageAttributes& attribs) - : ResourceType(ResourceNativeImage), - imageAttributes(attribs) {} - - /** - * Destructor. - */ - virtual ~NativeImageResourceType() {} - /** - * @copydoc ResourceType::Clone - */ - virtual ResourceType* Clone() const - { - return new NativeImageResourceType(imageAttributes); - } - - /** - * Attributes are copied from the request (if supplied). - */ - ImageAttributes imageAttributes; - -private: - - // Undefined copy constructor. - NativeImageResourceType(const NativeImageResourceType& typePath); - - // Undefined assignment operator. - NativeImageResourceType& operator=(const NativeImageResourceType& rhs); -}; - -/** - * RenderTargetResourceType describes a bitmap resource, which can injected - * through ResourceManager::AddTargetImage() - */ -struct DALI_IMPORT_API RenderTargetResourceType : public ResourceType -{ - /** - * Constructor. - */ - RenderTargetResourceType() - : ResourceType(ResourceTargetImage) {} - - /** - * Constructor. - * @param[in] attribs parameters for image loading request - */ - RenderTargetResourceType(const ImageAttributes& attribs) - : ResourceType(ResourceTargetImage), - imageAttributes(attribs) {} - - /** - * Destructor. - */ - virtual ~RenderTargetResourceType() {} - - /** - * @copydoc ResourceType::Clone - */ - virtual ResourceType* Clone() const - { - return new RenderTargetResourceType(imageAttributes); - } - - /** - * Attributes are copied from the request. - */ - ImageAttributes imageAttributes; - -private: - - // Undefined copy constructor. - RenderTargetResourceType(const RenderTargetResourceType& typePath); - - // Undefined assignment operator. - RenderTargetResourceType& operator=(const RenderTargetResourceType& rhs); }; -/** - * ShaderResourceType describes a shader program resource, which can be requested - * from PlatformAbstraction::LoadResource() - */ -struct DALI_IMPORT_API ShaderResourceType : public ResourceType -{ - /** - * Constructor. - */ - ShaderResourceType(size_t shaderHash, const std::string& vertexSource, const std::string& fragmentSource) - : ResourceType(ResourceShader), - hash(shaderHash), - vertexShader(vertexSource), - fragmentShader(fragmentSource) - { - } - - /** - * Destructor. - */ - virtual ~ShaderResourceType() - { - } - - /** - * @copydoc ResourceType::Clone - */ - virtual ResourceType* Clone() const - { - return new ShaderResourceType(hash, vertexShader, fragmentShader); - } - -public: // Attributes - size_t hash; ///< Hash of the vertex/fragment sources - const std::string vertexShader; ///< source code for vertex program - const std::string fragmentShader; ///< source code for fragment program - -private: - - // Undefined copy constructor. - ShaderResourceType(const ShaderResourceType& typePath); - - // Undefined assignment operator. - ShaderResourceType& operator=(const ShaderResourceType& rhs); -}; - -/** - * TextResourceType describes a font resource, which can be requested. - * from PlatformAbstraction::LoadResource() No font atlas is created. - */ -struct DALI_IMPORT_API TextResourceType : public ResourceType -{ - /** - * Text quality enum - */ - enum TextQuality - { - TextQualityLow, ///< Request lower quality text - TextQualityHigh ///< Request higher quality text - }; - - /** - * Structure for requesting character to be loaded from file with atlas position - * for automatic texture upload - */ - struct GlyphPosition - { - GlyphPosition(unsigned int chr, unsigned int xPos, unsigned int yPos) - : character(chr), - quality(0), - loaded(0), - xPosition(xPos), - yPosition(yPos) - { - } - - /** \addtogroup GlyphPositionPackedWord - * We have 32 bits available for this data because of the alignment restrictions - * on the 32 bit words that follow so rather than using the minimum number of - * bits for each, we give "loaded" a whole 8 bits and push it to a byte-aligned - * address to make access possible via a plain byte load instead of a load, - * mask, shift sequence. The naive bitwidths before this modification are as follows: - * character:21; - * quality:1; - * loaded:1; - * @{ - */ - uint32_t character:21; ///< character code (UTF-32), max value of 0x10ffff (21 bits) - uint32_t quality:3; ///< Loaded quality 0 = low quality, 1 = high quality - uint32_t loaded:8; ///< true if Loaded - /** @}*/ - - uint32_t xPosition; ///< X Position in atlas - uint32_t yPosition; ///< Y Position in atlas - - /** - * Used by ResourceTypeCompare - */ - friend bool operator==(const GlyphPosition& lhs, const GlyphPosition& rhs); - }; - - typedef std::vector< GlyphPosition > CharacterList; ///< List of glyphs requested - - enum GlyphCacheMode - { - GLYPH_CACHE_READ, ///< Doesn't cache glyphs. - GLYPH_CACHE_WRITE, ///< Caches glyphs. - }; - - /** - * Text resource type constructor - * @param [in] hash The resourceHash for the FontAtlas and FontMetrics - * @param [in] style The font style - * @param [in] characterList The requested text as a vector or UTF-32 codes - * @param [in] textureAtlasId The resource ID of the texture atlas - * @param [in] quality A boolean, set to true to request high quality glyph bitmaps. - * @param [in] maxGlyphSize The size of the largest glyph in the font. - * @param [in] cache Whether text glyph should be cached or not. - */ - TextResourceType( const size_t hash, - const std::string& style, - const CharacterList& characterList, - ResourceId textureAtlasId, - TextQuality quality = TextQualityLow, - Vector2 maxGlyphSize = Vector2::ONE, - GlyphCacheMode cache = GLYPH_CACHE_READ ) - : ResourceType(ResourceText), - mFontHash(hash), - mStyle(style), - mCharacterList(characterList), - mTextureAtlasId(textureAtlasId), - mQuality(quality), - mMaxGlyphSize(maxGlyphSize), - mCache( cache ) - { - } - - /** - * virtual destructor - */ - virtual ~TextResourceType() - { - } - - /** - * @copydoc ResourceType::Clone - */ - virtual ResourceType* Clone() const - { - return new TextResourceType(mFontHash, mStyle, mCharacterList, mTextureAtlasId, mQuality, mMaxGlyphSize, mCache); - } - - /** - * Font resource hash. - */ - const size_t mFontHash; - - /** - * Font style. - */ - const std::string mStyle; - - /** - * Displayed text (UTF-32 codes) - */ - - CharacterList mCharacterList; ///< List of characters - - ResourceId mTextureAtlasId; ///< Resource ID of the texture atlas this request is for - - TextQuality mQuality; ///< Text quality setting - - Vector2 mMaxGlyphSize; ///< Max glyph size for font - - GlyphCacheMode mCache; ///< Whether text glyphs should be cached. - -private: - - // Undefined copy constructor. - TextResourceType(const TextResourceType& typePath); - - // Undefined copy constructor. - TextResourceType& operator=(const TextResourceType& rhs); -}; - -/** - * ModelResourceType describes a model resource, which can be requested - * from PlatformAbstraction::LoadResource() - */ -struct DALI_IMPORT_API ModelResourceType : public ResourceType -{ - /** - * Constructor. - */ - ModelResourceType() - : ResourceType(ResourceModel) - { - } - - /** - * Destructor. - */ - virtual ~ModelResourceType() - { - } - - /** - * @copydoc ResourceType::Clone - */ - virtual ResourceType* Clone() const - { - return new ModelResourceType(); - } - -private: - - // Undefined copy constructor. - ModelResourceType(const ModelResourceType& typePath); - - // Undefined assignment operator. - ModelResourceType& operator=(const ModelResourceType& rhs); -}; - - -/** - * MeshResourceType describes a mesh program resource, which can be created - * using ResourceManager::AllocateMesh. - */ -struct DALI_IMPORT_API MeshResourceType : public ResourceType -{ - /** - * Constructor. - */ - MeshResourceType() - : ResourceType(ResourceMesh) {} - - /** - * Destructor. - */ - virtual ~MeshResourceType() {} - - /** - * @copydoc ResourceType::Clone - */ - virtual ResourceType* Clone() const - { - return new MeshResourceType(); - } - -private: - - // Undefined copy constructor. - MeshResourceType(const MeshResourceType& typePath); - - // Undefined assignment operator. - MeshResourceType& operator=(const MeshResourceType& rhs); -}; - -inline bool operator==(const TextResourceType::GlyphPosition& lhs, const TextResourceType::GlyphPosition& rhs) -{ - return lhs.character == rhs.character && lhs.xPosition == rhs.xPosition && lhs.yPosition == rhs.yPosition && lhs.quality == rhs.quality; -} - } // namespace Integration } // namespace Dali -#endif // __DALI_INTEGRATION_RESOURCE_TYPES_H__ - +#endif // DALI_INTEGRATION_RESOURCE_TYPES_H