Patch level : 2.1 nopatch
Files correlati : xvaga.dll Ricompilazione Demo : [ ] Commento : Risolti conflitti vari e migliorata gestione dei font e dei Display Context git-svn-id: svn://10.65.10.50/trunk@11863 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
baf2659f8f
commit
3b42ecfc52
@ -31,8 +31,8 @@ extern "C" {
|
||||
|
||||
#define CAST_WIN(win,w) XVT_ASSERT(win != NULL_WIN); wxWindow& w = *(wxWindow*)win
|
||||
#define CAST_TWIN(win,w) XVT_ASSERT(win != NULL_WIN); TwxWindow& w = *(TwxWindow*)win; XVT_ASSERT(_task_win != &w);
|
||||
#define CAST_TDC(win,dc) XVT_ASSERT(win != NULL_WIN); TDC& dc = _dc_map.GetTDC((TwxWindow*)win);
|
||||
#define CAST_DC(win,dc) XVT_ASSERT(win != NULL_WIN); wxDC& dc = _dc_map.GetDC((TwxWindow*)win);
|
||||
#define CAST_TDC(win,dc) XVT_ASSERT(win != NULL_WIN); TDC& dc = GetTDCMapper().GetTDC(win);
|
||||
#define CAST_DC(win,dc) XVT_ASSERT(win != NULL_WIN); wxDC& dc = GetTDCMapper().GetDC(win);
|
||||
|
||||
// Funzione interna di utilita'
|
||||
MENU_ITEM* xvt_menu_duplicate_tree(const MENU_ITEM* m);
|
||||
@ -490,24 +490,33 @@ bool TDC::GetClippingBox(RCT* pRct) const
|
||||
return _clip.right > _clip.left;
|
||||
}
|
||||
|
||||
WX_DECLARE_HASH_MAP(wxWindow*, TDC*, wxPointerHash, wxPointerEqual, wxTDCHashMap);
|
||||
WX_DECLARE_HASH_MAP(WINDOW, TDC*, wxIntegerHash, wxIntegerEqual, wxTDCHashMap);
|
||||
|
||||
class TDCMapper : public wxTDCHashMap
|
||||
{
|
||||
wxWindow* _pLastOwner;
|
||||
WINDOW _pLastOwner;
|
||||
TDC* _pLastTDC;
|
||||
|
||||
public:
|
||||
TDC& GetTDC(wxWindow* owner);
|
||||
wxDC& GetDC(wxWindow* owner, bool bPaint = false) { return GetTDC(owner).GetDC(bPaint); }
|
||||
void DestroyDC(wxWindow* owner);
|
||||
void DestroyTDC(wxWindow* owner);
|
||||
TDC& GetTDC(WINDOW owner);
|
||||
wxDC& GetDC(WINDOW owner, bool bPaint = false) { return GetTDC(owner).GetDC(bPaint); }
|
||||
void DestroyDC(WINDOW owner);
|
||||
void DestroyTDC(WINDOW owner);
|
||||
bool HasValidDC(WINDOW owner) const;
|
||||
|
||||
TDCMapper() : _pLastOwner(NULL), _pLastTDC(NULL) { }
|
||||
} _dc_map;
|
||||
TDCMapper() : _pLastOwner(NULL_WIN), _pLastTDC(NULL) { }
|
||||
virtual ~TDCMapper() { DestroyTDC(NULL_WIN); }
|
||||
};
|
||||
|
||||
void TDCMapper::DestroyDC(wxWindow* owner)
|
||||
TDCMapper& GetTDCMapper()
|
||||
{
|
||||
static TDCMapper* _dc_map = NULL;
|
||||
if (_dc_map == NULL)
|
||||
_dc_map = new TDCMapper;
|
||||
return *_dc_map;
|
||||
}
|
||||
|
||||
void TDCMapper::DestroyDC(WINDOW owner)
|
||||
{
|
||||
if (owner)
|
||||
{
|
||||
@ -516,21 +525,29 @@ void TDCMapper::DestroyDC(wxWindow* owner)
|
||||
pTDC->KillDC();
|
||||
}
|
||||
else
|
||||
clear();
|
||||
{
|
||||
TDCMapper::iterator it;
|
||||
for (it = begin(); it != end(); ++it)
|
||||
{
|
||||
TDC* pTDC = it->second;
|
||||
if (pTDC)
|
||||
pTDC->KillDC();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void TDCMapper::DestroyTDC(wxWindow* owner)
|
||||
void TDCMapper::DestroyTDC(WINDOW owner)
|
||||
{
|
||||
if (owner)
|
||||
if (owner != NULL_WIN)
|
||||
{
|
||||
TDC* pTDC = (*this)[owner];
|
||||
if (pTDC)
|
||||
delete pTDC;
|
||||
erase(owner);
|
||||
}
|
||||
else
|
||||
{
|
||||
TDCMapper::iterator it;
|
||||
|
||||
for (it = begin(); it != end(); ++it)
|
||||
{
|
||||
TDC* pTDC = it->second;
|
||||
@ -539,10 +556,10 @@ void TDCMapper::DestroyTDC(wxWindow* owner)
|
||||
}
|
||||
clear();
|
||||
}
|
||||
_pLastOwner = NULL;
|
||||
_pLastOwner = NULL_WIN;
|
||||
}
|
||||
|
||||
TDC& TDCMapper::GetTDC(wxWindow* owner)
|
||||
TDC& TDCMapper::GetTDC(WINDOW owner)
|
||||
{
|
||||
if (owner == _pLastOwner)
|
||||
return *_pLastTDC;
|
||||
@ -550,10 +567,10 @@ TDC& TDCMapper::GetTDC(wxWindow* owner)
|
||||
TDC* pTDC = (*this)[owner];
|
||||
if (pTDC == NULL)
|
||||
{
|
||||
if (owner == (wxWindow*)_print_win)
|
||||
pTDC = new TPrintDC(owner);
|
||||
if (owner == _print_win)
|
||||
pTDC = new TPrintDC((wxWindow*)owner);
|
||||
else
|
||||
pTDC = new TDC(owner);
|
||||
pTDC = new TDC((wxWindow*)owner);
|
||||
(*this)[owner] = pTDC;
|
||||
}
|
||||
_pLastOwner = owner;
|
||||
@ -569,8 +586,7 @@ bool TDCMapper::HasValidDC(WINDOW owner) const
|
||||
if (owner == (WINDOW)_pLastOwner)
|
||||
return true;
|
||||
|
||||
CAST_WIN(owner, w);
|
||||
TDC* pTDC = (*((TDCMapper *) this))[&w];
|
||||
TDC* pTDC = (*((TDCMapper *) this))[owner];
|
||||
return pTDC != NULL;
|
||||
}
|
||||
|
||||
@ -900,11 +916,11 @@ void TwxWindow::OnPaint(wxPaintEvent& event)
|
||||
rct.right = rctDamaged.GetRight()+1;
|
||||
rct.bottom = rctDamaged.GetBottom()+1;
|
||||
|
||||
TDC& tdc = _dc_map.GetTDC(this);
|
||||
TDC& tdc = GetTDCMapper().GetTDC((WINDOW)this);
|
||||
tdc.GetDC(true); // Forza la creazione di un wxPaintDC
|
||||
DoXvtEvent(e);
|
||||
tdc.KillDC(); // Distrugge il wxPaintDC
|
||||
_dc_map.DestroyDC(NULL); // Distrugge davvero tutti i wxClientDC residui (risolve molte "porcate" del video)
|
||||
GetTDCMapper().DestroyDC(NULL_WIN); // Distrugge davvero tutti i wxClientDC residui (risolve molte "porcate" del video)
|
||||
}
|
||||
|
||||
static SCROLL_CONTROL ConvertScrollToXVT(wxEventType et)
|
||||
@ -1073,7 +1089,7 @@ void TTaskWin::OnPaint()
|
||||
rct.right = rctDamaged.GetRight()+1;
|
||||
rct.bottom = rctDamaged.GetBottom()+1;
|
||||
|
||||
TDC& dc = _dc_map.GetTDC(this);
|
||||
TDC& dc = GetTDCMapper().GetTDC((WINDOW)this);
|
||||
dc.GetDC(true); // Forza la creazione di un wxPaintDC
|
||||
_task_win_handler((WINDOW)this, &e);
|
||||
dc.KillDC();
|
||||
@ -2180,21 +2196,6 @@ void xvt_dwin_draw_text(WINDOW win, int x, int y, const char *s, int len)
|
||||
{
|
||||
if (s && *s && len != 0)
|
||||
{
|
||||
/*
|
||||
CAST_DC(win, dc);
|
||||
wxRect rct; dc.GetClippingBox(rct);
|
||||
const int maxx = rct.GetRight();
|
||||
if (maxx <= 0 || x < maxx)
|
||||
{
|
||||
wxString str(s);
|
||||
if (len >= 0)
|
||||
str.Truncate(len);
|
||||
int height, desc, lead;
|
||||
dc.GetTextExtent(str, NULL, &height, &desc, &lead);
|
||||
y -= height-desc; // Triste necessita'!
|
||||
dc.DrawText(str, x, y);
|
||||
}
|
||||
*/
|
||||
CAST_TDC(win, tdc);
|
||||
RCT rct;
|
||||
const bool noclip = !tdc.GetClippingBox(&rct);
|
||||
@ -4128,7 +4129,7 @@ void xvt_vobj_destroy(WINDOW win)
|
||||
if (_nice_windows.Get(win) != NULL)
|
||||
{
|
||||
CAST_TWIN(win, w);
|
||||
_dc_map.DestroyTDC(&w);
|
||||
GetTDCMapper().DestroyTDC(win);
|
||||
w.Close(true);
|
||||
}
|
||||
#ifdef DBG
|
||||
|
Loading…
x
Reference in New Issue
Block a user