Skip to content

Commit d9b0d24

Browse files
author
Kasper Peeters
committed
Scale ImageViews depending on display scale.
1 parent 8e6541c commit d9b0d24

File tree

5 files changed

+21
-15
lines changed

5 files changed

+21
-15
lines changed

frontend/common/TeXEngine.cc

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -257,6 +257,11 @@ double TeXEngine::get_scale() const
257257
return total_scale_;
258258
}
259259

260+
double TeXEngine::get_device_scale() const
261+
{
262+
return device_scale_;
263+
}
264+
260265
TeXEngine::TeXRequest::TeXRequest()
261266
: needs_generating(true)
262267
{

frontend/common/TeXEngine.hh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ namespace cadabra {
6464
// bitmaps at the width times this size.
6565
void set_scale(double total_scale, double device_scale);
6666
double get_scale() const;
67+
double get_device_scale() const;
6768
void set_font_size(int font_size);
6869
int get_font_size() const;
6970
std::vector<std::string> latex_packages;

frontend/gtkmm/ImageView.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ void ImageView::set_image_from_base64(const std::string& b64)
7272
std::string dec=Glib::Base64::decode(b64);
7373
str->add_data(dec.c_str(), dec.size());
7474

75-
pixbuf = Gdk::Pixbuf::create_from_stream_at_scale(str, 400, -1, true);
75+
pixbuf = Gdk::Pixbuf::create_from_stream_at_scale(str, 400*scale, -1, true);
7676
if(!pixbuf)
7777
std::cerr << "cadabra-client: unable to create image from data" << std::endl;
7878
else {
@@ -86,7 +86,7 @@ void ImageView::set_image_from_svg(const std::string& svg)
8686
auto str = Gio::MemoryInputStream::create();
8787
std::string dec=Glib::Base64::decode(svg);
8888
str->add_data(dec.c_str(), dec.size());
89-
pixbuf = Gdk::Pixbuf::create_from_stream_at_scale(str, 400, -1, true);
89+
pixbuf = Gdk::Pixbuf::create_from_stream_at_scale(str, 400*scale, -1, true);
9090
if(!pixbuf)
9191
std::cerr << "cadabra-client: unable to create image from svg data" << std::endl;
9292
else {

frontend/gtkmm/NotebookWindow.cc

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -606,7 +606,7 @@ NotebookWindow::NotebookWindow(Cadabra *c, bool ro)
606606

607607
// Setup the toolbar and buttons in it.
608608
if(!read_only) {
609-
toolbar.set_size_request(-1, 70/scale);
609+
toolbar.set_size_request(-1, 70/display_scale);
610610
tool_stop.add(*Gtk::make_managed<Gtk::Image>(
611611
get_icon(install_prefix()+"/share/cadabra2/cdb-icons/cdb-cancel.svg")));
612612
tool_run.add(*Gtk::make_managed<Gtk::Image>(
@@ -619,12 +619,12 @@ NotebookWindow::NotebookWindow(Cadabra *c, bool ro)
619619
get_icon(install_prefix()+"/share/cadabra2/cdb-icons/cdb-save.svg")));
620620
tool_save_as.add(*Gtk::make_managed<Gtk::Image>(
621621
get_icon(install_prefix()+"/share/cadabra2/cdb-icons/cdb-save-as.svg")));
622-
tool_stop.set_size_request(70/scale, 70/scale);
623-
tool_run.set_size_request(70/scale, 70/scale);
624-
tool_restart.set_size_request(70/scale, 70/scale);
625-
tool_open.set_size_request(70/scale, 70/scale);
626-
tool_save.set_size_request(70/scale, 70/scale);
627-
tool_save_as.set_size_request(70/scale, 70/scale);
622+
tool_stop.set_size_request(70/display_scale, 70/display_scale);
623+
tool_run.set_size_request(70/display_scale, 70/display_scale);
624+
tool_restart.set_size_request(70/display_scale, 70/display_scale);
625+
tool_open.set_size_request(70/display_scale, 70/display_scale);
626+
tool_save.set_size_request(70/display_scale, 70/display_scale);
627+
tool_save_as.set_size_request(70/display_scale, 70/display_scale);
628628
tool_run.set_tooltip_text("Execute all cells");
629629
tool_stop.set_tooltip_text("Stop execution");
630630
tool_restart.set_tooltip_text("Restart kernel");
@@ -641,8 +641,8 @@ NotebookWindow::NotebookWindow(Cadabra *c, bool ro)
641641
toolbar.pack_start(tool_restart, Gtk::PACK_SHRINK);
642642
toolbar.pack_start(top_label);
643643
toolbar.pack_end(kernel_spinner, Gtk::PACK_SHRINK);
644-
kernel_spinner.set_size_request(50/scale, 50/scale);
645-
kernel_spinner.set_margin_end(10/scale);
644+
kernel_spinner.set_size_request(50/display_scale, 50/display_scale);
645+
kernel_spinner.set_margin_end(10/display_scale);
646646
}
647647

648648
// Normally we would use 'set_action_name' to associate the
@@ -675,7 +675,7 @@ NotebookWindow::NotebookWindow(Cadabra *c, bool ro)
675675

676676
// Status bar
677677
kernel_label.set_text("Server: not connected");
678-
statusbarbox.set_size_request(-1,50/scale);
678+
statusbarbox.set_size_request(-1,50/display_scale);
679679
statusbarbox.set_homogeneous(false);
680680
statusbarbox.pack_start(status_label, false, false, 0);
681681
statusbarbox.pack_start(kernel_label, false, false, 0);
@@ -1260,7 +1260,7 @@ void NotebookWindow::add_cell(const DTree& tr, DTree::iterator it, bool visible)
12601260
}
12611261
case DataCell::CellType::image_png: {
12621262
// FIXME: horribly memory inefficient
1263-
ImageView *iv=new ImageView(display_scale);
1263+
ImageView *iv=new ImageView(scale/display_scale);
12641264

12651265
iv->set_image_from_base64(it->textbuf);
12661266
newcell.imagebox = manage( iv );
@@ -1269,7 +1269,7 @@ void NotebookWindow::add_cell(const DTree& tr, DTree::iterator it, bool visible)
12691269
}
12701270
case DataCell::CellType::image_svg: {
12711271
// FIXME: horribly memory inefficient
1272-
ImageView *iv=new ImageView(display_scale);
1272+
ImageView *iv=new ImageView(scale/display_scale);
12731273

12741274
iv->set_image_from_svg(it->textbuf);
12751275
newcell.imagebox = manage( iv );

frontend/gtkmm/TeXView.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ float TeXView::text_size() const
6464
// FIXME: we used to multiply with engine.get_scale() but that seems
6565
// wrong.
6666

67-
float ret = 28.0f/12.0f*engine.get_font_size()/1.7f;
67+
float ret = 28.0f/12.0f*engine.get_font_size()*engine.get_scale()/engine.get_device_scale()/1.7f;
6868
// std::cerr << "engine.font_size = " << engine.get_font_size() << ", .scale = " << engine.get_scale()
6969
// << ", text_size = " << ret << std::endl;
7070
return ret;

0 commit comments

Comments
 (0)