[GTK] Another fix for label alignment

This commit is contained in:
Lluis Sanchez 2013-11-12 21:04:43 +01:00
Родитель 31d15e6c9f
Коммит ef54d065c7
10 изменённых файлов: 54 добавлений и 16 удалений

Просмотреть файл

@ -51,7 +51,7 @@ namespace Xwt
var la = new Label ("Some text here");
la.TextAlignment = Alignment.Center;
la.BackgroundColor = Xwt.Drawing.Colors.LightGray;
CheckWidgetRender ("Label.AlignCenter", la);
CheckWidgetRender ("Label.AlignCenter.png", la);
}
[Test]
@ -62,7 +62,25 @@ namespace Xwt
la.Wrap = WrapMode.Word;
la.WidthRequest = 200;
la.BackgroundColor = Xwt.Drawing.Colors.LightGray;
CheckWidgetRender ("Label.AlignCenterWrapped", la);
CheckWidgetRender ("Label.AlignCenterWrapped.png", la);
}
[Test]
public void AlignCenterWrappedChangeText ()
{
var la = new Label ("Some text here");
la.TextAlignment = Alignment.Center;
la.Wrap = WrapMode.Word;
la.WidthRequest = 200;
using (var win = new Window { Width = 200, Height = 100 }) {
win.Content = la;
ShowWindow (win);
la.Text = "Some text here Some text here";
WaitForEvents ();
var img = Toolkit.CurrentEngine.RenderWidget (la);
ReferenceImageManager.CheckImage ("Label.AlignCenterWrappedChangeText.png", img);
}
}
[Test]
@ -71,7 +89,7 @@ namespace Xwt
var la = new Label ("Some text here");
la.TextAlignment = Alignment.Start;
la.BackgroundColor = Xwt.Drawing.Colors.LightGray;
CheckWidgetRender ("Label.AlignLeft", la);
CheckWidgetRender ("Label.AlignLeft.png", la);
}
[Test]
@ -82,7 +100,7 @@ namespace Xwt
la.Wrap = WrapMode.Word;
la.WidthRequest = 200;
la.BackgroundColor = Xwt.Drawing.Colors.LightGray;
CheckWidgetRender ("Label.AlignLeftWrapped", la);
CheckWidgetRender ("Label.AlignLeftWrapped.png", la);
}
[Test]
@ -91,7 +109,7 @@ namespace Xwt
var la = new Label ("Some text here");
la.TextAlignment = Alignment.End;
la.BackgroundColor = Xwt.Drawing.Colors.LightGray;
CheckWidgetRender ("Label.AlignRight", la);
CheckWidgetRender ("Label.AlignRight.png", la);
}
[Test]
@ -102,7 +120,7 @@ namespace Xwt
la.Wrap = WrapMode.Word;
la.WidthRequest = 200;
la.BackgroundColor = Xwt.Drawing.Colors.LightGray;
CheckWidgetRender ("Label.AlignRightWrapped", la);
CheckWidgetRender ("Label.AlignRightWrapped.png", la);
}
}
}

Просмотреть файл

@ -55,13 +55,28 @@ namespace Xwt
nameLabel.Font = nameLabel.Font.WithWeight (Xwt.Drawing.FontWeight.Bold);
img1 = new ImageView ();
table.Add (img1, 0, 2, hexpand:true, vexpand:true);
var frame = new FrameBox {
Content = img1,
BorderColor = Xwt.Drawing.Colors.Gray,
BorderWidth = 1
};
table.Add (frame, 0, 2, hexpand:true, vexpand:true, hpos:WidgetPlacement.Center, vpos:WidgetPlacement.Center);
imgDiff = new ImageView ();
table.Add (imgDiff, 1, 2, hexpand:true, vexpand:true);
frame = new FrameBox {
Content = imgDiff,
BorderColor = Xwt.Drawing.Colors.Gray,
BorderWidth = 1
};
table.Add (frame, 1, 2, hexpand:true, vexpand:true, hpos:WidgetPlacement.Center, vpos:WidgetPlacement.Center);
img2 = new ImageView ();
table.Add (img2, 2, 2, hexpand:true, vexpand:true);
frame = new FrameBox {
Content = img2,
BorderColor = Xwt.Drawing.Colors.Gray,
BorderWidth = 1
};
table.Add (frame, 2, 2, hexpand:true, vexpand:true, hpos:WidgetPlacement.Center, vpos:WidgetPlacement.Center);
var buttonBox = new HBox ();
table.Add (buttonBox, 0, 3, colspan:2, hexpand:true);

Просмотреть файл

До

Ширина:  |  Высота:  |  Размер: 1.7 KiB

После

Ширина:  |  Высота:  |  Размер: 1.7 KiB

Просмотреть файл

До

Ширина:  |  Высота:  |  Размер: 2.7 KiB

После

Ширина:  |  Высота:  |  Размер: 2.7 KiB

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 2.1 KiB

Просмотреть файл

До

Ширина:  |  Высота:  |  Размер: 1.7 KiB

После

Ширина:  |  Высота:  |  Размер: 1.7 KiB

Просмотреть файл

До

Ширина:  |  Высота:  |  Размер: 2.7 KiB

После

Ширина:  |  Высота:  |  Размер: 2.7 KiB

Просмотреть файл

До

Ширина:  |  Высота:  |  Размер: 1.7 KiB

После

Ширина:  |  Высота:  |  Размер: 1.7 KiB

Просмотреть файл

До

Ширина:  |  Высота:  |  Размер: 2.7 KiB

После

Ширина:  |  Высота:  |  Размер: 2.7 KiB

Просмотреть файл

@ -175,15 +175,20 @@ namespace Xwt.GtkBackend
Label.Layout.GetPixelSize (out unused, out wrapHeight);
if (wrapWidth != args.Allocation.Width || oldHeight != wrapHeight) {
wrapWidth = args.Allocation.Width;
// GTK renders the text using the calculated pixel width, not the allocated width.
// If the calculated width is smaller and text is not left aligned, then a gap is
// shown at the right of the label. We then have the adjust the allocation.
if (Label.Justify == Gtk.Justification.Right)
Label.Xpad = wrapWidth - unused;
else if (Label.Justify == Gtk.Justification.Center)
Label.Xpad = (wrapWidth - unused) / 2;
Label.QueueResize ();
}
// GTK renders the text using the calculated pixel width, not the allocated width.
// If the calculated width is smaller and text is not left aligned, then a gap is
// shown at the right of the label. We then have the adjust the allocation.
if (Label.Justify == Gtk.Justification.Right) {
var w = wrapWidth - unused;
if (w != Label.Xpad)
Label.Xpad = w;
} else if (Label.Justify == Gtk.Justification.Center) {
var w = (wrapWidth - unused) / 2;
if (w != Label.Xpad)
Label.Xpad = w;
}
}
void HandleLabelDynamicSizeRequest (object o, Gtk.SizeRequestedArgs args)