⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 drawn.cpp

📁 wxGTK 是 wxWidgets 的 linux GTK+ (>2.2.3)版本。wxWidgets 是一个跨平台的 GUI 框架
💻 CPP
📖 第 1 页 / 共 5 页
字号:
    default:      break;  }}wxDrawOp *wxOpSetGDI::Copy(wxPseudoMetaFile *newImage){  wxOpSetGDI *newOp = new wxOpSetGDI(m_op, newImage, m_gdiIndex, m_mode);  newOp->m_r = m_r;  newOp->m_g = m_g;  newOp->m_b = m_b;  return newOp;}#if wxUSE_PROLOGIOwxExpr *wxOpSetGDI::WriteExpr(wxPseudoMetaFile *WXUNUSED(image)){  wxExpr *expr = new wxExpr(wxExprList);  expr->Append(new wxExpr((long)m_op));  switch (m_op)  {    case DRAWOP_SET_PEN:    case DRAWOP_SET_BRUSH:    case DRAWOP_SET_FONT:    {      expr->Append(new wxExpr((long)m_gdiIndex));      break;    }    case DRAWOP_SET_TEXT_COLOUR:    case DRAWOP_SET_BK_COLOUR:    {      expr->Append(new wxExpr((long)m_r));      expr->Append(new wxExpr((long)m_g));      expr->Append(new wxExpr((long)m_b));      break;    }    case DRAWOP_SET_BK_MODE:    {      expr->Append(new wxExpr((long)m_mode));      break;    }    default:      break;  }  return expr;}void wxOpSetGDI::ReadExpr(wxPseudoMetaFile *WXUNUSED(image), wxExpr *expr){  switch (m_op)  {    case DRAWOP_SET_PEN:    case DRAWOP_SET_BRUSH:    case DRAWOP_SET_FONT:    {      m_gdiIndex = (int)expr->Nth(1)->IntegerValue();      break;    }    case DRAWOP_SET_TEXT_COLOUR:    case DRAWOP_SET_BK_COLOUR:    {      m_r = (unsigned char)expr->Nth(1)->IntegerValue();      m_g = (unsigned char)expr->Nth(2)->IntegerValue();      m_b = (unsigned char)expr->Nth(3)->IntegerValue();      break;    }    case DRAWOP_SET_BK_MODE:    {      m_mode = (int)expr->Nth(1)->IntegerValue();      break;    }    default:      break;  }}#endif/* * Set/destroy clipping * */wxOpSetClipping::wxOpSetClipping(int theOp, double theX1, double theY1,    double theX2, double theY2):wxDrawOp(theOp){  m_x1 = theX1;  m_y1 = theY1;  m_x2 = theX2;  m_y2 = theY2;}wxDrawOp *wxOpSetClipping::Copy(wxPseudoMetaFile *WXUNUSED(newImage)){  wxOpSetClipping *newOp = new wxOpSetClipping(m_op, m_x1, m_y1, m_x2, m_y2);  return newOp;}void wxOpSetClipping::Do(wxDC& dc, double xoffset, double yoffset){  switch (m_op)  {    case DRAWOP_SET_CLIPPING_RECT:    {      dc.SetClippingRegion((long)(m_x1 + xoffset), (long)(m_y1 + yoffset), (long)(m_x2 + xoffset), (long)(m_y2 + yoffset));      break;    }    case DRAWOP_DESTROY_CLIPPING_RECT:    {      dc.DestroyClippingRegion();      break;    }    default:      break;  }}void wxOpSetClipping::Scale(double xScale, double yScale){  m_x1 *= xScale;  m_y1 *= yScale;  m_x2 *= xScale;  m_y2 *= yScale;}void wxOpSetClipping::Translate(double x, double y){  m_x1 += x;  m_y1 += y;}#if wxUSE_PROLOGIOwxExpr *wxOpSetClipping::WriteExpr(wxPseudoMetaFile *WXUNUSED(image)){  wxExpr *expr = new wxExpr(wxExprList);  expr->Append(new wxExpr((long)m_op));  switch (m_op)  {    case DRAWOP_SET_CLIPPING_RECT:    {      expr->Append(new wxExpr(m_x1));      expr->Append(new wxExpr(m_y1));      expr->Append(new wxExpr(m_x2));      expr->Append(new wxExpr(m_y2));      break;    }    default:      break;  }  return expr;}void wxOpSetClipping::ReadExpr(wxPseudoMetaFile *WXUNUSED(image), wxExpr *expr){  switch (m_op)  {    case DRAWOP_SET_CLIPPING_RECT:    {      m_x1 = expr->Nth(1)->RealValue();      m_y1 = expr->Nth(2)->RealValue();      m_x2 = expr->Nth(3)->RealValue();      m_y2 = expr->Nth(4)->RealValue();      break;    }    default:      break;  }}#endif/* * Draw line, rectangle, rounded rectangle, ellipse, point, arc, text * */wxOpDraw::wxOpDraw(int theOp, double theX1, double theY1, double theX2, double theY2,         double theRadius, const wxString& s) : wxDrawOp(theOp){  m_x1 = theX1;  m_y1 = theY1;  m_x2 = theX2;  m_y2 = theY2;  m_x3 = 0.0;  m_y3 = 0.0;  m_radius = theRadius;  m_textString = s;}wxOpDraw::~wxOpDraw(){}wxDrawOp *wxOpDraw::Copy(wxPseudoMetaFile *WXUNUSED(newImage)){  wxOpDraw *newOp = new wxOpDraw(m_op, m_x1, m_y1, m_x2, m_y2, m_radius, m_textString);  newOp->m_x3 = m_x3;  newOp->m_y3 = m_y3;  return newOp;}void wxOpDraw::Do(wxDC& dc, double xoffset, double yoffset){  switch (m_op)  {    case DRAWOP_DRAW_LINE:    {      dc.DrawLine(WXROUND(m_x1+xoffset), WXROUND(m_y1+yoffset), WXROUND(m_x2+xoffset), WXROUND(m_y2+yoffset));      break;    }    case DRAWOP_DRAW_RECT:    {      dc.DrawRectangle(WXROUND(m_x1+xoffset), WXROUND(m_y1+yoffset), WXROUND(m_x2), WXROUND(m_y2));      break;    }    case DRAWOP_DRAW_ROUNDED_RECT:    {      dc.DrawRoundedRectangle(WXROUND(m_x1+xoffset), WXROUND(m_y1+yoffset), WXROUND(m_x2), WXROUND(m_y2), m_radius);      break;    }    case DRAWOP_DRAW_ELLIPSE:    {      dc.DrawEllipse(WXROUND(m_x1+xoffset), WXROUND(m_y1+yoffset), WXROUND(m_x2), WXROUND(m_y2));      break;    }    case DRAWOP_DRAW_ARC:    {      dc.DrawArc(WXROUND(m_x2+xoffset), WXROUND(m_y2+yoffset),                 WXROUND(m_x3+xoffset), WXROUND(m_y3+yoffset),                 WXROUND(m_x1+xoffset), WXROUND(m_y1+yoffset));      break;    }    case DRAWOP_DRAW_ELLIPTIC_ARC:    {      const double pi = M_PI ;      // Convert back to degrees      dc.DrawEllipticArc(                 WXROUND(m_x1+xoffset), WXROUND(m_y1+yoffset),                 WXROUND(m_x2), WXROUND(m_y2),                 WXROUND(m_x3*(360.0/(2.0*pi))), WXROUND(m_y3*(360.0/(2.0*pi))));      break;    }    case DRAWOP_DRAW_POINT:    {      dc.DrawPoint(WXROUND(m_x1+xoffset), WXROUND(m_y1+yoffset));      break;    }    case DRAWOP_DRAW_TEXT:    {      dc.DrawText(m_textString, WXROUND(m_x1+xoffset), WXROUND(m_y1+yoffset));      break;    }    default:      break;  }}void wxOpDraw::Scale(double scaleX, double scaleY){  m_x1 *= scaleX;  m_y1 *= scaleY;  m_x2 *= scaleX;  m_y2 *= scaleY;  if (m_op != DRAWOP_DRAW_ELLIPTIC_ARC)  {    m_x3 *= scaleX;    m_y3 *= scaleY;  }  m_radius *= scaleX;}void wxOpDraw::Translate(double x, double y){  m_x1 += x;  m_y1 += y;  switch (m_op)  {    case DRAWOP_DRAW_LINE:    {      m_x2 += x;      m_y2 += y;      break;    }    case DRAWOP_DRAW_ARC:    {      m_x2 += x;      m_y2 += y;      m_x3 += x;      m_y3 += y;      break;    }    case DRAWOP_DRAW_ELLIPTIC_ARC:    {      break;    }    default:      break;  }}void wxOpDraw::Rotate(double x, double y, double theta, double sinTheta, double cosTheta){  double newX1 = m_x1*cosTheta - m_y1*sinTheta + x*(1.0 - cosTheta) + y*sinTheta;  double newY1 = m_x1*sinTheta + m_y1*cosTheta + y*(1.0 - cosTheta) + x*sinTheta;  switch (m_op)  {    case DRAWOP_DRAW_LINE:    {      double newX2 = m_x2*cosTheta - m_y2*sinTheta + x*(1.0 - cosTheta) + y*sinTheta;      double newY2 = m_x2*sinTheta + m_y2*cosTheta + y*(1.0 - cosTheta) + x*sinTheta;      m_x1 = newX1;      m_y1 = newY1;      m_x2 = newX2;      m_y2 = newY2;      break;    }    case DRAWOP_DRAW_RECT:    case DRAWOP_DRAW_ROUNDED_RECT:    case DRAWOP_DRAW_ELLIPTIC_ARC:    {      // Assume only 0, 90, 180, 270 degree rotations.      // oldX1, oldY1 represents the top left corner. Find the      // bottom right, and rotate that. Then the width/height is the difference      // between x/y values.      double oldBottomRightX = m_x1 + m_x2;      double oldBottomRightY = m_y1 + m_y2;      double newBottomRightX = oldBottomRightX*cosTheta - oldBottomRightY*sinTheta + x*(1.0 - cosTheta) + y*sinTheta;      double newBottomRightY = oldBottomRightX*sinTheta + oldBottomRightY*cosTheta + y*(1.0 - cosTheta) + x*sinTheta;      // Now find the new top-left, bottom-right coordinates.      double minX = wxMin(newX1, newBottomRightX);      double minY = wxMin(newY1, newBottomRightY);      double maxX = wxMax(newX1, newBottomRightX);      double maxY = wxMax(newY1, newBottomRightY);      m_x1 = minX;      m_y1 = minY;      m_x2 = maxX - minX; // width      m_y2 = maxY - minY; // height      if (m_op == DRAWOP_DRAW_ELLIPTIC_ARC)      {        // Add rotation to angles        m_x3 += theta;        m_y3 += theta;      }      break;    }    case DRAWOP_DRAW_ARC:    {      double newX2 = m_x2*cosTheta - m_y2*sinTheta + x*(1.0 - cosTheta) + y*sinTheta;      double newY2 = m_x2*sinTheta + m_y2*cosTheta + y*(1.0 - cosTheta) + x*sinTheta;      double newX3 = m_x3*cosTheta - m_y3*sinTheta + x*(1.0 - cosTheta) + y*sinTheta;      double newY3 = m_x3*sinTheta + m_y3*cosTheta + y*(1.0 - cosTheta) + x*sinTheta;      m_x1 = newX1;      m_y1 = newY1;      m_x2 = newX2;      m_y2 = newY2;      m_x3 = newX3;      m_y3 = newY3;      break;    }    default:      break;  }}#if wxUSE_PROLOGIOwxExpr *wxOpDraw::WriteExpr(wxPseudoMetaFile *WXUNUSED(image)){  wxExpr *expr = new wxExpr(wxExprList);  expr->Append(new wxExpr((long)m_op));  switch (m_op)  {    case DRAWOP_DRAW_LINE:    case DRAWOP_DRAW_RECT:    case DRAWOP_DRAW_ELLIPSE:    {      expr->Append(new wxExpr(m_x1));      expr->Append(new wxExpr(m_y1));      expr->Append(new wxExpr(m_x2));      expr->Append(new wxExpr(m_y2));      break;    }    case DRAWOP_DRAW_ROUNDED_RECT:    {      expr->Append(new wxExpr(m_x1));      expr->Append(new wxExpr(m_y1));      expr->Append(new wxExpr(m_x2));      expr->Append(new wxExpr(m_y2));      expr->Append(new wxExpr(m_radius));      break;    }    case DRAWOP_DRAW_POINT:    {      expr->Append(new wxExpr(m_x1));      expr->Append(new wxExpr(m_y1));      break;    }    case DRAWOP_DRAW_TEXT:    {      expr->Append(new wxExpr(m_x1));      expr->Append(new wxExpr(m_y1));      expr->Append(new wxExpr(wxExprString, m_textString));      break;    }    case DRAWOP_DRAW_ARC:    case DRAWOP_DRAW_ELLIPTIC_ARC:    {      expr->Append(new wxExpr(m_x1));      expr->Append(new wxExpr(m_y1));      expr->Append(new wxExpr(m_x2));      expr->Append(new wxExpr(m_y2));      expr->Append(new wxExpr(m_x3));      expr->Append(new wxExpr(m_y3));      break;    }    default:    {      break;    }  }  return expr;}void wxOpDraw::ReadExpr(wxPseudoMetaFile *WXUNUSED(image), wxExpr *expr){  switch (m_op)  {    case DRAWOP_DRAW_LINE:    case DRAWOP_DRAW_RECT:    case DRAWOP_DRAW_ELLIPSE:    {      m_x1 = expr->Nth(1)->RealValue();      m_y1 = expr->Nth(2)->RealValue();      m_x2 = expr->Nth(3)->RealValue();      m_y2 = expr->Nth(4)->RealValue();      break;    }    case DRAWOP_DRAW_ROUNDED_RECT:    {      m_x1 = expr->Nth(1)->RealValue();      m_y1 = expr->Nth(2)->RealValue();      m_x2 = expr->Nth(3)->RealValue();      m_y2 = expr->Nth(4)->RealValue();      m_radius = expr->Nth(5)->RealValue();      break;    }    case DRAWOP_DRAW_POINT:    {      m_x1 = expr->Nth(1)->RealValue();      m_y1 = expr->Nth(2)->RealValue();      break;    }    case DRAWOP_DRAW_TEXT:    {      m_x1 = expr->Nth(1)->RealValue();      m_y1 = expr->Nth(2)->RealValue();      m_textString = wxString(expr->Nth(3)->StringValue());      break;    }    case DRAWOP_DRAW_ARC:    case DRAWOP_DRAW_ELLIPTIC_ARC:    {      m_x1 = expr->Nth(1)->RealValue();      m_y1 = expr->Nth(2)->RealValue();      m_x2 = expr->Nth(3)->RealValue();      m_y2 = expr->Nth(4)->RealValue();      m_x3 = expr->Nth(5)->RealValue();      m_y3 = expr->Nth(6)->RealValue();      break;    }    default:    {      break;    }  }}#endif/* * Draw polygon, polyline, spline * */wxOpPolyDraw::wxOpPolyDraw(int theOp, int n, wxRealPoint *thePoints):wxDrawOp(theOp){  m_noPoints = n;  m_points = thePoints;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -