FLTK child window 未在 Linux 重绘
FLTK child window not redrawing on Linux
我正在做一个不错的 open-source 项目,我希望发布它,但是我遇到了一些问题,child window 在损坏后没有重新绘制。详情请看这张图:
这是我用来显示的代码:
void showMessageWindow (std::string strMessage, std::string strTitle)
{
Fl_Window* msgWin = new Fl_Window(400, 255, NULL);
if (strTitle == "")
msgWin->label("Window Title");
msgWin->box(FL_BORDER_FRAME);
msgWin->set_non_modal();
Fl_PNG_Image* img = new Fl_PNG_Image("/home/obaker/Pictures/info-icon.png");
Fl_Box* ibox = new Fl_Box(20, 20, 48, 48);
ibox->image(img);
Fl_Multiline_Output* mOut = new Fl_Multiline_Output(90, 20, 275, 175, NULL);
mOut->box(FL_NO_BOX);
mOut->wrap(true);
mOut->readonly(true);
mOut->cursor_color(FL_BACKGROUND_COLOR);
mOut->value(strdup(strMessage.c_str()));
Fl_Button* btn = new Fl_Button(150, 210, 100, 35, "OK");
btn->box(FL_GTK_UP_BOX);
btn->shortcut(FL_Enter);
btn->callback(msgBoxClose, msgWin);
msgWin->add(ibox);
msgWin->add(mOut);
msgWin->add(btn);
msgWin->show();
}
我试过使用 Fl_Double_Window 而不是 Fl_Window,结果看起来更糟:
如 'edgy' 和 'cool' 那样,它不适合我的项目。 :-)
我正在 Debian Linux 8、64 位、AMD Radeon HD 6670 显卡、8 GB RAM 上进行开发和测试。 FLTK 的 Debian-provided 版本是 1.3 (1.3.2-6)。
parent window 是一个 Fl_Double_Window 并且它自己重绘就好了。
有什么人可以推荐强制此 child window 在损坏时重绘自身吗?
提前致谢! :-)
在 FLTK 论坛上 Chris 的指导下,我解决了这个问题。
必要的更改是:
msgWin->box(FL_BORDER_BOX)
而不是
msgWin->box(FL_BORDER_FRAME)
"FL_NO_BOX for output may also lead to drawing artifacts. Better
set the outputs background color to the windows background color:"
mOut->box(FL_FLAT_BOX);
mOut->color(msgWin->color());
感谢您的帮助! :-)
我正在做一个不错的 open-source 项目,我希望发布它,但是我遇到了一些问题,child window 在损坏后没有重新绘制。详情请看这张图:
这是我用来显示的代码:
void showMessageWindow (std::string strMessage, std::string strTitle)
{
Fl_Window* msgWin = new Fl_Window(400, 255, NULL);
if (strTitle == "")
msgWin->label("Window Title");
msgWin->box(FL_BORDER_FRAME);
msgWin->set_non_modal();
Fl_PNG_Image* img = new Fl_PNG_Image("/home/obaker/Pictures/info-icon.png");
Fl_Box* ibox = new Fl_Box(20, 20, 48, 48);
ibox->image(img);
Fl_Multiline_Output* mOut = new Fl_Multiline_Output(90, 20, 275, 175, NULL);
mOut->box(FL_NO_BOX);
mOut->wrap(true);
mOut->readonly(true);
mOut->cursor_color(FL_BACKGROUND_COLOR);
mOut->value(strdup(strMessage.c_str()));
Fl_Button* btn = new Fl_Button(150, 210, 100, 35, "OK");
btn->box(FL_GTK_UP_BOX);
btn->shortcut(FL_Enter);
btn->callback(msgBoxClose, msgWin);
msgWin->add(ibox);
msgWin->add(mOut);
msgWin->add(btn);
msgWin->show();
}
我试过使用 Fl_Double_Window 而不是 Fl_Window,结果看起来更糟:
如 'edgy' 和 'cool' 那样,它不适合我的项目。 :-)
我正在 Debian Linux 8、64 位、AMD Radeon HD 6670 显卡、8 GB RAM 上进行开发和测试。 FLTK 的 Debian-provided 版本是 1.3 (1.3.2-6)。
parent window 是一个 Fl_Double_Window 并且它自己重绘就好了。
有什么人可以推荐强制此 child window 在损坏时重绘自身吗?
提前致谢! :-)
在 FLTK 论坛上 Chris 的指导下,我解决了这个问题。
必要的更改是:
msgWin->box(FL_BORDER_BOX)
而不是
msgWin->box(FL_BORDER_FRAME)
"FL_NO_BOX for output may also lead to drawing artifacts. Better set the outputs background color to the windows background color:"
mOut->box(FL_FLAT_BOX);
mOut->color(msgWin->color());
感谢您的帮助! :-)