mirror of
				https://github.com/rad4day/Waybar.git
				synced 2025-11-04 09:42:42 +01:00 
			
		
		
		
	scale icons for HiDPI monitor
This commit is contained in:
		@@ -309,7 +309,7 @@ void Item::updateImage() {
 | 
				
			|||||||
    pixbuf = pixbuf->scale_simple(width, scaled_icon_size, Gdk::InterpType::INTERP_BILINEAR);
 | 
					    pixbuf = pixbuf->scale_simple(width, scaled_icon_size, Gdk::InterpType::INTERP_BILINEAR);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  auto surface = Gdk::Cairo::create_surface_from_pixbuf(pixbuf, 0, image.get_window());
 | 
					  auto surface = Gdk::Cairo::create_surface_from_pixbuf(pixbuf, image.get_scale_factor(), image.get_window());
 | 
				
			||||||
  image.set(surface);
 | 
					  image.set(surface);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,6 +15,7 @@
 | 
				
			|||||||
#include <sstream>
 | 
					#include <sstream>
 | 
				
			||||||
#include <utility>
 | 
					#include <utility>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "gdkmm/general.h"
 | 
				
			||||||
#include "glibmm/error.h"
 | 
					#include "glibmm/error.h"
 | 
				
			||||||
#include "glibmm/fileutils.h"
 | 
					#include "glibmm/fileutils.h"
 | 
				
			||||||
#include "glibmm/refptr.h"
 | 
					#include "glibmm/refptr.h"
 | 
				
			||||||
@@ -173,18 +174,24 @@ bool Task::image_load_icon(Gtk::Image &image, const Glib::RefPtr<Gtk::IconTheme>
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Glib::RefPtr<Gdk::Pixbuf> pixbuf;
 | 
					  Glib::RefPtr<Gdk::Pixbuf> pixbuf;
 | 
				
			||||||
 | 
					  auto scaled_icon_size = size * image.get_scale_factor();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  try {
 | 
					  try {
 | 
				
			||||||
    pixbuf = icon_theme->load_icon(ret_icon_name, size, Gtk::ICON_LOOKUP_FORCE_SIZE);
 | 
					    pixbuf = icon_theme->load_icon(ret_icon_name, scaled_icon_size, Gtk::ICON_LOOKUP_FORCE_SIZE);
 | 
				
			||||||
  } catch (...) {
 | 
					  } catch (...) {
 | 
				
			||||||
    if (Glib::file_test(ret_icon_name, Glib::FILE_TEST_EXISTS))
 | 
					    if (Glib::file_test(ret_icon_name, Glib::FILE_TEST_EXISTS))
 | 
				
			||||||
      pixbuf = load_icon_from_file(ret_icon_name, size);
 | 
					      pixbuf = load_icon_from_file(ret_icon_name, scaled_icon_size);
 | 
				
			||||||
    else
 | 
					    else
 | 
				
			||||||
      pixbuf = {};
 | 
					      pixbuf = {};
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (pixbuf) {
 | 
					  if (pixbuf) {
 | 
				
			||||||
    image.set(pixbuf);
 | 
					    if (pixbuf->get_width() != scaled_icon_size) {
 | 
				
			||||||
 | 
					        int width = scaled_icon_size * pixbuf->get_width() / pixbuf->get_height();
 | 
				
			||||||
 | 
					        pixbuf = pixbuf->scale_simple(width, scaled_icon_size, Gdk::InterpType::INTERP_BILINEAR);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    auto surface = Gdk::Cairo::create_surface_from_pixbuf(pixbuf, image.get_scale_factor(), image.get_window());
 | 
				
			||||||
 | 
					    image.set(surface);
 | 
				
			||||||
    return true;
 | 
					    return true;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user