Game client codebase including: - CharacterActionControl: Character and creature management - GlobalScript: Network, items, skills, quests, utilities - RYLClient: Main client application with GUI and event handlers - Engine: 3D rendering engine (RYLGL) - MemoryManager: Custom memory allocation - Library: Third-party dependencies (DirectX, boost, etc.) - Tools: Development utilities 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
136 lines
2.9 KiB
C++
136 lines
2.9 KiB
C++
// GradientStatic.cpp : implementation file
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "GradientStatic.h"
|
|
#include "MemDC.h"
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CGradientStatic
|
|
|
|
CGradientStatic::CGradientStatic()
|
|
{
|
|
m_iLeftSpacing = 10;
|
|
clLeft = GetSysColor(COLOR_ACTIVECAPTION);
|
|
clRight = GetSysColor(COLOR_BTNFACE);
|
|
clText = GetSysColor(COLOR_CAPTIONTEXT);
|
|
|
|
m_bCenter = FALSE;
|
|
|
|
hinst_msimg32 = LoadLibrary( "msimg32.dll" );
|
|
m_bCanDoGradientFill = FALSE;
|
|
pFont = NULL;
|
|
|
|
if(hinst_msimg32)
|
|
{
|
|
m_bCanDoGradientFill = TRUE;
|
|
dllfunc_GradientFill = ((LPFNDLLFUNC1) GetProcAddress( hinst_msimg32, "GradientFill" ));
|
|
}
|
|
|
|
|
|
}
|
|
|
|
CGradientStatic::~CGradientStatic()
|
|
{
|
|
FreeLibrary( hinst_msimg32 );
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CGradientStatic, CStatic)
|
|
//{{AFX_MSG_MAP(CGradientStatic)
|
|
ON_WM_PAINT()
|
|
ON_WM_LBUTTONDOWN()
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CGradientStatic message handlers
|
|
|
|
void CGradientStatic::OnPaint()
|
|
{
|
|
CPaintDC dc(this); // device context for painting
|
|
|
|
CRect rect;
|
|
GetClientRect(&rect);
|
|
|
|
CMemDC mDC( &dc, rect );
|
|
|
|
if(m_bCanDoGradientFill)
|
|
{
|
|
|
|
TRIVERTEX rcVertex[2];
|
|
rect.right--; // exclude this point, like FillRect does
|
|
rect.bottom--;
|
|
rcVertex[0].x=rect.left;
|
|
rcVertex[0].y=rect.top;
|
|
rcVertex[0].Red=GetRValue(clLeft)<<8; // color values from 0x0000 to 0xff00 !!!!
|
|
rcVertex[0].Green=GetGValue(clLeft)<<8;
|
|
rcVertex[0].Blue=GetBValue(clLeft)<<8;
|
|
rcVertex[0].Alpha=0x0000;
|
|
rcVertex[1].x=rect.right;
|
|
rcVertex[1].y=rect.bottom;
|
|
rcVertex[1].Red=GetRValue(clRight)<<8;
|
|
rcVertex[1].Green=GetGValue(clRight)<<8;
|
|
rcVertex[1].Blue=GetBValue(clRight)<<8;
|
|
rcVertex[1].Alpha=0;
|
|
GRADIENT_RECT rect;
|
|
rect.UpperLeft=0;
|
|
rect.LowerRight=1;
|
|
|
|
// fill the area
|
|
//dllfunc_GradientFill( mDC,rcVertex,2,&rect,1,GRADIENT_FILL_RECT_H);
|
|
|
|
//if Gradient Fil works - let's use font color defined by user
|
|
::SetTextColor(mDC,clText);
|
|
}
|
|
else
|
|
{
|
|
//there is no gradient, so let's use standart color
|
|
::SetTextColor(mDC,GetSysColor(COLOR_BTNTEXT));
|
|
}
|
|
|
|
HFONT hfontOld;
|
|
if(pFont)
|
|
hfontOld = (HFONT)SelectObject(mDC.m_hDC, (HFONT)pFont->m_hObject);
|
|
|
|
::SetBkMode(mDC, TRANSPARENT);
|
|
GetClientRect(&rect);
|
|
|
|
|
|
if(m_bCenter)
|
|
::DrawText(mDC, m_sTEXT, -1, &rect, DT_SINGLELINE|DT_VCENTER|DT_CENTER);
|
|
else
|
|
{
|
|
rect.left+=m_iLeftSpacing;
|
|
::DrawText(mDC, m_sTEXT, -1, &rect, DT_SINGLELINE|DT_VCENTER|DT_LEFT);
|
|
}
|
|
|
|
if(pFont)
|
|
::SelectObject(mDC.m_hDC, hfontOld);
|
|
}
|
|
|
|
void CGradientStatic::SetWindowText(LPCSTR lpszString)
|
|
{
|
|
m_sTEXT = lpszString;
|
|
Invalidate(TRUE);
|
|
}
|
|
|
|
CString CGradientStatic::GetWindowText()
|
|
{
|
|
return m_sTEXT;
|
|
|
|
}
|
|
|
|
void CGradientStatic::OnLButtonDown(UINT nFlags, CPoint point)
|
|
{
|
|
// TODO: Add your message handler code here and/or call default
|
|
|
|
CStatic::OnLButtonDown(nFlags, point);
|
|
}
|