Fixing rendering loop in the FileBrowser, based on a suggestion from

Adam
This commit is contained in:
Hombre
2015-12-05 01:27:39 +01:00
parent 169f4d7619
commit 48f0225104
5 changed files with 69 additions and 20 deletions

View File

@@ -29,7 +29,7 @@
#define CROPRESIZEBORDER 4
extern Glib::Threads::Thread* mainThread;
//extern Glib::Threads::Thread* mainThread;
bool FileBrowserEntry::iconsLoaded(false);
Glib::RefPtr<Gdk::Pixbuf> FileBrowserEntry::editedIcon;

View File

@@ -85,9 +85,9 @@ static void myGdkLockLeave()
{
// Automatic gdk_flush for non main tread
#if AUTO_GDK_FLUSH
if (Glib::Thread::self() != mainThread) {
gdk_flush();
}
//if (Glib::Thread::self() != mainThread) {
// gdk_flush();
//}
#endif
myGdkRecMutex.unlock();

View File

@@ -626,6 +626,15 @@ void ThumbBrowserBase::enableInspector()
}
}
void ThumbBrowserBase::Internal::on_style_updated()
{
style = get_style_context ();
textn = style->get_color(Gtk::STATE_FLAG_NORMAL);
texts = style->get_color(Gtk::STATE_FLAG_SELECTED);
bgn = style->get_background_color(Gtk::STATE_FLAG_NORMAL);
bgs = style->get_background_color(Gtk::STATE_FLAG_SELECTED);
}
void ThumbBrowserBase::Internal::on_realize()
{
// Gtk signals automatically acquire the GUI (i.e. this method is enclosed by gdk_thread_enter and gdk_thread_leave)
@@ -634,6 +643,13 @@ void ThumbBrowserBase::Internal::on_realize()
get_pango_context()->set_cairo_font_options (cfo);
Gtk::DrawingArea::on_realize();
style = get_style_context ();
textn = style->get_color(Gtk::STATE_FLAG_NORMAL);
texts = style->get_color(Gtk::STATE_FLAG_SELECTED);
bgn = style->get_background_color(Gtk::STATE_FLAG_NORMAL);
bgs = style->get_background_color(Gtk::STATE_FLAG_SELECTED);
Glib::RefPtr<Gdk::Window> window = get_window();
set_can_focus(true);
add_events(Gdk::EXPOSURE_MASK | Gdk::BUTTON_PRESS_MASK | Gdk::BUTTON_RELEASE_MASK | Gdk::POINTER_MOTION_MASK | Gdk::SCROLL_MASK | Gdk::KEY_PRESS_MASK);
@@ -884,7 +900,7 @@ bool ThumbBrowserBase::Internal::on_draw(const ::Cairo::RefPtr< Cairo::Context>
int h = get_height();
// draw thumbnails
Glib::RefPtr<Gtk::StyleContext> style = get_style_context ();
cr->set_antialias(Cairo::ANTIALIAS_NONE);
cr->set_line_join(Cairo::LINE_JOIN_MITER);
style->render_background(cr, 0., 0., w, h);

View File

@@ -38,10 +38,19 @@ class ThumbBrowserBase : public Gtk::VBox
int ofsX, ofsY;
ThumbBrowserBase* parent;
bool dirty;
// caching some very often used values
Glib::RefPtr<Gtk::StyleContext> style;
Gdk::RGBA textn;
Gdk::RGBA texts;
Gdk::RGBA bgn;
Gdk::RGBA bgs;
public:
Internal ();
void setParent (ThumbBrowserBase* p);
void on_realize();
void on_style_updated();
bool on_draw(const ::Cairo::RefPtr< Cairo::Context> &cr);
bool on_button_press_event (GdkEventButton* event);
bool on_button_release_event (GdkEventButton* event);
@@ -51,6 +60,22 @@ class ThumbBrowserBase : public Gtk::VBox
bool on_query_tooltip (int x, int y, bool keyboard_tooltip, const Glib::RefPtr<Gtk::Tooltip>& tooltip);
void setPosition (int x, int y);
Glib::RefPtr<Gtk::StyleContext> getStyle() {
return style;
}
Gdk::RGBA getNormalTextColor() {
return textn;
}
Gdk::RGBA getSelectedTextColor() {
return texts;
}
Gdk::RGBA getNormalBgColor() {
return bgn;
}
Gdk::RGBA getSelectedBgColor() {
return bgs;
}
void setDirty ()
{
dirty = true;
@@ -194,6 +219,23 @@ public:
{
return &internal;
}
Glib::RefPtr<Gtk::StyleContext> getStyle() {
return internal.getStyle();
}
Gdk::RGBA getNormalTextColor() {
return internal.getNormalTextColor();
}
Gdk::RGBA getSelectedTextColor() {
return internal.getSelectedTextColor();
}
Gdk::RGBA getNormalBgColor() {
return internal.getNormalBgColor();
}
Gdk::RGBA getSelectedBgColor() {
return internal.getSelectedBgColor();
}
};
#endif

View File

@@ -86,15 +86,11 @@ void ThumbBrowserEntryBase::updateBackBuffer ()
Cairo::RefPtr<Cairo::Context> cc = Cairo::Context::create(surface);
Glib::RefPtr<Gtk::StyleContext> style = w->get_style_context();
Gdk::RGBA txtn;
style->lookup_color("text", txtn);
Gdk::RGBA textn = style->get_color(Gtk::STATE_FLAG_NORMAL);
Gdk::RGBA texts = style->get_color(Gtk::STATE_FLAG_SELECTED);
Gdk::RGBA bgn = style->get_background_color(Gtk::STATE_FLAG_NORMAL);
//Gdk::RGBA bgs = style->get_background_color(Gtk::STATE_FLAG_SELECTED);
Gdk::RGBA bgs;
bgs.set_rgba(0.3372549, 0.3372549, 0.3372549);
Glib::RefPtr<Gtk::StyleContext> style = parent->getStyle();
Gdk::RGBA textn = parent->getNormalTextColor();
Gdk::RGBA texts = parent->getSelectedTextColor();
Gdk::RGBA bgn = parent->getNormalBgColor();
Gdk::RGBA bgs = parent->getSelectedBgColor();
// clear area, draw frames and background
style->render_background(cc, 0., 0., exp_width, exp_height);
@@ -498,12 +494,7 @@ void ThumbBrowserEntryBase::draw ()
Glib::RefPtr<Gdk::Window> win = w->get_window();
Cairo::RefPtr<Cairo::Context> cc = win->create_cairo_context();
Glib::RefPtr<Gtk::StyleContext> sc = w->get_style_context();
// Gdk::RGBA textn = sc->get_color(Gtk::STATE_FLAG_NORMAL);
// Gdk::RGBA texts = sc->get_color(Gtk::STATE_FLAG_SELECTED);
Gdk::RGBA bgn = sc->get_background_color(Gtk::STATE_FLAG_NORMAL);
Gdk::RGBA bgs = sc->get_background_color(Gtk::STATE_FLAG_SELECTED);
int w_ = startx + ofsX;
int h_ = starty + ofsY;
cc->set_source(backBuffer->getSurface(), w_, h_);
@@ -516,7 +507,7 @@ void ThumbBrowserEntryBase::draw ()
// redraw button set above the thumbnail
if (buttonSet) {
buttonSet->setColors (selected ? bgs : bgn, selected ? bgn : bgs);
buttonSet->setColors (selected ? parent->getSelectedBgColor() : parent->getNormalBgColor(), selected ? parent->getNormalBgColor() : parent->getSelectedBgColor());
buttonSet->redraw (cc);
}
}