From 730911fc0db6d0dcad2fc7e6a5a5075da3f98979 Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Sun, 9 Jul 2017 19:11:50 +0200 Subject: [PATCH 1/6] Added a couple more passing tile tests. --- .../Media/ImageBrushTests.cs | 48 ++++++++++++++++++ .../ImageBrush_Tile_Fill.expected.png | Bin 0 -> 3945 bytes ...ImageBrush_Tile_UniformToFill.expected.png | Bin 0 -> 2340 bytes .../ImageBrush_Tile_Fill.expected.png | Bin 0 -> 3945 bytes ...ImageBrush_Tile_UniformToFill.expected.png | Bin 0 -> 3651 bytes .../ImageBrush_Tile_Fill.expected.png | Bin 0 -> 6146 bytes ...ImageBrush_Tile_UniformToFill.expected.png | Bin 0 -> 5720 bytes 7 files changed, 48 insertions(+) create mode 100644 tests/TestFiles/Cairo/Media/ImageBrush/ImageBrush_Tile_Fill.expected.png create mode 100644 tests/TestFiles/Cairo/Media/ImageBrush/ImageBrush_Tile_UniformToFill.expected.png create mode 100644 tests/TestFiles/Direct2D1/Media/ImageBrush/ImageBrush_Tile_Fill.expected.png create mode 100644 tests/TestFiles/Direct2D1/Media/ImageBrush/ImageBrush_Tile_UniformToFill.expected.png create mode 100644 tests/TestFiles/Skia/Media/ImageBrush/ImageBrush_Tile_Fill.expected.png create mode 100644 tests/TestFiles/Skia/Media/ImageBrush/ImageBrush_Tile_UniformToFill.expected.png diff --git a/tests/Avalonia.RenderTests/Media/ImageBrushTests.cs b/tests/Avalonia.RenderTests/Media/ImageBrushTests.cs index cbf11504c1..5f0b1f50e6 100644 --- a/tests/Avalonia.RenderTests/Media/ImageBrushTests.cs +++ b/tests/Avalonia.RenderTests/Media/ImageBrushTests.cs @@ -28,6 +28,54 @@ namespace Avalonia.Direct2D1.RenderTests.Media get { return System.IO.Path.Combine(OutputPath, "github_icon.png"); } } + [Fact] + public void ImageBrush_Tile_Fill() + { + Decorator target = new Decorator + { + Width = 200, + Height = 200, + Child = new Rectangle + { + Margin = new Thickness(8), + Fill = new ImageBrush + { + Stretch = Stretch.Fill, + TileMode = TileMode.Tile, + DestinationRect = new RelativeRect(0, 0, 25, 30, RelativeUnit.Absolute), + Source = new Bitmap(BitmapPath), + } + } + }; + + RenderToFile(target); + CompareImages(); + } + + [Fact] + public void ImageBrush_Tile_UniformToFill() + { + Decorator target = new Decorator + { + Width = 200, + Height = 200, + Child = new Rectangle + { + Margin = new Thickness(8), + Fill = new ImageBrush + { + Stretch = Stretch.Uniform, + TileMode = TileMode.Tile, + DestinationRect = new RelativeRect(0, 0, 25, 30, RelativeUnit.Absolute), + Source = new Bitmap(BitmapPath), + } + } + }; + + RenderToFile(target); + CompareImages(); + } + [Fact] public void ImageBrush_NoStretch_NoTile_Alignment_TopLeft() { diff --git a/tests/TestFiles/Cairo/Media/ImageBrush/ImageBrush_Tile_Fill.expected.png b/tests/TestFiles/Cairo/Media/ImageBrush/ImageBrush_Tile_Fill.expected.png new file mode 100644 index 0000000000000000000000000000000000000000..c38dcfbcfde254168cbc928634d40cd7617347c6 GIT binary patch literal 3945 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 literal 0 HcmV?d00001 diff --git a/tests/TestFiles/Direct2D1/Media/ImageBrush/ImageBrush_Tile_Fill.expected.png b/tests/TestFiles/Direct2D1/Media/ImageBrush/ImageBrush_Tile_Fill.expected.png new file mode 100644 index 0000000000000000000000000000000000000000..c38dcfbcfde254168cbc928634d40cd7617347c6 GIT binary patch literal 3945 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 literal 0 HcmV?d00001 From 7a5e9010a30e6f92e9105774f8436ad13ee790fd Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Sun, 9 Jul 2017 19:49:10 +0200 Subject: [PATCH 2/6] Added another passing ImageBrush test. This tests what I though was a bug in #874 but comparing with WPF, it seems this is correct behavior. --- .../Media/ImageBrushTests.cs | 28 ++++++++++++++++++ .../ImageBrush_Tile_Small_Image.expected.png | Bin 0 -> 1483 bytes .../Media/ImageBrush/github_icon_small.png | Bin 0 -> 928 bytes .../ImageBrush_Tile_Small_Image.expected.png | Bin 0 -> 1483 bytes .../Media/ImageBrush/github_icon_small.png | Bin 0 -> 928 bytes .../ImageBrush_Tile_Small_Image.expected.png | Bin 0 -> 1483 bytes .../Media/ImageBrush/github_icon_small.png | Bin 0 -> 928 bytes 7 files changed, 28 insertions(+) create mode 100644 tests/TestFiles/Cairo/Media/ImageBrush/ImageBrush_Tile_Small_Image.expected.png create mode 100644 tests/TestFiles/Cairo/Media/ImageBrush/github_icon_small.png create mode 100644 tests/TestFiles/Direct2D1/Media/ImageBrush/ImageBrush_Tile_Small_Image.expected.png create mode 100644 tests/TestFiles/Direct2D1/Media/ImageBrush/github_icon_small.png create mode 100644 tests/TestFiles/Skia/Media/ImageBrush/ImageBrush_Tile_Small_Image.expected.png create mode 100644 tests/TestFiles/Skia/Media/ImageBrush/github_icon_small.png diff --git a/tests/Avalonia.RenderTests/Media/ImageBrushTests.cs b/tests/Avalonia.RenderTests/Media/ImageBrushTests.cs index 5f0b1f50e6..f4e44a81f0 100644 --- a/tests/Avalonia.RenderTests/Media/ImageBrushTests.cs +++ b/tests/Avalonia.RenderTests/Media/ImageBrushTests.cs @@ -28,6 +28,11 @@ namespace Avalonia.Direct2D1.RenderTests.Media get { return System.IO.Path.Combine(OutputPath, "github_icon.png"); } } + private string SmallBitmapPath + { + get { return System.IO.Path.Combine(OutputPath, "github_icon_small.png"); } + } + [Fact] public void ImageBrush_Tile_Fill() { @@ -76,6 +81,29 @@ namespace Avalonia.Direct2D1.RenderTests.Media CompareImages(); } + [Fact] + public void ImageBrush_Tile_Small_Image() + { + Decorator target = new Decorator + { + Width = 200, + Height = 200, + Child = new Rectangle + { + Margin = new Thickness(8), + Fill = new ImageBrush + { + Stretch = Stretch.None, + TileMode = TileMode.Tile, + Source = new Bitmap(SmallBitmapPath), + } + } + }; + + RenderToFile(target); + CompareImages(); + } + [Fact] public void ImageBrush_NoStretch_NoTile_Alignment_TopLeft() { diff --git a/tests/TestFiles/Cairo/Media/ImageBrush/ImageBrush_Tile_Small_Image.expected.png b/tests/TestFiles/Cairo/Media/ImageBrush/ImageBrush_Tile_Small_Image.expected.png new file mode 100644 index 0000000000000000000000000000000000000000..669da6ca1a2d08955074eabcfd7e66c09f297091 GIT binary patch literal 1483 zcmbtU`!^E`9G{C6Ejp=03+djtd7MJZ`!S&|ip={JHne%xfzUO?u=lj#A=(>*wP+eCY0002JJi&en zAN;}n`xM$5)K;f3r8GYeS3n!%BwrC!U@qP+000rIu@kMT$Olq9gVO+jLw!G}G?4r} z764F<@&dcu%!*i@9WMa|g4EV=mNsPTQb_xm(9$bz;DdZ&A@et~*DRah=;^EyNw6q3 z-dZTx(tI%HzV5E2A_~^RCnr8cT=dd2Wx<;?bz5DQF9L7+A^bX#+$^3@1g)SJS=YXD zT--p%(O^(>Wf&I;W7Oh4DE|35{E2ZZZ+IECHamwnVz)`P7rk%X%aTZXDV0#0g&~|Y z=7>H=Qc`PoO3qqdUJj}8?h{+pt5$Sspn!%PTupF5Wa$KC}PmT^Z zQSR^s3upZ+3Qfw6d4n8vF&QbNP4y+$8viD6bH$7JG3xb2x`>Pn7VL(H*+x5&zyqZC z*MSBmhXVTVaG5xI)iMPIjSdWcU!)TgK~Gsl!hHAst?NY!`9(zWz2*#BRh%kQ7xejI zz8a5bTbuH`b!Y%xJUEP_*H02$480SA_KP%3NNr8;21%0k8wO@WF*FSa<_>shvDF{wmkl|V1&4K(NT4c*6jAuD?6)93Ag! z+@bTeAgF()sUxKIGxa<;zxJQ$px)SFw?WtO(C%V+%Zyp`@}`6$JAmI<)lPU|#|M&U zHUhhr>W_rxR0wlc-U{qe(mlqDk`L;A%`$J!W*7j;$kZ_X74L2O`OBT_6Wf61^Wf{Oq!wEF!W)zWNaW;i0Mu~X$7BmjISoM;oSKE#GPcF5+rew5 z7qar=5UshkbhK7jthG1Vs>PHn_e^~{Oq!#49JWD?tz~m@Z$mM15o_0y>_Y->7NFL@U+LFt+AGlYyaTq@&5Pmr=v z+Maz7M%{Kqv9h}$&xzh*T$nCBx1zjN+7|XooTQkh%204^ci2QGgz@+!90N5jJN7Mk z2chMfcZS|V&Rijzd|#60?-54}?>>LjJx!~)wFZ7P{nT?TIyc`iEIdDs>;09K{7HlG?pA0ES<{D!NzPZj(&G~@i;e4{AQ=BuX26EN=7P! zjacmU)8J?y#Q3-Qf;pSrb@R3-%}uYDG|rct9Z8ZV)(zM+QF_KBAq5_GU)dlL`&Q)1 z5p2={x+u|;D3LH+M_@jmux8^#vrnC{u`N=OFI*RHlOW|vh|%}*YVgiio;pE$W=?!j znu>X-(HIWt`e2Z+Qt2zV?L8{*YDV5{yu9WsfZ81$i2rXC)Rre6{G*)#UhY2N JHrJ@T{{zDJ###UX literal 0 HcmV?d00001 diff --git a/tests/TestFiles/Cairo/Media/ImageBrush/github_icon_small.png b/tests/TestFiles/Cairo/Media/ImageBrush/github_icon_small.png new file mode 100644 index 0000000000000000000000000000000000000000..5799bdfdce9e4bd1a897b946186a043369d5a1e0 GIT binary patch literal 928 zcmV;R17G}!P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02y>eSaefwW^{L9 za%BK;VQFr3E^cLXAT%y8E-^MlX|MGF00R(7L_t(oN6l8hYZO5gp2A;&Ca}eyKG0H5>*axsg`+LB{;NgnD*kH@Z*(cv$-FK^5DMu zP!E!RMh*ceZ5l$VSJs^GQOZLYMw23lU!rBh;4)gO2a1?0>7ykN+iY`MMlM>JbuDUc98u;X2)h$t+7Y-P-KNY%u;!^-n05r=tH+eN5K8q3 z(~cly@`5xMK)4ytG3^LK#t$iT5rnJw0Mm{Dt0K)sQ0Kz51Jq^mnKBkisXk%)f8YP2 zm?jsU_%0>>4?^ADVU6w_DQ462~(T)7O-gCZx93{xp`(tVu$s-VM_Y%hG4*7G9 zZr@=8S~I;OP(M&&RjIC++CYZ|P=!)$wN7FjGm9-FN;%j*9g7k>+YV3Ly3+-n%lMlu zOtrcW#*s%)lY%?jLxX9D|EysP_zrxb~s<_1ia!#WzA|^2@!_# zd?sFi!dhyKd6<;z^buArm-muE+sJi~FavdFTcueO8$w0OQ&bn+427Fa;Ix~=WV3k) z8p$Hmz%!_U6*$LLl7U(V&r|M2i_k3(V)#x5V}Ai{Q!>aK4CsRZ0000xfzUO?u=lj#A=(>*wP+eCY0002JJi&en zAN;}n`xM$5)K;f3r8GYeS3n!%BwrC!U@qP+000rIu@kMT$Olq9gVO+jLw!G}G?4r} z764F<@&dcu%!*i@9WMa|g4EV=mNsPTQb_xm(9$bz;DdZ&A@et~*DRah=;^EyNw6q3 z-dZTx(tI%HzV5E2A_~^RCnr8cT=dd2Wx<;?bz5DQF9L7+A^bX#+$^3@1g)SJS=YXD zT--p%(O^(>Wf&I;W7Oh4DE|35{E2ZZZ+IECHamwnVz)`P7rk%X%aTZXDV0#0g&~|Y z=7>H=Qc`PoO3qqdUJj}8?h{+pt5$Sspn!%PTupF5Wa$KC}PmT^Z zQSR^s3upZ+3Qfw6d4n8vF&QbNP4y+$8viD6bH$7JG3xb2x`>Pn7VL(H*+x5&zyqZC z*MSBmhXVTVaG5xI)iMPIjSdWcU!)TgK~Gsl!hHAst?NY!`9(zWz2*#BRh%kQ7xejI zz8a5bTbuH`b!Y%xJUEP_*H02$480SA_KP%3NNr8;21%0k8wO@WF*FSa<_>shvDF{wmkl|V1&4K(NT4c*6jAuD?6)93Ag! z+@bTeAgF()sUxKIGxa<;zxJQ$px)SFw?WtO(C%V+%Zyp`@}`6$JAmI<)lPU|#|M&U zHUhhr>W_rxR0wlc-U{qe(mlqDk`L;A%`$J!W*7j;$kZ_X74L2O`OBT_6Wf61^Wf{Oq!wEF!W)zWNaW;i0Mu~X$7BmjISoM;oSKE#GPcF5+rew5 z7qar=5UshkbhK7jthG1Vs>PHn_e^~{Oq!#49JWD?tz~m@Z$mM15o_0y>_Y->7NFL@U+LFt+AGlYyaTq@&5Pmr=v z+Maz7M%{Kqv9h}$&xzh*T$nCBx1zjN+7|XooTQkh%204^ci2QGgz@+!90N5jJN7Mk z2chMfcZS|V&Rijzd|#60?-54}?>>LjJx!~)wFZ7P{nT?TIyc`iEIdDs>;09K{7HlG?pA0ES<{D!NzPZj(&G~@i;e4{AQ=BuX26EN=7P! zjacmU)8J?y#Q3-Qf;pSrb@R3-%}uYDG|rct9Z8ZV)(zM+QF_KBAq5_GU)dlL`&Q)1 z5p2={x+u|;D3LH+M_@jmux8^#vrnC{u`N=OFI*RHlOW|vh|%}*YVgiio;pE$W=?!j znu>X-(HIWt`e2Z+Qt2zV?L8{*YDV5{yu9WsfZ81$i2rXC)Rre6{G*)#UhY2N JHrJ@T{{zDJ###UX literal 0 HcmV?d00001 diff --git a/tests/TestFiles/Direct2D1/Media/ImageBrush/github_icon_small.png b/tests/TestFiles/Direct2D1/Media/ImageBrush/github_icon_small.png new file mode 100644 index 0000000000000000000000000000000000000000..5799bdfdce9e4bd1a897b946186a043369d5a1e0 GIT binary patch literal 928 zcmV;R17G}!P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02y>eSaefwW^{L9 za%BK;VQFr3E^cLXAT%y8E-^MlX|MGF00R(7L_t(oN6l8hYZO5gp2A;&Ca}eyKG0H5>*axsg`+LB{;NgnD*kH@Z*(cv$-FK^5DMu zP!E!RMh*ceZ5l$VSJs^GQOZLYMw23lU!rBh;4)gO2a1?0>7ykN+iY`MMlM>JbuDUc98u;X2)h$t+7Y-P-KNY%u;!^-n05r=tH+eN5K8q3 z(~cly@`5xMK)4ytG3^LK#t$iT5rnJw0Mm{Dt0K)sQ0Kz51Jq^mnKBkisXk%)f8YP2 zm?jsU_%0>>4?^ADVU6w_DQ462~(T)7O-gCZx93{xp`(tVu$s-VM_Y%hG4*7G9 zZr@=8S~I;OP(M&&RjIC++CYZ|P=!)$wN7FjGm9-FN;%j*9g7k>+YV3Ly3+-n%lMlu zOtrcW#*s%)lY%?jLxX9D|EysP_zrxb~s<_1ia!#WzA|^2@!_# zd?sFi!dhyKd6<;z^buArm-muE+sJi~FavdFTcueO8$w0OQ&bn+427Fa;Ix~=WV3k) z8p$Hmz%!_U6*$LLl7U(V&r|M2i_k3(V)#x5V}Ai{Q!>aK4CsRZ0000xfzUO?u=lj#A=(>*wP+eCY0002JJi&en zAN;}n`xM$5)K;f3r8GYeS3n!%BwrC!U@qP+000rIu@kMT$Olq9gVO+jLw!G}G?4r} z764F<@&dcu%!*i@9WMa|g4EV=mNsPTQb_xm(9$bz;DdZ&A@et~*DRah=;^EyNw6q3 z-dZTx(tI%HzV5E2A_~^RCnr8cT=dd2Wx<;?bz5DQF9L7+A^bX#+$^3@1g)SJS=YXD zT--p%(O^(>Wf&I;W7Oh4DE|35{E2ZZZ+IECHamwnVz)`P7rk%X%aTZXDV0#0g&~|Y z=7>H=Qc`PoO3qqdUJj}8?h{+pt5$Sspn!%PTupF5Wa$KC}PmT^Z zQSR^s3upZ+3Qfw6d4n8vF&QbNP4y+$8viD6bH$7JG3xb2x`>Pn7VL(H*+x5&zyqZC z*MSBmhXVTVaG5xI)iMPIjSdWcU!)TgK~Gsl!hHAst?NY!`9(zWz2*#BRh%kQ7xejI zz8a5bTbuH`b!Y%xJUEP_*H02$480SA_KP%3NNr8;21%0k8wO@WF*FSa<_>shvDF{wmkl|V1&4K(NT4c*6jAuD?6)93Ag! z+@bTeAgF()sUxKIGxa<;zxJQ$px)SFw?WtO(C%V+%Zyp`@}`6$JAmI<)lPU|#|M&U zHUhhr>W_rxR0wlc-U{qe(mlqDk`L;A%`$J!W*7j;$kZ_X74L2O`OBT_6Wf61^Wf{Oq!wEF!W)zWNaW;i0Mu~X$7BmjISoM;oSKE#GPcF5+rew5 z7qar=5UshkbhK7jthG1Vs>PHn_e^~{Oq!#49JWD?tz~m@Z$mM15o_0y>_Y->7NFL@U+LFt+AGlYyaTq@&5Pmr=v z+Maz7M%{Kqv9h}$&xzh*T$nCBx1zjN+7|XooTQkh%204^ci2QGgz@+!90N5jJN7Mk z2chMfcZS|V&Rijzd|#60?-54}?>>LjJx!~)wFZ7P{nT?TIyc`iEIdDs>;09K{7HlG?pA0ES<{D!NzPZj(&G~@i;e4{AQ=BuX26EN=7P! zjacmU)8J?y#Q3-Qf;pSrb@R3-%}uYDG|rct9Z8ZV)(zM+QF_KBAq5_GU)dlL`&Q)1 z5p2={x+u|;D3LH+M_@jmux8^#vrnC{u`N=OFI*RHlOW|vh|%}*YVgiio;pE$W=?!j znu>X-(HIWt`e2Z+Qt2zV?L8{*YDV5{yu9WsfZ81$i2rXC)Rre6{G*)#UhY2N JHrJ@T{{zDJ###UX literal 0 HcmV?d00001 diff --git a/tests/TestFiles/Skia/Media/ImageBrush/github_icon_small.png b/tests/TestFiles/Skia/Media/ImageBrush/github_icon_small.png new file mode 100644 index 0000000000000000000000000000000000000000..5799bdfdce9e4bd1a897b946186a043369d5a1e0 GIT binary patch literal 928 zcmV;R17G}!P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02y>eSaefwW^{L9 za%BK;VQFr3E^cLXAT%y8E-^MlX|MGF00R(7L_t(oN6l8hYZO5gp2A;&Ca}eyKG0H5>*axsg`+LB{;NgnD*kH@Z*(cv$-FK^5DMu zP!E!RMh*ceZ5l$VSJs^GQOZLYMw23lU!rBh;4)gO2a1?0>7ykN+iY`MMlM>JbuDUc98u;X2)h$t+7Y-P-KNY%u;!^-n05r=tH+eN5K8q3 z(~cly@`5xMK)4ytG3^LK#t$iT5rnJw0Mm{Dt0K)sQ0Kz51Jq^mnKBkisXk%)f8YP2 zm?jsU_%0>>4?^ADVU6w_DQ462~(T)7O-gCZx93{xp`(tVu$s-VM_Y%hG4*7G9 zZr@=8S~I;OP(M&&RjIC++CYZ|P=!)$wN7FjGm9-FN;%j*9g7k>+YV3Ly3+-n%lMlu zOtrcW#*s%)lY%?jLxX9D|EysP_zrxb~s<_1ia!#WzA|^2@!_# zd?sFi!dhyKd6<;z^buArm-muE+sJi~FavdFTcueO8$w0OQ&bn+427Fa;Ix~=WV3k) z8p$Hmz%!_U6*$LLl7U(V&r|M2i_k3(V)#x5V}Ai{Q!>aK4CsRZ0000 Date: Wed, 12 Jul 2017 12:40:14 +0300 Subject: [PATCH 3/6] Fixed include condition for linux skia binaries --- build/SkiaSharp.props | 2 +- .../Avalonia.Skia.Desktop.NetStandard.csproj | 3 ++- src/Skia/Avalonia.Skia.Desktop/Avalonia.Skia.Desktop.csproj | 5 ++++- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/build/SkiaSharp.props b/build/SkiaSharp.props index 77407f9996..04e8a3ad4f 100644 --- a/build/SkiaSharp.props +++ b/build/SkiaSharp.props @@ -1,6 +1,6 @@  - + diff --git a/src/Skia/Avalonia.Skia.Desktop.NetStandard/Avalonia.Skia.Desktop.NetStandard.csproj b/src/Skia/Avalonia.Skia.Desktop.NetStandard/Avalonia.Skia.Desktop.NetStandard.csproj index ca9f6c76e1..311abce88f 100644 --- a/src/Skia/Avalonia.Skia.Desktop.NetStandard/Avalonia.Skia.Desktop.NetStandard.csproj +++ b/src/Skia/Avalonia.Skia.Desktop.NetStandard/Avalonia.Skia.Desktop.NetStandard.csproj @@ -5,6 +5,7 @@ false Avalonia.Skia.Desktop Avalonia.Skia.Desktop + true true @@ -42,4 +43,4 @@ - \ No newline at end of file + diff --git a/src/Skia/Avalonia.Skia.Desktop/Avalonia.Skia.Desktop.csproj b/src/Skia/Avalonia.Skia.Desktop/Avalonia.Skia.Desktop.csproj index b8dd79eca9..e2a2ac6146 100644 --- a/src/Skia/Avalonia.Skia.Desktop/Avalonia.Skia.Desktop.csproj +++ b/src/Skia/Avalonia.Skia.Desktop/Avalonia.Skia.Desktop.csproj @@ -54,6 +54,9 @@ prompt MinimumRecommendedRules.ruleset + + true + @@ -107,4 +110,4 @@ - \ No newline at end of file + From 644708bb7c932fc1146528d94426ab58f71ce430 Mon Sep 17 00:00:00 2001 From: Nikita Tsukanov Date: Wed, 12 Jul 2017 13:03:01 +0300 Subject: [PATCH 4/6] Implemented mouse leave event for GTK3 backend --- src/Gtk/Avalonia.Gtk3/Interop/Native.cs | 18 ++++++++++++++++++ src/Gtk/Avalonia.Gtk3/WindowBaseImpl.cs | 13 +++++++++++++ 2 files changed, 31 insertions(+) diff --git a/src/Gtk/Avalonia.Gtk3/Interop/Native.cs b/src/Gtk/Avalonia.Gtk3/Interop/Native.cs index 9f38861b07..fb1a9955e3 100644 --- a/src/Gtk/Avalonia.Gtk3/Interop/Native.cs +++ b/src/Gtk/Avalonia.Gtk3/Interop/Native.cs @@ -500,6 +500,24 @@ namespace Avalonia.Gtk3.Interop public gdouble delta_y; } + [StructLayout(LayoutKind.Sequential)] + unsafe struct GdkEventCrossing + { + public GdkEventType type; + public IntPtr window; + public gint8 send_event; + public IntPtr subwindow; + public guint32 time; + public gdouble x; + public gdouble y; + public gdouble x_root; + public gdouble y_root; + public int mode; + public int detail; + public bool focus; + public GdkModifierType state; + }; + [StructLayout(LayoutKind.Sequential)] unsafe struct GdkEventWindowState { diff --git a/src/Gtk/Avalonia.Gtk3/WindowBaseImpl.cs b/src/Gtk/Avalonia.Gtk3/WindowBaseImpl.cs index 00130346e8..39304940d2 100644 --- a/src/Gtk/Avalonia.Gtk3/WindowBaseImpl.cs +++ b/src/Gtk/Avalonia.Gtk3/WindowBaseImpl.cs @@ -45,6 +45,7 @@ namespace Avalonia.Gtk3 ConnectEvent("window-state-event", OnStateChanged); ConnectEvent("key-press-event", OnKeyEvent); ConnectEvent("key-release-event", OnKeyEvent); + ConnectEvent("leave-notify-event", OnLeaveNotifyEvent); Connect("destroy", OnDestroy); Native.GtkWidgetRealize(gtkWidget); _lastSize = ClientSize; @@ -194,6 +195,18 @@ namespace Avalonia.Gtk3 return true; } + private unsafe bool OnLeaveNotifyEvent(IntPtr w, IntPtr pev, IntPtr userData) + { + var evnt = (GdkEventCrossing*) pev; + var position = new Point(evnt->x, evnt->y); + Input(new RawMouseEventArgs(Gtk3Platform.Mouse, + evnt->time, + _inputRoot, + RawMouseEventType.Move, + position, GetModifierKeys(evnt->state))); + return true; + } + private unsafe bool OnCommit(IntPtr gtkwidget, IntPtr utf8string, IntPtr userdata) { Input(new RawTextInputEventArgs(Gtk3Platform.Keyboard, _lastKbdEvent, Utf8Buffer.StringFromPtr(utf8string))); From 33fd46c7890b8941f991a15cd5e048fbd727d899 Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Thu, 13 Jul 2017 00:37:37 +0200 Subject: [PATCH 5/6] Quick and dirty hack to fix #1054 This fixes the problem decribed in #1054 but I think there's something wrong with the way we handle top level layout anyway and it's going to need refactoring soon. (cherry picked from commit 7337a90fc1eb92467c8f3052b6108dbad57d1d1b) --- src/Avalonia.Controls/WindowBase.cs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/Avalonia.Controls/WindowBase.cs b/src/Avalonia.Controls/WindowBase.cs index 1f484fd6cb..fbdf64b14a 100644 --- a/src/Avalonia.Controls/WindowBase.cs +++ b/src/Avalonia.Controls/WindowBase.cs @@ -29,6 +29,7 @@ namespace Avalonia.Controls public static readonly DirectProperty IsActiveProperty = AvaloniaProperty.RegisterDirect(nameof(IsActive), o => o.IsActive); + private bool _hasExecutedInitialLayoutPass; private bool _isActive; private bool _ignoreVisibilityChange; @@ -136,7 +137,13 @@ namespace Avalonia.Controls { EnsureInitialized(); IsVisible = true; - LayoutManager.Instance.ExecuteInitialLayoutPass(this); + + if (!_hasExecutedInitialLayoutPass) + { + LayoutManager.Instance.ExecuteInitialLayoutPass(this); + _hasExecutedInitialLayoutPass = true; + } + PlatformImpl?.Show(); } finally From 71dff48a7a1f0bf88ae8ab4592c3c977e550190d Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Thu, 13 Jul 2017 15:11:48 +0100 Subject: [PATCH 6/6] add fix for null reference exception when arranging. added comments explaining the conditions that the bug occurs in. (cherry picked from commit fa1f5bc8f9f5e3b91b6a97801910d79e6af41cc5) --- src/Avalonia.Layout/LayoutManager.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Avalonia.Layout/LayoutManager.cs b/src/Avalonia.Layout/LayoutManager.cs index 965ab3eee6..1ce55e2afa 100644 --- a/src/Avalonia.Layout/LayoutManager.cs +++ b/src/Avalonia.Layout/LayoutManager.cs @@ -190,8 +190,10 @@ namespace Avalonia.Layout { root.Arrange(new Rect(control.DesiredSize)); } - else + else if(control.PreviousArrange != null) { + // Has been observed that PreviousArrange sometimes is null, probably a bug somewhere else. + // Condition observed: control.VisualParent is Scrollbar, control is Border. control.Arrange(control.PreviousArrange.Value); } }