diff --git a/Engine/source/T3D/assets/assetMacroHelpers.h b/Engine/source/T3D/assets/assetMacroHelpers.h index 4facaed5d..e706883b1 100644 --- a/Engine/source/T3D/assets/assetMacroHelpers.h +++ b/Engine/source/T3D/assets/assetMacroHelpers.h @@ -86,6 +86,26 @@ if (m##name##AssetId != StringTable->EmptyString())\ _set##name(netconn->unpackNetStringHandleU(stream).getString());\ } +//network send - datablock +#define PACKDATA_ASSET_ARRAY_REFACTOR(name, max)\ +for (i = 0; i < max; i++)\ +{\ + if (stream->writeFlag(m##name##Asset[i].notNull()))\ + {\ + stream->writeString(m##name##Asset[i].getAssetId()); \ + }\ +} + +//network recieve - datablock +#define UNPACKDATA_ASSET_ARRAY_REFACTOR(name, max)\ +for (i = 0; i < max; i++)\ +{\ + if (stream->readFlag())\ + {\ + m##name##Asset[i] = stream->readSTString();\ + }\ +} + #define DEF_ASSET_BINDS_REFACTOR(className,name)\ DefineEngineMethod(className, get##name, StringTableEntry, (), , "get name")\ {\ diff --git a/Engine/source/T3D/fx/splash.cpp b/Engine/source/T3D/fx/splash.cpp index 07c3a52f3..205575672 100644 --- a/Engine/source/T3D/fx/splash.cpp +++ b/Engine/source/T3D/fx/splash.cpp @@ -96,11 +96,6 @@ SplashData::SplashData() explosionId = 0; U32 i; - for (i = 0; i < NUM_TEX; i++) - { - INIT_IMAGEASSET_ARRAY(Texture, GFXStaticTextureSRGBProfile, i); - } - for( i=0; iwrite( times[i] ); } - for( i=0; iread( ×[i] ); } - for( i=0; i(), Offset( mIconLocation, GuiIconButtonCtrl ),"Where to place the icon on the control. Options are 0 (None), 1 (Left), 2 (Right), 3 (Center).\n"); addField( "sizeIconToButton", TypeBool, Offset( mFitBitmapToButton, GuiIconButtonCtrl ),"If true, the icon will be scaled to be the same size as the button.\n"); @@ -148,8 +147,6 @@ bool GuiIconButtonCtrl::onWake() return false; setActive(true); - setBitmap(mBitmapName); - if( mProfile ) mProfile->constructBitmapArray(); @@ -181,8 +178,8 @@ bool GuiIconButtonCtrl::resize(const Point2I &newPosition, const Point2I &newExt if ( mIconLocation != IconLocNone ) { - autoExtent.y = mBitmap.getHeight() + mButtonMargin.y * 2; - autoExtent.x = mBitmap.getWidth() + mButtonMargin.x * 2; + autoExtent.y = getBitmap().getHeight() + mButtonMargin.y * 2; + autoExtent.x = getBitmap().getWidth() + mButtonMargin.x * 2; } if ( mTextLocation != TextLocNone && mButtonText && mButtonText[0] ) @@ -209,7 +206,7 @@ void GuiIconButtonCtrl::setBitmap(const char *name) if(!isAwake()) return; - _setBitmap(getBitmap()); + _setBitmap(name); // So that extent is recalculated if autoSize is set. resize( getPosition(), getExtent() ); @@ -299,13 +296,13 @@ void GuiIconButtonCtrl::renderButton( Point2I &offset, const RectI& updateRect ) RectI iconRect( 0, 0, 0, 0 ); // Render the icon - if ( mBitmap && mIconLocation != GuiIconButtonCtrl::IconLocNone ) + if ( mBitmapAsset.notNull() && mIconLocation != GuiIconButtonCtrl::IconLocNone) { // Render the normal bitmap drawer->clearBitmapModulation(); // Size of the bitmap - Point2I textureSize(mBitmap->getWidth(), mBitmap->getHeight()); + Point2I textureSize(getBitmap()->getWidth(), getBitmap()->getHeight()); // Reduce the size with the margin (if set) textureSize.x = textureSize.x - (mBitmapMargin * 2); @@ -332,7 +329,7 @@ void GuiIconButtonCtrl::renderButton( Point2I &offset, const RectI& updateRect ) iconRect.point.y = offset.y + ( getHeight() - textureSize.y ) / 2; } - drawer->drawBitmapStretch(mBitmap, iconRect ); + drawer->drawBitmapStretch(getBitmap(), iconRect ); } else @@ -366,7 +363,7 @@ void GuiIconButtonCtrl::renderButton( Point2I &offset, const RectI& updateRect ) iconRect.point.y = offset.y + (getHeight() / 2) - (iconRect.extent.y / 2) + mButtonMargin.y; } - drawer->drawBitmapStretch( mBitmap, iconRect ); + drawer->drawBitmapStretch(getBitmap(), iconRect ); } } @@ -383,7 +380,7 @@ void GuiIconButtonCtrl::renderButton( Point2I &offset, const RectI& updateRect ) if ( mTextLocation == TextLocRight ) { Point2I start( mTextMargin, ( getHeight() - mProfile->mFont->getHeight() ) / 2 ); - if (mBitmap && mIconLocation != IconLocNone ) + if (mBitmapAsset.notNull() && mIconLocation != IconLocNone) { start.x = iconRect.extent.x + mButtonMargin.x + mTextMargin; } @@ -403,7 +400,7 @@ void GuiIconButtonCtrl::renderButton( Point2I &offset, const RectI& updateRect ) if ( mTextLocation == TextLocCenter ) { Point2I start; - if (mBitmap && mIconLocation == IconLocLeft ) + if (mBitmapAsset.notNull() && mIconLocation == IconLocLeft ) { start.set( ( getWidth() - textWidth - iconRect.extent.x ) / 2 + iconRect.extent.x, ( getHeight() - mProfile->mFont->getHeight() ) / 2 ); @@ -468,4 +465,4 @@ void GuiIconButtonCtrl::renderBitmapArray(RectI &bounds, S32 state) } } -DEF_ASSET_BINDS(GuiIconButtonCtrl, Bitmap); +DEF_ASSET_BINDS_REFACTOR(GuiIconButtonCtrl, Bitmap) diff --git a/Engine/source/gui/buttons/guiIconButtonCtrl.h b/Engine/source/gui/buttons/guiIconButtonCtrl.h index d4b00bfbc..da5b08ca2 100644 --- a/Engine/source/gui/buttons/guiIconButtonCtrl.h +++ b/Engine/source/gui/buttons/guiIconButtonCtrl.h @@ -42,8 +42,7 @@ private: protected: - DECLARE_IMAGEASSET(GuiIconButtonCtrl, Bitmap, onImageChanged, GFXDefaultGUIProfile); - DECLARE_ASSET_SETGET(GuiIconButtonCtrl, Bitmap); + DECLARE_IMAGEASSET_REFACTOR(GuiIconButtonCtrl, Bitmap, GFXDefaultGUIProfile) S32 mIconLocation; S32 mTextLocation; diff --git a/Engine/source/gui/controls/guiPopUpCtrl.cpp b/Engine/source/gui/controls/guiPopUpCtrl.cpp index ad4fafe4e..3e6eff7d4 100644 --- a/Engine/source/gui/controls/guiPopUpCtrl.cpp +++ b/Engine/source/gui/controls/guiPopUpCtrl.cpp @@ -278,9 +278,6 @@ GuiPopUpMenuCtrl::GuiPopUpMenuCtrl(void) mBackgroundCancel = false; // Added mReverseTextList = false; // Added - Don't reverse text list if displaying up - INIT_IMAGEASSET_ARRAY(Bitmap, GFXDefaultGUIProfile, 0); - INIT_IMAGEASSET_ARRAY(Bitmap, GFXDefaultGUIProfile, 1); - mBitmapBounds.set(16, 16); // Added mIdMax = -1; mBackground = NULL; @@ -302,8 +299,7 @@ void GuiPopUpMenuCtrl::initPersistFields(void) addField("sbUsesNAColor", TypeBool, Offset(mRenderScrollInNA, GuiPopUpMenuCtrl)); addField("reverseTextList", TypeBool, Offset(mReverseTextList, GuiPopUpMenuCtrl)); - addProtectedField("bitmap", TypeImageFilename, Offset(mBitmapName, GuiPopUpMenuCtrl), _setBitmaps, defaultProtectedGetFn, ""); - addProtectedField("bitmapAsset", TypeImageAssetId, Offset(mBitmapAssetId, GuiPopUpMenuCtrl), _setBitmaps, defaultProtectedGetFn, ""); + addProtectedField("BitmapAsset", TypeImageAssetPtrRefactor, Offset(mBitmapAsset, GuiPopUpMenuCtrl), _setBitmaps, &defaultProtectedGetFn, "@brief ""Bitmap"" ""asset \"\"."); addField("bitmapBounds", TypePoint2I, Offset(mBitmapBounds, GuiPopUpMenuCtrl)); @@ -473,9 +469,6 @@ bool GuiPopUpMenuCtrl::onWake() if ( !Parent::onWake() ) return false; - // Set the bitmap for the popup. - setBitmap(getBitmap(Normal)); - // Now update the Form Control's bitmap array, and possibly the child's too mProfile->constructBitmapArray(); @@ -592,8 +585,8 @@ void GuiPopUpMenuCtrl::setBitmap( const char *name ) dStrcpy(p, "_d", pLen); _setBitmap((StringTableEntry)buffer, Depressed); - if ( !mBitmap[Depressed] ) - mBitmap[Depressed] = mBitmap[Normal]; + if ( mBitmapAsset[Depressed].isNull() ) + mBitmapAsset[Depressed] = mBitmapAsset[Normal]; } else { @@ -898,17 +891,17 @@ void GuiPopUpMenuCtrl::onRender( Point2I offset, const RectI &updateRect ) } // Draw a bitmap over the background? - if ( mBitmap[Depressed] ) + if ( mBitmapAsset[Depressed].notNull() ) { RectI rect(offset, mBitmapBounds); drawUtil->clearBitmapModulation(); - drawUtil->drawBitmapStretch( mBitmap[Depressed], rect ); + drawUtil->drawBitmapStretch( getBitmap(Depressed), rect ); } - else if ( mBitmap[Normal] ) + else if ( mBitmapAsset[Normal].notNull() ) { RectI rect(offset, mBitmapBounds); drawUtil->clearBitmapModulation(); - drawUtil->drawBitmapStretch( mBitmap[Normal], rect ); + drawUtil->drawBitmapStretch(getBitmap(Normal), rect ); } // Do we render a bitmap border or lines? @@ -948,11 +941,11 @@ void GuiPopUpMenuCtrl::onRender( Point2I offset, const RectI &updateRect ) } // Draw a bitmap over the background? - if ( mBitmap[Normal] ) + if ( mBitmapAsset[Normal].notNull() ) { RectI rect( offset, mBitmapBounds ); drawUtil->clearBitmapModulation(); - drawUtil->drawBitmapStretch( mBitmap[Normal], rect ); + drawUtil->drawBitmapStretch(getBitmap(Normal) , rect); } // Do we render a bitmap border or lines? @@ -984,11 +977,11 @@ void GuiPopUpMenuCtrl::onRender( Point2I offset, const RectI &updateRect ) } // Draw a bitmap over the background? - if ( mBitmap[Normal] ) + if (mBitmapAsset[Normal].notNull()) { RectI rect(offset, mBitmapBounds); drawUtil->clearBitmapModulation(); - drawUtil->drawBitmapStretch( mBitmap[Normal], rect ); + drawUtil->drawBitmapStretch( getBitmap(Normal), rect); } // Do we render a bitmap border or lines? diff --git a/Engine/source/gui/controls/guiPopUpCtrl.h b/Engine/source/gui/controls/guiPopUpCtrl.h index 12568d2c6..3f7f5c02b 100644 --- a/Engine/source/gui/controls/guiPopUpCtrl.h +++ b/Engine/source/gui/controls/guiPopUpCtrl.h @@ -126,9 +126,8 @@ protected: NumBitmapModes = 2 }; - DECLARE_IMAGEASSET_ARRAY(GuiPopUpMenuCtrl, Bitmap, NumBitmapModes, onBitmapChanged); - DECLARE_IMAGEASSET_ARRAY_SETGET(GuiPopUpMenuCtrl, Bitmap); - void onBitmapChanged() {} + DECLARE_IMAGEASSET_ARRAY_REFACTOR(GuiPopUpMenuCtrl, Bitmap, GFXDefaultGUIProfile, NumBitmapModes) + Point2I mBitmapBounds; // Added S32 mIdMax; diff --git a/Engine/source/gui/controls/guiPopUpCtrlEx.cpp b/Engine/source/gui/controls/guiPopUpCtrlEx.cpp index 9b82c1ecc..2624d4197 100644 --- a/Engine/source/gui/controls/guiPopUpCtrlEx.cpp +++ b/Engine/source/gui/controls/guiPopUpCtrlEx.cpp @@ -353,7 +353,7 @@ void GuiPopUpMenuCtrlEx::initPersistFields(void) addField("sbUsesNAColor", TypeBool, Offset(mRenderScrollInNA, GuiPopUpMenuCtrlEx), "Deprecated" "@internal"); addField("reverseTextList", TypeBool, Offset(mReverseTextList, GuiPopUpMenuCtrlEx), "Reverses text list if popup extends up, instead of down"); - INITPERSISTFIELD_IMAGEASSET_ARRAY_REFACTOR(Bitmap, NumBitmapModes, GuiPopUpMenuCtrlEx, "Name of bitmap asset to use") + addProtectedField("BitmapAsset", TypeImageAssetPtrRefactor, Offset(mBitmapAsset, GuiPopUpMenuCtrlEx), _setBitmaps, &defaultProtectedGetFn, "@brief ""Bitmap"" ""asset \"Name of bitmap asset to use\"."); addField("bitmapBounds", TypePoint2I, Offset(mBitmapBounds, GuiPopUpMenuCtrlEx), "Boundaries of bitmap displayed"); addField("hotTrackCallback", TypeBool, Offset(mHotTrackItems, GuiPopUpMenuCtrlEx), @@ -780,7 +780,15 @@ static S32 QSORT_CALLBACK idCompare(const void *a,const void *b) GuiPopUpMenuCtrlEx::Entry *ea = (GuiPopUpMenuCtrlEx::Entry *) (a); GuiPopUpMenuCtrlEx::Entry *eb = (GuiPopUpMenuCtrlEx::Entry *) (b); return ( (ea->id < eb->id) ? -1 : ((ea->id > eb->id) ? 1 : 0) ); -} +} + +bool GuiPopUpMenuCtrlEx::_setBitmaps(void* obj, const char* index, const char* data) +{ + GuiPopUpMenuCtrlEx* object = static_cast(obj); + + object->setBitmap(data); + return true; +} //------------------------------------------------------------------------------ // Added diff --git a/Engine/source/gui/controls/guiPopUpCtrlEx.h b/Engine/source/gui/controls/guiPopUpCtrlEx.h index ac0306f35..9e8fddc87 100644 --- a/Engine/source/gui/controls/guiPopUpCtrlEx.h +++ b/Engine/source/gui/controls/guiPopUpCtrlEx.h @@ -143,6 +143,8 @@ class GuiPopUpMenuCtrlEx : public GuiTextCtrl virtual void removeChildren(); virtual void repositionPopup(); + static bool _setBitmaps(void* obj, const char* index, const char* data); + public: GuiPopUpMenuCtrlEx(void); ~GuiPopUpMenuCtrlEx(); diff --git a/Engine/source/gui/editor/inspector/dynamicField.cpp b/Engine/source/gui/editor/inspector/dynamicField.cpp index 52ff17457..861066721 100644 --- a/Engine/source/gui/editor/inspector/dynamicField.cpp +++ b/Engine/source/gui/editor/inspector/dynamicField.cpp @@ -257,7 +257,7 @@ bool GuiInspectorDynamicField::onAdd() mParent->getId() ); // FIXME Hardcoded image - mDeleteButton->setField( "Bitmap", "ToolsModule:iconDelete_image" ); + mDeleteButton->_setBitmap("ToolsModule:iconDelete_image"); mDeleteButton->setField( "Text", "X" ); mDeleteButton->setField( "Command", szBuffer ); mDeleteButton->setSizing( horizResizeLeft, vertResizeCenter );