added and documented wxDC::DrawCheckMark()

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@6109 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin 2000-02-17 12:53:36 +00:00
parent 6d516e09b3
commit cd9da20028
8 changed files with 107 additions and 23 deletions

View File

@ -179,6 +179,14 @@ of the bitmap (all bits set to 1), and the current text background colour to dra
(all bits set to 0). See also \helpref{SetTextForeground}{wxdcsettextforeground},
\helpref{SetTextBackground}{wxdcsettextbackground} and \helpref{wxMemoryDC}{wxmemorydc}.
\membersection{wxDC::DrawCheckMark}\label{wxdcdrawcheckmark}
\func{void}{DrawCheckMark}{\param{wxCoord}{ x}, \param{wxCoord}{ y}, \param{wxCoord}{ width}, \param{wxCoord}{ height}}
\func{void}{DrawCheckMark}{\param{const wxRect \&}{rect}}
Draws a check mark inside the given rectangle.
\membersection{wxDC::DrawEllipse}\label{wxdcdrawellipse}
\func{void}{DrawEllipse}{\param{wxCoord}{ x}, \param{wxCoord}{ y}, \param{wxCoord}{ width}, \param{wxCoord}{ height}}

View File

@ -43,8 +43,6 @@ WXDLLEXPORT_DATA(extern int) wxPageNumber;
class WXDLLEXPORT wxDCBase : public wxObject
{
DECLARE_ABSTRACT_CLASS(wxDCBase)
public:
wxDCBase()
{
@ -112,6 +110,12 @@ public:
void DrawArc(const wxPoint& pt1, const wxPoint& pt2, const wxPoint& centre)
{ DoDrawArc(pt1.x, pt1.y, pt2.x, pt2.y, centre.x, centre.y); }
void DrawCheckMark(wxCoord x, wxCoord y,
wxCoord width, wxCoord height)
{ DoDrawCheckMark(x, y, width, height); }
void DrawCheckMark(const wxRect& rect)
{ DoDrawCheckMark(rect.x, rect.y, rect.width, rect.height); }
void DrawEllipticArc(wxCoord x, wxCoord y, wxCoord w, wxCoord h,
double sa, double ea)
{ DoDrawEllipticArc(x, y, w, h, sa, ea); }
@ -261,7 +265,7 @@ public:
virtual wxCoord GetCharHeight() const = 0;
virtual wxCoord GetCharWidth() const = 0;
void GetTextExtent(const wxString& string,
wxCoord *x, wxCoord *y,
wxCoord *descent = NULL,
@ -453,13 +457,13 @@ public:
*y = y2;
}
void GetClippingBox(long *x, long *y, long *w, long *h) const
{
wxCoord xx,yy,ww,hh;
DoGetClippingBox(&xx, &yy, &ww, &hh);
if (x) *x = xx;
if (y) *y = yy;
if (w) *w = ww;
if (h) *h = hh;
{
wxCoord xx,yy,ww,hh;
DoGetClippingBox(&xx, &yy, &ww, &hh);
if (x) *x = xx;
if (y) *y = yy;
if (w) *w = ww;
if (h) *h = hh;
}
#endif // !Win16
@ -485,6 +489,8 @@ protected:
virtual void DoDrawArc(wxCoord x1, wxCoord y1,
wxCoord x2, wxCoord y2,
wxCoord xc, wxCoord yc) = 0;
virtual void DoDrawCheckMark(wxCoord x, wxCoord y,
wxCoord width, wxCoord height);
virtual void DoDrawEllipticArc(wxCoord x, wxCoord y, wxCoord w, wxCoord h,
double sa, double ea) = 0;
@ -605,6 +611,7 @@ protected:
private:
DECLARE_NO_COPY_CLASS(wxDCBase);
DECLARE_ABSTRACT_CLASS(wxDCBase)
};
// ----------------------------------------------------------------------------

View File

@ -40,6 +40,7 @@ public:
virtual bool CanDrawBitmap() const { return TRUE; }
virtual bool CanGetTextExtent() const { return TRUE; }
//protected:
virtual void DoFloodFill( wxCoord x, wxCoord y, const wxColour& col, int style=wxFLOOD_SURFACE );
virtual bool DoGetPixel( wxCoord x1, wxCoord y1, wxColour *col ) const;
@ -121,7 +122,7 @@ public:
void ComputeScaleAndOrigin();
GdkWindow *GetWindow() { return m_window; }
private:
DECLARE_DYNAMIC_CLASS(wxWindowDC)
};
@ -135,7 +136,7 @@ class wxPaintDC : public wxWindowDC
public:
wxPaintDC();
wxPaintDC( wxWindow *win );
private:
DECLARE_DYNAMIC_CLASS(wxPaintDC)
};
@ -149,7 +150,7 @@ class wxClientDC : public wxWindowDC
public:
wxClientDC();
wxClientDC( wxWindow *win );
private:
DECLARE_DYNAMIC_CLASS(wxClientDC)
};

