Add ellipsizeMode parameter to wxRenderNative::DrawItemText()
Instead of the default end ellipsize mode used in the native and generic implementation, allow specifying the mode with an additional parameter. Closes https://github.com/wxWidgets/wxWidgets/pull/97
This commit is contained in:
committed by
Vadim Zeitlin
parent
60a3d76045
commit
44bcc3a723
@@ -346,7 +346,8 @@ public:
|
||||
const wxString& text,
|
||||
const wxRect& rect,
|
||||
int align = wxALIGN_LEFT | wxALIGN_TOP,
|
||||
int flags = 0) = 0;
|
||||
int flags = 0,
|
||||
wxEllipsizeMode ellipsizeMode = wxELLIPSIZE_END) = 0;
|
||||
|
||||
// geometry functions
|
||||
// ------------------
|
||||
@@ -548,8 +549,9 @@ public:
|
||||
const wxString& text,
|
||||
const wxRect& rect,
|
||||
int align = wxALIGN_LEFT | wxALIGN_TOP,
|
||||
int flags = 0)
|
||||
{ m_rendererNative.DrawItemText(win, dc, text, rect, align, flags); }
|
||||
int flags = 0,
|
||||
wxEllipsizeMode ellipsizeMode = wxELLIPSIZE_END)
|
||||
{ m_rendererNative.DrawItemText(win, dc, text, rect, align, flags, ellipsizeMode); }
|
||||
|
||||
virtual wxSplitterRenderParams GetSplitterParams(const wxWindow *win)
|
||||
{ return m_rendererNative.GetSplitterParams(win); }
|
||||
|
@@ -430,7 +430,8 @@ public:
|
||||
const wxString& text,
|
||||
const wxRect& rect,
|
||||
int align = wxALIGN_LEFT | wxALIGN_TOP,
|
||||
int flags = 0) = 0;
|
||||
int flags = 0,
|
||||
wxEllipsizeMode ellipsizeMode = wxELLIPSIZE_END) = 0;
|
||||
|
||||
/**
|
||||
Draw a blank push button that looks very similar to wxButton.
|
||||
|
@@ -981,20 +981,6 @@ wxDataViewCustomRendererBase::RenderText(const wxString& text,
|
||||
rectText.x += xoffset;
|
||||
rectText.width -= xoffset;
|
||||
|
||||
// check if we want to ellipsize the text if it doesn't fit
|
||||
wxString ellipsizedText;
|
||||
if ( GetEllipsizeMode() != wxELLIPSIZE_NONE )
|
||||
{
|
||||
ellipsizedText = wxControl::Ellipsize
|
||||
(
|
||||
text,
|
||||
*dc,
|
||||
GetEllipsizeMode(),
|
||||
rectText.width,
|
||||
wxELLIPSIZE_FLAGS_NONE
|
||||
);
|
||||
}
|
||||
|
||||
int flags = 0;
|
||||
if ( state & wxDATAVIEW_CELL_SELECTED )
|
||||
flags |= wxCONTROL_SELECTED | wxCONTROL_FOCUSED;
|
||||
@@ -1005,10 +991,11 @@ wxDataViewCustomRendererBase::RenderText(const wxString& text,
|
||||
wxRendererNative::Get().DrawItemText(
|
||||
GetOwner()->GetOwner(),
|
||||
*dc,
|
||||
ellipsizedText.empty() ? text : ellipsizedText,
|
||||
text,
|
||||
rectText,
|
||||
GetEffectiveAlignment(),
|
||||
flags);
|
||||
flags,
|
||||
GetEllipsizeMode());
|
||||
}
|
||||
|
||||
void wxDataViewCustomRendererBase::SetEnabled(bool enabled)
|
||||
|
@@ -150,7 +150,8 @@ public:
|
||||
const wxString& text,
|
||||
const wxRect& rect,
|
||||
int align = wxALIGN_LEFT | wxALIGN_TOP,
|
||||
int flags = 0) wxOVERRIDE;
|
||||
int flags = 0,
|
||||
wxEllipsizeMode ellipsizeMode = wxELLIPSIZE_END) wxOVERRIDE;
|
||||
|
||||
virtual wxSplitterRenderParams GetSplitterParams(const wxWindow *win) wxOVERRIDE;
|
||||
|
||||
@@ -888,7 +889,8 @@ wxRendererGeneric::DrawItemText(wxWindow* win,
|
||||
const wxString& text,
|
||||
const wxRect& rect,
|
||||
int align,
|
||||
int flags)
|
||||
int flags,
|
||||
wxEllipsizeMode ellipsizeMode)
|
||||
{
|
||||
// Determine text color
|
||||
wxColour textColour;
|
||||
@@ -913,7 +915,7 @@ wxRendererGeneric::DrawItemText(wxWindow* win,
|
||||
}
|
||||
|
||||
const wxString paintText = wxControl::Ellipsize(text, dc,
|
||||
wxELLIPSIZE_END,
|
||||
ellipsizeMode,
|
||||
rect.GetWidth());
|
||||
|
||||
// Draw text
|
||||
|
@@ -26,6 +26,7 @@
|
||||
#ifndef WX_PRECOMP
|
||||
#include "wx/string.h"
|
||||
#include "wx/window.h"
|
||||
#include "wx/control.h" // for wxControl::Ellipsize()
|
||||
#include "wx/dc.h"
|
||||
#include "wx/settings.h"
|
||||
#endif //WX_PRECOMP
|
||||
@@ -338,7 +339,8 @@ public:
|
||||
const wxString& text,
|
||||
const wxRect& rect,
|
||||
int align = wxALIGN_LEFT | wxALIGN_TOP,
|
||||
int flags = 0);
|
||||
int flags = 0,
|
||||
wxEllipsizeMode ellipsizeMode = wxELLIPSIZE_END);
|
||||
|
||||
virtual wxSplitterRenderParams GetSplitterParams(const wxWindow *win);
|
||||
|
||||
@@ -970,7 +972,8 @@ void wxRendererXP::DrawItemText(wxWindow* win,
|
||||
const wxString& text,
|
||||
const wxRect& rect,
|
||||
int align,
|
||||
int flags)
|
||||
int flags,
|
||||
wxEllipsizeMode ellipsizeMode)
|
||||
{
|
||||
wxUxThemeHandle hTheme(win, L"LISTVIEW");
|
||||
|
||||
@@ -999,7 +1002,7 @@ void wxRendererXP::DrawItemText(wxWindow* win,
|
||||
textOpts.crText = wxSystemSettings::GetColour(wxSYS_COLOUR_GRAYTEXT).GetPixel();
|
||||
}
|
||||
|
||||
DWORD textFlags = DT_NOPREFIX | DT_END_ELLIPSIS;
|
||||
DWORD textFlags = DT_NOPREFIX;
|
||||
if ( align & wxALIGN_CENTER_HORIZONTAL )
|
||||
textFlags |= DT_CENTER;
|
||||
else if ( align & wxALIGN_RIGHT )
|
||||
@@ -1014,12 +1017,37 @@ void wxRendererXP::DrawItemText(wxWindow* win,
|
||||
else
|
||||
textFlags |= DT_TOP;
|
||||
|
||||
const wxString* drawText = &text;
|
||||
wxString ellipsizedText;
|
||||
switch ( ellipsizeMode )
|
||||
{
|
||||
case wxELLIPSIZE_NONE:
|
||||
// no flag required
|
||||
break;
|
||||
|
||||
case wxELLIPSIZE_START:
|
||||
case wxELLIPSIZE_MIDDLE:
|
||||
// no native support for this ellipsize modes, use wxWidgets
|
||||
// implementation (may not be 100% accurate because per
|
||||
// definition the theme defines the font but should be close
|
||||
// enough with current windows themes)
|
||||
drawText = &ellipsizedText;
|
||||
ellipsizedText = wxControl::Ellipsize(text, dc, ellipsizeMode,
|
||||
rect.width,
|
||||
wxELLIPSIZE_FLAGS_NONE);
|
||||
break;
|
||||
|
||||
case wxELLIPSIZE_END:
|
||||
textFlags |= DT_END_ELLIPSIS;
|
||||
break;
|
||||
}
|
||||
|
||||
te->DrawThemeTextEx(hTheme, dc.GetHDC(), LVP_LISTITEM, itemState,
|
||||
text.wchar_str(), -1, textFlags, &rc, &textOpts);
|
||||
drawText->wchar_str(), -1, textFlags, &rc, &textOpts);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_rendererNative.DrawItemText(win, dc, text, rect, align, flags);
|
||||
m_rendererNative.DrawItemText(win, dc, text, rect, align, flags, ellipsizeMode);
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user