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:
parent
9f475d5427
commit
d7c611e025
@ -215,6 +215,10 @@ static const gchar *_record_mode_strings[] = {
|
|||||||
static bool
|
static bool
|
||||||
ask_about_configuration_copy (string const & old_dir, string const & new_dir, int version)
|
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 (
|
ArdourMessageDialog msg (string_compose (
|
||||||
_("%1 %2.x has discovered configuration files from %1 %3.x.\n\n"
|
_("%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"
|
"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);
|
record_mode_strings = I18N (_record_mode_strings);
|
||||||
|
|
||||||
if (ARDOUR::handle_old_configuration_files (boost::bind (ask_about_configuration_copy, _1, _2, _3))) {
|
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 */
|
/* "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));
|
PBD::ScopedFileDescriptor fout (g_open (been_here_before_path ().c_str(), O_CREAT|O_TRUNC|O_RDWR, 0666));
|
||||||
|
@ -171,7 +171,18 @@ using the program.</span> \
|
|||||||
hbox->show ();
|
hbox->show ();
|
||||||
cbox->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));
|
ui_font_scale.signal_changed ().connect (sigc::mem_fun (*this, &NewUserWizard::rescale_ui));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -189,7 +200,7 @@ void
|
|||||||
NewUserWizard::rescale_ui ()
|
NewUserWizard::rescale_ui ()
|
||||||
{
|
{
|
||||||
int rn = ui_font_scale.get_active_row_number ();
|
int rn = ui_font_scale.get_active_row_number ();
|
||||||
if (rn < 0 ) {
|
if (rn < 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
float ui_scale = 100 + rn * 50;
|
float ui_scale = 100 + rn * 50;
|
||||||
@ -197,41 +208,6 @@ NewUserWizard::rescale_ui ()
|
|||||||
UIConfiguration::instance ().reset_dpi ();
|
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
|
void
|
||||||
NewUserWizard::default_dir_changed ()
|
NewUserWizard::default_dir_changed ()
|
||||||
{
|
{
|
||||||
|
@ -77,7 +77,6 @@ private:
|
|||||||
/* Welcome */
|
/* Welcome */
|
||||||
Gtk::ComboBoxText ui_font_scale;
|
Gtk::ComboBoxText ui_font_scale;
|
||||||
void rescale_ui ();
|
void rescale_ui ();
|
||||||
void guess_default_ui_scale ();
|
|
||||||
|
|
||||||
/* first page */
|
/* first page */
|
||||||
Gtk::FileChooserButton* default_dir_chooser;
|
Gtk::FileChooserButton* default_dir_chooser;
|
||||||
|
@ -642,6 +642,40 @@ ARDOUR_UI_UTILS::key_is_legal_for_numeric_entry (guint keyval)
|
|||||||
return false;
|
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
|
void
|
||||||
ARDOUR_UI_UTILS::resize_window_to_proportion_of_monitor (Gtk::Window* window, int max_width, int max_height)
|
ARDOUR_UI_UTILS::resize_window_to_proportion_of_monitor (Gtk::Window* window, int max_width, int max_height)
|
||||||
{
|
{
|
||||||
|
@ -95,6 +95,8 @@ const char* const *get_xpm_data (std::string path);
|
|||||||
std::string longest (std::vector<std::string>&);
|
std::string longest (std::vector<std::string>&);
|
||||||
bool key_is_legal_for_numeric_entry (guint keyval);
|
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);
|
void resize_window_to_proportion_of_monitor (Gtk::Window*, int, int);
|
||||||
|
|
||||||
std::string escape_underscores (std::string const &);
|
std::string escape_underscores (std::string const &);
|
||||||
|
Loading…
Reference in New Issue
Block a user