View File

@ -40,6 +40,7 @@ public:
virtual bool CanDrawBitmap() const { return TRUE; }
virtual bool CanGetTextExtent() const { return TRUE; }
//protected:
virtual void DoFloodFill( wxCoord x, wxCoord y, const wxColour& col, int style=wxFLOOD_SURFACE );
virtual bool DoGetPixel( wxCoord x1, wxCoord y1, wxColour *col ) const;
@ -121,7 +122,7 @@ public:
void ComputeScaleAndOrigin();
GdkWindow *GetWindow() { return m_window; }
private:
DECLARE_DYNAMIC_CLASS(wxWindowDC)
};
@ -135,7 +136,7 @@ class wxPaintDC : public wxWindowDC
public:
wxPaintDC();
wxPaintDC( wxWindow *win );
private:
DECLARE_DYNAMIC_CLASS(wxPaintDC)
};
@ -149,7 +150,7 @@ class wxClientDC : public wxWindowDC
public:
wxClientDC();
wxClientDC( wxWindow *win );
private:
DECLARE_DYNAMIC_CLASS(wxClientDC)
};

View File

@ -153,6 +153,8 @@ protected:
virtual void DoDrawArc(wxCoord x1, wxCoord y1,
wxCoord x2, wxCoord y2,
wxCoord xc, wxCoord yc);
virtual void DoDrawCheckMark(wxCoord x, wxCoord y,
wxCoord width, wxCoord height);
virtual void DoDrawEllipticArc(wxCoord x, wxCoord y, wxCoord w, wxCoord h,
double sa, double ea);

View File

@ -574,22 +574,31 @@ void MyCanvas::DrawDefault(wxDC& dc)
dc.DrawIcon( wxICON(mondrian), 40, 40 );
dc.DrawCheckMark(5, 80, 15, 15);
dc.DrawCheckMark(25, 80, 30, 30);
dc.DrawCheckMark(60, 80, 60, 60);
// this is the test for "blitting bitmap into DC damages selected brush"
// bug
wxIcon icon = wxTheApp->GetStdIcon(wxICON_INFORMATION);
wxCoord rectSize = icon.GetWidth() + 10;
wxCoord x = 100;
dc.SetPen(*wxTRANSPARENT_PEN);
dc.SetBrush( *wxGREEN_BRUSH );
dc.DrawRectangle(100, 10, 40, 40);
dc.DrawBitmap(wxTheApp->GetStdIcon(wxICON_INFORMATION), 102, 12, TRUE);
dc.DrawRectangle(150, 10, 40, 40);
dc.DrawIcon(wxTheApp->GetStdIcon(wxICON_INFORMATION), 152, 12);
dc.DrawRectangle(200, 10, 40, 40);
dc.DrawRectangle(x, 10, rectSize, rectSize);
dc.DrawBitmap(icon, x + 5, 15, TRUE);
x += rectSize + 10;
dc.DrawRectangle(x, 10, rectSize, rectSize);
dc.DrawIcon(wxTheApp->GetStdIcon(wxICON_INFORMATION), x + 5, 15);
x += rectSize + 10;
dc.DrawRectangle(x, 10, rectSize, rectSize);
// test for "transparent" bitmap drawing (it intersects with the last
// rectangle above)
//dc.SetBrush( *wxTRANSPARENT_BRUSH );
#include "../image/smile.xpm"
wxBitmap bmp(smile_xpm);
dc.DrawBitmap(bmp, 210, 30, TRUE);
dc.DrawBitmap(bmp, x + rectSize - 20, rectSize - 10, TRUE);
dc.SetBrush( *wxBLACK_BRUSH );
dc.DrawRectangle( 0, 160, 1000, 300 );
@ -722,9 +731,9 @@ void MyCanvas::DrawDefault(wxDC& dc)
memdc2.DrawRectangle(0, 0, totalWidth, totalHeight);
memdc2.SelectObject(wxNullBitmap);
memdc2.SetPen(wxNullPen);
memdc2.SetBrush(wxNullBrush);
memdc2.SelectObject(wxNullBitmap);
dc.DrawBitmap(bitmap2, 500, 270);
}

