diff --git a/rtgui/filebrowserentry.cc b/rtgui/filebrowserentry.cc index 0585a9311..457ff923c 100644 --- a/rtgui/filebrowserentry.cc +++ b/rtgui/filebrowserentry.cc @@ -29,7 +29,7 @@ #define CROPRESIZEBORDER 4 -extern Glib::Threads::Thread* mainThread; +//extern Glib::Threads::Thread* mainThread; bool FileBrowserEntry::iconsLoaded(false); Glib::RefPtr FileBrowserEntry::editedIcon; diff --git a/rtgui/main.cc b/rtgui/main.cc index 998391b68..3a7174d6a 100644 --- a/rtgui/main.cc +++ b/rtgui/main.cc @@ -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(); diff --git a/rtgui/thumbbrowserbase.cc b/rtgui/thumbbrowserbase.cc index 398682dbb..3f3d5f7fd 100644 --- a/rtgui/thumbbrowserbase.cc +++ b/rtgui/thumbbrowserbase.cc @@ -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 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 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); diff --git a/rtgui/thumbbrowserbase.h b/rtgui/thumbbrowserbase.h index 86e438275..631d35e46 100644 --- a/rtgui/thumbbrowserbase.h +++ b/rtgui/thumbbrowserbase.h @@ -38,10 +38,19 @@ class ThumbBrowserBase : public Gtk::VBox int ofsX, ofsY; ThumbBrowserBase* parent; bool dirty; + + // caching some very often used values + Glib::RefPtr 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& tooltip); void setPosition (int x, int y); + Glib::RefPtr 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 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 diff --git a/rtgui/thumbbrowserentrybase.cc b/rtgui/thumbbrowserentrybase.cc index 1d1a673dd..e6988cd62 100644 --- a/rtgui/thumbbrowserentrybase.cc +++ b/rtgui/thumbbrowserentrybase.cc @@ -86,15 +86,11 @@ void ThumbBrowserEntryBase::updateBackBuffer () Cairo::RefPtr cc = Cairo::Context::create(surface); - Glib::RefPtr 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 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 win = w->get_window(); Cairo::RefPtr cc = win->create_cairo_context(); - Glib::RefPtr 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); } }