Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/xwt.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVsevolod Kukol <sevo@xamarin.com>2016-02-08 17:57:50 +0300
committerVsevolod Kukol <sevo@xamarin.com>2016-02-08 17:57:50 +0300
commit82b2666fb604fee11309960225c6de1d41a9307e (patch)
treea3d32fa6d8a13790cd65b1cd4b3cb11801025e14
parentb12e79c085fc317695688aed2bbded7a45a837fe (diff)
parent9cee0e6dd9d445a95beb0b6528de78fc633a4039 (diff)
Merge remote-tracking branch 'origin/master' into image-loaderimage-loader
-rw-r--r--Xwt.Gtk/Xwt.GtkBackend/PopoverBackend.cs3
-rw-r--r--Xwt.Gtk/Xwt.GtkBackend/TextLayoutBackendHandler.cs10
-rw-r--r--Xwt.WPF/Xwt.WPFBackend/TextLayoutBackendHandler.cs9
-rw-r--r--Xwt.WPF/Xwt.WPFBackend/WPFEngine.cs2
-rw-r--r--Xwt.XamMac/Xwt.Mac/TextLayoutBackendHandler.cs6
-rw-r--r--Xwt/Xwt.Backends/TextLayoutBackendHandler.cs1
-rw-r--r--Xwt/Xwt.Drawing/Font.cs16
-rw-r--r--Xwt/Xwt.Drawing/TextLayout.cs9
-rw-r--r--Xwt/Xwt/Toolkit.cs28
9 files changed, 74 insertions, 10 deletions
diff --git a/Xwt.Gtk/Xwt.GtkBackend/PopoverBackend.cs b/Xwt.Gtk/Xwt.GtkBackend/PopoverBackend.cs
index 959766ce..7f3a779f 100644
--- a/Xwt.Gtk/Xwt.GtkBackend/PopoverBackend.cs
+++ b/Xwt.Gtk/Xwt.GtkBackend/PopoverBackend.cs
@@ -304,6 +304,9 @@ namespace Xwt.GtkBackend
public void Dispose ()
{
+ if (popover.TransientFor != null)
+ popover.TransientFor.FocusInEvent -= HandleParentFocusInEvent;
+
popover.Destroy ();
popover.Dispose ();
}
diff --git a/Xwt.Gtk/Xwt.GtkBackend/TextLayoutBackendHandler.cs b/Xwt.Gtk/Xwt.GtkBackend/TextLayoutBackendHandler.cs
index a5d6f609..5b63e2bb 100644
--- a/Xwt.Gtk/Xwt.GtkBackend/TextLayoutBackendHandler.cs
+++ b/Xwt.Gtk/Xwt.GtkBackend/TextLayoutBackendHandler.cs
@@ -214,6 +214,16 @@ namespace Xwt.GtkBackend
return Pango.Units.ToPixels (iter.Baseline);
}
+ public override double GetMeanline (object backend)
+ {
+ var tl = (PangoBackend)backend;
+ var baseline = 0;
+ using (var iter = tl.Layout.Iter)
+ baseline = iter.Baseline;
+ var font = tl.Layout.Context.LoadFont (tl.Layout.FontDescription);
+ return Pango.Units.ToPixels (baseline - font.GetMetrics (Pango.Language.Default).StrikethroughPosition);
+ }
+
public override void Dispose (object backend)
{
var tl = (IDisposable) backend;
diff --git a/Xwt.WPF/Xwt.WPFBackend/TextLayoutBackendHandler.cs b/Xwt.WPF/Xwt.WPFBackend/TextLayoutBackendHandler.cs
index bc36a718..d55d75b1 100644
--- a/Xwt.WPF/Xwt.WPFBackend/TextLayoutBackendHandler.cs
+++ b/Xwt.WPF/Xwt.WPFBackend/TextLayoutBackendHandler.cs
@@ -96,6 +96,15 @@ namespace Xwt.WPFBackend
return t.FormattedText.Baseline;
}
+ public override double GetMeanline (object backend)
+ {
+ var t = (TextLayoutBackend)backend;
+ var fd = (FontData)Toolkit.GetBackend(t.Font);
+ var tf = new Typeface (fd.Family, fd.Style, fd.Weight, fd.Stretch);
+
+ return t.FormattedText.Baseline + tf.StrikethroughPosition * fd.Size;
+ }
+
public override void AddAttribute (object backend, TextAttribute attribute)
{
var t = (TextLayoutBackend)backend;
diff --git a/Xwt.WPF/Xwt.WPFBackend/WPFEngine.cs b/Xwt.WPF/Xwt.WPFBackend/WPFEngine.cs
index 7cf0b3ba..497cebe2 100644
--- a/Xwt.WPF/Xwt.WPFBackend/WPFEngine.cs
+++ b/Xwt.WPF/Xwt.WPFBackend/WPFEngine.cs
@@ -209,7 +209,7 @@ namespace Xwt.WPFBackend
if (b is XwtWidgetBackend)
b = ((XwtWidgetBackend)b).NativeBackend;
IWpfWidgetBackend wb = (IWpfWidgetBackend)b;
- return wb.Widget.Parent != null;
+ return VisualTreeHelper.GetParent (wb.Widget) != null;
}
public override object GetNativeImage (Image image)
diff --git a/Xwt.XamMac/Xwt.Mac/TextLayoutBackendHandler.cs b/Xwt.XamMac/Xwt.Mac/TextLayoutBackendHandler.cs
index a8aedb5d..1e202d14 100644
--- a/Xwt.XamMac/Xwt.Mac/TextLayoutBackendHandler.cs
+++ b/Xwt.XamMac/Xwt.Mac/TextLayoutBackendHandler.cs
@@ -146,6 +146,12 @@ namespace Xwt.Mac
}
}
+ public override double GetMeanline (object backend)
+ {
+ LayoutInfo li = (LayoutInfo)backend;
+ return GetBaseline (backend) - li.Font.XHeight / 2;
+ }
+
static CTFrame CreateFrame (LayoutInfo li)
{
if (string.IsNullOrEmpty (li.Text))
diff --git a/Xwt/Xwt.Backends/TextLayoutBackendHandler.cs b/Xwt/Xwt.Backends/TextLayoutBackendHandler.cs
index 196995da..c9311a96 100644
--- a/Xwt/Xwt.Backends/TextLayoutBackendHandler.cs
+++ b/Xwt/Xwt.Backends/TextLayoutBackendHandler.cs
@@ -44,6 +44,7 @@ namespace Xwt.Backends
public abstract int GetIndexFromCoordinates (object backend, double x, double y);
public abstract Point GetCoordinateFromIndex (object backend, int index);
public abstract double GetBaseline (object backend);
+ public abstract double GetMeanline (object backend);
public abstract void AddAttribute (object backend, TextAttribute attribute);
public abstract void ClearAttributes (object backend);
diff --git a/Xwt/Xwt.Drawing/Font.cs b/Xwt/Xwt.Drawing/Font.cs
index c267eeaa..1a674f93 100644
--- a/Xwt/Xwt.Drawing/Font.cs
+++ b/Xwt/Xwt.Drawing/Font.cs
@@ -302,7 +302,7 @@ namespace Xwt.Drawing
public Font WithSize (double size)
{
- return new Font (handler.SetSize (Backend, size));
+ return new Font (handler.SetSize (Backend, size), ToolkitEngine);
}
public Font WithScaledSize (double scale)
@@ -343,6 +343,20 @@ namespace Xwt.Drawing
return new Font (handler.SetStretch (Backend, stretch), ToolkitEngine);
}
+ public Font WithSettings (Font fromFont)
+ {
+ return WithSettings (fromFont.Size, fromFont.Style, fromFont.Weight, fromFont.Stretch);
+ }
+
+ public Font WithSettings (double size, FontStyle style, FontWeight weight, FontStretch stretch)
+ {
+ var newHandler = handler.SetSize (Backend, size);
+ newHandler = handler.SetStyle (Backend, style);
+ newHandler = handler.SetWeight (Backend, weight);
+ newHandler = handler.SetStretch (Backend, stretch);
+ return new Font (newHandler, ToolkitEngine);
+ }
+
public override string ToString ()
{
StringBuilder sb = new StringBuilder (Family);
diff --git a/Xwt/Xwt.Drawing/TextLayout.cs b/Xwt/Xwt.Drawing/TextLayout.cs
index b2ead316..ecf09ae9 100644
--- a/Xwt/Xwt.Drawing/TextLayout.cs
+++ b/Xwt/Xwt.Drawing/TextLayout.cs
@@ -182,6 +182,15 @@ namespace Xwt.Drawing
}
}
+ /// <summary>
+ /// Get the distance in pixels between the top of the layout bounds and the first line's meanline (usually equivalent to the baseline minus half of the x-height)
+ /// </summary>
+ public double Meanline {
+ get {
+ return handler.GetMeanline (Backend);
+ }
+ }
+
public TextTrimming Trimming {
get { return textTrimming; }
set { textTrimming = value; handler.SetTrimming (Backend, value); }
diff --git a/Xwt/Xwt/Toolkit.cs b/Xwt/Xwt/Toolkit.cs
index 9e9d765c..8e38d5c2 100644
--- a/Xwt/Xwt/Toolkit.cs
+++ b/Xwt/Xwt/Toolkit.cs
@@ -514,14 +514,26 @@ namespace Xwt
// to not corrupt the backend of the singletons
if (font.ToolkitEngine != null) {
var fbh = font.ToolkitEngine.FontBackendHandler;
- if (font == fbh.SystemFont)
- return FontBackendHandler.SystemFont;
- if (font == fbh.SystemMonospaceFont)
- return FontBackendHandler.SystemMonospaceFont;
- if (font == fbh.SystemSansSerifFont)
- return FontBackendHandler.SystemSansSerifFont;
- if (font == fbh.SystemSerifFont)
- return FontBackendHandler.SystemSerifFont;
+ if (font.Family == fbh.SystemFont.Family) {
+ if (font == fbh.SystemFont)
+ return FontBackendHandler.SystemFont;
+ return FontBackendHandler.SystemFont.WithSettings (font);
+ }
+ if (font.Family == fbh.SystemMonospaceFont.Family) {
+ if (font == fbh.SystemMonospaceFont)
+ return FontBackendHandler.SystemMonospaceFont;
+ return FontBackendHandler.SystemMonospaceFont.WithSettings (font);
+ }
+ if (font.Family == fbh.SystemSansSerifFont.Family) {
+ if (font == fbh.SystemSansSerifFont)
+ return FontBackendHandler.SystemSansSerifFont;
+ return FontBackendHandler.SystemSansSerifFont.WithSettings (font);
+ }
+ if (font.Family == fbh.SystemSerifFont.Family) {
+ if (font == fbh.SystemSerifFont)
+ return FontBackendHandler.SystemSerifFont;
+ return FontBackendHandler.SystemSerifFont.WithSettings (font);
+ }
}
font.InitForToolkit (this);