📄 guitypes.cc
字号:
}
}
GuiControlProfile::~GuiControlProfile()
{
}
void GuiControlProfile::initPersistFields()
{
Parent::initPersistFields();
addField("tab", TypeBool, Offset(mTabable, GuiControlProfile));
addField("canKeyFocus", TypeBool, Offset(mCanKeyFocus, GuiControlProfile));
addField("mouseOverSelected", TypeBool, Offset(mMouseOverSelected, GuiControlProfile));
addField("modal", TypeBool, Offset(mModal, GuiControlProfile));
addField("opaque", TypeBool, Offset(mOpaque, GuiControlProfile));
addField("fillColor", TypeColorI, Offset(mFillColor, GuiControlProfile));
addField("fillColorHL", TypeColorI, Offset(mFillColorHL, GuiControlProfile));
addField("fillColorNA", TypeColorI, Offset(mFillColorNA, GuiControlProfile));
addField("border", TypeS32, Offset(mBorder, GuiControlProfile));
addField("borderThickness",TypeS32, Offset(mBorderThickness, GuiControlProfile));
addField("borderColor", TypeColorI, Offset(mBorderColor, GuiControlProfile));
addField("borderColorHL", TypeColorI, Offset(mBorderColorHL, GuiControlProfile));
addField("borderColorNA", TypeColorI, Offset(mBorderColorNA, GuiControlProfile));
addField("bevelColorHL", TypeColorI, Offset(mBevelColorHL, GuiControlProfile));
addField("bevelColorLL", TypeColorI, Offset(mBevelColorLL, GuiControlProfile));
addField("fontType", TypeString, Offset(mFontType, GuiControlProfile));
addField("fontSize", TypeS32, Offset(mFontSize, GuiControlProfile));
addField("fontCharset", TypeEnum, Offset(mFontCharset, GuiControlProfile), 1, &gCharsetTable);
addField("fontColors", TypeColorI, Offset(mFontColors, GuiControlProfile), 10);
addField("fontColor", TypeColorI, Offset(mFontColors[BaseColor], GuiControlProfile));
addField("fontColorHL", TypeColorI, Offset(mFontColors[ColorHL], GuiControlProfile));
addField("fontColorNA", TypeColorI, Offset(mFontColors[ColorNA], GuiControlProfile));
addField("fontColorSEL", TypeColorI, Offset(mFontColors[ColorSEL], GuiControlProfile));
addField("fontColorLink", TypeColorI, Offset(mFontColors[ColorUser0], GuiControlProfile));
addField("fontColorLinkHL", TypeColorI, Offset(mFontColors[ColorUser1], GuiControlProfile));
addField("justify", TypeEnum, Offset(mAlignment, GuiControlProfile), 1, &gAlignTable);
addField("textOffset", TypePoint2I, Offset(mTextOffset, GuiControlProfile));
addField("autoSizeWidth", TypeBool, Offset(mAutoSizeWidth, GuiControlProfile));
addField("autoSizeHeight",TypeBool, Offset(mAutoSizeHeight, GuiControlProfile));
addField("returnTab", TypeBool, Offset(mReturnTab, GuiControlProfile));
addField("numbersOnly", TypeBool, Offset(mNumbersOnly, GuiControlProfile));
addField("cursorColor", TypeColorI, Offset(mCursorColor, GuiControlProfile));
addField("bitmap", TypeFilename, Offset(mBitmapName, GuiControlProfile));
addField("soundButtonDown", TypeAudioProfilePtr, Offset(mSoundButtonDown, GuiControlProfile));
addField("soundButtonOver", TypeAudioProfilePtr, Offset(mSoundButtonOver, GuiControlProfile));
}
bool GuiControlProfile::onAdd()
{
if(!Parent::onAdd())
return false;
Sim::getGuiDataGroup()->addObject(this);
//#ifdef TGE_RPG_UI
// constructBitmapArray();
//#endif
return true;
}
S32 GuiControlProfile::constructBitmapArray()
{
/// TGE_Theme
//if(mBitmapArrayRects.size())
// return mBitmapArrayRects.size();
int bitmapArraySize = mBitmapArrayRects.size();
#ifdef TGE_RPG_UI
if(mBitmapName == mOldBitmapName)
return bitmapArraySize;
if(bitmapArraySize)
mBitmapArrayRects.clear();
mTextureHandle = TextureHandle(mBitmapName, BitmapKeepTexture);
if (!(bool)mTextureHandle)
Con::errorf("Failed to load profile bitmap (%s)",mBitmapName);
mOldBitmapName = mBitmapName;
#else
bool needReconstruct = needReConstructBitmapArray();
if((bitmapArraySize) && (!needReconstruct))
return bitmapArraySize;
if (bitmapArraySize || needReconstruct)
{
mBitmapArrayRects.clear();
mTextureHandle = TextureHandle(mBitmapName, BitmapKeepTexture);
if (!(bool)mTextureHandle)
Con::errorf("Failed to load profile bitmap (%s)",mBitmapName);
mOldBitmapName = mBitmapName;
}
#endif
GBitmap *bmp = mTextureHandle.getBitmap();
//get the separator color
ColorI sepColor;
if ( !bmp || !bmp->getColor( 0, 0, sepColor ) )
{
Con::errorf("Failed to create bitmap array from %s for profile %s - couldn't ascertain seperator color!", mBitmapName, getName());
AssertFatal( false, avar("Failed to create bitmap array from %s for profile %s - couldn't ascertain seperator color!", mBitmapName, getName()));
return 0;
}
//now loop through all the scroll pieces, and find the bounding rectangle for each piece in each state
S32 curY = 0;
// ascertain the height of this row...
ColorI color;
mBitmapArrayRects.clear();
while(curY < bmp->getHeight())
{
// skip any sep colors
bmp->getColor( 0, curY, color);
if(color == sepColor)
{
curY++;
continue;
}
// ok, process left to right, grabbing bitmaps as we go...
S32 curX = 0;
while(curX < bmp->getWidth())
{
bmp->getColor(curX, curY, color);
if(color == sepColor)
{
curX++;
continue;
}
S32 startX = curX;
while(curX < bmp->getWidth())
{
bmp->getColor(curX, curY, color);
if(color == sepColor)
break;
curX++;
}
S32 stepY = curY;
while(stepY < bmp->getHeight())
{
bmp->getColor(startX, stepY, color);
if(color == sepColor)
break;
stepY++;
}
mBitmapArrayRects.push_back(RectI(startX, curY, curX - startX, stepY - curY));
}
// ok, now skip to the next seperation color on column 0
while(curY < bmp->getHeight())
{
bmp->getColor(0, curY, color);
if(color == sepColor)
break;
curY++;
}
}
return mBitmapArrayRects.size();
}
/// TGE_Theme
bool GuiControlProfile::needReConstructBitmapArray()
{
return ((mOldBitmapName==NULL) && (mBitmapName!=NULL)) ||
(mBitmapName!=mOldBitmapName);// && (dStrcmp(mBitmapName,mOldBitmapName)!=0);
}
void GuiControlProfile::incRefCount()
{
if(!mRefCount++)
{
sFontCacheDirectory = Con::getVariable("$GUI::fontCacheDirectory");
//verify the font
mFont = GFont::create(mFontType, mFontSize, sFontCacheDirectory);
if (mFont.isNull())
Con::errorf("Failed to load/create profile font (%s/%d)", mFontType, mFontSize);
//verify the bitmap
mTextureHandle = TextureHandle(mBitmapName, BitmapKeepTexture);
if (!(bool)mTextureHandle)
Con::errorf("Failed to load profile bitmap (%s)",mBitmapName);
}
}
void GuiControlProfile::decRefCount()
{
AssertFatal(mRefCount, "GuiControlProfile::decRefCount: zero ref count");
if(!mRefCount)
return;
if(!--mRefCount)
{
mFont = NULL;
mTextureHandle = NULL;
}
}
ConsoleType( GuiProfile, TypeGuiProfile, sizeof(GuiControlProfile*) )
ConsoleSetType( TypeGuiProfile )
{
GuiControlProfile *profile = NULL;
if(argc == 1)
Sim::findObject(argv[0], profile);
AssertWarn(profile != NULL, avar("GuiControlProfile: requested gui profile (%s) does not exist.", argv[0]));
if(!profile)
profile = dynamic_cast<GuiControlProfile*>(Sim::findObject("GuiDefaultProfile"));
AssertFatal(profile != NULL, avar("GuiControlProfile: unable to find specified profile (%s) and GuiDefaultProfile does not exist!", argv[0]));
GuiControlProfile **obj = (GuiControlProfile **)dptr;
if((*obj) == profile)
return;
if(*obj)
(*obj)->decRefCount();
*obj = profile;
(*obj)->incRefCount();
}
ConsoleGetType( TypeGuiProfile )
{
static char returnBuffer[256];
GuiControlProfile **obj = (GuiControlProfile**)dptr;
dSprintf(returnBuffer, sizeof(returnBuffer), "%s", *obj ? (*obj)->getName() : "");
return returnBuffer;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -