Re #333 Fixed GfuiStaticImageSet overwriting the 'can deform' XML property + added GfuiStaticImageSetDeformable

git-svn-id: https://svn.code.sf.net/p/speed-dreams/code/trunk@4621 30fe4595-0a0c-4342-8851-515496e4dcbd

Former-commit-id: bbaee260fe6d63af3a09446d2f1736d8cd268267
Former-commit-id: c112765303a7b9090162d2a2e3bc80133927e8fd
This commit is contained in:
pouillot 2012-03-29 18:32:32 +00:00
parent 7c020518e8
commit d0df79cb30
5 changed files with 44 additions and 13 deletions

View file

@ -87,13 +87,13 @@ int GfuiStaticImageCreate(void *scr, int x, int y, int w, int h, const char *nam
/** Replace an image by another one (source image doesn't need to be a square or of POT sizes).
@ingroup gui
@param scr Screen where tthe image is displayed
@param scr Screen where the image is displayed
@param id Image Id
@param name Filename of the source image (PNG or JPEG)
@param index Target index for the texture (defaults to 0)
@return none
*/
void GfuiStaticImageSet(void *scr, int id, const char *name, unsigned index, bool canDeform)
void GfuiStaticImageSet(void *scr, int id, const char *name, unsigned index)
{
int pow2Width, pow2Height;
tGfuiObject *curObject;
@ -101,14 +101,13 @@ void GfuiStaticImageSet(void *scr, int id, const char *name, unsigned index, boo
tGfuiImage *image;
curObject = screen->objects;
if (curObject != NULL) {
if (curObject) {
do {
curObject = curObject->next;
if (curObject->id == id) {
if (curObject->widget == GFUI_IMAGE) {
image = &(curObject->u.image);
GfTexFreeTexture(image->texture[index]);
image->canDeform = canDeform;
// We don't use returned POT width and height, but passing non NULL pointers
// for them enforces POT sizes for the loaded texture.
image->texture[index] =
@ -121,6 +120,13 @@ void GfuiStaticImageSet(void *scr, int id, const char *name, unsigned index, boo
}
}
/** Set active image by its index.
@ingroup gui
@param scr Screen where the image is displayed
@param id Image Id
@param index Target image index
@return none
*/
void GfuiStaticImageSetActive(void *scr, int id, int index)
{
tGfuiObject *curObject;
@ -128,7 +134,7 @@ void GfuiStaticImageSetActive(void *scr, int id, int index)
tGfuiImage *image;
curObject = screen->objects;
if (curObject != NULL) {
if (curObject) {
do {
curObject = curObject->next;
if (curObject->id == id) {
@ -142,6 +148,34 @@ void GfuiStaticImageSetActive(void *scr, int id, int index)
}
}
/** Set "can deform" property.
@ingroup gui
@param scr Screen where the image is displayed
@param id Image Id
@param canDeform Target value
@return none
*/
void GfuiStaticImageSetDeformable(void *scr, int id, bool canDeform)
{
tGfuiObject *curObject;
tGfuiScreen *screen = (tGfuiScreen*)scr;
tGfuiImage *image;
curObject = screen->objects;
if (curObject) {
do {
curObject = curObject->next;
if (curObject->id == id) {
if (curObject->widget == GFUI_IMAGE) {
image = &(curObject->u.image);
image->canDeform = canDeform;
}
return;
}
} while (curObject != screen->objects);
}
}
void
gfuiReleaseImage(tGfuiObject *obj)
{

View file

@ -249,7 +249,7 @@ createStaticImage(void* hscr, void* hparm, const char* pszName)
sprintf(pszImageFieldName, GFMNU_ATTR_IMAGE" %d", i);
const char* pszFileName = GfParmGetStr(hparm, pszName, pszImageFieldName, 0);
if (pszFileName)
GfuiStaticImageSet(hscr, id, pszFileName, i, canDeform);
GfuiStaticImageSet(hscr, id, pszFileName, i);
else
break; // Assumes an indexed image list, with no hole inside.
}

View file

@ -539,9 +539,9 @@ TGFCLIENT_API int GfuiScrollBarPosGet(void* scr, int id);
/* Images */
TGFCLIENT_API int GfuiStaticImageCreate(void* scr, int x, int y, int w, int h, const char* name,
bool canDeform = true);
TGFCLIENT_API void GfuiStaticImageSet(void* scr, int id, const char* name,
unsigned index = 0, bool canDeform = true);
TGFCLIENT_API void GfuiStaticImageSet(void* scr, int id, const char* name, unsigned index = 0);
TGFCLIENT_API void GfuiStaticImageSetActive(void* scr, int id, int index);
TGFCLIENT_API void GfuiStaticImageSetDeformable(void *scr, int id, bool canDeform = true);
/*****************************
* Menu Management Interface *

View file

@ -271,9 +271,7 @@ rmdsChangeSkin(void *vp)
// Load associated preview image (or "no preview" panel if none available).
if (GfFileExists(curSkin.getCarPreviewFileName().c_str()))
GfuiStaticImageSet(ScrHandle, CarImageId,
curSkin.getCarPreviewFileName().c_str(),
/* index= */ 0, /* canDeform= */false);
GfuiStaticImageSet(ScrHandle, CarImageId, curSkin.getCarPreviewFileName().c_str());
else
GfuiStaticImageSet(ScrHandle, CarImageId, "data/img/nocarpreview.png");

View file

@ -349,8 +349,7 @@ void RmGarageMenu::resetCarPreviewImage(const GfDriverSkin& selSkin)
// Load the preview image.
if (GfFileExists(selSkin.getCarPreviewFileName().c_str()))
GfuiStaticImageSet(getMenuHandle(), nCarImageId, selSkin.getCarPreviewFileName().c_str(),
/* index= */ 0, /* canDeform= */false);
GfuiStaticImageSet(getMenuHandle(), nCarImageId, selSkin.getCarPreviewFileName().c_str());
else
GfuiStaticImageSet(getMenuHandle(), nCarImageId, "data/img/nocarpreview.png");
}