///////////////////////////////////////////////////////////////////////////////
-// Name: univ/themes/gtk.cpp
+// Name: src/univ/themes/gtk.cpp
// Purpose: wxUniversal theme implementing GTK-like LNF
// Author: Vadim Zeitlin
// Modified by:
const wxBitmap& bitmap,
const wxRect& rect,
int flags = 0,
- long style = 0);
+ long style = 0,
+ int tbarStyle = 0);
virtual void DrawTextLine(wxDC& dc,
const wxString& text,
const wxBitmap& bitmap,
const wxRect& rectOrig,
int flags,
- long WXUNUSED(style))
+ long WXUNUSED(style),
+ int tbarStyle)
{
// we don't draw the separators at all
if ( !label.empty() || bitmap.Ok() )
DrawBackground(dc, wxSCHEME_COLOUR(m_scheme, CONTROL_CURRENT), rect);
}
- dc.DrawLabel(label, bitmap, rect, wxALIGN_CENTRE);
+ if(tbarStyle & wxTB_TEXT)
+ {
+ if(tbarStyle & wxTB_HORIZONTAL)
+ {
+ dc.DrawLabel(label, bitmap, rect, wxALIGN_CENTRE);
+ }
+ else
+ {
+ dc.DrawLabel(label, bitmap, rect, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL);
+ }
+ }
+ else
+ {
+ int xpoint = (rect.GetLeft() + rect.GetRight() + 1 - bitmap.GetWidth()) / 2;
+ int ypoint = (rect.GetTop() + rect.GetBottom() + 1 - bitmap.GetHeight()) / 2;
+ dc.DrawBitmap(bitmap, xpoint, ypoint);
+ }
}
}
} else
#endif // wxUSE_BMPBUTTON
#if wxUSE_BUTTON || wxUSE_TOGGLEBTN
- if ( 0
+ if ( 0
# if wxUSE_BUTTON
- || wxDynamicCast(window, wxButton)
+ || wxDynamicCast(window, wxButton)
# endif // wxUSE_BUTTON
# if wxUSE_TOGGLEBTN
- || wxDynamicCast(window, wxToggleButton)
+ || wxDynamicCast(window, wxToggleButton)
# endif // wxUSE_TOGGLEBTN
)
{
const wxBitmap& bitmap,
const wxRect& rect,
int flags = 0,
- long style = 0);
+ long style = 0,
+ int tbarStyle = 0);
virtual void DrawTextLine(wxDC& dc,
const wxString& text,
const wxRect& rect,
const wxBitmap& bitmap,
const wxRect& rectOrig,
int flags,
- long style)
+ long style,
+ int tbarStyle)
{
if (style == wxTOOL_STYLE_BUTTON)
{
DrawBorder(dc, wxBORDER_RAISED, rect, flags);
}
- dc.DrawLabel(label, bitmap, rect, wxALIGN_CENTRE);
+ if(tbarStyle & wxTB_TEXT)
+ {
+ if(tbarStyle & wxTB_HORIZONTAL)
+ {
+ dc.DrawLabel(label, bitmap, rect, wxALIGN_CENTRE);
+ }
+ else
+ {
+ dc.DrawLabel(label, bitmap, rect, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL);
+ }
+ }
+ else
+ {
+ int xpoint = (rect.GetLeft() + rect.GetRight() + 1 - bitmap.GetWidth()) / 2;
+ int ypoint = (rect.GetTop() + rect.GetBottom() + 1 - bitmap.GetHeight()) / 2;
+ dc.DrawBitmap(bitmap, xpoint, ypoint);
+ }
}
else if (style == wxTOOL_STYLE_SEPARATOR)
{
#include "wx/app.h"
#include "wx/log.h"
#include "wx/frame.h"
+ #include "wx/dc.h"
#endif
#include "wx/univ/renderer.h"
{
if (tool->IsButton())
{
- rect.width = m_defaultWidth;
- rect.height = m_defaultHeight;
+ if(!HasFlag(wxTB_TEXT))
+ {
+ rect.width = m_defaultWidth;
+ rect.height = m_defaultHeight;
+ }
+ else
+ {
+ rect.width = m_defaultWidth +
+ GetFont().GetPointSize() * tool->GetLabel().length();
+ rect.height = m_defaultHeight;
+ }
}
else if (tool->IsSeparator())
{
{
if (tool->IsButton())
{
- rect.width = m_defaultWidth;
- rect.height = m_defaultHeight;
+ if(!HasFlag(wxTB_TEXT))
+ {
+ rect.width = m_defaultWidth;
+ rect.height = m_defaultHeight;
+ }
+ else
+ {
+ rect.width = m_defaultWidth +
+ GetFont().GetPointSize() * tool->GetLabel().length();
+ rect.height = m_defaultHeight;
+ }
}
else if (tool->IsSeparator())
{
return true;
}
+void wxToolBar::SetWindowStyleFlag( long style )
+{
+ wxToolBarBase::SetWindowStyleFlag(style);
+
+ m_needsLayout = true;
+
+ Refresh();
+}
+
void wxToolBar::DoLayout()
{
wxASSERT_MSG( m_needsLayout, _T("why are we called?") );
wxCoord x = m_xMargin,
y = m_yMargin;
- const wxCoord widthTool = IsVertical() ? m_defaultHeight : m_defaultWidth;
+ wxCoord widthTool = 0, maxWidthTool = 0;
+ wxCoord heightTool = 0, maxHeightTool = 0;
wxCoord margin = IsVertical() ? m_xMargin : m_yMargin;
wxCoord *pCur = IsVertical() ? &y : &x;
// TODO ugly number fiddling
if (tool->IsButton())
{
+ if (IsVertical())
+ {
+ widthTool = m_defaultHeight;
+ heightTool = m_defaultWidth;
+ if(HasFlag(wxTB_TEXT))
+ heightTool += GetFont().GetPointSize() * tool->GetLabel().length();
+ }
+ else
+ {
+ widthTool = m_defaultWidth;
+ if(HasFlag(wxTB_TEXT))
+ widthTool += GetFont().GetPointSize() * tool->GetLabel().length();
+
+ heightTool = m_defaultHeight;
+ }
+
+ if(widthTool > maxWidthTool) // Record max width of tool
+ {
+ maxWidthTool = widthTool;
+ }
+
+ if(heightTool > maxHeightTool) // Record max width of tool
+ {
+ maxHeightTool = heightTool;
+ }
+
*pCur += widthTool;
}
else if (tool->IsSeparator())
}
// calculate the total toolbar size
- wxCoord xMin = m_defaultWidth + 2*m_xMargin,
- yMin = m_defaultHeight + 2*m_yMargin;
+ wxCoord xMin, yMin;
+
+ if(!HasFlag(wxTB_TEXT))
+ {
+ xMin = m_defaultWidth + 2*m_xMargin;
+ yMin = m_defaultHeight + 2*m_yMargin;
+ }
+ else
+ {
+ if (IsVertical())
+ {
+ xMin = heightTool + 2*m_xMargin;
+ yMin = widthTool + 2*m_xMargin;
+ }
+ else
+ {
+ xMin = maxWidthTool + 2*m_xMargin;
+ yMin = heightTool + 2*m_xMargin;
+ }
+ }
m_maxWidth = x < xMin ? xMin : x;
m_maxHeight = y < yMin ? yMin : y;
// prepare the variables used below
wxDC& dc = renderer->GetDC();
wxRenderer *rend = renderer->GetRenderer();
- // dc.SetFont(GetFont()); -- uncomment when we support labels
+ dc.SetFont(GetFont());
// draw the border separating us from the menubar (if there is no menubar
// we probably shouldn't draw it?)
wxBitmap bitmap;
if ( !tool->IsSeparator() )
{
- // label = tool->GetLabel();
+ label = tool->GetLabel();
bitmap = tool->GetBitmap();
}
//else: leave both the label and the bitmap invalid to draw a separator
if ( !tool->IsControl() )
{
- rend->DrawToolBarButton(dc, label, bitmap, rectTool, flags, tool->GetStyle());
+ int tbStyle = 0;
+ if(HasFlag(wxTB_TEXT))
+ {
+ tbStyle |= wxTB_TEXT;
+ }
+
+ if(HasFlag(wxTB_VERTICAL))
+ {
+ tbStyle |= wxTB_VERTICAL;
+ }
+ else
+ {
+ tbStyle |= wxTB_HORIZONTAL;
+ }
+ rend->DrawToolBarButton(dc, label, bitmap, rectTool, flags, tool->GetStyle(), tbStyle);
}
else // control
{