From ad15c53fb169e76df28edeb7fb560639d1cde11b Mon Sep 17 00:00:00 2001 From: wangqr Date: Sun, 11 Nov 2018 20:37:39 -0500 Subject: [PATCH] Add DPI awareness * Removed most hard coded wxSize * Sub edit box now have DPI aware icons --- src/command/command.h | 8 ++++---- src/dialog_about.cpp | 2 +- src/dialog_colorpicker.cpp | 9 +++++---- src/dialog_dummy_video.cpp | 5 +++-- src/dialog_export_ebu3264.cpp | 6 +++++- src/dialog_properties.cpp | 6 +++--- src/dialog_resample.cpp | 10 +++++----- src/dialog_style_editor.cpp | 11 +++++++---- src/export_framerate.cpp | 14 +++++++------- src/subs_edit_box.cpp | 32 ++++++++++++++++++++------------ 10 files changed, 60 insertions(+), 43 deletions(-) diff --git a/src/command/command.h b/src/command/command.h index 38ea38f8a..675725c03 100644 --- a/src/command/command.h +++ b/src/command/command.h @@ -35,10 +35,10 @@ namespace agi { struct Context; } #define CMD_TYPE(a) int Type() const override { using namespace cmd; return a; } #define CMD_ICON(icon) wxBitmap Icon(int size, wxLayoutDirection dir = wxLayout_LeftToRight) const override { \ - if (size == 64) return GETIMAGEDIR(icon##_64, dir); \ - if (size == 48) return GETIMAGEDIR(icon##_48, dir); \ - if (size == 32) return GETIMAGEDIR(icon##_32, dir); \ - if (size == 24) return GETIMAGEDIR(icon##_24, dir); \ + if (size >= 64) return GETIMAGEDIR(icon##_64, dir); \ + if (size >= 48) return GETIMAGEDIR(icon##_48, dir); \ + if (size >= 32) return GETIMAGEDIR(icon##_32, dir); \ + if (size >= 24) return GETIMAGEDIR(icon##_24, dir); \ return GETIMAGEDIR(icon##_16, dir); \ } diff --git a/src/dialog_about.cpp b/src/dialog_about.cpp index efbc0080f..d30ab7ef6 100644 --- a/src/dialog_about.cpp +++ b/src/dialog_about.cpp @@ -129,7 +129,7 @@ void ShowAboutDialog(wxWindow *parent) { wxChar copySymbol = 0xA9; aboutString.Replace("(c)", wxString(copySymbol)); - wxTextCtrl *textctrl = new wxTextCtrl(&d, -1, aboutString, wxDefaultPosition, wxSize(-1, 200), wxTE_MULTILINE | wxTE_READONLY | wxBORDER_NONE); + wxTextCtrl *textctrl = new wxTextCtrl(&d, -1, aboutString, wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE | wxTE_READONLY | wxBORDER_NONE); wxSizer *MainSizer = new wxBoxSizer(wxVERTICAL); MainSizer->Add(new wxStaticBitmap(&d, -1, GETIMAGE(splash)), 0, wxCENTER, 0); diff --git a/src/dialog_colorpicker.cpp b/src/dialog_colorpicker.cpp index 510d2a6ce..45378c0ce 100644 --- a/src/dialog_colorpicker.cpp +++ b/src/dialog_colorpicker.cpp @@ -557,9 +557,10 @@ DialogColorPicker::DialogColorPicker(wxWindow *parent, agi::Color initial_color, wxString modes[] = { _("RGB/R"), _("RGB/G"), _("RGB/B"), _("HSL/L"), _("HSV/H") }; colorspace_choice = new wxChoice(this, -1, wxDefaultPosition, wxDefaultSize, 5, modes); - wxSize colorinput_size = GetTextExtent(" &H10117B& "); - colorinput_size.SetHeight(-1); - wxSize colorinput_labelsize(40, -1); + ass_input = new wxTextCtrl(this, -1); + wxSize colorinput_size = ass_input->GetSizeFromTextSize(GetTextExtent(wxS("&H10117B&"))); + ass_input->SetMinSize(colorinput_size); + ass_input->SetSize(colorinput_size); wxSizer *rgb_box = new wxStaticBoxSizer(wxHORIZONTAL, this, _("RGB color")); wxSizer *hsl_box = new wxStaticBoxSizer(wxVERTICAL, this, _("HSL color")); @@ -568,7 +569,7 @@ DialogColorPicker::DialogColorPicker(wxWindow *parent, agi::Color initial_color, for (auto& elem : rgb_input) elem = new wxSpinCtrl(this, -1, "", wxDefaultPosition, colorinput_size, wxSP_ARROW_KEYS, 0, 255); - ass_input = new wxTextCtrl(this, -1, "", wxDefaultPosition, colorinput_size); + // ass_input = new wxTextCtrl(this, -1, "", wxDefaultPosition, colorinput_size); html_input = new wxTextCtrl(this, -1, "", wxDefaultPosition, colorinput_size); alpha_input = new wxSpinCtrl(this, -1, "", wxDefaultPosition, colorinput_size, wxSP_ARROW_KEYS, 0, 255); diff --git a/src/dialog_dummy_video.cpp b/src/dialog_dummy_video.cpp index 23b32ce17..e7683cfcc 100644 --- a/src/dialog_dummy_video.cpp +++ b/src/dialog_dummy_video.cpp @@ -78,13 +78,14 @@ static ResolutionShortcut resolutions[] = { }; wxSpinCtrl *spin_ctrl(wxWindow *parent, int min, int max, int *value) { - auto ctrl = new wxSpinCtrl(parent, -1, "", wxDefaultPosition, wxSize(50, -1), wxSP_ARROW_KEYS, min, max, *value); + auto ctrl = new wxSpinCtrl(parent, -1, "", wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, min, max, *value); ctrl->SetValidator(wxGenericValidator(value)); return ctrl; } +// FIXME: change the misleading function name, this is TextCtrl in fact wxControl *spin_ctrl(wxWindow *parent, double min, double max, double *value) { - return new wxTextCtrl(parent, -1, "", wxDefaultPosition, wxSize(50, -1), 0, DoubleValidator(value, min, max)); + return new wxTextCtrl(parent, -1, "", wxDefaultPosition, wxDefaultSize, 0, DoubleValidator(value, min, max)); } wxComboBox *resolution_shortcuts(wxWindow *parent, int width, int height) { diff --git a/src/dialog_export_ebu3264.cpp b/src/dialog_export_ebu3264.cpp index 77fb10fd3..c298c04e6 100644 --- a/src/dialog_export_ebu3264.cpp +++ b/src/dialog_export_ebu3264.cpp @@ -110,6 +110,8 @@ int ShowEbuExportConfigurationDialog(wxWindow *owner, EbuExportSettings &s) { wxRadioBox *tv_standard_box = new wxRadioBox(&d, -1, _("TV standard"), wxDefaultPosition, wxDefaultSize, 6, tv_standards, 0, wxRA_SPECIFY_ROWS); wxTextCtrl *timecode_offset_entry = new wxTextCtrl(&d, -1, "00:00:00:00"); + timecode_offset_entry->SetMinSize(timecode_offset_entry->GetSizeFromTextSize(timecode_offset_entry->GetTextExtent(wxS("00:00:00:00")))); + timecode_offset_entry->SetSize(timecode_offset_entry->GetSizeFromTextSize(timecode_offset_entry->GetTextExtent(wxS("00:00:00:00")))); wxCheckBox *inclusive_end_times_check = new wxCheckBox(&d, -1, _("Out-times are inclusive")); wxString text_encodings[] = { @@ -129,7 +131,9 @@ int ShowEbuExportConfigurationDialog(wxWindow *owner, EbuExportSettings &s) { _("Skip lines that are too long") }; - wxSpinCtrl *max_line_length_ctrl = new wxSpinCtrl(&d, -1, wxString(), wxDefaultPosition, wxSize(65, -1)); + wxSpinCtrl *max_line_length_ctrl = new wxSpinCtrl(&d, -1, wxString()); + max_line_length_ctrl->SetMinSize(max_line_length_ctrl->GetSizeFromTextSize(max_line_length_ctrl->GetTextExtent(wxS("00")))); + max_line_length_ctrl->SetSize(max_line_length_ctrl->GetSizeFromTextSize(max_line_length_ctrl->GetTextExtent(wxS("00")))); wxComboBox *wrap_mode_ctrl = new wxComboBox(&d, -1, wrap_modes[0], wxDefaultPosition, wxDefaultSize, 4, wrap_modes, wxCB_DROPDOWN | wxCB_READONLY); wxCheckBox *translate_alignments_check = new wxCheckBox(&d, -1, _("Translate alignments")); diff --git a/src/dialog_properties.cpp b/src/dialog_properties.cpp index d19c70ae5..7f795f0a6 100644 --- a/src/dialog_properties.cpp +++ b/src/dialog_properties.cpp @@ -108,8 +108,8 @@ DialogProperties::DialogProperties(agi::Context *c) TopSizer->Add(TopSizerGrid,1,wxALL | wxEXPAND,0); // Resolution box - ResX = new wxTextCtrl(&d,-1,"",wxDefaultPosition,wxSize(50, -1),0,IntValidator(c->ass->GetScriptInfoAsInt("PlayResX"))); - ResY = new wxTextCtrl(&d,-1,"",wxDefaultPosition,wxSize(50, -1),0,IntValidator(c->ass->GetScriptInfoAsInt("PlayResY"))); + ResX = new wxTextCtrl(&d,-1,"",wxDefaultPosition,wxDefaultSize,0,IntValidator(c->ass->GetScriptInfoAsInt("PlayResX"))); + ResY = new wxTextCtrl(&d,-1,"",wxDefaultPosition,wxDefaultSize,0,IntValidator(c->ass->GetScriptInfoAsInt("PlayResY"))); wxButton *FromVideo = new wxButton(&d,-1,_("From &video")); if (!c->project->VideoProvider()) @@ -173,7 +173,7 @@ DialogProperties::DialogProperties(agi::Context *c) } void DialogProperties::AddProperty(wxSizer *sizer, wxString const& label, std::string const& property) { - wxTextCtrl *ctrl = new wxTextCtrl(&d, -1, to_wx(c->ass->GetScriptInfo(property)), wxDefaultPosition, wxSize(200, -1)); + wxTextCtrl *ctrl = new wxTextCtrl(&d, -1, to_wx(c->ass->GetScriptInfo(property))); sizer->Add(new wxStaticText(&d, -1, label), wxSizerFlags().Center().Left()); sizer->Add(ctrl, wxSizerFlags(1).Expand()); properties.push_back({property, ctrl}); diff --git a/src/dialog_resample.cpp b/src/dialog_resample.cpp index bf616cb83..2c5148238 100644 --- a/src/dialog_resample.cpp +++ b/src/dialog_resample.cpp @@ -112,7 +112,7 @@ DialogResample::DialogResample(agi::Context *c, ResampleSettings &settings) // Create all controls and set validators for (size_t i = 0; i < 4; ++i) { - margin_ctrl[i] = new wxSpinCtrl(&d, -1, "0", wxDefaultPosition, wxSize(50, -1), wxSP_ARROW_KEYS, -9999, 9999, 0); + margin_ctrl[i] = new wxSpinCtrl(&d, -1, "0", wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, -9999, 9999, 0); margin_ctrl[i]->SetValidator(wxGenericValidator(&settings.margin[i])); } @@ -122,12 +122,12 @@ DialogResample::DialogResample(agi::Context *c, ResampleSettings &settings) margin_ctrl[RIGHT]->Enable(false); margin_ctrl[BOTTOM]->Enable(false); - source_x = new wxSpinCtrl(&d, -1, "", wxDefaultPosition, wxSize(50, -1), wxSP_ARROW_KEYS, 1, INT_MAX); - source_y = new wxSpinCtrl(&d, -1, "", wxDefaultPosition, wxSize(50, -1), wxSP_ARROW_KEYS, 1, INT_MAX); + source_x = new wxSpinCtrl(&d, -1, "", wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 1, INT_MAX); + source_y = new wxSpinCtrl(&d, -1, "", wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 1, INT_MAX); source_matrix = new wxComboBox(&d, -1, "", wxDefaultPosition, wxDefaultSize, to_wx(MatrixNames()), wxCB_READONLY); - dest_x = new wxSpinCtrl(&d, -1, "", wxDefaultPosition, wxSize(50, -1), wxSP_ARROW_KEYS, 1, INT_MAX); - dest_y = new wxSpinCtrl(&d, -1, "", wxDefaultPosition, wxSize(50, -1), wxSP_ARROW_KEYS, 1, INT_MAX); + dest_x = new wxSpinCtrl(&d, -1, "", wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 1, INT_MAX); + dest_y = new wxSpinCtrl(&d, -1, "", wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 1, INT_MAX); dest_matrix = new wxComboBox(&d, -1, "", wxDefaultPosition, wxDefaultSize, to_wx(MatrixNames()), wxCB_READONLY); diff --git a/src/dialog_style_editor.cpp b/src/dialog_style_editor.cpp index 039caee17..4c5e48ad2 100644 --- a/src/dialog_style_editor.cpp +++ b/src/dialog_style_editor.cpp @@ -151,7 +151,7 @@ DialogStyleEditor::DialogStyleEditor(wxWindow *parent, AssStyle *style, agi::Con auto num_text_ctrl = [&](double *value, double min, double max, double step) -> wxSpinCtrlDouble * { auto scd = new wxSpinCtrlDouble(this, -1, "", wxDefaultPosition, - wxSize(75, -1), wxSP_ARROW_KEYS, min, max, *value, step); + wxDefaultSize, wxSP_ARROW_KEYS, min, max, *value, step); scd->SetValidator(DoubleSpinValidator(value)); scd->Bind(wxEVT_SPINCTRLDOUBLE, [=](wxSpinDoubleEvent &evt) { evt.Skip(); @@ -197,10 +197,13 @@ DialogStyleEditor::DialogStyleEditor(wxWindow *parent, AssStyle *style, agi::Con new ColourButton(this, wxSize(55, 16), true, style->outline, ColorValidator(&work->outline)), new ColourButton(this, wxSize(55, 16), true, style->shadow, ColorValidator(&work->shadow)) }; - for (int i = 0; i < 3; i++) + for (int i = 0; i < 3; i++) { margin[i] = new wxSpinCtrl(this, -1, std::to_wstring(style->Margin[i]), - wxDefaultPosition, wxSize(60, -1), - wxSP_ARROW_KEYS, 0, 9999, style->Margin[i]); + wxDefaultPosition, wxDefaultSize, + wxSP_ARROW_KEYS, 0, 9999, style->Margin[i]); + margin[i]->SetMinSize(margin[i]->GetSizeFromTextSize(GetTextExtent(wxS("0000")))); + margin[i]->SetSize(margin[i]->GetSizeFromTextSize(GetTextExtent(wxS("0000")))); + } Alignment = new wxRadioBox(this, -1, _("Alignment"), wxDefaultPosition, wxDefaultSize, 9, alignValues, 3, wxRA_SPECIFY_COLS); auto Outline = num_text_ctrl(&work->outline_w, 0.0, 1000.0, 0.1); diff --git a/src/export_framerate.cpp b/src/export_framerate.cpp index 024489f64..f371e4c10 100644 --- a/src/export_framerate.cpp +++ b/src/export_framerate.cpp @@ -78,9 +78,9 @@ wxWindow *AssTransformFramerateFilter::GetConfigDialogWindow(wxWindow *parent, a initialInput = "23.976"; FromVideo->Enable(false); } - InputFramerate = new wxTextCtrl(base,-1,initialInput,wxDefaultPosition,wxSize(60,20)); - InputSizer->Add(InputFramerate,0,wxEXPAND | wxLEFT,5); - InputSizer->Add(FromVideo,0,wxEXPAND | wxLEFT,5); + InputFramerate = new wxTextCtrl(base,-1,initialInput); + InputSizer->Add(InputFramerate, 0, wxEXPAND); + InputSizer->Add(FromVideo, 0, wxEXPAND | wxLEFT, 5); InputSizer->AddStretchSpacer(1); // Output sizers @@ -90,7 +90,7 @@ wxWindow *AssTransformFramerateFilter::GetConfigDialogWindow(wxWindow *parent, a // Output top line RadioOutputVFR = new wxRadioButton(base,-1,_("V&ariable"),wxDefaultPosition,wxDefaultSize,wxRB_GROUP); - OutputSizerTop->Add(RadioOutputVFR,0,wxEXPAND,0); + OutputSizerTop->Add(RadioOutputVFR, wxEXPAND); // Output bottom line RadioOutputCFR = new wxRadioButton(base,-1,_("&Constant: ")); @@ -99,9 +99,9 @@ wxWindow *AssTransformFramerateFilter::GetConfigDialogWindow(wxWindow *parent, a RadioOutputVFR->Enable(false); RadioOutputCFR->SetValue(true); } - OutputFramerate = new wxTextCtrl(base,-1,initialOutput,wxDefaultPosition,wxSize(60,20)); - OutputSizerBottom->Add(RadioOutputCFR,0,wxEXPAND,0); - OutputSizerBottom->Add(OutputFramerate,0,wxEXPAND | wxLEFT,5); + OutputFramerate = new wxTextCtrl(base,-1,initialOutput); + OutputSizerBottom->Add(RadioOutputCFR, wxEXPAND); + OutputSizerBottom->Add(OutputFramerate, 0, wxEXPAND | wxLEFT, 5); OutputSizerBottom->AddStretchSpacer(1); // Reverse checkbox diff --git a/src/subs_edit_box.cpp b/src/subs_edit_box.cpp index ca08b4177..857c36177 100644 --- a/src/subs_edit_box.cpp +++ b/src/subs_edit_box.cpp @@ -122,8 +122,7 @@ SubsEditBox::SubsEditBox(wxWindow *parent, agi::Context *context) style_box = MakeComboBox("Default", wxCB_READONLY, &SubsEditBox::OnStyleChange, _("Style for this line")); - style_edit_button = new wxButton(this, -1, _("Edit"), wxDefaultPosition, - wxSize(GetTextExtent(_("Edit")).GetWidth() + 20, -1)); + style_edit_button = new wxButton(this, -1, _("Edit"), wxDefaultPosition, wxDefaultSize, wxBU_EXACTFIT); style_edit_button->Bind(wxEVT_BUTTON, [=](wxCommandEvent&) { if (active_style) { wxArrayString font_list = wxFontEnumerator::GetFacenames(); @@ -133,24 +132,28 @@ SubsEditBox::SubsEditBox(wxWindow *parent, agi::Context *context) }); top_sizer->Add(style_edit_button, wxSizerFlags().Center().Border(wxRIGHT)); - actor_box = new Placeholder(this, _("Actor"), wxSize(110, -1), wxCB_DROPDOWN | wxTE_PROCESS_ENTER, _("Actor name for this speech. This is only for reference, and is mainly useless.")); + actor_box = new Placeholder(this, _("Actor"), wxDefaultSize, wxCB_DROPDOWN | wxTE_PROCESS_ENTER, _("Actor name for this speech. This is only for reference, and is mainly useless.")); Bind(wxEVT_TEXT, &SubsEditBox::OnActorChange, this, actor_box->GetId()); Bind(wxEVT_COMBOBOX, &SubsEditBox::OnActorChange, this, actor_box->GetId()); top_sizer->Add(actor_box, wxSizerFlags(2).Center().Border(wxRIGHT)); - effect_box = new Placeholder(this, _("Effect"), wxSize(80,-1), wxCB_DROPDOWN | wxTE_PROCESS_ENTER, _("Effect for this line. This can be used to store extra information for karaoke scripts, or for the effects supported by the renderer.")); + effect_box = new Placeholder(this, _("Effect"), wxDefaultSize, wxCB_DROPDOWN | wxTE_PROCESS_ENTER, _("Effect for this line. This can be used to store extra information for karaoke scripts, or for the effects supported by the renderer.")); Bind(wxEVT_TEXT, &SubsEditBox::OnEffectChange, this, effect_box->GetId()); Bind(wxEVT_COMBOBOX, &SubsEditBox::OnEffectChange, this, effect_box->GetId()); top_sizer->Add(effect_box, 3, wxALIGN_CENTER, 5); - char_count = new wxTextCtrl(this, -1, "0", wxDefaultPosition, wxSize(30, -1), wxTE_READONLY | wxTE_CENTER); + char_count = new wxTextCtrl(this, -1, "0", wxDefaultPosition, wxDefaultSize, wxTE_READONLY | wxTE_CENTER); + char_count->SetMinSize(char_count->GetSizeFromTextSize(GetTextExtent(wxS("000")))); + char_count->SetSize(char_count->GetSizeFromTextSize(GetTextExtent(wxS("000")))); char_count->SetToolTip(_("Number of characters in the longest line of this subtitle.")); top_sizer->Add(char_count, 0, wxALIGN_CENTER, 5); // Middle controls middle_left_sizer = new wxBoxSizer(wxHORIZONTAL); - layer = new wxSpinCtrl(this,-1,"",wxDefaultPosition,wxSize(50,-1), wxSP_ARROW_KEYS | wxTE_PROCESS_ENTER,0,0x7FFFFFFF,0); + layer = new wxSpinCtrl(this,-1,"",wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS | wxTE_PROCESS_ENTER,0,0x7FFFFFFF,0); + layer->SetMinSize(layer->GetSizeFromTextSize(GetTextExtent(wxS("0")))); + layer->SetSize(layer->GetSizeFromTextSize(GetTextExtent(wxS("0")))); layer->SetToolTip(_("Layer number")); middle_left_sizer->Add(layer, wxSizerFlags().Center()); middle_left_sizer->AddSpacer(5); @@ -198,10 +201,10 @@ SubsEditBox::SubsEditBox(wxWindow *parent, agi::Context *context) main_sizer->Add(middle_right_sizer,0,wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM,3); // Text editor - edit_ctrl = new SubsTextEditCtrl(this, wxSize(300,50), wxBORDER_SUNKEN, c); + edit_ctrl = new SubsTextEditCtrl(this, wxDefaultSize, wxBORDER_SUNKEN, c); edit_ctrl->Bind(wxEVT_CHAR_HOOK, &SubsEditBox::OnKeyDown, this); - secondary_editor = new wxTextCtrl(this, -1, "", wxDefaultPosition, wxSize(300,50), wxBORDER_SUNKEN | wxTE_MULTILINE | wxTE_READONLY); + secondary_editor = new wxTextCtrl(this, -1, "", wxDefaultPosition, wxDefaultSize, wxBORDER_SUNKEN | wxTE_MULTILINE | wxTE_READONLY); main_sizer->Add(secondary_editor,1,wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM,3); main_sizer->Add(edit_ctrl,1,wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM,3); @@ -248,7 +251,9 @@ SubsEditBox::~SubsEditBox() { } wxTextCtrl *SubsEditBox::MakeMarginCtrl(wxString const& tooltip, int margin, wxString const& commit_msg) { - wxTextCtrl *ctrl = new wxTextCtrl(this, -1, "", wxDefaultPosition, wxSize(40,-1), wxTE_CENTRE | wxTE_PROCESS_ENTER, IntValidator()); + wxTextCtrl *ctrl = new wxTextCtrl(this, -1, "", wxDefaultPosition, wxDefaultSize, wxTE_CENTRE | wxTE_PROCESS_ENTER, IntValidator()); + ctrl->SetMinSize(ctrl->GetSizeFromTextSize(GetTextExtent(wxS("0000")))); + ctrl->SetSize(ctrl->GetSizeFromTextSize(GetTextExtent(wxS("0000")))); ctrl->SetMaxLength(4); ctrl->SetToolTip(tooltip); middle_left_sizer->Add(ctrl, wxSizerFlags().Center()); @@ -263,7 +268,9 @@ wxTextCtrl *SubsEditBox::MakeMarginCtrl(wxString const& tooltip, int margin, wxS } TimeEdit *SubsEditBox::MakeTimeCtrl(wxString const& tooltip, TimeField field) { - TimeEdit *ctrl = new TimeEdit(this, -1, c, "", wxSize(GetTextExtent(wxS(" 0:00:00.000 ")).GetWidth(),-1), field == TIME_END); + TimeEdit *ctrl = new TimeEdit(this, -1, c, "", wxDefaultSize, field == TIME_END); + ctrl->SetMinSize(ctrl->GetSizeFromTextSize(GetTextExtent(wxS("0:00:00.000")))); + ctrl->SetSize(ctrl->GetSizeFromTextSize(GetTextExtent(wxS("0:00:00.000")))); ctrl->SetToolTip(tooltip); Bind(wxEVT_TEXT, [=](wxCommandEvent&) { CommitTimes(field); }, ctrl->GetId()); ctrl->Bind(wxEVT_CHAR_HOOK, time_edit_char_hook); @@ -273,7 +280,8 @@ TimeEdit *SubsEditBox::MakeTimeCtrl(wxString const& tooltip, TimeField field) { void SubsEditBox::MakeButton(const char *cmd_name) { cmd::Command *command = cmd::get(cmd_name); - wxBitmapButton *btn = new wxBitmapButton(this, -1, command->Icon(16)); + // FIXME: Hard coded icon size. Use icon size in config instead. Or maybe use toolbar to construct this + wxBitmapButton *btn = new wxBitmapButton(this, -1, command->Icon(int(16 * GetContentScaleFactor()))); ToolTipManager::Bind(btn, command->StrHelp(), "Subtitle Edit Box", cmd_name); middle_right_sizer->Add(btn, wxSizerFlags().Expand()); @@ -291,7 +299,7 @@ wxButton *SubsEditBox::MakeBottomButton(const char *cmd_name) { wxComboBox *SubsEditBox::MakeComboBox(wxString const& initial_text, int style, void (SubsEditBox::*handler)(wxCommandEvent&), wxString const& tooltip) { wxString styles[] = { "Default" }; - wxComboBox *ctrl = new wxComboBox(this, -1, initial_text, wxDefaultPosition, wxSize(110,-1), 1, styles, style | wxTE_PROCESS_ENTER); + wxComboBox *ctrl = new wxComboBox(this, -1, initial_text, wxDefaultPosition, wxDefaultSize, 1, styles, style | wxTE_PROCESS_ENTER); ctrl->SetToolTip(tooltip); top_sizer->Add(ctrl, wxSizerFlags(2).Center().Border(wxRIGHT)); Bind(wxEVT_COMBOBOX, handler, this, ctrl->GetId());