//
// Copyright 2005 The Android Open Source Project
//
// Simple class to hold an image that can be loaded and unloaded.
//
// For compilers that support precompilation, include "wx/wx.h".
#include "wx/wxprec.h"
// Otherwise, include all standard headers
#ifndef WX_PRECOMP
# include "wx/wx.h"
#endif
#include "wx/image.h" // needed for Windows build
#include "LoadableImage.h"
#include "AssetStream.h"
#include "MyApp.h"
#include "utils.h"
#include <stdio.h>
/*
* Load the image.
*/
bool LoadableImage::Create(const char* fileName, int x, int y)
{
if (fileName == NULL || x < 0 || y < 0) {
fprintf(stderr, "bad params to %s\n", __PRETTY_FUNCTION__);
return false;
}
delete[] mName;
mName = android::strdupNew(fileName);
mX = x;
mY = y;
return true;
}
/*
* Load the bitmap.
*/
bool LoadableImage::LoadResources(void)
{
if (mName == NULL)
return false;
if (mpBitmap != NULL) // already loaded?
return true;
//printf("LoadResources: '%s'\n", (const char*) mName);
#ifdef BEFORE_ASSET
wxImage img(mName);
#else
android::AssetManager* pAssetMgr = ((MyApp*)wxTheApp)->GetAssetManager();
android::Asset* pAsset;
pAsset = pAssetMgr->open(mName, android::Asset::ACCESS_RANDOM);
if (pAsset == NULL) {
fprintf(stderr, "ERROR: unable to load '%s'\n", mName);
return false;
} else {
//printf("--- opened asset '%s'\n",
// (const char*) pAsset->getAssetSource());
}
AssetStream astr(pAsset);
wxImage img(astr);
#endif
mWidth = img.GetWidth();
mHeight = img.GetHeight();
if (mWidth <= 0 || mHeight <= 0) {
/* image failed to load or decode */
fprintf(stderr, "ERROR: unable to load/decode '%s'\n", mName);
//delete img;
return false;
}
mpBitmap = new wxBitmap(img);
//delete img;
return true;
}
/*
* Unload the bitmap.
*/
bool LoadableImage::UnloadResources(void)
{
delete mpBitmap;
mpBitmap = NULL;
return true;
}