[ 1498016 ] 'Add wxUniv toolbar support wxTB_TEXT style' - with modifications.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@39486 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -297,6 +297,7 @@ wxUniv:
|
|||||||
|
|
||||||
- Send wxEVT_SCROLL_XXX events from wxSlider (Danny Raynor).
|
- Send wxEVT_SCROLL_XXX events from wxSlider (Danny Raynor).
|
||||||
- Implemented wxToggleButton (David Bjorkevik).
|
- Implemented wxToggleButton (David Bjorkevik).
|
||||||
|
- Label in Toolbar tools implemented (Danny Raynor).
|
||||||
|
|
||||||
wxX11:
|
wxX11:
|
||||||
|
|
||||||
|
@@ -206,7 +206,8 @@ public:
|
|||||||
const wxBitmap& bitmap,
|
const wxBitmap& bitmap,
|
||||||
const wxRect& rect,
|
const wxRect& rect,
|
||||||
int flags = 0,
|
int flags = 0,
|
||||||
long style = 0) = 0;
|
long style = 0,
|
||||||
|
int tbarStyle = 0) = 0;
|
||||||
|
|
||||||
// draw a (part of) line in the text control
|
// draw a (part of) line in the text control
|
||||||
virtual void DrawTextLine(wxDC& dc,
|
virtual void DrawTextLine(wxDC& dc,
|
||||||
@@ -626,8 +627,9 @@ public:
|
|||||||
const wxBitmap& bitmap,
|
const wxBitmap& bitmap,
|
||||||
const wxRect& rect,
|
const wxRect& rect,
|
||||||
int flags = 0,
|
int flags = 0,
|
||||||
long style = 0)
|
long style = 0,
|
||||||
{ m_renderer->DrawToolBarButton(dc, label, bitmap, rect, flags, style); }
|
int tbarStyle = 0)
|
||||||
|
{ m_renderer->DrawToolBarButton(dc, label, bitmap, rect, flags, style, tbarStyle); }
|
||||||
virtual void DrawTextLine(wxDC& dc,
|
virtual void DrawTextLine(wxDC& dc,
|
||||||
const wxString& text,
|
const wxString& text,
|
||||||
const wxRect& rect,
|
const wxRect& rect,
|
||||||
@@ -902,4 +904,3 @@ private:
|
|||||||
};
|
};
|
||||||
|
|
||||||
#endif // _WX_UNIV_RENDERER_H_
|
#endif // _WX_UNIV_RENDERER_H_
|
||||||
|
|
||||||
|
@@ -59,6 +59,8 @@ public:
|
|||||||
|
|
||||||
virtual bool Realize();
|
virtual bool Realize();
|
||||||
|
|
||||||
|
virtual void SetWindowStyleFlag( long style );
|
||||||
|
|
||||||
virtual wxToolBarToolBase *FindToolForPosition(wxCoord x, wxCoord y) const;
|
virtual wxToolBarToolBase *FindToolForPosition(wxCoord x, wxCoord y) const;
|
||||||
|
|
||||||
virtual void SetToolShortHelp(int id, const wxString& helpString);
|
virtual void SetToolShortHelp(int id, const wxString& helpString);
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
// Name: univ/themes/gtk.cpp
|
// Name: src/univ/themes/gtk.cpp
|
||||||
// Purpose: wxUniversal theme implementing GTK-like LNF
|
// Purpose: wxUniversal theme implementing GTK-like LNF
|
||||||
// Author: Vadim Zeitlin
|
// Author: Vadim Zeitlin
|
||||||
// Modified by:
|
// Modified by:
|
||||||
@@ -171,7 +171,8 @@ public:
|
|||||||
const wxBitmap& bitmap,
|
const wxBitmap& bitmap,
|
||||||
const wxRect& rect,
|
const wxRect& rect,
|
||||||
int flags = 0,
|
int flags = 0,
|
||||||
long style = 0);
|
long style = 0,
|
||||||
|
int tbarStyle = 0);
|
||||||
|
|
||||||
virtual void DrawTextLine(wxDC& dc,
|
virtual void DrawTextLine(wxDC& dc,
|
||||||
const wxString& text,
|
const wxString& text,
|
||||||
@@ -1683,7 +1684,8 @@ void wxGTKRenderer::DrawToolBarButton(wxDC& dc,
|
|||||||
const wxBitmap& bitmap,
|
const wxBitmap& bitmap,
|
||||||
const wxRect& rectOrig,
|
const wxRect& rectOrig,
|
||||||
int flags,
|
int flags,
|
||||||
long WXUNUSED(style))
|
long WXUNUSED(style),
|
||||||
|
int tbarStyle)
|
||||||
{
|
{
|
||||||
// we don't draw the separators at all
|
// we don't draw the separators at all
|
||||||
if ( !label.empty() || bitmap.Ok() )
|
if ( !label.empty() || bitmap.Ok() )
|
||||||
@@ -1704,8 +1706,24 @@ void wxGTKRenderer::DrawToolBarButton(wxDC& dc,
|
|||||||
DrawBackground(dc, wxSCHEME_COLOUR(m_scheme, CONTROL_CURRENT), rect);
|
DrawBackground(dc, wxSCHEME_COLOUR(m_scheme, CONTROL_CURRENT), rect);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(tbarStyle & wxTB_TEXT)
|
||||||
|
{
|
||||||
|
if(tbarStyle & wxTB_HORIZONTAL)
|
||||||
|
{
|
||||||
dc.DrawLabel(label, bitmap, rect, wxALIGN_CENTRE);
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
@@ -249,7 +249,8 @@ public:
|
|||||||
const wxBitmap& bitmap,
|
const wxBitmap& bitmap,
|
||||||
const wxRect& rect,
|
const wxRect& rect,
|
||||||
int flags = 0,
|
int flags = 0,
|
||||||
long style = 0);
|
long style = 0,
|
||||||
|
int tbarStyle = 0);
|
||||||
virtual void DrawTextLine(wxDC& dc,
|
virtual void DrawTextLine(wxDC& dc,
|
||||||
const wxString& text,
|
const wxString& text,
|
||||||
const wxRect& rect,
|
const wxRect& rect,
|
||||||
@@ -2480,7 +2481,8 @@ void wxWin32Renderer::DrawToolBarButton(wxDC& dc,
|
|||||||
const wxBitmap& bitmap,
|
const wxBitmap& bitmap,
|
||||||
const wxRect& rectOrig,
|
const wxRect& rectOrig,
|
||||||
int flags,
|
int flags,
|
||||||
long style)
|
long style,
|
||||||
|
int tbarStyle)
|
||||||
{
|
{
|
||||||
if (style == wxTOOL_STYLE_BUTTON)
|
if (style == wxTOOL_STYLE_BUTTON)
|
||||||
{
|
{
|
||||||
@@ -2496,8 +2498,24 @@ void wxWin32Renderer::DrawToolBarButton(wxDC& dc,
|
|||||||
DrawBorder(dc, wxBORDER_RAISED, rect, flags);
|
DrawBorder(dc, wxBORDER_RAISED, rect, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(tbarStyle & wxTB_TEXT)
|
||||||
|
{
|
||||||
|
if(tbarStyle & wxTB_HORIZONTAL)
|
||||||
|
{
|
||||||
dc.DrawLabel(label, bitmap, rect, wxALIGN_CENTRE);
|
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)
|
else if (style == wxTOOL_STYLE_SEPARATOR)
|
||||||
{
|
{
|
||||||
// leave a small gap aroudn the line, also account for the toolbar
|
// leave a small gap aroudn the line, also account for the toolbar
|
||||||
|
@@ -34,6 +34,7 @@
|
|||||||
#include "wx/app.h"
|
#include "wx/app.h"
|
||||||
#include "wx/log.h"
|
#include "wx/log.h"
|
||||||
#include "wx/frame.h"
|
#include "wx/frame.h"
|
||||||
|
#include "wx/dc.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "wx/univ/renderer.h"
|
#include "wx/univ/renderer.h"
|
||||||
@@ -374,10 +375,19 @@ wxRect wxToolBar::GetToolRect(wxToolBarToolBase *toolBase) const
|
|||||||
if ( IsVertical() )
|
if ( IsVertical() )
|
||||||
{
|
{
|
||||||
if (tool->IsButton())
|
if (tool->IsButton())
|
||||||
|
{
|
||||||
|
if(!HasFlag(wxTB_TEXT))
|
||||||
{
|
{
|
||||||
rect.width = m_defaultWidth;
|
rect.width = m_defaultWidth;
|
||||||
rect.height = m_defaultHeight;
|
rect.height = m_defaultHeight;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
rect.width = m_defaultWidth +
|
||||||
|
GetFont().GetPointSize() * tool->GetLabel().length();
|
||||||
|
rect.height = m_defaultHeight;
|
||||||
|
}
|
||||||
|
}
|
||||||
else if (tool->IsSeparator())
|
else if (tool->IsSeparator())
|
||||||
{
|
{
|
||||||
rect.width = m_defaultWidth;
|
rect.width = m_defaultWidth;
|
||||||
@@ -392,10 +402,19 @@ wxRect wxToolBar::GetToolRect(wxToolBarToolBase *toolBase) const
|
|||||||
else // horizontal
|
else // horizontal
|
||||||
{
|
{
|
||||||
if (tool->IsButton())
|
if (tool->IsButton())
|
||||||
|
{
|
||||||
|
if(!HasFlag(wxTB_TEXT))
|
||||||
{
|
{
|
||||||
rect.width = m_defaultWidth;
|
rect.width = m_defaultWidth;
|
||||||
rect.height = m_defaultHeight;
|
rect.height = m_defaultHeight;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
rect.width = m_defaultWidth +
|
||||||
|
GetFont().GetPointSize() * tool->GetLabel().length();
|
||||||
|
rect.height = m_defaultHeight;
|
||||||
|
}
|
||||||
|
}
|
||||||
else if (tool->IsSeparator())
|
else if (tool->IsSeparator())
|
||||||
{
|
{
|
||||||
rect.width = m_widthSeparator;
|
rect.width = m_widthSeparator;
|
||||||
@@ -427,6 +446,15 @@ bool wxToolBar::Realize()
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void wxToolBar::SetWindowStyleFlag( long style )
|
||||||
|
{
|
||||||
|
wxToolBarBase::SetWindowStyleFlag(style);
|
||||||
|
|
||||||
|
m_needsLayout = true;
|
||||||
|
|
||||||
|
Refresh();
|
||||||
|
}
|
||||||
|
|
||||||
void wxToolBar::DoLayout()
|
void wxToolBar::DoLayout()
|
||||||
{
|
{
|
||||||
wxASSERT_MSG( m_needsLayout, _T("why are we called?") );
|
wxASSERT_MSG( m_needsLayout, _T("why are we called?") );
|
||||||
@@ -436,7 +464,8 @@ void wxToolBar::DoLayout()
|
|||||||
wxCoord x = m_xMargin,
|
wxCoord x = m_xMargin,
|
||||||
y = m_yMargin;
|
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 margin = IsVertical() ? m_xMargin : m_yMargin;
|
||||||
wxCoord *pCur = IsVertical() ? &y : &x;
|
wxCoord *pCur = IsVertical() ? &y : &x;
|
||||||
|
|
||||||
@@ -453,6 +482,32 @@ void wxToolBar::DoLayout()
|
|||||||
// TODO ugly number fiddling
|
// TODO ugly number fiddling
|
||||||
if (tool->IsButton())
|
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;
|
*pCur += widthTool;
|
||||||
}
|
}
|
||||||
else if (tool->IsSeparator())
|
else if (tool->IsSeparator())
|
||||||
@@ -473,8 +528,26 @@ void wxToolBar::DoLayout()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// calculate the total toolbar size
|
// calculate the total toolbar size
|
||||||
wxCoord xMin = m_defaultWidth + 2*m_xMargin,
|
wxCoord xMin, yMin;
|
||||||
|
|
||||||
|
if(!HasFlag(wxTB_TEXT))
|
||||||
|
{
|
||||||
|
xMin = m_defaultWidth + 2*m_xMargin;
|
||||||
yMin = m_defaultHeight + 2*m_yMargin;
|
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_maxWidth = x < xMin ? xMin : x;
|
||||||
m_maxHeight = y < yMin ? yMin : y;
|
m_maxHeight = y < yMin ? yMin : y;
|
||||||
@@ -550,7 +623,7 @@ void wxToolBar::DoDraw(wxControlRenderer *renderer)
|
|||||||
// prepare the variables used below
|
// prepare the variables used below
|
||||||
wxDC& dc = renderer->GetDC();
|
wxDC& dc = renderer->GetDC();
|
||||||
wxRenderer *rend = renderer->GetRenderer();
|
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
|
// draw the border separating us from the menubar (if there is no menubar
|
||||||
// we probably shouldn't draw it?)
|
// we probably shouldn't draw it?)
|
||||||
@@ -616,14 +689,28 @@ void wxToolBar::DoDraw(wxControlRenderer *renderer)
|
|||||||
wxBitmap bitmap;
|
wxBitmap bitmap;
|
||||||
if ( !tool->IsSeparator() )
|
if ( !tool->IsSeparator() )
|
||||||
{
|
{
|
||||||
// label = tool->GetLabel();
|
label = tool->GetLabel();
|
||||||
bitmap = tool->GetBitmap();
|
bitmap = tool->GetBitmap();
|
||||||
}
|
}
|
||||||
//else: leave both the label and the bitmap invalid to draw a separator
|
//else: leave both the label and the bitmap invalid to draw a separator
|
||||||
|
|
||||||
if ( !tool->IsControl() )
|
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
|
else // control
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user