diff options
| author | jpbruyere <jp.bruyere@hotmail.com> | 2016-02-02 23:38:54 +0100 |
|---|---|---|
| committer | jpbruyere <jp.bruyere@hotmail.com> | 2016-02-02 23:38:54 +0100 |
| commit | 67bd044b6e5fe52b8b76cc5d7eb8fd0ce9dc3ee9 (patch) | |
| tree | b94ae5e6ef363eab5f0888b459789ecea9ac5d5d | |
| parent | 2b087282dd73152d21140ea7312a90e046c84f61 (diff) | |
Gradient, Bitmap and Svg Filling
38 files changed, 545 insertions, 131 deletions
diff --git a/Crow.csproj b/Crow.csproj index 498e7feb..3f655d17 100644 --- a/Crow.csproj +++ b/Crow.csproj @@ -130,7 +130,9 @@ <Compile Include="src\GraphicObjects\GroupBox.cs" /> <Compile Include="src\GraphicObjects\ScrollBar.cs" /> <Compile Include="src\BubblingMouseButtonEventArgs.cs" /> - <Compile Include="src\Cairo\IFill.cs" /> + <Compile Include="src\SolidColor.cs" /> + <Compile Include="src\Gradient.cs" /> + <Compile Include="src\Fill\Fill.cs" /> </ItemGroup> <ItemGroup> <Reference Include="System" /> @@ -164,6 +166,7 @@ <Folder Include="Images\Icons\" /> <Folder Include="src\CompilerServices\" /> <Folder Include="src\OpenGL\" /> + <Folder Include="src\Fill\" /> </ItemGroup> <ItemGroup> <EmbeddedResource Include="Images\Icons\updown.svg" /> diff --git a/Crow.userprefs b/Crow.userprefs index f3fbc68e..cdb46ef8 100644 --- a/Crow.userprefs +++ b/Crow.userprefs @@ -1,15 +1,16 @@ <Properties GitUserInfo="UsingGIT" StartupItem="Tests/Tests.csproj"> <MonoDevelop.Ide.Workspace ActiveConfiguration="Debug|Linux_x86" /> - <MonoDevelop.Ide.Workbench ActiveDocument="src/Colors.cs"> + <MonoDevelop.Ide.Workbench ActiveDocument="Tests/Interfaces/testWindow.goml"> <Files> - <File FileName="src/Colors.cs" Line="13" Column="32" /> + <File FileName="Tests/Interfaces/testWindow.goml" Line="5" Column="35" /> + <File FileName="src/GraphicObjects/Slider.cs" Line="1" Column="1" /> + <File FileName="src/GraphicObjects/GraphicObject.cs" Line="1" Column="1" /> + <File FileName="Tests/GOLIBTests.cs" Line="1" Column="1" /> + <File FileName="src/Fill/Fill.cs" Line="1" Column="1" /> </Files> </MonoDevelop.Ide.Workbench> <MonoDevelop.Ide.DebuggingService.Breakpoints> - <BreakpointStore> - <Breakpoint file="/mnt/data2/devel/GOLib/src/GraphicObjects/HorizontalStack.cs" line="26" column="1" /> - <Breakpoint file="/mnt/data2/devel/GOLib/MonoDevelop.GOLib/src/GOLibNodeExtension.cs" line="99" column="1" /> - </BreakpointStore> + <BreakpointStore /> </MonoDevelop.Ide.DebuggingService.Breakpoints> <MonoDevelop.Ide.DebuggingService.PinnedWatches> <Watch file="../../src/monodevelop/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui/Workbench.cs" line="1399" offsetX="14" offsetY="23383" expression="ex" liveUpdate="False" /> @@ -19,7 +20,6 @@ <Watch file="src/XCursor.cs" line="51" offsetX="812" offsetY="409" expression="pos" liveUpdate="False" /> <Watch file="src/OpenTKGameWindow.cs" line="234" offsetX="746" offsetY="1618" expression="lqi" liveUpdate="False" /> <Watch file="src/GraphicObjects/GenericStack.cs" line="171" offsetX="447" offsetY="1717" expression="layoutType" liveUpdate="False" /> - <Watch file="src/GraphicObjects/GraphicObject.cs" line="925" offsetX="695" offsetY="6851" expression="d.Method.Name" liveUpdate="False" /> <Watch file="src/GraphicObjects/Combobox.cs" line="97" offsetX="750" offsetY="1303" expression="value" liveUpdate="False" /> <Watch file="src/Interface.cs" line="217" offsetX="623" offsetY="3315" expression="es" liveUpdate="False" /> <Watch file="src/Interface.cs" line="217" offsetX="623" offsetY="3339" expression="es.MemberName" liveUpdate="False" /> diff --git a/Templates/ArrowButTemplate.crow b/Templates/ArrowButTemplate.crow index 94f717d7..099249c3 100755 --- a/Templates/ArrowButTemplate.crow +++ b/Templates/ArrowButTemplate.crow @@ -4,11 +4,11 @@ <Label Text="{../../Caption}" Height="80" Width="200"/> </HorizontalStack>--> <Border Name="Content" - Background="Gray" Foreground="DarkGray" + Background="vgradient|0:White|0,2:Gray|0,9:Gray|1:Black" Foreground="DarkGray" Height="{../TemplatedHeight}" Width="{../TemplatedWidth}" MouseEnter="{Foreground=White}" MouseLeave="{Foreground=DarkGray}" - MouseDown="{Background=LightGray}" - MouseUp="{Background=Gray}" + MouseDown="{Background=vgradient|0:Black|0,1:Gray|0,9:Gray|1:White}" + MouseUp="{Background=vgradient|0:White|0,2:Gray|0,9:Gray|1:Black}" > </Border>
\ No newline at end of file diff --git a/Templates/Button.crow b/Templates/Button.crow index d95244d5..9e6e541c 100755 --- a/Templates/Button.crow +++ b/Templates/Button.crow @@ -3,12 +3,17 @@ <Image Margin="2" Width="14" Height="14" Path="{../../Image}" SvgSub="{../../SvgSub}"/> <Label Text="{../../Caption}" Height="80" Width="200"/> </HorizontalStack>--> -<Border Fit="True" Background="Gray" MinimumSize="50;20" Foreground="Gray" CornerRadius="3" - MouseEnter="{Foreground=White;caption.Foreground=White}" - MouseLeave="{Foreground=Gray;caption.Foreground=Black}" - MouseDown="{Background=LightGray}" - MouseUp="{Background=Gray}" +<Border Fit="True" Background="Gray" MinimumSize="50;20" + Foreground="Transparent" CornerRadius="3" BorderWidth="1" + MouseEnter="{Foreground=vgradient|0:White|0,2:Gray|0,9:Gray|1:Black;caption.Foreground=White}" + MouseLeave="{Foreground=Transparent;caption.Foreground=Black}" + MouseDown="{Foreground=vgradient|0:Black|0,05:Gray|0,85:Gray|1:White}" + MouseUp="{Foreground=vgradient|0:White|0,2:Gray|0,9:Gray|1:Black}" > +<!-- + MouseDown="{Background=vgradient|0:Black|0,1:Gray|0,9:Gray|1:White}" + MouseUp="{Background=vgradient|0:White|0,1:Gray|0,9:Gray|1:Black}" +--> <!-- <Image Height="0" Width="0" Margin="0" Path="{../../Image}" SvgSub="{../../SvgSub}"/>--> <Label Name="caption" Margin="5" Foreground="Black" Text="{../../Caption}"/> </Border>
\ No newline at end of file diff --git a/Templates/GroupBox.goml b/Templates/GroupBox.goml index 4f6035aa..b92ee8b2 100755 --- a/Templates/GroupBox.goml +++ b/Templates/GroupBox.goml @@ -1,6 +1,6 @@ <?xml version="1.0"?> <Group Height="{../TemplatedHeight}" Width="{../TemplatedWidth}"> - <Border CornerRadius="5" BorderWidth="1" Margin="6" + <Border CornerRadius="5" BorderWidth="1" Margin="6" Foreground="{../../Foreground}" Height="{../../TemplatedHeight}" Width="{../../TemplatedWidth}"> <Container Name="Content" Margin="10" Height="{../../../TemplatedHeight}" Width="{../../../TemplatedWidth}"/> diff --git a/Templates/ScrollBar.goml b/Templates/ScrollBar.goml index b279d09f..4734eea9 100755 --- a/Templates/ScrollBar.goml +++ b/Templates/ScrollBar.goml @@ -5,7 +5,8 @@ Template="#Crow.Templates.ArrowButTemplate.crow"> <Image Margin="1" Path="#Crow.Images.Icons.updown.svg" SvgSub="up"/> </Button> - <Slider Name="Slider" Value="{../../../Scroll}" Maximum="{../../../MaximumScroll}" + <Slider Name="Slider" Value="{../../../Scroll}" Maximum="{../../../MaximumScroll}" + Background="hgradient|0:Black|0,1:Gray|0,9:Gray|1:LightGray" Width="{../../../TemplatedWidth}" Height="{../../../TemplatedHeight}" Orientation="{../../../Orientation}" ValueChanged="../../../onSliderValueChange"/> <Button MouseRepeat="true" Width="12" Height="8" MouseClick="../../../onScrollForth" diff --git a/Templates/Window.goml b/Templates/Window.goml index 42af9d90..dd3fec7d 100755 --- a/Templates/Window.goml +++ b/Templates/Window.goml @@ -2,7 +2,8 @@ <Border BorderWidth="1" Foreground="White" CornerRadius="20" Height="{../TemplatedHeight}" Width="{../TemplatedWidth}"> <VerticalStack Height="{../../TemplatedHeight}" Width="{../../TemplatedWidth}"> <Border Name="TitleBar" BorderWidth="1" Foreground="White" Width="{../../../TemplatedWidth}" Height="-1" - Background="0,1;0,5;1,0;0,5"> + Background="vgradient|0:0,1;0,5;1,0;0,5|1:0,0;0,1;0,3;0,9"> +<!-- Background="0,1;0,5;1,0;0,5"--> <HorizontalStack Name="hs" Margin="1" Spacing="1" Width="{../../../../TemplatedWidth}" Height="-1" > <GraphicObject Width="5"/> <Image Margin="1" Width="12" Height="12" Path="{../../../../../Icon}"/> diff --git a/Tests/GOLIBTest_4.cs b/Tests/GOLIBTest_4.cs index 56d020e6..e4a37b48 100644 --- a/Tests/GOLIBTest_4.cs +++ b/Tests/GOLIBTest_4.cs @@ -96,7 +96,7 @@ namespace test //LoadInterface("golibtests/test4.xml", out c2); //c2.HorizontalAlignment = HorizontalAlignment.Left; //c2.VerticalAlignment = VerticalAlignment.Top; - c.Background.AdjustAlpha (0.5); + //((Color)c.Background).AdjustAlpha (0.5); // labMousePos = c.FindByName ("labMouse") as Label; // //pb = c.FindByName("pbBar") as ProgressBar; // pb2 = c.FindByName("pbBar2") as ProgressBar; diff --git a/Tests/GOLIBTest_5.cs b/Tests/GOLIBTest_5.cs index 873a21ea..664483be 100644 --- a/Tests/GOLIBTest_5.cs +++ b/Tests/GOLIBTest_5.cs @@ -44,7 +44,7 @@ namespace test l.Text = cpt.ToString (); } foreach (GraphicObject o in gl) { - Color a = o.Background; + Color a = (Color)o.Background; if (a.A > 1) a.A = 0; else diff --git a/Tests/GOLIBTests.cs b/Tests/GOLIBTests.cs index a1c8f413..3a198fcb 100644 --- a/Tests/GOLIBTests.cs +++ b/Tests/GOLIBTests.cs @@ -36,11 +36,15 @@ namespace test int frameCpt = 0; int idx = 0; string[] testFiles = { - "testTextBox.crow", - "testSpinner.goml", - "testImage.crow", + "testBorder.goml", + "testGroupBox.goml", + "test2WayBinding.crow", "testButton.crow", + "0.crow", + "testSpinner.goml", "fps.goml", + "testTextBox.crow", + "testImage.crow", "test4.goml", "testScrollbar.goml", "2.crow", @@ -49,7 +53,6 @@ namespace test // "testCombobox.goml", "testWindow3.goml", "testWindow.goml", - "testGroupBox.goml", "testExpandable.goml", "testCheckbox.goml", "testPopper.goml", @@ -58,7 +61,6 @@ namespace test // "testSpinner.goml", "testRadioButton2.goml", "testContainer.goml", - "testBorder.goml", "testRadioButton.goml", "testMsgBox.goml", "testGrid.goml", diff --git a/Tests/Interfaces/0.crow b/Tests/Interfaces/0.crow new file mode 100755 index 00000000..aa72d58a --- /dev/null +++ b/Tests/Interfaces/0.crow @@ -0,0 +1,8 @@ +<?xml version="1.0"?> +<Border BorderWidth="2" Width="200" Height="200" Foreground="Gray" Margin="10" + Background="Green" + MouseEnter="{Background=White;Foreground=White}" + MouseLeave="{Background=Green;Foreground=Gray}" + > + <GraphicObject Width="100" Height="100" Background="Red" Margin="10"/> +</Border>
\ No newline at end of file diff --git a/Tests/Interfaces/test2WayBinding.crow b/Tests/Interfaces/test2WayBinding.crow new file mode 100755 index 00000000..f4f03be7 --- /dev/null +++ b/Tests/Interfaces/test2WayBinding.crow @@ -0,0 +1,13 @@ +<?xml version="1.0"?> +<VerticalStack Fit="True"> + <TextBox Margin="2" Name="tb1" Width="300" Height="50" Font="droid,16" + Text="{../tb2.Text}" + CurColumn="{../tb2.CurrentLine}" + CurLine="{../tb2.CurrentLine}" + /> + <TextBox Margin="2" Name="tb2" Width="300" Height="50" Font="droid,16" + Text="{../tb1.Text}" + CurColumn="{../tb1.CurrentLine}" + CurLine="{../tb1.CurrentLine}" + /> +</VerticalStack>
\ No newline at end of file diff --git a/Tests/Interfaces/testBorder.goml b/Tests/Interfaces/testBorder.goml index 02f16257..cae3c33d 100755 --- a/Tests/Interfaces/testBorder.goml +++ b/Tests/Interfaces/testBorder.goml @@ -1,4 +1,5 @@ <?xml version="1.0"?> -<Border BorderWidth="5" Width="200" Height="200" CornerRadius="20" Margin="0" Background="Mantis"> - <GraphicObject CornerRadius="0" Background="CornflowerBlue" Height="100" Width="100"/> +<Border BorderWidth="2" Width="200" Height="200" CornerRadius="2" Margin="0" + Background="vgradient|0,65:Mantis|1:Transparent"> + <GraphicObject CornerRadius="20" Background="#Tests.image.crow0.svg" Margin="0" Height="100" Width="120" /> </Border> diff --git a/Tests/Interfaces/testButton.crow b/Tests/Interfaces/testButton.crow index 5e4c5a5c..fd52bce4 100755 --- a/Tests/Interfaces/testButton.crow +++ b/Tests/Interfaces/testButton.crow @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<VerticalStack Fit="true"> +<VerticalStack Fit="true" Background="vgradient|0:DimGray|1:Black"> <HorizontalStack Fit="True"> <Button Caption="but" MouseClick="onButClick"/> <Button MouseClick="onButClick"/> diff --git a/Tests/Interfaces/testGroupBox.goml b/Tests/Interfaces/testGroupBox.goml index c12c597e..6b14f829 100755 --- a/Tests/Interfaces/testGroupBox.goml +++ b/Tests/Interfaces/testGroupBox.goml @@ -1,4 +1,7 @@ <?xml version="1.0"?> -<GroupBox Width="-1" Height="-1" Background="Red"> -<Label/> -</GroupBox> +<Container Background="vgradient|0:DarkGray|1:DimGray"> + <GroupBox Width="200" Height="150" Background="vgradient|0:SteelBlue|1:Transparent" + Foreground="ogradient|0:White|1:Black"> + <!-- <Label/>--> + </GroupBox> +</Container> diff --git a/Tests/Interfaces/testWindow.goml b/Tests/Interfaces/testWindow.goml index 4b215be4..7fa41b43 100755 --- a/Tests/Interfaces/testWindow.goml +++ b/Tests/Interfaces/testWindow.goml @@ -2,7 +2,7 @@ <Window Left="10" Top="10" Title="Test window" Width="250" Height="550" > <VerticalStack Name="contentVSStack" Margin="10" Spacing="10" Background="0,4;0,4;0,4;0,4"> - <Slider Name="slider" Height="10" Width="0"/> + <Slider Name="slider" Height="12" Width="0" CornerRadius="3"/> <GroupBox Caption="test" Height="-1" Width="-1" Margin="5"> <VerticalStack Height="-1" Width="0" > <RadioButton Caption="Radio 1" Background="Red" /> @@ -10,7 +10,8 @@ <RadioButton Caption="Radio 3" /> </VerticalStack> </GroupBox> - <HorizontalStack Width="0" Height="-1" Margin="10" Background="BlueCrayola"> + <HorizontalStack Width="0" Height="-1" Margin="10" CornerRadius="5" + Background="vgradient|0:White|0,1:SteelBlue|0,9:SteelBlue|1:Transparent"> <CheckBox Height="-1" Width="80"/> <GraphicObject Width="0"/> <CheckBox Height="-1" Width="80" IsChecked="true"/> @@ -21,23 +22,28 @@ <VerticalStack Fit="true" Name="vsFps" Spacing="10" > <HorizontalStack Fit="true"> <Label Text="Update:" Width="50" TextAlignment="RightCenter"/> - <Label Name="labUpdate" Text="{update}" Font="droid,12" Background="AoEnglish" Width="50" TextAlignment="Center"/> + <Label Name="labUpdate" Text="{update}" Font="droid,12" Width="50" TextAlignment="Center" + Background="vgradient|0:AoEnglish|1:Black"/> </HorizontalStack> <HorizontalStack Fit="true"> <Label Text="Drawing:" Width="50" TextAlignment="RightCenter"/> - <Label Name="labDrawing" Text="{drawing}" Font="droid,12" Background="AoEnglish" Width="50" TextAlignment="Center"/> + <Label Name="labDrawing" Text="{drawing}" Font="droid,12" Width="50" TextAlignment="Center" + Background="vgradient|0:AoEnglish|1:Black"/> </HorizontalStack> <HorizontalStack Fit="true"> <Label Name="captionFps" Text="Fps:" Width="50" TextAlignment="RightCenter"/> - <Label Name="valueFps" Text="{fps}" Font="droid , 12" Width="50" TextAlignment="Center" Background="AoEnglish"/> + <Label Name="valueFps" Text="{fps}" Font="droid , 12" Width="50" TextAlignment="Center" + Background="vgradient|0:AoEnglish|1:Black"/> </HorizontalStack> <HorizontalStack Fit="true"> <Label Text="Min:" Width="50" TextAlignment="RightCenter"/> - <Label Text="{fpsMin}" Font="droid , 12" Width="50" TextAlignment="Center" Background="AoEnglish"/> + <Label Text="{fpsMin}" Font="droid , 12" Width="50" TextAlignment="Center" + Background="vgradient|0:AoEnglish|1:Black"/> </HorizontalStack> <HorizontalStack Fit="true"> <Label Text="Max:" Width="50" TextAlignment="RightCenter"/> - <Label Text="{fpsMax}" Font="droid , 12" Background="AoEnglish" Width="50" TextAlignment="Center"/> + <Label Text="{fpsMax}" Font="droid , 12" Width="50" TextAlignment="Center" + Background="vgradient|0:AoEnglish|1:Black"/> </HorizontalStack> </VerticalStack> </Container> diff --git a/Tests/Tests.csproj b/Tests/Tests.csproj index a987e902..e0c3f14c 100644 --- a/Tests/Tests.csproj +++ b/Tests/Tests.csproj @@ -45,7 +45,6 @@ <Reference Include="Mono.Cairo" /> </ItemGroup> <ItemGroup> - <Compile Include="GOLIBTest_5.cs" /> <Compile Include="GOLIBTest_4.cs" /> <Compile Include="GOLIBTest_Listbox.cs" /> <Compile Include="GOLIBTest_0.cs" /> @@ -203,6 +202,13 @@ <None Include="Interfaces\testTextBox.crow"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </None> + <None Include="GOLIBTest_5.cs" /> + <None Include="Interfaces\0.crow"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </None> + <None Include="Interfaces\test2WayBinding.crow"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </None> </ItemGroup> <ItemGroup> <Folder Include="Interfaces\" /> @@ -212,6 +218,7 @@ <EmbeddedResource Include="image\tetra.png" /> <EmbeddedResource Include="image\folder0.svg" /> <EmbeddedResource Include="image\folder1.svg" /> + <EmbeddedResource Include="image\crow0.svg" /> </ItemGroup> <ItemGroup> <ProjectReference Include="..\Crow.csproj"> diff --git a/Tests/image/crow0.svg b/Tests/image/crow0.svg new file mode 100644 index 00000000..72ea6af7 --- /dev/null +++ b/Tests/image/crow0.svg @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> +<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" id="svg2" version="1.1" inkscape:version="0.47 r22583" width="749.44373" height="527.6217" sodipodi:docname="Carrion_crow_20090612.png"> + <metadata id="metadata8"> + <rdf:RDF> + <cc:Work rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> + <dc:title/> + </cc:Work> + </rdf:RDF> + </metadata> + <defs id="defs6"> + <inkscape:perspective sodipodi:type="inkscape:persp3d" inkscape:vp_x="0 : 0.5 : 1" inkscape:vp_y="0 : 1000 : 0" inkscape:vp_z="1 : 0.5 : 1" inkscape:persp3d-origin="0.5 : 0.33333333 : 1" id="perspective10"/> + </defs> + <sodipodi:namedview pagecolor="#ffffff" bordercolor="#666666" borderopacity="1" objecttolerance="10" gridtolerance="10" guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-width="640" inkscape:window-height="497" id="namedview4" showgrid="false" inkscape:zoom="0.16076294" inkscape:cx="389.06883" inkscape:cy="338.72079" inkscape:window-x="0" inkscape:window-y="48" inkscape:window-maximized="0" inkscape:current-layer="svg2"/> + <path style="fill:#000000" d="m 531.22503,527.47423 c -0.3438,-0.1375 -0.625,-0.6503 -0.625,-1.1395 0,-0.4893 -0.6661,-1.7278 -1.4803,-2.7523 -0.8141,-1.0244 -1.6107,-2.2366 -1.7702,-2.6937 -0.7166,-2.054 -8.0207,-6.4741 -10.8553,-6.5692 -0.1956,-0.01 -0.6114,0.9443 -0.9238,2.1131 -0.3125,1.1687 -0.7987,2.4062 -1.0805,2.75 -0.998,1.2174 -3.4469,0.6739 -6.5707,-1.4584 -1.6786,-1.1458 -3.3934,-2.0642 -3.8107,-2.0408 -1.5106,0.084 -3.3359,-0.9486 -4.1697,-2.3601 -1.5491,-2.6225 -6.626,-6.0157 -9.0004,-6.0157 -1.6548,0 -5.55,-1.7805 -7.1605,-3.273 -0.9213,-0.8538 -1.9001,-1.227 -3.2184,-1.227 -2.8135,0 -4.2699,-0.7367 -4.8722,-2.4643 -0.2944,-0.8447 -0.8496,-1.5357 -1.2338,-1.5357 -0.3842,0 -1.0806,-0.4222 -1.5475,-0.9381 -0.4669,-0.5159 -1.5859,-1.0576 -2.4866,-1.2038 -3.2233,-0.5231 -13.7505,-6.0742 -14.5694,-7.6827 -0.275,-0.5402 -1.5125,-2.1084 -2.75,-3.4851 -2.7804,-3.0929 -7.8738,-5.4521 -10.8679,-5.0338 -10.4158,1.4551 -10.8147,1.4762 -15.1066,0.7989 -4.9553,-0.782 -9.2432,-0.8634 -16.3605,-0.3103 -4.86008,0.3777 -5.09923,0.3499 -5.40958,-0.6279 -0.1786,-0.5627 0.037,-2.267 0.47885,-3.7873 0.44195,-1.5203 0.6532,-3.0074 0.46945,-3.3047 -0.6555,-1.0606 -4.60415,-0.096 -7.8144,1.9099 -2.4289,1.5173 -3.38635,2.4796 -4.2307,4.2524 -1.0448,2.1934 -2.82495,3.4125 -4.9833,3.4125 -1.36745,0 -0.1685,-6.5777 1.59655,-8.7587 0.44125,-0.5452 0.6598,-0.7101 0.48565,-0.3663 -0.1851,0.3654 5e-4,0.625 0.44725,0.625 0.4735,0 0.6544,-0.2851 0.476,-0.75 -0.1583,-0.4125 -0.039,-0.75 0.2657,-0.75 0.3044,0 0.5535,-0.2983 0.5535,-0.6629 0,-0.8582 2.2202,-2.9502 2.6621,-2.5084 0.1858,0.1859 0.3379,0.043 0.3379,-0.3163 0,-0.8065 2.7978,-3.5479 3.20515,-3.1406 0.16215,0.1622 0.29485,0.019 0.29485,-0.318 0,-0.3371 0.19915,-0.4898 0.44255,-0.3393 0.2434,0.1504 1.08715,0.067 1.875,-0.185 0.78785,-0.2521 2.7262,-0.5492 4.30745,-0.6601 2.2617,-0.1587 2.875,-0.048 2.875,0.5179 0,0.449 0.29565,0.6062 0.7862,0.418 0.43243,-0.166 1.21993,-0.07 1.75003,0.2141 0.6551,0.3506 0.9638,0.3518 0.9638,0 0,-0.8005 2.4388,-0.3982 2.788,0.4598 0.2487,0.6112 0.3996,0.5403 0.7427,-0.3494 0.4423,-1.1465 0.7638,-1.1683 4.8862,-0.3306 0.678,0.1377 1.0415,0.034 0.8677,-0.247 -0.2812,-0.455 1.5422,-1.3647 2.3254,-1.1601 0.1981,0.052 0.5997,-0.3536 0.8926,-0.9009 0.2929,-0.5473 0.9205,-0.995 1.3947,-0.995 0.4742,0 1.1542,-0.4677 1.5112,-1.0393 0.568,-0.9096 0.5273,-1.0711 -0.3261,-1.2943 -0.5964,-0.1559 -1.0945,-0.8515 -1.2823,-1.7906 -0.1689,-0.8445 -0.4542,-1.3884 -0.634,-1.2086 -0.3289,0.3289 -1.3776,-1.162 -1.9679,-2.79767 -0.1748,-0.4843 -0.8371,-1.01085 -1.4718,-1.17015 -0.6348,-0.1593 -1.2758,-0.60685 -1.4246,-0.9945 -0.1487,-0.3877 -0.5588,-0.7134 -0.9112,-0.72385 -0.3523,-0.0105 -1.4271,-1.0229 -2.3883,-2.25 -0.9612,-1.22705 -2.0675,-2.23105 -2.4584,-2.23105 -0.3908,0 -0.5731,-0.1375 -0.405,-0.3056 0.4324,-0.4324 -2.3683,-2.6944 -3.3361,-2.6944 -0.523,0 -0.8028,-0.43565 -0.8028,-1.25 0,-0.6875 -0.2445,-1.25 -0.54333,-1.25 -0.2988,0 -1.94895,-1.3498 -3.66705,-2.9996 -1.7181,-1.6498 -3.3097,-2.83105 -3.5369,-2.625 -0.2272,0.20605 -0.2658,0.11695 -0.0858,-0.198 0.3151,-0.5513 -0.98115,-1.4332 -1.82915,-1.2444 -0.22665,0.0505 -0.28485,-0.1142 -0.1293,-0.3659 0.1556,-0.25175 -0.3339,-0.8581 -1.0878,-1.34745 -0.7539,-0.48935 -1.66475,-1.30145 -2.02405,-1.8047 -0.35935,-0.5032 -0.9781,-0.91495 -1.375,-0.91495 -0.39695,0 -0.72165,-0.19875 -0.72165,-0.44165 0,-0.6423 -11.41075,-9.1628 -13.6492,-10.192 -1.06885,-0.49145 -2.41035,-0.74495 -3.0683,-0.57985 -0.82915,0.2081 -1.4977,-0.0455 -2.29935,-0.87155 -0.6216,-0.6407 -0.94525,-0.84145 -0.71915,-0.44605 0.2261,0.39545 -0.524,-0.0325 -1.6669,-0.95095 -2.0588,-1.6545 -2.9214,-3.08875 -2.38225,-3.9611 0.15365,-0.24865 -0.0504,-0.5786 -0.4533,-0.73325 -0.4628,-0.17755 -0.7094,-0.90125 -0.66945,-1.96455 0.068,-1.80945 -1.7003,-4.89025 -3.551,-6.18655 -0.58185,-0.4075 -0.9273,-0.9521 -0.7678,-1.21025 0.15955,-0.2581 -0.0617,-0.6043 -0.49165,-0.7693 -0.4299,-0.16495 -0.78165,-0.7086 -0.78165,-1.2081 0,-0.49945 -0.5625,-1.5766 -1.25,-2.39365 -1.12955,-1.3424 -1.24905,-1.9122 -1.2402,-5.9134 0.0155,-6.85325 1.50745,-13.94735 5.08565,-24.1778 1.96035,-5.6049 3.4407,-11.38431 4.114,-16.06156 0.2931,-2.03595 0.1741,-2.5001 -0.9982,-3.8933 -1.33805,-1.5902 -4.07105,-3.04515 -5.71995,-3.04515 -0.48765,0 -2.4618,-0.6703 -4.3871,-1.48955 -4.9094,-2.08915 -10.23795,-2.92701 -22.3542,-3.51495 -5.775,-0.28023 -12.5529,-0.84385 -15.06195,-1.2525 -2.50905,-0.40984 -5.92565,-0.74418 -7.59245,-0.74418 -1.6668,0 -3.6639,-0.2521 -4.43805,-0.56023 -0.77415,-0.30812 -3.35935,-0.58205 -5.74485,-0.60873 -2.38555,-0.0267 -4.2285,-0.22458 -4.0955,-0.43978 0.133,-0.21519 -0.16525,-0.38809 -0.6627,-0.38421 -0.4975,0.004 -4.6252,-0.70534 -9.17275,-1.57603 l -8.2682,-1.58308 -4.9818,1.57726 c -2.73995,0.86749 -5.1243,1.5767 -5.29845,1.57603 -0.599,-0.002 -0.82665,-1.95349 -0.25525,-2.18779 0.31455,-0.12897 -0.0335,-0.25226 -0.77355,-0.27397 -0.74005,-0.0217 -1.4685,0.15952 -1.6188,0.40274 -0.4704,0.76113 -6.71675,1.73732 -7.41525,1.15887 -0.4121,-0.34131 -1.376,-0.35484 -2.87045,-0.0403 -1.2375,0.26047 -4.10625,0.72583 -6.375,1.03414 -2.26875,0.30831 -4.125,0.77464 -4.125,1.0363 0,0.26165 -0.3375,0.34623 -0.75,0.18793 -0.4125,-0.15829 -0.75105,-0.12611 -0.75225,0.0715 0,0.19762 -0.8233,0.40197 -1.82685,0.45412 -1.0035,0.0521 -1.95875,0.27714 -2.12275,0.5 -0.3821,0.51928 -2.05235,0.60782 -11.67315,0.61886 -4.3631,0.005 -7.875,0.21098 -7.875,0.46186 0,0.24906 -1.96875,0.46081 -4.375,0.47056 -5.41745,0.0219 -7.9037,0.29189 -12.375,1.34352 -1.925,0.45275 -5.46875,0.95485 -7.875,1.1158 -2.40625,0.16095 -4.375,0.47015 -4.375,0.68715 0,0.217 -0.7875,0.26675 -1.75,0.1106 -1.1786,-0.1913 -1.75,-0.0898 -1.75,0.3109 0,0.32725 -0.21165,0.46415 -0.4703,0.3043 -0.49975,-0.30885 -8.60635,1.63775 -9.0297,2.1683 -0.1375,0.1723 -0.7,0.3705 -1.25,0.44035 -4.68507,0.59535 -5.68928,0.8167 -5.45128,1.2018 0.15043,0.2434 -0.3615,0.3995 -1.13761,0.34695 -1.57279,-0.10655 -4.86736,1.67965 -4.28433,2.3228 0.20527,0.22645 0.098,0.2536 -0.23834,0.0603 -0.58441,-0.33575 -6.01908,2.50305 -11.38845,5.9488 -1.375,0.88235 -5.875,3.36996 -10,5.52796 -12.3617,6.467 -22.14846,11.5375 -28.5,14.76575 -4.857,2.46865 -11.22486,6.03585 -17.75,9.94335 -1.7712,1.06065 -10.60818,5.1132 -14.75,6.76415 -2.475,0.9866 -5.175,2.09755 -6,2.4688 -5.54538,2.49555 -6.58003,3.00345 -7.25,3.5592 -1.63924,1.3598 -11.42887,7.0769 -14.28954,8.345 -1.67174,0.7411 -4.70924,1.5867 -6.75,1.87915 -4.09752,0.5872 -9.96046,0.49645 -9.96046,-0.15415 0,-0.2288 -0.21841,-0.281 -0.48534,-0.116 -0.26694,0.16495 -0.62883,-0.27175 -0.80421,-0.9705 -0.17537,-0.69875 -0.42176,-1.27045 -0.54753,-1.27045 -0.4082,0 -2.40583,1.13925 -2.66292,1.51865 -0.35229,0.5199 -3.96519,1.98135 -4.89822,1.98135 -0.59126,0 -0.4874,-0.31415 0.43606,-1.31895 l 1.21216,-1.3189 -2.25,0.3655 c -1.2375,0.20105 -4.05,0.40355 -6.25,0.45005 -2.37193,0.0501 -4.59437,0.38485 -5.4603,0.8225 -1.12431,0.56825 -1.50777,0.5956 -1.66666,0.1189 -0.11351,-0.3405 -0.73685,-0.6191 -1.3852,-0.6191 -0.64835,0 -1.33098,-0.2462 -1.51694,-0.5471 -0.18597,-0.3009 -0.87425,-0.4446 -1.52951,-0.3193 -0.65527,0.12525 -1.19139,0.041 -1.19139,-0.18725 0,-0.22825 -0.33172,-0.28765 -0.73715,-0.1321 -0.40544,0.1556 -1.09651,-0.0765 -1.53572,-0.5157 -0.43921,-0.4392 -1.22671,-0.79855 -1.75001,-0.79855 -1.10713,0 -2.38992,-2.279 -2.11079,-3.75 0.31736,-1.67245 1.25927,-3.95385 1.98687,-4.8124 0.37869,-0.44685 0.62288,-1.1116 0.54266,-1.4773 -0.0802,-0.36565 0.18499,-0.67505 0.58937,-0.68755 0.40438,-0.0125 1.01981,-0.58525 1.36763,-1.27275 0.34782,-0.6875 0.63571,-1.0537 0.63977,-0.8138 0.004,0.23995 0.34239,0.1582 0.75186,-0.18165 0.40947,-0.3398 0.59971,-0.85215 0.42275,-1.13845 -0.17696,-0.28635 -0.0875,-0.3758 0.19885,-0.19885 0.56094,0.34665 1.956,-1.01185 1.50361,-1.4642 -0.15004,-0.15005 -1.19183,0.19605 -2.3151,0.7691 -2.80506,1.43105 -7.77479,1.9313 -8.93581,0.8995 C 4.62391,391.6455 3.66424,391.4663 2.175,391.60585 L 0,391.8096 1.925,390.0404 c 2.96073,-2.7211 16.94413,-12.2379 17.98162,-12.2379 0.26309,0 14.67855,-8.7054 17.00174,-10.2672 l 1.55837,-1.04765 -1.42946,-0.63275 c -1.10244,-0.488 -1.33155,-0.82375 -1.00146,-1.4676 0.23539,-0.45915 0.56017,-2.1798 0.72171,-3.8237 0.20432,-2.07916 0.56747,-3.17611 1.1931,-3.60396 1.97683,-1.352 4.64937,-3.9324 4.64937,-4.48915 0,-0.63525 -3.14366,0.26635 -12.4237,3.56325 -2.84554,1.0109 -5.29141,1.7203 -5.43528,1.57645 -0.4404,-0.4404 2.77009,-4.15665 5.7658,-6.67415 1.55999,-1.31095 3.15048,-2.68005 3.53442,-3.0425 1.97896,-1.86805 10.00538,-6.79085 14.83262,-9.09726 3.01188,-1.43904 6.03864,-3.00912 6.72614,-3.48905 0.6875,-0.47994 3.32879,-1.9548 5.86953,-3.27747 2.54074,-1.32268 4.53575,-2.48864 4.43336,-2.59103 -0.1024,-0.10239 -1.59431,0.2882 -3.31536,0.86798 -2.20113,0.74151 -3.28613,0.8972 -3.65836,0.52497 -0.37223,-0.37223 -0.36122,-0.52917 0.0371,-0.52917 0.31147,0 0.71036,-0.45386 0.88642,-1.00858 0.28129,-0.88628 2.46442,-3.24822 6.79693,-7.35367 0.71481,-0.67734 2.09492,-1.71668 3.0669,-2.30964 3.1689,-1.93319 5.79289,-3.77707 6.11364,-4.29607 0.33362,-0.5398 15.55682,-8.24616 17.42024,-8.81856 0.60476,-0.18576 2.80194,-1.18149 4.88261,-2.21274 2.08067,-1.03124 4.30159,-2.03956 4.93537,-2.24072 0.63377,-0.20115 2.14578,-1.06599 3.36002,-1.92186 1.75893,-1.23981 2.38363,-1.44627 3.07313,-1.01567 0.69327,0.43295 2.2562,-0.12777 7.85693,-2.81877 3.84533,-1.84757 8.34151,-3.88484 9.99151,-4.52727 1.65,-0.64243 3.29879,-1.46391 3.66399,-1.82552 1.20152,-1.18975 2.59975,-1.70926 5.05777,-1.87922 1.65837,-0.11467 2.766,-0.50947 3.5063,-1.24977 0.59518,-0.59518 2.10898,-1.73335 3.36401,-2.52926 2.54108,-1.61151 3.34866,-2.5842 3.84675,-4.63319 0.19552,-0.80434 1.01738,-1.80474 1.9496,-2.37313 0.90281,-0.55047 1.28173,-1.00429 0.86158,-1.03189 -1.26984,-0.0834 8.14574,-2.39728 9.875,-2.42676 1.00221,-0.0171 1.625,-0.28175 1.625,-0.69056 0,-0.36456 0.55556,-1.18477 1.23459,-1.82268 1.41573,-1.33001 1.24106,-2.01447 -0.5141,-2.01447 -2.04046,0 -1.3931,-0.71608 2.40451,-2.65973 4.49538,-2.30078 6.58797,-2.36185 12.33935,-0.36011 4.15884,1.44748 4.22549,1.45397 5.05864,0.49331 0.46435,-0.53541 1.0026,-0.97347 1.19605,-0.97347 0.37295,0 6.51145,-4.22899 7.78095,-5.36049 0.4125,-0.36766 2.6625,-2.05712 5,-3.75435 2.3375,-1.69723 6.275,-4.56874 8.75,-6.38112 4.7649,-3.48923 7.6235,-5.32517 12.5,-8.02811 1.65,-0.91456 3.9976,-2.66459 5.21685,-3.88895 l 2.21685,-2.2261 -4.09185,0.23687 c -4.33795,0.25112 -4.72715,0.0236 -3.59115,-2.09909 0.78175,-1.46068 10.7924,-9.29796 16.13425,-12.63136 0.86885,-0.54218 1.27765,-1.12085 1.05965,-1.5 -0.1952,-0.33952 -0.16995,-0.44963 0.0562,-0.24469 0.2261,0.20493 1.1059,-0.15605 1.95515,-0.80218 3.21475,-2.44592 17.1688,-10.65967 20.04405,-11.7985 3.79645,-1.5037 12.63515,-5.93158 12.9916,-6.50834 0.1481,-0.23962 1.78555,-0.93333 3.63885,-1.54157 4.21645,-1.38385 4.5264,-1.56622 3.35835,-1.97595 -0.987,-0.34622 -1.0741,-0.31183 12.90875,-5.09557 3.5187,-1.20379 6.2946,-2.29261 6.16875,-2.4196 -0.12585,-0.127 0.4635,-0.25673 1.3097,-0.28831 0.8462,-0.0316 1.7828,-0.36907 2.0813,-0.75 0.31825,-0.40613 1.76865,-0.76739 3.5068,-0.87343 3.0887,-0.18845 8.84065,-2.54046 13.6105,-5.56541 1.256,-0.79652 3.88445,-1.81231 5.84105,-2.25733 1.9566,-0.44502 3.7885,-0.97309 4.0709,-1.17349 0.2824,-0.2004 1.41345,-0.66832 2.51345,-1.03982 1.1,-0.37151 2.5366,-1.09344 3.19245,-1.60429 0.6558,-0.51085 1.36325,-0.92882 1.5721,-0.92882 0.20885,0 1.0773,-0.65167 1.92995,-1.44814 1.67085,-1.5608 5.15265,-3.53244 6.7923,-3.84626 0.55725,-0.10666 1.2382,-0.48695 1.5132,-0.84511 0.275,-0.35815 1.3926,-1.31703 2.4835,-2.13084 2.8466,-2.1235 3.1454,-2.37598 7.0165,-5.92925 3.68755,-3.38476 8.8972,-7.56867 18,-14.45597 5.0449,-3.81703 8.64345,-6.35196 18.45225,-12.99836 1.95125,-1.32216 6.58525,-3.87129 10.29775,-5.66475 3.7125,-1.79345 7.7625,-3.74919 9,-4.34607 1.2375,-0.59689 2.32548,-1.2554 2.41778,-1.46337 0.092,-0.20796 0.3735,-0.25093 0.625,-0.0955 0.2515,0.15544 0.4573,0.0819 0.4573,-0.16355 0,-0.2454 0.2939,-0.44618 0.6532,-0.44618 0.3592,0 2.328,-0.85403 4.375,-1.89784 2.047,-1.04382 6.3093,-2.90007 9.4718,-4.12501 3.1625,-1.22494 7.2125,-2.86514 9,-3.64489 1.7875,-0.77974 4.4875,-1.93683 6,-2.57129 1.5125,-0.63447 4.3732,-1.9929 6.3572,-3.01874 1.984,-1.02584 5.3028,-2.571 7.375,-3.43369 2.0723,-0.86269 3.7678,-1.73502 3.7678,-1.93853 0,-0.2035 0.285,-0.37001 0.6333,-0.37001 0.3484,0 4.4546,-1.799355 9.125,-3.998585 4.6704,-2.19923 9.8979,-4.51416 11.6167,-5.1443 1.7187,-0.63013 3.125,-1.35313 3.125,-1.60665 0,-0.25353 0.2812,-0.40698 0.625,-0.34102 1.0218,0.19611 8.7144,-2.76254 9.375,-3.60575 0.1375,-0.1755 0.5875,-0.31563 1.0001,-0.31139 1.7822,0.0183 9.6862,-2.8529 13.4714,-4.89359 3.5377,-1.90729 8.6142,-5.61581 10.2785,-7.50866 0.275,-0.31278 0.8988,-0.71839 1.3863,-0.90136 0.4875,-0.18297 1.0264,-0.69774 1.1977,-1.14394 0.3946,-1.02832 2.5594,-3.21141 3.1845,-3.21141 0.2601,0 0.754,-0.45 1.0975,-1 0.3435,-0.55 0.9454,-1 1.3376,-1 0.3922,0 0.57,-0.14305 0.3952,-0.31787 -0.1749,-0.17483 0.8478,-1.41233 2.2726,-2.75 1.4248,-1.33768 2.3741,-2.44639 2.1096,-2.46383 -0.2646,-0.0175 0.04,-0.24052 0.6761,-0.49577 0.696,-0.27916 1.0139,-0.69577 0.7977,-1.04556 -0.1977,-0.31994 -0.1433,-0.44794 0.1211,-0.28458 0.2642,0.16329 1.3406,-0.58944 2.392,-1.67275 1.0513,-1.0833 1.7262,-1.96964 1.4997,-1.96964 -0.2266,0 0.3038,-0.52802 1.1785,-1.17338 0.8748,-0.64536 1.4247,-1.33911 1.2222,-1.54167 -0.2026,-0.20256 -0.139,-0.29329 0.1414,-0.20162 0.7241,0.23678 3.2798,-1.86922 2.8483,-2.34712 -0.1969,-0.21809 -0.1062,-0.25286 0.2016,-0.0773 0.8938,0.50991 8.9141,-6.72936 8.2629,-7.45826 -0.1774,-0.19856 -0.057,-0.20868 0.2683,-0.0225 0.3296,0.1889 0.9374,-0.15635 1.375,-0.78109 0.4313,-0.61579 0.7842,-0.94173 0.7842,-0.72431 0,0.51937 2.2796,-1.14555 4.6037,-3.3623 1.0195,-0.97245 2.8034,-2.39638 3.9642,-3.1643 l 2.1105,-1.3962 -1.3872,-0.25 c -1.3501,-0.24331 -1.3139,-0.29636 1.3539,-1.98214 1.5077,-0.95267 2.6431,-1.98789 2.5232,-2.30048 -0.12,-0.3126 0.5243,-0.93426 1.4318,-1.38148 l 1.6499,-0.81313 -1.625,-0.0114 c -1.784,-0.0125 -2.1838,-0.76663 -0.6625,-1.24949 0.5294,-0.16802 2.5996,-1.88829 4.6005,-3.82282 2.0009,-1.93453 4.324,-3.86861 5.1625,-4.29796 0.8384,-0.42936 1.6466,-0.96829 1.7958,-1.19764 0.1492,-0.22935 1.2742,-0.95805 2.5,-1.61934 1.2258,-0.66128 2.1799,-1.43223 2.1203,-1.71322 -0.06,-0.28098 0.4852,-0.65983 1.2106,-0.84189 0.7254,-0.18206 1.8732,-0.76706 2.5507,-1.3000201 0.6776,-0.53295 1.6241,-0.969 2.1034,-0.969 1.2375,0 4.5619,-1.4352 5.7437,-2.47961 1.0591,-0.93601 7.5005,-3.52039 8.7743,-3.52039 0.4143,0 1.2503,-0.34818 1.8578,-0.77374 2.0129,-1.40986005 9.6931,-2.10420005 22.3679,-2.02220005 11.6212,0.0752 12.1262,0.12032 16,1.43040005 2.2,0.74402 4.2797,1.35564 4.6215,1.35915 1.3776,0.0142 14.3184,6.23276 16.1285,7.7504001 0.4125,0.34586 2.3385,1.38869 4.2801,2.31741 3.4577,1.65397 3.7199,1.8649 3.7199,2.99278 0,0.34148 0.4798,0.43378 1.25,0.24048 0.7334,-0.18409 1.25,-0.0987 1.25,0.20651 0,0.28614 0.6187,0.79506 1.375,1.13094 0.7562,0.33588 1.8112,1.00606 2.3443,1.48928 0.5331,0.48322 1.2643,0.87859 1.625,0.87859 0.3606,0 0.6557,0.18888 0.6557,0.41974 0,0.55421 2.2878,1.58026 3.5235,1.58026 0.5371,0 0.9765,0.225 0.9765,0.5 0,0.73451 1.4971,0.61105 1.5159,-0.125 0.01,-0.37405 0.2893,-0.26449 0.6968,0.27287 0.4916,0.64814 1.0434,0.80689 1.9841,0.57079 0.8468,-0.21253 1.3032,-0.12266 1.3032,0.25664 0,0.32104 0.2196,0.448 0.488,0.28212 0.6759,-0.41776 6.513,0.83637 6.2059,1.33337 -0.1369,0.2214 0.2698,0.39598 0.9036,0.38794 1.4058,-0.0178 7.5086,1.4204 6.2775,1.47936 -0.4813,0.023 -0.875,0.24287 -0.875,0.48848 0,0.47781 6.0237,1.69641 6.4211,1.299 0.1303,-0.13029 0.4826,-0.0377 0.7829,0.20562 0.9954,0.80678 10.8029,3.60352 11.3819,3.2457 0.3151,-0.19471 0.4324,-0.13106 0.2632,0.14275 -0.168,0.27178 1.9195,1.54574 4.6388,2.83102 2.7193,1.28527 6.9282,3.83442 9.3531,5.66477 2.425,1.83035 4.6902,3.32866 5.034,3.32957 0.3437,0.001 0.5203,0.10632 0.3924,0.23422 -0.1279,0.12791 0.5403,1.13544 1.4849,2.23895 0.9445,1.10352 1.613,2.17529 1.4854,2.38172 -0.1276,0.20643 0.1042,0.50434 0.5151,0.66202 0.411,0.15769 0.7506,0.0125 0.7548,-0.3226 0.01,-0.47305 0.093,-0.47461 0.3905,-0.007 0.2106,0.33128 0.3289,1.56701 0.263,2.74607 -0.084,1.50202 0.022,1.9204 0.3519,1.39766 0.3892,-0.6156 0.4799,-0.57119 0.5188,0.25393 0.026,0.55 0.1606,0.71875 0.2993,0.375 0.1387,-0.34375 0.4106,-0.625 0.6041,-0.625 0.5544,0 0.5569,1.94584 0,2.28816 -0.294,0.18173 -0.1638,0.55225 0.3178,0.90444 0.5834,0.4266 0.719,0.98284 0.4758,1.952 -0.1872,0.74547 -0.5541,1.3554 -0.8155,1.3554 -0.2615,0 -0.302,-0.28125 -0.09,-0.625 0.2119,-0.34375 -0.2046,-0.23932 -0.9255,0.23207 -1.2679,0.82909 -3.2163,1.42977 -5.0256,1.54938 -0.4813,0.0318 -0.875,0.2321 -0.875,0.44509 0,0.213 -0.5063,0.38405 -1.125,0.38012 -0.6188,-0.004 -1.8,0.0867 -2.625,0.2014 -14.2491,1.98101 -26.0951,3.39636 -30.5,3.64411 -3.025,0.17014 -5.7714,0.523 -6.1031,0.78413 -0.3317,0.26114 -0.8177,0.34219 -1.0799,0.18013 -0.8568,-0.52952 -2.0213,0.2448 -1.6918,1.12495 0.2716,0.72577 0.2029,0.74484 -0.5316,0.1474 -0.5837,-0.47478 -0.8436,-0.50654 -0.8436,-0.10308 0,0.32073 -0.2813,0.54662 -0.625,0.50198 -1.6669,-0.21646 -2.469,0.0713 -2.1942,0.78732 0.3196,0.83281 -0.4439,1.03786 -0.9308,0.25 -0.17,-0.275 -0.802,-0.48223 -1.4045,-0.46052 -0.6026,0.0217 -0.8269,0.14874 -0.4986,0.2823 0.3283,0.13356 0.4692,0.57551 0.3132,0.98211 -0.2456,0.64011 -0.404,0.63043 -1.1803,-0.0722 -0.6764,-0.61217 -1.1326,-0.68517 -1.8574,-0.29726 -0.5284,0.2828 -1.4727,0.38029 -2.0985,0.21665 -1.0054,-0.26291 -1.099,-0.1581 -0.805,0.90067 0.2971,1.06942 0.2599,1.10821 -0.3456,0.36088 -0.6308,-0.77854 -0.7906,-0.76631 -2.2759,0.1741 -0.8786,0.55628 -1.5974,1.41826 -1.5974,1.91551 0,0.65793 -0.2723,0.83289 -1,0.64259 -0.673,-0.17598 -1,-0.0154 -1,0.49116 0,0.4613 -0.6635,0.87713 -1.7138,1.07417 -1.3855,0.25994 -1.7763,0.60652 -2.0406,1.80981 -0.319,1.45242 -1.9262,2.8038 -3.0637,2.57603 -0.3125,-0.0626 -0.6992,0.22773 -0.8593,0.6451 -0.1602,0.41737 -0.5016,0.75885 -0.7587,0.75885 -0.5132,0 -2.0427,1.30904 -7.2824,6.23269 -1.9076,1.79259 -3.8764,3.38873 -4.375,3.54698 -0.4986,0.15824 -0.9135,0.66631 -0.922,1.12903 -0.01,0.46271 -0.9647,1.56246 -2.125,2.44387 -3.9721,3.01753 -7.7866,7.116285 -7.4796,8.037135 0.1119,0.33566 -0.037,0.61029 -0.3311,0.61029 -0.2939,0 -0.7894,1.0125 -1.101,2.25 -0.3116,1.2375 -0.7578,2.25 -0.9915,2.25 -0.2337,0 -0.2954,0.3375 -0.1371,0.75 0.1583,0.4125 0.082,0.75 -0.1686,0.75 -0.251,0 -0.4568,0.50625 -0.4573,1.125 0,1.94848 -0.7907,5.87384 -1.1374,5.65955 -0.2939,-0.18161 -0.3995,1.97113 -0.624,12.71545 -0.031,1.5125 -0.2485,2.87227 -0.482,3.02171 -0.4526,0.28955 -0.8518,1.98789 -0.9128,3.8828 -0.021,0.63498 -0.2595,1.01704 -0.5314,0.84903 -0.2834,-0.17517 -0.3673,0.0256 -0.1965,0.47049 0.1638,0.42679 0.056,0.77597 -0.24,0.77597 -0.2958,0 -0.3996,0.36021 -0.2307,0.80046 0.169,0.44026 0.058,0.95425 -0.2458,1.14221 -0.3041,0.18796 -0.6567,1.45312 -0.7836,2.81147 -0.1269,1.35835 -0.4495,2.54265 -0.7169,2.63177 -0.2673,0.0891 -0.3719,0.59852 -0.2324,1.13199 0.158,0.60415 -0.05,1.08629 -0.5502,1.27842 -0.4421,0.16966 -0.6794,0.50989 -0.5272,0.75607 0.1521,0.24619 0.073,0.44761 -0.1768,0.44761 -0.2494,0 -0.4732,0.69535 -0.4974,1.54521 -0.075,2.63491 -1.7218,9.44361 -2.2111,9.14121 -0.2552,-0.15772 -0.4123,0.017 -0.3491,0.38841 0.063,0.37134 -0.034,1.23767 -0.2167,1.92517 -0.1823,0.6875 -0.4286,2.2625 -0.5473,3.5 -0.5348,5.5744 -2.4417,11.92042 -3.8421,12.78589 -0.2431,0.15022 -0.4419,0.93485 -0.4419,1.74362 0,0.80877 -0.2192,1.47049 -0.4872,1.47049 -0.6336,0 -2.1337,2.8999 -1.7888,3.45803 0.1457,0.23577 -0.07,0.70671 -0.4795,1.04654 -0.4095,0.33983 -0.7445,0.90908 -0.7445,1.26499 0,0.35591 -0.2231,0.72211 -0.4957,0.81378 -0.2726,0.0917 -0.5814,0.90471 -0.6861,1.80676 -0.1048,0.90206 -0.5573,2.04532 -1.0055,2.54058 -0.4482,0.49526 -0.6644,1.05096 -0.4805,1.2349 0.184,0.18393 0.034,0.33442 -0.3322,0.33442 -0.3667,0 -0.5257,0.14103 -0.3533,0.31339 0.4487,0.44869 -1.0767,3.23721 -2.4966,4.56382 -0.6635,0.61997 -1.0825,1.32764 -0.9311,1.57261 0.1514,0.24497 -0.061,0.57441 -0.4719,0.7321 -0.4109,0.15768 -0.7471,0.75704 -0.7471,1.3319 0,0.57486 -0.2137,0.91312 -0.4749,0.75169 -0.5221,-0.32264 -1.6579,1.43503 -1.2142,1.8788 0.1517,0.15168 -0.3043,0.65588 -1.0133,1.12043 -0.7089,0.46456 -1.1735,1.03162 -1.0322,1.26015 0.2781,0.44997 -1.6768,2.47511 -2.3892,2.47511 -0.2394,0 -0.2971,0.22346 -0.1283,0.49658 0.1688,0.27312 -0.488,1.31507 -1.4596,2.31544 -0.9715,1.00037 -1.6265,2.04529 -1.4555,2.32203 0.1711,0.27674 -0.2276,0.94182 -0.8859,1.47795 -0.6583,0.53613 -0.8594,0.82561 -0.4469,0.6433 0.4125,-0.18232 0.2437,0.11547 -0.375,0.66175 -0.6188,0.54629 -1.125,1.18431 -1.125,1.41783 0,0.23351 -0.4588,0.71106 -1.0194,1.0612 -0.5607,0.35015 -0.8995,0.83069 -0.7529,1.06788 0.1466,0.23719 -0.084,0.56575 -0.5123,0.73012 -0.4283,0.16437 -0.6353,0.53102 -0.46,0.81478 0.1754,0.28376 0.041,0.45409 -0.299,0.37853 -0.3398,-0.0756 -0.7841,0.42511 -0.9873,1.11261 -0.2032,0.6875 -0.3919,1.06518 -0.4193,0.83929 -0.069,-0.56877 -1.5498,0.96706 -1.5498,1.60741 0,0.28496 -0.4563,0.76232 -1.014,1.0608 -0.5577,0.29847 -0.896,0.73372 -0.7517,0.96722 0.1444,0.2335 -0.4681,1.06596 -1.361,1.84991 -0.8929,0.78396 -1.7359,1.65037 -1.8734,1.92537 -0.1374,0.275 -0.3739,0.45869 -0.5254,0.40819 -0.1515,-0.0505 -0.5618,0.36679 -0.9119,0.92732 -0.5228,0.83716 -0.5183,0.95076 0.025,0.63619 0.8436,-0.48807 -1.4719,2.18162 -2.9678,3.42178 -0.6214,0.51513 -1.0019,1.14358 -0.8455,1.39656 0.1563,0.25298 -0.04,0.45996 -0.4359,0.45996 -0.7508,0 -2.9135,2.57583 -3.5032,4.17247 -0.1874,0.50736 -0.7896,1.03985 -1.3382,1.18332 -0.5486,0.14346 -0.9975,0.4776 -0.9975,0.74253 0,0.26492 -1.3998,1.86993 -3.1107,3.56668 -1.7109,1.69675 -3.0609,3.25375 -3,3.46 0.061,0.20625 -0.1994,0.375 -0.5785,0.375 -0.6144,0 -5.3108,5.01642 -5.3108,5.67264 0,0.26568 -2.468,3.04644 -6.3718,7.1792 -1.1685,1.23714 -1.9782,2.48634 -1.7992,2.77601 0.1791,0.28966 0.092,0.3821 -0.1942,0.20542 -0.2859,-0.17668 -2.1839,1.43727 -4.2177,3.58656 -2.0338,2.14928 -4.0512,4.11533 -4.4831,4.36898 -1.6679,0.97963 -8.434,7.48715 -8.434,8.11175 0,0.36215 -0.2137,0.52638 -0.4749,0.36495 -0.2612,-0.16144 -0.7249,0.17356 -1.0304,0.74442 -0.3055,0.57087 -1.1178,1.25175 -1.8052,1.51307 -0.6873,0.26132 -1.1261,0.67506 -0.9751,0.91941 0.1511,0.24436 0,0.67565 -0.3449,0.95842 -0.6127,0.50848 -0.8956,0.59917 -1.8695,0.59917 -0.275,0 -0.4437,0.26133 -0.375,0.58074 0.069,0.31941 -0.325,0.71316 -0.875,0.875 -1.4069,0.414 -6.75,4.09049 -6.75,4.64456 0,0.2523 -0.184,0.34498 -0.4089,0.20597 -0.225,-0.13902 -1.0125,0.30681 -1.75,0.99072 -0.7376,0.68392 -1.3479,1.06563 -1.3563,0.84825 -0.01,-0.21738 -0.2445,-0.001 -0.5248,0.47976 -0.2803,0.48125 -0.9485,0.875 -1.4848,0.875 -0.5364,0 -1.3877,0.39375 -1.8918,0.875 -0.5042,0.48125 -1.2355,0.94362 -1.625,1.02748 -0.3896,0.0839 -0.9473,0.4627 -1.2393,0.84185 -0.2919,0.37916 -1.1357,0.84119 -1.875,1.02673 -0.7392,0.18554 -1.3441,0.57546 -1.3441,0.86648 0,0.29102 -0.1426,0.38646 -0.317,0.21208 -0.6345,-0.63445 -7.8005,3.59025 -10.5801,6.23742 -1.5691,1.49435 -4.3154,3.95102 -6.1029,5.45926 -5.1472,4.34307 -7,6.14958 -7,6.82524 0,0.34565 -0.183,0.57221 -0.4068,0.50346 -0.5419,-0.16652 -5.8816,5.24198 -5.7058,5.77936 0.076,0.23098 -0.065,0.29488 -0.3124,0.142 -0.2474,-0.15289 -1.7717,1.27898 -3.3874,3.18194 -1.6156,1.90295 -3.1626,3.47949 -3.4376,3.5034 -0.275,0.0239 -2.0493,1.50032 -3.9428,3.28089 -1.8936,1.78059 -3.5507,3.23739 -3.6824,3.23739 -0.3719,0 -5.9503,4.04185 -8.3864,6.07645 -1.2029,1.00455 -4.6173,3.5172 -7.5877,5.58365 -5.6828,3.9535 -8.3477,6.46596 -11.2326,10.58991 -2.2526,3.22015 -5.4181,9.07255 -5.4181,10.0172 0,0.40305 -0.1726,0.7328 -0.3836,0.7328 -0.4644,0 -2.2933,4.71705 -3.2956,8.5 -0.4008,1.5125 -0.8759,5.675 -1.0558,9.25 -0.1799,3.575 -0.5381,6.71375 -0.796,6.975 -0.258,0.26125 -0.469,2.17995 -0.469,4.26375 0,2.59045 -0.2418,4.13395 -0.7645,4.8802 -0.9186,1.3115 -0.5319,3.36675 0.8103,4.30685 0.5123,0.35885 4.0045,3.55985 7.7605,7.1133 3.7559,3.5535 7.0235,6.5359 7.2613,6.62755 0.2378,0.0917 0.4324,0.48545 0.4324,0.875 0,0.3896 0.1901,0.70835 0.4224,0.70835 0.2323,0 1.5135,1.11125 2.8472,2.46945 1.3336,1.3582 2.5722,2.37835 2.7523,2.26705 0.1801,-0.1113 0.8099,0.35245 1.3995,1.03055 0.5896,0.6781 1.2985,1.23295 1.5753,1.23295 0.2768,0 0.5033,0.3375 0.5033,0.75 0,0.4125 0.3508,0.75 0.7795,0.75 0.4288,0 0.6455,0.21695 0.4816,0.4821 -0.1639,0.26515 0.5541,1.0345 1.5955,1.70965 2.1499,1.3939 6.0189,4.80825 5.4485,4.80825 -0.2071,0 -0.039,0.3375 0.3735,0.75 0.4125,0.4125 1.1036,0.75 1.5357,0.75 0.4322,0 0.7295,0.28125 0.6607,0.625 -0.069,0.34375 0.1563,0.56875 0.5,0.5 0.3438,-0.0688 0.5688,0.15625 0.5,0.5 -0.069,0.34375 0.1563,0.56875 0.5,0.5 0.3438,-0.0688 0.625,0.1 0.625,0.375 0,0.275 0.1688,0.4643 0.375,0.4206 0.2063,-0.0435 0.7876,0.10015 1.2919,0.3196 0.7215,0.31395 0.7748,0.48905 0.25,0.82175 -0.4556,0.2888 -0.222,0.42515 0.7376,0.4304 0.7725,0.005 1.2922,0.18935 1.155,0.41145 -0.1373,0.2221 0.2432,0.7714 0.8455,1.2207 3.1079,2.3184 4.7133,3.41418 5.845,3.98978 1.6949,0.8619 2.9988,1.9993 3.0058,2.6218 0.01,0.2826 0.9594,0.9524 2.125,1.4884 2.0738,0.9537 4.9862,3.4918 4.5301,3.948 -0.3986,0.3985 1.0018,2.2534 1.8734,2.4813 1.0186,0.2664 2.7602,4.0564 4.7044,10.2376 1.2321,3.9172 1.737,4.8509 3.2356,5.9847 0.9767,0.7389 2.1581,1.8212 2.6254,2.4053 1.3615,1.7015 5.9699,4.608 8.2388,5.1961 3.1113,0.8065 4.6615,2.9029 4.6615,6.3041 0,2.596 0.067,2.7332 1.676,3.4052 0.9217,0.3851 2.6655,0.8588 3.875,1.0525 1.2094,0.1938 3.8727,0.7817 5.9182,1.3065 2.0455,0.5248 4.7959,0.9542 6.112,0.9542 2.8016,0 9.1403,2.3553 11.8018,4.3853 0.9746,0.7433 2.1822,2.2545 2.6835,3.3581 1.2235,2.6932 1.1958,3.4072 -0.1158,2.9909 -0.9207,-0.2922 -1.0032,-0.189 -0.6728,0.8413 0.8898,2.7751 1.199,4.8956 1.2102,8.2994 l 0.012,3.625 -1.5,0 c -2.0673,0 -3.293,-1.4148 -3.9611,-4.5723 -0.3235,-1.5287 -1.3525,-3.8255 -2.3981,-5.3527 -1.7493,-2.5549 -1.9112,-2.662 -3.6095,-2.3864 -2.1969,0.3565 -3.0313,1.4344 -3.0313,3.916 l 0,1.9135 -2.125,-0.1341 c -1.8881,-0.1191 -2.104,-0.023 -1.9362,0.866 0.4042,2.1408 0.2861,5.9165 -0.1888,6.0383 -0.275,0.071 -0.7813,0.016 -1.125,-0.1217 z m -61.4852,-58.4731 c 0.4772,-0.4772 -1.7384,-3.2123 -3.2294,-3.9868 -0.7368,-0.3827 -1.4752,-1.092 -1.6411,-1.5762 -0.1658,-0.4843 -1.2969,-1.6591 -2.5136,-2.6107 -1.2166,-0.9516 -2.1201,-1.8221 -2.0077,-1.9345 0.2676,-0.2676 -3.707,-3.5853 -4.2953,-3.5853 -0.249,0 -0.4527,-0.3375 -0.4527,-0.75002 0,-0.4125 -0.2813,-0.69375 -0.625,-0.625 -0.3438,0.0687 -0.5688,-0.15625 -0.5,-0.5 0.069,-0.34375 -0.2125,-0.625 -0.625,-0.625 -0.4125,0 -0.75,-0.3174 -0.75,-0.70535 0,-0.38795 -1.4004,-1.9067 -3.1119,-3.375 -1.7115,-1.4683 -3.7143,-3.2884 -4.4506,-4.04465 -0.7363,-0.75625 -1.449,-1.375 -1.5838,-1.375 -0.1348,0 -1.4553,-1.18125 -2.9345,-2.625 -2.734,-2.66845 -5.275,-4.875 -5.614,-4.875 -0.1029,0 -1.2729,-0.9969 -2.6,-2.21535 -1.327,-1.21845 -2.5911,-2.1052 -2.809,-1.9705 -0.2179,0.13465 -0.3962,0.034 -0.3962,-0.22405 0,-0.61605 -7.5035,-6.25675 -8.323,-6.25675 -0.3482,0 -0.521,-0.18125 -0.3841,-0.40275 0.3216,-0.52045 -4.1267,-3.3043 -5.9179,-3.7036 -0.7563,-0.16855 -1.375,-0.5215 -1.375,-0.7843 0,-0.27865 -0.4334,-0.24595 -1.0396,0.0785 -0.996,0.533 -0.9384,0.6595 1.375,3.01685 1.328,1.35325 2.6958,2.4608 3.0396,2.4612 0.3437,4e-4 0.625,0.19075 0.625,0.423 0,0.23225 1.7175,2.0885 3.8168,4.125 2.0992,2.0365 4.2929,4.2445 4.875,4.90665 1.8333,2.0858 7.1502,7.2655 8.2244,8.0122 0.5666,0.3938 0.8937,0.9563 0.7268,1.25 -0.1668,0.29365 -0.127,0.3749 0.089,0.1805 0.2155,-0.19435 1.0954,0.17135 1.9552,0.81265 0.8598,0.64135 2.4229,1.56475 3.4735,2.0521 1.3723,0.6365 1.7243,1.00395 1.25,1.3047 -0.4957,0.31435 -0.4349,0.42055 0.2443,0.4263 0.4974,0.005 0.7816,0.20655 0.6313,0.4496 -0.2444,0.39555 2.192,1.6938 3.4642,1.84595 0.275,0.033 0.7945,0.0941 1.1545,0.13595 0.3599,0.042 0.5154,0.30115 0.3455,0.57615 -0.17,0.275 0.054,0.5 0.497,0.5 0.4433,0 1.6338,0.5625 2.6456,1.25 1.0117,0.6875 1.506,1.25342 1.0984,1.25762 -0.6487,0.01 -0.6476,0.068 0.01,0.4886 0.4125,0.2645 1.1201,0.3659 1.5723,0.2254 0.8623,-0.268 2.0766,0.6881 2.9525,2.3247 0.285,0.5325 1.4204,1.5378 2.5231,2.2339 1.6101,1.0164 1.94,1.4704 1.675,2.3053 -0.2098,0.6609 -0.1409,0.9228 0.189,0.7189 0.2855,-0.1764 0.6504,-0.1082 0.811,0.1517 0.1606,0.2598 -0.2176,0.5703 -0.8405,0.69 -0.98,0.1884 -0.9473,0.2269 0.2426,0.2858 1.1399,0.056 1.375,0.2965 1.375,1.4037 0,2.196 1.2989,3.1644 4.2442,3.1644 1.424,0 2.7271,-0.138 2.8957,-0.3065 z m -57.4242,-49.13787 c 0.151,-0.24445 -0.5669,-1.06695 -1.5955,-1.8278 -2.38313,-1.7629 -3.59493,-3.23535 -3.60903,-4.38515 -0.0155,-1.2703 -2.0386,-5.8427 -2.58505,-5.8427 -0.24795,0 -0.6647,-0.5625 -0.92605,-1.25 -0.2614,-0.6875 -0.69875,-1.25 -0.97195,-1.25 -0.2732,0 -0.36715,-0.3375 -0.2089,-0.75 0.1583,-0.4125 0.0838,-0.75 -0.16565,-0.75 -0.7284,0 -1.76515,5.85715 -1.2178,6.87995 0.26065,0.4869 2.10625,2.3444 4.10145,4.1277 1.99515,1.7833 4.09675,3.72485 4.6702,4.31455 1.12918,1.1612 2.07328,1.43725 2.50828,0.73345 z m -11.30398,-36.71835 c -0.0631,-0.323 0.2684,-1.3074 0.73675,-2.18745 0.46835,-0.8801 0.8516,-2.18715 0.8516,-2.90455 0,-0.79705 0.2075,-1.17605 0.53365,-0.9745 0.44345,0.2741 1.39225,-1.70075 1.0395,-2.16365 -0.0599,-0.0786 0.23665,-0.4884 0.659,-0.9107 0.4223,-0.42235 0.76785,-1.30105 0.76785,-1.95265 0,-0.65165 0.20725,-1.3129 0.4606,-1.46945 0.25335,-0.1566 0.8561,-1.3511 1.33945,-2.6545 0.48335,-1.30345 1.28195,-2.95775 1.7746,-3.6763 0.4927,-0.71855 0.75245,-1.4498 0.57725,-1.625 -0.17525,-0.1752 -0.0561,-0.31855 0.26475,-0.31855 0.32088,0 0.57988,-0.39375 0.57568,-0.875 -0.01,-0.7558 -0.081,-0.77285 -0.54338,-0.125 -0.4406,0.6168 -0.4937,0.57245 -0.29905,-0.25 0.13015,-0.55 0.41373,-1.4328 0.63013,-1.96181 0.3152,-0.7702 0.2269,-0.89785 -0.44323,-0.6407 -1.03975,0.399 -1.0872,-0.3257 -0.0868,-1.32605 0.41253,-0.4125 0.74253,-1.15985 0.73333,-1.66075 -0.014,-0.78925 -0.1494,-0.75125 -1.01248,0.28515 -0.54775,0.6577 -1.14075,1.05095 -1.3178,0.8739 -0.17705,-0.17705 -0.7863,0.0723 -1.3539,0.55415 -0.98065,0.83255 -0.99825,0.8326 -0.35435,0 0.41445,-0.53515 0.4693,-0.875 0.14125,-0.875 -0.295,0 -0.7163,0.28125 -0.9362,0.625 -0.21995,0.34375 -0.83575,0.9625 -1.3685,1.375 -0.88055,0.6818 -0.9388,0.67045 -0.6407,-0.125 0.1804,-0.48125 0.1187,-0.875 -0.1371,-0.875 -0.25575,0 -0.7098,0.95625 -1.009,2.12501 -0.29915,1.16875 -0.66875,2.4625 -0.8213,2.875 -0.711,1.92255 -1.63965,7.31815 -1.3932,8.0947 0.15145,0.47715 0.0265,1.333 -0.27825,1.9019 -0.6575,1.22855 -0.11545,12.13265 0.5817,11.70175 0.24365,-0.15055 0.3913,-0.53805 0.32815,-0.86105 z M 407.1,361.33711 c 0,-0.2912 0.225,-0.5295 0.5,-0.5295 0.275,0 0.5,0.0992 0.5,0.2205 0,0.12125 -0.225,0.35955 -0.5,0.5295 -0.275,0.16995 -0.5,0.0707 -0.5,-0.2205 z m 1,-1.5 c 0,-0.2912 0.225,-0.52951 0.5,-0.52951 0.275,0 0.5,0.0992 0.5,0.22051 0,0.12125 -0.225,0.35955 -0.5,0.5295 -0.275,0.16995 -0.5,0.0707 -0.5,-0.2205 z M 738.20043,42.685845 c -0.5899,-0.58997 -1.2476,-0.88561 -1.4615,-0.65699 -0.2139,0.22862 -0.1063,0.51659 0.2392,0.63992 0.3455,0.12334 0.5298,0.38333 0.4096,0.57776 -0.1201,0.19443 0.2549,0.38916 0.8335,0.43274 l 1.0519,0.0792 -1.0727,-1.07267 z M 418.60003,464.08713 c 0,-0.1213 0.225,-0.3596 0.5,-0.5295 0.275,-0.17 0.5,-0.071 0.5,0.2205 0,0.2912 -0.225,0.5295 -0.5,0.5295 -0.275,0 -0.5,-0.099 -0.5,-0.2205 z M 695.96553,23.479655 c 0.3385,-0.13696 1.0135,-0.1453 1.5,-0.0186 0.4864,0.12677 0.2095,0.23883 -0.6155,0.24902 -0.825,0.0102 -1.2231,-0.0935 -0.8845,-0.2305 z" id="path2818"/> +</svg>
\ No newline at end of file diff --git a/src/BmpPicture.cs b/src/BmpPicture.cs index 879329aa..fc227747 100644 --- a/src/BmpPicture.cs +++ b/src/BmpPicture.cs @@ -61,6 +61,42 @@ namespace Crow bitmap.UnlockBits (data); } + #region implemented abstract members of Fill + + public override void SetAsSource (Context ctx, Rectangle bounds = default(Rectangle)) + { + float widthRatio = 1f; + float heightRatio = 1f; + + if (Scaled){ + widthRatio = (float)bounds.Width / Dimensions.Width; + heightRatio = (float)bounds.Height / Dimensions.Height; + } + + if (KeepProportions) { + if (widthRatio < heightRatio) + heightRatio = widthRatio; + else + widthRatio = heightRatio; + } + + using (ImageSurface tmp = new ImageSurface (Format.Argb32, bounds.Width, bounds.Height)) { + using (Cairo.Context gr = new Context (tmp)) { + gr.Translate (bounds.Left, bounds.Top); + gr.Scale (widthRatio, heightRatio); + gr.Translate ((bounds.Width/widthRatio - Dimensions.Width)/2, (bounds.Height/heightRatio - Dimensions.Height)/2); + + using (ImageSurface imgSurf = new ImageSurface (image, Format.Argb32, + Dimensions.Width, Dimensions.Height, 4 * Dimensions.Width)) { + gr.SetSourceSurface (imgSurf, 0,0); + gr.Paint (); + } + } + ctx.SetSource (tmp); + } + } + #endregion + public override void Paint (Cairo.Context gr, Rectangle rect, string subPart = "") { float widthRatio = 1f; diff --git a/src/Cairo/IFill.cs b/src/Cairo/IFill.cs deleted file mode 100644 index e3459bb0..00000000 --- a/src/Cairo/IFill.cs +++ /dev/null @@ -1,11 +0,0 @@ -using System; -using System.Collections.Generic; - -namespace Crow -{ - public interface ICairoFill - { - void SetAsSource (Cairo.Context ctx); - } -} - diff --git a/src/Colors.cs b/src/Colors.cs index c88e1729..ccc42493 100644 --- a/src/Colors.cs +++ b/src/Colors.cs @@ -10,7 +10,7 @@ using System.Diagnostics; namespace Crow { - public struct Color : ICairoFill + public struct Color { #region CTOR public Color(double _R, double _G, double _B, double _A) @@ -63,7 +63,6 @@ namespace Crow return cr; } } - return new Color( double.Parse(c[0]), double.Parse(c[1]), @@ -92,6 +91,10 @@ namespace Crow { return new Cairo.Color(c.R, c.G, c.B, c.A); } + public static implicit operator Fill(Color c){ + return new SolidColor (c) as Fill; + } + public static bool operator ==(Color left, Color right) { @@ -147,16 +150,7 @@ namespace Crow { return new Color (this.R, this.G, this.B, _A); } - - #region IFill implementation - - public void SetAsSource (Cairo.Context ctx) - { - ctx.SetSourceRGBA (R, G, B, A); - } - - #endregion - + #region Predefined colors public static readonly Color Transparent = new Color(0, 0, 0, 0, "Transparent"); public static readonly Color Clear = new Color(-1, -1, -1, -1, "Clear"); diff --git a/src/Fill/Fill.cs b/src/Fill/Fill.cs new file mode 100644 index 00000000..322fa5ae --- /dev/null +++ b/src/Fill/Fill.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections.Generic; + +namespace Crow +{ + public abstract class Fill + { + public abstract void SetAsSource (Cairo.Context ctx, Rectangle bounds = default(Rectangle)); + public static object Parse (string s){ + if (string.IsNullOrEmpty (s)) + return null; + if (s.Substring (1).StartsWith ("gradient")) + return (Gradient)Gradient.Parse (s); + if (s.EndsWith (".svg", true, System.Globalization.CultureInfo.InvariantCulture)) + return SvgPicture.Parse (s); + if (s.EndsWith (".png", true, System.Globalization.CultureInfo.InvariantCulture) || + s.EndsWith (".jpg", true, System.Globalization.CultureInfo.InvariantCulture) || + s.EndsWith (".jpeg", true, System.Globalization.CultureInfo.InvariantCulture) || + s.EndsWith (".bmp", true, System.Globalization.CultureInfo.InvariantCulture) || + s.EndsWith (".gif", true, System.Globalization.CultureInfo.InvariantCulture)) + return BmpPicture.Parse (s); + + return (SolidColor)SolidColor.Parse (s); + } + + public static implicit operator Fill(Color c){ + return new SolidColor (c); + } + + } +} + diff --git a/src/Gradient.cs b/src/Gradient.cs new file mode 100644 index 00000000..c521fd67 --- /dev/null +++ b/src/Gradient.cs @@ -0,0 +1,130 @@ +// +// Gradient.cs +// +// Author: +// Jean-Philippe Bruyère <jp_bruyere@hotmail.com> +// +// Copyright (c) 2016 jp +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see <http://www.gnu.org/licenses/>. +using System; +using System.Collections.Generic; + +namespace Crow +{ + public class Gradient : Fill + { + public enum Type + { + Vertical, + Horizontal, + Oblic, + Radial + } + public class ColorStop + { + public double Offset; + public Color Color; + + public ColorStop(double offset, Color color){ + Offset = offset; + Color = color; + } + public static object Parse(string s) + { + if (string.IsNullOrEmpty (s)) + return null; + + string[] parts = s.Trim ().Split (':'); + + if (parts.Length > 2) + throw new Exception ("too many parameters in color stop: " + s); + + if (parts.Length == 2) + return new ColorStop (double.Parse (parts [0]), (Color)parts [1]); + + return new ColorStop (-1, (Color)parts [0]); + } + } + public Gradient.Type GradientType = Type.Vertical; +// public double x0; +// public double y0; +// public double x1; +// public double y1; +// public double Radius1; +// public double Radius2; + public List<ColorStop> Stops = new List<ColorStop>(); + public Gradient(Gradient.Type _type) + { + GradientType = _type; + } + + #region implemented abstract members of Fill + + public override void SetAsSource (Cairo.Context ctx, Rectangle bounds = default(Rectangle)) + { + Cairo.Gradient grad = null; + switch (GradientType) { + case Type.Vertical: + grad = new Cairo.LinearGradient (bounds.Left, bounds.Top, bounds.Left, bounds.Bottom); + break; + case Type.Horizontal: + grad = new Cairo.LinearGradient (bounds.Left, bounds.Top, bounds.Right, bounds.Top); + break; + case Type.Oblic: + grad = new Cairo.LinearGradient (bounds.Left, bounds.Top, bounds.Right, bounds.Bottom); + break; + case Type.Radial: + throw new NotImplementedException (); + } + + foreach (ColorStop cs in Stops) + grad.AddColorStop (cs.Offset, cs.Color); + + ctx.SetSource (grad); + grad.Dispose (); + } + #endregion + + public static object Parse(string s) + { + if (string.IsNullOrEmpty (s)) + return Color.White; + + Crow.Gradient tmp; + + string[] stops = s.Trim ().Split ('|'); + + switch (stops[0].Trim()) { + case "vgradient": + tmp = new Gradient (Type.Vertical); + break; + case "hgradient": + tmp = new Gradient (Type.Horizontal); + break; + case "ogradient": + tmp = new Gradient (Type.Oblic); + break; + default: + throw new Exception ("Unknown gradient type: " + stops [0]); + } + + for (int i = 1; i < stops.Length; i++) + tmp.Stops.Add((ColorStop)ColorStop.Parse(stops[i])); + + return tmp; + } + } +} + diff --git a/src/GraphicObjects/AnalogMeter.cs b/src/GraphicObjects/AnalogMeter.cs index 39e012dd..80e0e850 100644 --- a/src/GraphicObjects/AnalogMeter.cs +++ b/src/GraphicObjects/AnalogMeter.cs @@ -34,7 +34,7 @@ namespace Crow gr.Translate (-m.X, -m.Y); gr.LineWidth = 2; - gr.Color = Foreground; + Foreground.SetAsSource (gr); gr.MoveTo (m.X,0.0); gr.LineTo (m.X, -m.Y*0.5); gr.Stroke (); diff --git a/src/GraphicObjects/Border.cs b/src/GraphicObjects/Border.cs index c04a135e..58ccff33 100644 --- a/src/GraphicObjects/Border.cs +++ b/src/GraphicObjects/Border.cs @@ -25,7 +25,7 @@ namespace Crow } } [XmlAttributeAttribute()][DefaultValue("White")] - public override Color Foreground { + public override Fill Foreground { get { return base.Foreground;} set {base.Foreground = value;} } @@ -52,13 +52,13 @@ namespace Crow if (BorderWidth > 0) rBack.Inflate (-BorderWidth / 2); - gr.SetSourceColor(Background); - CairoHelpers.CairoRectangle(gr,rBack,CornerRadius); + Background.SetAsSource (gr, rBack); + CairoHelpers.CairoRectangle(gr, rBack, CornerRadius); gr.Fill (); if (BorderWidth > 0) { gr.LineWidth = BorderWidth; - gr.SetSourceColor(Foreground); + Foreground.SetAsSource (gr, rBack); CairoHelpers.CairoRectangle(gr, rBack, CornerRadius); gr.Stroke (); } diff --git a/src/GraphicObjects/GraduatedSlider.cs b/src/GraphicObjects/GraduatedSlider.cs index 3d916a8c..b7a181e0 100644 --- a/src/GraphicObjects/GraduatedSlider.cs +++ b/src/GraphicObjects/GraduatedSlider.cs @@ -25,7 +25,7 @@ namespace Crow protected override void DrawGraduations(Context gr, PointD pStart, PointD pEnd) { Rectangle r = ClientRectangle; - gr.SetSourceColor(Foreground); + Foreground.SetAsSource (gr); gr.LineWidth = 2; gr.MoveTo(pStart); diff --git a/src/GraphicObjects/GraphicObject.cs b/src/GraphicObjects/GraphicObject.cs index 5613c0c9..7fd0e1ca 100644 --- a/src/GraphicObjects/GraphicObject.cs +++ b/src/GraphicObjects/GraphicObject.cs @@ -66,8 +66,8 @@ namespace Crow #region private fields ILayoutable _parent; string _name = "unamed"; - Color _background = Color.Transparent; - Color _foreground = Color.White; + Fill _background = Color.Transparent; + Fill _foreground = Color.White; Font _font = "droid, 10"; double _cornerRadius = 0; int _margin = 0; @@ -79,9 +79,6 @@ namespace Crow HorizontalAlignment _horizontalAlignment = HorizontalAlignment.Center; Size _maximumSize = "0;0"; Size _minimumSize = "0;0"; - - Picture _backgroundImage; - string _backgroundImagePath; #endregion #region public fields @@ -278,7 +275,7 @@ namespace Crow } } [XmlAttributeAttribute()][DefaultValue("Transparent")] - public virtual Color Background { + public virtual Fill Background { get { return _background; } set { if (_background == value) @@ -289,7 +286,7 @@ namespace Crow } } [XmlAttributeAttribute()][DefaultValue("White")] - public virtual Color Foreground { + public virtual Fill Foreground { get { return _foreground; } set { if (_foreground == value) @@ -415,7 +412,6 @@ namespace Crow name = xaa.AttributeName; continue; } - XmlIgnoreAttribute xia = o as XmlIgnoreAttribute; if (xia != null) continue; @@ -707,7 +703,7 @@ namespace Crow { Rectangle rBack = new Rectangle (Slot.Size); - Background.SetAsSource (gr); + Background.SetAsSource (gr, rBack); CairoHelpers.CairoRectangle(gr,rBack,_cornerRadius); gr.Fill (); } @@ -747,12 +743,15 @@ namespace Crow Rectangle rb = Parent.ContextCoordinates(Slot); using (ImageSurface source = new ImageSurface(bmp, Format.Argb32, Slot.Width, Slot.Height, 4 * Slot.Width)) { - if (this.Background == Color.Clear) { - ctx.Save (); - ctx.Operator = Operator.Clear; - ctx.Rectangle(rb); - ctx.Fill (); - ctx.Restore (); + //TODO:improve equality test for basic color and Fill + if (this.Background is SolidColor) { + if ((this.Background as SolidColor).Equals(Color.Clear)) { + ctx.Save (); + ctx.Operator = Operator.Clear; + ctx.Rectangle (rb); + ctx.Fill (); + ctx.Restore (); + } } ctx.SetSourceSurface (source, rb.X, rb.Y); ctx.Paint (); @@ -1146,16 +1145,16 @@ namespace Crow il.Emit(OpCodes.Ldstr,strcst); }else{ - //search for a static field in left operand type named 'rop name' - FieldInfo ropFi = lopT.GetField (rop, BindingFlags.Static|BindingFlags.Public); - if (ropFi != null) - { - il.Emit (OpCodes.Ldsfld, ropFi); - }else{ - //search if parsing methods are present - MethodInfo lopTryParseMi = lopT.GetMethod("TryParse"); - //TODO - } + if (lopT.IsEnum) + throw new NotImplementedException(); + + MethodInfo lopParseMi = lopT.GetMethod("Parse"); + if (lopParseMi == null) + throw new Exception (string.Format + ("GOML:no parse method found in: {0}", lopT.Name)); + il.Emit(OpCodes.Ldstr, rop); + il.Emit(OpCodes.Callvirt, lopParseMi); + il.Emit(OpCodes.Unbox_Any, lopT); } #endregion diff --git a/src/GraphicObjects/Group.cs b/src/GraphicObjects/Group.cs index e03399e9..087cd38d 100644 --- a/src/GraphicObjects/Group.cs +++ b/src/GraphicObjects/Group.cs @@ -188,8 +188,9 @@ namespace Crow protected override void onDraw (Context gr) { Rectangle rBack = new Rectangle (Slot.Size); - gr.SetSourceColor(Background); - CairoHelpers.CairoRectangle(gr,rBack,CornerRadius); + + Background.SetAsSource (gr, rBack); + CairoHelpers.CairoRectangle(gr, rBack, CornerRadius); gr.Fill (); foreach (GraphicObject g in Children) { @@ -225,9 +226,10 @@ namespace Crow clip.clearAndClip (gr); Rectangle rBack = Slot.Size; - gr.SetSourceColor(Background); - CairoHelpers.CairoRectangle(gr,rBack,CornerRadius); + Background.SetAsSource (gr, rBack); + CairoHelpers.CairoRectangle(gr, rBack, CornerRadius); gr.Fill (); + #if DEBUG_CLIP_RECTANGLE clip.stroke (gr, Color.Amaranth.AdjustAlpha (0.8)); #endif diff --git a/src/GraphicObjects/Label.cs b/src/GraphicObjects/Label.cs index 0b93924a..ee7dd045 100644 --- a/src/GraphicObjects/Label.cs +++ b/src/GraphicObjects/Label.cs @@ -106,7 +106,7 @@ namespace Crow this.registerForGraphicUpdate (); this.RegisterForLayouting ((int)LayoutingType.Sizing); - NotifyValueChanged ("Text", Text); + NotifyValueChanged ("Text", _text); } } [XmlAttributeAttribute()][DefaultValue(false)] @@ -122,7 +122,8 @@ namespace Crow registerForGraphicUpdate(); } } - [XmlIgnore]public int CurrentColumn{ + [XmlAttributeAttribute()][DefaultValue(0)] + public int CurrentColumn{ get { return _currentCol; } set { if (value == _currentCol) @@ -136,7 +137,8 @@ namespace Crow NotifyValueChanged ("CurrentColumn", _currentCol); } } - [XmlIgnore]public int CurrentLine{ + [XmlAttributeAttribute()][DefaultValue(0)] + public int CurrentLine{ get { return _currentLine; } set { if (value == _currentLine) @@ -150,7 +152,9 @@ namespace Crow NotifyValueChanged ("CurrentLine", _currentLine); } } - [XmlIgnore]public Point SelBegin { + //TODO:using HasFocus for drawing selection cause SelBegin and Release binding not to work + [XmlAttributeAttribute()][DefaultValue("-1")] + public Point SelBegin { get { return _selBegin; } @@ -158,10 +162,12 @@ namespace Crow if (value == _selBegin) return; _selBegin = value; + NotifyValueChanged ("SelBegin", _selBegin); NotifyValueChanged ("SelectedText", SelectedText); } } - [XmlIgnore]public Point SelRelease { + [XmlAttributeAttribute()][DefaultValue("-1")] + public Point SelRelease { get { return _selRelease; } @@ -169,6 +175,7 @@ namespace Crow if (value == _selRelease) return; _selRelease = value; + NotifyValueChanged ("SelRelease", _selRelease); NotifyValueChanged ("SelectedText", SelectedText); } } @@ -228,6 +235,7 @@ namespace Crow CurrentColumn = lines [CurrentLine].Count (); lines [CurrentLine] += lines [CurrentLine + 1]; lines.RemoveAt (CurrentLine + 1); + NotifyValueChanged ("Text", Text); return; } CurrentColumn--; @@ -251,6 +259,7 @@ namespace Crow SelBegin = -1; SelRelease = -1; } + NotifyValueChanged ("Text", Text); } /// <summary> /// Insert new string at caret position, should be sure no line break is inside. @@ -260,6 +269,7 @@ namespace Crow { lines [CurrentLine] = lines [CurrentLine].Insert (CurrentColumn, str); CurrentColumn += str.Length; + NotifyValueChanged ("Text", Text); } #region GraphicObject overrides @@ -483,7 +493,7 @@ namespace Crow if (HasFocus ) { - gr.SetSourceColor(Foreground); + Foreground.SetAsSource (gr); gr.LineWidth = 1.5; gr.MoveTo(new PointD(textCursorPos + rText.X, rText.Y + CurrentLine * fe.Height)); gr.LineTo(new PointD(textCursorPos + rText.X, rText.Y + (CurrentLine + 1) * fe.Height)); @@ -535,7 +545,7 @@ namespace Crow if (string.IsNullOrWhiteSpace (l)) continue; - gr.SetSourceColor(Foreground); + Foreground.SetAsSource (gr); gr.MoveTo (lineRect.X, rText.Y + fe.Ascent + fe.Height * i); #if _WIN32 || _WIN64 diff --git a/src/GraphicObjects/ProgressBar.cs b/src/GraphicObjects/ProgressBar.cs index c8dcbb77..c8165353 100644 --- a/src/GraphicObjects/ProgressBar.cs +++ b/src/GraphicObjects/ProgressBar.cs @@ -68,7 +68,7 @@ namespace Crow #region GraphicObject overrides [XmlAttributeAttribute()][DefaultValue("Gray")] - public override Color Background { + public override Fill Background { get { return base.Background; } set { base.Background = value; } } @@ -78,7 +78,7 @@ namespace Crow set { base.BorderWidth = value; } } [XmlAttributeAttribute()][DefaultValue("BlueCrayola")] - public override Color Foreground { + public override Fill Foreground { get { return base.Foreground; } set { base.Foreground = value; } } @@ -94,7 +94,7 @@ namespace Crow rBack.Width = (int)((double)rBack.Width / Maximum * Value); - gr.SetSourceColor(Foreground); + Foreground.SetAsSource (gr, rBack); CairoHelpers.CairoRectangle(gr,rBack,CornerRadius); gr.Fill(); diff --git a/src/GraphicObjects/Slider.cs b/src/GraphicObjects/Slider.cs index a931934a..f21202a8 100644 --- a/src/GraphicObjects/Slider.cs +++ b/src/GraphicObjects/Slider.cs @@ -32,7 +32,7 @@ namespace Crow #region private fields Rectangle cursor; int _cursorSize; - Color _cursorColor; + Fill _cursorColor; Orientation _orientation; bool holdCursor = false; #endregion @@ -40,33 +40,47 @@ namespace Crow protected double unity; #region Public properties - [XmlAttributeAttribute()][DefaultValue("BlueGray")] - public virtual Color CursorColor { + [XmlAttributeAttribute()][DefaultValue("vgradient|0:White|0,1:SteelBlue|0,9:SteelBlue|1:DimGray")] + public virtual Fill CursorColor { get { return _cursorColor; } set { + if (_cursorColor == value) + return; _cursorColor = value; registerForGraphicUpdate (); + NotifyValueChanged ("CursorColor", _cursorColor); } } [XmlAttributeAttribute()][DefaultValue(20)] public virtual int CursorSize { get { return _cursorSize; } set { + if (_cursorSize == value) + return; _cursorSize = value; + RegisterForLayouting ((int)LayoutingType.Sizing); registerForGraphicUpdate (); + NotifyValueChanged ("CursorSize", _cursorSize); } } [XmlAttributeAttribute()][DefaultValue(Orientation.Horizontal)] public virtual Orientation Orientation { get { return _orientation; } - set { _orientation = value; } + set { + if (_orientation == value) + return; + _orientation = value; + + RegisterForLayouting ((int)LayoutingType.All); + NotifyValueChanged ("Orientation", _orientation); + } } #endregion [XmlAttributeAttribute()][DefaultValue(10.0)] public override double Maximum { get { return base.Maximum; } - set { + set { if (value == base.Maximum) return; base.Maximum = value; @@ -75,12 +89,18 @@ namespace Crow } } + #region GraphicObject Overrides - [XmlAttributeAttribute()][DefaultValue("Gray")] - public override Color Background { + [XmlAttributeAttribute()][DefaultValue("vgradient|0:Black|0,1:Gray|0,9:Gray|1:LightGray")] + public override Fill Background { get { return base.Background; } set { base.Background = value; } } + [XmlAttributeAttribute()][DefaultValue("Gray")] + public override Fill Foreground { + get { return base.Foreground; } + set { base.Foreground = value; } + } [XmlAttributeAttribute()][DefaultValue(true)] public override bool Focusable { @@ -120,7 +140,7 @@ namespace Crow protected virtual void DrawGraduations(Context gr, PointD pStart, PointD pEnd) { - gr.SetSourceColor(Foreground); + Foreground.SetAsSource (gr); gr.LineWidth = 1; gr.MoveTo(pStart); @@ -131,9 +151,9 @@ namespace Crow } protected virtual void DrawCursor(Context gr, Rectangle _cursor) { - gr.SetSourceColor(CursorColor); + CursorColor.SetAsSource (gr, _cursor); CairoHelpers.CairoRectangle (gr, _cursor, CornerRadius); - gr.FillPreserve(); + gr.Fill(); } void computeCursorPosition() diff --git a/src/GraphicObjects/TextBox.cs b/src/GraphicObjects/TextBox.cs index 6af75f1e..d9003b61 100644 --- a/src/GraphicObjects/TextBox.cs +++ b/src/GraphicObjects/TextBox.cs @@ -45,12 +45,12 @@ namespace Crow set { base.Focusable = value; } } [XmlAttributeAttribute()][DefaultValue("White")] - public override Color Background { + public override Fill Background { get { return base.Background; } set { base.Background = value; } } [XmlAttributeAttribute()][DefaultValue("Black")] - public override Color Foreground { + public override Fill Foreground { get { return base.Foreground; } set { base.Foreground = value; } } diff --git a/src/GraphicObjects/TextRun.cs b/src/GraphicObjects/TextRun.cs index 1c539c67..bee580b3 100644 --- a/src/GraphicObjects/TextRun.cs +++ b/src/GraphicObjects/TextRun.cs @@ -313,7 +313,7 @@ namespace Crow continue; } - gr.SetSourceColor (Foreground); + Foreground.SetAsSource (gr); gr.MoveTo (rText.X, rText.Y + fe.Ascent + fe.Height * curLineCount); #if _WIN32 || _WIN64 diff --git a/src/Picture.cs b/src/Picture.cs index c1d83061..6e928e6c 100644 --- a/src/Picture.cs +++ b/src/Picture.cs @@ -24,7 +24,7 @@ using Cairo; namespace Crow { - public abstract class Picture + public abstract class Picture : Fill { public string Path; public Size Dimensions; diff --git a/src/Point.cs b/src/Point.cs index 369cf01d..76beaa99 100644 --- a/src/Point.cs +++ b/src/Point.cs @@ -130,7 +130,7 @@ namespace Crow public override string ToString() { - return string.Format("({0},{1})", X, Y); + return string.Format("({0};{1})", X, Y); } public override bool Equals(object obj) @@ -141,6 +141,19 @@ namespace Crow { return base.GetHashCode(); } + public static Point Parse(string s) + { + if (string.IsNullOrEmpty (s)) + return default(Point); + string[] d = s.Trim().Split(';'); + if (d.Length == 2) + return new Point (int.Parse (d [0]), int.Parse (d [1])); + else if (d.Length == 1) { + int tmp = int.Parse (d [0]); + return new Point (tmp, tmp); + } + throw new Exception ("Crow.Point Parsing Error: " + s); + } } } diff --git a/src/Rectangle.cs b/src/Rectangle.cs index ea410ff3..c0b98520 100644 --- a/src/Rectangle.cs +++ b/src/Rectangle.cs @@ -233,10 +233,7 @@ namespace Crow } } - public static Rectangle Zero - { - get { return new Rectangle(0, 0, 0, 0); } - } + public static readonly Rectangle Zero = new Rectangle(0, 0, 0, 0); public static Rectangle Empty { get { return Zero; } diff --git a/src/SolidColor.cs b/src/SolidColor.cs new file mode 100644 index 00000000..7a1178cc --- /dev/null +++ b/src/SolidColor.cs @@ -0,0 +1,96 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Xml.Serialization; +using System.Reflection; +using System.Diagnostics; + + + +namespace Crow +{ + public class SolidColor : Fill + { + Color color = Color.Transparent; + #region CTOR + public SolidColor(Color c) + { + color = c; + } + #endregion + + #region implemented abstract members of Fill + + public override void SetAsSource (Cairo.Context ctx, Rectangle bounds = default(Rectangle)) + { + ctx.SetSourceRGBA (color.R, color.G, color.B, color.A); + } + public static object Parse(string s) + { + return new SolidColor((Color)s); + } + #endregion + + #region Operators + public static implicit operator Color(SolidColor c) + { + return c.color; + } + public static implicit operator SolidColor(Color c) + { + return new SolidColor (c); + } + public static bool operator ==(SolidColor left, SolidColor right) + { + return left.color == right.color ? true : false; + } + public static bool operator !=(SolidColor left, SolidColor right) + { + return left.color == right.color ? false : true; + + } + public override bool Equals (object obj) + { + if (obj is Crow.Color) + return color == (Color)obj; + if (obj is SolidColor) + return color == (obj as SolidColor).color; + return false; + } +// public static bool operator ==(SolidColor c, string n) +// { +// return c.color.Name == n ? true : false; +// } +// public static bool operator !=(SolidColor c, string n) +// { +// return c.color.Name == n ? false : true; +// } +// public static bool operator ==(string n, SolidColor c) +// { +// return c.color.Name == n ? true : false; +// } +// public static bool operator !=(string n, SolidColor c) +// { +// return c.color.Name == n ? false : true; +// } + public static SolidColor operator *(SolidColor c, Double f) + { + return new SolidColor(new Color(c.color.R,c.color.G,c.color.B,c.color.A * f)); + } + public static SolidColor operator +(SolidColor c1, SolidColor c2) + { + return new SolidColor(new Color(c1.color.R + c2.color.R,c1.color.G + c2.color.G,c1.color.B + c2.color.B,c1.color.A + c2.color.A)); + } + public static SolidColor operator -(SolidColor c1, SolidColor c2) + { + return new SolidColor(new Color(c1.color.R - c2.color.R,c1.color.G - c2.color.G,c1.color.B - c2.color.B,c1.color.A - c2.color.A)); + } + #endregion + + public override string ToString() + { + return color.ToString (); + } + } +} diff --git a/src/SvgPicture.cs b/src/SvgPicture.cs index 38781a1c..19ace4db 100644 --- a/src/SvgPicture.cs +++ b/src/SvgPicture.cs @@ -41,6 +41,38 @@ namespace Crow Dimensions = new Size (hSVG.Dimensions.Width, hSVG.Dimensions.Height); } } + + #region implemented abstract members of Fill + + public override void SetAsSource (Context ctx, Rectangle bounds = default(Rectangle)) + { + float widthRatio = 1f; + float heightRatio = 1f; + + if (Scaled){ + widthRatio = (float)bounds.Width / Dimensions.Width; + heightRatio = (float)bounds.Height / Dimensions.Height; + } + + if (KeepProportions) { + if (widthRatio < heightRatio) + heightRatio = widthRatio; + else + widthRatio = heightRatio; + } + + using (ImageSurface tmp = new ImageSurface (Format.Argb32, bounds.Width, bounds.Height)) { + using (Cairo.Context gr = new Context (tmp)) { + gr.Translate (bounds.Left, bounds.Top); + gr.Scale (widthRatio, heightRatio); + gr.Translate ((bounds.Width/widthRatio - Dimensions.Width)/2, (bounds.Height/heightRatio - Dimensions.Height)/2); + + hSVG.RenderCairo (gr); + } + ctx.SetSource (tmp); + } + } + #endregion public override void Paint (Cairo.Context gr, Rectangle rect, string subPart = "") { @@ -64,10 +96,6 @@ namespace Crow gr.Scale (widthRatio, heightRatio); gr.Translate (((float)rect.Width/widthRatio - Dimensions.Width)/2f, ((float)rect.Height/heightRatio - Dimensions.Height)/2f); - if (string.IsNullOrEmpty (subPart)) - hSVG.RenderCairo (gr); - else - hSVG.RenderCairoSub (gr, "#" + subPart); gr.Restore (); } } |