Skip to content

Commit 23e141a

Browse files
- Updated HtmlRenderer to the latest version
- Implemented bitmap loading - Implemented texture brush creation - Implemented HtmlControl event dispatching
1 parent e41dc83 commit 23e141a

6 files changed

+26
-34
lines changed

.gitmodules

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
[submodule "src/Avalonia.HtmlRenderer/external"]
22
path = external
3-
url = https://github.com/AvaloniaUI/HTML-Renderer.git
4-
branch = perspex-pcl
3+
url = https://github.com/ArthurHub/HTML-Renderer.git
4+
branch = master

Adapters/AvaloniaAdapter.cs

+1-2
Original file line numberDiff line numberDiff line change
@@ -96,8 +96,7 @@ protected override RImage ConvertImageInt(object image)
9696

9797
protected override RImage ImageFromStreamInt(Stream memoryStream)
9898
{
99-
//TODO: Implement bitmap loader
100-
return null;
99+
return new ImageAdapter(new Bitmap(memoryStream));
101100
}
102101

103102
protected override RFont CreateFontInt(string family, double size, RFontStyle style)

Adapters/GraphicsAdapter.cs

+6-11
Original file line numberDiff line numberDiff line change
@@ -189,17 +189,12 @@ public override void DrawString(string str, RFont font, RColor color, RPoint poi
189189

190190
public override RBrush GetTextureBrush(RImage image, RRect dstRect, RPoint translateTransformLocation)
191191
{
192-
//TODO: Implement texture brush
193-
return AvaloniaAdapter.Instance.GetSolidBrush(Util.Convert(Colors.Magenta));
194-
195-
//var brush = new ImageBrush(((ImageAdapter)image).Image);
196-
//brush.Stretch = Stretch.None;
197-
//brush.TileMode = TileMode.Tile;
198-
//brush.Viewport = Utils.Convert(dstRect);
199-
//brush.ViewportUnits = BrushMappingMode.Absolute;
200-
//brush.Transform = new TranslateTransform(translateTransformLocation.X, translateTransformLocation.Y);
201-
//brush.Freeze();
202-
//return new BrushAdapter(brush);
192+
var brush = new ImageBrush(((ImageAdapter)image).Image);
193+
brush.Stretch = Stretch.None;
194+
brush.TileMode = TileMode.Tile;
195+
brush.DestinationRect = new RelativeRect(Util.Convert(dstRect).Translate(Util.Convert(translateTransformLocation) - new Point()), RelativeUnit.Absolute);
196+
197+
return new BrushAdapter(brush);
203198
}
204199

205200
public override RGraphicsPath GetGraphicsPath()

Avalonia.HtmlRenderer.csproj

+2-3
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@
77
<NoWarn>CS0436</NoWarn>
88
</PropertyGroup>
99
<ItemGroup>
10-
<Content Include="external\Source\HtmlRenderer\Core\Utils\ImageError.png" />
11-
<Content Include="external\Source\HtmlRenderer\Core\Utils\ImageLoad.png" />
10+
<EmbeddedResource Include="external\Source\HtmlRenderer\Core\Utils\ImageError.png" />
11+
<EmbeddedResource Include="external\Source\HtmlRenderer\Core\Utils\ImageLoad.png" />
1212
</ItemGroup>
1313
<ItemGroup>
1414
<Compile Include="Adapters\BrushAdapter.cs" />
@@ -24,7 +24,6 @@
2424
<Compile Include="Compat\Api.cs" />
2525
<Compile Include="Compat\Attributes.cs" />
2626
<Compile Include="Compat\ThreadPool.cs" />
27-
<Compile Include="external\Source\HtmlRenderer.Pcl\PclCompat.cs" />
2827
<Compile Include="external\Source\HtmlRenderer\Adapters\Entities\RColor.cs" />
2928
<Compile Include="external\Source\HtmlRenderer\Adapters\Entities\RDashStyle.cs" />
3029
<Compile Include="external\Source\HtmlRenderer\Adapters\Entities\RFontStyle.cs" />

HtmlControl.cs

+14-15
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@ public static readonly RoutedEvent ImageLoadEvent
116116
static HtmlControl()
117117
{
118118
FocusableProperty.OverrideDefaultValue(typeof(HtmlControl), true);
119+
AffectsRender(TextProperty);
119120
}
120121

121122
/// <summary>
@@ -124,12 +125,12 @@ static HtmlControl()
124125
protected HtmlControl()
125126
{
126127
_htmlContainer = new HtmlContainer();
127-
_htmlContainer.LoadComplete += (_, e) => OnLoadComplete(e);
128-
_htmlContainer.LinkClicked += (_, e) => OnLinkClicked(e);
129-
_htmlContainer.RenderError += (_, e) => OnRenderError(e);
130-
_htmlContainer.Refresh += (_, e) => OnRefresh(e);
131-
_htmlContainer.StylesheetLoad += (_, e) => OnStylesheetLoad(e);
132-
_htmlContainer.ImageLoad += (_, e) => OnImageLoad(e);
128+
_htmlContainer.LoadComplete += OnLoadComplete;
129+
_htmlContainer.LinkClicked += OnLinkClicked;
130+
_htmlContainer.RenderError += OnRenderError;
131+
_htmlContainer.Refresh += OnRefresh;
132+
_htmlContainer.StylesheetLoad += OnStylesheetLoad;
133+
_htmlContainer.ImageLoad += OnImageLoad;
133134
}
134135

135136
//Hack for adapter
@@ -434,6 +435,7 @@ protected override void OnMouseDoubleClick(MouseButtonEventArgs e)
434435
_htmlContainer.HandleMouseDoubleClick(this, e);
435436
}
436437
*/
438+
437439
/// <summary>
438440
/// Handle key down event for selection, copy and scrollbars handling.
439441
/// </summary>
@@ -560,15 +562,13 @@ private static void OnAvaloniaProperty_valueChanged(AvaloniaObject AvaloniaObjec
560562
}
561563

