X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/47d67540a017101b3e46abe9ef0f55914d8de37e..fed485e0946d9cff74fce6afdb169796d90a99f2:/utils/ogl/src/basic2.cpp diff --git a/utils/ogl/src/basic2.cpp b/utils/ogl/src/basic2.cpp index e54c84bbeb..ba46cca6fe 100644 --- a/utils/ogl/src/basic2.cpp +++ b/utils/ogl/src/basic2.cpp @@ -10,6 +10,7 @@ ///////////////////////////////////////////////////////////////////////////// #ifdef __GNUG__ +#pragma implementation "basicp.h" #endif // For compilers that support precompilation, includes "wx.h". @@ -23,9 +24,7 @@ #include #endif -#ifdef PROLOGIO #include -#endif #if wxUSE_IOSTREAMH #include @@ -308,7 +307,7 @@ bool wxPolygonShape::HitTest(double x, double y, int *attachment, double *distan for (i = 0; i < n; i++) { double xp, yp; - if (GetAttachmentPosition(i, &xp, &yp)) + if (GetAttachmentPositionEdge(i, &xp, &yp)) { double l = (double)sqrt(((xp - x) * (xp - x)) + ((yp - y) * (yp - y))); @@ -439,7 +438,7 @@ bool wxPolygonShape::GetPerimeterPoint(double x1, double y1, // and we would want to connect to a point on that vertical -- // oglFindEndForPolyline can't cope with this (the arrow // gets drawn to the wrong place). - if ((!m_attachmentMode) && (x1 == x2)) + if ((m_attachmentMode == ATTACHMENT_MODE_NONE) && (x1 == x2)) { // Look for the point we'd be connecting to. This is // a heuristic... @@ -504,8 +503,8 @@ void wxPolygonShape::OnDraw(wxDC& dc) if (m_shadowMode != SHADOW_NONE) { if (m_shadowBrush) - dc.SetBrush(m_shadowBrush); - dc.SetPen(g_oglTransparentPen); + dc.SetBrush(* m_shadowBrush); + dc.SetPen(* g_oglTransparentPen); dc.DrawPolygon(n, intPoints, WXROUND(m_xpos + m_shadowOffsetX), WXROUND(m_ypos + m_shadowOffsetY)); } @@ -513,12 +512,12 @@ void wxPolygonShape::OnDraw(wxDC& dc) if (m_pen) { if (m_pen->GetWidth() == 0) - dc.SetPen(g_oglTransparentPen); + dc.SetPen(* g_oglTransparentPen); else - dc.SetPen(m_pen); + dc.SetPen(* m_pen); } if (m_brush) - dc.SetBrush(m_brush); + dc.SetBrush(* m_brush); dc.DrawPolygon(n, intPoints, WXROUND(m_xpos), WXROUND(m_ypos)); delete[] intPoints; @@ -526,7 +525,7 @@ void wxPolygonShape::OnDraw(wxDC& dc) void wxPolygonShape::OnDrawOutline(wxDC& dc, double x, double y, double w, double h) { - dc.SetBrush(wxTRANSPARENT_BRUSH); + dc.SetBrush(* wxTRANSPARENT_BRUSH); // Multiply all points by proportion of new size to old size double x_proportion = (double)(fabs(w/m_originalWidth)); double y_proportion = (double)(fabs(h/m_originalHeight)); @@ -785,7 +784,7 @@ int wxPolygonShape::GetNumberOfAttachments() const bool wxPolygonShape::GetAttachmentPosition(int attachment, double *x, double *y, int nth, int no_arcs, wxLineShape *line) { - if (m_attachmentMode && m_points && attachment < m_points->Number()) + if ((m_attachmentMode == ATTACHMENT_MODE_EDGE) && m_points && attachment < m_points->Number()) { wxRealPoint *point = (wxRealPoint *)m_points->Nth(attachment)->Data(); *x = point->x + m_xpos; @@ -880,8 +879,8 @@ void wxRectangleShape::OnDraw(wxDC& dc) if (m_shadowMode != SHADOW_NONE) { if (m_shadowBrush) - dc.SetBrush(m_shadowBrush); - dc.SetPen(g_oglTransparentPen); + dc.SetBrush(* m_shadowBrush); + dc.SetPen(* g_oglTransparentPen); if (m_cornerRadius != 0.0) dc.DrawRoundedRectangle(WXROUND(x1 + m_shadowOffsetX), WXROUND(y1 + m_shadowOffsetY), @@ -893,12 +892,12 @@ void wxRectangleShape::OnDraw(wxDC& dc) if (m_pen) { if (m_pen->GetWidth() == 0) - dc.SetPen(g_oglTransparentPen); + dc.SetPen(* g_oglTransparentPen); else - dc.SetPen(m_pen); + dc.SetPen(* m_pen); } if (m_brush) - dc.SetBrush(m_brush); + dc.SetBrush(* m_brush); if (m_cornerRadius != 0.0) dc.DrawRoundedRectangle(WXROUND(x1), WXROUND(y1), WXROUND(m_width), WXROUND(m_height), m_cornerRadius); @@ -989,61 +988,7 @@ int wxRectangleShape::GetNumberOfAttachments() const bool wxRectangleShape::GetAttachmentPosition(int attachment, double *x, double *y, int nth, int no_arcs, wxLineShape *line) { - if (m_attachmentMode) - { - double top = (double)(m_ypos + m_height/2.0); - double bottom = (double)(m_ypos - m_height/2.0); - double left = (double)(m_xpos - m_width/2.0); - double right = (double)(m_xpos + m_width/2.0); - - bool isEnd = (line && line->IsEnd(this)); - - // Simplified code - switch (attachment) - { - case 0: - { - wxRealPoint pt = CalcSimpleAttachment(wxRealPoint(left, bottom), wxRealPoint(right, bottom), - nth, no_arcs, line); - - *x = pt.x; *y = pt.y; - break; - } - case 1: - { - wxRealPoint pt = CalcSimpleAttachment(wxRealPoint(right, bottom), wxRealPoint(right, top), - nth, no_arcs, line); - - *x = pt.x; *y = pt.y; - break; - } - case 2: - { - wxRealPoint pt = CalcSimpleAttachment(wxRealPoint(left, top), wxRealPoint(right, top), - nth, no_arcs, line); - - *x = pt.x; *y = pt.y; - break; - } - case 3: - { - wxRealPoint pt = CalcSimpleAttachment(wxRealPoint(left, bottom), wxRealPoint(left, top), - nth, no_arcs, line); - - *x = pt.x; *y = pt.y; - break; - } - default: - { - return wxShape::GetAttachmentPosition(attachment, x, y, nth, no_arcs, line); - break; - } - } - - return TRUE; - } - else - { *x = m_xpos; *y = m_ypos; return TRUE; } + return wxShape::GetAttachmentPosition(attachment, x, y, nth, no_arcs, line); } // Text object (no box) @@ -1104,23 +1049,23 @@ void wxEllipseShape::OnDraw(wxDC& dc) if (m_shadowMode != SHADOW_NONE) { if (m_shadowBrush) - dc.SetBrush(m_shadowBrush); - dc.SetPen(g_oglTransparentPen); - dc.DrawEllipse((m_xpos - GetWidth()/2) + m_shadowOffsetX, - (m_ypos - GetHeight()/2) + m_shadowOffsetY, - GetWidth(), GetHeight()); + dc.SetBrush(* m_shadowBrush); + dc.SetPen(* g_oglTransparentPen); + dc.DrawEllipse((long) ((m_xpos - GetWidth()/2) + m_shadowOffsetX), + (long) ((m_ypos - GetHeight()/2) + m_shadowOffsetY), + (long) GetWidth(), (long) GetHeight()); } if (m_pen) { if (m_pen->GetWidth() == 0) - dc.SetPen(g_oglTransparentPen); + dc.SetPen(* g_oglTransparentPen); else - dc.SetPen(m_pen); + dc.SetPen(* m_pen); } if (m_brush) - dc.SetBrush(m_brush); - dc.DrawEllipse((m_xpos - GetWidth()/2), (m_ypos - GetHeight()/2), GetWidth(), GetHeight()); + dc.SetBrush(* m_brush); + dc.DrawEllipse((long) (m_xpos - GetWidth()/2), (long) (m_ypos - GetHeight()/2), (long) GetWidth(), (long) GetHeight()); } void wxEllipseShape::SetSize(double x, double y, bool recursive) @@ -1179,13 +1124,19 @@ int wxEllipseShape::GetNumberOfAttachments() const bool wxEllipseShape::GetAttachmentPosition(int attachment, double *x, double *y, int nth, int no_arcs, wxLineShape *line) { - if (m_attachmentMode) + if (m_attachmentMode == ATTACHMENT_MODE_BRANCHING) + return wxShape::GetAttachmentPosition(attachment, x, y, nth, no_arcs, line); + + if (m_attachmentMode != ATTACHMENT_MODE_NONE) { double top = (double)(m_ypos + m_height/2.0); double bottom = (double)(m_ypos - m_height/2.0); double left = (double)(m_xpos - m_width/2.0); double right = (double)(m_xpos + m_width/2.0); - switch (attachment) + + int physicalAttachment = LogicalToPhysicalAttachment(attachment); + + switch (physicalAttachment) { case 0: {