-int wxDataViewRenderer::CalculateAlignment() const
-{
- if (m_align == wxDVR_DEFAULT_ALIGNMENT)
- {
- if (GetOwner() == NULL)
- return wxALIGN_LEFT | wxALIGN_CENTRE_VERTICAL;
-
- return GetOwner()->GetAlignment() | wxALIGN_CENTRE_VERTICAL;
- }
-
- return m_align;
-}
-
-bool
-wxDataViewRenderer::RenderWithAttr(wxDC& dc,
- const wxRect& cell_rect,
- int align,
- const wxDataViewItemAttr *WXUNUSED(attr),
- int state)
-{
- // adjust the rectangle ourselves to account for the alignment
-
- wxRect item_rect = cell_rect;
- if ( align )
- {
- const wxSize size = GetSize();
-
- // take alignment into account only if there is enough space, otherwise
- // show as much contents as possible
- //
- // notice that many existing renderers (e.g. wxDataViewSpinRenderer)
- // return hard-coded size which can be more than they need and if we
- // trusted their GetSize() we'd draw the text out of cell bounds
- // entirely
-
- if ( size.x < cell_rect.width )
- {
- if (align & wxALIGN_CENTER_HORIZONTAL)
- item_rect.x += (cell_rect.width - size.x)/2;
- else if (align & wxALIGN_RIGHT)
- item_rect.x += cell_rect.width - size.x;
- // else: wxALIGN_LEFT is the default
-
- item_rect.width = size.x;
- }
-
- if ( size.y < cell_rect.height )
- {
- if (align & wxALIGN_CENTER_VERTICAL)
- item_rect.y += (cell_rect.height - size.y)/2;
- else if (align & wxALIGN_BOTTOM)
- item_rect.y += cell_rect.height - size.y;
- // else: wxALIGN_TOP is the default
-
- item_rect.height = size.y;
- }
- }
-
- return Render(item_rect, &dc, state);
-}
-
-void
-wxDataViewRenderer::RenderText(wxDC& dc,
- const wxRect& rect,
- int align,
- const wxString& text,
- const wxDataViewItemAttr *attr,
- int state,
- int xoffset)
-{
- // override custom foreground with the standard one for the selected items
- // because we currently don't allow changing the selection background and
- // custom colours may be unreadable on it
- wxColour col;
- if ( state & wxDATAVIEW_CELL_SELECTED )
- col = wxSystemSettings::GetColour(wxSYS_COLOUR_HIGHLIGHTTEXT);
- else if ( attr && attr->HasColour() )
- col = attr->GetColour();
- else // use default foreground
- col = GetOwner()->GetOwner()->GetForegroundColour();
-
- wxDCTextColourChanger changeFg(dc, col);
-
- wxDCFontChanger changeFont(dc);
- if ( attr && attr->HasFont() )
- {
- wxFont font(dc.GetFont());
- if ( attr->GetBold() )
- font.MakeBold();
- if ( attr->GetItalic() )
- font.MakeItalic();
-
- changeFont.Set(font);
- }
-
- wxRect rectText = rect;
- 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(),
- rect.width,
- wxELLIPSIZE_FLAGS_NONE
- );
- }
-
- dc.DrawLabel(ellipsizedText.empty() ? text : ellipsizedText,
- rectText, align);
-}
-