diff --git a/Nasal/canvas/gui/dialogs/MessageBox.nas b/Nasal/canvas/gui/dialogs/MessageBox.nas index cf4470d72..8b0ae1dc9 100644 --- a/Nasal/canvas/gui/dialogs/MessageBox.nas +++ b/Nasal/canvas/gui/dialogs/MessageBox.nas @@ -45,8 +45,8 @@ var MessageBox = { return me; } - var MARGIN = 8; # TODO implement margin in C++ layouting code - var dlg = canvas.Window.new([250,120], "dialog") + var MARGIN = 12; # TODO implement margin in C++ layouting code + var dlg = canvas.Window.new([300,120], "dialog") .setTitle(me._title); var root = dlg.getCanvas(1) .set("background", style.getColor("bg_color")) @@ -57,6 +57,7 @@ var MessageBox = { var text_box = HBoxLayout.new(); vbox.addItem(text_box); + text_box.setSpacing(MARGIN); text_box.addSpacing(MARGIN); @@ -116,6 +117,9 @@ var MessageBox = { vbox.addSpacing(MARGIN); + var w = vbox.sizeHint()[0]; + dlg.setSize(w, math.max(130, vbox.heightForWidth(w))); + return me; }, show: func(title, text, icon = nil, cb = nil, buttons = nil) diff --git a/Nasal/canvas/gui/styles/DefaultStyle.nas b/Nasal/canvas/gui/styles/DefaultStyle.nas index 054306762..22ee8bbbc 100644 --- a/Nasal/canvas/gui/styles/DefaultStyle.nas +++ b/Nasal/canvas/gui/styles/DefaultStyle.nas @@ -51,9 +51,9 @@ DefaultStyle.widgets.button = { { me._label.set("text", text); - # TODO get real font metrics - model.setMinimumSize([size(text) * 5 + 6, 16]); - model.setSizeHint([size(text) * 8 + 16, 32]); + var min_width = math.max(80, me._label.maxWidth() + 16); + model.setMinimumSize([min_width, 16]); + model.setSizeHint([min_width, 28]); return me; }, @@ -123,8 +123,8 @@ DefaultStyle.widgets.checkbox = { }, setSize: func(model, w, h) { - me._icon.setTranslation(0, (h - 18) / 2); - me._label.setTranslation(20, h / 2); + me._icon.setTranslation(0, int((h - 18) / 2)); + me._label.setTranslation(24, int(h / 2) + 1); return me; }, @@ -132,9 +132,9 @@ DefaultStyle.widgets.checkbox = { { me._label.set("text", text); - var text_width = me._label.maxWidth(); - model.setMinimumSize([text_width + 20, 18]); - model.setSizeHint([text_width + 26, 24]); + var min_width = me._label.maxWidth() + 24; + model.setMinimumSize([min_width, 18]); + model.setSizeHint([min_width, 24]); return me; }, @@ -213,9 +213,9 @@ DefaultStyle.widgets.label = { } else { - # TODO get real font metrics - model.setMinimumSize([size(text) * 5 + 4, 14]); - model.setSizeHint([size(text) * 5 + 14, 24]); + var min_width = me._text.maxWidth() + 4; + model.setMinimumSize([min_width, 14]); + model.setSizeHint([min_width, 24]); } return me;