Skip to content

Commit 88b0b93

Browse files
committed
HiDPI improvements, in particular on macOS.
1 parent 9999bb8 commit 88b0b93

File tree

5 files changed

+16
-14
lines changed

5 files changed

+16
-14
lines changed

frontend/gtkmm/CodeInput.cc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ CodeInput::exp_input_tv::exp_input_tv(DTree::iterator it, Glib::RefPtr<Gtk::Text
2828
set_events(Gdk::STRUCTURE_MASK);
2929
// get_buffer()->signal_insert().connect(sigc::mem_fun(this, &exp_input_tv::on_my_insert), false);
3030
// get_buffer()->signal_erase().connect(sigc::mem_fun(this, &exp_input_tv::on_my_erase), false);
31+
set_name("CodeInput"); // to be able to style it with CSS
3132
}
3233

3334
//CodeInput::CodeInput()

frontend/gtkmm/NotebookWindow.cc

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -39,22 +39,21 @@ NotebookWindow::NotebookWindow(Cadabra *c, bool ro)
3939
// Set the window icon.
4040
set_icon_name("cadabra2-gtk");
4141

42-
// Query high-dpi settings. For now only for cinnamon.
43-
scale = 1.0;
42+
// Query high-dpi settings. For all systems we can probe the
43+
// HiDPI scale, and for some window managers we also probe the
44+
// text scale factor.
4445
auto screen = Gdk::Screen::get_default();
46+
scale = screen->get_monitor_scale_factor(0);
47+
display_scale = scale;
4548
#ifndef __APPLE__
4649
const char *ds = std::getenv("DESKTOP_SESSION");
4750
if(ds) {
4851
settings = Gio::Settings::create((strcmp(ds, "cinnamon") == 0) ? "org.cinnamon.desktop.interface" : "org.gnome.desktop.interface");
49-
scale = settings->get_double("text-scaling-factor")*screen->get_monitor_scale_factor(0);
50-
// scale = screen->get_monitor_scale_factor(0);
52+
scale *= settings->get_double("text-scaling-factor");
5153
}
52-
#else
53-
scale = screen->get_monitor_scale_factor(0);
54-
std::cerr << "cadabra-client: scale = " << scale << std::endl;
5554
#endif
56-
// std::cerr << "monitor scale factor " << Gdk::Monitor::get_scale_factor() << std::endl;
57-
engine.set_scale(scale, screen->get_monitor_scale_factor(0));
55+
56+
engine.set_scale(scale, display_scale);
5857

5958
#ifndef __APPLE__
6059
if(ds) {
@@ -381,6 +380,7 @@ void NotebookWindow::load_css(const std::string& text_colour)
381380
data += "*:selected { background-color: #ccc; }\n";
382381
data += "textview.error { background: transparent; -GtkWidget-cursor-aspect-ratio: 0.2; color: @theme_fg_color; }\n";
383382
data += "#ImageView { transition-property: padding, background-color; transition-duration: 1s; }\n";
383+
data += "#CodeInput { font-family: monospace; }\n";
384384
data += "#Console { padding: 5px; }\n";
385385
// data += "scrolledwindow { kinetic-scrolling: false; }\n";
386386

@@ -663,10 +663,10 @@ void NotebookWindow::add_cell(const DTree& tr, DTree::iterator it, bool visible)
663663
CodeInput *ci;
664664
// Ensure that all CodeInput cells share the same text buffer.
665665
if(i==0) {
666-
ci = new CodeInput(it, it->textbuf,scale,prefs);
666+
ci = new CodeInput(it, it->textbuf,scale/display_scale,prefs);
667667
global_buffer=ci->buffer;
668668
}
669-
else ci = new CodeInput(it, global_buffer,scale,prefs);
669+
else ci = new CodeInput(it, global_buffer,scale/display_scale,prefs);
670670
if(read_only)
671671
ci->edit.set_editable(false);
672672
ci->get_style_context()->add_provider(css_provider, GTK_STYLE_PROVIDER_PRIORITY_USER);

frontend/gtkmm/NotebookWindow.hh

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

6161
// TeX stuff
6262
TeXEngine engine;
63-
double scale; // highdpi scale
63+
double scale; // total scale factor (hdpi and textscale)
64+
double display_scale; // hdpi scale only
6465

6566
// Handler for vertical scrollbar changes.
6667
bool on_vscroll_changed(Gtk::ScrollType, double);

frontend/gtkmm/TeXView.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ bool TeXView::TeXArea::on_draw(const Cairo::RefPtr<Cairo::Context>& cr)
121121
double device_scale_x, device_scale_y;
122122
cairo_surface_get_device_scale(csurface, &device_scale_x, &device_scale_y);
123123
// std::cerr << device_scale_x << std::endl;
124-
set_size_request(pixbuf->get_width()/device_scale_x, pixbuf->get_height()/device_scale_y);
124+
set_size_request(pixbuf->get_width()/device_scale_x, pixbuf->get_height()/device_scale_y+1);
125125
cr->scale(1.0/device_scale_x, 1.0/device_scale_y);
126126
Gdk::Cairo::set_source_pixbuf(cr, pixbuf, 0, 0);
127127
cr->paint();

tests/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ foreach(NBTEST ${NBTESTS})
4949
COMMAND cadabra2cadabra
5050
ARGS ${CNBIN}/${NBTEST}.cnb ${CDBOUT}/${NBTEST}.cdb
5151
COMMENT "Creating ${NBTEST} notebook...")
52-
add_custom_target("${NBTEST}_test" ALL echo -n DEPENDS ${CDBOUT}/${NBTEST}.cdb)
52+
add_custom_target("${NBTEST}_test" ALL /bin/echo -n DEPENDS ${CDBOUT}/${NBTEST}.cdb)
5353
add_test(${NBTEST} ${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/core/cadabra2 ${CDBOUT}/${NBTEST}.cdb)
5454
set_tests_properties(${NBTEST} PROPERTIES ENVIRONMENT "PYTHONPATH=${PYTHONPATH};LANG=en_US.UTF-8;LC_ALL=en_US.UTF-8;PYTHONIOENCODING=utf-8")
5555
endforeach()

0 commit comments

Comments
 (0)