forked from metin2/client
add: Clipping mask.
This commit is contained in:
parent
a2bac7a5f3
commit
96a5766760
|
@ -131,7 +131,6 @@ class Window(object):
|
|||
self.parentWindow=proxy(parent)
|
||||
wndMgr.SetParent(self.hWnd, parent.hWnd)
|
||||
|
||||
|
||||
def GetParentProxy(self):
|
||||
return self.parentWindow
|
||||
|
||||
|
@ -221,11 +220,18 @@ class Window(object):
|
|||
|
||||
def SetOnMouseLeftButtonUpEvent(self, event):
|
||||
self.onMouseLeftButtonUpEvent = event
|
||||
|
||||
|
||||
def OnMouseLeftButtonUp(self):
|
||||
if self.onMouseLeftButtonUpEvent:
|
||||
self.onMouseLeftButtonUpEvent()
|
||||
|
||||
if app.__BL_CLIP_MASK__:
|
||||
def SetClippingMaskRect(self, left, top, right, bottom):
|
||||
wndMgr.SetClippingMaskRect(self.hWnd, left, top, right, bottom)
|
||||
|
||||
def SetClippingMaskWindow(self, clipping_mask_window):
|
||||
wndMgr.SetClippingMaskWindow(self.hWnd, clipping_mask_window.hWnd)
|
||||
|
||||
class ListBoxEx(Window):
|
||||
|
||||
class Item(Window):
|
||||
|
@ -870,7 +876,7 @@ class ExpandedImageBox(ImageBox):
|
|||
def SetRenderingMode(self, mode):
|
||||
wndMgr.SetRenderingMode(self.hWnd, mode)
|
||||
|
||||
# [0.0, 1.0] 사이의 값만큼 퍼센트로 그리지 않는다.
|
||||
# [0.0, 1.0] <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ŭ <20>ۼ<EFBFBD>Ʈ<EFBFBD><C6AE> <20><EFBFBD><D7B8><EFBFBD> <20>ʴ´<CAB4>.
|
||||
def SetRenderingRect(self, left, top, right, bottom):
|
||||
wndMgr.SetRenderingRect(self.hWnd, left, top, right, bottom)
|
||||
|
||||
|
@ -1359,11 +1365,11 @@ class SlotWindow(Window):
|
|||
return wndMgr.GetSlotCount(self.hWnd)
|
||||
|
||||
def SetUseMode(self, flag):
|
||||
"True일때만 ItemToItem 이 가능한지 보여준다"
|
||||
"True<EFBFBD>϶<EFBFBD><EFBFBD><EFBFBD> ItemToItem <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD>"
|
||||
wndMgr.SetUseMode(self.hWnd, flag)
|
||||
|
||||
def SetUsableItem(self, flag):
|
||||
"True면 현재 가리킨 아이템이 ItemToItem 적용 가능하다"
|
||||
"True<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ų <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ItemToItem <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>"
|
||||
wndMgr.SetUsableItem(self.hWnd, flag)
|
||||
|
||||
## Slot
|
||||
|
@ -1521,7 +1527,7 @@ class TitleBar(Window):
|
|||
|
||||
def MakeTitleBar(self, width, color):
|
||||
|
||||
## 현재 Color는 사용하고 있지 않음
|
||||
## <EFBFBD><EFBFBD><EFBFBD><EFBFBD> Color<6F><72> <20><><EFBFBD><EFBFBD>ϰ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
|
||||
width = max(64, width)
|
||||
|
||||
|
@ -2752,8 +2758,8 @@ class PythonScriptLoader(object):
|
|||
print "===== Load Script File : %s" % (FileName)
|
||||
|
||||
try:
|
||||
# chr, player 등은 sandbox 내에서 import가 허용되지 않기 때문에,(봇이 악용할 여지가 매우 큼.)
|
||||
# 미리 script dictionary에 필요한 상수를 넣어놓는다.
|
||||
# chr, player <EFBFBD><EFBFBD><EFBFBD><EFBFBD> sandbox <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> import<72><74> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʱ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,(<28><><EFBFBD><EFBFBD> <20>ǿ<EFBFBD><C7BF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ſ<EFBFBD> ŭ.)
|
||||
# <EFBFBD≯<EFBFBD> script dictionary<72><79> <20>ʿ<EFBFBD><CABF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20>־<EFBFBD><D6BE><EFBFBD>´<EFBFBD>.
|
||||
import chr
|
||||
import player
|
||||
import app
|
||||
|
|
|
@ -26,7 +26,11 @@ void CGraphicExpandedImageInstance::Delete(CGraphicExpandedImageInstance* pkImgI
|
|||
ms_kPool.Free(pkImgInst);
|
||||
}
|
||||
|
||||
#if defined(__BL_CLIP_MASK__)
|
||||
void CGraphicExpandedImageInstance::OnRender(RECT* pClipRect)
|
||||
#else
|
||||
void CGraphicExpandedImageInstance::OnRender()
|
||||
#endif
|
||||
{
|
||||
CGraphicImage * pImage = m_roImage.GetPointer();
|
||||
CGraphicTexture * pTexture = pImage->GetTexturePointer();
|
||||
|
@ -116,7 +120,7 @@ void CGraphicExpandedImageInstance::OnRender()
|
|||
break;
|
||||
}
|
||||
|
||||
// 2004.11.18.myevan.ctrl+alt+del 반복 사용시 튕기는 문제
|
||||
// 2004.11.18.myevan.ctrl+alt+del <EFBFBD>ݺ<EFBFBD> <20><><EFBFBD><EFBFBD> ƨ<><C6A8><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
if (CGraphicBase::SetPDTStream(vertices, 4))
|
||||
{
|
||||
CGraphicBase::SetDefaultIndexBuffer(CGraphicBase::DEFAULT_IB_FILL_RECT);
|
||||
|
|
|
@ -37,7 +37,11 @@ class CGraphicExpandedImageInstance : public CGraphicImageInstance
|
|||
protected:
|
||||
void Initialize();
|
||||
|
||||
#if defined(__BL_CLIP_MASK__)
|
||||
void OnRender(RECT* pClipRect);
|
||||
#else
|
||||
void OnRender();
|
||||
#endif
|
||||
void OnSetImagePointer();
|
||||
|
||||
BOOL OnIsType(DWORD dwType);
|
||||
|
|
|
@ -31,17 +31,29 @@ void CGraphicImageInstance::Delete(CGraphicImageInstance* pkImgInst)
|
|||
ms_kPool.Free(pkImgInst);
|
||||
}
|
||||
|
||||
#if defined(__BL_CLIP_MASK__)
|
||||
void CGraphicImageInstance::Render(RECT* pClipRect)
|
||||
#else
|
||||
void CGraphicImageInstance::Render()
|
||||
#endif
|
||||
{
|
||||
if (IsEmpty())
|
||||
return;
|
||||
|
||||
assert(!IsEmpty());
|
||||
|
||||
#if defined(__BL_CLIP_MASK__)
|
||||
OnRender(pClipRect);
|
||||
#else
|
||||
OnRender();
|
||||
#endif
|
||||
}
|
||||
|
||||
#if defined(__BL_CLIP_MASK__)
|
||||
void CGraphicImageInstance::OnRender(RECT* pClipRect)
|
||||
#else
|
||||
void CGraphicImageInstance::OnRender()
|
||||
#endif
|
||||
{
|
||||
CGraphicImage * pImage = m_roImage.GetPointer();
|
||||
CGraphicTexture * pTexture = pImage->GetTexturePointer();
|
||||
|
@ -56,34 +68,109 @@ void CGraphicImageInstance::OnRender()
|
|||
float sv = c_rRect.top * texReverseHeight;
|
||||
float eu = (c_rRect.left + (c_rRect.right-c_rRect.left)) * texReverseWidth;
|
||||
float ev = (c_rRect.top + (c_rRect.bottom-c_rRect.top)) * texReverseHeight;
|
||||
|
||||
|
||||
TPDTVertex vertices[4];
|
||||
vertices[0].position.x = m_v2Position.x-0.5f;
|
||||
vertices[0].position.y = m_v2Position.y-0.5f;
|
||||
vertices[0].position.z = 0.0f;
|
||||
vertices[0].texCoord = TTextureCoordinate(su, sv);
|
||||
vertices[0].diffuse = m_DiffuseColor;
|
||||
|
||||
vertices[1].position.x = m_v2Position.x + fimgWidth-0.5f;
|
||||
vertices[1].position.y = m_v2Position.y-0.5f;
|
||||
vertices[1].position.z = 0.0f;
|
||||
vertices[1].texCoord = TTextureCoordinate(eu, sv);
|
||||
vertices[1].diffuse = m_DiffuseColor;
|
||||
#if defined(__BL_CLIP_MASK__)
|
||||
float sx = m_v2Position.x - 0.5f;
|
||||
float sy = m_v2Position.y - 0.5f;
|
||||
float ex = m_v2Position.x + fimgWidth - 0.5f;
|
||||
float ey = m_v2Position.y + fimgHeight - 0.5f;
|
||||
|
||||
vertices[2].position.x = m_v2Position.x-0.5f;
|
||||
vertices[2].position.y = m_v2Position.y + fimgHeight-0.5f;
|
||||
vertices[2].position.z = 0.0f;
|
||||
vertices[2].texCoord = TTextureCoordinate(su, ev);
|
||||
vertices[2].diffuse = m_DiffuseColor;
|
||||
if (pClipRect)
|
||||
{
|
||||
const float width = ex - sx;
|
||||
const float height = ey - sy;
|
||||
const float uDiff = eu - su;
|
||||
const float vDiff = ev - sv;
|
||||
|
||||
vertices[3].position.x = m_v2Position.x + fimgWidth-0.5f;
|
||||
vertices[3].position.y = m_v2Position.y + fimgHeight-0.5f;
|
||||
vertices[3].position.z = 0.0f;
|
||||
vertices[3].texCoord = TTextureCoordinate(eu, ev);
|
||||
vertices[3].diffuse = m_DiffuseColor;
|
||||
if (ex < pClipRect->left)
|
||||
return;
|
||||
|
||||
// 2004.11.18.myevan.ctrl+alt+del 반복 사용시 튕기는 문제
|
||||
if (ey < pClipRect->top)
|
||||
return;
|
||||
|
||||
if (sx > pClipRect->right)
|
||||
return;
|
||||
|
||||
if (sy > pClipRect->bottom)
|
||||
return;
|
||||
|
||||
if (sx < pClipRect->left)
|
||||
{
|
||||
su += (pClipRect->left - sx) / width * uDiff;
|
||||
sx = pClipRect->left;
|
||||
}
|
||||
|
||||
if (sy < pClipRect->top)
|
||||
{
|
||||
sv += (pClipRect->top - sy) / height * vDiff;
|
||||
sy = pClipRect->top;
|
||||
}
|
||||
|
||||
if (ex > pClipRect->right)
|
||||
{
|
||||
eu -= (ex - pClipRect->right) / width * uDiff;
|
||||
ex = pClipRect->right;
|
||||
}
|
||||
|
||||
if (ey > pClipRect->bottom)
|
||||
{
|
||||
ev -= (ey - pClipRect->bottom) / height * vDiff;
|
||||
ey = pClipRect->bottom;
|
||||
}
|
||||
}
|
||||
|
||||
TPDTVertex vertices[4];
|
||||
vertices[0].position.x = sx;
|
||||
vertices[0].position.y = sy;
|
||||
vertices[0].position.z = 0.0f;
|
||||
vertices[0].texCoord = TTextureCoordinate(su, sv);
|
||||
vertices[0].diffuse = m_DiffuseColor;
|
||||
|
||||
vertices[1].position.x = ex;
|
||||
vertices[1].position.y = sy;
|
||||
vertices[1].position.z = 0.0f;
|
||||
vertices[1].texCoord = TTextureCoordinate(eu, sv);
|
||||
vertices[1].diffuse = m_DiffuseColor;
|
||||
|
||||
vertices[2].position.x = sx;
|
||||
vertices[2].position.y = ey;
|
||||
vertices[2].position.z = 0.0f;
|
||||
vertices[2].texCoord = TTextureCoordinate(su, ev);
|
||||
vertices[2].diffuse = m_DiffuseColor;
|
||||
|
||||
vertices[3].position.x = ex;
|
||||
vertices[3].position.y = ey;
|
||||
vertices[3].position.z = 0.0f;
|
||||
vertices[3].texCoord = TTextureCoordinate(eu, ev);
|
||||
vertices[3].diffuse = m_DiffuseColor;
|
||||
#else
|
||||
TPDTVertex vertices[4];
|
||||
vertices[0].position.x = m_v2Position.x - 0.5f;
|
||||
vertices[0].position.y = m_v2Position.y - 0.5f;
|
||||
vertices[0].position.z = 0.0f;
|
||||
vertices[0].texCoord = TTextureCoordinate(su, sv);
|
||||
vertices[0].diffuse = m_DiffuseColor;
|
||||
|
||||
vertices[1].position.x = m_v2Position.x + fimgWidth - 0.5f;
|
||||
vertices[1].position.y = m_v2Position.y - 0.5f;
|
||||
vertices[1].position.z = 0.0f;
|
||||
vertices[1].texCoord = TTextureCoordinate(eu, sv);
|
||||
vertices[1].diffuse = m_DiffuseColor;
|
||||
|
||||
vertices[2].position.x = m_v2Position.x - 0.5f;
|
||||
vertices[2].position.y = m_v2Position.y + fimgHeight - 0.5f;
|
||||
vertices[2].position.z = 0.0f;
|
||||
vertices[2].texCoord = TTextureCoordinate(su, ev);
|
||||
vertices[2].diffuse = m_DiffuseColor;
|
||||
|
||||
vertices[3].position.x = m_v2Position.x + fimgWidth - 0.5f;
|
||||
vertices[3].position.y = m_v2Position.y + fimgHeight - 0.5f;
|
||||
vertices[3].position.z = 0.0f;
|
||||
vertices[3].texCoord = TTextureCoordinate(eu, ev);
|
||||
vertices[3].diffuse = m_DiffuseColor;
|
||||
#endif
|
||||
|
||||
// 2004.11.18.myevan.ctrl+alt+del <20>ݺ<EFBFBD> <20><><EFBFBD><EFBFBD> ƨ<><C6A8><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
if (CGraphicBase::SetPDTStream(vertices, 4))
|
||||
{
|
||||
CGraphicBase::SetDefaultIndexBuffer(CGraphicBase::DEFAULT_IB_FILL_RECT);
|
||||
|
@ -207,7 +294,7 @@ void CGraphicImageInstance::Initialize()
|
|||
|
||||
void CGraphicImageInstance::Destroy()
|
||||
{
|
||||
m_roImage.SetPointer(NULL); // CRef 에서 레퍼런스 카운트가 떨어져야 함.
|
||||
m_roImage.SetPointer(NULL); // CRef <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>۷<EFBFBD><DBB7><EFBFBD> ī<><C4AB>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>.
|
||||
Initialize();
|
||||
}
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
#include "GrpIndexBuffer.h"
|
||||
#include "GrpVertexBufferDynamic.h"
|
||||
#include "Pool.h"
|
||||
#include "../UserInterface/Locale_inc.h"
|
||||
|
||||
class CGraphicImageInstance
|
||||
{
|
||||
|
@ -17,7 +18,11 @@ class CGraphicImageInstance
|
|||
|
||||
void Destroy();
|
||||
|
||||
#if defined(__BL_CLIP_MASK__)
|
||||
void Render(RECT* pClipRect = NULL);
|
||||
#else
|
||||
void Render();
|
||||
#endif
|
||||
|
||||
void SetDiffuseColor(float fr, float fg, float fb, float fa);
|
||||
void SetPosition(float fx, float fy);
|
||||
|
@ -38,7 +43,11 @@ class CGraphicImageInstance
|
|||
protected:
|
||||
void Initialize();
|
||||
|
||||
#if defined(__BL_CLIP_MASK__)
|
||||
virtual void OnRender(RECT* pClipRect);
|
||||
#else
|
||||
virtual void OnRender();
|
||||
#endif
|
||||
virtual void OnSetImagePointer();
|
||||
|
||||
virtual BOOL OnIsType(DWORD dwType);
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
#include "../EterLocale/StringCodec.h"
|
||||
#include "../EterBase/Utils.h"
|
||||
#include "../EterLocale/Arabic.h"
|
||||
#include "../UserInterface/Locale_inc.h"
|
||||
|
||||
extern DWORD GetDefaultCodePage();
|
||||
|
||||
|
@ -121,12 +122,12 @@ int ReadToken(const char* token)
|
|||
|
||||
void CGraphicTextInstance::Update()
|
||||
{
|
||||
if (m_isUpdate) // 문자열이 바뀌었을 때만 업데이트 한다.
|
||||
if (m_isUpdate) // <EFBFBD><EFBFBD><EFBFBD>ڿ<EFBFBD><EFBFBD><EFBFBD> <20>ٲ<EFBFBD><D9B2><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20>Ѵ<EFBFBD>.
|
||||
return;
|
||||
|
||||
if (m_roText.IsNull())
|
||||
{
|
||||
Tracef("CGraphicTextInstance::Update - 폰트가 설정되지 않았습니다\n");
|
||||
Tracef("CGraphicTextInstance::Update - <EFBFBD><EFBFBD>Ʈ<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʾҽ<CABE><D2BD>ϴ<EFBFBD>\n");
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -139,7 +140,7 @@ void CGraphicTextInstance::Update()
|
|||
|
||||
UINT defCodePage = GetDefaultCodePage();
|
||||
|
||||
UINT dataCodePage = defCodePage; // 아랍 및 베트남 내부 데이터를 UTF8 을 사용하려 했으나 실패
|
||||
UINT dataCodePage = defCodePage; // <EFBFBD>ƶ<EFBFBD> <20><> <20><>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> UTF8 <20><> <20><><EFBFBD><EFBFBD>Ϸ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
|
||||
CGraphicFontTexture::TCharacterInfomation* pSpaceInfo = pFontTexture->GetCharacterInfomation(dataCodePage, ' ');
|
||||
|
||||
|
@ -185,7 +186,7 @@ void CGraphicTextInstance::Update()
|
|||
bool isEnglish = true;
|
||||
int nEnglishBase = wArabicTextLen - 1;
|
||||
|
||||
//<<하이퍼 링크>>
|
||||
//<<<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ũ>>
|
||||
int x = 0;
|
||||
|
||||
int len;
|
||||
|
@ -194,7 +195,7 @@ void CGraphicTextInstance::Update()
|
|||
std::wstring hyperlinkBuffer;
|
||||
int no_hyperlink = 0;
|
||||
|
||||
// 심볼로 끝나면 아랍어 모드로 시작해야한다
|
||||
// <EFBFBD>ɺ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ƶ<EFBFBD><C6B6><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD><D8BE>Ѵ<EFBFBD>
|
||||
if (Arabic_IsInSymbol(wArabicText[wArabicTextLen - 1]))
|
||||
{
|
||||
isEnglish = false;
|
||||
|
@ -208,24 +209,24 @@ void CGraphicTextInstance::Update()
|
|||
if (isEnglish)
|
||||
{
|
||||
|
||||
// <<심볼의 경우 (ex. 기호, 공백)>> -> 영어 모드 유지.
|
||||
// <<(심볼이 아닌 것들 : 숫자, 영어, 아랍어)>>
|
||||
// (1) 맨 앞의 심볼 or
|
||||
// <<<EFBFBD>ɺ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> (ex. <20><>ȣ, <20><><EFBFBD><EFBFBD>)>> -> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD>.
|
||||
// <<(<EFBFBD>ɺ<EFBFBD><EFBFBD><EFBFBD> <20>ƴ<EFBFBD> <20>͵<EFBFBD> : <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD>, <20>ƶ<EFBFBD><C6B6><EFBFBD>)>>
|
||||
// (1) <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ɺ<EFBFBD> or
|
||||
// (2)
|
||||
// 1) 앞 글자가 아랍어 아님 &&
|
||||
// 2) 뒷 글자가 아랍어 아님 &&
|
||||
// 3) 뒷 글자가 심볼'|'이 아님 &&
|
||||
// 1) <EFBFBD><EFBFBD> <20><><EFBFBD>ڰ<EFBFBD> <20>ƶ<EFBFBD><C6B6><EFBFBD> <20>ƴ<EFBFBD> &&
|
||||
// 2) <EFBFBD><EFBFBD> <20><><EFBFBD>ڰ<EFBFBD> <20>ƶ<EFBFBD><C6B6><EFBFBD> <20>ƴ<EFBFBD> &&
|
||||
// 3) <EFBFBD><EFBFBD> <20><><EFBFBD>ڰ<EFBFBD> <20>ɺ<EFBFBD>'|'<27><> <20>ƴ<EFBFBD> &&
|
||||
// or
|
||||
// (3) 현재 심볼이 '|'
|
||||
// <<아랍어 모드로 넘어가는 경우 : 심볼에서.>>
|
||||
// 1) 앞글자 아랍어
|
||||
// 2) 뒷글자 아랍어
|
||||
// (3) <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ɺ<EFBFBD><C9BA><EFBFBD> '|'
|
||||
// <<<EFBFBD>ƶ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ѿ<D1BE><EEB0A1> <20><><EFBFBD> : <20>ɺ<EFBFBD><C9BA><EFBFBD><EFBFBD><EFBFBD>.>>
|
||||
// 1) <EFBFBD>ձ<EFBFBD><EFBFBD><EFBFBD> <20>ƶ<EFBFBD><C6B6><EFBFBD>
|
||||
// 2) <EFBFBD>ޱ<EFBFBD><EFBFBD><EFBFBD> <20>ƶ<EFBFBD><C6B6><EFBFBD>
|
||||
//
|
||||
//
|
||||
if (Arabic_IsInSymbol(wArabicChar) && (
|
||||
(i == 0) ||
|
||||
(i > 0 &&
|
||||
!(Arabic_HasPresentation(wArabicText, i - 1) || Arabic_IsInPresentation(wArabicText[i + 1])) && //앞글자, 뒷글자가 아랍어 아님.
|
||||
!(Arabic_HasPresentation(wArabicText, i - 1) || Arabic_IsInPresentation(wArabicText[i + 1])) && //<EFBFBD>ձ<EFBFBD><EFBFBD><EFBFBD>, <20>ޱ<EFBFBD><DEB1>ڰ<EFBFBD> <20>ƶ<EFBFBD><C6B6><EFBFBD> <20>ƴ<EFBFBD>.
|
||||
wArabicText[i+1] != '|'
|
||||
) ||
|
||||
wArabicText[i] == '|'
|
||||
|
@ -234,10 +235,10 @@ void CGraphicTextInstance::Update()
|
|||
// pass
|
||||
int temptest = 1;
|
||||
}
|
||||
// (1)아랍어이거나 (2)아랍어 다음의 심볼이라면 아랍어 모드 전환
|
||||
// (1)<EFBFBD>ƶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>̰ų<EFBFBD> (2)<29>ƶ<EFBFBD><C6B6><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ɺ<EFBFBD><C9BA>̶<EFBFBD><CCB6> <20>ƶ<EFBFBD><C6B6><EFBFBD> <20><><EFBFBD> <20><>ȯ
|
||||
else if (Arabic_IsInPresentation(wArabicChar) || Arabic_IsInSymbol(wArabicChar))
|
||||
{
|
||||
//그 전까지의 영어를 그린다.
|
||||
//<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><EFBFBD><D7B8><EFBFBD>.
|
||||
for (int e = i + 1; e <= nEnglishBase;) {
|
||||
int ret = GetTextTag(&wArabicText[e], wArabicTextLen - e, len, hyperlinkBuffer);
|
||||
|
||||
|
@ -251,7 +252,7 @@ void CGraphicTextInstance::Update()
|
|||
kHyperlink.ex += charWidth;
|
||||
//x += charWidth;
|
||||
|
||||
//기존 추가한 하이퍼링크의 좌표 수정.
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>߰<EFBFBD><DFB0><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>۸<EFBFBD>ũ<EFBFBD><C5A9> <20><>ǥ <20><><EFBFBD><EFBFBD>.
|
||||
for (int j = 1; j <= no_hyperlink; j++)
|
||||
{
|
||||
if(m_hyperlinkVector.size() < j)
|
||||
|
@ -279,7 +280,7 @@ void CGraphicTextInstance::Update()
|
|||
if (hyperlinkStep == 1)
|
||||
{
|
||||
++hyperlinkStep;
|
||||
kHyperlink.ex = kHyperlink.sx = 0; // 실제 텍스트가 시작되는 위치
|
||||
kHyperlink.ex = kHyperlink.sx = 0; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ؽ<EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD>۵Ǵ<DBB5> <20><>ġ
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -299,7 +300,7 @@ void CGraphicTextInstance::Update()
|
|||
int charWidth = __DrawCharacter(pFontTexture, dataCodePage, Arabic_ConvSymbol(wArabicText[i]), dwColor);
|
||||
kHyperlink.ex += charWidth;
|
||||
|
||||
//기존 추가한 하이퍼링크의 좌표 수정.
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>߰<EFBFBD><DFB0><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>۸<EFBFBD>ũ<EFBFBD><C5A9> <20><>ǥ <20><><EFBFBD><EFBFBD>.
|
||||
for (int j = 1; j <= no_hyperlink; j++)
|
||||
{
|
||||
if(m_hyperlinkVector.size() < j)
|
||||
|
@ -313,16 +314,16 @@ void CGraphicTextInstance::Update()
|
|||
isEnglish = false;
|
||||
}
|
||||
}
|
||||
else //[[[아랍어 모드]]]
|
||||
else //[[[<EFBFBD>ƶ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>]]]
|
||||
{
|
||||
// 아랍어이거나 아랍어 출력중 나오는 심볼이라면
|
||||
// <EFBFBD>ƶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>̰ų<EFBFBD> <20>ƶ<EFBFBD><C6B6><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ɺ<EFBFBD><C9BA>̶<EFBFBD><CCB6>
|
||||
if (Arabic_IsInPresentation(wArabicChar) || Arabic_IsInSymbol(wArabicChar))
|
||||
{
|
||||
int charWidth = __DrawCharacter(pFontTexture, dataCodePage, Arabic_ConvSymbol(wArabicText[i]), dwColor);
|
||||
kHyperlink.ex += charWidth;
|
||||
x += charWidth;
|
||||
|
||||
//기존 추가한 하이퍼링크의 좌표 수정.
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>߰<EFBFBD><DFB0><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>۸<EFBFBD>ũ<EFBFBD><C5A9> <20><>ǥ <20><><EFBFBD><EFBFBD>.
|
||||
for (int j = 1; j <= no_hyperlink; j++)
|
||||
{
|
||||
if(m_hyperlinkVector.size() < j)
|
||||
|
@ -333,7 +334,7 @@ void CGraphicTextInstance::Update()
|
|||
tempLink.sx += charWidth;
|
||||
}
|
||||
}
|
||||
else //영어이거나, 영어 다음에 나오는 심볼이라면,
|
||||
else //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̰ų<EFBFBD>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ɺ<EFBFBD><C9BA>̶<EFBFBD><CCB6>,
|
||||
{
|
||||
nEnglishBase = i;
|
||||
isEnglish = true;
|
||||
|
@ -355,7 +356,7 @@ void CGraphicTextInstance::Update()
|
|||
int charWidth = __DrawCharacter(pFontTexture, dataCodePage, wArabicText[e], dwColor);
|
||||
kHyperlink.ex += charWidth;
|
||||
|
||||
//기존 추가한 하이퍼링크의 좌표 수정.
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>߰<EFBFBD><DFB0><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>۸<EFBFBD>ũ<EFBFBD><C5A9> <20><>ǥ <20><><EFBFBD><EFBFBD>.
|
||||
for (int j = 1; j <= no_hyperlink; j++)
|
||||
{
|
||||
if(m_hyperlinkVector.size() < j)
|
||||
|
@ -383,7 +384,7 @@ void CGraphicTextInstance::Update()
|
|||
if (hyperlinkStep == 1)
|
||||
{
|
||||
++hyperlinkStep;
|
||||
kHyperlink.ex = kHyperlink.sx = 0; // 실제 텍스트가 시작되는 위치
|
||||
kHyperlink.ex = kHyperlink.sx = 0; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ؽ<EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD>۵Ǵ<DBB5> <20><>ġ
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -401,7 +402,7 @@ void CGraphicTextInstance::Update()
|
|||
|
||||
}
|
||||
}
|
||||
else // 아랍외 다른 지역.
|
||||
else // <EFBFBD>ƶ<EFBFBD><EFBFBD><EFBFBD> <20>ٸ<EFBFBD> <20><><EFBFBD><EFBFBD>.
|
||||
{
|
||||
int x = 0;
|
||||
int len;
|
||||
|
@ -440,7 +441,7 @@ void CGraphicTextInstance::Update()
|
|||
if (hyperlinkStep == 1)
|
||||
{
|
||||
++hyperlinkStep;
|
||||
kHyperlink.ex = kHyperlink.sx = x; // 실제 텍스트가 시작되는 위치
|
||||
kHyperlink.ex = kHyperlink.sx = x; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ؽ<EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD>۵Ǵ<DBB5> <20><>ġ
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -460,7 +461,7 @@ void CGraphicTextInstance::Update()
|
|||
if (token < end)
|
||||
{
|
||||
int newCodePage = ReadToken(token);
|
||||
dataCodePage = newCodePage; // 아랍 및 베트남 내부 데이터를 UTF8 을 사용하려 했으나 실패
|
||||
dataCodePage = newCodePage; // <EFBFBD>ƶ<EFBFBD> <20><> <20><>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> UTF8 <20><> <20><><EFBFBD><EFBFBD>Ϸ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
begin = token + 5;
|
||||
}
|
||||
else
|
||||
|
@ -570,7 +571,7 @@ void CGraphicTextInstance::Render(RECT * pClipRect)
|
|||
|
||||
CGraphicFontTexture::TCharacterInfomation* pCurCharInfo;
|
||||
|
||||
// 테두리
|
||||
// <EFBFBD>θ<EFBFBD>
|
||||
if (m_isOutline)
|
||||
{
|
||||
fCurX=fStanX;
|
||||
|
@ -586,7 +587,7 @@ void CGraphicTextInstance::Render(RECT * pClipRect)
|
|||
fFontHeight=float(pCurCharInfo->height);
|
||||
fFontAdvance=float(pCurCharInfo->advance);
|
||||
|
||||
// NOTE : 폰트 출력에 Width 제한을 둡니다. - [levites]
|
||||
// NOTE : <EFBFBD><EFBFBD>Ʈ <20><>¿<EFBFBD> Width <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ӵϴ<D3B4>. - [levites]
|
||||
if ((fCurX+fFontWidth)-m_v3Position.x > m_fLimitWidth)
|
||||
{
|
||||
if (m_isMultiLine)
|
||||
|
@ -600,6 +601,7 @@ void CGraphicTextInstance::Render(RECT * pClipRect)
|
|||
}
|
||||
}
|
||||
|
||||
#if !defined(__BL_CLIP_MASK__)
|
||||
if (pClipRect)
|
||||
{
|
||||
if (fCurY <= pClipRect->top)
|
||||
|
@ -608,23 +610,97 @@ void CGraphicTextInstance::Render(RECT * pClipRect)
|
|||
continue;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
fFontSx = fCurX - 0.5f;
|
||||
fFontSy = fCurY - 0.5f;
|
||||
fFontEx = fFontSx + fFontWidth;
|
||||
fFontEy = fFontSy + fFontHeight;
|
||||
|
||||
#if defined(__BL_CLIP_MASK__)
|
||||
float su = pCurCharInfo->left;
|
||||
float sv = pCurCharInfo->top;
|
||||
float eu = pCurCharInfo->right;
|
||||
float ev = pCurCharInfo->bottom;
|
||||
|
||||
if (pClipRect)
|
||||
{
|
||||
const float width = pCurCharInfo->right - pCurCharInfo->left;
|
||||
const float height = pCurCharInfo->bottom - pCurCharInfo->top;
|
||||
|
||||
if (fFontEx <= pClipRect->left)
|
||||
{
|
||||
fCurX += fFontAdvance;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (fFontSx < pClipRect->left)
|
||||
{
|
||||
su += (pClipRect->left - fFontSx) / fFontWidth * width;
|
||||
fFontSx = pClipRect->left;
|
||||
}
|
||||
|
||||
if (fFontEy <= pClipRect->top)
|
||||
{
|
||||
fCurX += fFontAdvance;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (fFontSy < pClipRect->top)
|
||||
{
|
||||
sv += (pClipRect->top - fFontSy) / fFontHeight * height;
|
||||
fFontSy = pClipRect->top;
|
||||
}
|
||||
|
||||
if (fFontSx >= pClipRect->right)
|
||||
{
|
||||
fCurX += fFontAdvance;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (fFontEx > pClipRect->right)
|
||||
{
|
||||
eu -= (fFontEx - pClipRect->right) / fFontWidth * width;
|
||||
fFontEx = pClipRect->right;
|
||||
}
|
||||
|
||||
if (fFontSy >= pClipRect->bottom)
|
||||
{
|
||||
fCurX += fFontAdvance;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (fFontEy > pClipRect->bottom)
|
||||
{
|
||||
ev -= (fFontEy - pClipRect->bottom) / fFontHeight * height;
|
||||
fFontEy = pClipRect->bottom;
|
||||
}
|
||||
}
|
||||
|
||||
pFontTexture->SelectTexture(pCurCharInfo->index);
|
||||
STATEMANAGER.SetTexture(0, pFontTexture->GetD3DTexture());
|
||||
|
||||
akVertex[0].u=pCurCharInfo->left;
|
||||
akVertex[0].v=pCurCharInfo->top;
|
||||
akVertex[1].u=pCurCharInfo->left;
|
||||
akVertex[1].v=pCurCharInfo->bottom;
|
||||
akVertex[2].u=pCurCharInfo->right;
|
||||
akVertex[2].v=pCurCharInfo->top;
|
||||
akVertex[3].u=pCurCharInfo->right;
|
||||
akVertex[3].v=pCurCharInfo->bottom;
|
||||
akVertex[0].u = su;
|
||||
akVertex[0].v = sv;
|
||||
akVertex[1].u = su;
|
||||
akVertex[1].v = ev;
|
||||
akVertex[2].u = eu;
|
||||
akVertex[2].v = sv;
|
||||
akVertex[3].u = eu;
|
||||
akVertex[3].v = ev;
|
||||
#else
|
||||
pFontTexture->SelectTexture(pCurCharInfo->index);
|
||||
STATEMANAGER.SetTexture(0, pFontTexture->GetD3DTexture());
|
||||
|
||||
akVertex[0].u = pCurCharInfo->left;
|
||||
akVertex[0].v = pCurCharInfo->top;
|
||||
akVertex[1].u = pCurCharInfo->left;
|
||||
akVertex[1].v = pCurCharInfo->bottom;
|
||||
akVertex[2].u = pCurCharInfo->right;
|
||||
akVertex[2].v = pCurCharInfo->top;
|
||||
akVertex[3].u = pCurCharInfo->right;
|
||||
akVertex[3].v = pCurCharInfo->bottom;
|
||||
#endif
|
||||
|
||||
akVertex[3].color = akVertex[2].color = akVertex[1].color = akVertex[0].color = m_dwOutLineColor;
|
||||
|
||||
|
@ -636,7 +712,7 @@ void CGraphicTextInstance::Render(RECT * pClipRect)
|
|||
akVertex[2].y=fFontSy-feather;
|
||||
akVertex[3].y=fFontEy+feather;
|
||||
|
||||
// 왼
|
||||
// <EFBFBD><EFBFBD>
|
||||
akVertex[0].x=fFontSx-fFontHalfWeight-feather;
|
||||
akVertex[1].x=fFontSx-fFontHalfWeight-feather;
|
||||
akVertex[2].x=fFontEx-fFontHalfWeight+feather;
|
||||
|
@ -646,7 +722,7 @@ void CGraphicTextInstance::Render(RECT * pClipRect)
|
|||
STATEMANAGER.DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, 2);
|
||||
|
||||
|
||||
// 오른
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
akVertex[0].x=fFontSx+fFontHalfWeight-feather;
|
||||
akVertex[1].x=fFontSx+fFontHalfWeight-feather;
|
||||
akVertex[2].x=fFontEx+fFontHalfWeight+feather;
|
||||
|
@ -660,7 +736,7 @@ void CGraphicTextInstance::Render(RECT * pClipRect)
|
|||
akVertex[2].x=fFontEx+feather;
|
||||
akVertex[3].x=fFontEx+feather;
|
||||
|
||||
// 위
|
||||
// <EFBFBD><EFBFBD>
|
||||
akVertex[0].y=fFontSy-fFontHalfWeight-feather;
|
||||
akVertex[1].y=fFontEy-fFontHalfWeight+feather;
|
||||
akVertex[2].y=fFontSy-fFontHalfWeight-feather;
|
||||
|
@ -670,7 +746,7 @@ void CGraphicTextInstance::Render(RECT * pClipRect)
|
|||
if (CGraphicBase::SetPDTStream((SPDTVertex*)akVertex, 4))
|
||||
STATEMANAGER.DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, 2);
|
||||
|
||||
// 아래
|
||||
// <EFBFBD>Ʒ<EFBFBD>
|
||||
akVertex[0].y=fFontSy+fFontHalfWeight-feather;
|
||||
akVertex[1].y=fFontEy+fFontHalfWeight+feather;
|
||||
akVertex[2].y=fFontSy+fFontHalfWeight-feather;
|
||||
|
@ -684,7 +760,7 @@ void CGraphicTextInstance::Render(RECT * pClipRect)
|
|||
}
|
||||
}
|
||||
|
||||
// 메인 폰트
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ʈ
|
||||
fCurX=fStanX;
|
||||
fCurY=fStanY;
|
||||
fFontMaxHeight=0.0f;
|
||||
|
@ -698,7 +774,7 @@ void CGraphicTextInstance::Render(RECT * pClipRect)
|
|||
fFontMaxHeight=max(fFontHeight, pCurCharInfo->height);
|
||||
fFontAdvance=float(pCurCharInfo->advance);
|
||||
|
||||
// NOTE : 폰트 출력에 Width 제한을 둡니다. - [levites]
|
||||
// NOTE : <EFBFBD><EFBFBD>Ʈ <20><>¿<EFBFBD> Width <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ӵϴ<D3B4>. - [levites]
|
||||
if ((fCurX+fFontWidth)-m_v3Position.x > m_fLimitWidth)
|
||||
{
|
||||
if (m_isMultiLine)
|
||||
|
@ -712,6 +788,7 @@ void CGraphicTextInstance::Render(RECT * pClipRect)
|
|||
}
|
||||
}
|
||||
|
||||
#if !defined(__BL_CLIP_MASK__)
|
||||
if (pClipRect)
|
||||
{
|
||||
if (fCurY <= pClipRect->top)
|
||||
|
@ -720,12 +797,96 @@ void CGraphicTextInstance::Render(RECT * pClipRect)
|
|||
continue;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
fFontSx = fCurX-0.5f;
|
||||
fFontSy = fCurY-0.5f;
|
||||
fFontEx = fFontSx + fFontWidth;
|
||||
fFontEy = fFontSy + fFontHeight;
|
||||
|
||||
#if defined(__BL_CLIP_MASK__)
|
||||
float su = pCurCharInfo->left;
|
||||
float sv = pCurCharInfo->top;
|
||||
float eu = pCurCharInfo->right;
|
||||
float ev = pCurCharInfo->bottom;
|
||||
|
||||
if (pClipRect)
|
||||
{
|
||||
const float width = pCurCharInfo->right - pCurCharInfo->left;
|
||||
const float height = pCurCharInfo->bottom - pCurCharInfo->top;
|
||||
|
||||
if (fFontEx <= pClipRect->left)
|
||||
{
|
||||
fCurX += fFontAdvance;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (fFontSx < pClipRect->left)
|
||||
{
|
||||
su += (pClipRect->left - fFontSx) / fFontWidth * width;
|
||||
fFontSx = pClipRect->left;
|
||||
}
|
||||
|
||||
if (fFontEy <= pClipRect->top)
|
||||
{
|
||||
fCurX += fFontAdvance;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (fFontSy < pClipRect->top)
|
||||
{
|
||||
sv += (pClipRect->top - fFontSy) / fFontHeight * height;
|
||||
fFontSy = pClipRect->top;
|
||||
}
|
||||
|
||||
if (fFontSx >= pClipRect->right)
|
||||
{
|
||||
fCurX += fFontAdvance;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (fFontEx > pClipRect->right)
|
||||
{
|
||||
eu -= (fFontEx - pClipRect->right) / fFontWidth * width;
|
||||
fFontEx = pClipRect->right;
|
||||
}
|
||||
|
||||
if (fFontSy >= pClipRect->bottom)
|
||||
{
|
||||
fCurX += fFontAdvance;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (fFontEy > pClipRect->bottom)
|
||||
{
|
||||
ev -= (fFontEy - pClipRect->bottom) / fFontHeight * height;
|
||||
fFontEy = pClipRect->bottom;
|
||||
}
|
||||
}
|
||||
|
||||
pFontTexture->SelectTexture(pCurCharInfo->index);
|
||||
STATEMANAGER.SetTexture(0, pFontTexture->GetD3DTexture());
|
||||
|
||||
akVertex[0].x = fFontSx;
|
||||
akVertex[0].y = fFontSy;
|
||||
akVertex[0].u = su;
|
||||
akVertex[0].v = sv;
|
||||
|
||||
akVertex[1].x = fFontSx;
|
||||
akVertex[1].y = fFontEy;
|
||||
akVertex[1].u = su;
|
||||
akVertex[1].v = ev;
|
||||
|
||||
akVertex[2].x = fFontEx;
|
||||
akVertex[2].y = fFontSy;
|
||||
akVertex[2].u = eu;
|
||||
akVertex[2].v = sv;
|
||||
|
||||
akVertex[3].x = fFontEx;
|
||||
akVertex[3].y = fFontEy;
|
||||
akVertex[3].u = eu;
|
||||
akVertex[3].v = ev;
|
||||
#else
|
||||
pFontTexture->SelectTexture(pCurCharInfo->index);
|
||||
STATEMANAGER.SetTexture(0, pFontTexture->GetD3DTexture());
|
||||
|
||||
|
@ -748,6 +909,7 @@ void CGraphicTextInstance::Render(RECT * pClipRect)
|
|||
akVertex[3].y=fFontEy;
|
||||
akVertex[3].u=pCurCharInfo->right;
|
||||
akVertex[3].v=pCurCharInfo->bottom;
|
||||
#endif
|
||||
|
||||
//m_dwColorInfoVector[i];
|
||||
//m_dwTextColor;
|
||||
|
@ -811,9 +973,9 @@ void CGraphicTextInstance::Render(RECT * pClipRect)
|
|||
sy -= float(m_textHeight) / 2.0f;
|
||||
break;
|
||||
}
|
||||
// 최적화 사항
|
||||
// 같은텍스쳐를 사용한다면... STRIP을 구성하고, 텍스쳐가 변경되거나 끝나면 DrawPrimitive를 호출해
|
||||
// 최대한 숫자를 줄이도록하자!
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȭ <20><><EFBFBD><EFBFBD>
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؽ<EFBFBD><EFBFBD>ĸ<EFBFBD> <20><><EFBFBD><EFBFBD>Ѵٸ<D1B4>... STRIP<49><50> <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD>, <20>ؽ<EFBFBD><D8BD>İ<EFBFBD> <20><><EFBFBD><EFBFBD>ǰų<C7B0> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DrawPrimitive<76><65> ȣ<><C8A3><EFBFBD><EFBFBD>
|
||||
// <EFBFBD>ִ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ڸ<EFBFBD> <20><><EFBFBD>̵<EFBFBD><CCB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!
|
||||
|
||||
TPDTVertex vertices[4];
|
||||
vertices[0].diffuse = diffuse;
|
||||
|
@ -865,13 +1027,13 @@ void CGraphicTextInstance::Render(RECT * pClipRect)
|
|||
STATEMANAGER.SetRenderState(D3DRS_FOGENABLE, dwFogEnable);
|
||||
STATEMANAGER.SetRenderState(D3DRS_LIGHTING, dwLighting);
|
||||
|
||||
//금강경 링크 띄워주는 부분.
|
||||
//<EFBFBD>ݰ<EFBFBD><EFBFBD><EFBFBD> <20><>ũ <20><><EFBFBD><EFBFBD>ִ<EFBFBD> <20>κ<EFBFBD>.
|
||||
if (m_hyperlinkVector.size() != 0)
|
||||
{
|
||||
int lx = gs_mx - m_v3Position.x;
|
||||
int ly = gs_my - m_v3Position.y;
|
||||
|
||||
//아랍은 좌표 부호를 바꿔준다.
|
||||
//<EFBFBD>ƶ<EFBFBD><EFBFBD><EFBFBD> <20><>ǥ <20><>ȣ<EFBFBD><C8A3> <20>ٲ<EFBFBD><D9B2>ش<EFBFBD>.
|
||||
if (GetDefaultCodePage() == CP_ARABIC) {
|
||||
lx = -lx;
|
||||
ly = -ly + m_textHeight;
|
||||
|
@ -1063,7 +1225,7 @@ WORD CGraphicTextInstance::GetTextLineCount()
|
|||
float fFontAdvance=float(pCurCharInfo->advance);
|
||||
//float fFontHeight=float(pCurCharInfo->height);
|
||||
|
||||
// NOTE : 폰트 출력에 Width 제한을 둡니다. - [levites]
|
||||
// NOTE : <EFBFBD><EFBFBD>Ʈ <20><>¿<EFBFBD> Width <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ӵϴ<D3B4>. - [levites]
|
||||
if (fx+fFontWidth > m_fLimitWidth)
|
||||
{
|
||||
fx = 0.0f;
|
||||
|
@ -1110,7 +1272,7 @@ void CGraphicTextInstance::__Initialize()
|
|||
m_vAlign = VERTICAL_ALIGN_TOP;
|
||||
|
||||
m_iMax = 0;
|
||||
m_fLimitWidth = 1600.0f; // NOTE : 해상도의 최대치. 이보다 길게 쓸 일이 있을까? - [levites]
|
||||
m_fLimitWidth = 1600.0f; // NOTE : <EFBFBD>ػ<EFBFBD><EFBFBD><EFBFBD> <20>ִ<EFBFBD>ġ. <20>̺<EFBFBD><CCBA><EFBFBD> <20><><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>? - [levites]
|
||||
|
||||
m_isCursor = false;
|
||||
m_isSecret = false;
|
||||
|
|
|
@ -8,7 +8,6 @@ BOOL g_bOutlineBoxEnable = FALSE;
|
|||
|
||||
namespace UI
|
||||
{
|
||||
|
||||
CWindow::CWindow(PyObject * ppyObject) :
|
||||
m_x(0),
|
||||
m_y(0),
|
||||
|
@ -30,6 +29,11 @@ namespace UI
|
|||
m_HorizontalAlign = HORIZONTAL_ALIGN_LEFT;
|
||||
m_VerticalAlign = VERTICAL_ALIGN_TOP;
|
||||
m_rect.bottom = m_rect.left = m_rect.right = m_rect.top = 0;
|
||||
#if defined(__BL_CLIP_MASK__)
|
||||
m_bEnableMask = false;
|
||||
m_pMaskWindow = NULL;
|
||||
memset(&m_rMaskRect, 0, sizeof(m_rMaskRect));
|
||||
#endif
|
||||
m_limitBiasRect.bottom = m_limitBiasRect.left = m_limitBiasRect.right = m_limitBiasRect.top = 0;
|
||||
}
|
||||
|
||||
|
@ -66,10 +70,13 @@ namespace UI
|
|||
|
||||
void CWindow::Clear()
|
||||
{
|
||||
// FIXME : Children을 즉시 Delete하지는 않는다.
|
||||
// 어차피 Python쪽에서 Destroy가 하나씩 다시 호출 될 것이므로..
|
||||
// 하지만 만약을 위해 링크는 끊어 놓는다.
|
||||
// 더 좋은 형태는 있는가? - [levites]
|
||||
#if defined(__BL_CLIP_MASK__)
|
||||
m_pMaskWindow = NULL;
|
||||
#endif
|
||||
// FIXME : Children<65><6E> <20><><EFBFBD> Delete<74><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʴ´<CAB4>.
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Python<6F>ʿ<EFBFBD><CABF><EFBFBD> Destroy<6F><79> <20>ϳ<EFBFBD><CFB3><EFBFBD> <20>ٽ<EFBFBD> ȣ<><C8A3> <20><> <20><><EFBFBD>̹Ƿ<CCB9>..
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ũ<EFBFBD><C5A9> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>´<EFBFBD>.
|
||||
// <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>´<EFBFBD> <20>ִ°<D6B4>? - [levites]
|
||||
std::for_each(m_pChildList.begin(), m_pChildList.end(), FClear());
|
||||
m_pChildList.clear();
|
||||
|
||||
|
@ -93,8 +100,8 @@ namespace UI
|
|||
m_bShow = false;
|
||||
}
|
||||
|
||||
// NOTE : IsShow는 "자신이 보이는가?" 이지만, __IsShowing은 "자신이 그려지고 있는가?" 를 체크한다
|
||||
// 자신은 Show 지만 Tree 위쪽의 Parent 중 하나는 Hide 일 수 있으므로.. - [levites]
|
||||
// NOTE : IsShow<EFBFBD><EFBFBD> "<22>ڽ<EFBFBD><DABD><EFBFBD> <20><><EFBFBD>̴°<CCB4>?" <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, __IsShowing<6E><67> "<22>ڽ<EFBFBD><DABD><EFBFBD> <20><EFBFBD><D7B7><EFBFBD><EFBFBD><EFBFBD> <20>ִ°<D6B4>?" <20><> üũ<C3BC>Ѵ<EFBFBD>
|
||||
// <EFBFBD>ڽ<EFBFBD><EFBFBD><EFBFBD> Show <20><><EFBFBD><EFBFBD> Tree <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Parent <20><> <20>ϳ<EFBFBD><CFB3><EFBFBD> Hide <20><> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>.. - [levites]
|
||||
bool CWindow::IsRendering()
|
||||
{
|
||||
if (!IsShow())
|
||||
|
@ -427,6 +434,41 @@ namespace UI
|
|||
PyCallClassMemberFunc(m_poHandler, "OnIMEUpdate", BuildEmptyTuple());
|
||||
}
|
||||
|
||||
#if defined(__BL_CLIP_MASK__)
|
||||
void CWindow::SetClippingMaskRect(const RECT& rMask)
|
||||
{
|
||||
m_bEnableMask = true;
|
||||
m_rMaskRect = rMask;
|
||||
|
||||
TWindowContainer::const_reverse_iterator itor;
|
||||
for (itor = m_pChildList.rbegin(); itor != m_pChildList.rend(); ++itor)
|
||||
{
|
||||
CWindow* pWindow = *itor;
|
||||
|
||||
if (pWindow)
|
||||
pWindow->SetClippingMaskRect(rMask);
|
||||
}
|
||||
}
|
||||
|
||||
void CWindow::SetClippingMaskWindow(CWindow* pMaskWindow)
|
||||
{
|
||||
if (!pMaskWindow)
|
||||
return;
|
||||
|
||||
m_bEnableMask = true;
|
||||
m_pMaskWindow = pMaskWindow;
|
||||
|
||||
TWindowContainer::const_reverse_iterator itor;
|
||||
for (itor = m_pChildList.rbegin(); itor != m_pChildList.rend(); ++itor)
|
||||
{
|
||||
CWindow* pWindow = *itor;
|
||||
|
||||
if (pWindow)
|
||||
pWindow->SetClippingMaskWindow(pMaskWindow);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
BOOL CWindow::RunIMETabEvent()
|
||||
{
|
||||
if (!IsRendering())
|
||||
|
@ -577,7 +619,7 @@ namespace UI
|
|||
BOOL CWindow::OnMouseLeftButtonUp()
|
||||
{
|
||||
PyCallClassMemberFunc(m_poHandler, "OnMouseLeftButtonUp", BuildEmptyTuple());
|
||||
return TRUE; // NOTE : ButtonUp은 예외로 무조건 TRUE
|
||||
return TRUE; // NOTE : ButtonUp<EFBFBD><EFBFBD> <20><><EFBFBD>ܷ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> TRUE
|
||||
}
|
||||
|
||||
BOOL CWindow::OnMouseLeftButtonDoubleClick()
|
||||
|
@ -1027,6 +1069,23 @@ namespace UI
|
|||
m_TextInstance.Update();
|
||||
}
|
||||
|
||||
#if defined(__BL_CLIP_MASK__)
|
||||
void CTextLine::OnUpdate()
|
||||
{
|
||||
if (!IsShow())
|
||||
return;
|
||||
|
||||
if (m_bEnableMask && m_pMaskWindow)
|
||||
m_rMaskRect = m_pMaskWindow->GetRect();
|
||||
|
||||
m_TextInstance.Update();
|
||||
}
|
||||
void CTextLine::OnRender()
|
||||
{
|
||||
if (IsShow())
|
||||
m_TextInstance.Render(m_bEnableMask ? &m_rMaskRect : NULL);
|
||||
}
|
||||
#else
|
||||
void CTextLine::OnUpdate()
|
||||
{
|
||||
if (IsShow())
|
||||
|
@ -1037,6 +1096,7 @@ namespace UI
|
|||
if (IsShow())
|
||||
m_TextInstance.Render();
|
||||
}
|
||||
#endif
|
||||
|
||||
void CTextLine::OnChangePosition()
|
||||
{
|
||||
|
@ -1271,9 +1331,37 @@ namespace UI
|
|||
return m_pImageInstance->GetHeight();
|
||||
}
|
||||
|
||||
#if defined(__BL_CLIP_MASK__)
|
||||
void CImageBox::OnUpdate()
|
||||
{
|
||||
if (!m_pImageInstance)
|
||||
return;
|
||||
|
||||
if (!IsShow())
|
||||
return;
|
||||
|
||||
if (!m_bEnableMask)
|
||||
return;
|
||||
|
||||
if (!m_pMaskWindow)
|
||||
return;
|
||||
|
||||
m_rMaskRect = m_pMaskWindow->GetRect();
|
||||
}
|
||||
|
||||
void CImageBox::OnRender()
|
||||
{
|
||||
if (!m_pImageInstance)
|
||||
return;
|
||||
|
||||
if (IsShow())
|
||||
m_pImageInstance->Render(m_bEnableMask ? &m_rMaskRect : NULL);
|
||||
}
|
||||
#else
|
||||
void CImageBox::OnUpdate()
|
||||
{
|
||||
}
|
||||
|
||||
void CImageBox::OnRender()
|
||||
{
|
||||
if (!m_pImageInstance)
|
||||
|
@ -1282,6 +1370,8 @@ namespace UI
|
|||
if (IsShow())
|
||||
m_pImageInstance->Render();
|
||||
}
|
||||
#endif
|
||||
|
||||
void CImageBox::OnChangePosition()
|
||||
{
|
||||
if (!m_pImageInstance)
|
||||
|
@ -1291,7 +1381,7 @@ namespace UI
|
|||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// MarkBox - 마크 출력용 UI 윈도우
|
||||
// MarkBox - <EFBFBD><EFBFBD>ũ <20><>¿<EFBFBD> UI <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
CMarkBox::CMarkBox(PyObject * ppyObject) : CWindow(ppyObject)
|
||||
{
|
||||
|
@ -1742,9 +1832,41 @@ namespace UI
|
|||
PyCallClassMemberFunc(m_poHandler, "DownEvent", BuildEmptyTuple());
|
||||
}
|
||||
|
||||
#if defined(__BL_CLIP_MASK__)
|
||||
void CButton::OnUpdate()
|
||||
{
|
||||
if (!m_bEnableMask)
|
||||
return;
|
||||
|
||||
if (!m_pMaskWindow)
|
||||
return;
|
||||
|
||||
m_rMaskRect = m_pMaskWindow->GetRect();
|
||||
}
|
||||
|
||||
void CButton::OnRender()
|
||||
{
|
||||
if (!IsShow())
|
||||
return;
|
||||
|
||||
if (m_pcurVisual)
|
||||
{
|
||||
if (m_isFlash)
|
||||
if (!IsIn())
|
||||
if (int(timeGetTime() / 500) % 2)
|
||||
{
|
||||
return;
|
||||
}
|
||||
m_pcurVisual->Render(m_bEnableMask ? &m_rMaskRect : NULL);
|
||||
}
|
||||
|
||||
PyCallClassMemberFunc(m_poHandler, "OnRender", BuildEmptyTuple());
|
||||
}
|
||||
#else
|
||||
void CButton::OnUpdate()
|
||||
{
|
||||
}
|
||||
|
||||
void CButton::OnRender()
|
||||
{
|
||||
if (!IsShow())
|
||||
|
@ -1764,6 +1886,8 @@ namespace UI
|
|||
|
||||
PyCallClassMemberFunc(m_poHandler, "OnRender", BuildEmptyTuple());
|
||||
}
|
||||
#endif
|
||||
|
||||
void CButton::OnChangePosition()
|
||||
{
|
||||
if (m_pcurVisual)
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
#pragma once
|
||||
|
||||
#include "../eterBase/Utils.h"
|
||||
#include "../UserInterface/Locale_inc.h"
|
||||
|
||||
namespace UI
|
||||
{
|
||||
|
@ -28,16 +29,16 @@ namespace UI
|
|||
|
||||
enum EFlags
|
||||
{
|
||||
FLAG_MOVABLE = (1 << 0), // 움직일 수 있는 창
|
||||
FLAG_LIMIT = (1 << 1), // 창이 화면을 벗어나지 않음
|
||||
FLAG_SNAP = (1 << 2), // 스냅 될 수 있는 창
|
||||
FLAG_MOVABLE = (1 << 0), // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>ִ<EFBFBD> â
|
||||
FLAG_LIMIT = (1 << 1), // â<EFBFBD><EFBFBD> ȭ<><C8AD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EEB3AA> <20><><EFBFBD><EFBFBD>
|
||||
FLAG_SNAP = (1 << 2), // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><> <20>ִ<EFBFBD> â
|
||||
FLAG_DRAGABLE = (1 << 3),
|
||||
FLAG_ATTACH = (1 << 4), // 완전히 부모에 붙어 있는 창 (For Drag / ex. ScriptWindow)
|
||||
FLAG_RESTRICT_X = (1 << 5), // 좌우 이동 제한
|
||||
FLAG_RESTRICT_Y = (1 << 6), // 상하 이동 제한
|
||||
FLAG_ATTACH = (1 << 4), // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>θ<EFBFBD> <20>پ<EFBFBD> <20>ִ<EFBFBD> â (For Drag / ex. ScriptWindow)
|
||||
FLAG_RESTRICT_X = (1 << 5), // <EFBFBD>¿<EFBFBD> <20>̵<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
FLAG_RESTRICT_Y = (1 << 6), // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̵<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
FLAG_NOT_CAPTURE = (1 << 7),
|
||||
FLAG_FLOAT = (1 << 8), // 공중에 떠있어서 순서 재배치가 되는 창
|
||||
FLAG_NOT_PICK = (1 << 9), // 마우스에 의해 Pick되지 않는 창
|
||||
FLAG_FLOAT = (1 << 8), // <EFBFBD><EFBFBD><EFBFBD>߿<EFBFBD> <20><><EFBFBD>־ <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ġ<EFBFBD><C4A1> <20>Ǵ<EFBFBD> â
|
||||
FLAG_NOT_PICK = (1 << 9), // <EFBFBD><EFBFBD><EFBFBD>콺<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Pick<63><6B><EFBFBD><EFBFBD> <20>ʴ<EFBFBD> â
|
||||
FLAG_IGNORE_SIZE = (1 << 10),
|
||||
FLAG_RTL = (1 << 11), // Right-to-left
|
||||
};
|
||||
|
@ -91,8 +92,8 @@ namespace UI
|
|||
bool IsIn(long x, long y);
|
||||
bool IsIn();
|
||||
CWindow * PickWindow(long x, long y);
|
||||
CWindow * PickTopWindow(long x, long y); // NOTE : Children으로 내려가지 않고 상위에서만
|
||||
// 체크 하는 특화된 함수
|
||||
CWindow * PickTopWindow(long x, long y); // NOTE : Children<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʰ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// üũ <20>ϴ<EFBFBD> Ưȭ<C6AF><C8AD> <20>Լ<EFBFBD>
|
||||
|
||||
void __RemoveReserveChildren();
|
||||
|
||||
|
@ -159,6 +160,10 @@ namespace UI
|
|||
/////////////////////////////////////
|
||||
|
||||
virtual BOOL IsWindow() { return TRUE; }
|
||||
#if defined(__BL_CLIP_MASK__)
|
||||
virtual void SetClippingMaskRect(const RECT& rMask);
|
||||
virtual void SetClippingMaskWindow(CWindow* pMaskWindow);
|
||||
#endif
|
||||
/////////////////////////////////////
|
||||
|
||||
protected:
|
||||
|
@ -166,10 +171,10 @@ namespace UI
|
|||
|
||||
EHorizontalAlign m_HorizontalAlign;
|
||||
EVerticalAlign m_VerticalAlign;
|
||||
long m_x, m_y; // X,Y 상대좌표
|
||||
long m_lWidth, m_lHeight; // 크기
|
||||
RECT m_rect; // Global 좌표
|
||||
RECT m_limitBiasRect; // limit bias 값
|
||||
long m_x, m_y; // X,Y <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǥ
|
||||
long m_lWidth, m_lHeight; // ũ<EFBFBD><EFBFBD>
|
||||
RECT m_rect; // Global <EFBFBD><EFBFBD>ǥ
|
||||
RECT m_limitBiasRect; // limit bias <EFBFBD><EFBFBD>
|
||||
|
||||
bool m_bMovable;
|
||||
bool m_bShow;
|
||||
|
@ -183,7 +188,12 @@ namespace UI
|
|||
|
||||
BOOL m_isUpdatingChildren;
|
||||
TWindowContainer m_pReserveChildList;
|
||||
|
||||
#if defined(__BL_CLIP_MASK__)
|
||||
bool m_bEnableMask;
|
||||
CWindow* m_pMaskWindow;
|
||||
RECT m_rMaskRect;
|
||||
#endif
|
||||
|
||||
#ifdef _DEBUG
|
||||
public:
|
||||
DWORD DEBUG_dwCounter;
|
||||
|
|
|
@ -534,7 +534,7 @@ namespace UI
|
|||
if (m_pActiveWindow)
|
||||
m_pActiveWindow->OnKillFocus();
|
||||
|
||||
// 이미 락된 윈도우리스트안에 있다면 제거한다..
|
||||
// <EFBFBD>̹<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>츮<EFBFBD><ECB8AE>Ʈ<EFBFBD>ȿ<EFBFBD> <20>ִٸ<D6B4> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>..
|
||||
m_LockWindowList.remove(pWin);
|
||||
|
||||
if (m_pLockWindow)
|
||||
|
@ -575,8 +575,8 @@ namespace UI
|
|||
|
||||
if (m_pActiveWindow)
|
||||
{
|
||||
// NOTE : 누적된 Window가 많아지면 Clear를 해줘야 할까?
|
||||
// 일단은 중복 누적이 안되며 포커스 되는 갯수 자체가 5개 미만이니 굳이 필요하지는 않을 듯.. - [levites]
|
||||
// NOTE : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Window<6F><77> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Clear<61><72> <20><><EFBFBD><EFBFBD><EFBFBD> <20>ұ<EFBFBD>?
|
||||
// <EFBFBD>ϴ<EFBFBD><EFBFBD><EFBFBD> <20>ߺ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ȵǸ<C8B5> <20><>Ŀ<EFBFBD><C4BF> <20>Ǵ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ü<EFBFBD><C3BC> 5<><35> <20≯<EFBFBD><CCB8>̴<EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʿ<EFBFBD><CABF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>.. - [levites]
|
||||
m_ActiveWindowList.push_back(m_pActiveWindow);
|
||||
m_pActiveWindow->OnKillFocus();
|
||||
}
|
||||
|
@ -618,8 +618,8 @@ namespace UI
|
|||
CWindow * pParentWindow = pWin->GetParent();
|
||||
pParentWindow->SetTop(pWin);
|
||||
|
||||
// NOTE : Capture가 리셋된다..? - [levites]
|
||||
// NOTE : 인벤토리에서 아이템을 드래그 해서 밖에다 놓을때 캡춰가 남아서 창의 버튼을 두번 눌러야 하는 버그를 위해 추가
|
||||
// NOTE : Capture<EFBFBD><EFBFBD> <20><><EFBFBD>µȴ<C2B5>..? - [levites]
|
||||
// NOTE : <EFBFBD>κ<EFBFBD><EFBFBD>丮<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>巡<EFBFBD><E5B7A1> <20>ؼ<EFBFBD> <20>ۿ<EFBFBD><DBBF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ĸ<>簡 <20><><EFBFBD>Ƽ<EFBFBD> â<><C3A2> <20><>ư<EFBFBD><C6B0> <20>ι<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>߰<EFBFBD>
|
||||
// ResetCapture();
|
||||
}
|
||||
|
||||
|
@ -628,7 +628,7 @@ namespace UI
|
|||
if (m_pLockWindow)
|
||||
return;
|
||||
|
||||
// GameLayer에 속해 있는 윈도우가 피킹 됐다면 무조건 SetTop을 해준다.
|
||||
// GameLayer<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>찡 <20><>ŷ <20>ƴٸ<C6B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> SetTop<6F><70> <20><><EFBFBD>ش<EFBFBD>.
|
||||
TLayerContainer::iterator itor = m_LayerWindowMap.find("UI");
|
||||
if (itor == m_LayerWindowMap.end())
|
||||
return;
|
||||
|
@ -896,7 +896,7 @@ namespace UI
|
|||
{
|
||||
if (m_pLeftCaptureWindow->OnMouseLeftButtonUp())
|
||||
{
|
||||
// NOTE : 여기서 m_pLeftCaptureWindow가 NULL 일 수 있습니다!! - [levites]
|
||||
// NOTE : <EFBFBD><EFBFBD><EFBFBD>⼭ m_pLeftCaptureWindow<6F><77> NULL <20><> <20><> <20>ֽ<EFBFBD><D6BD>ϴ<EFBFBD>!! - [levites]
|
||||
m_pLeftCaptureWindow = NULL;
|
||||
return;
|
||||
}
|
||||
|
@ -1099,7 +1099,7 @@ namespace UI
|
|||
return;
|
||||
}
|
||||
|
||||
// NOTE : 전체로 돌리지 않고 Activate되어있는 EditLine에만 보내는 이벤트
|
||||
// NOTE : <EFBFBD><EFBFBD>ü<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʰ<EFBFBD> Activate<74>Ǿ<EFBFBD><C7BE>ִ<EFBFBD> EditLine<6E><65><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̺<EFBFBD>Ʈ
|
||||
}
|
||||
|
||||
void CWindowManager::RunChangeCodePage()
|
||||
|
|
|
@ -3,6 +3,42 @@
|
|||
#include "PythonSlotWindow.h"
|
||||
#include "PythonGridSlotWindow.h"
|
||||
|
||||
#if defined(__BL_CLIP_MASK__)
|
||||
PyObject* wndMgrSetClippingMaskRect(PyObject* poSelf, PyObject* poArgs)
|
||||
{
|
||||
UI::CWindow* pWindow;
|
||||
if (!PyTuple_GetWindow(poArgs, 0, &pWindow))
|
||||
return Py_BuildException();
|
||||
|
||||
RECT r;
|
||||
if (!PyTuple_GetLong(poArgs, 1, &r.left))
|
||||
return Py_BuildException();
|
||||
if (!PyTuple_GetLong(poArgs, 2, &r.top))
|
||||
return Py_BuildException();
|
||||
if (!PyTuple_GetLong(poArgs, 3, &r.right))
|
||||
return Py_BuildException();
|
||||
if (!PyTuple_GetLong(poArgs, 4, &r.bottom))
|
||||
return Py_BuildException();
|
||||
|
||||
pWindow->SetClippingMaskRect(r);
|
||||
return Py_BuildNone();
|
||||
}
|
||||
|
||||
PyObject* wndMgrSetClippingMaskWindow(PyObject* poSelf, PyObject* poArgs)
|
||||
{
|
||||
UI::CWindow* pWindow;
|
||||
if (!PyTuple_GetWindow(poArgs, 0, &pWindow))
|
||||
return Py_BuildException();
|
||||
|
||||
UI::CWindow* pMaskWindow;
|
||||
if (!PyTuple_GetWindow(poArgs, 1, &pMaskWindow))
|
||||
return Py_BuildException();
|
||||
|
||||
pWindow->SetClippingMaskWindow(pMaskWindow);
|
||||
return Py_BuildNone();
|
||||
}
|
||||
#endif
|
||||
|
||||
bool PyTuple_GetWindow(PyObject* poArgs, int pos, UI::CWindow ** ppRetWindow)
|
||||
{
|
||||
int iHandle;
|
||||
|
@ -1260,7 +1296,7 @@ PyObject * wndMgrSetSlotCoolTime(PyObject * poSelf, PyObject * poArgs)
|
|||
|
||||
PyObject * wndMgrSetToggleSlot(PyObject * poSelf, PyObject * poArgs)
|
||||
{
|
||||
assert(!"wndMgrSetToggleSlot - 사용하지 않는 함수");
|
||||
assert(!"wndMgrSetToggleSlot - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʴ<EFBFBD> <20>Լ<EFBFBD>");
|
||||
return Py_BuildNone();
|
||||
}
|
||||
|
||||
|
@ -1883,13 +1919,13 @@ PyObject * wndMarkBox_SetImageFilename(PyObject * poSelf, PyObject * poArgs)
|
|||
|
||||
PyObject * wndMarkBox_SetImage(PyObject * poSelf, PyObject * poArgs)
|
||||
{
|
||||
// 아무것도 하지 않음
|
||||
// <EFBFBD>ƹ<EFBFBD><EFBFBD>͵<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
return Py_BuildNone();
|
||||
}
|
||||
|
||||
PyObject * wndMarkBox_Load(PyObject * poSelf, PyObject * poArgs)
|
||||
{
|
||||
// 아무것도 하지 않음
|
||||
// <EFBFBD>ƹ<EFBFBD><EFBFBD>͵<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
return Py_BuildNone();
|
||||
}
|
||||
|
||||
|
@ -2300,6 +2336,11 @@ void initwndMgr()
|
|||
{
|
||||
static PyMethodDef s_methods[] =
|
||||
{
|
||||
#if defined(__BL_CLIP_MASK__)
|
||||
{ "SetClippingMaskRect", wndMgrSetClippingMaskRect, METH_VARARGS },
|
||||
{ "SetClippingMaskWindow", wndMgrSetClippingMaskWindow, METH_VARARGS },
|
||||
#endif
|
||||
|
||||
// WindowManager
|
||||
{ "SetMouseHandler", wndMgrSetMouseHandler, METH_VARARGS },
|
||||
{ "SetScreenSize", wndMgrSetScreenSize, METH_VARARGS },
|
||||
|
@ -2495,7 +2536,7 @@ void initwndMgr()
|
|||
|
||||
PyObject * poModule = Py_InitModule("wndMgr", s_methods);
|
||||
|
||||
// 하나의 딕셔너리에 너무 많은 Function이 포함 되는 것 같아 이런식으로 딕셔너리를 나누는 것을 고려 중 - [levites]
|
||||
// <EFBFBD>ϳ<EFBFBD><EFBFBD><EFBFBD> <20><>ųʸ<C5B3><CAB8><EFBFBD> <20>ʹ<EFBFBD> <20><><EFBFBD><EFBFBD> Function<6F><6E> <20><><EFBFBD><EFBFBD> <20>Ǵ<EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20>̷<EFBFBD><CCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ųʸ<C5B3><CAB8><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> - [levites]
|
||||
// PyObject * poMgrModule = Py_InitModule("wndMgr", s_methods);
|
||||
// PyObject * poTextModule = Py_InitModule("wndText", s_methods);
|
||||
// PyObject * poSlotModule = Py_InitModule("wndSlot", s_methods);
|
||||
|
|
|
@ -5,8 +5,8 @@
|
|||
#define ENABLE_COSTUME_SYSTEM
|
||||
#define ENABLE_ENERGY_SYSTEM
|
||||
#define ENABLE_DRAGON_SOUL_SYSTEM
|
||||
#define ENABLE_NEW_EQUIPMENT_SYSTEM
|
||||
|
||||
#define ENABLE_NEW_EQUIPMENT_SYSTEM
|
||||
#define __BL_CLIP_MASK__
|
||||
|
||||
bool LocaleService_IsYMIR();
|
||||
bool LocaleService_IsJAPAN();
|
||||
|
|
|
@ -1507,6 +1507,12 @@ void initapp()
|
|||
PyModule_AddIntConstant(poModule, "ENABLE_DRAGON_SOUL_SYSTEM", 0);
|
||||
#endif
|
||||
|
||||
#if defined(__BL_CLIP_MASK__)
|
||||
PyModule_AddIntConstant(poModule, "__BL_CLIP_MASK__", true);
|
||||
#else
|
||||
PyModule_AddIntConstant(poModule, "__BL_CLIP_MASK__", false);
|
||||
#endif
|
||||
|
||||
#ifdef ENABLE_NEW_EQUIPMENT_SYSTEM
|
||||
PyModule_AddIntConstant(poModule, "ENABLE_NEW_EQUIPMENT_SYSTEM", 1);
|
||||
#else
|
||||
|
|
|
@ -474,7 +474,7 @@ void CPythonChat::AppendChat(int iType, const char * c_szChat)
|
|||
TChatSet * pChatSet = &(itor->second);
|
||||
//pChatLine->SetColor(itor->first, GetChatColor(iType));
|
||||
|
||||
// Edit Mode 를 억지로 끼워 맞추기 위해 추가
|
||||
// Edit Mode <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>߱<EFBFBD> <20><><EFBFBD><EFBFBD> <20>߰<EFBFBD>
|
||||
if (BOARD_STATE_EDIT == pChatSet->m_iBoardState)
|
||||
{
|
||||
ArrangeShowingChat(itor->first);
|
||||
|
@ -512,12 +512,12 @@ DWORD CPythonChat::GetChatColor(int iType)
|
|||
void CPythonChat::IgnoreCharacter(const char * c_szName)
|
||||
{
|
||||
TIgnoreCharacterSet::iterator itor = m_IgnoreCharacterSet.find(c_szName);
|
||||
// NOTE : 이미 차단 중이라면..
|
||||
// NOTE : <EFBFBD>̹<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̶<EFBFBD><CCB6>..
|
||||
if (m_IgnoreCharacterSet.end() != itor)
|
||||
{
|
||||
m_IgnoreCharacterSet.erase(itor);
|
||||
}
|
||||
// NOTE : 차단이 되지 않은 캐릭터라면..
|
||||
// NOTE : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ij<><C4B3><EFBFBD>Ͷ<EFBFBD><CDB6>..
|
||||
else
|
||||
{
|
||||
m_IgnoreCharacterSet.insert(c_szName);
|
||||
|
@ -771,6 +771,14 @@ void CWhisper::Render(float fx, float fy)
|
|||
|
||||
RECT Rect = { fx, fy, fx+m_fWidth, fy+m_fHeight };
|
||||
|
||||
#if defined(__BL_CLIP_MASK__)
|
||||
if (GetDefaultCodePage() == CP_ARABIC)
|
||||
{
|
||||
Rect.left = fx - m_fWidth;
|
||||
Rect.right = fx;
|
||||
}
|
||||
#endif
|
||||
|
||||
for (int i = iStartLine; i >= 0; --i)
|
||||
{
|
||||
assert(i >= 0 && i < int(m_ChatLineDeque.size()));
|
||||
|
|
Loading…
Reference in New Issue