@@ -76,6 +76,7 @@ NotebookWindow::NotebookWindow(Cadabra *c, bool ro)
7676 auto screen = Gdk::Screen::get_default ();
7777 scale = screen->get_monitor_scale_factor (0 );
7878 display_scale = scale;
79+ std::cerr << " Monitor scale factor = " << display_scale << std::endl;
7980#ifndef __APPLE__
8081 // FIXME: this does not work for ssh sessions with ForwardX11.
8182 const char *ds = std::getenv (" DESKTOP_SESSION" );
@@ -596,28 +597,33 @@ NotebookWindow::NotebookWindow(Cadabra *c, bool ro)
596597 Gtk::MenuBar* pMenuBar = Gtk::make_managed<Gtk::MenuBar>(gmenu);
597598 topbox.pack_start (*pMenuBar, Gtk::PACK_SHRINK);
598599
599-
600+ auto get_icon = [this ](const std::string& nm) {
601+ Glib::RefPtr<Gdk::Pixbuf> pb = Gdk::Pixbuf::create_from_file (nm);
602+ pb = pb->scale_simple (50 /scale, 50 /scale, Gdk::INTERP_BILINEAR);
603+ return pb;
604+ };
605+
600606 // Setup the toolbar and buttons in it.
601607 if (!read_only) {
602- toolbar.set_size_request (-1 , 70 );
608+ toolbar.set_size_request (-1 , 70 /scale );
603609 tool_stop.add (*Gtk::make_managed<Gtk::Image>(
604- install_prefix ()+" /share/cadabra2/cdb-icons/cdb-cancel.svg" ));
610+ get_icon ( install_prefix ()+" /share/cadabra2/cdb-icons/cdb-cancel.svg" ) ));
605611 tool_run.add (*Gtk::make_managed<Gtk::Image>(
606- install_prefix ()+" /share/cadabra2/cdb-icons/cdb-run.svg" ));
612+ get_icon ( install_prefix ()+" /share/cadabra2/cdb-icons/cdb-run.svg" ) ));
607613 tool_restart.add (*Gtk::make_managed<Gtk::Image>(
608- install_prefix ()+" /share/cadabra2/cdb-icons/cdb-restart.svg" ));
614+ get_icon ( install_prefix ()+" /share/cadabra2/cdb-icons/cdb-restart.svg" ) ));
609615 tool_open.add (*Gtk::make_managed<Gtk::Image>(
610- install_prefix ()+" /share/cadabra2/cdb-icons/cdb-open.svg" ));
616+ get_icon ( install_prefix ()+" /share/cadabra2/cdb-icons/cdb-open.svg" ) ));
611617 tool_save.add (*Gtk::make_managed<Gtk::Image>(
612- install_prefix ()+" /share/cadabra2/cdb-icons/cdb-save.svg" ));
618+ get_icon ( install_prefix ()+" /share/cadabra2/cdb-icons/cdb-save.svg" ) ));
613619 tool_save_as.add (*Gtk::make_managed<Gtk::Image>(
614- install_prefix ()+" /share/cadabra2/cdb-icons/cdb-save-as.svg" ));
615- tool_stop.set_size_request (70 , 70 );
616- tool_run.set_size_request (70 , 70 );
617- tool_restart.set_size_request (70 , 70 );
618- tool_open.set_size_request (70 , 70 );
619- tool_save.set_size_request (70 , 70 );
620- tool_save_as.set_size_request (70 , 70 );
620+ get_icon ( install_prefix ()+" /share/cadabra2/cdb-icons/cdb-save-as.svg" ) ));
621+ tool_stop.set_size_request (70 /scale , 70 /scale );
622+ tool_run.set_size_request (70 /scale , 70 /scale );
623+ tool_restart.set_size_request (70 /scale , 70 /scale );
624+ tool_open.set_size_request (70 /scale , 70 /scale );
625+ tool_save.set_size_request (70 /scale , 70 /scale );
626+ tool_save_as.set_size_request (70 /scale , 70 /scale );
621627 tool_run.set_tooltip_text (" Execute all cells" );
622628 tool_stop.set_tooltip_text (" Stop execution" );
623629 tool_restart.set_tooltip_text (" Restart kernel" );
@@ -634,7 +640,7 @@ NotebookWindow::NotebookWindow(Cadabra *c, bool ro)
634640 toolbar.pack_start (tool_restart, Gtk::PACK_SHRINK);
635641 toolbar.pack_start (top_label);
636642 toolbar.pack_end (kernel_spinner, Gtk::PACK_SHRINK);
637- kernel_spinner.set_size_request (60 ,60 );
643+ kernel_spinner.set_size_request (60 /scale ,60 /scale );
638644 }
639645
640646 // Normally we would use 'set_action_name' to associate the
@@ -667,7 +673,7 @@ NotebookWindow::NotebookWindow(Cadabra *c, bool ro)
667673
668674 // Status bar
669675 kernel_label.set_text (" Server: not connected" );
670- statusbarbox.set_size_request (-1 ,50 );
676+ statusbarbox.set_size_request (-1 ,50 /scale );
671677 statusbarbox.set_homogeneous (false );
672678 statusbarbox.pack_start (status_label, false , false , 0 );
673679 statusbarbox.pack_start (kernel_label, false , false , 0 );
@@ -1252,7 +1258,7 @@ void NotebookWindow::add_cell(const DTree& tr, DTree::iterator it, bool visible)
12521258 }
12531259 case DataCell::CellType::image_png: {
12541260 // FIXME: horribly memory inefficient
1255- ImageView *iv=new ImageView ();
1261+ ImageView *iv=new ImageView (display_scale );
12561262
12571263 iv->set_image_from_base64 (it->textbuf );
12581264 newcell.imagebox = manage ( iv );
@@ -1261,7 +1267,7 @@ void NotebookWindow::add_cell(const DTree& tr, DTree::iterator it, bool visible)
12611267 }
12621268 case DataCell::CellType::image_svg: {
12631269 // FIXME: horribly memory inefficient
1264- ImageView *iv=new ImageView ();
1270+ ImageView *iv=new ImageView (display_scale );
12651271
12661272 iv->set_image_from_svg (it->textbuf );
12671273 newcell.imagebox = manage ( iv );
0 commit comments