From 93f7c60c800ab197a81d88016d5ebb6639340d22 Mon Sep 17 00:00:00 2001 From: guy Date: Wed, 28 Sep 2005 11:51:41 +0000 Subject: [PATCH] Patch level : 2.2 Files correlati : Ricompilazione Demo : [ ] Commento : Corretti alcuni problemi di compatibilita' tra wxWindows 2.4.0 e wxWidgets 2.6.1 git-svn-id: svn://10.65.10.50/trunk@13377 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- xvaga/oswin32.cpp | 10 +++--- xvaga/oswin32.h | 11 +++---- xvaga/xvaga.cpp | 76 ++++++++++++++++++++++++---------------------- xvaga/xvintern.h | 1 + xvaga/xvtextra.cpp | 6 ++-- 5 files changed, 54 insertions(+), 50 deletions(-) diff --git a/xvaga/oswin32.cpp b/xvaga/oswin32.cpp index 31173fb91..ba4f8c40c 100755 --- a/xvaga/oswin32.cpp +++ b/xvaga/oswin32.cpp @@ -124,7 +124,7 @@ int FamilySorter(const void* p1,const void* p2) return strcmp(s1, s2); } -int OsWin32_EnumerateFamilies(unsigned int hDC, char** families, int max_count) +int OsWin32_EnumerateFamilies(WXHDC hDC, char** families, int max_count) { XvtData data; data.families = families; @@ -136,7 +136,7 @@ int OsWin32_EnumerateFamilies(unsigned int hDC, char** families, int max_count) return data.cur_count; } -int OsWin32_EnumerateSizes(unsigned int hDC, const char* name, long* sizes, short* scalable, int max_count) +int OsWin32_EnumerateSizes(WXHDC hDC, const char* name, long* sizes, short* scalable, int max_count) { XvtData data; data.sizes = sizes; @@ -183,7 +183,7 @@ void* OsWin32_GetPrinterInfo(int& size, const char* printer) return pdm; } -void OsWin32_SetCaptionStyle(unsigned int handle, bool set) +void OsWin32_SetCaptionStyle(WXHWND handle, bool set) { HWND hwnd = (HWND)handle; DWORD s = ::GetWindowLong(hwnd, GWL_STYLE); @@ -391,7 +391,7 @@ bool OsWin32_DrawBitmap(HBITMAP hBMP, wxDC& dc, const wxRect& dst, const wxRect& return ok; } -void OsWin32_DrawDottedRect(unsigned int hDC, int left, int top, int right, int bottom) +void OsWin32_DrawDottedRect(WXHDC hDC, int left, int top, int right, int bottom) { LOGBRUSH lBrush; lBrush.lbHatch = 0; lBrush.lbStyle = BS_SOLID; @@ -448,7 +448,7 @@ static wxString FindHelpFile(const char* topic) return str; } -int OsWin32_Help(unsigned int handle, const char* hlp, unsigned int cmd, const char* topic) +int OsWin32_Help(WXHWND handle, const char* hlp, unsigned int cmd, const char* topic) { HWND hwnd = (HWND)handle; diff --git a/xvaga/oswin32.h b/xvaga/oswin32.h index dd787f836..3e2771ab2 100755 --- a/xvaga/oswin32.h +++ b/xvaga/oswin32.h @@ -4,21 +4,21 @@ void* OsWin32_ConvertFromNativePrinterInfo(void* hGlobal, unsigned int& nSize); void* OsWin32_ConvertToNativePrinterInfo(void* data, unsigned int nSize); HBITMAP OsWin32_CreateBitmap(const wxImage& img, wxDC& dc); bool OsWin32_DrawBitmap(HBITMAP hBMP, wxDC& dc, const wxRect& dst, const wxRect& src); -void OsWin32_DrawDottedRect(unsigned int hDC, int left, int top, int right, int bottom); +void OsWin32_DrawDottedRect(WXHDC hDC, int left, int top, int right, int bottom); wxString OsWin32_File2App(const char* filename); bool OsWin32_GotoUrl(const char* url, const char* action); unsigned int OsWin32_LoadIcon(const char* file); -int OsWin32_EnumerateFamilies(unsigned int hDC, char** families, int max_count); -int OsWin32_EnumerateSizes(unsigned int hDC, const char* name, long* sizes, short* scalable, int max_count); -void OsWin32_SetCaptionStyle(unsigned int handle, bool set); +int OsWin32_EnumerateFamilies(WXHDC hDC, char** families, int max_count); +int OsWin32_EnumerateSizes(WXHDC hDC, const char* name, long* sizes, short* scalable, int max_count); +void OsWin32_SetCaptionStyle(WXHWND handle, bool set); void* OsWin32_GetPrinterInfo(int& size, const char* printer); void OsWin32_PlaceProcessInWindow(unsigned int instance, const char* name, unsigned int parent); void OsWin32_UpdateWindow(unsigned int handle); -int OsWin32_Help(unsigned int handle, const char* hlp, unsigned int cmd, const char* topic); +int OsWin32_Help(WXHWND handle, const char* hlp, unsigned int cmd, const char* topic); bool OsWin32_TestNetworkVersion(); bool OsWin32_HL_Crypt(unsigned short* data); @@ -33,7 +33,6 @@ bool OsWin32_SL_Logout() ; bool OsWin32_SL_ReadBlock(unsigned short reg, unsigned short size, unsigned short* data); bool OsWin32_SL_WriteBlock(unsigned short reg, unsigned short size, const unsigned short* data); -//BOOL OsWin32_SpoolRow(const char* pData, unsigned int cbBytes, unsigned int hPrnDC); void OsWin32_SpoolNewLine(unsigned int hdc); bool OsWin32_IsGenericTextOnly(void* devmode); diff --git a/xvaga/xvaga.cpp b/xvaga/xvaga.cpp index 4e3b27abc..8f89922e0 100755 --- a/xvaga/xvaga.cpp +++ b/xvaga/xvaga.cpp @@ -397,7 +397,10 @@ wxDC& TDC::GetDC(bool bPaint) { if (_dc == NULL) { - _dc = new wxClientDC(_owner); + if (_owner == NULL || (unsigned long)_owner == SCREEN_WIN) + _dc = new wxScreenDC(); + else + _dc = new wxClientDC(_owner); _dirty = -1; } } @@ -483,11 +486,7 @@ void TDC::KillDC() { if (_dc != NULL) { -#if wxCHECK_VERSION(2,6,1) SetClippingBox(NULL); -#else - SetClippingBox(NULL); -#endif delete _dc; _dc = NULL; } @@ -623,6 +622,13 @@ bool TDCMapper::HasValidDC(WINDOW owner) const class TwxWindowBase : public wxWindow { +#ifdef LINUX +private: + wxString m_strTitle; + virtual void SetTitle(const wxString& title) { wxWindow::SetTitle(m_strTitle = title); } + virtual wxString GetTitle() const { return m_strTitle; } +#endif + public: TwxWindowBase() { } TwxWindowBase(wxWindow *parent, wxWindowID id, const wxString &title, @@ -639,18 +645,11 @@ TwxWindowBase::TwxWindowBase(wxWindow *parent, wxWindowID id, const wxString &ti // Evita inutili sfarfallamenti in quanto wxWidgets crea le finestre visibili per default wxWindowBase::Show(false); Create(parent, id, pos, size, style, title); + SetTitle(title); // Triste necessita', la Create sembra ignorare il titolo } class TwxWindow : public TwxWindowBase { -#ifdef LINUX -private: - wxString m_strTitle; -public: - virtual void SetTitle(const wxString& title) { wxWindow::SetTitle(m_strTitle = title); } - virtual wxString GetTitle() const { return m_strTitle; } -#endif - private: MENU_ITEM* m_menu; @@ -1914,7 +1913,7 @@ BOOLEAN xvt_help_process_event(XVT_HELP_INFO hi, WINDOW win, EVENT *ev) BOOLEAN bProcessed = FALSE; #ifdef WIN32 - unsigned int hwnd = (unsigned int)xvt_vobj_get_attr(win, ATTR_NATIVE_WINDOW); + WXHWND hwnd = (WXHWND)xvt_vobj_get_attr(win, ATTR_NATIVE_WINDOW); switch (ev->type) { case E_COMMAND: @@ -2065,6 +2064,11 @@ bool TFontId::Underline() const return (m_wMask & XVT_FS_UNDERLINE) != 0; } +int TFontId::Weight() const +{ + return (m_wMask & XVT_FS_BOLD) ? wxBOLD : wxNORMAL; +} + wxFont& TFontId::Font(wxDC* dc, WINDOW win) const { int nSize = PointSize(); @@ -2075,9 +2079,9 @@ wxFont& TFontId::Font(wxDC* dc, WINDOW win) const if (dc != lastDC) { #ifdef WIN32 - const char* strDefaultFaceName = "Courier New"; + const char* DEFAULT_FONT_NAME = "Courier New"; #else - const char* strDefaultFaceName = "Courier"; + const char* DEFAULT_FONT_NAME = "Courier"; #endif const wxSize ppi = dc->GetPPI(); @@ -2091,7 +2095,7 @@ wxFont& TFontId::Font(wxDC* dc, WINDOW win) const while (nMin <= nMax) { const int nFontSize = (nMin+nMax)/2; - wxFont courier(-nFontSize, wxDEFAULT, wxNORMAL, wxNORMAL, FALSE, strDefaultFaceName); + wxFont courier(-nFontSize, wxDEFAULT, wxNORMAL, wxNORMAL, FALSE, DEFAULT_FONT_NAME); dc->SetFont(courier); int tw; dc->GetTextExtent(str, &tw, NULL); if (tw <= nTarget10) @@ -2117,7 +2121,7 @@ wxFont& TFontId::Font(wxDC* dc, WINDOW win) const for (int i = 15; i > 0; i--) { const int nFontSize = nBest-i; - wxFont courier(-nFontSize, Family(), wxNORMAL, wxNORMAL, FALSE, strDefaultFaceName); + wxFont courier(-nFontSize, Family(), wxNORMAL, wxNORMAL, FALSE, DEFAULT_FONT_NAME); dc->SetFont(courier); int tw; dc->GetTextExtent(str, &tw, NULL); if (tw > nTarget10 && bPrevGood) @@ -2138,16 +2142,14 @@ wxFont& TFontId::Font(wxDC* dc, WINDOW win) const lastDC = dc; } nSize = (int)(nSize * dPrintScale + 0.5); - #ifdef WIN32 // In Windows rendo negativa la dimensione perche' e' piu' preciso! nSize = -nSize; #endif } - const int nWeight = (m_wMask & XVT_FS_BOLD) ? wxBOLD : wxNORMAL; wxFont* font = wxTheFontList->FindOrCreateFont( - nSize, Family(), Style(), nWeight, Underline(), FaceName()); + nSize, Family(), Style(), Weight(), Underline(), FaceName()); return *font; } @@ -2321,7 +2323,7 @@ void xvt_dwin_draw_dotted_rect(WINDOW win, RCT *rctp) if (can_draw_dots) { CAST_DC(win, dc); - OsWin32_DrawDottedRect((unsigned int)dc.GetHDC(), rctp->left, rctp->top, rctp->right, rctp->bottom); + OsWin32_DrawDottedRect(dc.GetHDC(), rctp->left, rctp->top, rctp->right, rctp->bottom); return; } #endif @@ -2369,8 +2371,7 @@ void xvt_dwin_draw_text(WINDOW win, int x, int y, const char *s, int len) #ifdef LINUX if (tdc._dct.opaque_text) { - RCT back; - + RCT back; back.left = x; back.right = x + xvt_dwin_get_text_width(win, str, -1); back.top = y - delta; @@ -2477,7 +2478,7 @@ BOOLEAN xvt_dwin_is_update_needed(WINDOW win, RCT* rctp) { if (win != NULL_WIN && rctp != NULL) { - if (win == PRINTER_WIN) + if (win == PRINTER_WIN || win == SCREEN_WIN) return TRUE; CAST_WIN(win, w); const wxRect rect1 = NormalizeRCT(rctp); @@ -2495,8 +2496,7 @@ void xvt_dwin_scroll_rect(WINDOW win, RCT *rctp, int dh, int dv) if (rctp != NULL) { wxRect rct = NormalizeRCT(rctp); - if (rct.width > 0 && rct.height > 0) - + if (rct.width > 0 && rct.height > 0) #ifdef WIN32 w.ScrollWindow(dh, dv, &rct); #else @@ -2645,7 +2645,7 @@ XVT_FNTID xvt_font_create(void) return (XVT_FNTID)pFont; } -void xvt_font_deserialize(XVT_FNTID font_id, const char *buf) +void xvt_font_deserialize(XVT_FNTID font_id, const char* buf) { // 01\\Courier\\0\\10\\WIN01/-13/0/0/0/400/0/0/0/0/1/2/1/49/Courier @@ -3041,6 +3041,7 @@ XVT_IMAGE xvt_image_capture(WINDOW win, const RCT* src) wxBitmap bmp(r.GetWidth(), r.GetHeight()); CAST_DC(win, wdc); + wxMemoryDC mdc; mdc.SelectObject(bmp); mdc.Blit(wxPoint(0,0), r.GetSize(), &wdc, r.GetPosition()); @@ -4452,8 +4453,8 @@ long xvt_vobj_get_attr(WINDOW win, long data) ret = wxSystemSettings::GetMetric(wxSYS_SCREEN_X); break; case ATTR_SCREEN_WINDOW: - ret = NULL_WIN; // Non bellissimo ma per ora... - break; + ret = 882L; // Scelta arbitraria ma accettabile + break; case ATTR_SPEECH_MODE: ret = m_nSpeechMode; break; @@ -4486,14 +4487,18 @@ RCT* xvt_vobj_get_client_rect(WINDOW win, RCT *rctp) if (win == PRINTER_WIN) { l = h = 6000; // circa A4 height - } - else + } else + if (win == SCREEN_WIN) + { + l = wxSystemSettings::GetMetric(wxSYS_SCREEN_X); + h = wxSystemSettings::GetMetric(wxSYS_SCREEN_Y) - 32; // Puerile tentativo di escludere la task bar + } else { CAST_WIN(win, w); w.GetClientSize(&l, &h); } } - else // NULL_WIN -> SREEN_WINDOW + else // NULL_WIN = schermo intero { l = wxSystemSettings::GetMetric(wxSYS_SCREEN_X); h = wxSystemSettings::GetMetric(wxSYS_SCREEN_Y); @@ -4698,7 +4703,7 @@ WINDOW xvt_win_create(WIN_TYPE wtype, const RCT* rct_p, const char* title, int m #endif #ifdef WIN32 - OsWin32_SetCaptionStyle((unsigned int)w->GetHWND(), wtype == W_DOC); + OsWin32_SetCaptionStyle(w->GetHWND(), wtype == W_DOC); #else OsLinux_SetCaptionStyle((wxWindow*)w, style); #endif @@ -4737,8 +4742,7 @@ WINDOW xvt_win_create(WIN_TYPE wtype, const RCT* rct_p, const char* title, int m e.type = E_CREATE; eh((WINDOW)w, &e); - // Rende visibili i giusti flag di visibilita e disabilitazione - xvt_app_process_pending_events(); + // xvt_app_process_pending_events(); // Vietatissimo: arrivano E_PAINT prima di assegnare TWindow::_win return (WINDOW)w; } diff --git a/xvaga/xvintern.h b/xvaga/xvintern.h index 483b43991..c52f56100 100755 --- a/xvaga/xvintern.h +++ b/xvaga/xvintern.h @@ -23,6 +23,7 @@ public: XVT_FONT_STYLE_MASK Mask() const { return m_wMask; } int Style() const; bool Underline() const; + int Weight() const; void SetFaceName(const char* f) { m_strFace = f; } const char* FaceName() const; diff --git a/xvaga/xvtextra.cpp b/xvaga/xvtextra.cpp index 3f2cae0ee..6eb9ebc3d 100755 --- a/xvaga/xvtextra.cpp +++ b/xvaga/xvtextra.cpp @@ -459,7 +459,7 @@ long xvt_fmap_get_family_sizes(PRINT_RCD *precp, char *family, long *size_array, { const TwxPrintOut& po = m_PrintoutCache.Get((TPRINT_RCD*)precp); if (!po.HasBadDriver()) - size = OsWin32_EnumerateSizes((unsigned int)po.GetDC()->GetHDC(), family, size_array, scalable, max_sizes); + size = OsWin32_EnumerateSizes(po.GetDC()->GetHDC(), family, size_array, scalable, max_sizes); } else { @@ -481,7 +481,7 @@ long xvt_fmap_get_families(PRINT_RCD *precp, char **family_array, long max_famil if (xvt_print_is_valid(precp)) { TwxPrintOut& po = m_PrintoutCache.Get((TPRINT_RCD*)precp); - size = OsWin32_EnumerateFamilies((unsigned int)po.GetDC()->GetHDC(), family_array, max_families); + size = OsWin32_EnumerateFamilies(po.GetDC()->GetHDC(), family_array, max_families); if (size == 0) po.SetBadDriver(true); } @@ -489,7 +489,7 @@ long xvt_fmap_get_families(PRINT_RCD *precp, char **family_array, long max_famil { wxFrame* tw = (wxFrame*)TASK_WIN; wxClientDC dc(tw); - size = OsWin32_EnumerateFamilies((unsigned int)dc.GetHDC(), family_array, max_families); + size = OsWin32_EnumerateFamilies(dc.GetHDC(), family_array, max_families); } #else size = OsLinux_EnumerateFamilies(family_array, max_families);