Small doc corrections

Removed wxFontDirectory
  Added move event to dialog and frame
  Cannot remeber the rest


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@1460 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robert Roebling
1999-01-24 15:07:54 +00:00
parent 9838df2cef
commit 36b3b54ad8
29 changed files with 749 additions and 610 deletions

View File

@@ -33,7 +33,7 @@ palette problems.
Default constructor.
\func{}{wxStaticBitmap}{\param{wxWindow* }{parent}, \param{wxWindowID}{ id},\rtfsp
\param{const wxBitmap\& }{label = ``"}, \param{const wxPosition\& }{pos}, \param{const wxSize\& }{size = wxDefaultSize},\rtfsp
\param{const wxBitmap\& }{label = ``"}, \param{const wxPoint\& }{pos}, \param{const wxSize\& }{size = wxDefaultSize},\rtfsp
\param{long}{ style = 0}, \param{const wxString\& }{name = ``staticBitmap"}}
Constructor, creating and showing a text control.
@@ -61,7 +61,7 @@ Constructor, creating and showing a text control.
\membersection{wxStaticBitmap::Create}\label{wxstaticbitmapcreate}
\func{bool}{Create}{\param{wxWindow* }{parent}, \param{wxWindowID}{ id},\rtfsp
\param{const wxBitmap\& }{label = ``"}, \param{const wxPosition\& }{pos}, \param{const wxSize\& }{size = wxDefaultSize},\rtfsp
\param{const wxBitmap\& }{label = ``"}, \param{const wxPoint\& }{pos}, \param{const wxSize\& }{size = wxDefaultSize},\rtfsp
\param{long}{ style = 0}, \param{const wxString\& }{name = ``staticBitmap"}}
Creation function, for two-step construction. For details see \helpref{wxStaticBitmap::wxStaticBitmap}{wxstaticbitmapconstr}.

View File

@@ -32,7 +32,7 @@ See also \helpref{window styles overview}{windowstyles}.
Default constructor.
\func{}{wxStaticText}{\param{wxWindow* }{parent}, \param{wxWindowID}{ id},\rtfsp
\param{const wxString\& }{label = ``"}, \param{const wxPosition\& }{pos}, \param{const wxSize\& }{size = wxDefaultSize},\rtfsp
\param{const wxString\& }{label = ``"}, \param{const wxPoint\& }{pos}, \param{const wxSize\& }{size = wxDefaultSize},\rtfsp
\param{long}{ style = 0}, \param{const wxString\& }{name = ``staticText"}}
Constructor, creating and showing a text control.
@@ -60,7 +60,7 @@ Constructor, creating and showing a text control.
\membersection{wxStaticText::Create}\label{wxstatictextcreate}
\func{bool}{Create}{\param{wxWindow* }{parent}, \param{wxWindowID}{ id},\rtfsp
\param{const wxString\& }{label = ``"}, \param{const wxPosition\& }{pos}, \param{const wxSize\& }{size = wxDefaultSize},\rtfsp
\param{const wxString\& }{label = ``"}, \param{const wxPoint\& }{pos}, \param{const wxSize\& }{size = wxDefaultSize},\rtfsp
\param{long}{ style = 0}, \param{const wxString\& }{name = ``staticText"}}
Creation function, for two-step construction. For details see \helpref{wxStaticText::wxStaticText}{wxstatictextconstr}.

View File

@@ -72,7 +72,7 @@ generated when enter is pressed in a single-line text control.}
Default constructor.
\func{}{wxTextCtrl}{\param{wxWindow* }{parent}, \param{wxWindowID}{ id},\rtfsp
\param{const wxString\& }{value = ``"}, \param{const wxPosition\& }{pos}, \param{const wxSize\& }{size = wxDefaultSize},\rtfsp
\param{const wxString\& }{value = ``"}, \param{const wxPoint\& }{pos}, \param{const wxSize\& }{size = wxDefaultSize},\rtfsp
\param{long}{ style = 0}, \param{const wxValidator\& }{validator}, \param{const wxString\& }{name = ``text"}}
Constructor, creating and showing a text control.
@@ -126,7 +126,7 @@ Copies the selected text to the clipboard under Motif and MS Windows.
\membersection{wxTextCtrl::Create}\label{wxtextctrlcreate}
\func{bool}{Create}{\param{wxWindow* }{parent}, \param{wxWindowID}{ id},\rtfsp
\param{const wxString\& }{value = ``"}, \param{const wxPosition\& }{pos}, \param{const wxSize\& }{size = wxDefaultSize},\rtfsp
\param{const wxString\& }{value = ``"}, \param{const wxPoint\& }{pos}, \param{const wxSize\& }{size = wxDefaultSize},\rtfsp
\param{long}{ style = 0}, \param{const wxValidator\& }{validator}, \param{const wxString\& }{name = ``text"}}
Creates the text control for two-step construction. Derived classes

View File

@@ -74,6 +74,7 @@ class wxApp: public wxEvtHandler
wxWindow *GetTopWindow();
void SetTopWindow( wxWindow *win );
virtual int MainLoop();
void ExitMainLoop();
bool Initialized();
@@ -88,29 +89,26 @@ class wxApp: public wxEvtHandler
bool SendIdleEvents( wxWindow* win );
inline wxString GetAppName() const
{
if (m_appName != "")
return m_appName;
else return m_className;
}
{ if (m_appName != "") return m_appName; else return m_className; }
inline void SetAppName( const wxString& name ) { m_appName = name; }
inline void SetAppName(const wxString& name) { m_appName = name; };
inline wxString GetClassName() const { return m_className; }
inline void SetClassName( const wxString& name ) { m_className = name; }
const wxString& GetVendorName() const { return m_vendorName; }
void SetVendorName( const wxString& name ) { m_vendorName = name; }
inline void SetExitOnFrameDelete( bool flag ) { m_exitOnFrameDelete = flag; }
inline bool GetExitOnFrameDelete() const { return m_exitOnFrameDelete; }
void SetPrintMode(int WXUNUSED(mode) ) {};
int GetPrintMode() const { return wxPRINT_POSTSCRIPT; };
void SetPrintMode( int WXUNUSED(mode) ) {}
int GetPrintMode() const { return wxPRINT_POSTSCRIPT; }
/* override this function to create default log target of arbitrary
* user-defined classv (default implementation creates a wxLogGui object) */
virtual wxLog *CreateLogTarget();
/* GTK implementation */
// implementation
static bool Initialize();
static bool InitialzeVisual();
@@ -130,12 +128,11 @@ class wxApp: public wxEvtHandler
int argc;
char **argv;
static wxAppInitializerFunction m_appInitFn;
wxString m_vendorName;
wxString m_appName;
wxString m_className;
private:
wxString m_vendorName,
m_appName,
m_className;
static wxAppInitializerFunction m_appInitFn;
DECLARE_EVENT_TABLE()
};

View File

@@ -30,13 +30,17 @@ class wxPaintDC;
class wxWindow;
class wxFont;
/*
class wxFontNameDirectory;
*/
//-----------------------------------------------------------------------------
// global variables
//-----------------------------------------------------------------------------
/*
extern wxFontNameDirectory *wxTheFontNameDirectory;
*/
extern const char* wxEmptyString;
//-----------------------------------------------------------------------------
@@ -60,7 +64,6 @@ public:
int GetPointSize() const;
int GetFamily() const;
int GetFontId() const;
int GetStyle() const;
int GetWeight() const;
bool GetUnderlined() const;
@@ -87,6 +90,7 @@ public:
// no data :-)
};
/*
//-----------------------------------------------------------------------------
// wxFontDirectory
//-----------------------------------------------------------------------------
@@ -114,5 +118,6 @@ class wxFontNameDirectory: public wxObject
class wxHashTable *table;
int nextFontId;
};
*/
#endif // __GTKFONTH__

View File

@@ -83,7 +83,7 @@ public:
virtual wxToolBar* CreateToolBar( long style = wxNO_BORDER|wxTB_HORIZONTAL, wxWindowID id = -1,
const wxString& name = wxToolBarNameStr);
virtual wxToolBar *OnCreateToolBar( long style, wxWindowID id, const wxString& name );
virtual wxToolBar *GetToolBar(void) const;
virtual wxToolBar *GetToolBar() const;
inline void SetToolBar(wxToolBar *toolbar) { m_frameToolBar = toolbar; }
virtual void SetMenuBar( wxMenuBar *menuBar );
@@ -94,10 +94,10 @@ public:
virtual void SetIcon( const wxIcon &icon );
virtual void Iconize( bool WXUNUSED(iconize)) { }
virtual bool IsIconized(void) const { return FALSE; }
bool Iconized(void) const { return IsIconized(); }
virtual bool IsIconized() const { return FALSE; }
bool Iconized() const { return IsIconized(); }
virtual void Maximize(bool WXUNUSED(maximize)) {}
virtual void Restore(void) {}
virtual void Restore() {}
void OnActivate( wxActivateEvent &WXUNUSED(event) ) { } // called from docview.cpp
void OnSize( wxSizeEvent &event );
@@ -109,7 +109,6 @@ public:
virtual wxPoint GetClientAreaOrigin() const;
void DoMenuUpdates();
void DoMenuUpdates(wxMenu* menu);
virtual void OnInternalIdle();
wxMenuBar *m_frameMenuBar;

View File

@@ -41,10 +41,9 @@ class wxGauge: public wxControl
DECLARE_DYNAMIC_CLASS(wxGauge)
public:
inline wxGauge(void) { m_rangeMax = 0; m_gaugePos = 0; m_useProgressBar = TRUE; }
inline wxGauge() { m_rangeMax = 0; m_gaugePos = 0; m_useProgressBar = TRUE; }
inline wxGauge( wxWindow *parent, wxWindowID id,
int range,
inline wxGauge( wxWindow *parent, wxWindowID id, int range,
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize,
long style = wxGA_HORIZONTAL,
@@ -53,8 +52,7 @@ class wxGauge: public wxControl
{
Create(parent, id, range, pos, size, style, validator, name);
}
bool Create( wxWindow *parent, wxWindowID id,
int range,
bool Create( wxWindow *parent, wxWindowID id, int range,
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize,
long style = wxGA_HORIZONTAL,
@@ -64,13 +62,13 @@ class wxGauge: public wxControl
void SetBezelFace( int WXUNUSED(w) ) {};
void SetRange( int r );
void SetValue( int pos );
int GetShadowWidth(void) const { return 0; };
int GetBezelFace(void) const { return 0; };
int GetRange(void) const;
int GetValue(void) const;
int GetShadowWidth() const { return 0; };
int GetBezelFace() const { return 0; };
int GetRange() const;
int GetValue() const;
// Are we a Win95/GTK progress bar, or a normal gauge?
inline bool GetProgressBar(void) const { return m_useProgressBar; }
inline bool GetProgressBar() const { return m_useProgressBar; }
// implementation

View File

@@ -17,19 +17,20 @@
#pragma interface
#endif
class WXDLLEXPORT wxGDIObject: public wxObject
class wxGDIObject : public wxObject
{
DECLARE_DYNAMIC_CLASS(wxGDIObject)
public:
inline wxGDIObject(void) { m_visible = FALSE; };
inline ~wxGDIObject(void) {};
virtual bool GetVisible(void) { return m_visible; }
virtual void SetVisible(bool v) { m_visible = v; }
public:
inline wxGDIObject() { m_visible = FALSE; };
inline ~wxGDIObject() {};
virtual bool GetVisible() { return m_visible; }
virtual void SetVisible( bool visible ) { m_visible = visible; }
protected:
bool m_visible; // Can a pointer to this object be safely taken?
// - only if created within FindOrCreate...
bool m_visible; /* can a pointer to this object be safely taken?
* - only if created within FindOrCreate... */
};
#endif

View File

@@ -168,7 +168,7 @@ public:
virtual void SetSizeHints( int minW, int minH, int maxW = -1, int maxH = -1, int incW = -1, int incH = -1 );
// Dialog units translations. Implemented in wincmn.cpp.
/* Dialog units translations. Implemented in wincmn.cpp. */
wxPoint ConvertPixelsToDialog( const wxPoint& pt );
wxPoint ConvertDialogToPixels( const wxPoint& pt );
inline wxSize ConvertPixelsToDialog( const wxSize& sz )
@@ -198,8 +198,8 @@ public:
{ return m_parent; }
wxWindow *GetGrandParent() const
{ return (m_parent ? m_parent->m_parent : (wxWindow*)NULL); }
void SetParent( wxWindow *p )
{ m_parent = p; }
void SetParent( wxWindow *parent )
{ m_parent = parent; }
virtual wxWindow *ReParent( wxWindow *newParent );
wxEvtHandler *GetEventHandler() const;

View File

@@ -74,6 +74,7 @@ class wxApp: public wxEvtHandler
wxWindow *GetTopWindow();
void SetTopWindow( wxWindow *win );
virtual int MainLoop();
void ExitMainLoop();
bool Initialized();
@@ -88,29 +89,26 @@ class wxApp: public wxEvtHandler
bool SendIdleEvents( wxWindow* win );
inline wxString GetAppName() const
{
if (m_appName != "")
return m_appName;
else return m_className;
}
{ if (m_appName != "") return m_appName; else return m_className; }
inline void SetAppName( const wxString& name ) { m_appName = name; }
inline void SetAppName(const wxString& name) { m_appName = name; };
inline wxString GetClassName() const { return m_className; }
inline void SetClassName( const wxString& name ) { m_className = name; }
const wxString& GetVendorName() const { return m_vendorName; }
void SetVendorName( const wxString& name ) { m_vendorName = name; }
inline void SetExitOnFrameDelete( bool flag ) { m_exitOnFrameDelete = flag; }
inline bool GetExitOnFrameDelete() const { return m_exitOnFrameDelete; }
void SetPrintMode(int WXUNUSED(mode) ) {};
int GetPrintMode() const { return wxPRINT_POSTSCRIPT; };
void SetPrintMode( int WXUNUSED(mode) ) {}
int GetPrintMode() const { return wxPRINT_POSTSCRIPT; }
/* override this function to create default log target of arbitrary
* user-defined classv (default implementation creates a wxLogGui object) */
virtual wxLog *CreateLogTarget();
/* GTK implementation */
// implementation
static bool Initialize();
static bool InitialzeVisual();
@@ -130,12 +128,11 @@ class wxApp: public wxEvtHandler
int argc;
char **argv;
static wxAppInitializerFunction m_appInitFn;
wxString m_vendorName;
wxString m_appName;
wxString m_className;
private:
wxString m_vendorName,
m_appName,
m_className;
static wxAppInitializerFunction m_appInitFn;
DECLARE_EVENT_TABLE()
};

View File

@@ -30,13 +30,17 @@ class wxPaintDC;
class wxWindow;
class wxFont;
/*
class wxFontNameDirectory;
*/
//-----------------------------------------------------------------------------
// global variables
//-----------------------------------------------------------------------------
/*
extern wxFontNameDirectory *wxTheFontNameDirectory;
*/
extern const char* wxEmptyString;
//-----------------------------------------------------------------------------
@@ -60,7 +64,6 @@ public:
int GetPointSize() const;
int GetFamily() const;
int GetFontId() const;
int GetStyle() const;
int GetWeight() const;
bool GetUnderlined() const;
@@ -87,6 +90,7 @@ public:
// no data :-)
};
/*
//-----------------------------------------------------------------------------
// wxFontDirectory
//-----------------------------------------------------------------------------
@@ -114,5 +118,6 @@ class wxFontNameDirectory: public wxObject
class wxHashTable *table;
int nextFontId;
};
*/
#endif // __GTKFONTH__

View File

@@ -83,7 +83,7 @@ public:
virtual wxToolBar* CreateToolBar( long style = wxNO_BORDER|wxTB_HORIZONTAL, wxWindowID id = -1,
const wxString& name = wxToolBarNameStr);
virtual wxToolBar *OnCreateToolBar( long style, wxWindowID id, const wxString& name );
virtual wxToolBar *GetToolBar(void) const;
virtual wxToolBar *GetToolBar() const;
inline void SetToolBar(wxToolBar *toolbar) { m_frameToolBar = toolbar; }
virtual void SetMenuBar( wxMenuBar *menuBar );
@@ -94,10 +94,10 @@ public:
virtual void SetIcon( const wxIcon &icon );
virtual void Iconize( bool WXUNUSED(iconize)) { }
virtual bool IsIconized(void) const { return FALSE; }
bool Iconized(void) const { return IsIconized(); }
virtual bool IsIconized() const { return FALSE; }
bool Iconized() const { return IsIconized(); }
virtual void Maximize(bool WXUNUSED(maximize)) {}
virtual void Restore(void) {}
virtual void Restore() {}
void OnActivate( wxActivateEvent &WXUNUSED(event) ) { } // called from docview.cpp
void OnSize( wxSizeEvent &event );
@@ -109,7 +109,6 @@ public:
virtual wxPoint GetClientAreaOrigin() const;
void DoMenuUpdates();
void DoMenuUpdates(wxMenu* menu);
virtual void OnInternalIdle();
wxMenuBar *m_frameMenuBar;

View File

@@ -41,10 +41,9 @@ class wxGauge: public wxControl
DECLARE_DYNAMIC_CLASS(wxGauge)
public:
inline wxGauge(void) { m_rangeMax = 0; m_gaugePos = 0; m_useProgressBar = TRUE; }
inline wxGauge() { m_rangeMax = 0; m_gaugePos = 0; m_useProgressBar = TRUE; }
inline wxGauge( wxWindow *parent, wxWindowID id,
int range,
inline wxGauge( wxWindow *parent, wxWindowID id, int range,
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize,
long style = wxGA_HORIZONTAL,
@@ -53,8 +52,7 @@ class wxGauge: public wxControl
{
Create(parent, id, range, pos, size, style, validator, name);
}
bool Create( wxWindow *parent, wxWindowID id,
int range,
bool Create( wxWindow *parent, wxWindowID id, int range,
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize,
long style = wxGA_HORIZONTAL,
@@ -64,13 +62,13 @@ class wxGauge: public wxControl
void SetBezelFace( int WXUNUSED(w) ) {};
void SetRange( int r );
void SetValue( int pos );
int GetShadowWidth(void) const { return 0; };
int GetBezelFace(void) const { return 0; };
int GetRange(void) const;
int GetValue(void) const;
int GetShadowWidth() const { return 0; };
int GetBezelFace() const { return 0; };
int GetRange() const;
int GetValue() const;
// Are we a Win95/GTK progress bar, or a normal gauge?
inline bool GetProgressBar(void) const { return m_useProgressBar; }
inline bool GetProgressBar() const { return m_useProgressBar; }
// implementation

View File

@@ -17,19 +17,20 @@
#pragma interface
#endif
class WXDLLEXPORT wxGDIObject: public wxObject
class wxGDIObject : public wxObject
{
DECLARE_DYNAMIC_CLASS(wxGDIObject)
public:
inline wxGDIObject(void) { m_visible = FALSE; };
inline ~wxGDIObject(void) {};
virtual bool GetVisible(void) { return m_visible; }
virtual void SetVisible(bool v) { m_visible = v; }
public:
inline wxGDIObject() { m_visible = FALSE; };
inline ~wxGDIObject() {};
virtual bool GetVisible() { return m_visible; }
virtual void SetVisible( bool visible ) { m_visible = visible; }
protected:
bool m_visible; // Can a pointer to this object be safely taken?
// - only if created within FindOrCreate...
bool m_visible; /* can a pointer to this object be safely taken?
* - only if created within FindOrCreate... */
};
#endif

View File

@@ -168,7 +168,7 @@ public:
virtual void SetSizeHints( int minW, int minH, int maxW = -1, int maxH = -1, int incW = -1, int incH = -1 );
// Dialog units translations. Implemented in wincmn.cpp.
/* Dialog units translations. Implemented in wincmn.cpp. */
wxPoint ConvertPixelsToDialog( const wxPoint& pt );
wxPoint ConvertDialogToPixels( const wxPoint& pt );
inline wxSize ConvertPixelsToDialog( const wxSize& sz )
@@ -198,8 +198,8 @@ public:
{ return m_parent; }
wxWindow *GetGrandParent() const
{ return (m_parent ? m_parent->m_parent : (wxWindow*)NULL); }
void SetParent( wxWindow *p )
{ m_parent = p; }
void SetParent( wxWindow *parent )
{ m_parent = parent; }
virtual wxWindow *ReParent( wxWindow *newParent );
wxEvtHandler *GetEventHandler() const;

View File

@@ -236,7 +236,7 @@ void DnDFrame::OnPaint(wxPaintEvent& /*event*/)
GetClientSize( &w, &h );
wxPaintDC dc(this);
dc.SetFont( wxFont( 24, wxDECORATIVE, wxNORMAL, wxNORMAL ) );
dc.SetFont( wxFont( 24, wxDECORATIVE, wxNORMAL, wxNORMAL, FALSE, "charter" ) );
dc.DrawText( "Drag text from here!", 20, h-22 );
}

View File

@@ -44,11 +44,6 @@
#include <math.h>
#ifdef __WXGTK__
#include "gdk/gdk.h"
#include "gtk/gtk.h"
#endif
#ifdef __WXMSW__
#ifdef DrawText
@@ -826,18 +821,6 @@ void wxPostScriptDC::SetFont (const wxFont& font)
m_font = font;
#ifdef __WXGTK__
char *name = wxTheFontNameDirectory->GetPostScriptName( m_font.GetFamily(),
m_font.GetWeight(),
m_font.GetStyle() );
if (!name) name = "Times-Roman";
*m_pstream << "/" << name << " reencodeISO def\n"
<< "/" << name << " findfont\n"
<< YLOG2DEVREL(font.GetPointSize())
<< " scalefont setfont\n";
#else
char buf[100];
const char *name;
const char *style = "";
int Style = m_font.GetStyle();
@@ -874,8 +857,9 @@ void wxPostScriptDC::SetFont (const wxFont& font)
style = "";
}
else if (Style == wxNORMAL && Weight == wxBOLD)
{
style = "-Bold";
}
else if (Style == wxITALIC && (Weight == wxNORMAL || Weight == wxLIGHT))
{
if (m_font.GetFamily () == wxROMAN)
@@ -905,15 +889,17 @@ void wxPostScriptDC::SetFont (const wxFont& font)
style = "-BoldOblique";
}
else
{
style = "";
}
char buf[100];
strcpy (buf, name);
strcat (buf, style);
*m_pstream << buf << " reencodeISO def\n";
*m_pstream << buf << " findfont\n";
// *m_pstream << (m_font.GetPointSize() * m_scaleFactor) << " scalefont setfont\n";
// No scale factor in this implementation?
*m_pstream << (m_font.GetPointSize()) << " scalefont setfont\n";
#endif
*m_pstream << YLOG2DEVREL(m_font.GetPointSize()) << " scalefont setfont\n";
}
void wxPostScriptDC::SetPen( const wxPen& pen )
@@ -1455,7 +1441,6 @@ void wxPostScriptDC::StartPage ()
m_logicalOriginX = 0;
m_logicalOriginY = 0;
*/
// Output scaling
long translate_x, translate_y;
double scale_x, scale_y;
@@ -1504,183 +1489,198 @@ void wxPostScriptDC::GetTextExtent (const wxString& string, long *x, long *y,
long *descent, long *externalLeading, wxFont *theFont,
bool WXUNUSED(use16))
{
// if (!m_pstream) return;
wxFont *fontToUse = theFont;
if (!fontToUse) fontToUse = (wxFont*) &m_font;
wxCHECK_RET( fontToUse, "GetTextExtent: no font defined" );
wxCHECK_RET( x, "GetTextExtent: x == NULL" );
wxCHECK_RET( y, "GetTextExtent: y == NULL" );
#if !USE_AFM_FOR_POSTSCRIPT
// Provide a VERY rough estimate (avoid using it)
// Chris Breeze 5/11/97: produces accurate results for mono-spaced
// font such as Courier (aka wxMODERN)
/* Provide a VERY rough estimate (avoid using it).
* Produces accurate results for mono-spaced font
* such as Courier (aka wxMODERN) */
int height = 12;
if (fontToUse)
{
height = fontToUse->GetPointSize();
}
*x = strlen (string) * height * 72 / 120;
*y = (long) (height * 1.32); // allow for descender
if (descent)
*descent = 0;
if (externalLeading)
*externalLeading = 0;
*y = (long) (height * 1.32); /* allow for descender */
if (descent) *descent = 0;
if (externalLeading) *externalLeading = 0;
#else
// +++++ start of contributed code +++++
// ************************************************************
// method for calculating string widths in postscript:
// read in the AFM (adobe font metrics) file for the
// actual font, parse it and extract the character widths
// and also the descender. this may be improved, but for now
// it works well. the AFM file is only read in if the
// font is changed. this may be chached in the future.
// calls to GetTextExtent with the font unchanged are rather
// efficient!!!
//
// for each font and style used there is an AFM file necessary.
// currently i have only files for the roman font family.
// i try to get files for the other ones!
//
// CAVE: the size of the string is currently always calculated
// in 'points' (1/72 of an inch). this should later on be
// changed to depend on the mapping mode.
// CAVE: the path to the AFM files must be set before calling this
// function. this is usually done by a call like the following:
// wxSetAFMPath("d:\\wxw161\\afm\\");
//
// example:
//
// wxPostScriptDC dc(NULL, TRUE);
// if (dc.Ok()){
// wxSetAFMPath("d:\\wxw161\\afm\\");
// dc.StartDoc("Test");
// dc.StartPage();
// long w,h;
// dc.SetFont(new wxFont(10, wxROMAN, wxNORMAL, wxNORMAL));
// dc.GetTextExtent("Hallo",&w,&h);
// dc.EndPage();
// dc.EndDoc();
// }
//
// by steve (stefan.hammes@urz.uni-heidelberg.de)
// created: 10.09.94
// updated: 14.05.95
/* method for calculating string widths in postscript:
/ read in the AFM (adobe font metrics) file for the
/ actual font, parse it and extract the character widths
/ and also the descender. this may be improved, but for now
/ it works well. the AFM file is only read in if the
/ font is changed. this may be chached in the future.
/ calls to GetTextExtent with the font unchanged are rather
/ efficient!!!
/
/ for each font and style used there is an AFM file necessary.
/ currently i have only files for the roman font family.
/ I try to get files for the other ones!
/
/ CAVE: the size of the string is currently always calculated
/ in 'points' (1/72 of an inch). this should later on be
/ changed to depend on the mapping mode.
/ CAVE: the path to the AFM files must be set before calling this
/ function. this is usually done by a call like the following:
/ wxSetAFMPath("d:\\wxw161\\afm\\");
/
/ example:
/
/ wxPostScriptDC dc(NULL, TRUE);
/ if (dc.Ok()){
/ wxSetAFMPath("d:\\wxw161\\afm\\");
/ dc.StartDoc("Test");
/ dc.StartPage();
/ long w,h;
/ dc.SetFont(new wxFont(10, wxROMAN, wxNORMAL, wxNORMAL));
/ dc.GetTextExtent("Hallo",&w,&h);
/ dc.EndPage();
/ dc.EndDoc();
/ }
/
/ by steve (stefan.hammes@urz.uni-heidelberg.de)
/ created: 10.09.94
/ updated: 14.05.95 */
assert(fontToUse && "void wxPostScriptDC::GetTextExtent: no font defined");
assert(x && "void wxPostScriptDC::GetTextExtent: x == NULL");
assert(y && "void wxPostScriptDC::GetTextExtent: y == NULL");
// these static vars are for storing the state between calls
/* these static vars are for storing the state between calls */
static int lastFamily= INT_MIN;
static int lastSize= INT_MIN;
static int lastStyle= INT_MIN;
static int lastWeight= INT_MIN;
static int lastDescender = INT_MIN;
static int lastWidths[256]; // widths of the characters
static int lastWidths[256]; /* widths of the characters */
// get actual parameters
/* get actual parameters */
const int Family = fontToUse->GetFamily();
const int Size = fontToUse->GetPointSize();
const int Style = fontToUse->GetStyle();
const int Weight = fontToUse->GetWeight();
// if we have another font, read the font-metrics
if(Family!=lastFamily||Size!=lastSize||Style!=lastStyle||Weight!=lastWeight){
// store actual values
/* if we have another font, read the font-metrics */
if (Family!=lastFamily || Size!=lastSize || Style!=lastStyle || Weight!=lastWeight)
{
/* store actual values */
lastFamily = Family;
lastSize = Size;
lastStyle = Style;
lastWeight = Weight;
// read in new font metrics **************************************
char *name = (char*) NULL;
// 1. construct filename ******************************************
/* MATTHEW: [2] Use wxTheFontNameDirectory */
const char *name;
switch (Family)
{
case wxMODERN:
{
if ((Style == wxITALIC) && (Weight == wxBOLD)) name = "CourBoO";
else if ((Style != wxITALIC) && (Weight == wxBOLD)) name = "CourBo";
else if ((Style == wxITALIC) && (Weight != wxBOLD)) name = "Cour0";
else name = "Cour";
}
break;
case wxROMAN:
{
if ((Style == wxITALIC) && (Weight == wxBOLD)) name = "TimesBoO";
else if ((Style != wxITALIC) && (Weight == wxBOLD)) name = "TimesBo";
else if ((Style == wxITALIC) && (Weight != wxBOLD)) name = "TimesO";
else if name = "TimesRo"; /* no typo */
}
break;
default:
{
if ((Style == wxITALIC) && (Weight == wxBOLD)) name = "HelvBoO";
else if ((Style != wxITALIC) && (Weight == wxBOLD)) name = "HelvBo";
else if ((Style == wxITALIC) && (Weight != wxBOLD)) name = "Helv0";
else if ((Style != wxITALIC) && (Weight != wxBOLD)) name = "Helv";
}
break;
}
// Julian - we'll need to do this a different way now we've removed the
// font directory system. Must find Stefan's original code.
name = wxTheFontNameDirectory->GetAFMName(Family, Weight, Style);
if (!name)
name = "unknown";
// get the directory of the AFM files
/* get the directory of the AFM files */
char afmName[256];
afmName[0] = 0;
if (wxGetAFMPath())
strcpy(afmName,wxGetAFMPath());
if (wxGetAFMPath()) strcpy( afmName, wxGetAFMPath() );
// 2. open and process the file **********************************
// a short explanation of the AFM format:
// we have for each character a line, which gives its size
// e.g.:
//
// C 63 ; WX 444 ; N question ; B 49 -14 395 676 ;
//
// that means, we have a character with ascii code 63, and width
// (444/1000 * fontSize) points.
// the other data is ignored for now!
//
// when the font has changed, we read in the right AFM file and store the
// character widths in an array, which is processed below (see point 3.).
// new elements JC Sun Aug 25 23:21:44 MET DST 1996
/* 2. open and process the file
/ a short explanation of the AFM format:
/ we have for each character a line, which gives its size
/ e.g.:
/
/ C 63 ; WX 444 ; N question ; B 49 -14 395 676 ;
/
/ that means, we have a character with ascii code 63, and width
/ (444/1000 * fontSize) points.
/ the other data is ignored for now!
/
/ when the font has changed, we read in the right AFM file and store the
/ character widths in an array, which is processed below (see point 3.). */
/* new elements JC Sun Aug 25 23:21:44 MET DST 1996 */
strcat(afmName,name);
strcat(afmName,".afm");
FILE *afmFile = fopen(afmName,"r");
if(afmFile==NULL){
if ( afmFile==NULL )
{
wxLogDebug( "GetTextExtent: can't open AFM file '%s'\n", afmName );
wxLogDebug( " using approximate values\n");
int i;
for (i=0; i<256; i++) lastWidths[i] = 500; // an approximate value
lastDescender = -150; // dito.
}else{
int i;
// init the widths array
for(i=0; i<256; i++) lastWidths[i]= INT_MIN;
// some variables for holding parts of a line
for (int i=0; i<256; i++) lastWidths[i] = 500; /* an approximate value */
lastDescender = -150; /* dito. */
}
else
{
/* init the widths array */
for(int i=0; i<256; i++) lastWidths[i] = INT_MIN;
/* some variables for holding parts of a line */
char cString[10],semiString[10],WXString[10],descString[20];
char upString[30], utString[30], encString[50];
char line[256];
int ascii,cWidth;
// read in the file and parse it
while(fgets(line,sizeof(line),afmFile)!=NULL){
// A.) check for descender definition
if(strncmp(line,"Descender",9)==0){
if((sscanf(line,"%s%d",descString,&lastDescender)!=2)
|| (strcmp(descString,"Descender")!=0)) {
wxLogDebug("AFM-file '%s': line '%s' has error (bad descender)\n",
afmName,line);
/* read in the file and parse it */
while(fgets(line,sizeof(line),afmFile)!=NULL)
{
/* A.) check for descender definition */
if (strncmp(line,"Descender",9)==0)
{
if ((sscanf(line,"%s%d",descString,&lastDescender)!=2) ||
(strcmp(descString,"Descender")!=0))
{
wxLogDebug( "AFM-file '%s': line '%s' has error (bad descender)\n", afmName,line );
}
}
// JC 1.) check for UnderlinePosition
else if(strncmp(line,"UnderlinePosition",17)==0){
if((sscanf(line,"%s%lf",upString,&UnderlinePosition)!=2)
|| (strcmp(upString,"UnderlinePosition")!=0)) {
wxLogDebug("AFM-file '%s': line '%s' has error (bad UnderlinePosition)\n",
afmName,line);
/* JC 1.) check for UnderlinePosition */
else if(strncmp(line,"UnderlinePosition",17)==0)
{
if ((sscanf(line,"%s%lf",upString,&UnderlinePosition)!=2) ||
(strcmp(upString,"UnderlinePosition")!=0))
{
wxLogDebug( "AFM-file '%s': line '%s' has error (bad UnderlinePosition)\n", afmName, line );
}
}
// JC 2.) check for UnderlineThickness
else if(strncmp(line,"UnderlineThickness",18)==0){
if((sscanf(line,"%s%lf",utString,&UnderlineThickness)!=2)
|| (strcmp(utString,"UnderlineThickness")!=0)) {
wxLogDebug("AFM-file '%s': line '%s' has error (bad UnderlineThickness)\n",
afmName,line);
/* JC 2.) check for UnderlineThickness */
else if(strncmp(line,"UnderlineThickness",18)==0)
{
if ((sscanf(line,"%s%lf",utString,&UnderlineThickness)!=2) ||
(strcmp(utString,"UnderlineThickness")!=0))
{
wxLogDebug( "AFM-file '%s': line '%s' has error (bad UnderlineThickness)\n", afmName, line );
}
}
// JC 3.) check for EncodingScheme
else if(strncmp(line,"EncodingScheme",14)==0){
if((sscanf(line,"%s%s",utString,encString)!=2)
|| (strcmp(utString,"EncodingScheme")!=0)) {
wxLogDebug("AFM-file '%s': line '%s' has error (bad EncodingScheme)\n",
afmName,line);
/* JC 3.) check for EncodingScheme */
else if(strncmp(line,"EncodingScheme",14)==0)
{
if ((sscanf(line,"%s%s",utString,encString)!=2) ||
(strcmp(utString,"EncodingScheme")!=0))
{
wxLogDebug("AFM-file '%s': line '%s' has error (bad EncodingScheme)\n", afmName, line );
}
else if (strncmp(encString, "AdobeStandardEncoding", 21))
{
@@ -1688,32 +1688,36 @@ void wxPostScriptDC::GetTextExtent (const wxString& string, long *x, long *y,
afmName,line, encString);
}
}
// B.) check for char-width
else if(strncmp(line,"C ",2)==0){
if(sscanf(line,"%s%d%s%s%d",
cString,&ascii,semiString,WXString,&cWidth)!=5){
/* B.) check for char-width */
else if(strncmp(line,"C ",2)==0)
{
if (sscanf(line,"%s%d%s%s%d",cString,&ascii,semiString,WXString,&cWidth)!=5)
{
wxLogDebug("AFM-file '%s': line '%s' has an error (bad character width)\n",afmName,line);
}
if(strcmp(cString,"C")!=0 || strcmp(semiString,";")!=0 ||
strcmp(WXString,"WX")!=0){
if(strcmp(cString,"C")!=0 || strcmp(semiString,";")!=0 || strcmp(WXString,"WX")!=0)
{
wxLogDebug("AFM-file '%s': line '%s' has a format error\n",afmName,line);
}
//printf(" char '%c'=%d has width '%d'\n",ascii,ascii,cWidth);
if(ascii>=0 && ascii<256){
lastWidths[ascii] = cWidth; // store width
}else{
/* printf(" char '%c'=%d has width '%d'\n",ascii,ascii,cWidth); */
if (ascii>=0 && ascii<256)
{
lastWidths[ascii] = cWidth; /* store width */
}
else
{
/* MATTHEW: this happens a lot; don't print an error */
// wxLogDebug("AFM-file '%s': ASCII value %d out of range\n",afmName,ascii);
/* wxLogDebug("AFM-file '%s': ASCII value %d out of range\n",afmName,ascii); */
}
}
// C.) ignore other entries.
/* C.) ignore other entries. */
}
fclose(afmFile);
}
// hack to compute correct values for german 'Umlaute'
// the correct way would be to map the character names
// like 'adieresis' to corresp. positions of ISOEnc and read
// these values from AFM files, too. Maybe later ...
/* hack to compute correct values for german 'Umlaute'
/ the correct way would be to map the character names
/ like 'adieresis' to corresp. positions of ISOEnc and read
/ these values from AFM files, too. Maybe later ... */
lastWidths[196] = lastWidths['A']; // <20>
lastWidths[228] = lastWidths['a']; // <20>
lastWidths[214] = lastWidths['O']; // <20>
@@ -1723,50 +1727,56 @@ void wxPostScriptDC::GetTextExtent (const wxString& string, long *x, long *y,
lastWidths[223] = lastWidths[251]; // <20>
}
// JC: calculate UnderlineThickness/UnderlinePosition
/* JC: calculate UnderlineThickness/UnderlinePosition */
m_underlinePosition = m_underlinePosition * fontToUse->GetPointSize() / 1000.0f;
m_underlineThickness = m_underlineThickness * fontToUse->GetPointSize() / 1000.0f * m_scaleFactor;
// 3. now the font metrics are read in, calc size *******************
// this is done by adding the widths of the characters in the
// string. they are given in 1/1000 of the size!
/* 3. now the font metrics are read in, calc size this
/ is done by adding the widths of the characters in the
/ string. they are given in 1/1000 of the size! */
long widthSum=0;
long height=Size; // by default
long height=Size; /* by default */
unsigned char *p;
for(p=(unsigned char *)(const char *)string; *p; p++){
if(lastWidths[*p]== INT_MIN){
wxLogDebug("GetTextExtent: undefined width for character '%c' (%d)\n",
*p,*p);
widthSum += (long)(lastWidths[' ']/1000.0F * Size); // assume space
}else{
for(p=(unsigned char *)(const char *)string; *p; p++)
{
if(lastWidths[*p]== INT_MIN)
{
wxLogDebug("GetTextExtent: undefined width for character '%c' (%d)\n", *p,*p);
widthSum += (long)(lastWidths[' ']/1000.0F * Size); /* assume space */
}
else
{
widthSum += (long)((lastWidths[*p]/1000.0F)*Size);
}
}
// add descender to height (it is usually a negative value)
if(lastDescender!=INT_MIN){
/* add descender to height (it is usually a negative value) */
if (lastDescender!=INT_MIN)
{
height += (long)(((-lastDescender)/1000.0F) * Size); /* MATTHEW: forgot scale */
}
// return size values
/* return size values */
*x = widthSum;
*y = height;
// return other parameters
if (descent){
if(lastDescender!=INT_MIN){
/* return other parameters */
if (descent)
{
if(lastDescender!=INT_MIN)
{
*descent = (long)(((-lastDescender)/1000.0F) * Size); /* MATTHEW: forgot scale */
}else{
}
else
{
*descent = 0;
}
}
// currently no idea how to calculate this!
// if (externalLeading) *externalLeading = 0;
if (externalLeading)
*externalLeading = 0;
/* currently no idea how to calculate this! */
if (externalLeading) *externalLeading = 0;
// ----- end of contributed code -----
#endif
}

View File

@@ -204,7 +204,7 @@ void wxGenericFontDialog::CreateWidgets(void)
*/
wxString
*families = new wxString[5],
*families = new wxString[6],
*styles = new wxString[3],
*weights = new wxString[3];
families[0] = _("Roman");
@@ -212,6 +212,7 @@ void wxGenericFontDialog::CreateWidgets(void)
families[2] = _("Modern");
families[3] = _("Script");
families[4] = _("Swiss" );
families[5] = _("Teletype" );
styles[0] = _("Normal");
styles[1] = _("Italic");
styles[2] = _("Slant");
@@ -401,6 +402,8 @@ char *wxFontFamilyIntToString(int family)
return "Modern";
case wxSCRIPT:
return "Script";
case wxTELETYPE:
return "Teletype";
case wxSWISS:
default:
return "Swiss";
@@ -421,6 +424,8 @@ int wxFontFamilyStringToInt(char *family)
return wxMODERN;
else if (strcmp(family, "Script") == 0)
return wxSCRIPT;
else if (strcmp(family, "Teletype") == 0)
return wxTELETYPE;
else return wxSWISS;
}

View File

@@ -384,8 +384,10 @@ bool wxApp::Initialize(void)
wxSystemSettings::Init();
/*
wxTheFontNameDirectory = new wxFontNameDirectory;
wxTheFontNameDirectory->Initialize();
*/
wxTheColourDatabase = new wxColourDatabase( wxKEY_STRING );
wxTheColourDatabase->Initialize();
@@ -426,8 +428,10 @@ void wxApp::CleanUp(void)
if (wxTheColourDatabase) delete wxTheColourDatabase;
wxTheColourDatabase = (wxColourDatabase*) NULL;
/*
if (wxTheFontNameDirectory) delete wxTheFontNameDirectory;
wxTheFontNameDirectory = (wxFontNameDirectory*) NULL;
*/
wxDeleteStockObjects();

View File

@@ -69,7 +69,9 @@ wxColourDatabase *wxTheColourDatabase = (wxColourDatabase *) NULL;
wxBitmapList *wxTheBitmapList = (wxBitmapList *) NULL;
/* X only font names */
/*
wxFontNameDirectory *wxTheFontNameDirectory;
*/
/* Stock objects */
wxFont *wxNORMAL_FONT;

View File

@@ -59,6 +59,24 @@ static void gtk_dialog_size_callback( GtkWidget *WXUNUSED(widget), GtkAllocation
win->GtkOnSize( alloc->x, alloc->y, alloc->width, alloc->height );
}
//-----------------------------------------------------------------------------
// "configure_event"
//-----------------------------------------------------------------------------
static gint gtk_dialog_configure_callback( GtkWidget *WXUNUSED(widget), GdkEventConfigure *event, wxDialog *win )
{
if (!win->HasVMT()) return FALSE;
win->m_x = event->x;
win->m_y = event->y;
wxMoveEvent mevent( wxPoint(win->m_x,win->m_y), win->GetId() );
mevent.SetEventObject( win );
win->GetEventHandler()->ProcessEvent( mevent );
return FALSE;
}
//-----------------------------------------------------------------------------
// wxDialog
//-----------------------------------------------------------------------------
@@ -107,9 +125,6 @@ bool wxDialog::Create( wxWindow *parent,
gtk_signal_connect( GTK_OBJECT(m_widget), "delete_event",
GTK_SIGNAL_FUNC(gtk_dialog_delete_callback), (gpointer)this );
gtk_signal_connect( GTK_OBJECT(m_widget), "size_allocate",
GTK_SIGNAL_FUNC(gtk_dialog_size_callback), (gpointer)this );
m_wxwindow = gtk_myfixed_new();
gtk_widget_show( m_wxwindow );
GTK_WIDGET_UNSET_FLAGS( m_wxwindow, GTK_CAN_FOCUS );
@@ -123,8 +138,13 @@ bool wxDialog::Create( wxWindow *parent,
gtk_widget_set_usize( m_widget, m_width, m_height );
if (m_parent) m_parent->AddChild( this );
gtk_signal_connect( GTK_OBJECT(m_widget), "size_allocate",
GTK_SIGNAL_FUNC(gtk_dialog_size_callback), (gpointer)this );
gtk_signal_connect( GTK_OBJECT(m_widget), "configure_event",
GTK_SIGNAL_FUNC(gtk_dialog_configure_callback), (gpointer)this );
if (m_parent) m_parent->AddChild( this );
PostCreation();

View File

@@ -22,7 +22,9 @@
// local data
//-----------------------------------------------------------------------------
/*
extern wxFontNameDirectory *wxTheFontNameDirectory;
*/
//-----------------------------------------------------------------------------
// wxFont
@@ -40,7 +42,6 @@ public:
int m_pointSize;
int m_family, m_style, m_weight;
bool m_underlined;
int m_fontId;
wxString m_faceName;
bool m_byXFontName;
@@ -57,7 +58,6 @@ wxFontRefData::wxFontRefData() : m_scaled_xfonts(wxKEY_INTEGER)
m_style = wxNORMAL;
m_weight = wxNORMAL;
m_underlined = FALSE;
m_fontId = 0;
m_font = (GdkFont *) NULL;
}
@@ -69,7 +69,6 @@ wxFontRefData::wxFontRefData( const wxFontRefData& data ) : m_scaled_xfonts(wxKE
m_style = data.m_style;
m_weight = data.m_weight;
m_underlined = data.m_underlined;
m_fontId = data.m_fontId;
m_faceName = data.m_faceName;
m_font = (GdkFont *) NULL;
if (data.m_font) m_font = gdk_font_ref( data.m_font );
@@ -114,27 +113,28 @@ wxFont::wxFont( int pointSize, int family, int style, int weight, bool underline
{
m_refData = new wxFontRefData();
if (family == wxDEFAULT) family = wxSWISS;
if (family == wxDEFAULT)
M_FONTDATA->m_family = wxSWISS;
else
M_FONTDATA->m_family = family;
if (!face.IsEmpty())
{
M_FONTDATA->m_faceName = face;
M_FONTDATA->m_fontId = wxTheFontNameDirectory->FindOrCreateFontId( face, family );
M_FONTDATA->m_family = wxTheFontNameDirectory->GetFamily( family );
}
else
{
M_FONTDATA->m_fontId = family;
M_FONTDATA->m_family = wxTheFontNameDirectory->GetFamily( family );
}
if (!face.IsEmpty()) M_FONTDATA->m_faceName = face;
if (style == wxDEFAULT) style = wxNORMAL;
if (style == wxDEFAULT)
M_FONTDATA->m_style = wxNORMAL;
else
M_FONTDATA->m_style = style;
if (weight == wxDEFAULT) weight = wxNORMAL;
if (weight == wxDEFAULT)
M_FONTDATA->m_weight = wxNORMAL;
else
M_FONTDATA->m_weight = weight;
if (pointSize == wxDEFAULT) pointSize = 12;
if (pointSize == wxDEFAULT)
M_FONTDATA->m_pointSize = 12;
else
M_FONTDATA->m_pointSize = pointSize;
M_FONTDATA->m_underlined = underlined;
if (wxTheFontList) wxTheFontList->Append( this );
@@ -186,8 +186,7 @@ wxString wxFont::GetFaceName() const
{
wxCHECK_MSG( Ok(), "", "invalid font" );
wxString s = wxTheFontNameDirectory->GetFontName( M_FONTDATA->m_fontId );
return s;
return M_FONTDATA->m_faceName;
}
int wxFont::GetFamily() const
@@ -215,13 +214,6 @@ wxString wxFont::GetFamilyString() const
return "wxDEFAULT";
}
int wxFont::GetFontId() const
{
wxCHECK_MSG( Ok(), 0, "invalid font" );
return M_FONTDATA->m_fontId; // stub
}
int wxFont::GetStyle() const
{
wxCHECK_MSG( Ok(), 0, "invalid font" );
@@ -333,10 +325,8 @@ void wxFont::SetUnderlined(bool underlined)
// get internal representation of font
//-----------------------------------------------------------------------------
// local help function
static GdkFont *wxLoadQueryNearestFont(int point_size, int fontid,
int style, int weight,
bool underlined);
static GdkFont *wxLoadQueryNearestFont( int point_size, int family, int style, int weight,
bool underlined, const wxString &facename );
GdkFont *wxFont::GetInternalFont( float scale ) const
{
@@ -346,9 +336,10 @@ GdkFont *wxFont::GetInternalFont(float scale) const
return (GdkFont*) NULL;
}
/* short cut if the special X font constructor has been used */
if (M_FONTDATA->m_byXFontName) return M_FONTDATA->m_font;
long int_scale = long(scale * 100.0 + 0.5); // key for fontlist
long int_scale = long(scale * 100.0 + 0.5); /* key for fontlist */
int point_scale = (M_FONTDATA->m_pointSize * 10 * int_scale) / 100;
GdkFont *font = (GdkFont *) NULL;
@@ -359,6 +350,7 @@ GdkFont *wxFont::GetInternalFont(float scale) const
}
else
{
/*
if ((int_scale == 100) &&
(M_FONTDATA->m_family == wxSWISS) &&
(M_FONTDATA->m_style == wxNORMAL) &&
@@ -369,14 +361,18 @@ GdkFont *wxFont::GetInternalFont(float scale) const
font = gdk_font_load( "-adobe-helvetica-medium-r-normal--*-120-*-*-*-*-*-*" );
}
else
*/
{
font = wxLoadQueryNearestFont( point_scale, M_FONTDATA->m_fontId, M_FONTDATA->m_style,
M_FONTDATA->m_weight, M_FONTDATA->m_underlined );
font = wxLoadQueryNearestFont( point_scale, M_FONTDATA->m_family, M_FONTDATA->m_style,
M_FONTDATA->m_weight, M_FONTDATA->m_underlined, M_FONTDATA->m_faceName );
}
M_FONTDATA->m_scaled_xfonts.Append( int_scale, (wxObject*)font );
}
if (!font)
{
wxLogError("could not load any font");
}
return font;
}
@@ -385,51 +381,89 @@ GdkFont *wxFont::GetInternalFont(float scale) const
// local utilities to find a X font
//-----------------------------------------------------------------------------
static GdkFont *wxLoadQueryFont(int point_size, int fontid, int style,
int weight, bool WXUNUSED(underlined))
static GdkFont*wxLoadQueryFont( int pointSize, int family, int style, int weight,
bool underlined, const wxString &facename )
{
char buffer[512];
char *name = wxTheFontNameDirectory->GetScreenName( fontid, weight, style );
char *xfamily = (char*) NULL;
char *xstyle = (char*) NULL;
char *xweight = (char*) NULL;
if (!name)
name = "-*-*-*-*-*-*-*-%d-*-*-*-*-*-*";
sprintf(buffer, name, point_size);
return gdk_font_load( buffer );
switch (family)
{
case wxDECORATIVE: xfamily = "lucida"; break;
case wxROMAN: xfamily = "times"; break;
case wxMODERN: xfamily = "courier"; break;
case wxSWISS: xfamily = "helvetica"; break;
case wxTELETYPE: xfamily = "lucidatypewriter"; break;
case wxSCRIPT: xfamily = "utopia"; break;
default: xfamily = "*";
}
static GdkFont *wxLoadQueryNearestFont(int point_size, int fontid,
int style, int weight,
bool underlined)
if (!facename.IsEmpty())
{
GdkFont *font;
sprintf( wxBuffer, "-*-%s-*-*-normal-*-*-*-*-*-*-*-*-*", facename.c_str() );
GdkFont *test = gdk_font_load( wxBuffer );
if (test)
{
gdk_font_unref( test );
xfamily = WXSTRINGCAST facename;
}
}
font = wxLoadQueryFont( point_size, fontid, style, weight, underlined );
switch (style)
{
case wxITALIC: xstyle = "i"; break;
case wxSLANT: xstyle = "o"; break;
case wxNORMAL: xstyle = "r"; break;
default: xstyle = "*"; break;
}
switch (weight)
{
case wxBOLD: xweight = "bold"; break;
case wxLIGHT:
case wxNORMAL: xweight = "medium"; break;
default: xweight = "*"; break;
}
if (!font) {
// search up and down by stepsize 10
sprintf( wxBuffer, "-*-%s-%s-%s-normal-*-*-%d-*-*-*-*-*-*",
xfamily, xweight, xstyle, pointSize);
return gdk_font_load( wxBuffer );
}
static GdkFont *wxLoadQueryNearestFont( int point_size, int family, int style, int weight,
bool underlined, const wxString &facename )
{
GdkFont *font = wxLoadQueryFont( point_size, family, style, weight, underlined, facename );
if (!font)
{
/* search up and down by stepsize 10 */
int max_size = point_size + 20 * (1 + (point_size/180));
int min_size = point_size - 20 * (1 + (point_size/180));
int i;
// Search for smaller size (approx.)
for (i=point_size-10; !font && i >= 10 && i >= min_size; i -= 10)
font = wxLoadQueryFont(i, fontid, style, weight, underlined);
// Search for larger size (approx.)
for (i=point_size+10; !font && i <= max_size; i += 10)
font = wxLoadQueryFont(i, fontid, style, weight, underlined);
// Try default family
if (!font && fontid != wxDEFAULT)
font = wxLoadQueryFont(point_size, wxDEFAULT, style,
weight, underlined);
// Bogus font
/* Search for smaller size (approx.) */
for (int i=point_size-10; !font && i >= 10 && i >= min_size; i -= 10)
font = wxLoadQueryFont(i, family, style, weight, underlined, facename );
/* Search for larger size (approx.) */
for (int i=point_size+10; !font && i <= max_size; i += 10)
font = wxLoadQueryFont( i, family, style, weight, underlined, facename );
/* Try default family */
if (!font && family != wxDEFAULT)
font = wxLoadQueryFont( point_size, wxDEFAULT, style, weight, underlined, facename );
/* Bogus font */
if (!font)
font = wxLoadQueryFont(120, wxDEFAULT, wxNORMAL, wxNORMAL,
underlined);
font = wxLoadQueryFont(120, wxDEFAULT, wxNORMAL, wxNORMAL, underlined, facename );
}
return font;
}
/*
//-----------------------------------------------------------------------------
// face names and index functions
//-----------------------------------------------------------------------------
@@ -510,9 +544,6 @@ static char *font_defaults[] = {
"ScreenItalic", "i",
"ScreenSlant", "o",
/*
"ScreenDefaultBase", "misc-fixed",
*/
"ScreenDefaultBase", "*-times",
"ScreenRomanBase", "*-times",
@@ -600,12 +631,11 @@ static void SearchResource(const char *prefix, const char **names, int count, ch
strcpy(resource, prefix);
for (j = 0; j < count; j++)
{
/* upon failure to find a matching fontname
in the default fonts above, we substitute more
and more values by _ so that at last ScreenMyFontBoldNormal
would turn into Screen___ and this will then get
converted to -${ScreenDefaultBase}${ScreenStdSuffix}
*/
// upon failure to find a matching fontname
// in the default fonts above, we substitute more
// and more values by _ so that at last ScreenMyFontBoldNormal
// would turn into Screen___ and this will then get
// converted to -${ScreenDefaultBase}${ScreenStdSuffix}
if (!(i & (1 << j)))
strcat(resource, names[j]);
@@ -613,7 +643,7 @@ static void SearchResource(const char *prefix, const char **names, int count, ch
strcat(resource, "_");
}
/* we previously search the Xt-resources here */
// we previously search the Xt-resources here
if (!internal)
{
@@ -635,14 +665,14 @@ static void SearchResource(const char *prefix, const char **names, int count, ch
if ((strcmp(internal,"-${ScreenDefaultBase}${ScreenStdSuffix}") == 0) &&
(strcmp(names[0], "Default") != 0))
{
/* we did not find any font name in the standard list.
this can (hopefully does) mean that someone supplied
the facename in the wxFont constructor so we insert
it here */
// we did not find any font name in the standard list.
// this can (hopefully does) mean that someone supplied
// the facename in the wxFont constructor so we insert
// it here
strcpy( resource,"-*-" ); /* any producer */
strcat( resource, names[0] ); /* facename */
strcat( resource, "${ScreenStdSuffix}" ); /* add size params later on */
strcpy( resource,"-*-" ); // any producer
strcat( resource, names[0] ); // facename
strcat( resource, "${ScreenStdSuffix}" ); // add size params later on
*v = copystring(resource);
}
else
@@ -696,7 +726,7 @@ void wxSuffixMap::Initialize(const char *resname, const char *devresname)
SearchResource(devresname, names, 3, &v);
/* Expand macros in the found string: */
// Expand macros in the found string:
found:
int len, closer = 0, startpos = 0;
@@ -775,7 +805,7 @@ found:
goto found;
}
}
/* We have a final value: */
// We have a final value:
map[k][j] = v;
}
}
@@ -978,3 +1008,5 @@ int wxFontNameDirectory::GetFamily(int fontid)
// font does not exist
return wxDEFAULT;
}
*/

View File

@@ -91,6 +91,10 @@ static gint gtk_frame_configure_callback( GtkWidget *WXUNUSED(widget), GdkEventC
win->m_x = event->x;
win->m_y = event->y;
wxMoveEvent mevent( wxPoint(win->m_x,win->m_y), win->GetId() );
mevent.SetEventObject( win );
win->GetEventHandler()->ProcessEvent( mevent );
return FALSE;
}

View File

@@ -384,8 +384,10 @@ bool wxApp::Initialize(void)
wxSystemSettings::Init();
/*
wxTheFontNameDirectory = new wxFontNameDirectory;
wxTheFontNameDirectory->Initialize();
*/
wxTheColourDatabase = new wxColourDatabase( wxKEY_STRING );
wxTheColourDatabase->Initialize();
@@ -426,8 +428,10 @@ void wxApp::CleanUp(void)
if (wxTheColourDatabase) delete wxTheColourDatabase;
wxTheColourDatabase = (wxColourDatabase*) NULL;
/*
if (wxTheFontNameDirectory) delete wxTheFontNameDirectory;
wxTheFontNameDirectory = (wxFontNameDirectory*) NULL;
*/
wxDeleteStockObjects();

View File

@@ -69,7 +69,9 @@ wxColourDatabase *wxTheColourDatabase = (wxColourDatabase *) NULL;
wxBitmapList *wxTheBitmapList = (wxBitmapList *) NULL;
/* X only font names */
/*
wxFontNameDirectory *wxTheFontNameDirectory;
*/
/* Stock objects */
wxFont *wxNORMAL_FONT;

View File

@@ -59,6 +59,24 @@ static void gtk_dialog_size_callback( GtkWidget *WXUNUSED(widget), GtkAllocation
win->GtkOnSize( alloc->x, alloc->y, alloc->width, alloc->height );
}
//-----------------------------------------------------------------------------
// "configure_event"
//-----------------------------------------------------------------------------
static gint gtk_dialog_configure_callback( GtkWidget *WXUNUSED(widget), GdkEventConfigure *event, wxDialog *win )
{
if (!win->HasVMT()) return FALSE;
win->m_x = event->x;
win->m_y = event->y;
wxMoveEvent mevent( wxPoint(win->m_x,win->m_y), win->GetId() );
mevent.SetEventObject( win );
win->GetEventHandler()->ProcessEvent( mevent );
return FALSE;
}
//-----------------------------------------------------------------------------
// wxDialog
//-----------------------------------------------------------------------------
@@ -107,9 +125,6 @@ bool wxDialog::Create( wxWindow *parent,
gtk_signal_connect( GTK_OBJECT(m_widget), "delete_event",
GTK_SIGNAL_FUNC(gtk_dialog_delete_callback), (gpointer)this );
gtk_signal_connect( GTK_OBJECT(m_widget), "size_allocate",
GTK_SIGNAL_FUNC(gtk_dialog_size_callback), (gpointer)this );
m_wxwindow = gtk_myfixed_new();
gtk_widget_show( m_wxwindow );
GTK_WIDGET_UNSET_FLAGS( m_wxwindow, GTK_CAN_FOCUS );
@@ -123,8 +138,13 @@ bool wxDialog::Create( wxWindow *parent,
gtk_widget_set_usize( m_widget, m_width, m_height );
if (m_parent) m_parent->AddChild( this );
gtk_signal_connect( GTK_OBJECT(m_widget), "size_allocate",
GTK_SIGNAL_FUNC(gtk_dialog_size_callback), (gpointer)this );
gtk_signal_connect( GTK_OBJECT(m_widget), "configure_event",
GTK_SIGNAL_FUNC(gtk_dialog_configure_callback), (gpointer)this );
if (m_parent) m_parent->AddChild( this );
PostCreation();

View File

@@ -22,7 +22,9 @@
// local data
//-----------------------------------------------------------------------------
/*
extern wxFontNameDirectory *wxTheFontNameDirectory;
*/
//-----------------------------------------------------------------------------
// wxFont
@@ -40,7 +42,6 @@ public:
int m_pointSize;
int m_family, m_style, m_weight;
bool m_underlined;
int m_fontId;
wxString m_faceName;
bool m_byXFontName;
@@ -57,7 +58,6 @@ wxFontRefData::wxFontRefData() : m_scaled_xfonts(wxKEY_INTEGER)
m_style = wxNORMAL;
m_weight = wxNORMAL;
m_underlined = FALSE;
m_fontId = 0;
m_font = (GdkFont *) NULL;
}
@@ -69,7 +69,6 @@ wxFontRefData::wxFontRefData( const wxFontRefData& data ) : m_scaled_xfonts(wxKE
m_style = data.m_style;
m_weight = data.m_weight;
m_underlined = data.m_underlined;
m_fontId = data.m_fontId;
m_faceName = data.m_faceName;
m_font = (GdkFont *) NULL;
if (data.m_font) m_font = gdk_font_ref( data.m_font );
@@ -114,27 +113,28 @@ wxFont::wxFont( int pointSize, int family, int style, int weight, bool underline
{
m_refData = new wxFontRefData();
if (family == wxDEFAULT) family = wxSWISS;
if (family == wxDEFAULT)
M_FONTDATA->m_family = wxSWISS;
else
M_FONTDATA->m_family = family;
if (!face.IsEmpty())
{
M_FONTDATA->m_faceName = face;
M_FONTDATA->m_fontId = wxTheFontNameDirectory->FindOrCreateFontId( face, family );
M_FONTDATA->m_family = wxTheFontNameDirectory->GetFamily( family );
}
else
{
M_FONTDATA->m_fontId = family;
M_FONTDATA->m_family = wxTheFontNameDirectory->GetFamily( family );
}
if (!face.IsEmpty()) M_FONTDATA->m_faceName = face;
if (style == wxDEFAULT) style = wxNORMAL;
if (style == wxDEFAULT)
M_FONTDATA->m_style = wxNORMAL;
else
M_FONTDATA->m_style = style;
if (weight == wxDEFAULT) weight = wxNORMAL;
if (weight == wxDEFAULT)
M_FONTDATA->m_weight = wxNORMAL;
else
M_FONTDATA->m_weight = weight;
if (pointSize == wxDEFAULT) pointSize = 12;
if (pointSize == wxDEFAULT)
M_FONTDATA->m_pointSize = 12;
else
M_FONTDATA->m_pointSize = pointSize;
M_FONTDATA->m_underlined = underlined;
if (wxTheFontList) wxTheFontList->Append( this );
@@ -186,8 +186,7 @@ wxString wxFont::GetFaceName() const
{
wxCHECK_MSG( Ok(), "", "invalid font" );
wxString s = wxTheFontNameDirectory->GetFontName( M_FONTDATA->m_fontId );
return s;
return M_FONTDATA->m_faceName;
}
int wxFont::GetFamily() const
@@ -215,13 +214,6 @@ wxString wxFont::GetFamilyString() const
return "wxDEFAULT";
}
int wxFont::GetFontId() const
{
wxCHECK_MSG( Ok(), 0, "invalid font" );
return M_FONTDATA->m_fontId; // stub
}
int wxFont::GetStyle() const
{
wxCHECK_MSG( Ok(), 0, "invalid font" );
@@ -333,10 +325,8 @@ void wxFont::SetUnderlined(bool underlined)
// get internal representation of font
//-----------------------------------------------------------------------------
// local help function
static GdkFont *wxLoadQueryNearestFont(int point_size, int fontid,
int style, int weight,
bool underlined);
static GdkFont *wxLoadQueryNearestFont( int point_size, int family, int style, int weight,
bool underlined, const wxString &facename );
GdkFont *wxFont::GetInternalFont( float scale ) const
{
@@ -346,9 +336,10 @@ GdkFont *wxFont::GetInternalFont(float scale) const
return (GdkFont*) NULL;
}
/* short cut if the special X font constructor has been used */
if (M_FONTDATA->m_byXFontName) return M_FONTDATA->m_font;
long int_scale = long(scale * 100.0 + 0.5); // key for fontlist
long int_scale = long(scale * 100.0 + 0.5); /* key for fontlist */
int point_scale = (M_FONTDATA->m_pointSize * 10 * int_scale) / 100;
GdkFont *font = (GdkFont *) NULL;
@@ -359,6 +350,7 @@ GdkFont *wxFont::GetInternalFont(float scale) const
}
else
{
/*
if ((int_scale == 100) &&
(M_FONTDATA->m_family == wxSWISS) &&
(M_FONTDATA->m_style == wxNORMAL) &&
@@ -369,14 +361,18 @@ GdkFont *wxFont::GetInternalFont(float scale) const
font = gdk_font_load( "-adobe-helvetica-medium-r-normal--*-120-*-*-*-*-*-*" );
}
else
*/
{
font = wxLoadQueryNearestFont( point_scale, M_FONTDATA->m_fontId, M_FONTDATA->m_style,
M_FONTDATA->m_weight, M_FONTDATA->m_underlined );
font = wxLoadQueryNearestFont( point_scale, M_FONTDATA->m_family, M_FONTDATA->m_style,
M_FONTDATA->m_weight, M_FONTDATA->m_underlined, M_FONTDATA->m_faceName );
}
M_FONTDATA->m_scaled_xfonts.Append( int_scale, (wxObject*)font );
}
if (!font)
{
wxLogError("could not load any font");
}
return font;
}
@@ -385,51 +381,89 @@ GdkFont *wxFont::GetInternalFont(float scale) const
// local utilities to find a X font
//-----------------------------------------------------------------------------
static GdkFont *wxLoadQueryFont(int point_size, int fontid, int style,
int weight, bool WXUNUSED(underlined))
static GdkFont*wxLoadQueryFont( int pointSize, int family, int style, int weight,
bool underlined, const wxString &facename )
{
char buffer[512];
char *name = wxTheFontNameDirectory->GetScreenName( fontid, weight, style );
char *xfamily = (char*) NULL;
char *xstyle = (char*) NULL;
char *xweight = (char*) NULL;
if (!name)
name = "-*-*-*-*-*-*-*-%d-*-*-*-*-*-*";
sprintf(buffer, name, point_size);
return gdk_font_load( buffer );
switch (family)
{
case wxDECORATIVE: xfamily = "lucida"; break;
case wxROMAN: xfamily = "times"; break;
case wxMODERN: xfamily = "courier"; break;
case wxSWISS: xfamily = "helvetica"; break;
case wxTELETYPE: xfamily = "lucidatypewriter"; break;
case wxSCRIPT: xfamily = "utopia"; break;
default: xfamily = "*";
}
static GdkFont *wxLoadQueryNearestFont(int point_size, int fontid,
int style, int weight,
bool underlined)
if (!facename.IsEmpty())
{
GdkFont *font;
sprintf( wxBuffer, "-*-%s-*-*-normal-*-*-*-*-*-*-*-*-*", facename.c_str() );
GdkFont *test = gdk_font_load( wxBuffer );
if (test)
{
gdk_font_unref( test );
xfamily = WXSTRINGCAST facename;
}
}
font = wxLoadQueryFont( point_size, fontid, style, weight, underlined );
switch (style)
{
case wxITALIC: xstyle = "i"; break;
case wxSLANT: xstyle = "o"; break;
case wxNORMAL: xstyle = "r"; break;
default: xstyle = "*"; break;
}
switch (weight)
{
case wxBOLD: xweight = "bold"; break;
case wxLIGHT:
case wxNORMAL: xweight = "medium"; break;
default: xweight = "*"; break;
}
if (!font) {
// search up and down by stepsize 10
sprintf( wxBuffer, "-*-%s-%s-%s-normal-*-*-%d-*-*-*-*-*-*",
xfamily, xweight, xstyle, pointSize);
return gdk_font_load( wxBuffer );
}
static GdkFont *wxLoadQueryNearestFont( int point_size, int family, int style, int weight,
bool underlined, const wxString &facename )
{
GdkFont *font = wxLoadQueryFont( point_size, family, style, weight, underlined, facename );
if (!font)
{
/* search up and down by stepsize 10 */
int max_size = point_size + 20 * (1 + (point_size/180));
int min_size = point_size - 20 * (1 + (point_size/180));
int i;
// Search for smaller size (approx.)
for (i=point_size-10; !font && i >= 10 && i >= min_size; i -= 10)
font = wxLoadQueryFont(i, fontid, style, weight, underlined);
// Search for larger size (approx.)
for (i=point_size+10; !font && i <= max_size; i += 10)
font = wxLoadQueryFont(i, fontid, style, weight, underlined);
// Try default family
if (!font && fontid != wxDEFAULT)
font = wxLoadQueryFont(point_size, wxDEFAULT, style,
weight, underlined);
// Bogus font
/* Search for smaller size (approx.) */
for (int i=point_size-10; !font && i >= 10 && i >= min_size; i -= 10)
font = wxLoadQueryFont(i, family, style, weight, underlined, facename );
/* Search for larger size (approx.) */
for (int i=point_size+10; !font && i <= max_size; i += 10)
font = wxLoadQueryFont( i, family, style, weight, underlined, facename );
/* Try default family */
if (!font && family != wxDEFAULT)
font = wxLoadQueryFont( point_size, wxDEFAULT, style, weight, underlined, facename );
/* Bogus font */
if (!font)
font = wxLoadQueryFont(120, wxDEFAULT, wxNORMAL, wxNORMAL,
underlined);
font = wxLoadQueryFont(120, wxDEFAULT, wxNORMAL, wxNORMAL, underlined, facename );
}
return font;
}
/*
//-----------------------------------------------------------------------------
// face names and index functions
//-----------------------------------------------------------------------------
@@ -510,9 +544,6 @@ static char *font_defaults[] = {
"ScreenItalic", "i",
"ScreenSlant", "o",
/*
"ScreenDefaultBase", "misc-fixed",
*/
"ScreenDefaultBase", "*-times",
"ScreenRomanBase", "*-times",
@@ -600,12 +631,11 @@ static void SearchResource(const char *prefix, const char **names, int count, ch
strcpy(resource, prefix);
for (j = 0; j < count; j++)
{
/* upon failure to find a matching fontname
in the default fonts above, we substitute more
and more values by _ so that at last ScreenMyFontBoldNormal
would turn into Screen___ and this will then get
converted to -${ScreenDefaultBase}${ScreenStdSuffix}
*/
// upon failure to find a matching fontname
// in the default fonts above, we substitute more
// and more values by _ so that at last ScreenMyFontBoldNormal
// would turn into Screen___ and this will then get
// converted to -${ScreenDefaultBase}${ScreenStdSuffix}
if (!(i & (1 << j)))
strcat(resource, names[j]);
@@ -613,7 +643,7 @@ static void SearchResource(const char *prefix, const char **names, int count, ch
strcat(resource, "_");
}
/* we previously search the Xt-resources here */
// we previously search the Xt-resources here
if (!internal)
{
@@ -635,14 +665,14 @@ static void SearchResource(const char *prefix, const char **names, int count, ch
if ((strcmp(internal,"-${ScreenDefaultBase}${ScreenStdSuffix}") == 0) &&
(strcmp(names[0], "Default") != 0))
{
/* we did not find any font name in the standard list.
this can (hopefully does) mean that someone supplied
the facename in the wxFont constructor so we insert
it here */
// we did not find any font name in the standard list.
// this can (hopefully does) mean that someone supplied
// the facename in the wxFont constructor so we insert
// it here
strcpy( resource,"-*-" ); /* any producer */
strcat( resource, names[0] ); /* facename */
strcat( resource, "${ScreenStdSuffix}" ); /* add size params later on */
strcpy( resource,"-*-" ); // any producer
strcat( resource, names[0] ); // facename
strcat( resource, "${ScreenStdSuffix}" ); // add size params later on
*v = copystring(resource);
}
else
@@ -696,7 +726,7 @@ void wxSuffixMap::Initialize(const char *resname, const char *devresname)
SearchResource(devresname, names, 3, &v);
/* Expand macros in the found string: */
// Expand macros in the found string:
found:
int len, closer = 0, startpos = 0;
@@ -775,7 +805,7 @@ found:
goto found;
}
}
/* We have a final value: */
// We have a final value:
map[k][j] = v;
}
}
@@ -978,3 +1008,5 @@ int wxFontNameDirectory::GetFamily(int fontid)
// font does not exist
return wxDEFAULT;
}
*/

View File

@@ -91,6 +91,10 @@ static gint gtk_frame_configure_callback( GtkWidget *WXUNUSED(widget), GdkEventC
win->m_x = event->x;
win->m_y = event->y;
wxMoveEvent mevent( wxPoint(win->m_x,win->m_y), win->GetId() );
mevent.SetEventObject( win );
win->GetEventHandler()->ProcessEvent( mevent );
return FALSE;
}

View File

@@ -87,7 +87,6 @@ LIB_CPP_SRC=\
motif/dcmemory.cpp \
motif/dcscreen.cpp \
motif/dialog.cpp \
motif/dirdlg.cpp \
motif/dnd.cpp \
motif/filedlg.cpp \
motif/font.cpp \
@@ -132,6 +131,7 @@ LIB_CPP_SRC=\
generic/choicdgg.cpp \
generic/colrdlgg.cpp \
generic/dcpsg.cpp \
generic/dirdlgg.cpp \
generic/fontdlgg.cpp \
generic/gridg.cpp \
generic/helpext.cpp \