?? cpsk_skin.c
字號:
{
pRect = &pSkin->mpl_rVScrollBar_Track_Tile;
ppImage = &pSkin->mpl_pVScrollBar_TrackDn;
}
else
return;
// Set data members
if(*ppImage)
CPIG_DestroyImage(*ppImage);
*ppImage = CPIG_CreateImage_FromSubFile(hComposite, cFile);
*pRect = rTileBorders;
if(*ppImage)
{
pRect->right = (*ppImage)->m_szSize.cx - rTileBorders.right;
pRect->bottom = (*ppImage)->m_szSize.cy - rTileBorders.bottom;
}
}
//
//
//
void CPSK_ReadSkinCommand_ButtonDraw(CP_COMPOSITEFILE hComposite, CPs_Skin* pSkin, const char* pcParams)
{
char cElement[32];
char cStates[12];
char cFile[128];
CPs_Image_WithState** ppImage;
int iNumStates;
// Decode params
if(sscanf(pcParams, " %32[A-Za-z_-] , \"%128[^\"]\" , %12s ",
cElement, cFile, cStates) != 3)
{
return;
}
// Setup number of states
if(stricmp(cStates, "2State") == 0)
iNumStates = 2;
else
iNumStates = 2;
// Decide which data members are affected by this command
if(stricmp(cElement, "HScrollBar_Left") == 0)
{
ppImage = &pSkin->mpl_pHScrollBar_Left;
}
else if(stricmp(cElement, "HScrollBar_Right") == 0)
{
ppImage = &pSkin->mpl_pHScrollBar_Right;
}
else if(stricmp(cElement, "VScrollBar_Up") == 0)
{
ppImage = &pSkin->mpl_pVScrollBar_Up;
}
else if(stricmp(cElement, "VScrollBar_Down") == 0)
{
ppImage = &pSkin->mpl_pVScrollBar_Down;
}
else
return;
// Set data members
if(*ppImage)
CPIG_DestroyImage_WithState(*ppImage);
*ppImage = CPIG_CreateStateImage(CPIG_CreateImage_FromSubFile(hComposite, cFile), iNumStates);
}
//
//
//
DWORD CPSK_DecodeAlign(const char* pcAlign)
{
char cAlign[1024];
char cAlign_Remains[128];
char cAlignFlag[128];
DWORD dwAlignFlag = 0;
strcpy(cAlign, pcAlign);
while(sscanf(cAlign, " %128[a-zA-Z_] | %[^\0]", cAlignFlag, cAlign_Remains) > 0)
{
strcpy(cAlign, cAlign_Remains);
cAlign_Remains[0] = '\0';
if(stricmp(cAlignFlag, "ALIGN_LEFT") == 0)
dwAlignFlag |= CPC_COMMANDTARGET_ALIGN_LEFT;
else if(stricmp(cAlignFlag, "ALIGN_TOP") == 0)
dwAlignFlag |= CPC_COMMANDTARGET_ALIGN_TOP;
else if(stricmp(cAlignFlag, "ALIGN_RIGHT") == 0)
dwAlignFlag |= CPC_COMMANDTARGET_ALIGN_RIGHT;
else if(stricmp(cAlignFlag, "ALIGN_BOTTOM") == 0)
dwAlignFlag |= CPC_COMMANDTARGET_ALIGN_BOTTOM;
}
return dwAlignFlag;
}
//
//
//
void CPSK_ReadSkinCommand_AddVerb(CP_COMPOSITEFILE hComposite, CPs_CommandTarget** ppCommandTarget, const char* pcParams)
{
char cElement[32];
char cStates[12];
char cAlign[128];
char cFile[128];
int iNumStates;
POINT ptOffset;
wp_Verb pfnVerb = NULL;
DWORD dwAlignFlag;
CPs_CommandTarget* pNext;
// Decode params
if(sscanf(pcParams, " %32[A-Za-z_-] , \"%128[^\"]\" , %12[0-9a-zA-Z] , %d , %d , \"%128[^\"]\" ",
cElement, cFile, cStates, &ptOffset.x, &ptOffset.y, cAlign) != 6)
{
return;
}
// Setup number of states
if(stricmp(cStates, "3State") == 0)
iNumStates = 3;
else
iNumStates = 2;
// Find the verb with this name
{
int iVerbIDX;
CPs_VerbQueryName queryname;
queryname.m_pcName = cElement;
queryname.m_bNameMatched = FALSE;
for(iVerbIDX = 0; glb_pfnAllVerbs[iVerbIDX]; iVerbIDX++)
{
glb_pfnAllVerbs[iVerbIDX](vaQueryName, &queryname);
if(queryname.m_bNameMatched)
{
pfnVerb = glb_pfnAllVerbs[iVerbIDX];
break;
}
}
}
// Build the align flags
dwAlignFlag = CPSK_DecodeAlign(cAlign);
// Load state image
pNext = *ppCommandTarget;
*ppCommandTarget = (CPs_CommandTarget*)malloc(sizeof(CPs_CommandTarget));
(*ppCommandTarget)->m_pStateImage = CPIG_CreateStateImage(CPIG_CreateImage_FromSubFile(hComposite, cFile), iNumStates);
(*ppCommandTarget)->m_ptOffset = ptOffset;
(*ppCommandTarget)->m_dwAlign = dwAlignFlag;
(*ppCommandTarget)->m_pfnVerb = pfnVerb;
(*ppCommandTarget)->m_pNext = pNext;
}
//
//
//
void CPSK_ReadSkinCommand_AddIndicator(CP_COMPOSITEFILE hComposite, CPs_Skin* pSkin, const char* pcParams)
{
char cElement[32];
char cAlign[128];
RECT rOffset;
DWORD dwAlignFlag;
CPs_Indicator* pNext;
// Decode params
if(sscanf(pcParams, " %32[A-Za-z_-] , %d , %d , %d , %d , \"%128[^\"]\" ",
cElement, &rOffset.left, &rOffset.top, &rOffset.right, &rOffset.bottom, cAlign) != 6)
{
return;
}
// Build the align flags
dwAlignFlag = CPSK_DecodeAlign(cAlign);
// Load state image
pNext = pSkin->mpl_pIndicators;
pSkin->mpl_pIndicators = (CPs_Indicator*)malloc(sizeof(CPs_Indicator));
pSkin->mpl_pIndicators->m_pNext = pNext;
pSkin->mpl_pIndicators->m_dwAlign = dwAlignFlag;
pSkin->mpl_pIndicators->m_rAlign = rOffset;
STR_AllocSetString(&pSkin->mpl_pIndicators->m_pcName, cElement, FALSE);
}
void CPSK_ReadSkinCommand_AddPlaylistVerb(CP_COMPOSITEFILE hComposite, CPs_Skin* pSkin, const char* pcParams)
{
CPSK_ReadSkinCommand_AddVerb(hComposite, &pSkin->mpl_pCommandTargets, pcParams);
}
//
//
//
void CPSK_ReadSkinLine(CP_COMPOSITEFILE hComposite, CPs_Skin* pSkin, const char* pcLine)
{
char cCommand[32];
char cParams[480];
// Decode command
if(sscanf(pcLine, " %32s %480[^\0]", cCommand, cParams) != 2)
return;
// Skip comments
if(cCommand[0] == '#')
return;
CP_TRACE2("Command:\"%s\" Params:\"%s\"", cCommand, cParams);
if(stricmp(cCommand, "define") == 0)
CPSK_ReadSkinCommand_Define(hComposite, pSkin, cParams);
else if(stricmp(cCommand, "tileddraw") == 0)
CPSK_ReadSkinCommand_TiledDraw(hComposite, pSkin, cParams);
else if(stricmp(cCommand, "buttondraw") == 0)
CPSK_ReadSkinCommand_ButtonDraw(hComposite, pSkin, cParams);
else if(stricmp(cCommand, "addplaylistverb") == 0)
CPSK_ReadSkinCommand_AddPlaylistVerb(hComposite, pSkin, cParams);
else if(stricmp(cCommand, "addplaylistindicator") == 0)
CPSK_ReadSkinCommand_AddIndicator(hComposite, pSkin, cParams);
}
//
//
//
CPs_Skin* CPSK_LoadSkin(CP_COMPOSITEFILE hComposite, const char* pcSkinFile, const unsigned int iFileSize)
{
unsigned int iLastLineStartIDX, iCharIDX;
CPs_Skin* pNewSkin = (CPs_Skin*)malloc(sizeof(CPs_Skin));
memset(pNewSkin, 0, sizeof(*pNewSkin));
// Read in the file line by line
iLastLineStartIDX = 0;
for(iCharIDX = 0; iCharIDX < iFileSize+1; iCharIDX++)
{
if( (pcSkinFile[iCharIDX] == '\r'
|| pcSkinFile[iCharIDX] == '\n'
|| iCharIDX == iFileSize)
&& iLastLineStartIDX < iCharIDX)
{
char cBuffer[512];
int iBytesOnLine;
iBytesOnLine = iCharIDX-iLastLineStartIDX;
if(iBytesOnLine >= 512)
iBytesOnLine = 511;
memcpy(cBuffer, pcSkinFile + iLastLineStartIDX, iBytesOnLine);
cBuffer[iBytesOnLine] = '\0';
CPSK_ReadSkinLine(hComposite, pNewSkin, cBuffer);
// Set the line start for the next line
if(pcSkinFile[iCharIDX + 1] == '\n')
iCharIDX++;
iLastLineStartIDX = iCharIDX + 1;
}
}
return pNewSkin;
}
//
//
//
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -