'Navigator preview is blurred for small images, Issue 2785' and 'Navigator panel does not update when switching RT between full screen & windowed, Issue 2424'

This commit is contained in:
Ingo
2015-05-25 13:35:27 +02:00
parent caf7e1b2bd
commit 636f3e9b5e
3 changed files with 75 additions and 94 deletions

View File

@@ -21,7 +21,7 @@
#include "imagearea.h"
#include "cursormanager.h"
PreviewWindow::PreviewWindow () : previewHandler(NULL), mainCropWin(NULL), imageArea(NULL), isMoving(false), imgX(0), imgY(0), imgW(0), imgH(0), zoom(0.0) {
PreviewWindow::PreviewWindow () : previewHandler(NULL), mainCropWin(NULL), imageArea(NULL), imgX(0), imgY(0), imgW(0), imgH(0), zoom(0.0), isMoving(false), needsUpdate(false) {
rconn = signal_size_allocate().connect( sigc::mem_fun(*this, &PreviewWindow::on_resized) );
}
@@ -49,8 +49,10 @@ void PreviewWindow::updatePreviewImage () {
int W = get_width(), H = get_height();
Glib::RefPtr<Gdk::Window> wind = get_window();
if( ! wind )
return;
if( ! wind ) {
needsUpdate = true;
return;
}
backBuffer = Gdk::Pixmap::create (wind, W, H, -1);
backBuffer->draw_rectangle (get_style()->get_base_gc(Gtk::STATE_NORMAL), true, 0, 0, W, H);
if (previewHandler) {
@@ -95,9 +97,10 @@ bool PreviewWindow::on_expose_event (GdkEventExpose* event) {
mainCropWin->addCropWindowListener (this);
}
if (get_width()!=bufferW && get_height()!=bufferH)
if ((get_width()!=bufferW && get_height()!=bufferH) || needsUpdate) {
needsUpdate = false;
updatePreviewImage ();
}
window->draw_drawable (get_style()->get_base_gc(Gtk::STATE_NORMAL), backBuffer, 0, 0, 0, 0, -1, -1);
if (mainCropWin && zoom > 0.0) {