void DoDraw() { const int k = 5; if( !(lastx - k < 0 || lastx + k > 400 || lasty - k < 0 || lasty + k > 400) ) // don't draw outside bounds... { Rect r; r.left = short(viewOffsetX + lastx - k); r.right = short(viewOffsetX + lastx + k); r.top = short(viewOffsetY + lasty - k); r.bottom = short(viewOffsetY + lasty + k); PaintOval(&r); } }
void LCD_dopaintOval(Lcd *x, Symbol *s, short argc, Atom *argv) { PaletteHandle pH; RGBColor fColor; GrafPort *gp; RgnHandle cur; Rect b,r; long left, top, right, bottom, color; EnterCallback(); left = argv->a_w.w_long; top = (argv+1)->a_w.w_long; right = (argv+2)->a_w.w_long; bottom = (argv+3)->a_w.w_long; color = (argv+4)->a_w.w_long; #ifdef debug post("paintOval"); #endif gp = patcher_setport(x->lcd_box.b_patcher); if (gp) { if (!box_nodraw((void *)x)) { if (color) // sde 11/1 x->lcd_pIndex = (short)color & (numPaletteColors-1); cur = NewRgn(); GetClip(cur); SetClip(x->lcd_region); setUpPalette(x,&fColor,&pH); r = x->lcd_box.b_rect; b.left = r.left + (short)left; b.top = r.top + (short)top; b.right = r.left + (short)right; b.bottom = r.top + (short)bottom; PaintOval(&b); restorePalette(x,&fColor,&pH); SetClip(cur); DisposeRgn(cur); } SetPort(gp); } ExitCallback(); }
/******************************************************************************* Function : DDV_DrawSequenceName() Purpose : draw the name of the sequence (left column of the DDV panel) Parameters : GrData; graphical data (font size, etc) ScaleStyle;style of the ParaG scale top, left; coord to start the draw Return value : none *******************************************************************************/ static void DDV_DrawSequenceName(UnDViewerGraphDataPtr GrData,ParaGPtr pgp, Int2 top,Int2 left,Int4 cur_row,Int4 CurEditRow,Int4 CurMasterRow) { SeqIdPtr sip = NULL; RecT rc; Int2 x,y,decal=1,size;/*text position/size*/ Char szAccess[21]; BioseqPtr bsp; /*get a name*/ bsp = BioseqLockById(pgp->sip); if(bsp) { sip = SeqIdFindBestAccession(bsp->id); BioseqUnlock(bsp); } if (!sip) sip = SeqIdFindBest(pgp->sip, 0); SeqIdWrite(sip, szAccess,PRINTID_TEXTID_ACCESSION, 20); /*compute position*/ if (pgp->ScaleStyle==SCALE_POS_TOP) decal++; /*draw name*/ size=StringWidth(szAccess); x=left/*-GrData->udv_scale.cxLeftScale*/-size; y=top+decal*GrData->udv_font.LineHeight; MoveTo(x,y); if (cur_row==CurEditRow){ Magenta(); } PaintString (szAccess); if (cur_row==CurMasterRow){ Blue(); MoveTo(x,y); LineTo(x+size,y); } /*draw a little box (for selection a full sequence)*/ left+=GrData->udv_font.cxChar; top+=GrData->udv_font.cxChar/2; LoadRect(&rc,left,top,left+GrData->udv_font.cxChar, top+GrData->udv_font.cxChar); Blue(); PaintOval(&rc); Black(); }
void drawItem(int left, int top, Str255 *label, Boolean listEnabled, Boolean itemEnabled ) { Rect rect; RGBColor color, markColor; if (listEnabled) color.red = color.green = color.blue = 0xffff; else color.red = color.green = color.blue = 0xffff / 2; SetRect( &rect, left, top + 2, left + 12, top + 14 ); ForeColor( blackColor ); FrameOval( &rect ); OffsetRect( &rect, -1, -1 ); RGBForeColor( &color ); FrameOval( &rect ); if (listEnabled && itemEnabled) markColor.red = markColor.green = markColor.blue = 0xffff; else if (itemEnabled) markColor.red = markColor.green = markColor.blue = 0xffff / 2; else markColor.red = markColor.green = markColor.blue = 8700; InsetRect( &rect, 3, 3 ); RGBForeColor( &markColor ); PaintOval( &rect ); ForeColor( blackColor ); MoveTo( left + 16, top + 11 ); DrawString( (unsigned char*)label ); RGBForeColor( &color ); MoveTo( left + 15, top + 10 ); DrawString( (unsigned char*)label ); }
static void Marker (short n, short s, short x, short y) { Rect r; PolyHandle myPoly; s = s/2; r.top = y-s; r.bottom = y+s; r.left = x-s; r.right = x+s; n = n%11; switch (n) { case 0 : FrameRect(&r); break; case 1 : PenPat(&qd.gray); PaintRect(&r); PenNormal(); break; case 2 : PaintRect(&r); break; case 3 : FrameOval(&r); break; case 4 : PenPat(&qd.gray); PaintOval(&r); PenNormal(); break; case 5 : PaintOval(&r); break; case 6 : MoveTo(x,y+s); LineTo(x+s,y); LineTo(x,y-s); LineTo(x-s,y); LineTo(x,y+s); break; case 7 : PenPat(&qd.gray); myPoly = OpenPoly(); MoveTo(x,y+s); LineTo(x+s,y); LineTo(x,y-s); LineTo(x-s,y); LineTo(x,y+s); ClosePoly(); PaintPoly(myPoly); KillPoly(myPoly); PenNormal(); break; case 8 : myPoly = OpenPoly(); MoveTo(x,y+s); LineTo(x+s,y); LineTo(x,y-s); LineTo(x-s,y); LineTo(x,y+s); ClosePoly(); PaintPoly(myPoly); KillPoly(myPoly); PenNormal(); break; case 9 : MoveTo(x,y+s); LineTo(x,y-s); MoveTo(x-s,y); LineTo(x+s,y-s); break; case 10 : MoveTo(x-s,y+s); LineTo(x+s,y-s); MoveTo(x-s,y-s); LineTo(x+s,y+s); break; } }
static void InvMarker (SHORT_POINT point) { Rect r; PolyHandle myPoly; short n,s,S,x,y; s = currgw->marker_size/2; S = 1.41*s; n = currgw->marker_id; x = point.x; y = point.y; r.top = y-s; r.bottom = y+s; r.left = x-s; r.right = x+s; switch (n) { case EMPTY_SQUARE_MARKER : PenMode(patXor); FrameRect(&r); break; case GRAY_SQUARE_MARKER : PenMode(patXor); PenPat(qdgray); PaintRect(&r); PenNormal(); break; case FILLED_SQUARE_MARKER : PenMode(patXor); PenPat(qdgray); PaintRect(&r); break; case EMPTY_CIRCLE_MARKER : PenMode(patXor); FrameOval(&r); break; case GRAY_CIRCLE_MARKER : PenMode(patXor); PenPat(qdgray); PaintOval(&r); PenNormal(); break; case FILLED_CIRCLE_MARKER : PenMode(patXor); PenPat(qdgray); PaintOval(&r); break; case EMPTY_RHOMBUS_MARKER : PenMode(patXor); PenPat(qdgray); MoveTo(x,y+S); LineTo(x+S,y); LineTo(x,y-S); LineTo(x-S,y); LineTo(x,y+S); break; case GRAY_RHOMBUS_MARKER : PenMode(patXor); PenPat(qdgray); myPoly = OpenPoly(); MoveTo(x,y+S); LineTo(x+S,y); LineTo(x,y-s); LineTo(x-S,y); LineTo(x,y+S); ClosePoly(); InvertPoly(myPoly); KillPoly(myPoly); PenNormal(); break; case FILLED_RHOMBUS_MARKER : myPoly = OpenPoly(); MoveTo(x,y+S); LineTo(x+S,y); LineTo(x,y-S); LineTo(x-S,y); LineTo(x,y+S); ClosePoly(); InvertPoly(myPoly); KillPoly(myPoly); PenNormal(); break; case PLUS_MARKER : PenMode(patXor); PenPat(qdgray); MoveTo(x,y+s); LineTo(x,y-s); MoveTo(x-s,y); LineTo(x+s,y); break; case CROSS_MARKER : PenMode(patXor); PenPat(qdgray); MoveTo(x-s,y+s); LineTo(x+s,y-s); MoveTo(x-s,y-s); LineTo(x+s,y+s); break; default : break; } PenNormal(); }