2 // Open Service Platform
3 // Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
5 // Licensed under the Apache License, Version 2.0 (the License);
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
9 // http://www.apache.org/licenses/LICENSE-2.0/
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an "AS IS" BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
19 * @file FGrp_BitmapUtil.cpp
20 * @brief This is the cpp file for internal util class.
27 #include <FGrpCanvas.h>
29 #include <FBaseSysLog.h>
31 #include "FGrp_BitmapUtil.h"
32 #include "FGrp_Bitmap.h"
33 #include "FGrp_ResUtil.h"
34 #include "util/FGrp_UtilTemplate.h"
37 namespace Tizen { namespace Graphics
40 unsigned long _GetBitmapTimeStamp(const Tizen::Graphics::_BitmapImpl& bitmap);
41 unsigned long _UpdateBitmapTimeStamp(Tizen::Graphics::_BitmapImpl& bitmap);
43 _BitmapTemp::_BitmapTemp(Canvas& canvas)
47 BufferInfo canvasDesc;
48 result r = canvas.Lock(canvasDesc);
56 int pixelPerLine = canvasDesc.pitch / (canvasDesc.bitsPerPixel / 8);
58 // 'pitch' can be a negative value
59 pixelPerLine = (pixelPerLine >= 0) ? pixelPerLine : -pixelPerLine;
61 // new width = max(pixelPerLine, canvasDesc.width)
62 canvasDesc.width = (pixelPerLine > canvasDesc.width) ? pixelPerLine : canvasDesc.width;
65 this->_sharedItem->nativeBitmap->Construct((void*) canvasDesc.pPixels, canvasDesc.width, canvasDesc.height,
66 canvasDesc.bitsPerPixel);
68 _Util::Dimension<float> vcDimF = { canvas.GetBoundsF().width, canvas.GetBoundsF().height };
69 _Util::Dimension<int> vcDim = { canvas.GetBounds().width, canvas.GetBounds().height };
70 _Util::Dimension<int> pcDim = { canvasDesc.width, canvasDesc.height };
72 this->_sharedItem->coordHolder->ResetFromPc(pcDim, vcDim, vcDimF);
80 _BitmapTemp::_BitmapTemp(void* pBuffer, int width, int height, int depth)
84 if (pBuffer == null || width <= 0 || height <= 0 || !(depth == 16 || depth == 32))
89 result r = this->_sharedItem->nativeBitmap->Construct((void*) pBuffer, width, height, depth);
96 _Util::Dimension<int> pcDim = { width, height };
98 this->_sharedItem->coordHolder->ResetFromPc(pcDim);
103 _BitmapTemp::_BitmapTemp(Dimension physicalSize, int depth)
107 if (physicalSize.width <= 0 || physicalSize.height <= 0 || !(depth == 16 || depth == 32))
112 result r = this->_sharedItem->nativeBitmap->Construct(physicalSize, (depth == 32) ? BITMAP_PIXEL_FORMAT_ARGB8888 : BITMAP_PIXEL_FORMAT_RGB565);
119 _Util::Dimension<int> pcDim = { physicalSize.width, physicalSize.height };
121 this->_sharedItem->coordHolder->ResetFromPc(pcDim);
126 _BitmapTemp::~_BitmapTemp()
131 _BitmapTemp::IsValid(void)
136 ////////////////////////////////////////////////////////////////////////////////
139 Tizen::Graphics::_BitmapUtil::GetTimeStamp(const Tizen::Graphics::Bitmap& bitmap)
141 const Tizen::Graphics::_BitmapImpl* pBitmapImpl = Tizen::Graphics::_BitmapImpl::GetInstance(bitmap);
145 return _GetBitmapTimeStamp(*pBitmapImpl);
152 Tizen::Graphics::_BitmapUtil::UpdateTimeStamp(Tizen::Graphics::Bitmap& bitmap)
154 Tizen::Graphics::_BitmapImpl* pBitmapImpl = Tizen::Graphics::_BitmapImpl::GetInstance(bitmap);
158 return _UpdateBitmapTimeStamp(*pBitmapImpl);
164 Tizen::Graphics::Bitmap*
165 Tizen::Graphics::_BitmapUtil::CreateBitmapN(_BitmapImpl* pBitmapImpl)
167 if (pBitmapImpl == null)
172 std::auto_ptr <Tizen::Graphics::Bitmap> bitmap(new (std::nothrow) Tizen::Graphics::Bitmap);
174 SysTryReturn(NID_GRP, bitmap.get() != 0, 0, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
176 // change the implentation instance of Bitmap class
178 // exception of ICLS-CLSIF-03
179 class _BitmapImplHack
183 static _BitmapImpl*& GetBitmapImplRef(Bitmap* pBitmap)
185 return _BitmapImpl::_GetBitmapImpl(pBitmap);
187 }; // _BitmapImplHack
189 Tizen::Graphics::_BitmapImpl*& pRefBitmapImpl = _BitmapImplHack::GetBitmapImplRef(bitmap.get());
191 delete pRefBitmapImpl;
192 pRefBitmapImpl = pBitmapImpl;
195 return bitmap.release();
198 Tizen::Graphics::Bitmap*
199 Tizen::Graphics::_BitmapUtil::CreateBitmapN(void* pBuffer, int width, int height, int depth)
201 std::auto_ptr <Tizen::Graphics::_BitmapTemp> bitmapTemp(new (std::nothrow) Tizen::Graphics::_BitmapTemp(pBuffer, width, height,
204 SysTryReturn(NID_GRP, bitmapTemp.get() && bitmapTemp->IsValid(), 0, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
206 Tizen::Graphics::Bitmap* pBitmap = Tizen::Graphics::_BitmapUtil::CreateBitmapN(bitmapTemp.get());
211 bitmapTemp.release();
217 Tizen::Graphics::Bitmap*
218 Tizen::Graphics::_BitmapUtil::CreateBitmapN(Dimension physicalSize, int depth)
220 std::auto_ptr <Tizen::Graphics::_BitmapTemp> bitmapTemp(new (std::nothrow) Tizen::Graphics::_BitmapTemp(physicalSize, depth));
222 SysTryReturn(NID_GRP, bitmapTemp.get() && bitmapTemp->IsValid(), 0, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
224 Tizen::Graphics::Bitmap* pBitmap = Tizen::Graphics::_BitmapUtil::CreateBitmapN(bitmapTemp.get());
229 bitmapTemp.release();
236 Tizen::Graphics::_BitmapUtil::ChangeBuffer(Tizen::Graphics::Bitmap& srcBitmap, void* pBuffer, long bytesPerLine, void (* DestroyCallback)(void*), void* pCallbackParam)
238 if (_BitmapImpl::GetInstance(srcBitmap) == null)
243 _Bitmap* pNativeBitmap = _GetBitmapEx(srcBitmap);
245 if (pNativeBitmap == null)
250 if (!SetCallback(srcBitmap, DestroyCallback, pCallbackParam, null, null, null, null, null, null))
255 pNativeBitmap->AssignUserBuffer((unsigned char*) pBuffer, bytesPerLine);
261 Tizen::Graphics::_BitmapUtil::SetCallback(Tizen::Graphics::Bitmap& bitmap,
262 void (* DestroyCallback)(void*), void* pCallbackParam,
263 void (* LockCallback)(void*), void* pLockParam,
264 void (* UnlockCallback)(void*), void* pUnlockParam,
265 void (* PostlockCallback)(Tizen::Graphics::BufferInfo& bufferInfo, void*), void* pPostlockParam)
267 Tizen::Graphics::_BitmapImpl* pBitmapImpl = _BitmapImpl::GetInstance(bitmap);
269 _BitmapImplHack* pBitmapImplHack = static_cast <_BitmapImplHack*>(pBitmapImpl);
271 return (pBitmapImplHack) ? pBitmapImplHack->SetCallback(DestroyCallback, pCallbackParam, LockCallback, pLockParam, UnlockCallback, pUnlockParam, PostlockCallback, pPostlockParam) : false;
275 Tizen::Graphics::_BitmapUtil::ResetCallback(Tizen::Graphics::Bitmap& bitmap)
277 Tizen::Graphics::_BitmapImpl* pBitmapImpl = _BitmapImpl::GetInstance(bitmap);
279 _BitmapImplHack* pBitmapImplHack = static_cast <_BitmapImplHack*>(pBitmapImpl);
283 pBitmapImplHack->ResetCallback();
287 }} // Tizen::Graphics