1*5c6c1daeSBarry Smith 2*5c6c1daeSBarry Smith /* 3*5c6c1daeSBarry Smith Provides the calling sequences for all the basic PetscDraw routines. 4*5c6c1daeSBarry Smith */ 5*5c6c1daeSBarry Smith #include <petsc-private/drawimpl.h> /*I "petscdraw.h" I*/ 6*5c6c1daeSBarry Smith 7*5c6c1daeSBarry Smith #undef __FUNCT__ 8*5c6c1daeSBarry Smith #define __FUNCT__ "PetscDrawString" 9*5c6c1daeSBarry Smith /*@C 10*5c6c1daeSBarry Smith PetscDrawString - PetscDraws text onto a drawable. 11*5c6c1daeSBarry Smith 12*5c6c1daeSBarry Smith Not Collective 13*5c6c1daeSBarry Smith 14*5c6c1daeSBarry Smith Input Parameters: 15*5c6c1daeSBarry Smith + draw - the drawing context 16*5c6c1daeSBarry Smith . xl - the coordinates of lower left corner of text 17*5c6c1daeSBarry Smith . yl - the coordinates of lower left corner of text 18*5c6c1daeSBarry Smith . cl - the color of the text 19*5c6c1daeSBarry Smith - text - the text to draw 20*5c6c1daeSBarry Smith 21*5c6c1daeSBarry Smith Level: beginner 22*5c6c1daeSBarry Smith 23*5c6c1daeSBarry Smith Concepts: drawing^string 24*5c6c1daeSBarry Smith Concepts: string^drawing 25*5c6c1daeSBarry Smith 26*5c6c1daeSBarry Smith .seealso: PetscDrawStringVertical() 27*5c6c1daeSBarry Smith 28*5c6c1daeSBarry Smith @*/ 29*5c6c1daeSBarry Smith PetscErrorCode PetscDrawString(PetscDraw draw,PetscReal xl,PetscReal yl,int cl,const char text[]) 30*5c6c1daeSBarry Smith { 31*5c6c1daeSBarry Smith PetscErrorCode ierr; 32*5c6c1daeSBarry Smith PetscBool isnull; 33*5c6c1daeSBarry Smith 34*5c6c1daeSBarry Smith PetscFunctionBegin; 35*5c6c1daeSBarry Smith PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 36*5c6c1daeSBarry Smith PetscValidCharPointer(text,5); 37*5c6c1daeSBarry Smith ierr = PetscObjectTypeCompare((PetscObject)draw,PETSC_DRAW_NULL,&isnull);CHKERRQ(ierr); 38*5c6c1daeSBarry Smith if (isnull) PetscFunctionReturn(0); 39*5c6c1daeSBarry Smith ierr = (*draw->ops->string)(draw,xl,yl,cl,text);CHKERRQ(ierr); 40*5c6c1daeSBarry Smith PetscFunctionReturn(0); 41*5c6c1daeSBarry Smith } 42*5c6c1daeSBarry Smith 43*5c6c1daeSBarry Smith #undef __FUNCT__ 44*5c6c1daeSBarry Smith #define __FUNCT__ "PetscDrawBoxedString" 45*5c6c1daeSBarry Smith /*@C 46*5c6c1daeSBarry Smith PetscDrawBoxedString - Draws a string with a box around it 47*5c6c1daeSBarry Smith 48*5c6c1daeSBarry Smith Not Collective 49*5c6c1daeSBarry Smith 50*5c6c1daeSBarry Smith Input Parameters: 51*5c6c1daeSBarry Smith + draw - the drawing context 52*5c6c1daeSBarry Smith . sxl - the coordinates of center of the box 53*5c6c1daeSBarry Smith . syl - the coordinates of top line of box 54*5c6c1daeSBarry Smith . sc - the color of the text 55*5c6c1daeSBarry Smith . bc - the color of the bounding box 56*5c6c1daeSBarry Smith - text - the text to draw 57*5c6c1daeSBarry Smith 58*5c6c1daeSBarry Smith Output Parameter: 59*5c6c1daeSBarry Smith . w,h - width and height of resulting box (optional) 60*5c6c1daeSBarry Smith 61*5c6c1daeSBarry Smith Level: beginner 62*5c6c1daeSBarry Smith 63*5c6c1daeSBarry Smith Concepts: drawing^string 64*5c6c1daeSBarry Smith Concepts: string^drawing 65*5c6c1daeSBarry Smith 66*5c6c1daeSBarry Smith .seealso: PetscDrawStringVertical(), PetscDrawBoxedStringSize() 67*5c6c1daeSBarry Smith 68*5c6c1daeSBarry Smith @*/ 69*5c6c1daeSBarry Smith PetscErrorCode PetscDrawBoxedString(PetscDraw draw,PetscReal sxl,PetscReal syl,int sc,int bc,const char text[],PetscReal *w,PetscReal *h) 70*5c6c1daeSBarry Smith { 71*5c6c1daeSBarry Smith PetscErrorCode ierr ; 72*5c6c1daeSBarry Smith PetscBool isnull; 73*5c6c1daeSBarry Smith PetscReal top,left,right,bottom,tw,th; 74*5c6c1daeSBarry Smith size_t len,mlen = 0; 75*5c6c1daeSBarry Smith char **array; 76*5c6c1daeSBarry Smith int cnt,i; 77*5c6c1daeSBarry Smith 78*5c6c1daeSBarry Smith PetscFunctionBegin; 79*5c6c1daeSBarry Smith PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 80*5c6c1daeSBarry Smith PetscValidCharPointer(text,5); 81*5c6c1daeSBarry Smith ierr = PetscObjectTypeCompare((PetscObject)draw,PETSC_DRAW_NULL,&isnull);CHKERRQ(ierr); 82*5c6c1daeSBarry Smith if (isnull) PetscFunctionReturn(0); 83*5c6c1daeSBarry Smith 84*5c6c1daeSBarry Smith ierr = PetscStrToArray(text,'\n',&cnt,&array);CHKERRQ(ierr); 85*5c6c1daeSBarry Smith for (i=0; i<cnt; i++) { 86*5c6c1daeSBarry Smith ierr = PetscStrlen(array[i],&len);CHKERRQ(ierr); 87*5c6c1daeSBarry Smith mlen = PetscMax(mlen,len); 88*5c6c1daeSBarry Smith } 89*5c6c1daeSBarry Smith 90*5c6c1daeSBarry Smith ierr = PetscDrawStringGetSize(draw,&tw,&th);CHKERRQ(ierr); 91*5c6c1daeSBarry Smith 92*5c6c1daeSBarry Smith top = syl; 93*5c6c1daeSBarry Smith left = sxl - .5*(mlen + 2)*tw; 94*5c6c1daeSBarry Smith right = sxl + .5*(mlen + 2)*tw; 95*5c6c1daeSBarry Smith bottom = syl - (1.0 + cnt)*th; 96*5c6c1daeSBarry Smith if (w) *w = right - left; 97*5c6c1daeSBarry Smith if (h) *h = top - bottom; 98*5c6c1daeSBarry Smith 99*5c6c1daeSBarry Smith /* compute new bounding box */ 100*5c6c1daeSBarry Smith draw->boundbox_xl = PetscMin(draw->boundbox_xl,left); 101*5c6c1daeSBarry Smith draw->boundbox_xr = PetscMax(draw->boundbox_xr,right); 102*5c6c1daeSBarry Smith draw->boundbox_yl = PetscMin(draw->boundbox_yl,bottom); 103*5c6c1daeSBarry Smith draw->boundbox_yr = PetscMax(draw->boundbox_yr,top); 104*5c6c1daeSBarry Smith 105*5c6c1daeSBarry Smith /* top, left, bottom, right lines */ 106*5c6c1daeSBarry Smith ierr = PetscDrawLine(draw,left,top,right,top,bc);CHKERRQ(ierr); 107*5c6c1daeSBarry Smith ierr = PetscDrawLine(draw,left,bottom,left,top,bc);CHKERRQ(ierr); 108*5c6c1daeSBarry Smith ierr = PetscDrawLine(draw,right,bottom,right,top,bc);CHKERRQ(ierr); 109*5c6c1daeSBarry Smith ierr = PetscDrawLine(draw,left,bottom,right,bottom,bc);CHKERRQ(ierr); 110*5c6c1daeSBarry Smith 111*5c6c1daeSBarry Smith for (i=0; i<cnt; i++) { 112*5c6c1daeSBarry Smith ierr = PetscDrawString(draw,left + tw,top - (1.5 + i)*th,sc,array[i]);CHKERRQ(ierr); 113*5c6c1daeSBarry Smith } 114*5c6c1daeSBarry Smith ierr = PetscStrToArrayDestroy(cnt,array);CHKERRQ(ierr); 115*5c6c1daeSBarry Smith 116*5c6c1daeSBarry Smith PetscFunctionReturn(0); 117*5c6c1daeSBarry Smith } 118