Skip to content

Commit 0b1a7d1

Browse files
author
Kasper Peeters
committed
Fixes for macOS, mostly UI scaling.
1 parent 6b2dc1e commit 0b1a7d1

File tree

6 files changed

+39
-25
lines changed

6 files changed

+39
-25
lines changed

client_server/Actions.hh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ namespace cadabra {
6767
virtual void revert(DocumentThread&, GUIBase&) override;
6868

6969
/// Can this action be undone?
70-
virtual bool undoable() const;
70+
virtual bool undoable() const override;
7171
private:
7272
// Keep track of the location where this cell is inserted into
7373
// the notebook.

doc/random.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
# on macOS
2+
https://stackoverflow.com/questions/57535924/shipping-gtk-apps-for-macos-with-xcode
3+
4+
15
#
26
# Test 1:= keep_terms
37

frontend/gtkmm/ImageView.cc

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@
77

88
using namespace cadabra;
99

10-
ImageView::ImageView()
11-
: sizing(false), prev_x(0), prev_y(0), height_at_press(0), width_at_press(0)
10+
ImageView::ImageView(double scale_)
11+
: sizing(false), prev_x(0), prev_y(0), height_at_press(0), width_at_press(0), scale(scale_)
1212
{
1313
add(vbox);
1414
vbox.add(image);
@@ -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,-1,-1,true);
75+
pixbuf = Gdk::Pixbuf::create_from_stream_at_scale(str,400,-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, -1, -1, true);
89+
pixbuf = Gdk::Pixbuf::create_from_stream_at_scale(str, 400, -1, true);
9090
if(!pixbuf)
9191
std::cerr << "cadabra-client: unable to create image from svg data" << std::endl;
9292
else {

frontend/gtkmm/ImageView.hh

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ namespace cadabra {
1313

1414
class ImageView : public Gtk::EventBox {
1515
public:
16-
ImageView();
16+
ImageView(double scale);
1717
virtual ~ImageView();
1818

1919
void set_image_from_base64(const std::string& b64);
@@ -31,6 +31,7 @@ namespace cadabra {
3131
bool sizing;
3232
double prev_x, prev_y;
3333
int height_at_press, width_at_press;
34+
double scale;
3435
};
3536

3637
};

frontend/gtkmm/NotebookWindow.cc

Lines changed: 24 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -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 );

frontend/gtkmm/TeXView.cc

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,11 @@ float TeXView::text_size() const
6060
// so we do not scale the font size by that here. But we do need
6161
// to scale by the text scaling factor of the system, which is
6262
// available in engine.get_scale().
63+
64+
// FIXME: we used to multiply with engine.get_scale() but that seems
65+
// wrong.
6366

64-
float ret = 28.0f/12.0f*engine.get_font_size()*engine.get_scale()/1.7f;
67+
float ret = 28.0f/12.0f*engine.get_font_size()/1.7f;
6568
// std::cerr << "engine.font_size = " << engine.get_font_size() << ", .scale = " << engine.get_scale()
6669
// << ", text_size = " << ret << std::endl;
6770
return ret;

0 commit comments

Comments
 (0)