Guess UI scale for copy-config dialog

This dialog shows before the new user wizard,
where a user would configure HDPI/UI scaling.
This commit is contained in:
Robin Gareus 2023-09-25 17:07:15 +02:00
parent 9f475d5427
commit d7c611e025
Signed by: rgareus
GPG Key ID: A090BCE02CF57F04
5 changed files with 54 additions and 38 deletions

View File

@ -215,6 +215,10 @@ static const gchar *_record_mode_strings[] = {
static bool
ask_about_configuration_copy (string const & old_dir, string const & new_dir, int version)
{
/* guess screen scaling */
UIConfiguration::instance ().set_font_scale (1024 * guess_default_ui_scale ());
UIConfiguration::instance ().reset_dpi ();
ArdourMessageDialog msg (string_compose (
_("%1 %2.x has discovered configuration files from %1 %3.x.\n\n"
"Would you like these files to be copied and used for %1 %2.x?\n\n"
@ -367,6 +371,7 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], const char* localedir)
record_mode_strings = I18N (_record_mode_strings);
if (ARDOUR::handle_old_configuration_files (boost::bind (ask_about_configuration_copy, _1, _2, _3))) {
{
/* "touch" the been-here-before path now that config has been migrated */
PBD::ScopedFileDescriptor fout (g_open (been_here_before_path ().c_str(), O_CREAT|O_TRUNC|O_RDWR, 0666));

View File

@ -171,7 +171,18 @@ using the program.</span> \
hbox->show ();
cbox->show ();
guess_default_ui_scale ();
int ui_scale = guess_default_ui_scale ();
if (ui_scale <= 100) {
ui_font_scale.set_active (0); // 100%
} else if (ui_scale <= 150) {
ui_font_scale.set_active (1); // 150%
} else if (ui_scale <= 200) {
ui_font_scale.set_active (2); // 200%
} else {
ui_font_scale.set_active (3); // 250%
}
rescale_ui ();
ui_font_scale.signal_changed ().connect (sigc::mem_fun (*this, &NewUserWizard::rescale_ui));
#endif
@ -189,7 +200,7 @@ void
NewUserWizard::rescale_ui ()
{
int rn = ui_font_scale.get_active_row_number ();
if (rn < 0 ) {
if (rn < 0) {
return;
}
float ui_scale = 100 + rn * 50;
@ -197,41 +208,6 @@ NewUserWizard::rescale_ui ()
UIConfiguration::instance ().reset_dpi ();
}
void
NewUserWizard::guess_default_ui_scale ()
{
gint width = 0;
gint height = 0;
GdkScreen* screen = gdk_display_get_screen (gdk_display_get_default (), 0);
gint n_monitors = gdk_screen_get_n_monitors (screen);
if (!screen) {
return;
}
for (gint i = 0; i < n_monitors; ++i) {
GdkRectangle rect;
gdk_screen_get_monitor_geometry (screen, i, &rect);
width = std::max (width, rect.width);
height = std::max (height, rect.height);
}
float wx = width / 1920.f;
float hx = height / 1080.f;
float sx = std::min (wx, hx);
if (sx < 1.25) {
ui_font_scale.set_active (0); // 100%
} else if (sx < 1.6) {
ui_font_scale.set_active (1); // 150%
} else if (sx < 2.1) {
ui_font_scale.set_active (2); // 200%
} else {
ui_font_scale.set_active (3); // 250%
}
rescale_ui ();
}
void
NewUserWizard::default_dir_changed ()
{

View File

@ -77,7 +77,6 @@ private:
/* Welcome */
Gtk::ComboBoxText ui_font_scale;
void rescale_ui ();
void guess_default_ui_scale ();
/* first page */
Gtk::FileChooserButton* default_dir_chooser;

View File

@ -642,6 +642,40 @@ ARDOUR_UI_UTILS::key_is_legal_for_numeric_entry (guint keyval)
return false;
}
int
ARDOUR_UI_UTILS::guess_default_ui_scale ()
{
gint width = 0;
gint height = 0;
GdkScreen* screen = gdk_display_get_screen (gdk_display_get_default (), 0);
gint n_monitors = gdk_screen_get_n_monitors (screen);
if (!screen) {
return 100;
}
for (gint i = 0; i < n_monitors; ++i) {
GdkRectangle rect;
gdk_screen_get_monitor_geometry (screen, i, &rect);
width = std::max (width, rect.width);
height = std::max (height, rect.height);
}
float wx = width / 1920.f;
float hx = height / 1080.f;
float sx = std::min (wx, hx);
if (sx < 1.25) {
return 100;
} else if (sx < 1.6) {
return 150;
} else if (sx < 2.1) {
return 200;
} else {
return 250;
}
}
void
ARDOUR_UI_UTILS::resize_window_to_proportion_of_monitor (Gtk::Window* window, int max_width, int max_height)
{

View File

@ -95,6 +95,8 @@ const char* const *get_xpm_data (std::string path);
std::string longest (std::vector<std::string>&);
bool key_is_legal_for_numeric_entry (guint keyval);
int guess_default_ui_scale ();
void resize_window_to_proportion_of_monitor (Gtk::Window*, int, int);
std::string escape_underscores (std::string const &);