void MyDrawString(/*short dir,*/ short h, short v, char *s,Boolean framed,short selectMode) { Rect r; if(sharedPrinting)selectMode = POINTDRAWFLAG; if(strlen(s) >0) { GetTextOffsets(/*dir,*/s,&h,&v); GetStringRect(s,h,v,&r); if(selectMode == BADPOINTDRAWFLAG)selectMode = POINTDRAWFLAG; if(selectMode == POINTDRAWFLAG) { EraseRect(&r); MyMoveTo(h,v); drawstring(s); } if(framed) { if(selectMode != POINTDRAWFLAG) { PenMode(patXor);PaintRect(&r); } PenMode(patCopy); MyFrameRect(&r); } } }
void VectDraw(DialogPtr d, Rect *rectPtr, long itemNumber) { #pragma unused (rectPtr) Point p; short h,v; RGBColor rgb; Rect rgbrect; char numstr[30],numstr2[30]; double x = (*gEditContourLevels)[itemNumber]; float colorLevel; long numLevels = GetNumDoubleHdlItems(gEditContourLevels); SetRGBColor(&rgb,0,0,0); TextFont(kFontIDGeneva); TextSize(LISTTEXTSIZE); rgbrect=GetDialogItemBox(d,CONT_LISTID); h=(rgbrect.left); GetPen(&p); v=p.v; MySetRect(&rgbrect,h+4,v-9,h+14,v+1); // set unique color for each value, not on linear scale colorLevel = float(itemNumber)/float(numLevels-1); //rgb = GetRGBColor(colorLevel); #ifdef IBM rgb = GetRGBColor(colorLevel); #else rgb = GetRGBColor(1.-colorLevel); #endif //rgb = GetRGBColor(0.8-colorLevel); RGBForeColor(&rgb); PaintRect(&rgbrect); MyFrameRect(&rgbrect); MyMoveTo(h+30,v+1); RGBForeColor(&colors[BLACK]); if (itemNumber<numLevels-1) { MyNumToStr(x,numstr); MyNumToStr((*gEditContourLevels)[itemNumber+1],numstr2); strcat(numstr," - "); strcat(numstr,numstr2); } else { strcpy(numstr,"> "); MyNumToStr(x,numstr2); strcat(numstr,numstr2); } if (gContourType==0) { strcat(numstr," mg/L"); } else { MyNumToStr(x,numstr); strcat(numstr," m"); } //drawstring(MyNumToStr(x,numstr)); drawstring(numstr); return; }
short DrawBullet(ListItem item, RECTPTR r, Boolean draw, RECTPTR box) { Rect b; Rect frame; PicHandle p = nil; #ifdef MAC MySetRect(&b, 5 + item.indent * 12, r->top + 4, 5 + item.indent * 12 + 6, r->bottom - 4); #else MySetRect(&b, 7 + item.indent * 12, r->top + 4, 7 + item.indent * 12 + 6, r->bottom - 5); #endif if (draw) { PenNormal(); RGBForeColor(&colors[BLACK]); switch (item.bullet) { case BULLET_DASH: MyMoveTo(b.left, (b.top + b.bottom) / 2); MyLineTo(b.right, (b.top + b.bottom) / 2); break; case BULLET_EMPTYBOX: b.left+=1;b.right+=1; #ifdef MAC p = GetPicture (EMPTYBOXPICT); if (!p) { SysBeep(1);break; } //frame = (**p).picFrame; frame = GetPICTFrame(p); MyOffsetRect(&frame, b.left, b.top); DrawPicture(p, &frame); #else MyFrameRect(&b); #endif b.left-=1;b.right-=1; break; case BULLET_FILLEDBOX: b.left+=1;b.right+=1; #ifdef MAC p = GetPicture (FILLEDBOXPICT); if (!p) { SysBeep(1);break; } //frame = (**p).picFrame; frame = GetPICTFrame(p); MyOffsetRect(&frame, b.left, b.top); DrawPicture(p, &frame); #else PaintRect(&b); #endif // MyFrameRect(&b); // MyMoveTo(b.left,b.top); // MyLineTo(b.right-1,b.bottom-1); // MyMoveTo(b.right-1,b.top); // MyLineTo(b.left,b.bottom-1); b.left-=1;b.right-=1; break; case BULLET_OPENTRIANGLE: case BULLET_CLOSEDTRIANGLE: DrawTriangle(b, item.bullet); break; } } if (box) (*box) = b; // line up the text with an indented bullet b.right += 3; // mac tweek by sohail return b.right; }
void DrawObject (ObjectRecHdl theObjectHdl, CMap *Map, LongRect *UpdateLRectPtr, DrawSpecRecPtr drawSettings) { OSType thisObjectType; RGBColor SaveColor; GetForeColor (&SaveColor); // save original forecolor GetObjectType (theObjectHdl, &thisObjectType); switch (thisObjectType) { case kPolyType: DrawMapPoly (Map, (PolyObjectHdl) theObjectHdl, drawSettings); break; case kBeachedLEType: DrawBeachLEs (Map, (PolyObjectHdl) theObjectHdl, drawSettings); break; case kRectType: { Rect ObjectRect; GetObjectScrRect (Map, theObjectHdl, &ObjectRect); MyOffsetRect (&ObjectRect, drawSettings -> offsetDx, drawSettings -> offsetDy); if (drawSettings -> fillCode == kPaintFillCode) { if (drawSettings -> backColorInd > 0) { Our_PmForeColor (drawSettings -> backColorInd); PaintRect (&ObjectRect); } } else if (drawSettings -> fillCode == kPatFillCode) { #ifdef MAC PenPat (&drawSettings -> backPattern); #else SetPenPat (drawSettings -> backPattern); #endif PaintRect (&ObjectRect); } if (drawSettings -> frameCode == kPatFrameCode) #ifdef MAC PenPat (&drawSettings -> forePattern); #else SetPenPat (drawSettings -> forePattern); #endif Our_PmForeColor (drawSettings -> foreColorInd); MyFrameRect (&ObjectRect); } break; case kTextType: { Rect ObjectRect; GetObjectScrRect (Map, theObjectHdl, &ObjectRect); MyOffsetRect (&ObjectRect, drawSettings -> offsetDx, drawSettings -> offsetDy); if (drawSettings -> fillCode == kPaintFillCode) { if (drawSettings -> backColorInd > 0) { Our_PmForeColor (drawSettings -> backColorInd); PaintRect (&ObjectRect); } } else if (drawSettings -> fillCode == kPatFillCode) { #ifdef MAC PenPat (&drawSettings -> backPattern); #else SetPenPat (drawSettings -> backPattern); #endif PaintRect (&ObjectRect); } if (drawSettings -> frameCode == kPatFrameCode) #ifdef MAC PenPat (&drawSettings -> forePattern); #else SetPenPat (drawSettings -> forePattern); #endif Our_PmForeColor (drawSettings -> foreColorInd); // DrawTextObject ((TextObjectRecHdl) theObjectHdl, Map, UpdateLRectPtr, drawSettings); } break; case kLineType: { LongRect ObjectLRect; Rect ObjectRect; LongPoint LineStartLPoint, LineEndLPoint; Point LineStartPoint, LineEndPoint; LineObjectRecHdl lineObjectHdl; lineObjectHdl = (LineObjectRecHdl) theObjectHdl; LineStartLPoint = (**lineObjectHdl).lineStartLPoint; LineEndLPoint = (**lineObjectHdl).lineEndLPoint; Map -> GetScrPoint (&LineStartLPoint, &LineStartPoint); Map -> GetScrPoint (&LineEndLPoint, &LineEndPoint); LineStartPoint.h += drawSettings -> offsetDx; LineStartPoint.v += drawSettings -> offsetDy; LineEndPoint.h += drawSettings -> offsetDx; LineEndPoint.v += drawSettings -> offsetDy; if (drawSettings -> fillCode == kPatFillCode) #ifdef MAC PenPat (&drawSettings -> backPattern); #else SetPenPat (drawSettings -> backPattern); #endif else if (drawSettings -> frameCode == kPatFrameCode) #ifdef MAC PenPat (&drawSettings -> forePattern); #else SetPenPat (drawSettings -> forePattern); #endif Our_PmForeColor (drawSettings -> foreColorInd); MyMoveTo (LineStartPoint.h, LineStartPoint.v); MyLineTo (LineEndPoint.h, LineEndPoint.v); } break; }
// Draws a marker at the current point, if a marker should be drawn there void CXYChart::DrawMarker( CDC *pDC, CPoint point, int whichDataSet, int dataPointNumber ) { CBrush brush, *pOldBrush; CRect rect; CPen pen, *oldPen; CPoint startPoint, startLocation; if( m_MarkerType[whichDataSet] == kXYMarkerNone ) return; // Check to see if we want to draw this marker if( m_MarkerFrequency[whichDataSet] > 0 ) { // positive means every nth data point if( dataPointNumber % m_MarkerFrequency[whichDataSet] != 0 ) return; } else if( m_MarkerFrequency[whichDataSet] < 0 ) { // negative means n number of times int n_elements = (m_DataSets[whichDataSet]->GetDimensions())[1]; int remainder = n_elements / (int)(abs(m_MarkerFrequency[whichDataSet])); if( ((dataPointNumber+remainder/2+1) % (n_elements/abs(m_MarkerFrequency[whichDataSet])) != 0 ) ) return; } else return; // == 0 means no marker startLocation = pDC->GetCurrentPosition(); pen.CreatePen( PS_SOLID, 1, m_PlotColor[whichDataSet] ); oldPen = pDC->SelectObject( &pen ); rect.SetRect( point.x - m_MarkerSize[whichDataSet], point.y - m_MarkerSize[whichDataSet], point.x + m_MarkerSize[whichDataSet], point.y + m_MarkerSize[whichDataSet] ); brush.CreateSolidBrush( m_PlotColor[whichDataSet] ); pOldBrush = pDC->SelectObject( &brush ); pDC->BeginPath(); switch( m_MarkerType[whichDataSet] ) { case kXYMarkerNone: return; break; case kXYMarkerCircle: // the size is the radius pDC->Arc( (LPCRECT)rect, point, point ); break; case kXYMarkerSquare: MyFrameRect( pDC, rect ); break; case kXYMarkerTriangle: // Need to update this to actually center correctly using // the triangle's geometry startPoint.x = point.x; startPoint.y = point.y - m_MarkerSize[whichDataSet]; pDC->MoveTo( startPoint ); startPoint.Offset( m_MarkerSize[whichDataSet], 2 * m_MarkerSize[whichDataSet] ); pDC->LineTo( startPoint ); startPoint.Offset( -2*m_MarkerSize[whichDataSet], 0 ); pDC->LineTo( startPoint ); startPoint.Offset( m_MarkerSize[whichDataSet], -2 * m_MarkerSize[whichDataSet] ); pDC->LineTo( startPoint ); pDC->MoveTo( point ); break; case kXYMarkerX: startPoint.x = point.x - m_MarkerSize[whichDataSet]; startPoint.y = point.y - m_MarkerSize[whichDataSet]; pDC->MoveTo( startPoint ); startPoint.Offset( 2*m_MarkerSize[whichDataSet], 2*m_MarkerSize[whichDataSet] ); pDC->LineTo( startPoint ); startPoint.Offset( -2*m_MarkerSize[whichDataSet], 0 ); pDC->MoveTo( startPoint ); startPoint.Offset( 2*m_MarkerSize[whichDataSet], -2*m_MarkerSize[whichDataSet] ); pDC->LineTo( startPoint ); // Move back to beginning pDC->MoveTo( point ); break; } pDC->EndPath(); if( m_MarkerFill[whichDataSet] ) pDC->StrokeAndFillPath(); else pDC->StrokePath(); pDC->MoveTo( startLocation ); pDC->SelectObject( oldPen ); pDC->SelectObject( pOldBrush ); }