Мне нужно создать собственный виджет тк холст (сюжет). Как это сделать описано http://www.tcl.tk/man/tcl8.0/TkLib/CrtItemType.htm.
Это функция отображения, которая вызывается, когда холсту нужно показать график.
void
PlotItem::DisplayPlot( Tk_Canvas canvas, Tk_Item *itemPtr, Display *display, Drawable drawable, int x, int y, int width, int height) {
PlotItem *plotPtr = (PlotItem *) itemPtr;
GC gc = XCreateGC(display, drawable, 0, 0);
XFillRectangle(display, drawable, gc, 100, 100, 50, 50);
}
main.cpp
int main() {
Tcl_Interp *interp = Tcl_CreateInterp();
if (Tcl_Init(interp) == TCL_ERROR) {
return TCL_ERROR;
}
if (Tk_Init(interp) == TCL_ERROR) {
return TCL_ERROR;
}
Tk_CreateItemType(&tkPlotType);
int result = Tcl_Eval(interp, "source main.tcl");
std::cout << result << std::endl;
std::cout << interp->result << '\n';
Tk_MainLoop();
return 0;
}
main.tcl
wm title . program_tk
wm minsize . 628 628
canvas .vp -background white -width 310 -height 224
canvas .hp -background white -width 310 -height 224
pack .vp
pack .hp
set verticalPlot [eval .vp create plot 1 1 ]
set horizontalPlot [eval .hp create plot 1 1 ]
Создано два разных виджета холста, каждый из которых содержит виджет графика. Отображается только код функции отображения, потому что другие функции ничего не делают. Мне нужен только простой функционал (отобразить сюжет). Вместо графика здесь печатается прямоугольник.
Проблема в том, что черный прямоугольник отображается только на первом графике, второй пустой. Как это могло произойти?
Задача ещё не решена.
Других решений пока нет …