GTKD : 최소한의 도면 예제?
-
17-09-2020 - |
문제
나는 상당히 숙련 된 프로그래머이지만 GUI 프로그래밍에 대한 새로운 프로그램입니다.나는 DFL에 대해 GTKD로 쓴 플로팅 라이브러리를 포트하려고 노력하고 있으며, 드로잉을 나타낼 수 없습니다.다음 코드는 나에게 빈 창을 생성합니다.누군가가 문제가 무엇인지, 그리고 / 또는 DrawingArea
에 몇 줄을 가져오고 MainWindow
에 결과를 표시하기위한 최소한의 예제 코드를 게시 할 수 있습니까?
import gtk.DrawingArea, gtk.Main, gtk.MainWindow, gdk.GC, gdk.Drawable,
gdk.Color;
void main(string[] args) {
Main.init(args);
auto win = new MainWindow("Hello, world");
win.setDefaultSize(800, 600);
auto drawingArea = new DrawingArea(800, 600);
win.add(drawingArea);
drawingArea.realize();
auto drawable = drawingArea.getWindow();
auto gc = new GC(drawable);
gc.setForeground(new Color(255, 0, 0));
gc.setBackground(new Color(255, 255, 255));
drawable.drawLine(gc, 0, 0, 100, 100);
drawingArea.showAll();
drawingArea.queueDraw();
win.showAll();
Main.run();
}
. 해결책
D는 경험이 없지만 GTK에서 많은 것들이 없으므로 GTKD 자습서의 도움으로 최소한의 예를 해킹 할 수있었습니다.
import gtk.DrawingArea, gtk.Main, gtk.MainWindow, gdk.GC, gdk.Drawable,
gdk.Color, gtk.Widget;
class DrawingTest : MainWindow
{
this()
{
super("Hello, world");
setDefaultSize(800, 600);
auto drawingArea = new DrawingArea(800, 600);
add(drawingArea);
drawingArea.addOnExpose(&drawStuff);
showAll();
}
bool drawStuff(GdkEventExpose *event, Widget self)
{
auto drawable = self.getWindow();
auto gc = new GC(drawable);
gc.setForeground(new Color(cast(ubyte)255, cast(ubyte)0, cast(ubyte)0));
gc.setBackground(new Color(cast(ubyte)255, cast(ubyte)255, cast(ubyte)255));
drawable.drawLine(gc, 0, 0, 100, 100);
return true;
}
}
void main(string[] args) {
Main.init(args);
new DrawingTest();
Main.run();
}
.
GTK의 DrawingArea
는 실제로 페인트를 칠할 수있는 빈 위젯이며 위젯에서 페인팅하는 것은 항상 expose-event
핸들러에서 항상 수행되어야합니다.(이것이 이것이 GTK 3에서 변할 것으로 이해할 것입니다!)
신호 콜백으로 함수를 연결할 수 없으며 대리인만이
이유가됩니다.제휴하지 않습니다 StackOverflow