我正在尝试使用 Gtkmm 和 Gdk::Drawable 编写一个类似于十六进制编辑器的东西。确切地说,只是一个十六进制视图。
起初我尝试使用糟糕的开罗。我想我也不应该靠近 Pango 的任何地方。
现在我正在使用这样的东西:Using prerendered characters for text。
void HexView::on_vScrl_value_changed() {
drawingArea.queue_draw();
}
bool HexView::DrawingArea::on_expose_event(GdkEventExpose* event) {
/* */
Glib::RefPtr<Gdk::Window> window = get_window();
if(window && data && numBytes) {
/* */
unsigned int scrlY = hexView->vScrl.get_value();
/* */
for(/*loop visible bytes*/) {
/* */
window->draw_pixbuf(char_pixbuf, 0, 0, x, y, 20, 20, Gdk::RGB_DITHER_NONE, 0, 0);
}
}
return true;
}
这使得渲染和滚动可以忍受,但仍然很慢。CPU在一个小弹簧上占用和滚动手柄,有点落后。在一个 800x300 的小区域:(
有什么改进的想法吗?
Gtk::TexView 小部件完美呈现大量文本,并且在 1600x1200 窗口上滚动效果很好。