const float VIEW_WIDTH = 175.0f;
const float VIEW_HEIGHT = 175.0f;
+class MyAppWidgetView
+ : public AppWidgetView
+{
+public:
+ MyAppWidgetView(const Tizen::Base::String& appId, const Tizen::Base::String& providerName)
+ : __pNinePatchBitmap(null)
+ , __pSizeInfoList(null)
+ {
+ __pNinePatchBitmap = Tizen::App::Application::GetInstance()->GetAppResource()->GetBitmapN(L"image_cover_osp.#.png");
+
+ unique_ptr<AppWidgetProviderInfo> pProviderInfo(AppWidgetManager::GetInstance()->GetAppWidgetProviderInfoN(appId, providerName ));
+ TryReturnVoid(pProviderInfo.get(), "pProviderInfo is null!!");
+
+ __pSizeInfoList = pProviderInfo->GetSizeInfoListN();
+ }
+ virtual ~MyAppWidgetView(void) {}
+
+private:
+ virtual result OnDraw(void);
+ bool CanvasMaskingFromBitmap(Canvas& canvas, Canvas& mask);
+ bool CanvasMaskingFromBitmap(Canvas& canvas, Bitmap& mask);
+
+private:
+ Bitmap* __pNinePatchBitmap;
+ Tizen::Base::Collection::IList* __pSizeInfoList;
+};
+
+bool
+MyAppWidgetView::CanvasMaskingFromBitmap(Canvas& canvas, Canvas& mask)
+{
+ typedef unsigned long Pixel;
+
+ BufferInfo dstBi;
+ BufferInfo srcBi;
+
+ canvas.Lock(dstBi);
+ mask.Lock(srcBi);
+
+ if (dstBi.bitsPerPixel != 32 || srcBi.bitsPerPixel != 32)
+ return false;
+
+ if (srcBi.width > dstBi.width || srcBi.height > dstBi.height)
+ return false;
+
+ {
+ Pixel* pDst = (Pixel*)dstBi.pPixels;
+ Pixel* pSrc = (Pixel*)srcBi.pPixels;
+
+ int dstSkip = dstBi.pitch * 8 / dstBi.bitsPerPixel - srcBi.width;
+ int srcSkip = srcBi.pitch * 8 / srcBi.bitsPerPixel - srcBi.width;
+
+ for (int y = 0; y < srcBi.height; y++)
+ {
+ for (int x = 0; x < srcBi.width; x++)
+ {
+ Pixel dA = (*pDst >> 24) & 0xFF;
+ Pixel dR = (*pDst >> 16) & 0xFF;
+ Pixel dG = (*pDst >> 8) & 0xFF;
+ Pixel dB = (*pDst >> 0) & 0xFF;
+
+ Pixel sA = (*pSrc >> 24) & 0xFF;
+
+ Pixel alpha = sA + (sA >> 7);
+
+ dA = (alpha * dA) >> 8;
+ dR = (alpha * dR) >> 8;
+ dG = (alpha * dG) >> 8;
+ dB = (alpha * dB) >> 8;
+
+ *pDst = (dA << 24) | (dR << 16) | (dG << 8) + (dB);
+
+ ++pDst;
+ ++pSrc;
+ }
+
+ pDst += dstSkip;
+ pSrc += srcSkip;
+ }
+ }
+ mask.Unlock();
+ canvas.Unlock();
+
+ return true;
+}
+
+bool
+MyAppWidgetView::CanvasMaskingFromBitmap(Canvas& canvas, Bitmap& mask)
+{
+ typedef unsigned long Pixel;
+
+ BufferInfo dstBi;
+ BufferInfo srcBi;
+
+ canvas.Lock(dstBi);
+ mask.Lock(srcBi);
+
+ if (dstBi.bitsPerPixel != 32 || srcBi.bitsPerPixel != 32)
+ return false;
+
+ if (srcBi.width > dstBi.width || srcBi.height > dstBi.height)
+ return false;
+
+ {
+ Pixel* pDst = (Pixel*)dstBi.pPixels;
+ Pixel* pSrc = (Pixel*)srcBi.pPixels;
+
+ int dstSkip = dstBi.pitch * 8 / dstBi.bitsPerPixel - srcBi.width;
+ int srcSkip = srcBi.pitch * 8 / srcBi.bitsPerPixel - srcBi.width;
+
+ for (int y = 0; y < srcBi.height; y++)
+ {
+ for (int x = 0; x < srcBi.width; x++)
+ {
+ Pixel dA = (*pDst >> 24) & 0xFF;
+ Pixel dR = (*pDst >> 16) & 0xFF;
+ Pixel dG = (*pDst >> 8) & 0xFF;
+ Pixel dB = (*pDst >> 0) & 0xFF;
+
+ Pixel sA = (*pSrc >> 24) & 0xFF;
+
+ Pixel alpha = sA + (sA >> 7);
+
+ dA = (alpha * dA) >> 8;
+ dR = (alpha * dR) >> 8;
+ dG = (alpha * dG) >> 8;
+ dB = (alpha * dB) >> 8;
+
+ *pDst = (dA << 24) | (dR << 16) | (dG << 8) + (dB);
+
+ ++pDst;
+ ++pSrc;
+ }
+
+ pDst += dstSkip;
+ pSrc += srcSkip;
+ }
+ }
+ mask.Unlock();
+ canvas.Unlock();
+
+ return true;
+}
+
+result
+MyAppWidgetView::OnDraw(void)
+{
+ AppWidgetView::OnDraw();
+
+ AppWidgetSizeInfo* pSizeInfo = null;
+ if (__pSizeInfoList)
+ {
+ for(int i = 0; i < __pSizeInfoList->GetCount(); i ++)
+ {
+ pSizeInfo = dynamic_cast<AppWidgetSizeInfo*>(__pSizeInfoList->GetAt(i) );
+ if (!pSizeInfo)
+ {
+ AppLog("pSizeInfo is null");
+ continue;
+ }
+
+ if (pSizeInfo->GetSize() == GetSizeF())
+ {
+ break;
+ }
+ }
+ }
+
+ if (pSizeInfo && pSizeInfo->IsDecorationFrameUsed())
+ {
+ Canvas canvas;
+
+ FloatRectangle rect = GetBoundsF();
+ canvas.Construct(rect);
+
+ rect.x = 0.0f;
+ rect.y = 0.0f;
+
+ canvas.DrawNinePatchedBitmap(rect, *__pNinePatchBitmap);
+
+ Canvas* pCanvas = GetCanvasN();
+ if (pCanvas)
+ {
+ CanvasMaskingFromBitmap(*pCanvas, canvas);
+ }
+ }
+}
+
ViewForm::ViewForm(void)
: __pAppWidgetView(null)
, __pOptionMenu(null)
void
ViewForm::CreateAppWidgetView(const Tizen::Base::String& appId, const Tizen::Base::String& providerName, const Tizen::Base::String& userInfo)
{
- unique_ptr<AppWidgetView> pAppWidgetView(new AppWidgetView());
+ unique_ptr<AppWidgetView> pAppWidgetView(new MyAppWidgetView(appId, providerName));
if (pAppWidgetView)
{
result r = pAppWidgetView->Construct(appId, providerName, FloatRectangle(VIEW_X, VIEW_Y, VIEW_WIDTH, VIEW_HEIGHT), userInfo);