View File

@ -30,6 +30,27 @@
#include "wx/dc.h"
void wxDCBase::DoDrawCheckMark(wxCoord x1, wxCoord y1,
wxCoord width, wxCoord height)
{
wxCHECK_RET( Ok(), wxT("invalid window dc") );
wxCoord x2 = x1 + width,
y2 = y1 + height;
// this is to yield width of 3 for width == height == 10
SetPen(wxPen(GetTextForeground(), (width + height + 1) / 7, wxSOLID));
// we're drawing a scaled version of wx/generic/tick.xpm here
wxCoord x3 = x1 + (4*width) / 10, // x of the tick bottom
y3 = y1 + height / 2; // y of the left tick branch
DoDrawLine(x1, y3, x3, y2);
DoDrawLine(x3, y2, x2, y1);
CalcBoundingBox(x1, y1);
CalcBoundingBox(x2, y2);
}
void wxDCBase::DrawLines(const wxList *list, wxCoord xoffset, wxCoord yoffset)
{
int n = list->Number();

View File

@ -409,6 +409,41 @@ void wxDC::DoDrawArc(wxCoord x1,wxCoord y1,wxCoord x2,wxCoord y2, wxCoord xc, wx
CalcBoundingBox((wxCoord)(xc+radius), (wxCoord)(yc+radius));
}
void wxDC::DoDrawCheckMark(wxCoord x1, wxCoord y1,
wxCoord width, wxCoord height)
{
wxCoord x2 = x1 + width,
y2 = y1 + height;
#if defined(__WIN32__) && !defined(__SC__)
RECT rect;
rect.left = x1;
rect.top = y1;
rect.right = x2;
rect.bottom = y2;
DrawFrameControl(GetHdc(), &rect, DFC_MENU, DFCS_MENUCHECK);
#else // Win16
// In WIN16, draw a cross
HPEN blackPen = ::CreatePen(PS_SOLID, 1, RGB(0, 0, 0));
HPEN whiteBrush = (HPEN)::GetStockObject(WHITE_BRUSH);
HPEN hPenOld = (HPEN)::SelectObject(hdcMem, blackPen);
HPEN hBrushOld = (HPEN)::SelectObject(hdcMem, whiteBrush);
::SetROP2(GetHdc(), R2_COPYPEN);
Rectangle(GetHdc(), x1, y1, x2, y2);
MoveTo(GetHdc(), x1, y1);
LineTo(GetHdc(), x2, y2);
MoveTo(GetHdc(), x2, y1);
LineTo(GetHdc(), x1, y2);
::SelectObject(GetHdc(), hPenOld);
::SelectObject(GetHdc(), hBrushOld);
::DeleteObject(blackPen);
#endif // Win32/16
CalcBoundingBox(x1, y1);
CalcBoundingBox(x2, y2);
}
void wxDC::DoDrawPoint(wxCoord x, wxCoord y)
{
COLORREF color = 0x00ffffff;