562564

563-
//TODO: Implement CheckAccess calls
564-
/*
565565
private void OnLoadComplete(object sender, EventArgs e)
566566
{
567567

568568
if (CheckAccess())
569569
OnLoadComplete(e);
570570
else
571-
Dispatcher.UIThread.Invoke(new Action<HtmlLinkClickedEventArgs>(OnLinkClicked), e);
571+
Dispatcher.UIThread.InvokeAsync(() => OnLoadComplete(e)).Wait();
572572

573573
}
574574

@@ -577,40 +577,39 @@ private void OnLinkClicked(object sender, HtmlLinkClickedEventArgs e)
577577
if (CheckAccess())
578578
OnLinkClicked(e);
579579
else
580-
Dispatcher.UIThread.Invoke(new Action<HtmlLinkClickedEventArgs>(OnLinkClicked), e);
580+
Dispatcher.UIThread.InvokeAsync(() => OnLinkClicked(e)).Wait();
581581
}
582582

583583
private void OnRenderError(object sender, HtmlRenderErrorEventArgs e)
584584
{
585585
if (CheckAccess())
586586
OnRenderError(e);
587587
else
588-
Dispatcher.UIThread.Invoke(new Action<HtmlRenderErrorEventArgs>(OnRenderError), e);
588+
Dispatcher.UIThread.InvokeAsync(() => OnRenderError(e)).Wait();
589589
}
590590

591591
private void OnStylesheetLoad(object sender, HtmlStylesheetLoadEventArgs e)
592592
{
593593
if (CheckAccess())
594594
OnStylesheetLoad(e);
595595
else
596-
Dispatcher.UIThread.Invoke(new Action<HtmlStylesheetLoadEventArgs>(OnStylesheetLoad), e);
596+
Dispatcher.UIThread.InvokeAsync(() => OnStylesheetLoad(e)).Wait();
597597
}
598598

599599
private void OnImageLoad(object sender, HtmlImageLoadEventArgs e)
600600
{
601601
if (CheckAccess())
602602
OnImageLoad(e);
603603
else
604-
Dispatcher.UIThread.Invoke(new Action<HtmlImageLoadEventArgs>(OnImageLoad), e);
604+
Dispatcher.UIThread.InvokeAsync(() => OnImageLoad(e)).Wait();
605605
}
606606

607607
private void OnRefresh(object sender, HtmlRefreshEventArgs e)
608608
{
609609
if (CheckAccess())
610610
OnRefresh(e);
611611
else
612-
Dispatcher.UIThread.Invoke(new Action<HtmlRefreshEventArgs>(OnRefresh), e);
612+
Dispatcher.UIThread.InvokeAsync(() => OnRefresh(e)).Wait();
613613
}
614-
*/
615614
}
616615
}

0 commit comments

Comments
 (0)