void wdCanvasGetTextBox(cdCanvas* canvas, double x, double y, const char *s, double *xmin, double *xmax, double *ymin, double *ymax) { int rx, ry, rxmin, rxmax, rymin, rymax; _wWorld2Canvas(canvas, x, y, rx, ry); cdCanvasGetTextBox(canvas, rx, ry, s, &rxmin, &rxmax, &rymin, &rymax); _wCanvas2World(canvas, rxmin, rymin, *xmin, *ymin); _wCanvas2World(canvas, rxmax, rymax, *xmax, *ymax); }
void wdCanvasGetTextBox(cdCanvas* canvas, double x, double y, const char *s, double *xmin, double *xmax, double *ymin, double *ymax) { int rx, ry, rxmin, rxmax, rymin, rymax; assert(canvas); if (!_cdCheckCanvas(canvas)) return; _wWorld2Canvas(canvas, x, y, rx, ry); cdCanvasGetTextBox(canvas, rx, ry, s, &rxmin, &rxmax, &rymin, &rymax); _wCanvas2World(canvas, rxmin, rymin, *xmin, *ymin); _wCanvas2World(canvas, rxmax, rymax, *xmax, *ymax); }
static void cdftext(cdCtxCanvas *ctxcanvas, double x, double y, const char *text, int len) { int xmin, xmax, ymin, ymax; tPrimNode *prim = primCreate(CDPIC_FTEXT); primAddAttrib_Text(prim, ctxcanvas->canvas); prim->param.textf.x = x; prim->param.textf.y = y; prim->param.textf.s = cdStrDupN(text, len); prim->param_buffer = prim->param.textf.s; picAddPrim(ctxcanvas, prim); cdCanvasGetTextBox(ctxcanvas->canvas, _cdRound(x), _cdRound(y), prim->param.text.s, &xmin, &xmax, &ymin, &ymax); picUpdateBBox(ctxcanvas, xmin, ymin, 0); picUpdateBBox(ctxcanvas, xmax, ymax, 0); }
static void iGaugeDrawText(Ihandle* ih, int xmid) { int x, y, xmin, xmax, ymin, ymax; char* text = ih->data->text; cdIupSetFont(ih, ih->data->cddbuffer, IupGetAttribute(ih, "FONT")); cdCanvasTextAlignment(ih->data->cddbuffer, CD_CENTER); cdCanvasBackOpacity(ih->data->cddbuffer, CD_TRANSPARENT); x = (int)(0.5 * ih->data->w); y = (int)(0.5 * ih->data->h); if(text == NULL) { char* m = iupStrGetMemory(30); sprintf(m, "%.1f%%", 100 * (ih->data->value - ih->data->vmin) / (ih->data->vmax - ih->data->vmin)); text = m; } cdCanvasGetTextBox(ih->data->cddbuffer, x, y, text, &xmin, &xmax, &ymin, &ymax); if(xmid < xmin) { cdCanvasForeground(ih->data->cddbuffer, ih->data->fgcolor); cdCanvasText(ih->data->cddbuffer, x, y, text); } else if(xmid > xmax) { cdCanvasForeground(ih->data->cddbuffer, ih->data->bgcolor); cdCanvasText(ih->data->cddbuffer, x, y, text); } else { cdCanvasClip(ih->data->cddbuffer, CD_CLIPAREA); cdCanvasClipArea(ih->data->cddbuffer, xmin, xmid, ymin, ymax); cdCanvasForeground(ih->data->cddbuffer, ih->data->bgcolor); cdCanvasText(ih->data->cddbuffer, x, y, text); cdCanvasClipArea(ih->data->cddbuffer, xmid, xmax, ymin, ymax); cdCanvasForeground(ih->data->cddbuffer, ih->data->fgcolor); cdCanvasText(ih->data->cddbuffer, x, y, text); cdCanvasClip(ih->data->cddbuffer, CD_CLIPOFF); } }
bool iupPlot::CheckInsideTitle(cdCanvas* canvas, int x, int y) { // it does not depend on theMargin if (mTitle.GetText()) { SetTitleFont(canvas); cdCanvasTextAlignment(canvas, CD_NORTH); int xmin, xmax, ymin, ymax; cdCanvasGetTextBox(canvas, mTitle.mPosX, mTitle.mPosY, mTitle.GetText(), &xmin, &xmax, &ymin, &ymax); if (x >= xmin && x <= xmax && y >= ymin && y <= ymax) return true; } return false; }
void DrawTextBox(cdCanvas* canvas, int x, int y, char* text) { int rect[8], draw_box; cdCanvasLineWidth(canvas, 1); cdCanvasLineStyle(canvas, CD_CONTINUOUS); draw_box = 0; if (draw_box) { int xmin, xmax, ymin, ymax; cdCanvasGetTextBox(canvas, x, y, text, &xmin, &xmax, &ymin, &ymax); cdCanvasRect(canvas, xmin, xmax, ymin, ymax); if (cdCanvasTextOrientation(canvas, CD_QUERY) == 0) { cdCanvasForeground(canvas, CD_RED); cdCanvasLine(canvas, xmin, y, xmax, y); } } else { /* bounding box */ cdCanvasGetTextBounds(canvas, x, y, text, rect); cdCanvasForeground(canvas, CD_GREEN); cdCanvasBegin(canvas, CD_CLOSED_LINES); cdCanvasVertex(canvas, rect[0], rect[1]); cdCanvasVertex(canvas, rect[2], rect[3]); cdCanvasVertex(canvas, rect[4], rect[5]); cdCanvasVertex(canvas, rect[6], rect[7]); cdCanvasEnd(canvas); } /* reference point */ cdCanvasForeground(canvas, CD_BLUE); cdCanvasMarkType(canvas, CD_PLUS); cdCanvasMarkSize(canvas, 30); cdCanvasMark(canvas, x, y); cdCanvasForeground(canvas, CD_BLACK); cdCanvasText(canvas, x, y, text); }
void SimpleDrawTest(cdCanvas* canvas) //void SimpleDrawMainTest(cdCanvas* canvas) { long pattern[16]; /* 4x4 pattern */ int w, h; int xmin, xmax, ymin, ymax; /* notice that if we are not using world coordinates it is harder to position all the objetcs we want. */ cdCanvasGetSize(canvas, &w, &h, 0, 0); cdCanvasBackground(canvas, CD_WHITE); cdCanvasClear(canvas); /* pattern initialization */ pattern[0] = CD_RED; pattern[1] = CD_RED; /* first line */ pattern[2] = CD_YELLOW; pattern[3] = CD_YELLOW; pattern[4] = CD_RED; pattern[5] = CD_RED; /* second line */ pattern[6] = CD_YELLOW; pattern[7] = CD_YELLOW; pattern[8] = CD_YELLOW; pattern[9] = CD_YELLOW; /* third line */ pattern[10] = CD_YELLOW; pattern[11] = CD_YELLOW; pattern[12] = CD_YELLOW; pattern[13] = CD_YELLOW; /* fourth line */ pattern[14] = CD_YELLOW; pattern[15] = CD_YELLOW; /* set the line attributes */ cdCanvasLineWidth(canvas, 4); cdCanvasLineStyle(canvas, CD_CONTINUOUS); /* in the center draw a pattern pizza with a slice mising */ cdCanvasPattern(canvas, 4, 4, pattern); cdCanvasSector(canvas, w/2, h/2, w/2, h/2, 45, 0); /* draws a dark red border */ cdCanvasForeground(canvas, CD_DARK_RED); cdCanvasInteriorStyle(canvas, CD_HOLLOW); cdCanvasSector(canvas, w/2, h/2, w/2, h/2, 45, 0); /* on the left a red hash diamond */ /* notice the the default back opacity is transparent and the pattern of the sector will still be visible inside the hatch where the two objects intersect */ cdCanvasForeground(canvas, CD_RED); cdCanvasHatch(canvas, CD_DIAGCROSS); cdCanvasBegin(canvas, CD_FILL); cdCanvasVertex(canvas, w/4, h/4); cdCanvasVertex(canvas, w/2-w/8, h/2); cdCanvasVertex(canvas, w/4, 3*h/4); cdCanvasVertex(canvas, w/8, h/2); cdCanvasEnd(canvas); /* draws a blue roof.*/ cdCanvasForeground(canvas, CD_BLUE); cdCanvasLine(canvas, w/8, h/2, w/4, 3*h/4); cdCanvasLine(canvas, w/4, 3*h/4, w/2-w/8, h/2); /* draws a dashed ribbon on the right with a custom color */ cdCanvasForeground(canvas, cdEncodeColor(100, 25, 200)); cdCanvasLineStyle(canvas, CD_DASH_DOT); cdCanvasBegin(canvas, CD_BEZIER); cdCanvasVertex(canvas, 3*w/4-20, h/2-50); cdCanvasVertex(canvas, 3*w/4+150, 3*h/4-50); cdCanvasVertex(canvas, 3*w/4-150, 3*h/4-50); cdCanvasVertex(canvas, 3*w/4+20, h/2-50); cdCanvasEnd(canvas); cdCanvasFont(canvas, "Helvetica", CD_BOLD, 40); cdCanvasTextAlignment(canvas, CD_CENTER); cdCanvasText(canvas, w/2, h/4-50, "Canvas Draw"); cdCanvasGetTextBox(canvas, w/2, h/4-50, "Canvas Draw", &xmin, &xmax, &ymin, &ymax); cdCanvasRect(canvas, xmin, xmax, ymin, ymax); }