#define _WX_FONT_H_
#if __WXMOTIF20__ && !__WXLESSTIF__
- #define wxMOTIF_NEW_FONT_HANDLING 1
#define wxMOTIF_USE_RENDER_TABLE 1
#else
- #define wxMOTIF_NEW_FONT_HANDLING 0
#define wxMOTIF_USE_RENDER_TABLE 0
#endif
+#define wxMOTIF_NEW_FONT_HANDLING wxMOTIF_USE_RENDER_TABLE
class wxXFont;
WXDisplay* display = NULL) const;
// These two are helper functions for convenient access of the above.
-#if wxMOTIF_NEW_FONT_HANDLING
- WXFontSet GetFontSet(double scale, WXDisplay* display = NULL) const;
-#else // if !wxMOTIF_NEW_FONT_HANDLING
- WXFontStructPtr GetFontStruct(double scale = 1.0,
- WXDisplay* display = NULL) const;
-#endif // wxMOTIF_NEW_FONT_HANDLING
#if wxMOTIF_USE_RENDER_TABLE
+ WXFontSet GetFontSet(double scale, WXDisplay* display = NULL) const;
WXRenderTable GetRenderTable(WXDisplay* display) const;
#else // if !wxMOTIF_USE_RENDER_TABLE
+ WXFontStructPtr GetFontStruct(double scale = 1.0,
+ WXDisplay* display = NULL) const;
WXFontList GetFontList(double scale = 1.0,
WXDisplay* display = NULL) const;
-#endif // wxMOTIF_USE_RENDER_TABLE
+#endif // !wxMOTIF_USE_RENDER_TABLE
// returns either a XmFontList or XmRenderTable, depending
// on Motif version
WXFontType GetFontType(WXDisplay* display) const;
double scale,
const wxString& string, int* width, int* height,
int* ascent, int* descent);
+extern void wxGetTextExtent(const wxWindow* window, const wxString& str,
+ int* width, int* height,
+ int* ascent, int* descent);
#define wxNO_COLORS 0x00
#define wxBACK_COLORS 0x01
virtual void DoSetLabel(const wxString& str);
virtual wxString DoGetLabel() const;
+ virtual wxSize DoGetBestSize() const;
protected:
WXWidget m_labelWidget;
};
// Process idle (send update events)
void OnInternalIdle();
+ // post-creation activities
+ void PostCreation();
+
+ // pre-creation activities
+ void PreCreation();
+
protected:
// Responds to colour changes: passes event on to children.
void OnSysColourChanged(wxSysColourChangedEvent& event);
if (!wxControl::Create(parent, id, pos, size, style|wxNO_BORDER, wxDefaultValidator, name))
return false;
- SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE));
-
SetTabView(new wxNotebookTabView(this));
return true;
// Draw grey background
if (m_view->GetTabStyle() & wxTAB_STYLE_COLOUR_INTERIOR)
{
- dc.SetBrush(*m_view->GetBackgroundBrush());
+ if(m_view->GetBackgroundBrush())
+ dc.SetBrush(*m_view->GetBackgroundBrush());
// Add 1 because the pen is transparent. Under Motif, may be different.
#ifdef __WXMOTIF__
m_tabViewRect.x = 300;
m_highlightColour = *wxWHITE;
m_shadowColour = wxColour(128, 128, 128);
- m_backgroundColour = wxSystemSettings::GetColour(wxSYS_COLOUR_BTNFACE);
+ // m_backgroundColour = wxSystemSettings::GetColour(wxSYS_COLOUR_BTNFACE);
m_textColour = *wxBLACK;
m_highlightPen = wxWHITE_PEN;
m_shadowPen = wxGREY_PEN;
- SetBackgroundColour(m_backgroundColour);
+ // SetBackgroundColour(m_backgroundColour);
m_tabFont = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT);
m_tabSelectedFont = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT);
m_window = (wxWindow *) NULL;
if (GetTabStyle() & wxTAB_STYLE_COLOUR_INTERIOR)
{
dc.SetPen(*wxTRANSPARENT_PEN);
- dc.SetBrush(*GetBackgroundBrush());
+ if(GetBackgroundBrush())
+ dc.SetBrush(*GetBackgroundBrush());
// Add 1 because the pen is transparent. Under Motif, may be different.
dc.DrawRectangle(
bool wxApp::Initialize(int& argcOrig, wxChar **argvOrig)
{
+#if wxUSE_INTL
+ wxFont::SetDefaultEncoding(wxLocale::GetSystemEncoding());
+#endif
+
if ( !wxAppBase::Initialize(argcOrig, argvOrig) )
return false;
wxWidgetHashTable = new wxHashTable(wxKEY_INTEGER);
-#if wxUSE_INTL
- wxFont::SetDefaultEncoding(wxLocale::GetSystemEncoding());
-#endif
-
return true;
}
wxMOTIF_STR("*sgiMode: True"),
wxMOTIF_STR("*useSchemes: all"),
#else // !__SGI__
- wxMOTIF_STR("*menuBar.marginHeight: 0"),
- wxMOTIF_STR("*menuBar.shadowThickness: 1"),
- wxMOTIF_STR("*background: #c0c0c0"),
- wxMOTIF_STR("*foreground: black"),
+#if !wxMOTIF_USE_RENDER_TABLE
+ wxMOTIF_STR("*.fontList: -*-helvetica-medium-r-normal-*-*-120-*-*-*-*-*-*"),
+#else
+ wxMOTIF_STR("*wxDefaultRendition.fontName: -*-helvetica-medium-r-normal-*-*-120-*-*-*-*-*-*"),
+ wxMOTIF_STR("*wxDefaultRendition.fontType: FONT_IS_FONTSET"),
+ wxMOTIF_STR("*.renderTable: wxDefaultRendition"),
+#endif
+ wxMOTIF_STR("*listBox.background: white"),
+ wxMOTIF_STR("*text.background: white"),
+ wxMOTIF_STR("*comboBox.Text.background: white"),
+ wxMOTIF_STR("*comboBox.List.background: white"),
#endif // __SGI__/!__SGI__
NULL
};
{
if( !CreateControl( parent, id, pos, size, style, validator, name ) )
return false;
+ PreCreation();
m_bmpNormal = m_bmpNormalOriginal = bitmap;
m_bmpSelected = m_bmpSelectedOriginal = bitmap;
m_mainWidget = (WXWidget) buttonWidget;
- ChangeFont(false);
-
- ChangeBackgroundColour ();
-
- DoSetBitmap();
-
XtAddCallback (buttonWidget,
XmNactivateCallback, (XtCallbackProc) wxButtonCallback,
(XtPointer) this);
if( size.x != -1 ) best.x = size.x;
if( size.y != -1 ) best.y = size.y;
+ PostCreation();
+ DoSetBitmap();
+
AttachWidget (parent, m_mainWidget, (WXWidget) NULL,
pos.x, pos.y, best.x, best.y);
if( !CreateControl( parent, id, pos, size, style, validator, name ) )
return false;
+ PreCreation();
wxXmString text( GetLabelText(label) );
if( size.x != -1 ) best.x = size.x;
if( size.y != -1 ) best.y = size.y;
+ PostCreation();
AttachWidget (parent, m_mainWidget, (WXWidget) NULL,
pos.x, pos.y, best.x, best.y);
- ChangeBackgroundColour();
-
return true;
}
#define wxHAS_3STATE 0
#endif
-
#include "wx/motif/private.h"
void wxCheckBoxCallback (Widget w, XtPointer clientData,
if( !wxControl::CreateControl( parent, id, pos, size, style, validator,
name ) )
return false;
+ PreCreation();
wxXmString text( GetLabelText(label) );
XmToggleButtonSetState ((Widget) m_mainWidget, False, True);
+ PostCreation();
AttachWidget( parent, m_mainWidget, (WXWidget)NULL,
pos.x, pos.y, size.x, size.y );
- ChangeBackgroundColour();
return true;
}
void wxCheckBox::ChangeBackgroundColour()
{
+ if (!m_backgroundColour.Ok())
+ return;
+
wxComputeColours (XtDisplay((Widget) m_mainWidget), & m_backgroundColour,
(wxColour*) NULL);
void wxCheckListBox::DoToggleItem( int n, int x )
{
- if( x < 23 )
+ if( x > 0 && x < 23 )
{
wxString label = wxListBox::GetString(n);
label[1u] = (!::IsChecked(label)) ? checkChar : uncheckChar;
{
if ( !CreateControl(parent, id, pos, size, style, validator, name) )
return false;
+ PreCreation();
Widget parentWidget = (Widget) parent->GetClientWidget();
XtVaSetValues((Widget) m_formWidget, XmNresizePolicy, XmRESIZE_NONE, NULL);
- ChangeFont(false);
- ChangeBackgroundColour();
-
+ PostCreation();
AttachWidget (parent, m_buttonWidget, m_formWidget,
pos.x, pos.y, bestSize.x, bestSize.y);
// Note that this causes the widget to be resized back
// to its original size! We therefore have to set the size
// back again. TODO: a better way in Motif?
- if (m_font.Ok())
+ if (m_mainWidget && m_font.Ok())
{
Display* dpy = XtDisplay((Widget) m_mainWidget);
int width, height, width1, height1;
{
if( !CreateControl( parent, id, pos, size, style, validator, name ) )
return false;
+ PreCreation();
m_noStrings = n;
SetValue(value);
- ChangeFont(false);
-
XtAddCallback (buttonWidget, XmNselectionCallback, (XtCallbackProc) wxComboBoxCallback,
(XtPointer) this);
XtAddCallback (buttonWidget, XmNvalueChangedCallback, (XtCallbackProc) wxComboBoxCallback,
(XtPointer) this);
+ PostCreation();
AttachWidget (parent, m_mainWidget, (WXWidget) NULL, pos.x, pos.y, size.x, size.y);
- ChangeBackgroundColour();
-
return true;
}
{
if( !CreateControl( parent, id, pos, size, style, validator, name ) )
return false;
+ PreCreation();
Widget parentWidget = (Widget) parent->GetClientWidget();
SetValue(value);
- ChangeFont(false);
-
XtAddCallback (buttonWidget, XmNselectionCallback,
(XtCallbackProc) wxComboBoxCallback,
(XtPointer) this);
if( size.x != wxDefaultCoord ) best.x = size.x;
if( size.y != wxDefaultCoord ) best.y = size.y;
+ PostCreation();
AttachWidget (parent, m_mainWidget, (WXWidget) NULL,
pos.x, pos.y, best.x, best.y);
- ChangeBackgroundColour();
-
return true;
}
void wxComboBox::ChangeFont(bool keepOriginalSize)
{
- if( m_font.Ok() )
+ if( m_font.Ok() && m_mainWidget != NULL )
{
wxDoChangeFont( GetXmText(this), m_font );
wxDoChangeFont( GetXmList(this), m_font );
// Item members
wxControl::wxControl()
{
- m_backgroundColour = *wxWHITE;
- m_foregroundColour = *wxBLACK;
-
m_inSetValue = false;
}
validator, name ) )
return false;
- m_backgroundColour = parent->GetBackgroundColour();
- m_foregroundColour = parent->GetForegroundColour();
- m_font = parent->GetFont();
-
return true;
}
gcvalues.graphics_exposures = False;
gcvalues.subwindow_mode = IncludeInferiors;
gcvalues.line_width = 1;
+#if !wxMOTIF_NEW_FONT_HANDLING
+ WXFontStructPtr pFontStruct = m_font.GetFontStruct(m_userScaleY*m_logicalScaleY, m_display);
+ gcvalues.font = ((XFontStruct*)pFontStruct)->fid;
+#endif
m_gc = (WXGC) XCreateGC (display, RootWindow (display, DefaultScreen (display)),
- GCForeground | GCBackground | GCGraphicsExposures | GCLineWidth | GCSubwindowMode,
+ GCForeground | GCBackground | GCGraphicsExposures | GCLineWidth | GCSubwindowMode
+#if !wxMOTIF_NEW_FONT_HANDLING
+ | GCFont
+#endif
+ ,
&gcvalues);
if (m_window->GetBackingPixmap())
if (m_window && m_window->GetBackingPixmap())
XSetStipple ((Display*) m_display,(GC) m_gcBacking, myStipple);
}
- else if (m_currentStipple.Ok()
+ else if (m_currentStyle == wxSTIPPLE && m_currentStipple.Ok()
&& ((!m_currentStipple.IsSameAs(oldStipple)) || !GET_OPTIMIZATION))
{
XSetStipple ((Display*) m_display, (GC) m_gc, (Pixmap) m_currentStipple.GetDrawable());
{
m_modalShowing = false;
m_eventLoop = NULL;
- m_backgroundColour = wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE);
}
bool wxDialog::Create(wxWindow *parent, wxWindowID id,
m_modalShowing = false;
m_eventLoop = NULL;
- m_backgroundColour = wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE);
- m_foregroundColour = *wxBLACK;
-
Widget dialogShell = (Widget) m_mainWidget;
SetTitle( title );
- m_font = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT);
- ChangeFont(false);
-
// Can't remember what this was about... but I think it's necessary.
#if wxUSE_INVISIBLE_RESIZE
if (pos.x > -1)
XtAddEventHandler(dialogShell,ExposureMask,False,
wxUniversalRepaintProc, (XtPointer) this);
- ChangeBackgroundColour();
+ PostCreation();
return true;
}
// headers
// ----------------------------------------------------------------------------
+// For compilers that support precompilation, includes "wx.h".
+#include "wx/wxprec.h"
+
#ifdef __VMS
#define XtParent XTPARENT
#define XtDisplay XTDISPLAY
#endif
-// For compilers that support precompilation, includes "wx.h".
-#include "wx/wxprec.h"
-
#ifndef WX_PRECOMP
#include "wx/event.h"
#include "wx/app.h"
Arg args[10];
int ac = 0;
- wxComputeColours (dpy, & m_backgroundColour, (wxColour*) NULL);
+ if (m_backgroundColour.Ok())
+ {
+ wxComputeColours (dpy, & m_backgroundColour, (wxColour*) NULL);
- XtSetArg(args[ac], XmNbackground, g_itemColors[wxBACK_INDEX].pixel); ac++;
- XtSetArg(args[ac], XmNtopShadowColor, g_itemColors[wxTOPS_INDEX].pixel); ac++;
- XtSetArg(args[ac], XmNbottomShadowColor, g_itemColors[wxBOTS_INDEX].pixel); ac++;
- XtSetArg(args[ac], XmNforeground, g_itemColors[wxFORE_INDEX].pixel); ac++;
+ XtSetArg(args[ac], XmNbackground, g_itemColors[wxBACK_INDEX].pixel); ac++;
+ XtSetArg(args[ac], XmNtopShadowColor, g_itemColors[wxTOPS_INDEX].pixel); ac++;
+ XtSetArg(args[ac], XmNbottomShadowColor, g_itemColors[wxBOTS_INDEX].pixel); ac++;
+ XtSetArg(args[ac], XmNforeground, g_itemColors[wxFORE_INDEX].pixel); ac++;
+ }
wxFont font = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT);
#if !wxMOTIF_NEW_FONT_HANDLING
WXFontStructPtr m_fontStruct; // XFontStruct
#endif
-#if !wxMOTIF_USE_RENDER_TABLE && !wxMOTIF_NEW_FONT_HANDLING
+#if !wxMOTIF_USE_RENDER_TABLE
WXFontList m_fontList; // Motif XmFontList
#else // if wxUSE_RENDER_TABLE
WXRenderTable m_renderTable; // Motif XmRenderTable
#if !wxMOTIF_NEW_FONT_HANDLING
m_fontStruct = (WXFontStructPtr) 0;
#endif
-#if !wxMOTIF_USE_RENDER_TABLE && !wxMOTIF_NEW_FONT_HANDLING
+#if !wxMOTIF_USE_RENDER_TABLE
m_fontList = (WXFontList) 0;
#else // if wxMOTIF_USE_RENDER_TABLE
m_renderTable = (WXRenderTable) 0;
#endif
}
-#if wxMOTIF_NEW_FONT_HANDLING
+#if wxMOTIF_USE_RENDER_TABLE
WXFontSet wxFont::GetFontSet(double scale, WXDisplay* display) const
{
if( descent ) *descent = logical.height + logical.y;
}
-#else // if !wxMOTIF_NEW_FONT_HANDLING
+#else // if !wxMOTIF_USE_RENDER_TABLE
void wxGetTextExtent(WXDisplay* display, const wxFont& font,
double scale, const wxString& str,
*ascent = ascent2;
}
-#endif // !wxMOTIF_NEW_FONT_HANDLING
+#endif // !wxMOTIF_USE_RENDER_TABLE
name ) )
return false;
- m_backgroundColour =
- wxSystemSettings::GetColour(wxSYS_COLOUR_APPWORKSPACE);
- m_foregroundColour = *wxBLACK;
- m_font = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT);
-
int x = pos.x, y = pos.y;
int width = size.x, height = size.y;
if (height > -1)
XtVaSetValues((Widget) m_frameShell, XmNheight, height, NULL);
- ChangeFont(false);
-
- ChangeBackgroundColour();
-
+ PostCreation();
PreResize();
wxSize newSize(width, height);
void wxFrame::DoGetSize(int *width, int *height) const
{
+ if (!m_frameShell)
+ {
+ *width = -1; *height = -1;
+ return;
+ }
+
Dimension xx, yy;
XtVaGetValues((Widget) m_frameShell, XmNwidth, &xx, XmNheight, &yy, NULL);
*width = xx; *height = yy;
{
if( !CreateControl( parent, id, pos, size, style, validator, name ) )
return false;
+ PreCreation();
Widget parentWidget = (Widget) parent->GetClientWidget();
if( size.x != wxDefaultCoord ) best.x = size.x;
if( size.y != wxDefaultCoord ) best.y = size.y;
- ChangeFont(false);
-
+ PostCreation();
AttachWidget (parent, m_mainWidget, (WXWidget) NULL, x, y,
best.x, best.y);
- ChangeBackgroundColour();
-
return true;
}
class wxSizeKeeper
{
int m_x, m_y;
- wxWindow* m_w;
+ int m_w, m_h;
+ wxWindow* m_wnd;
public:
wxSizeKeeper( wxWindow* w )
- : m_w( w )
+ : m_wnd( w )
{
- m_w->GetSize( &m_x, &m_y );
+ m_wnd->GetSize( &m_w, &m_h );
+ m_wnd->GetPosition( &m_x, &m_y );
}
void Restore()
{
int x, y;
- m_w->GetSize( &x, &y );
+ m_wnd->GetSize( &x, &y );
if( x != m_x || y != m_y )
- m_w->SetSize( -1, -1, m_x, m_y );
+ m_wnd->SetSize( m_x, m_y, m_w, m_h );
}
};
if( !wxControl::CreateControl( parent, id, pos, size, style,
validator, name ) )
return false;
+ PreCreation();
m_noItems = (unsigned int)n;
- m_backgroundColour = * wxWHITE;
Widget parentWidget = (Widget) parent->GetClientWidget();
Display* dpy = XtDisplay(parentWidget);
(XtCallbackProc) wxListBoxCallback,
(XtPointer) this);
+ PostCreation();
AttachWidget (parent, m_mainWidget, (WXWidget) NULL,
pos.x, pos.y, best.x, best.y);
- ChangeBackgroundColour();
-
return true;
}
SetName(name);
SetWindowStyleFlag(style);
- m_backgroundColour = wxSystemSettings::GetColour(wxSYS_COLOUR_APPWORKSPACE);
- m_foregroundColour = *wxBLACK;
- m_font = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT);
-
if ( id > -1 )
m_windowId = id;
else
clientWindow->AddChild(this);
SetMDIParentFrame(parent);
+ PreCreation();
int width = size.x;
int height = size.y;
XtAddEventHandler((Widget) m_mainWidget, ExposureMask,False,
wxUniversalRepaintProc, (XtPointer) this);
+ PostCreation();
AttachWidget (parent, m_mainWidget, (WXWidget) NULL, pos.x, pos.y, size.x, size.y);
- ChangeBackgroundColour();
-
XtManageChild((Widget) m_mainWidget);
SetTitle(title);
{
SetWindowStyleFlag(style);
- // m_windowParent = parent;
- // m_backgroundColour = wxSystemSettings::GetColour(wxSYS_COLOUR_APPWORKSPACE);
-
bool success = wxNotebook::Create(parent, wxID_NOTEBOOK_CLIENT_AREA, wxPoint(0, 0), wxSize(100, 100), 0);
if (success)
{
- wxFont font(10, wxSWISS, wxNORMAL, wxNORMAL);
- SetFont(font);
return true;
}
else
Append(-3, m_title) ;
AppendSeparator() ;
}
-
- m_backgroundColour = wxSystemSettings::GetColour(wxSYS_COLOUR_MENU);
- m_foregroundColour = wxSystemSettings::GetColour(wxSYS_COLOUR_MENUTEXT);
- m_font = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT);
}
// The wxWindow destructor will take care of deleting the submenus.
m_eventHandler = this;
m_menuBarFrame = NULL;
m_mainWidget = (WXWidget) NULL;
- m_backgroundColour = wxSystemSettings::GetColour(wxSYS_COLOUR_MENU);
- m_foregroundColour = wxSystemSettings::GetColour(wxSYS_COLOUR_MENUTEXT);
- m_font = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT);
}
wxMenuBar::wxMenuBar(size_t n, wxMenu *menus[], const wxArrayString& titles, long WXUNUSED(style))
// Create menubar
bool wxMenuBar::CreateMenuBar(wxFrame* parent)
{
+ m_parent = parent; // bleach... override it!
+ PreCreation();
+ m_parent = NULL;
+
if (m_mainWidget)
{
XtVaSetValues((Widget) parent->GetMainWidget(), XmNmenuBar, (Widget) m_mainWidget, NULL);
}
}
- SetBackgroundColour(m_backgroundColour);
- SetForegroundColour(m_foregroundColour);
- SetFont(m_font);
+ PostCreation();
XtVaSetValues((Widget) parent->GetMainWidget(), XmNmenuBar, (Widget) m_mainWidget, NULL);
XtRealizeWidget ((Widget) menuBarW);
{
Widget menu = (Widget) 0;
Widget buttonWidget = (Widget) 0;
+ Display* dpy = XtDisplay((Widget)parent);
Arg args[5];
XtSetArg (args[0], XmNnumColumns, m_numColumns);
XtSetArg (args[1], XmNpacking, (m_numColumns > 1) ? XmPACK_COLUMN : XmPACK_TIGHT);
+ if ( !m_font.Ok() )
+ {
+ if ( menuBar )
+ m_font = menuBar->GetFont();
+ else if ( GetInvokingWindow() )
+ m_font = GetInvokingWindow()->GetFont();
+ }
+
+ XtSetArg (args[2], (String)wxFont::GetFontTag(), m_font.GetFontTypeC(dpy) );
+
if (!pullDown)
{
- menu = XmCreatePopupMenu ((Widget) parent, wxMOTIF_STR("popup"), args, 2);
+ menu = XmCreatePopupMenu ((Widget) parent, wxMOTIF_STR("popup"), args, 3);
#if 0
XtAddCallback(menu,
XmNunmapCallback,
else
{
char mnem = wxFindMnemonic (title);
- menu = XmCreatePulldownMenu ((Widget) parent, wxMOTIF_STR("pulldown"), args, 2);
+ menu = XmCreatePulldownMenu ((Widget) parent, wxMOTIF_STR("pulldown"), args, 3);
wxString title2(wxStripMenuCodes(title));
wxXmString label_str(title2);
#endif
XmNlabelString, label_str(),
XmNsubMenuId, menu,
+ (String)wxFont::GetFontTag(), m_font.GetFontTypeC(dpy),
+ XmNpositionIndex, index,
NULL);
if (mnem != 0)
item->CreateItem(menu, menuBar, topMenu, i);
}
- SetBackgroundColour(m_backgroundColour);
- SetForegroundColour(m_foregroundColour);
- SetFont(m_font);
+ ChangeFont();
return buttonWidget;
}
void wxMenu::SetBackgroundColour(const wxColour& col)
{
m_backgroundColour = col;
+ if (!col.Ok())
+ return;
if (m_menuWidget)
wxDoChangeBackgroundColour(m_menuWidget, (wxColour&) col);
if (m_buttonWidget)
void wxMenu::SetForegroundColour(const wxColour& col)
{
m_foregroundColour = col;
+ if (!col.Ok())
+ return;
if (m_menuWidget)
wxDoChangeForegroundColour(m_menuWidget, (wxColour&) col);
if (m_buttonWidget)
bool wxMenuBar::SetBackgroundColour(const wxColour& col)
{
- m_backgroundColour = col;
+ if (!wxWindowBase::SetBackgroundColour(col))
+ return false;
+ if (!col.Ok())
+ return false;
if (m_mainWidget)
wxDoChangeBackgroundColour(m_mainWidget, (wxColour&) col);
bool wxMenuBar::SetForegroundColour(const wxColour& col)
{
- m_foregroundColour = col;
+ if (!wxWindowBase::SetForegroundColour(col))
+ return false;
+ if (!col.Ok())
+ return false;
if (m_mainWidget)
wxDoChangeForegroundColour(m_mainWidget, (wxColour&) col);
Display* dpy = XtDisplay(wParent);
- wxComputeColours (dpy, & m_backgroundColour, (wxColour*) NULL);
+ if (m_backgroundColour.Ok())
+ {
+ wxComputeColours (dpy, & m_backgroundColour, (wxColour*) NULL);
- XtSetArg(args[ac], XmNbackground, g_itemColors[wxBACK_INDEX].pixel); ac++;
- XtSetArg(args[ac], XmNtopShadowColor, g_itemColors[wxTOPS_INDEX].pixel); ac++;
- XtSetArg(args[ac], XmNbottomShadowColor, g_itemColors[wxBOTS_INDEX].pixel); ac++;
- XtSetArg(args[ac], XmNforeground, g_itemColors[wxFORE_INDEX].pixel); ac++;
+ XtSetArg(args[ac], XmNbackground, g_itemColors[wxBACK_INDEX].pixel); ac++;
+ XtSetArg(args[ac], XmNtopShadowColor, g_itemColors[wxTOPS_INDEX].pixel); ac++;
+ XtSetArg(args[ac], XmNbottomShadowColor, g_itemColors[wxBOTS_INDEX].pixel); ac++;
+ XtSetArg(args[ac], XmNforeground, g_itemColors[wxFORE_INDEX].pixel); ac++;
+ }
wxFont font = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT);
m_mainWidget = (WXWidget)popup;
- SetSize( 100, 100 ); // for child creation to work
+ wxAddWindowToTable( (Widget) m_mainWidget, this );
+
+ DoSetSizeIntr( -1, -1, 100, 100, 0, true );
XtSetMappedWhenManaged( popup, False );
XtRealizeWidget( popup );
-
+ XtManageChild ( popup );
+/*
+ XtTranslations ptr;
+ XtOverrideTranslations (popup,
+ ptr = XtParseTranslationTable ("<Configure>: resize()"));
+ XtFree ((char *) ptr);
+*/
return true;
}
if( show )
{
- XtPopup( (Widget)GetMainWidget(), XtGrabNone );
+ XtPopup( (Widget)GetMainWidget(), XtGrabNonexclusive );
}
else
{
m_selectedButton = -1;
m_noItems = 0;
m_noRowsOrCols = 0;
+ m_labelWidget = (WXWidget) 0;
}
bool wxRadioBox::Create(wxWindow *parent, wxWindowID id, const wxString& title,
{
if( !CreateControl( parent, id, pos, size, style, val, name ) )
return false;
+ PreCreation();
m_noItems = (unsigned int)n;
m_noRowsOrCols = majorDim;
(XtPointer) this);
}
- ChangeFont(false);
-
SetSelection (0);
XtRealizeWidget((Widget)m_mainWidget);
XtManageChild (radioBoxWidget);
XtManageChild ((Widget)m_mainWidget);
+ PostCreation();
AttachWidget (parent, m_mainWidget, NULL, pos.x, pos.y, size.x, size.y);
- ChangeBackgroundColour();
-
return true;
}
{
if( !CreateControl( parent, id, pos, size, style, validator, name ) )
return false;
+ PreCreation();
Widget parentWidget = (Widget) parent->GetClientWidget();
Display* dpy = XtDisplay(parentWidget);
XtManageChild (radioButtonWidget);
+ PostCreation();
AttachWidget (parent, m_mainWidget, (WXWidget) NULL,
pos.x, pos.y, size.x, size.y);
- ChangeBackgroundColour();
-
//copied from mac/radiobut.cpp (from here till "return true;")
m_cycle = this ;
{
if( !CreateControl( parent, id, pos, size, style, validator, name ) )
return false;
+ PreCreation();
wxSize newSize =
( style & wxHORIZONTAL ) ? wxSize( 140, 16 ) : wxSize( 16, 140 );
(wxOrientation)(style & (wxHORIZONTAL|wxVERTICAL)),
(void (*)())wxScrollBarCallback );
+ PostCreation();
AttachWidget (parent, m_mainWidget, (WXWidget) NULL,
pos.x, pos.y, newSize.x, newSize.y);
- ChangeBackgroundColour();
return true;
}
if( !CreateControl( parent, id, pos, size, style, validator, name ) )
return false;
+ PreCreation();
m_lineSize = 1;
m_windowStyle = style;
XtAddCallback (sliderWidget, XmNvalueChangedCallback, (XtCallbackProc) wxSliderCallback, (XtPointer) this);
XtAddCallback (sliderWidget, XmNdragCallback, (XtCallbackProc) wxSliderCallback, (XtPointer) this);
- ChangeFont(false);
+ PostCreation();
AttachWidget (parent, m_mainWidget, (WXWidget) NULL, pos.x, pos.y, size.x, size.y);
- ChangeBackgroundColour();
-
return true;
}
}
parent->AddChild( this );
+ PreCreation();
Widget parentWidget = (Widget) parent->GetClientWidget();
m_mainWidget = (WXWidget) XtVaCreateManagedWidget( "XmArrowButton",
XmNactivateCallback, (XtCallbackProc) StopTimerCallback,
(XtPointer) this );
+ PostCreation();
AttachWidget( parent, m_mainWidget, (WXWidget) NULL,
pos.x, pos.y, size.x, size.y );
- SetForegroundColour( parent->GetBackgroundColour() );
-
return true;
}
if( !CreateControl( parent, id, pos, size, style, wxDefaultValidator,
name ) )
return false;
+ PreCreation();
m_messageBitmap = bitmap;
m_messageBitmapOriginal = bitmap;
XmNalignment, XmALIGNMENT_BEGINNING,
NULL);
- ChangeBackgroundColour ();
-
- DoSetBitmap();
-
- ChangeFont(false);
-
wxSize actualSize(size);
// work around the cases where the bitmap is a wxNull(Icon/Bitmap)
if (actualSize.x == -1)
actualSize.x = bitmap.Ok() ? bitmap.GetWidth() : 1;
if (actualSize.y == -1)
actualSize.y = bitmap.Ok() ? bitmap.GetHeight() : 1;
+
+ PostCreation();
+ DoSetBitmap();
AttachWidget (parent, m_mainWidget, (WXWidget) NULL,
pos.x, pos.y, actualSize.x, actualSize.y);
if( !CreateControl( parent, id, pos, size, style,
wxDefaultValidator, name ) )
return false;
+ m_labelWidget = (WXWidget) 0;
+ PreCreation();
Widget parentWidget = (Widget) parent->GetClientWidget();
#endif
NULL);
}
-
+
+ PostCreation();
AttachWidget (parent, m_mainWidget, NULL, pos.x, pos.y, size.x, size.y);
- ChangeBackgroundColour();
return true;
}
if( !CreateControl( parent, id, pos, size, style,
wxDefaultValidator, name ) )
return false;
+ m_labelWidget = (WXWidget) 0;
+ PreCreation();
Widget parentWidget = (Widget) parent->GetClientWidget();
m_mainWidget = borderWidget ? borderWidget : m_labelWidget;
- AttachWidget (parent, m_mainWidget, (WXWidget) NULL,
- pos.x, pos.y, size.x, size.y);
+ SetLabel(label);
- ChangeBackgroundColour ();
+ wxSize best = GetBestSize();
+ if( size.x != -1 ) best.x = size.x;
+ if( size.y != -1 ) best.y = size.y;
- SetLabel(label);
+ PostCreation();
+ AttachWidget (parent, m_mainWidget, (WXWidget) NULL,
+ pos.x, pos.y, best.x, best.y);
return true;
}
dynamic ellipsizing of the label
*/
+wxSize wxStaticText::DoGetBestSize() const
+{
+ int w, h;
+ GetTextExtent(GetLabelText(), &w, &h, NULL, NULL, NULL);
+
+ return wxSize(w, h);
+}
+
#endif // wxUSE_STATTEXT
{
if( !CreateControl( parent, id, pos, size, style, validator, name ) )
return false;
+ PreCreation();
m_tempCallbackStruct = (void*) NULL;
m_modified = false;
m_processedDefault = false;
- m_backgroundColour = *wxWHITE;
-
Widget parentWidget = (Widget) parent->GetClientWidget();
Bool wantHorizScroll = (m_windowStyle & wxHSCROLL) != 0 ? True : False;
Arg args[8];
int count = 0;
XtSetArg (args[count], XmNscrollHorizontal, wantHorizScroll); ++count;
- XtSetArg (args[count], (String) wxFont::GetFontTag(),
- m_font.GetFontType( XtDisplay(parentWidget) ) ); ++count;
+ if( m_font.IsOk() )
+ XtSetArg (args[count], (String) wxFont::GetFontTag(),
+ m_font.GetFontType( XtDisplay(parentWidget) ) ); ++count;
XtSetArg (args[count], XmNwordWrap, wantWordWrap); ++count;
XtSetArg (args[count], XmNvalue, value.mb_str()); ++count;
XtSetArg (args[count], XmNeditable,
XtAddCallback((Widget) m_mainWidget, XmNlosingFocusCallback, (XtCallbackProc)wxTextWindowLoseFocusProc, (XtPointer)this);
+ PostCreation();
AttachWidget (parent, m_mainWidget, (WXWidget) NULL,
pos.x, pos.y, size.x, size.y);
- ChangeBackgroundColour();
-
return true;
}
int x, y;
window->GetTextExtent( value, &x, &y );
- if( x < 100 )
- x = 100;
+ if( x < 90 )
+ x = 90;
return wxSize( x + 2 * xmargin + 2 * highlight + 2 * shadow,
// MBN: +2 necessary: Lesstif bug or mine?
if( IsSingleLine() )
{
wxSize best = wxControl::DoGetBestSize();
-
- if( best.x < 110 ) best.x = 110;
+#if wxCHECK_MOTIF_VERSION( 2, 3 )
+ // OpenMotif 2.3 gives way too big X sizes
+ wxSize other_best = wxDoGetSingleTextCtrlBestSize
+ ( (Widget) GetTopWidget(), this );
+ return wxSize( other_best.x, best.y );
+#else
+ if( best.x < 90 ) best.x = 90;
return best;
+#endif
}
else
return wxWindow::DoGetBestSize();
if( !wxControl::CreateControl( parent, id, pos, size, style,
wxDefaultValidator, name ) )
return false;
+ PreCreation();
FixupStyle();
- m_backgroundColour = wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE);
-
Widget parentWidget = (Widget) parent->GetClientWidget();
Widget toolbar = XtVaCreateManagedWidget("toolbar",
m_mainWidget = (WXWidget) toolbar;
- ChangeFont(false);
-
wxPoint rPos = pos;
wxSize rSize = size;
if( rSize.x == -1 && GetParent() )
rSize.x = GetParent()->GetSize().x;
+ PostCreation();
AttachWidget (parent, m_mainWidget, (WXWidget) NULL,
rPos.x, rPos.y, rSize.x, rSize.y);
- ChangeBackgroundColour();
-
return true;
}
#include "wx/wxprec.h"
#include "wx/toplevel.h"
+#include "wx/settings.h"
+#include "wx/app.h"
#ifndef WX_PRECOMP
#include "wx/app.h"
wxTopLevelWindows.Append(this);
m_windowId = ( id > -1 ) ? id : NewControlId();
+ // MBN: More backward compatible, but uglier
+ m_font = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT);
+ m_inheritFont = true;
bool retval = XmDoCreateTLW( parent, id, title, pos, size, style, name );
// Change a widget's foreground and background colours.
void wxDoChangeForegroundColour(WXWidget widget, wxColour& foregroundColour)
{
+ if (!foregroundColour.Ok())
+ return;
+
// When should we specify the foreground, if it's calculated
// by wxComputeColours?
// Solution: say we start with the default (computed) foreground colour.
void wxDoChangeBackgroundColour(WXWidget widget, const wxColour& backgroundColour, bool changeArmColour)
{
+ if (!backgroundColour.Ok())
+ return;
+
wxComputeColours (XtDisplay((Widget) widget), & backgroundColour,
(wxColour*) NULL);
CreateBase(parent, id, pos, size, style, wxDefaultValidator, name);
parent->AddChild(this);
-
- m_backgroundColour = wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE);
- m_foregroundColour = *wxBLACK;
+ PreCreation();
//// TODO: we should probably optimize by only creating a
//// a drawing area if we have one or more scrollbars (wxVSCROLL/wxHSCROLL).
(XtPointer) this
);
- // Scrolled widget needs to have its colour changed or we get a little blue
- // square where the scrollbars abutt
- wxColour backgroundColour = wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE);
- wxDoChangeBackgroundColour(m_scrolledWindow, backgroundColour, true);
- wxDoChangeBackgroundColour(m_drawingArea, backgroundColour, true);
-
XmScrolledWindowSetAreas(
(Widget)m_scrolledWindow,
(Widget) 0, (Widget) 0,
(Widget) m_drawingArea);
+ PostCreation();
+
// Without this, the cursor may not be restored properly (e.g. in splitter
// sample).
SetCursor(*wxSTANDARD_CURSOR);
- SetFont(wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT));
DoSetSizeIntr(pos.x, pos.y, size.x,size.y, wxSIZE_AUTO, true);
return true;
}
m_drawingArea ) );
Dimension xx, yy;
- XtVaGetValues( widget,
- XmNwidth, &xx,
- XmNheight, &yy,
- NULL );
- if(x) *x = xx;
- if(y) *y = yy;
+ if (widget)
+ XtVaGetValues( widget,
+ XmNwidth, &xx,
+ XmNheight, &yy,
+ NULL );
+ if(x) *x = widget ? xx : -1;
+ if(y) *y = widget ? yy : -1;
}
void wxWindow::DoGetPosition(int *x, int *y) const
GetPosition(& oldX, & oldY);
}
+ if (x == -1)
+ x = oldX;
+ if (x == -1)
+ x = oldY;
+
if ( !(sizeFlags & wxSIZE_ALLOW_MINUS_ONE) )
{
if ( width == -1 )
int wxWindow::GetCharHeight() const
{
- wxCHECK_MSG( m_font.Ok(), 0, "valid window font needed" );
-
int height;
- wxGetTextExtent (GetXDisplay(), m_font, 1.0,
- "x", NULL, &height, NULL, NULL);
+ if (m_font.Ok())
+ wxGetTextExtent (GetXDisplay(), m_font, 1.0,
+ "x", NULL, &height, NULL, NULL);
+ else
+ wxGetTextExtent (this, "x", NULL, &height, NULL, NULL);
return height;
}
int wxWindow::GetCharWidth() const
{
- wxCHECK_MSG( m_font.Ok(), 0, "valid window font needed" );
-
int width;
- wxGetTextExtent (GetXDisplay(), m_font, 1.0,
- "x", &width, NULL, NULL, NULL);
+ if (m_font.Ok())
+ wxGetTextExtent (GetXDisplay(), m_font, 1.0,
+ "x", &width, NULL, NULL, NULL);
+ else
+ wxGetTextExtent (this, "x", &width, NULL, NULL, NULL);
return width;
}
{
const wxFont *fontToUse = theFont ? theFont : &m_font;
- wxCHECK_RET( fontToUse->Ok(), "valid window font needed" );
-
if (externalLeading)
*externalLeading = 0;
- wxGetTextExtent (GetXDisplay(), *fontToUse, 1.0,
- string, x, y, NULL, descent);
+ if (fontToUse->Ok())
+ wxGetTextExtent (GetXDisplay(), *fontToUse, 1.0,
+ string, x, y, NULL, descent);
+ else
+ wxGetTextExtent (this, string, x, y, NULL, descent);
}
// ----------------------------------------------------------------------------
void wxWindow::Refresh(bool eraseBack, const wxRect *rect)
{
+ Widget widget = (Widget) GetMainWidget();
+ if (!widget)
+ return;
m_needsRefresh = true;
- Display *display = XtDisplay((Widget) GetMainWidget());
- Window thisWindow = XtWindow((Widget) GetMainWidget());
+ Display *display = XtDisplay(widget);
+ Window thisWindow = XtWindow(widget);
XExposeEvent dummyEvent;
int width, height;
int width, height, width1, height1;
GetSize(& width, & height);
- wxDoChangeFont( GetLabelWidget(), m_font );
+ wxDoChangeFont( w, m_font );
GetSize(& width1, & height1);
if (keepOriginalSize && (width != width1 || height != height1))
}
}
+// Post-creation
+void wxWindow::PostCreation()
+{
+ ChangeFont();
+ ChangeForegroundColour();
+ ChangeBackgroundColour();
+}
+
+// Pre-creation
+void wxWindow::PreCreation()
+{
+ InheritAttributes();
+}
+
// ----------------------------------------------------------------------------
// global functions
// ----------------------------------------------------------------------------
}
+#if wxMOTIF_NEW_FONT_HANDLING
+
+#include <Xm/XmP.h>
+
+void wxGetTextExtent(const wxWindow* window, const wxString& str,
+ int* width, int* height, int* ascent, int* descent)
+{
+ Arg args[2];
+ int count = 0;
+ XmRendition rendition = NULL;
+ XmRenderTable table = NULL;
+ Widget w = (Widget) window->GetLabelWidget();
+
+ XtVaGetValues( w, XmNrenderTable, &table, NULL );
+ if (table == NULL)
+ table = XmeGetDefaultRenderTable(w, XmTEXT_RENDER_TABLE);
+
+ rendition = XmRenderTableGetRendition( table, "" );
+ XtSetArg( args[count], XmNfont, 0 ); ++count;
+ XtSetArg( args[count], XmNfontType, 0 ); ++count;
+ XmRenditionRetrieve( rendition, args, count );
+
+ if (args[1].value == XmFONT_IS_FONTSET)
+ {
+ XRectangle ink, logical;
+ WXFontSet fset = (WXFontSet) args[0].value;
+
+ XmbTextExtents( (XFontSet)fset, str.c_str(), str.length(),
+ &ink, &logical);
+
+ if( width ) *width = logical.width;
+ if( height ) *height = logical.height;
+ if( ascent ) *ascent = -logical.y;
+ if( descent ) *descent = logical.height + logical.y;
+ }
+ else
+ {
+ int direction, ascent2, descent2;
+ XCharStruct overall;
+ XFontStruct* fontStruct;
+
+ XmeRenderTableGetDefaultFont( table, &fontStruct );
+ XTextExtents(fontStruct, (const char*)str.c_str(), str.length(),
+ &direction, &ascent2, &descent2, &overall);
+
+ if ( width ) *width = overall.width;
+ if ( height ) *height = ascent2 + descent2;
+ if ( descent ) *descent = descent2;
+ if ( ascent ) *ascent = ascent2;
+ }
+}
+
+#else // if !wxMOTIF_NEW_FONT_HANDLING
+
+void wxGetTextExtent(const wxWindow* window, const wxString& str,
+ int* width, int* height, int* ascent, int* descent)
+{
+ XmFontList list = NULL;
+ XmFontContext cxt;
+ XmFontType type;
+ Widget w = (Widget) window->GetLabelWidget();
+
+ XtVaGetValues( w, XmNfontList, &list, NULL );
+ XmFontListInitFontContext( &cxt, list );
+
+ XmFontListEntry entry = XmFontListNextEntry( cxt );
+ XmFontListFreeFontContext( cxt );
+ XtPointer thing = XmFontListEntryGetFont( entry, &type );
+
+ if (type == XmFONT_IS_FONTSET)
+ {
+ XRectangle ink, logical;
+
+ XmbTextExtents( (XFontSet)thing, str.c_str(), str.length(),
+ &ink, &logical);
+
+ if( width ) *width = logical.width;
+ if( height ) *height = logical.height;
+ if( ascent ) *ascent = -logical.y;
+ if( descent ) *descent = logical.height + logical.y;
+ }
+ else
+ {
+ int direction, ascent2, descent2;
+ XCharStruct overall;
+
+ XTextExtents( (XFontStruct*)thing, (char*)(const char*)str.c_str(), str.length(),
+ &direction, &ascent2, &descent2, &overall);
+
+ if ( width ) *width = overall.width;
+ if ( height ) *height = ascent2 + descent2;
+ if ( descent ) *descent = descent2;
+ if ( ascent ) *ascent = ascent2;
+ }
+}
+
+#endif // !wxMOTIF_NEW_FONT_HANDLING
+
// ----------------------------------------------------------------------------
// wxNoOptimize: switch off size optimization
// ----------------------------------------------------------------------------