KissCount/src/view/grid/wxGridCellButtonRenderer.cpp

97 lines
2.9 KiB
C++
Raw Normal View History

2010-09-08 11:02:03 +02:00
/*
Copyright 2010 Grégory Soutadé
This file is part of KissCount.
KissCount is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
KissCount is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with KissCount. If not, see <http://www.gnu.org/licenses/>.
*/
#include "wxGridCellButtonRenderer.h"
wxGridCellButtonRenderer::wxGridCellButtonRenderer(const wxString& text) : _text(text)
{
}
wxGridCellRenderer* wxGridCellButtonRenderer::Clone () const
{
return new wxGridCellButtonRenderer(_text);
}
void wxGridCellButtonRenderer::Draw (wxGrid &grid, wxGridCellAttr &attr, wxDC &dc, const wxRect &_rect, int row, int col, bool isSelected)
{
wxRect rect = _rect;
wxCoord w, h, descent, external_leading;
wxBrush originalBrush = dc.GetBrush();
wxPen originalPen = dc.GetPen();
dc.SetPen(wxPen(*wxLIGHT_GREY));
dc.SetBrush(wxBrush(grid.GetCellBackgroundColour(row, col)));
dc.DrawRectangle(rect);
rect.x += 2 ;
rect.y += 2 ;
rect.width -= 6 ;
rect.height -= 6 ;
dc.SetPen(wxPen(*wxWHITE));
dc.DrawLine(rect.x, rect.y, rect.x + rect.width, rect.y);
dc.DrawLine(rect.x, rect.y, rect.x, rect.y + rect.height);
dc.SetPen(wxPen(*wxBLACK));
dc.DrawLine(rect.x, rect.y + rect.height, rect.x + rect.width + 1, rect.y + rect.height);
dc.DrawLine(rect.x + rect.width, rect.y, rect.x + rect.width, rect.y + rect.height);
dc.SetPen(wxPen(wxColor(0x80, 0x80, 0x80)));
dc.DrawLine(rect.x + 1, rect.y + rect.height - 1, rect.x + rect.width - 1, rect.y + rect.height - 1);
dc.DrawLine(rect.x + rect.width - 1, rect.y + 1, rect.x + rect.width - 1, rect.y + rect.height);
rect.x += 1 ;
rect.y += 1 ;
rect.width -= 2 ;
rect.height -= 2 ;
dc.SetPen(wxPen(*wxLIGHT_GREY));
dc.SetBrush(wxBrush(*wxLIGHT_GREY));
dc.DrawRectangle(rect);
dc.GetTextExtent(_text, &w, &h, &descent, &external_leading);
if (w < rect.width)
rect.x += (rect.width - w) / 2;
if (h < rect.height)
rect.y += (rect.height - h) / 2;
rect.y -= (external_leading + descent);
dc.SetTextForeground(*wxBLACK);
// dc.SetTextBackground(wxColor(128, 128, 128, 255));
dc.SetTextBackground(*wxLIGHT_GREY);
dc.DrawText(_text, rect.x, rect.y);
dc.SetBrush(originalBrush);
dc.SetPen(originalPen);
}
wxSize wxGridCellButtonRenderer::GetBestSize (wxGrid &grid, wxGridCellAttr &attr, wxDC &dc, int row, int col)
{
wxCoord w, h;
dc.GetTextExtent(_text, &w, &h);
return wxSize(w+14, h+14); // (2 + 2 + 3) * 2
}