]> O.S.I.I.S - jp/crow.git/commitdiff
netcore support
authorJean-Philippe Bruyère <jp_bruyere@hotmail.com>
Mon, 10 Dec 2018 17:48:30 +0000 (18:48 +0100)
committerJean-Philippe Bruyère <jp_bruyere@hotmail.com>
Mon, 10 Dec 2018 17:48:30 +0000 (18:48 +0100)
677 files changed:
.gitignore
Crow.NetStd.sln [new file with mode: 0644]
Crow.OpenTK.nuspec [deleted file]
Crow.csproj [deleted file]
Crow.sln
Crow/Crow.NetStd.csproj [new file with mode: 0644]
Crow/Crow.csproj [new file with mode: 0644]
Crow/Default.style [new file with mode: 0644]
Crow/Icons/IconAlerte.svg [new file with mode: 0755]
Crow/Icons/Icon_no.svg [new file with mode: 0644]
Crow/Icons/assembly.svg [new file with mode: 0644]
Crow/Icons/checkbox.svg [new file with mode: 0644]
Crow/Icons/compiler_error.svg [new file with mode: 0644]
Crow/Icons/compiler_warning.svg [new file with mode: 0644]
Crow/Icons/compiler_warning_orange.svg [new file with mode: 0644]
Crow/Icons/copy-file.svg [new file with mode: 0644]
Crow/Icons/crow.svg [new file with mode: 0644]
Crow/Icons/crowproj.svg [new file with mode: 0644]
Crow/Icons/exit-symbol.svg [new file with mode: 0644]
Crow/Icons/exit2.svg [new file with mode: 0644]
Crow/Icons/expandable.svg [new file with mode: 0644]
Crow/Icons/file.svg [new file with mode: 0644]
Crow/Icons/folder.svg [new file with mode: 0644]
Crow/Icons/frame.svg [new file with mode: 0644]
Crow/Icons/iconInfo.svg [new file with mode: 0644]
Crow/Icons/level-up.svg [new file with mode: 0644]
Crow/Icons/maximize.svg [new file with mode: 0644]
Crow/Icons/minimize.svg [new file with mode: 0644]
Crow/Icons/normalize.svg [new file with mode: 0644]
Crow/Icons/open-file.svg [new file with mode: 0644]
Crow/Icons/paste-on-document.svg [new file with mode: 0644]
Crow/Icons/project.svg [new file with mode: 0644]
Crow/Icons/projectRef.svg [new file with mode: 0644]
Crow/Icons/question.svg [new file with mode: 0644]
Crow/Icons/radiobutton.svg [new file with mode: 0644]
Crow/Icons/scissors.svg [new file with mode: 0644]
Crow/Icons/updown.svg [new file with mode: 0644]
Crow/Icons/warning_construction.svg [new file with mode: 0644]
Crow/Images/Icons/Cursors/arrow [new file with mode: 0644]
Crow/Images/Icons/Cursors/bottom_left_corner [new file with mode: 0644]
Crow/Images/Icons/Cursors/bottom_right_corner [new file with mode: 0644]
Crow/Images/Icons/Cursors/cross [new file with mode: 0644]
Crow/Images/Icons/Cursors/hand [new file with mode: 0644]
Crow/Images/Icons/Cursors/help [new file with mode: 0644]
Crow/Images/Icons/Cursors/ibeam [new file with mode: 0644]
Crow/Images/Icons/Cursors/move [new file with mode: 0644]
Crow/Images/Icons/Cursors/sb_h_double_arrow [new file with mode: 0644]
Crow/Images/Icons/Cursors/sb_v_double_arrow [new file with mode: 0644]
Crow/Images/Icons/Cursors/top_left_corner [new file with mode: 0644]
Crow/Images/Icons/Cursors/top_right_corner [new file with mode: 0644]
Crow/Images/Icons/buttonB.svg [new file with mode: 0755]
Crow/Images/Icons/crow.png [new file with mode: 0644]
Crow/Images/Icons/exit.svg [new file with mode: 0644]
Crow/Images/Icons/file.svg [new file with mode: 0644]
Crow/Images/Icons/folder.svg [new file with mode: 0644]
Crow/Images/Icons/member.svg [new file with mode: 0644]
Crow/Images/Icons/tetra.png [new file with mode: 0644]
Crow/Images/button.svg [new file with mode: 0644]
Crow/Images/crow0.svg [new file with mode: 0644]
Crow/Images/meter.svg [new file with mode: 0755]
Crow/Images/screenshot.png [new file with mode: 0644]
Crow/Images/screenshot2.png [new file with mode: 0644]
Crow/Templates/ArrowBut.template [new file with mode: 0755]
Crow/Templates/Button.template [new file with mode: 0755]
Crow/Templates/CheckBox.template [new file with mode: 0755]
Crow/Templates/CheckBox2.template [new file with mode: 0644]
Crow/Templates/ColorPicker.template [new file with mode: 0755]
Crow/Templates/ComboBox.template [new file with mode: 0755]
Crow/Templates/ContextMenu.template [new file with mode: 0644]
Crow/Templates/DefaultItem.template [new file with mode: 0755]
Crow/Templates/DirectoryView.template [new file with mode: 0755]
Crow/Templates/DockWindow.template [new file with mode: 0755]
Crow/Templates/Expandable.template [new file with mode: 0755]
Crow/Templates/FileDialog.template [new file with mode: 0644]
Crow/Templates/FileItems.template [new file with mode: 0644]
Crow/Templates/GroupBox.template [new file with mode: 0755]
Crow/Templates/HScrollBar.template [new file with mode: 0755]
Crow/Templates/ListBox.template [new file with mode: 0755]
Crow/Templates/Menu.template [new file with mode: 0644]
Crow/Templates/MenuItem.template [new file with mode: 0644]
Crow/Templates/MessageBox.template [new file with mode: 0644]
Crow/Templates/Popper.template [new file with mode: 0755]
Crow/Templates/RadioButton.template [new file with mode: 0755]
Crow/Templates/ScrollBar.template [new file with mode: 0755]
Crow/Templates/ScrollingListBox.template [new file with mode: 0644]
Crow/Templates/Slider.template [new file with mode: 0755]
Crow/Templates/Spinner.template [new file with mode: 0755]
Crow/Templates/TabItem.template [new file with mode: 0644]
Crow/Templates/ToolWindow.template [new file with mode: 0755]
Crow/Templates/Tooltip.template [new file with mode: 0644]
Crow/Templates/TreeView.template [new file with mode: 0644]
Crow/Templates/Window.template [new file with mode: 0755]
Crow/Templates/imgItem.template [new file with mode: 0755]
Crow/Templates/treeList.template [new file with mode: 0755]
Crow/crow.key [new file with mode: 0644]
Crow/obj/Crow.NetStd.csproj.nuget.cache [new file with mode: 0644]
Crow/obj/Crow.NetStd.csproj.nuget.g.props [new file with mode: 0644]
Crow/obj/Crow.NetStd.csproj.nuget.g.targets [new file with mode: 0644]
Crow/obj/project.assets.json [new file with mode: 0644]
Crow/src/BmpPicture.cs [new file with mode: 0644]
Crow/src/BubblingMouseButtonEventArgs.cs [new file with mode: 0644]
Crow/src/Cairo/CairoHelpers.cs [new file with mode: 0644]
Crow/src/Colors.cs [new file with mode: 0644]
Crow/src/Command.cs [new file with mode: 0644]
Crow/src/CompilerServices/CompilerServices.cs [new file with mode: 0644]
Crow/src/Configuration.cs [new file with mode: 0644]
Crow/src/CrowThread.cs [new file with mode: 0644]
Crow/src/DragDropEventArgs.cs [new file with mode: 0644]
Crow/src/DynAttribute.cs [new file with mode: 0644]
Crow/src/Enums.cs [new file with mode: 0644]
Crow/src/ExtensionsMethods.cs [new file with mode: 0644]
Crow/src/Fill/Fill.cs [new file with mode: 0644]
Crow/src/Font.cs [new file with mode: 0644]
Crow/src/Gradient.cs [new file with mode: 0644]
Crow/src/GraphicObjects/Border.cs [new file with mode: 0644]
Crow/src/GraphicObjects/Button.cs [new file with mode: 0644]
Crow/src/GraphicObjects/CheckBox.cs [new file with mode: 0644]
Crow/src/GraphicObjects/ColorPicker.cs [new file with mode: 0644]
Crow/src/GraphicObjects/ColorSelector.cs [new file with mode: 0644]
Crow/src/GraphicObjects/ComboBox.cs [new file with mode: 0644]
Crow/src/GraphicObjects/Container.cs [new file with mode: 0644]
Crow/src/GraphicObjects/DataSourceChangeEventArgs.cs [new file with mode: 0644]
Crow/src/GraphicObjects/DirectoryView.cs [new file with mode: 0644]
Crow/src/GraphicObjects/DockStack.cs [new file with mode: 0644]
Crow/src/GraphicObjects/DockWindow.cs [new file with mode: 0644]
Crow/src/GraphicObjects/Expandable.cs [new file with mode: 0644]
Crow/src/GraphicObjects/FileDialog.cs [new file with mode: 0644]
Crow/src/GraphicObjects/GenericStack.cs [new file with mode: 0644]
Crow/src/GraphicObjects/GraduatedSlider.cs [new file with mode: 0644]
Crow/src/GraphicObjects/GraphicObject.cs [new file with mode: 0644]
Crow/src/GraphicObjects/Grid.cs [new file with mode: 0644]
Crow/src/GraphicObjects/Group.cs [new file with mode: 0644]
Crow/src/GraphicObjects/GroupBox.cs [new file with mode: 0644]
Crow/src/GraphicObjects/HorizontalStack.cs [new file with mode: 0644]
Crow/src/GraphicObjects/HueSelector.cs [new file with mode: 0644]
Crow/src/GraphicObjects/ILayoutable.cs [new file with mode: 0644]
Crow/src/GraphicObjects/IMLContainer.cs [new file with mode: 0644]
Crow/src/GraphicObjects/IValueChange.cs [new file with mode: 0644]
Crow/src/GraphicObjects/Image.cs [new file with mode: 0644]
Crow/src/GraphicObjects/Label.cs [new file with mode: 0644]
Crow/src/GraphicObjects/ListBox.cs [new file with mode: 0644]
Crow/src/GraphicObjects/Menu.cs [new file with mode: 0644]
Crow/src/GraphicObjects/MenuItem.cs [new file with mode: 0644]
Crow/src/GraphicObjects/MessageBox.cs [new file with mode: 0644]
Crow/src/GraphicObjects/NumericControl.cs [new file with mode: 0644]
Crow/src/GraphicObjects/Popper.cs [new file with mode: 0644]
Crow/src/GraphicObjects/PrivateContainer.cs [new file with mode: 0644]
Crow/src/GraphicObjects/ProgressBar.cs [new file with mode: 0644]
Crow/src/GraphicObjects/RadioButton.cs [new file with mode: 0644]
Crow/src/GraphicObjects/SaturationValueSelector.cs [new file with mode: 0644]
Crow/src/GraphicObjects/ScrollBar.cs [new file with mode: 0644]
Crow/src/GraphicObjects/Scroller.cs [new file with mode: 0644]
Crow/src/GraphicObjects/ScrollingObject.cs [new file with mode: 0644]
Crow/src/GraphicObjects/Shape.cs [new file with mode: 0644]
Crow/src/GraphicObjects/Slider.cs [new file with mode: 0644]
Crow/src/GraphicObjects/Spinner.cs [new file with mode: 0644]
Crow/src/GraphicObjects/Splitter.cs [new file with mode: 0644]
Crow/src/GraphicObjects/TabItem.cs [new file with mode: 0644]
Crow/src/GraphicObjects/TabView.cs [new file with mode: 0644]
Crow/src/GraphicObjects/TemplatedContainer.cs [new file with mode: 0644]
Crow/src/GraphicObjects/TemplatedControl.cs [new file with mode: 0644]
Crow/src/GraphicObjects/TemplatedGroup.cs [new file with mode: 0644]
Crow/src/GraphicObjects/TestCairoPatch.cs [new file with mode: 0644]
Crow/src/GraphicObjects/TextBox.cs [new file with mode: 0644]
Crow/src/GraphicObjects/TextRun.cs [new file with mode: 0644]
Crow/src/GraphicObjects/TreeView.cs [new file with mode: 0644]
Crow/src/GraphicObjects/Trend.cs [new file with mode: 0644]
Crow/src/GraphicObjects/VerticalStack.cs [new file with mode: 0644]
Crow/src/GraphicObjects/Window.cs [new file with mode: 0644]
Crow/src/GraphicObjects/Wrapper.cs [new file with mode: 0644]
Crow/src/GraphicObjects/XmlIgnoreAttribute.cs [new file with mode: 0644]
Crow/src/IListChanged.cs [new file with mode: 0644]
Crow/src/IML/BindingDefinition.cs [new file with mode: 0644]
Crow/src/IML/BindingMember.cs [new file with mode: 0644]
Crow/src/IML/EventBinding.cs [new file with mode: 0644]
Crow/src/IML/IMLContext.cs [new file with mode: 0644]
Crow/src/IML/MemberAddress.cs [new file with mode: 0644]
Crow/src/IML/Node.cs [new file with mode: 0644]
Crow/src/IML/NodeAddress.cs [new file with mode: 0644]
Crow/src/IML/NodeStack.cs [new file with mode: 0644]
Crow/src/IMLAttributes.cs [new file with mode: 0644]
Crow/src/Input/ButtonState.cs [new file with mode: 0644]
Crow/src/Input/Buttons.cs [new file with mode: 0644]
Crow/src/Input/Key.cs [new file with mode: 0644]
Crow/src/Input/KeyEventArgs.cs [new file with mode: 0644]
Crow/src/Input/KeyPressEventArgs.cs [new file with mode: 0644]
Crow/src/Input/MouseButton.cs [new file with mode: 0644]
Crow/src/Input/MouseEventArgs.cs [new file with mode: 0644]
Crow/src/Input/MouseScroll.cs [new file with mode: 0644]
Crow/src/Input/MouseState.cs [new file with mode: 0644]
Crow/src/Instantiator.cs [new file with mode: 0644]
Crow/src/Interface.cs [new file with mode: 0644]
Crow/src/ItemTemplate.cs [new file with mode: 0644]
Crow/src/LayoutingEventArgs.cs [new file with mode: 0644]
Crow/src/LayoutingQueueItem.cs [new file with mode: 0644]
Crow/src/Measure.cs [new file with mode: 0644]
Crow/src/Mono.Cairo/Antialias.cs [new file with mode: 0644]
Crow/src/Mono.Cairo/Cairo.cs [new file with mode: 0644]
Crow/src/Mono.Cairo/CairoDebug.cs [new file with mode: 0644]
Crow/src/Mono.Cairo/Content.cs [new file with mode: 0644]
Crow/src/Mono.Cairo/Context.cs [new file with mode: 0644]
Crow/src/Mono.Cairo/DRMDevice.cs [new file with mode: 0644]
Crow/src/Mono.Cairo/DRMSurface.cs [new file with mode: 0644]
Crow/src/Mono.Cairo/Device.cs [new file with mode: 0644]
Crow/src/Mono.Cairo/DirectFBSurface.cs [new file with mode: 0644]
Crow/src/Mono.Cairo/Distance.cs [new file with mode: 0644]
Crow/src/Mono.Cairo/EGLDevice.cs [new file with mode: 0644]
Crow/src/Mono.Cairo/Extend.cs [new file with mode: 0644]
Crow/src/Mono.Cairo/FillRule.cs [new file with mode: 0644]
Crow/src/Mono.Cairo/Filter.cs [new file with mode: 0644]
Crow/src/Mono.Cairo/FontExtents.cs [new file with mode: 0644]
Crow/src/Mono.Cairo/FontFace.cs [new file with mode: 0644]
Crow/src/Mono.Cairo/FontOptions.cs [new file with mode: 0644]
Crow/src/Mono.Cairo/FontSlant.cs [new file with mode: 0644]
Crow/src/Mono.Cairo/FontType.cs [new file with mode: 0644]
Crow/src/Mono.Cairo/FontWeight.cs [new file with mode: 0644]
Crow/src/Mono.Cairo/Format.cs [new file with mode: 0644]
Crow/src/Mono.Cairo/GLSurface.cs [new file with mode: 0644]
Crow/src/Mono.Cairo/GLXDevice.cs [new file with mode: 0644]
Crow/src/Mono.Cairo/GlitzSurface.cs [new file with mode: 0644]
Crow/src/Mono.Cairo/Glyph.cs [new file with mode: 0644]
Crow/src/Mono.Cairo/Gradient.cs [new file with mode: 0644]
Crow/src/Mono.Cairo/HintMetrics.cs [new file with mode: 0644]
Crow/src/Mono.Cairo/HintStyle.cs [new file with mode: 0644]
Crow/src/Mono.Cairo/ImageSurface.cs [new file with mode: 0644]
Crow/src/Mono.Cairo/LineCap.cs [new file with mode: 0644]
Crow/src/Mono.Cairo/LineJoin.cs [new file with mode: 0644]
Crow/src/Mono.Cairo/LinearGradient.cs [new file with mode: 0644]
Crow/src/Mono.Cairo/Matrix.cs [new file with mode: 0644]
Crow/src/Mono.Cairo/MeshPattern.cs [new file with mode: 0644]
Crow/src/Mono.Cairo/NativeMethods-internal.cs [new file with mode: 0644]
Crow/src/Mono.Cairo/NativeMethods.cs [new file with mode: 0644]
Crow/src/Mono.Cairo/Operator.cs [new file with mode: 0644]
Crow/src/Mono.Cairo/PSSurface.cs [new file with mode: 0644]
Crow/src/Mono.Cairo/Path.cs [new file with mode: 0644]
Crow/src/Mono.Cairo/Pattern.cs [new file with mode: 0644]
Crow/src/Mono.Cairo/PatternType.cs [new file with mode: 0644]
Crow/src/Mono.Cairo/PdfSurface.cs [new file with mode: 0644]
Crow/src/Mono.Cairo/Point.cs [new file with mode: 0644]
Crow/src/Mono.Cairo/PointD.cs [new file with mode: 0644]
Crow/src/Mono.Cairo/RadialGradient.cs [new file with mode: 0644]
Crow/src/Mono.Cairo/Region.cs [new file with mode: 0644]
Crow/src/Mono.Cairo/ScaledFont.cs [new file with mode: 0644]
Crow/src/Mono.Cairo/SolidPattern.cs [new file with mode: 0644]
Crow/src/Mono.Cairo/Status.cs [new file with mode: 0644]
Crow/src/Mono.Cairo/SubpixelOrder.cs [new file with mode: 0644]
Crow/src/Mono.Cairo/Surface.cs [new file with mode: 0644]
Crow/src/Mono.Cairo/SurfacePattern.cs [new file with mode: 0644]
Crow/src/Mono.Cairo/SurfaceType.cs [new file with mode: 0644]
Crow/src/Mono.Cairo/SvgSurface.cs [new file with mode: 0644]
Crow/src/Mono.Cairo/SvgVersion.cs [new file with mode: 0644]
Crow/src/Mono.Cairo/TextExtents.cs [new file with mode: 0644]
Crow/src/Mono.Cairo/WGLDevice.cs [new file with mode: 0644]
Crow/src/Mono.Cairo/Win32Surface.cs [new file with mode: 0644]
Crow/src/Mono.Cairo/XcbSurface.cs [new file with mode: 0644]
Crow/src/Mono.Cairo/XlibSurface.cs [new file with mode: 0644]
Crow/src/MouseCursorChangedEventArgs.cs [new file with mode: 0644]
Crow/src/ObservableList.cs [new file with mode: 0644]
Crow/src/ParsingException.cs [new file with mode: 0644]
Crow/src/PerformanceMeasure.cs [new file with mode: 0644]
Crow/src/Picture.cs [new file with mode: 0644]
Crow/src/Point.cs [new file with mode: 0644]
Crow/src/Rectangle.cs [new file with mode: 0644]
Crow/src/ReflexionExtensions.cs [new file with mode: 0644]
Crow/src/ScrollingEventArgs.cs [new file with mode: 0644]
Crow/src/SelectionChangeEventArgs.cs [new file with mode: 0644]
Crow/src/Size.cs [new file with mode: 0644]
Crow/src/SolidColor.cs [new file with mode: 0644]
Crow/src/Style.cs [new file with mode: 0644]
Crow/src/StyleReader.cs [new file with mode: 0644]
Crow/src/SvgPicture.cs [new file with mode: 0644]
Crow/src/TextChangeEventArgs.cs [new file with mode: 0644]
Crow/src/ValueChangeEventArgs.cs [new file with mode: 0644]
Crow/src/XCursor.cs [new file with mode: 0644]
Crow/src/backends/IBackend.cs [new file with mode: 0644]
Crow/src/backends/IKeyboard.cs [new file with mode: 0644]
Crow/src/backends/xcb/XCBBackend.cs [new file with mode: 0644]
Crow/src/backends/xcb/XCBKeyboard.cs [new file with mode: 0644]
Crow/src/backends/xlib/X11Keyboard.cs [new file with mode: 0644]
Crow/src/backends/xlib/X11Structs.cs [new file with mode: 0644]
Crow/src/backends/xlib/XKeySym.cs [new file with mode: 0644]
Crow/src/backends/xlib/XLibBackend.cs [new file with mode: 0644]
Crow/src/debug/DbgEventTypeColors.cs [new file with mode: 0644]
Crow/src/debug/DbgLogViewer.cs [new file with mode: 0644]
Crow/src/debug/DebugLogger.cs [new file with mode: 0644]
Crow/src/rsvg/DimensionData.cs [new file with mode: 0644]
Crow/src/rsvg/Global.cs [new file with mode: 0644]
Crow/src/rsvg/Handle.cs [new file with mode: 0644]
Crow/src/win32/Win32.cs [new file with mode: 0644]
Crow/src/win32/winApi.cs [new file with mode: 0755]
CrowIDE/CrowIDE.NetStd.csproj [new file with mode: 0644]
CrowIDE/CrowIDE.csproj
CrowIDE/DefaultTemplateOverrides/ContextMenu.template [new file with mode: 0644]
CrowIDE/DefaultTemplateOverrides/MenuItem.template [new file with mode: 0644]
CrowIDE/DefaultTemplateOverrides/TabItem.template [new file with mode: 0644]
CrowIDE/IDE.style [new file with mode: 0644]
CrowIDE/icons/basic_floppydisk.svg [new file with mode: 0644]
CrowIDE/icons/blank-file.svg
CrowIDE/icons/center-align.svg [new file with mode: 0644]
CrowIDE/icons/cogwheel.svg [new file with mode: 0644]
CrowIDE/icons/cs-file.svg [new file with mode: 0644]
CrowIDE/icons/drawsvg.svg [new file with mode: 0644]
CrowIDE/icons/edit.svg
CrowIDE/icons/file-code.svg [new file with mode: 0644]
CrowIDE/icons/folder.svg
CrowIDE/icons/font-file.svg [new file with mode: 0644]
CrowIDE/icons/light-bulb.svg
CrowIDE/icons/paragraph.svg [new file with mode: 0644]
CrowIDE/icons/previous.svg [new file with mode: 0644]
CrowIDE/icons/reply.svg [new file with mode: 0644]
CrowIDE/icons/search.svg
CrowIDE/icons/share-arrow.svg [new file with mode: 0644]
CrowIDE/icons/sign-out.svg [new file with mode: 0644]
CrowIDE/icons/text-file.svg
CrowIDE/icons/text-label.svg [new file with mode: 0644]
CrowIDE/icons/tools.svg
CrowIDE/icons/xml-file.svg [new file with mode: 0644]
CrowIDE/icons/zoom-in.svg
CrowIDE/icons/zoom-out.svg
CrowIDE/src/CrowIDE.cs
CrowIDE/src/Editors/ImlVisualEditor.cs
CrowIDE/src/Extensions.cs
CrowIDE/src/GraphicObjectDesignContainer.cs
CrowIDE/src/Project.cs
CrowIDE/src/ProjectTree/ProjectFile.cs
CrowIDE/src/ProjectTree/ProjectItem.cs
CrowIDE/src/ProjectTree/ProjectNodes.cs
CrowIDE/ui/CategoryExp.template
CrowIDE/ui/ContextMenu.template [deleted file]
CrowIDE/ui/DockWindows/winEditor.crow
CrowIDE/ui/DockWindows/winProperties.crow
CrowIDE/ui/DockWindows/winSolution.crow
CrowIDE/ui/IDE.style [deleted file]
CrowIDE/ui/IcoBut.template
CrowIDE/ui/ItemTemplates/Enum.template
CrowIDE/ui/MembersItem.template
CrowIDE/ui/MembersView.template
CrowIDE/ui/MenuItem.template [deleted file]
CrowIDE/ui/ProjectTree.template
CrowIDE/ui/TabItem.template [deleted file]
CrowIDE/ui/TreeExpandable.template
CrowIDE/ui/editors/EditPaneItems.template
CrowIDE/ui/editors/EditTabItem.template
CrowIDE/ui/editors/IMLEdit.itemp
CrowIDE/ui/editors/SourceEditor.crow
CrowIDE/ui/editors/SrcEdit.itemp
CrowIDE/ui/editors/SvgEdit.itemp
CrowIDE/ui/editors/TextEditor.crow
CrowIDE/ui/icons/basic_floppydisk.svg [deleted file]
CrowIDE/ui/icons/blank-file.svg [deleted file]
CrowIDE/ui/icons/center-align.svg [deleted file]
CrowIDE/ui/icons/cogwheel.svg [deleted file]
CrowIDE/ui/icons/edit.svg [deleted file]
CrowIDE/ui/icons/file-code.svg [deleted file]
CrowIDE/ui/icons/folder.svg [deleted file]
CrowIDE/ui/icons/font-file.svg [deleted file]
CrowIDE/ui/icons/light-bulb.svg [deleted file]
CrowIDE/ui/icons/paragraph.svg [deleted file]
CrowIDE/ui/icons/previous.svg [deleted file]
CrowIDE/ui/icons/question.svg [deleted file]
CrowIDE/ui/icons/reply.svg [deleted file]
CrowIDE/ui/icons/search.svg [deleted file]
CrowIDE/ui/icons/share-arrow.svg [deleted file]
CrowIDE/ui/icons/sign-out.svg [deleted file]
CrowIDE/ui/icons/text-file.svg [deleted file]
CrowIDE/ui/icons/text-label.svg [deleted file]
CrowIDE/ui/icons/tools.svg [deleted file]
CrowIDE/ui/icons/zoom-in.svg [deleted file]
CrowIDE/ui/icons/zoom-out.svg [deleted file]
Default.style [deleted file]
Icons/Icon_no.svg [deleted file]
Icons/assembly.svg [deleted file]
Icons/compiler_error.svg [deleted file]
Icons/compiler_warning.svg [deleted file]
Icons/compiler_warning_orange.svg [deleted file]
Icons/copy-file.svg [deleted file]
Icons/crowproj.svg [deleted file]
Icons/exit-symbol.svg [deleted file]
Icons/file.svg [deleted file]
Icons/folder.svg [deleted file]
Icons/frame.svg [deleted file]
Icons/level-up.svg [deleted file]
Icons/open-file.svg [deleted file]
Icons/paste-on-document.svg [deleted file]
Icons/project.svg [deleted file]
Icons/projectRef.svg [deleted file]
Icons/question.svg [deleted file]
Icons/scissors.svg [deleted file]
Icons/warning_construction.svg [deleted file]
Images/Icons/Cursors/arrow [deleted file]
Images/Icons/Cursors/bottom_left_corner [deleted file]
Images/Icons/Cursors/bottom_right_corner [deleted file]
Images/Icons/Cursors/cross [deleted file]
Images/Icons/Cursors/hand [deleted file]
Images/Icons/Cursors/help [deleted file]
Images/Icons/Cursors/ibeam [deleted file]
Images/Icons/Cursors/move [deleted file]
Images/Icons/Cursors/sb_h_double_arrow [deleted file]
Images/Icons/Cursors/sb_v_double_arrow [deleted file]
Images/Icons/Cursors/top_left_corner [deleted file]
Images/Icons/Cursors/top_right_corner [deleted file]
Images/Icons/IconAlerte.svg [deleted file]
Images/Icons/buttonB.svg [deleted file]
Images/Icons/checkbox.svg [deleted file]
Images/Icons/crow.png [deleted file]
Images/Icons/crow.svg [deleted file]
Images/Icons/exit.svg [deleted file]
Images/Icons/exit2.svg [deleted file]
Images/Icons/expandable.svg [deleted file]
Images/Icons/file.svg [deleted file]
Images/Icons/folder.svg [deleted file]
Images/Icons/iconInfo.svg [deleted file]
Images/Icons/maximize.svg [deleted file]
Images/Icons/member.svg [deleted file]
Images/Icons/minimize.svg [deleted file]
Images/Icons/normalize.svg [deleted file]
Images/Icons/radiobutton.svg [deleted file]
Images/Icons/tetra.png [deleted file]
Images/Icons/updown.svg [deleted file]
Images/button.svg [deleted file]
Images/crow0.svg [deleted file]
Images/meter.svg [deleted file]
Images/screenshot.png [deleted file]
Images/screenshot2.png [deleted file]
Properties/AssemblyInfo.cs
Templates/ArrowBut.template [deleted file]
Templates/Button.template [deleted file]
Templates/CheckBox.template [deleted file]
Templates/CheckBox2.template [deleted file]
Templates/ColorPicker.template [deleted file]
Templates/ComboBox.template [deleted file]
Templates/ContextMenu.template [deleted file]
Templates/DefaultItem.template [deleted file]
Templates/DirectoryView.template [deleted file]
Templates/DockWindow.template [deleted file]
Templates/Expandable.template [deleted file]
Templates/FileDialog.template [deleted file]
Templates/FileItems.template [deleted file]
Templates/GroupBox.template [deleted file]
Templates/HScrollBar.template [deleted file]
Templates/ListBox.template [deleted file]
Templates/Menu.template [deleted file]
Templates/MenuItem.template [deleted file]
Templates/MessageBox.template [deleted file]
Templates/Popper.template [deleted file]
Templates/RadioButton.template [deleted file]
Templates/ScrollBar.template [deleted file]
Templates/ScrollingListBox.template [deleted file]
Templates/Slider.template [deleted file]
Templates/Spinner.template [deleted file]
Templates/TabItem.template [deleted file]
Templates/ToolWindow.template [deleted file]
Templates/Tooltip.template [deleted file]
Templates/TreeView.template [deleted file]
Templates/Window.template [deleted file]
Templates/imgItem.template [deleted file]
Templates/treeList.template [deleted file]
Tests/BasicTests.cs
Tests/GOLIBTest_DirViewer.cs [deleted file]
Tests/GOLIBTest_Listbox.cs [deleted file]
Tests/GOLIBTest_TypeViewer.cs [deleted file]
Tests/GOLIBTest_Window.cs [deleted file]
Tests/GOLIBTest_deviceOffset.cs [deleted file]
Tests/IValueChange.cs [deleted file]
Tests/Interfaces/Container/0.crow
Tests/Interfaces/Divers/0.crow
Tests/Interfaces/Divers/testImage.crow
Tests/Interfaces/Divers/welcome.crow
Tests/Interfaces/Experimental/DockWindow.template
Tests/Interfaces/TabItem.template
Tests/Interfaces/basicTests/7.crow
Tests/Interfaces/testBorder.goml.cs [deleted file]
Tests/Showcase.cs
Tests/Tests.NetStd.csproj [new file with mode: 0644]
Tests/Tests.csproj
Tests/test.style
Tests/testCairoXLib.cs [deleted file]
Tests/ui/test.style
crow.key [deleted file]
libs/OpenTK.dll [deleted file]
libs/OpenTK.dll.config [deleted file]
src/BmpPicture.cs [deleted file]
src/BubblingMouseButtonEventArgs.cs [deleted file]
src/Cairo/CairoHelpers.cs [deleted file]
src/Colors.cs [deleted file]
src/Command.cs [deleted file]
src/CompilerServices/CompilerServices.cs [deleted file]
src/Configuration.cs [deleted file]
src/CrowThread.cs [deleted file]
src/DragDropEventArgs.cs [deleted file]
src/DynAttribute.cs [deleted file]
src/Enums.cs [deleted file]
src/ExtensionsMethods.cs [deleted file]
src/Fill/Fill.cs [deleted file]
src/Font.cs [deleted file]
src/Gradient.cs [deleted file]
src/GraphicObjects/Border.cs [deleted file]
src/GraphicObjects/Button.cs [deleted file]
src/GraphicObjects/CheckBox.cs [deleted file]
src/GraphicObjects/ColorPicker.cs [deleted file]
src/GraphicObjects/ColorSelector.cs [deleted file]
src/GraphicObjects/ComboBox.cs [deleted file]
src/GraphicObjects/Container.cs [deleted file]
src/GraphicObjects/DataSourceChangeEventArgs.cs [deleted file]
src/GraphicObjects/DirectoryView.cs [deleted file]
src/GraphicObjects/DockStack.cs [deleted file]
src/GraphicObjects/DockWindow.cs [deleted file]
src/GraphicObjects/Expandable.cs [deleted file]
src/GraphicObjects/FileDialog.cs [deleted file]
src/GraphicObjects/GenericStack.cs [deleted file]
src/GraphicObjects/GraduatedSlider.cs [deleted file]
src/GraphicObjects/GraphicObject.cs [deleted file]
src/GraphicObjects/Grid.cs [deleted file]
src/GraphicObjects/Group.cs [deleted file]
src/GraphicObjects/GroupBox.cs [deleted file]
src/GraphicObjects/HorizontalStack.cs [deleted file]
src/GraphicObjects/HueSelector.cs [deleted file]
src/GraphicObjects/ILayoutable.cs [deleted file]
src/GraphicObjects/IMLContainer.cs [deleted file]
src/GraphicObjects/IValueChange.cs [deleted file]
src/GraphicObjects/Image.cs [deleted file]
src/GraphicObjects/Label.cs [deleted file]
src/GraphicObjects/ListBox.cs [deleted file]
src/GraphicObjects/Menu.cs [deleted file]
src/GraphicObjects/MenuItem.cs [deleted file]
src/GraphicObjects/MessageBox.cs [deleted file]
src/GraphicObjects/NumericControl.cs [deleted file]
src/GraphicObjects/Popper.cs [deleted file]
src/GraphicObjects/PrivateContainer.cs [deleted file]
src/GraphicObjects/ProgressBar.cs [deleted file]
src/GraphicObjects/RadioButton.cs [deleted file]
src/GraphicObjects/SaturationValueSelector.cs [deleted file]
src/GraphicObjects/ScrollBar.cs [deleted file]
src/GraphicObjects/Scroller.cs [deleted file]
src/GraphicObjects/ScrollingObject.cs [deleted file]
src/GraphicObjects/Shape.cs [deleted file]
src/GraphicObjects/Slider.cs [deleted file]
src/GraphicObjects/Spinner.cs [deleted file]
src/GraphicObjects/Splitter.cs [deleted file]
src/GraphicObjects/TabItem.cs [deleted file]
src/GraphicObjects/TabView.cs [deleted file]
src/GraphicObjects/TemplatedContainer.cs [deleted file]
src/GraphicObjects/TemplatedControl.cs [deleted file]
src/GraphicObjects/TemplatedGroup.cs [deleted file]
src/GraphicObjects/TestCairoPatch.cs [deleted file]
src/GraphicObjects/TextBox.cs [deleted file]
src/GraphicObjects/TextRun.cs [deleted file]
src/GraphicObjects/TreeView.cs [deleted file]
src/GraphicObjects/Trend.cs [deleted file]
src/GraphicObjects/VerticalStack.cs [deleted file]
src/GraphicObjects/Window.cs [deleted file]
src/GraphicObjects/Wrapper.cs [deleted file]
src/GraphicObjects/XmlIgnoreAttribute.cs [deleted file]
src/IListChanged.cs [deleted file]
src/IML/BindingDefinition.cs [deleted file]
src/IML/BindingMember.cs [deleted file]
src/IML/EventBinding.cs [deleted file]
src/IML/IMLContext.cs [deleted file]
src/IML/MemberAddress.cs [deleted file]
src/IML/Node.cs [deleted file]
src/IML/NodeAddress.cs [deleted file]
src/IML/NodeStack.cs [deleted file]
src/IML/Reader.cs [deleted file]
src/IMLAttributes.cs [deleted file]
src/Input/ButtonState.cs [deleted file]
src/Input/Buttons.cs [deleted file]
src/Input/Key.cs [deleted file]
src/Input/KeyEventArgs.cs [deleted file]
src/Input/KeyPressEventArgs.cs [deleted file]
src/Input/MouseButton.cs [deleted file]
src/Input/MouseEventArgs.cs [deleted file]
src/Input/MouseScroll.cs [deleted file]
src/Input/MouseState.cs [deleted file]
src/Instantiator.cs [deleted file]
src/Interface.cs [deleted file]
src/ItemTemplate.cs [deleted file]
src/LayoutingEventArgs.cs [deleted file]
src/LayoutingQueue.cs [deleted file]
src/LayoutingQueueItem.cs [deleted file]
src/Measure.cs [deleted file]
src/Mono.Cairo/Antialias.cs [deleted file]
src/Mono.Cairo/Cairo.cs [deleted file]
src/Mono.Cairo/CairoDebug.cs [deleted file]
src/Mono.Cairo/Content.cs [deleted file]
src/Mono.Cairo/Context.cs [deleted file]
src/Mono.Cairo/DRMDevice.cs [deleted file]
src/Mono.Cairo/DRMSurface.cs [deleted file]
src/Mono.Cairo/Device.cs [deleted file]
src/Mono.Cairo/DirectFBSurface.cs [deleted file]
src/Mono.Cairo/Distance.cs [deleted file]
src/Mono.Cairo/EGLDevice.cs [deleted file]
src/Mono.Cairo/Extend.cs [deleted file]
src/Mono.Cairo/FillRule.cs [deleted file]
src/Mono.Cairo/Filter.cs [deleted file]
src/Mono.Cairo/FontExtents.cs [deleted file]
src/Mono.Cairo/FontFace.cs [deleted file]
src/Mono.Cairo/FontOptions.cs [deleted file]
src/Mono.Cairo/FontSlant.cs [deleted file]
src/Mono.Cairo/FontType.cs [deleted file]
src/Mono.Cairo/FontWeight.cs [deleted file]
src/Mono.Cairo/Format.cs [deleted file]
src/Mono.Cairo/GLSurface.cs [deleted file]
src/Mono.Cairo/GLXDevice.cs [deleted file]
src/Mono.Cairo/GlitzSurface.cs [deleted file]
src/Mono.Cairo/Glyph.cs [deleted file]
src/Mono.Cairo/Gradient.cs [deleted file]
src/Mono.Cairo/HintMetrics.cs [deleted file]
src/Mono.Cairo/HintStyle.cs [deleted file]
src/Mono.Cairo/ImageSurface.cs [deleted file]
src/Mono.Cairo/LineCap.cs [deleted file]
src/Mono.Cairo/LineJoin.cs [deleted file]
src/Mono.Cairo/LinearGradient.cs [deleted file]
src/Mono.Cairo/Matrix.cs [deleted file]
src/Mono.Cairo/MeshPattern.cs [deleted file]
src/Mono.Cairo/NativeMethods-internal.cs [deleted file]
src/Mono.Cairo/NativeMethods.cs [deleted file]
src/Mono.Cairo/Operator.cs [deleted file]
src/Mono.Cairo/PSSurface.cs [deleted file]
src/Mono.Cairo/Path.cs [deleted file]
src/Mono.Cairo/Pattern.cs [deleted file]
src/Mono.Cairo/PatternType.cs [deleted file]
src/Mono.Cairo/PdfSurface.cs [deleted file]
src/Mono.Cairo/Point.cs [deleted file]
src/Mono.Cairo/PointD.cs [deleted file]
src/Mono.Cairo/RadialGradient.cs [deleted file]
src/Mono.Cairo/Region.cs [deleted file]
src/Mono.Cairo/ScaledFont.cs [deleted file]
src/Mono.Cairo/SolidPattern.cs [deleted file]
src/Mono.Cairo/Status.cs [deleted file]
src/Mono.Cairo/SubpixelOrder.cs [deleted file]
src/Mono.Cairo/Surface.cs [deleted file]
src/Mono.Cairo/SurfacePattern.cs [deleted file]
src/Mono.Cairo/SurfaceType.cs [deleted file]
src/Mono.Cairo/SvgSurface.cs [deleted file]
src/Mono.Cairo/SvgVersion.cs [deleted file]
src/Mono.Cairo/TextExtents.cs [deleted file]
src/Mono.Cairo/WGLDevice.cs [deleted file]
src/Mono.Cairo/Win32Surface.cs [deleted file]
src/Mono.Cairo/XcbSurface.cs [deleted file]
src/Mono.Cairo/XlibSurface.cs [deleted file]
src/MouseCursorChangedEventArgs.cs [deleted file]
src/ObservableList.cs [deleted file]
src/ParsingException.cs [deleted file]
src/PerformanceMeasure.cs [deleted file]
src/Picture.cs [deleted file]
src/Point.cs [deleted file]
src/Rectangle.cs [deleted file]
src/ReflexionExtensions.cs [deleted file]
src/ScrollingEventArgs.cs [deleted file]
src/SelectionChangeEventArgs.cs [deleted file]
src/Size.cs [deleted file]
src/SolidColor.cs [deleted file]
src/Style.cs [deleted file]
src/StyleReader.cs [deleted file]
src/SvgPicture.cs [deleted file]
src/TextChangeEventArgs.cs [deleted file]
src/ValueChangeEventArgs.cs [deleted file]
src/XCursor.cs [deleted file]
src/backends/Display.cs [deleted file]
src/backends/IBackend.cs [deleted file]
src/backends/IKeyboard.cs [deleted file]
src/backends/Window.cs [deleted file]
src/backends/xcb/XCBBackend.cs [deleted file]
src/backends/xcb/XCBKeyboard.cs [deleted file]
src/backends/xlib/X11Keyboard.cs [deleted file]
src/backends/xlib/X11Structs.cs [deleted file]
src/backends/xlib/XKeySym.cs [deleted file]
src/backends/xlib/XLibBackend.cs [deleted file]
src/debug/DbgEventTypeColors.cs [deleted file]
src/debug/DbgLogViewer.cs [deleted file]
src/debug/DebugLogViewer.cs [deleted file]
src/debug/DebugLogger.cs [deleted file]
src/rsvg/DimensionData.cs [deleted file]
src/rsvg/Global.cs [deleted file]
src/rsvg/Handle.cs [deleted file]
src/win32/Win32.cs [deleted file]
src/win32/winApi.cs [deleted file]

index 2f5de09419096635b261822890ace4d99b88b8fa..51107512c04ab7d53d4bc1887e105c24b1d16805 100644 (file)
@@ -5,6 +5,7 @@ Debug
 packages
 *.nupkg
 *.user
+.vs/
 /GOLib.suo
 /tmp
 /bin/*
diff --git a/Crow.NetStd.sln b/Crow.NetStd.sln
new file mode 100644 (file)
index 0000000..c12c637
--- /dev/null
@@ -0,0 +1,54 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 15
+VisualStudioVersion = 15.0.26124.0
+MinimumVisualStudioVersion = 15.0.26124.0
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Crow.NetStd", "Crow\Crow.NetStd.csproj", "{75BDE4C7-4BAF-4A03-B697-5D1370775E20}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tests.NetStd", "Tests\Tests.NetStd.csproj", "{28BAF8B8-6A6E-40D5-8E9C-E7C1165C59DD}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CrowIDE.NetStd", "CrowIDE\CrowIDE.NetStd.csproj", "{A01B3151-BC81-437C-B526-CC8DBB808638}"
+EndProject
+Global
+       GlobalSection(SolutionConfigurationPlatforms) = preSolution
+               Debug|Any CPU = Debug|Any CPU
+               Debug|x64 = Debug|x64
+               Debug|x86 = Debug|x86
+               Release|Any CPU = Release|Any CPU
+               Release|x64 = Release|x64
+               Release|x86 = Release|x86
+       EndGlobalSection
+       GlobalSection(SolutionProperties) = preSolution
+               HideSolutionNode = FALSE
+       EndGlobalSection
+       GlobalSection(ProjectConfigurationPlatforms) = postSolution
+               {75BDE4C7-4BAF-4A03-B697-5D1370775E20}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+               {75BDE4C7-4BAF-4A03-B697-5D1370775E20}.Debug|Any CPU.Build.0 = Debug|Any CPU
+               {75BDE4C7-4BAF-4A03-B697-5D1370775E20}.Release|Any CPU.ActiveCfg = Release|Any CPU
+               {75BDE4C7-4BAF-4A03-B697-5D1370775E20}.Release|Any CPU.Build.0 = Release|Any CPU
+               {28BAF8B8-6A6E-40D5-8E9C-E7C1165C59DD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+               {28BAF8B8-6A6E-40D5-8E9C-E7C1165C59DD}.Debug|Any CPU.Build.0 = Debug|Any CPU
+               {28BAF8B8-6A6E-40D5-8E9C-E7C1165C59DD}.Debug|x64.ActiveCfg = Debug|Any CPU
+               {28BAF8B8-6A6E-40D5-8E9C-E7C1165C59DD}.Debug|x64.Build.0 = Debug|Any CPU
+               {28BAF8B8-6A6E-40D5-8E9C-E7C1165C59DD}.Debug|x86.ActiveCfg = Debug|Any CPU
+               {28BAF8B8-6A6E-40D5-8E9C-E7C1165C59DD}.Debug|x86.Build.0 = Debug|Any CPU
+               {28BAF8B8-6A6E-40D5-8E9C-E7C1165C59DD}.Release|Any CPU.ActiveCfg = Release|Any CPU
+               {28BAF8B8-6A6E-40D5-8E9C-E7C1165C59DD}.Release|Any CPU.Build.0 = Release|Any CPU
+               {28BAF8B8-6A6E-40D5-8E9C-E7C1165C59DD}.Release|x64.ActiveCfg = Release|Any CPU
+               {28BAF8B8-6A6E-40D5-8E9C-E7C1165C59DD}.Release|x64.Build.0 = Release|Any CPU
+               {28BAF8B8-6A6E-40D5-8E9C-E7C1165C59DD}.Release|x86.ActiveCfg = Release|Any CPU
+               {28BAF8B8-6A6E-40D5-8E9C-E7C1165C59DD}.Release|x86.Build.0 = Release|Any CPU
+               {A01B3151-BC81-437C-B526-CC8DBB808638}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+               {A01B3151-BC81-437C-B526-CC8DBB808638}.Debug|Any CPU.Build.0 = Debug|Any CPU
+               {A01B3151-BC81-437C-B526-CC8DBB808638}.Debug|x64.ActiveCfg = Debug|Any CPU
+               {A01B3151-BC81-437C-B526-CC8DBB808638}.Debug|x64.Build.0 = Debug|Any CPU
+               {A01B3151-BC81-437C-B526-CC8DBB808638}.Debug|x86.ActiveCfg = Debug|Any CPU
+               {A01B3151-BC81-437C-B526-CC8DBB808638}.Debug|x86.Build.0 = Debug|Any CPU
+               {A01B3151-BC81-437C-B526-CC8DBB808638}.Release|Any CPU.ActiveCfg = Release|Any CPU
+               {A01B3151-BC81-437C-B526-CC8DBB808638}.Release|Any CPU.Build.0 = Release|Any CPU
+               {A01B3151-BC81-437C-B526-CC8DBB808638}.Release|x64.ActiveCfg = Release|Any CPU
+               {A01B3151-BC81-437C-B526-CC8DBB808638}.Release|x64.Build.0 = Release|Any CPU
+               {A01B3151-BC81-437C-B526-CC8DBB808638}.Release|x86.ActiveCfg = Release|Any CPU
+               {A01B3151-BC81-437C-B526-CC8DBB808638}.Release|x86.Build.0 = Release|Any CPU
+       EndGlobalSection
+EndGlobal
diff --git a/Crow.OpenTK.nuspec b/Crow.OpenTK.nuspec
deleted file mode 100644 (file)
index 845f655..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-<?xml version="1.0"?>
-<package >
-       <metadata>
-               <id>Crow.OpenTK</id>
-               <version>0.7.1</version>
-               <title>C# Rapid Open Widget Toolkit</title>
-               <authors>JP Bruyere</authors>
-               <owners>Grand Tetras Software</owners>
-               <licenseUrl>https://opensource.org/licenses/MIT</licenseUrl>
-               <projectUrl>https://github.com/jpbruyere/Crow/wiki</projectUrl>
-               <iconUrl>https://jpbruyere.github.io/Crow/images/crow.png</iconUrl>
-               <requireLicenseAcceptance>false</requireLicenseAcceptance>
-               <description>
-C.R.O.W. is a widget toolkit and rendering engine entirely developed in C# with templates, styles, compositing, and bindings.
-Crow.OpenTK is the OpenTK ready version.
-               </description>
-               <summary>
-
-               </summary>
-               <releaseNotes>
-- 0.7.1: implement ReaderWriterLock for solving threading problems
-
-- new mouse move handling, improve perf, introduce new recursive method in GraphicObject 'PointIsIn (ref Point p)'
-- new TemplatedGroup architecture: in hierarchical group, TemplatedGroup are no longer required on each node, only a container with 'ItemsContainer' should be provided in ItemTemplates with sub data fetching.
-- Delete and Remove widget differentiation in group.
-- Drag and Drop basics implemented, not fully tested.
-- binding address starting with '/' start search at current node, not in template.
-- Fit measure units changed from Pixel to Percent.
-- prevent mouse evt on label not selectable.
-- crowIDE wip, need CrowEdit reference (available on GitHub).
-- CheckBox reused as base in several template which need 2 states inherited from it.
-- FocusParent internal variable, allow easyer popup parenting while keeping logical parenting usefull for other things.
-- InstantiatorException with file name.
-- load all assemblies in bin dir at startup to allow usage of several Widget assemblies.
-- Context menu basic mechanic, may be improved.
-- ObservableList that could be used as data source for TempletedGroups.
-- Configuration no longer static to allow multiple config files handling in single application.
-- styling is no longer static in iface to allow different styling context between ifaces.
-
-               </releaseNotes>
-               <copyright>Copyright 2013-2018</copyright>
-               <dependencies>
-                       <dependency id="OpenTK" version="2.0.0" />
-               </dependencies>
-        <tags>Crow OpenTK OpenGL Widget Interface GUI C# .Net Mono</tags>
-        <references>
-            <reference file="Crow.dll" />
-        </references>
-        <frameworkAssemblies>
-                       <frameworkAssembly assemblyName="System" />
-                       <frameworkAssembly assemblyName="System.Drawing" />
-                       <frameworkAssembly assemblyName="System.Xml" />
-               </frameworkAssemblies>
-       </metadata>
-       <files>
-               <file src="Tests/CrowWindow.cs" target="content" />
-               <file src="Tests/InterfaceControler.cs" target="content" />
-               <file src="Tests/OpenGL/*.cs" target="content/OpenGL" />
-               <file src="build/Release/Crow.dll" target="lib/net45" />
-               <file src="build/Release/Crow.dll.config" target="content" />
-       </files>
-</package>
diff --git a/Crow.csproj b/Crow.csproj
deleted file mode 100644 (file)
index 817b9ae..0000000
+++ /dev/null
@@ -1,418 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <PropertyGroup>
-    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
-    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
-    <ProjectGuid>{C2980F9B-4798-4C05-99E2-E174810F7C7B}</ProjectGuid>
-    <OutputType>Library</OutputType>
-    <AppDesignerFolder>Properties</AppDesignerFolder>
-    <RootNamespace>Crow</RootNamespace>
-    <AssemblyName>Crow</AssemblyName>
-    <FileAlignment>512</FileAlignment>
-    <AllowUnsafeBlocks>True</AllowUnsafeBlocks>
-    <NoStdLib>False</NoStdLib>
-    <TreatWarningsAsErrors>False</TreatWarningsAsErrors>
-    <WarningLevel>4</WarningLevel>
-    <NoWin32Manifest>False</NoWin32Manifest>
-    <SignAssembly>true</SignAssembly>
-    <RunPostBuildEvent>OnBuildSuccess</RunPostBuildEvent>
-    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
-    <Description>C# Rapid Open Widget</Description>
-    <BaseAddress>4194304</BaseAddress>
-    <OutputPath>$(SolutionDir)build\$(Configuration)</OutputPath>
-    <IntermediateOutputPath>$(SolutionDir)build\obj\$(Configuration)</IntermediateOutputPath>
-    <AssemblyOriginatorKeyFile>crow.key</AssemblyOriginatorKeyFile>
-    <ReleaseVersion>0.5</ReleaseVersion>
-    <ProductVersion>8.0.30703</ProductVersion>
-    <SchemaVersion>2.0</SchemaVersion>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
-    <DebugSymbols>true</DebugSymbols>
-    <DebugType>full</DebugType>
-    <CheckForOverflowUnderflow>true</CheckForOverflowUnderflow>
-    <Optimize>false</Optimize>
-    <OutputPath>$(SolutionDir)build\Debug</OutputPath>
-    <DefineConstants>DEBUG_DRAGNDROP0;DEBUG_LOG0;XLIB_BACKEND0;DESIGN_MODE;DEBUG_UPDATE0;DEBUG_FOCUS;DEBUG_DISPOSE0;TRACE0;DEBUG;MEASURE_TIME;DEBUG_LOAD0;DEBUG_BINDING0;DEBUG_CLIP_RECTANGLE0</DefineConstants>
-    <EnvironmentVariables>
-      <EnvironmentVariables>
-        <Variable name="MONO_CAIRO_DEBUG_DISPOSE" value="1" />
-      </EnvironmentVariables>
-    </EnvironmentVariables>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
-    <Optimize>true</Optimize>
-    <DefineConstants>DESIGN_MODE</DefineConstants>
-    <OutputPath>$(SolutionDir)build\Release</OutputPath>
-  </PropertyGroup>
-  <ItemGroup>
-    <Compile Include="src\Colors.cs" />
-    <Compile Include="src\Point.cs" />
-    <Compile Include="src\Rectangle.cs" />
-    <Compile Include="src\Size.cs" />
-    <Compile Include="src\GraphicObjects\GraphicObject.cs" />
-    <Compile Include="src\GraphicObjects\Container.cs" />
-    <Compile Include="src\GraphicObjects\Group.cs" />
-    <Compile Include="src\GraphicObjects\HorizontalStack.cs" />
-    <Compile Include="src\GraphicObjects\Image.cs" />
-    <Compile Include="src\GraphicObjects\Label.cs" />
-    <Compile Include="src\GraphicObjects\TextBox.cs" />
-    <Compile Include="src\GraphicObjects\ProgressBar.cs" />
-    <Compile Include="src\GraphicObjects\VerticalStack.cs" />
-    <Compile Include="src\Cairo\CairoHelpers.cs" />
-    <Compile Include="src\win32\Win32.cs" />
-    <Compile Include="src\win32\winApi.cs" />
-    <Compile Include="src\GraphicObjects\Button.cs" />
-    <Compile Include="src\GraphicObjects\GraduatedSlider.cs" />
-    <Compile Include="src\GraphicObjects\Slider.cs" />
-    <Compile Include="src\GraphicObjects\NumericControl.cs" />
-    <Compile Include="src\GraphicObjects\Scroller.cs" />
-    <Compile Include="src\GraphicObjects\ILayoutable.cs" />
-    <Compile Include="src\Enums.cs" />
-    <Compile Include="src\GraphicObjects\GenericStack.cs" />
-    <Compile Include="src\CompilerServices\CompilerServices.cs" />
-    <Compile Include="src\GraphicObjects\Border.cs" />
-    <Compile Include="src\Font.cs" />
-    <Compile Include="src\GraphicObjects\Window.cs" />
-    <Compile Include="src\GraphicObjects\ListBox.cs" />
-    <Compile Include="src\ExtensionsMethods.cs" />
-    <Compile Include="src\Interface.cs" />
-    <Compile Include="src\LayoutingQueueItem.cs" />
-    <Compile Include="src\GraphicObjects\Spinner.cs" />
-    <Compile Include="src\DynAttribute.cs" />
-    <Compile Include="src\GraphicObjects\IValueChange.cs" />
-    <Compile Include="src\Picture.cs" />
-    <Compile Include="src\SvgPicture.cs" />
-    <Compile Include="src\BmpPicture.cs" />
-    <Compile Include="src\GraphicObjects\TemplatedControl.cs" />
-    <Compile Include="src\GraphicObjects\RadioButton.cs" />
-    <Compile Include="src\GraphicObjects\Expandable.cs" />
-    <Compile Include="src\GraphicObjects\PrivateContainer.cs" />
-    <Compile Include="src\GraphicObjects\TemplatedContainer.cs" />
-    <Compile Include="src\GraphicObjects\Popper.cs" />
-    <Compile Include="src\TextChangeEventArgs.cs" />
-    <Compile Include="src\ReflexionExtensions.cs" />
-    <Compile Include="src\XCursor.cs" />
-    <Compile Include="src\GraphicObjects\Grid.cs" />
-    <Compile Include="src\GraphicObjects\TextRun.cs" />
-    <Compile Include="src\GraphicObjects\MessageBox.cs" />
-    <Compile Include="src\SelectionChangeEventArgs.cs" />
-    <Compile Include="src\ValueChangeEventArgs.cs" />
-    <Compile Include="src\GraphicObjects\FileDialog.cs" />
-    <Compile Include="src\GraphicObjects\CheckBox.cs" />
-    <Compile Include="src\GraphicObjects\ComboBox.cs" />
-    <Compile Include="src\GraphicObjects\GroupBox.cs" />
-    <Compile Include="src\GraphicObjects\ScrollBar.cs" />
-    <Compile Include="src/GraphicObjects/XmlIgnoreAttribute.cs" />
-    <Compile Include="src\BubblingMouseButtonEventArgs.cs" />
-    <Compile Include="src\SolidColor.cs" />
-    <Compile Include="src\Gradient.cs" />
-    <Compile Include="src\Fill\Fill.cs" />
-    <Compile Include="src\LayoutingEventArgs.cs" />
-    <Compile Include="src\ScrollingEventArgs.cs" />
-    <Compile Include="src\GraphicObjects\Trend.cs" />
-    <Compile Include="src\GraphicObjects\Splitter.cs" />
-    <Compile Include="src\GraphicObjects\TreeView.cs" />
-    <Compile Include="src\GraphicObjects\TabView.cs" />
-    <Compile Include="src\GraphicObjects\TabItem.cs" />
-    <Compile Include="src\Input\Buttons.cs" />
-    <Compile Include="src\Input\ButtonState.cs" />
-    <Compile Include="src\Input\Key.cs" />
-    <Compile Include="src\Input\MouseButton.cs" />
-    <Compile Include="src\Input\MouseEventArgs.cs" />
-    <Compile Include="src\Input\MouseScroll.cs" />
-    <Compile Include="src\Input\MouseState.cs" />
-    <Compile Include="src\rsvg\DimensionData.cs" />
-    <Compile Include="src\rsvg\Global.cs" />
-    <Compile Include="src\rsvg\Handle.cs" />
-    <Compile Include="src\MouseCursorChangedEventArgs.cs" />
-    <Compile Include="src\Input\KeyPressEventArgs.cs" />
-    <Compile Include="src\Configuration.cs" />
-    <Compile Include="src\Measure.cs" />
-    <Compile Include="src\StyleReader.cs" />
-    <Compile Include="src\GraphicObjects\DirectoryView.cs" />
-    <Compile Include="src\Instantiator.cs" />
-    <Compile Include="src\ItemTemplate.cs" />
-    <Compile Include="src\Style.cs" />
-    <Compile Include="src\GraphicObjects\Wrapper.cs" />
-    <Compile Include="src\GraphicObjects\TemplatedGroup.cs" />
-    <Compile Include="src\GraphicObjects\MenuItem.cs" />
-    <Compile Include="src\GraphicObjects\Menu.cs" />
-    <Compile Include="src\Command.cs" />
-    <Compile Include="src\GraphicObjects\DataSourceChangeEventArgs.cs" />
-    <Compile Include="src\IML\NodeAddress.cs" />
-    <Compile Include="src\IML\Node.cs" />
-    <Compile Include="src\IML\MemberAddress.cs" />
-    <Compile Include="src\IML\NodeStack.cs" />
-    <Compile Include="src\IML\BindingDefinition.cs" />
-    <Compile Include="Properties\AssemblyInfo.cs" />
-    <Compile Include="src\GraphicObjects\ColorPicker.cs" />
-    <Compile Include="src\GraphicObjects\ColorSelector.cs" />
-    <Compile Include="src\GraphicObjects\HueSelector.cs" />
-    <Compile Include="src\GraphicObjects\SaturationValueSelector.cs" />
-    <Compile Include="src\IML\EventBinding.cs" />
-    <Compile Include="src\PerformanceMeasure.cs" />
-    <Compile Include="src\IML\BindingMember.cs" />
-    <Compile Include="src\CrowThread.cs" />
-    <Compile Include="src\GraphicObjects\ScrollingObject.cs" />
-    <Compile Include="src\Mono.Cairo\Antialias.cs" />
-    <Compile Include="src\Mono.Cairo\Cairo.cs" />
-    <Compile Include="src\Mono.Cairo\CairoDebug.cs" />
-    <Compile Include="src\Mono.Cairo\Content.cs" />
-    <Compile Include="src\Mono.Cairo\Context.cs" />
-    <Compile Include="src\Mono.Cairo\DRMDevice.cs" />
-    <Compile Include="src\Mono.Cairo\DRMSurface.cs" />
-    <Compile Include="src\Mono.Cairo\Device.cs" />
-    <Compile Include="src\Mono.Cairo\DirectFBSurface.cs" />
-    <Compile Include="src\Mono.Cairo\Distance.cs" />
-    <Compile Include="src\Mono.Cairo\EGLDevice.cs" />
-    <Compile Include="src\Mono.Cairo\Extend.cs" />
-    <Compile Include="src\Mono.Cairo\FillRule.cs" />
-    <Compile Include="src\Mono.Cairo\Filter.cs" />
-    <Compile Include="src\Mono.Cairo\FontExtents.cs" />
-    <Compile Include="src\Mono.Cairo\FontFace.cs" />
-    <Compile Include="src\Mono.Cairo\FontOptions.cs" />
-    <Compile Include="src\Mono.Cairo\FontSlant.cs" />
-    <Compile Include="src\Mono.Cairo\FontType.cs" />
-    <Compile Include="src\Mono.Cairo\FontWeight.cs" />
-    <Compile Include="src\Mono.Cairo\Format.cs" />
-    <Compile Include="src\Mono.Cairo\GLSurface.cs" />
-    <Compile Include="src\Mono.Cairo\GLXDevice.cs" />
-    <Compile Include="src\Mono.Cairo\GlitzSurface.cs" />
-    <Compile Include="src\Mono.Cairo\Glyph.cs" />
-    <Compile Include="src\Mono.Cairo\Gradient.cs" />
-    <Compile Include="src\Mono.Cairo\HintMetrics.cs" />
-    <Compile Include="src\Mono.Cairo\HintStyle.cs" />
-    <Compile Include="src\Mono.Cairo\ImageSurface.cs" />
-    <Compile Include="src\Mono.Cairo\LineCap.cs" />
-    <Compile Include="src\Mono.Cairo\LineJoin.cs" />
-    <Compile Include="src\Mono.Cairo\LinearGradient.cs" />
-    <Compile Include="src\Mono.Cairo\Matrix.cs" />
-    <Compile Include="src\Mono.Cairo\Operator.cs" />
-    <Compile Include="src\Mono.Cairo\PSSurface.cs" />
-    <Compile Include="src\Mono.Cairo\Path.cs" />
-    <Compile Include="src\Mono.Cairo\Pattern.cs" />
-    <Compile Include="src\Mono.Cairo\PatternType.cs" />
-    <Compile Include="src\Mono.Cairo\PdfSurface.cs" />
-    <Compile Include="src\Mono.Cairo\Point.cs" />
-    <Compile Include="src\Mono.Cairo\PointD.cs" />
-    <Compile Include="src\Mono.Cairo\RadialGradient.cs" />
-    <Compile Include="src\Mono.Cairo\Region.cs" />
-    <Compile Include="src\Mono.Cairo\ScaledFont.cs" />
-    <Compile Include="src\Mono.Cairo\SolidPattern.cs" />
-    <Compile Include="src\Mono.Cairo\Status.cs" />
-    <Compile Include="src\Mono.Cairo\SubpixelOrder.cs" />
-    <Compile Include="src\Mono.Cairo\Surface.cs" />
-    <Compile Include="src\Mono.Cairo\SurfacePattern.cs" />
-    <Compile Include="src\Mono.Cairo\SurfaceType.cs" />
-    <Compile Include="src\Mono.Cairo\SvgSurface.cs" />
-    <Compile Include="src\Mono.Cairo\SvgVersion.cs" />
-    <Compile Include="src\Mono.Cairo\TextExtents.cs" />
-    <Compile Include="src\Mono.Cairo\WGLDevice.cs" />
-    <Compile Include="src\Mono.Cairo\Win32Surface.cs" />
-    <Compile Include="src\Mono.Cairo\XcbSurface.cs" />
-    <Compile Include="src\Mono.Cairo\XlibSurface.cs" />
-    <Compile Include="src\IML\IMLContext.cs" />
-    <Compile Include="src\GraphicObjects\Shape.cs" />
-    <Compile Include="src\IListChanged.cs" />
-    <Compile Include="src\ObservableList.cs" />
-    <Compile Include="src\GraphicObjects\IMLContainer.cs" />
-    <Compile Include="src\DragDropEventArgs.cs" />
-    <Compile Include="src\GraphicObjects\DockWindow.cs" />
-    <Compile Include="src\ParsingException.cs" />
-    <Compile Include="src\IMLAttributes.cs" />
-    <Compile Include="src\GraphicObjects\DockStack.cs" />
-    <Compile Include="src\debug\DebugLogger.cs" />
-    <Compile Include="src\backends\xlib\X11Structs.cs" />
-    <Compile Include="src\backends\xlib\XKeySym.cs" />
-    <Compile Include="src\backends\xcb\XCBBackend.cs" />
-    <Compile Include="src\backends\IBackend.cs" />
-    <Compile Include="src\backends\IKeyboard.cs" />
-    <Compile Include="src\backends\xcb\XCBKeyboard.cs" />
-    <Compile Include="src\Input\KeyEventArgs.cs" />
-    <Compile Include="src\backends\xlib\X11Keyboard.cs" />
-    <Compile Include="src\backends\xlib\XLibBackend.cs" />
-    <Compile Include="src\debug\DbgLogViewer.cs" />
-    <Compile Include="src\debug\DbgEventTypeColors.cs" />
-    <Compile Include="src\Mono.Cairo\NativeMethods.cs" />
-    <Compile Include="src\Mono.Cairo\MeshPattern.cs" />
-  </ItemGroup>
-  <ItemGroup>
-    <Reference Include="System" />
-    <Reference Include="System.Data" />
-    <Reference Include="System.Xml" />
-    <Reference Include="Microsoft.CSharp" />
-    <Reference Include="System.Drawing" />
-  </ItemGroup>
-  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
-  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
-       Other similar extension points exist, see Microsoft.Common.targets.
-  <Target Name="BeforeBuild">
-  </Target>
-  <Target Name="AfterBuild">
-  </Target>
-  -->
-  <ItemGroup />
-  <ItemGroup>
-    <Folder Include="src\GraphicObjects\" />
-    <Folder Include="src\Cairo\" />
-    <Folder Include="src\win32\" />
-    <Folder Include="Images\" />
-    <Folder Include="Images\Icons\" />
-    <Folder Include="src\CompilerServices\" />
-    <Folder Include="src\Fill\" />
-    <Folder Include="src\Input\" />
-    <Folder Include="src\rsvg\" />
-    <Folder Include="src\IML\" />
-    <Folder Include="Icons\" />
-    <Folder Include="src\debug\" />
-    <Folder Include="src\backends\" />
-    <Folder Include="src\backends\xlib\" />
-    <Folder Include="src\backends\xcb\" />
-  </ItemGroup>
-  <ItemGroup>
-    <EmbeddedResource Include="Images\Icons\updown.svg" />
-    <EmbeddedResource Include="Images\Icons\IconAlerte.svg" />
-    <EmbeddedResource Include="Images\Icons\buttonB.svg" />
-    <EmbeddedResource Include="Images\Icons\checkbox.svg" />
-    <EmbeddedResource Include="Images\Icons\radiobutton.svg" />
-    <EmbeddedResource Include="Images\Icons\expandable.svg" />
-    <EmbeddedResource Include="Images\Icons\tetra.png" />
-    <EmbeddedResource Include="Images\Icons\exit.svg" />
-    <EmbeddedResource Include="Images\meter.svg" />
-    <EmbeddedResource Include="Images\Icons\member.svg" />
-    <EmbeddedResource Include="Images\Icons\exit2.svg" />
-    <EmbeddedResource Include="Images\button.svg" />
-    <EmbeddedResource Include="Images\Icons\iconInfo.svg">
-      <LogicalName>Crow.Images.Icons.Informations.svg</LogicalName>
-    </EmbeddedResource>
-    <EmbeddedResource Include="Images\Icons\Cursors\cross" />
-    <EmbeddedResource Include="Images\Icons\Cursors\bottom_left_corner" />
-    <EmbeddedResource Include="Images\Icons\Cursors\bottom_right_corner" />
-    <EmbeddedResource Include="Images\Icons\Cursors\top_left_corner" />
-    <EmbeddedResource Include="Images\Icons\Cursors\top_right_corner" />
-    <EmbeddedResource Include="Images\Icons\Cursors\arrow" />
-    <EmbeddedResource Include="Images\Icons\Cursors\sb_h_double_arrow" />
-    <EmbeddedResource Include="Images\Icons\Cursors\sb_v_double_arrow" />
-    <EmbeddedResource Include="Images\Icons\Cursors\hand" />
-    <EmbeddedResource Include="Images\Icons\Cursors\help" />
-    <EmbeddedResource Include="Images\Icons\Cursors\move" />
-    <EmbeddedResource Include="Images\crow0.svg" />
-    <EmbeddedResource Include="Images\Icons\crow.png" />
-    <EmbeddedResource Include="Images\Icons\crow.svg" />
-    <EmbeddedResource Include="Default.style" />
-    <EmbeddedResource Include="Images\Icons\folder.svg" />
-    <EmbeddedResource Include="Images\Icons\file.svg" />
-    <EmbeddedResource Include="Templates\Button.template">
-      <LogicalName>Crow.Button.template</LogicalName>
-    </EmbeddedResource>
-    <EmbeddedResource Include="Templates\CheckBox.template">
-      <LogicalName>Crow.CheckBox.template</LogicalName>
-    </EmbeddedResource>
-    <EmbeddedResource Include="Templates\ComboBox.template">
-      <LogicalName>Crow.ComboBox.template</LogicalName>
-    </EmbeddedResource>
-    <EmbeddedResource Include="Templates\Expandable.template">
-      <LogicalName>Crow.Expandable.template</LogicalName>
-    </EmbeddedResource>
-    <EmbeddedResource Include="Templates\DirectoryView.template">
-      <LogicalName>Crow.DirectoryView.template</LogicalName>
-    </EmbeddedResource>
-    <EmbeddedResource Include="Templates\FileDialog.template">
-      <LogicalName>Crow.FileDialog.template</LogicalName>
-    </EmbeddedResource>
-    <EmbeddedResource Include="Templates\GroupBox.template">
-      <LogicalName>Crow.GroupBox.template</LogicalName>
-    </EmbeddedResource>
-    <EmbeddedResource Include="Templates\ListBox.template">
-      <LogicalName>Crow.ListBox.template</LogicalName>
-    </EmbeddedResource>
-    <EmbeddedResource Include="Templates\MessageBox.template">
-      <LogicalName>Crow.MessageBox.template</LogicalName>
-    </EmbeddedResource>
-    <EmbeddedResource Include="Templates\Popper.template">
-      <LogicalName>Crow.Popper.template</LogicalName>
-    </EmbeddedResource>
-    <EmbeddedResource Include="Templates\RadioButton.template">
-      <LogicalName>Crow.RadioButton.template</LogicalName>
-    </EmbeddedResource>
-    <EmbeddedResource Include="Templates\ScrollBar.template">
-      <LogicalName>Crow.ScrollBar.template</LogicalName>
-    </EmbeddedResource>
-    <EmbeddedResource Include="Templates\Slider.template">
-      <LogicalName>Crow.Slider.template</LogicalName>
-    </EmbeddedResource>
-    <EmbeddedResource Include="Templates\Spinner.template">
-      <LogicalName>Crow.Spinner.template</LogicalName>
-    </EmbeddedResource>
-    <EmbeddedResource Include="Templates\TabItem.template">
-      <LogicalName>Crow.TabItem.template</LogicalName>
-    </EmbeddedResource>
-    <EmbeddedResource Include="Templates\TreeView.template">
-      <LogicalName>Crow.TreeView.template</LogicalName>
-    </EmbeddedResource>
-    <EmbeddedResource Include="Templates\Window.template">
-      <LogicalName>Crow.Window.template</LogicalName>
-    </EmbeddedResource>
-    <EmbeddedResource Include="Images\Icons\Cursors\ibeam" />
-    <EmbeddedResource Include="Templates\MenuItem.template">
-      <LogicalName>Crow.MenuItem.template</LogicalName>
-    </EmbeddedResource>
-    <EmbeddedResource Include="Templates\Menu.template">
-      <LogicalName>Crow.Menu.template</LogicalName>
-    </EmbeddedResource>
-    <EmbeddedResource Include="Templates\ColorPicker.template">
-      <LogicalName>Crow.ColorPicker.template</LogicalName>
-    </EmbeddedResource>
-    <EmbeddedResource Include="Templates\ToolWindow.template">
-      <LogicalName>Crow.ToolWindow.template</LogicalName>
-    </EmbeddedResource>
-    <EmbeddedResource Include="Images\Icons\maximize.svg" />
-    <EmbeddedResource Include="Images\Icons\minimize.svg" />
-    <EmbeddedResource Include="Images\Icons\normalize.svg" />
-    <EmbeddedResource Include="Icons\open-file.svg" />
-    <EmbeddedResource Include="Icons\scissors.svg" />
-    <EmbeddedResource Include="Icons\copy-file.svg" />
-    <EmbeddedResource Include="Icons\exit-symbol.svg" />
-    <EmbeddedResource Include="Icons\paste-on-document.svg" />
-    <EmbeddedResource Include="Icons\question.svg" />
-    <EmbeddedResource Include="Icons\folder.svg" />
-    <EmbeddedResource Include="Icons\file.svg" />
-    <EmbeddedResource Include="Icons\level-up.svg" />
-    <EmbeddedResource Include="Icons\frame.svg" />
-    <EmbeddedResource Include="Templates\FileItems.template" />
-    <EmbeddedResource Include="Templates\DefaultItem.template">
-      <LogicalName>Crow.DefaultItem.template</LogicalName>
-    </EmbeddedResource>
-    <EmbeddedResource Include="Templates\ScrollingListBox.template" />
-    <EmbeddedResource Include="Templates\imgItem.template" />
-    <EmbeddedResource Include="Templates\ArrowBut.template" />
-    <EmbeddedResource Include="Templates\treeList.template" />
-    <EmbeddedResource Include="Templates\CheckBox2.template" />
-    <EmbeddedResource Include="Icons\assembly.svg" />
-    <EmbeddedResource Include="Templates\Tooltip.template">
-      <LogicalName>Crow.Tooltip.template</LogicalName>
-    </EmbeddedResource>
-    <EmbeddedResource Include="Templates\ContextMenu.template">
-      <LogicalName>Crow.ContextMenu.template</LogicalName>
-    </EmbeddedResource>
-    <EmbeddedResource Include="Icons\compiler_error.svg" />
-    <EmbeddedResource Include="Icons\project.svg" />
-    <EmbeddedResource Include="Icons\crowproj.svg" />
-    <EmbeddedResource Include="Icons\projectRef.svg" />
-    <EmbeddedResource Include="Templates\DockWindow.template">
-      <LogicalName>Crow.DockWindow.template</LogicalName>
-    </EmbeddedResource>
-    <EmbeddedResource Include="Templates\HScrollBar.template">
-      <LogicalName>Crow.HScrollBar.template</LogicalName>
-    </EmbeddedResource>
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="Crow.dll.config">
-      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
-    </None>
-    <None Include="Icons\compiler_warning.svg" />
-    <None Include="Icons\compiler_warning_orange.svg" />
-    <None Include="src\debug\DebugLogViewer.cs" />
-    <None Include="src\Mono.Cairo\NativeMethods-internal.cs" />
-  </ItemGroup>
-</Project>
index dc694b6b8f838a325aa791327d9bc651fe8a5e48..97889f08f72fdb34119343445f010159251e839f 100644 (file)
--- a/Crow.sln
+++ b/Crow.sln
@@ -1,7 +1,7 @@
 
 Microsoft Visual Studio Solution File, Format Version 11.00
 # Visual Studio 2010
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Crow", "Crow.csproj", "{C2980F9B-4798-4C05-99E2-E174810F7C7B}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Crow", "Crow\Crow.csproj", "{C2980F9B-4798-4C05-99E2-E174810F7C7B}"
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tests", "Tests\Tests.csproj", "{74289092-9F70-4941-AFCB-DFD7BE2140B6}"
 EndProject
diff --git a/Crow/Crow.NetStd.csproj b/Crow/Crow.NetStd.csproj
new file mode 100644 (file)
index 0000000..9df6667
--- /dev/null
@@ -0,0 +1,39 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <RootNamespace>Crow</RootNamespace>
+    <Description>C# Rapid Open Widget</Description>        
+        
+    <TargetFramework>netstandard2.0</TargetFramework>
+        
+    <OutputPath>$(SolutionDir)build/$(Configuration)</OutputPath>
+    <IntermediateOutputPath>$(SolutionDir)build/obj/$(Configuration)</IntermediateOutputPath>  
+
+    <DefineConstants>NETSTANDARD2_0;DESIGN_MODE</DefineConstants>
+    
+    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>        
+    <EnableDefaultItems>false</EnableDefaultItems>
+    <EnableDefaultCompileItems>false</EnableDefaultCompileItems>
+  </PropertyGroup>
+   
+  
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DefineConstants>TRACE;DEBUG;NETSTANDARD2_0;DESIGN_MODE</DefineConstants>
+  </PropertyGroup>
+  <ItemGroup>
+    <PackageReference Include="System.Reflection.Emit.ILGeneration" Version="4.3.0" />
+    <PackageReference Include="System.Reflection.Emit.Lightweight" Version="4.3.0" />
+
+    <Compile Include="src\**\*.cs" Exclude="src\Mono.Cairo\NativeMethods-internal.cs" />
+        
+    <EmbeddedResource Include="Templates\*.*">
+      <LogicalName>Crow.%(Filename).template</LogicalName>
+    </EmbeddedResource>
+    
+    <EmbeddedResource Include="Default.style" />
+    <EmbeddedResource Include="Icons\*.*" />
+    <!--<EmbeddedResource Include="Icons\checkbox.svg" />
+    <EmbeddedResource Include="Icons\radiobutton.svg" />-->
+        
+  </ItemGroup>  
+</Project>
diff --git a/Crow/Crow.csproj b/Crow/Crow.csproj
new file mode 100644 (file)
index 0000000..b74c159
--- /dev/null
@@ -0,0 +1,176 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProjectGuid>{C2980F9B-4798-4C05-99E2-E174810F7C7B}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>Crow</RootNamespace>
+    <AssemblyName>Crow</AssemblyName>
+    <FileAlignment>512</FileAlignment>
+    <AllowUnsafeBlocks>True</AllowUnsafeBlocks>
+    <NoStdLib>False</NoStdLib>
+    <TreatWarningsAsErrors>False</TreatWarningsAsErrors>
+    <WarningLevel>4</WarningLevel>
+    <NoWin32Manifest>False</NoWin32Manifest>
+    <SignAssembly>true</SignAssembly>
+    <RunPostBuildEvent>OnBuildSuccess</RunPostBuildEvent>
+    <Description>C# Rapid Open Widget</Description>
+    <BaseAddress>4194304</BaseAddress>
+    <OutputPath>$(SolutionDir)build\$(Configuration)</OutputPath>
+    <IntermediateOutputPath>$(SolutionDir)build\obj\$(Configuration)</IntermediateOutputPath>
+    <AssemblyOriginatorKeyFile>crow.key</AssemblyOriginatorKeyFile>
+    <ReleaseVersion>0.5</ReleaseVersion>
+    <ProductVersion>8.0.30703</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <CheckForOverflowUnderflow>true</CheckForOverflowUnderflow>
+    <Optimize>false</Optimize>
+    <OutputPath>$(SolutionDir)build\Debug</OutputPath>
+    <DefineConstants>DEBUG_DRAGNDROP0;DEBUG_LOG0;XLIB_BACKEND0;DESIGN_MODE;DEBUG_UPDATE0;DEBUG_FOCUS0;DEBUG_DISPOSE0;TRACE0;DEBUG;MEASURE_TIME;DEBUG_LOAD0;DEBUG_BINDING0;DEBUG_CLIP_RECTANGLE0</DefineConstants>
+    <EnvironmentVariables>
+      <EnvironmentVariables>
+        <Variable name="MONO_CAIRO_DEBUG_DISPOSE" value="1" />
+      </EnvironmentVariables>
+    </EnvironmentVariables>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <Optimize>true</Optimize>
+    <DefineConstants>DESIGN_MODE</DefineConstants>
+    <OutputPath>$(SolutionDir)build\Release</OutputPath>
+  </PropertyGroup>
+  <ItemGroup>
+       <Compile Include="src\**\*.cs" Exclude="src\Mono.Cairo\NativeMethods-internal.cs"/>
+  </ItemGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Drawing" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <ItemGroup />
+  <ItemGroup>
+    <Folder Include="src\GraphicObjects\" />
+    <Folder Include="src\Cairo\" />
+    <Folder Include="src\win32\" />
+    <Folder Include="Images\" />
+    <Folder Include="Images\Icons\" />
+    <Folder Include="src\CompilerServices\" />
+    <Folder Include="src\Fill\" />
+    <Folder Include="src\Input\" />
+    <Folder Include="src\rsvg\" />
+    <Folder Include="src\IML\" />
+    <Folder Include="Icons\" />
+    <Folder Include="src\debug\" />
+    <Folder Include="src\backends\" />
+    <Folder Include="src\backends\xlib\" />
+    <Folder Include="src\backends\xcb\" />
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="Icons\*.*" />
+    <EmbeddedResource Include="Default.style" />
+    <EmbeddedResource Include="Templates\Button.template">
+      <LogicalName>Crow.Button.template</LogicalName>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Templates\CheckBox.template">
+      <LogicalName>Crow.CheckBox.template</LogicalName>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Templates\ComboBox.template">
+      <LogicalName>Crow.ComboBox.template</LogicalName>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Templates\Expandable.template">
+      <LogicalName>Crow.Expandable.template</LogicalName>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Templates\DirectoryView.template">
+      <LogicalName>Crow.DirectoryView.template</LogicalName>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Templates\FileDialog.template">
+      <LogicalName>Crow.FileDialog.template</LogicalName>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Templates\GroupBox.template">
+      <LogicalName>Crow.GroupBox.template</LogicalName>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Templates\ListBox.template">
+      <LogicalName>Crow.ListBox.template</LogicalName>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Templates\MessageBox.template">
+      <LogicalName>Crow.MessageBox.template</LogicalName>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Templates\Popper.template">
+      <LogicalName>Crow.Popper.template</LogicalName>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Templates\RadioButton.template">
+      <LogicalName>Crow.RadioButton.template</LogicalName>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Templates\ScrollBar.template">
+      <LogicalName>Crow.ScrollBar.template</LogicalName>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Templates\Slider.template">
+      <LogicalName>Crow.Slider.template</LogicalName>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Templates\Spinner.template">
+      <LogicalName>Crow.Spinner.template</LogicalName>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Templates\TabItem.template">
+      <LogicalName>Crow.TabItem.template</LogicalName>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Templates\TreeView.template">
+      <LogicalName>Crow.TreeView.template</LogicalName>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Templates\Window.template">
+      <LogicalName>Crow.Window.template</LogicalName>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Images\Icons\Cursors\ibeam" />
+    <EmbeddedResource Include="Templates\MenuItem.template">
+      <LogicalName>Crow.MenuItem.template</LogicalName>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Templates\Menu.template">
+      <LogicalName>Crow.Menu.template</LogicalName>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Templates\ColorPicker.template">
+      <LogicalName>Crow.ColorPicker.template</LogicalName>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Templates\ToolWindow.template">
+      <LogicalName>Crow.ToolWindow.template</LogicalName>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Templates\FileItems.template" />
+    <EmbeddedResource Include="Templates\DefaultItem.template">
+      <LogicalName>Crow.DefaultItem.template</LogicalName>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Templates\ScrollingListBox.template">
+      <LogicalName>Crow.ScrollingListBox.template</LogicalName>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Templates\imgItem.template" />
+    <EmbeddedResource Include="Templates\ArrowBut.template">
+      <LogicalName>Crow.ArrowBut.template</LogicalName>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Templates\treeList.template" />
+    <EmbeddedResource Include="Templates\CheckBox2.template" />
+    <EmbeddedResource Include="Templates\Tooltip.template">
+      <LogicalName>Crow.Tooltip.template</LogicalName>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Templates\ContextMenu.template">
+      <LogicalName>Crow.ContextMenu.template</LogicalName>
+    </EmbeddedResource>
+
+    <EmbeddedResource Include="Templates\DockWindow.template">
+      <LogicalName>Crow.DockWindow.template</LogicalName>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Templates\HScrollBar.template">
+      <LogicalName>Crow.HScrollBar.template</LogicalName>
+    </EmbeddedResource>
+  </ItemGroup>
+</Project>
diff --git a/Crow/Default.style b/Crow/Default.style
new file mode 100644 (file)
index 0000000..5343c09
--- /dev/null
@@ -0,0 +1,224 @@
+Button, CheckBox, RadioButton, ComboBox, Expandable,
+MessageBox, Popper, Slider, Spinner, TextBox {
+       Focusable = "true";
+       Height = "Fit";
+}
+Border {
+       Foreground = "Grey";
+}
+CheckBox { Caption = "CheckBox"; }
+RadioButton { Caption = "RadioButton"; }
+Expandable { Caption = "Expandable"; }
+Popper { Caption = "Popper";}
+GroupBox { Caption = "Group Box"; }
+
+ControlBorder {
+       BorderWidth     = "1";
+       Foreground  = "DimGrey";
+       Background      = "Transparent";
+}
+ControlCaption {
+       Foreground  = "Grey";
+       MouseEnter      = "{Foreground=White}";
+       MouseLeave      = "{Foreground=Grey}";
+}
+Icon {
+       Margin = "1";
+       Width = "12";
+       Height = "12";
+}
+
+Wrapper {
+       Orientation = "Vertical";
+}
+Button {
+       Caption = "Button";
+       Width = "Fit";
+}
+Label {
+       Height = "Fit";
+       Width = "Fit";
+       Margin = "0";
+}
+Menu {
+       Margin = "1";
+       Background = "vgradient|0:DimGrey|1:Black";
+       //Background = "Transparent";
+       Height = "Fit";
+       Width = "Stretched";
+       VerticalAlignment = "Top";
+       SelectionBackground = "Transparent";
+}
+MenuItem {
+       Caption = "MenuItem";
+       Width = "Stretched";
+       Height = "Fit";
+       //Background = "vgradient|0:DimGrey|1:Black";
+       //Background = "Transparent";
+       Foreground = "LightGrey";
+       //MouseEnter = "{Background=SteelBlue;}";
+       //MouseLeave = "{Background=Transparent;}";
+       //MouseEnter = "{Background = vgradient|0:SteelBlue|1:Jet;Foreground=White;}";
+       //MouseLeave = "{Foreground=LightGrey;Background=Transparent;}";
+       SelectionBackground = "Transparent";
+}
+MessageBox {
+       Background = "0.1,0.1,0.2,0.7";
+       Width = "Fit";
+       Caption="MessageBox";
+       Font = "serif, 12";
+       MinimumSize = "200,120";
+       AlwaysOnTop = "true";
+}
+Slider {
+       Background = "vgradient|0:Black|0.1:Grey|0.9:Grey|1:LightGrey";
+       Foreground = "Grey";
+       Height = "10";
+       Value="5";
+}
+Splitter {
+       Focusable = "true";
+       Margin = "1";
+       Background = "Grey";
+}
+Spinner {
+       Foreground = "DimGrey";
+}
+TabView {
+       CacheEnabled = "false";
+       AllowDrop = "true";
+}
+TabItem {
+       Caption = "TabItem";
+       Focusable = "true";
+       CacheEnabled = "true";
+       //MouseEnter = "{Background = Cobalt;Foreground=White;}";
+       //MouseLeave = "{Foreground=LightGrey;Background=Jet;}";
+       AllowDrag = "true";
+}
+TextBox {
+       Background = "White";
+       Foreground = "Black";
+       Selectable = "True";
+       Text = "TextBox";
+       Margin = "1";
+}
+Window {
+       Caption = "Window";
+       Focusable = "true";
+       MinimumSize="5,5";
+       Width = "150";
+       Height = "150";
+}
+ToolWindow {
+       Caption = "Window";
+       Template = "#Crow.ToolWindow.template";
+       Focusable = "true";
+       MinimumSize="50,50";
+       Width = "150";
+       Height = "150";
+}
+Docker {
+       AllowDrop = "false";
+       Margin="0";
+       Focusable="true";
+}
+DockStack {
+       Margin="1";
+       AllowDrop = "true";
+       Focusable="true";
+       //DragEnter="{Background=Blue}";
+       //DragLeave="{Background=Transparent}";
+       //EndDrag="{Background=Jet}";
+}
+DockWindow {
+       //Background = "Onyx";
+       Focusable = "true";
+       AllowDrag = "true";
+       AlwaysOnTop = "true";
+       Margin="0";
+       Width="200";
+       Height="200";
+       //MinimumSize="50,50";
+}
+FileDialog {
+       Template = "#Crow.FileDialog.template";
+       AlwaysOnTop = "true";
+       Focusable = "true";
+       MinimumSize="50,50";
+       Width = "500";
+       Height = "300";
+}
+ProgressBar {
+       Foreground = "vgradient|0:DarkBlue|0.5:SkyBlue|1:DarkBlue";
+}
+Scroller {
+       CacheEnabled = "false";
+}
+Control {
+       Margin="0";
+       Spacing="3";
+}
+SaturationValueSelector {
+       Foreground="Red";
+}
+HueSelector {
+       ClipToClientRect="False";
+}
+ColorSpinner {
+       Minimum = "0";
+       Maximum = "255";
+       SmallIncrement = "1";
+}
+HSVSpinner {
+       Minimum = "0";
+       Maximum = "1";
+       SmallIncrement = "0.01";
+}
+TxtInFileDialog {
+       Margine = "1";
+       Font = "droid, 12";
+}
+CheckBoxAlt {
+       Template= "#Crow.CheckBox2.template";
+       Background = "Transparent";
+       Checked="{Background=Grey;Foreground=LightGrey;}";
+       Unchecked = "{Background=Transparent;Foreground=DimGrey;}";
+}
+
+ArrowBut {
+       MouseRepeat="true";     
+       Focusable="true";
+       Foreground="Onyx";
+       Background="hgradient|0:Grey|1:Jet";
+       MouseDown="{Background=hgradient|0:White|0.4:CornflowerBlue|1:Jet}";
+       MouseUp="{Background=hgradient|0:Grey|1:DimGrey}";
+       MouseEnter="{Foreground=Black}";
+       MouseLeave="{Foreground=Onyx}";
+}
+HArrowBut {
+       MouseRepeat="true";
+    Focusable="true";
+       Foreground="Onyx";
+       Background="vgradient|0:Grey|1:DimGrey";
+       MouseDown="{Background=vgradient|0:White|0.4:DarkBlue|1:Jet}";
+       MouseUp="{Background=vgradient|0:Grey|1:DimGrey}";
+       MouseEnter="{Foreground=Black}";
+       MouseLeave="{Foreground=DimGrey}";
+}
+ScrollBar {
+    Maximum = "0";
+    Value = "0";
+    Background = "Silver";
+    Foreground = "DimGrey";
+    Width = "12";
+    CornerRadius = "0";
+    Margin="0";
+}
+HScrollBar {
+    Template = "#Crow.HScrollBar.template";
+    Maximum = "0";
+    Value = "0";
+    Height = "12";
+    Width = "Stretched";
+}
\ No newline at end of file
diff --git a/Crow/Icons/IconAlerte.svg b/Crow/Icons/IconAlerte.svg
new file mode 100755 (executable)
index 0000000..286dbf3
--- /dev/null
@@ -0,0 +1,177 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<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"
+   version="1.0"
+   width="64"
+   height="64"
+   id="svg2"
+   inkscape:version="0.91 r13725"
+   sodipodi:docname="IconAlerte.svg">
+  <metadata
+     id="metadata49">
+    <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></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="1280"
+     inkscape:window-height="984"
+     id="namedview47"
+     showgrid="false"
+     fit-margin-top="1"
+     fit-margin-left="1"
+     fit-margin-right="1"
+     fit-margin-bottom="1"
+     inkscape:zoom="4.2211598"
+     inkscape:cx="60.205288"
+     inkscape:cy="44.735206"
+     inkscape:window-x="0"
+     inkscape:window-y="16"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="svg2" />
+  <defs
+     id="defs4">
+    <linearGradient
+       id="Grad1"
+       x1="41.194874"
+       y1="616.47717"
+       x2="118.93135"
+       y2="527.55511"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.48821801,0,0,-0.48010384,3.766054,311.02113)">
+      <stop
+         offset="0"
+         stop-color="#bb0000"
+         id="stop7" />
+      <stop
+         offset="1"
+         stop-color="#5f0000"
+         id="stop9" />
+    </linearGradient>
+    <linearGradient
+       id="Grad2"
+       x1="530.80951"
+       y1="486.63101"
+       x2="174.80548"
+       y2="211.22995"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1028564,0,0,0.10681322,1.0000004,5.1888378)">
+      <stop
+         offset="0"
+         stop-color="#9a0000"
+         id="stop12" />
+      <stop
+         offset="1"
+         stop-color="#f22803"
+         id="stop14" />
+    </linearGradient>
+    <linearGradient
+       id="Grad3"
+       x1="187.87357"
+       y1="224.59892"
+       x2="581.83746"
+       y2="483.10001"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1028564,0,0,0.10681322,1.0000004,5.1888372)">
+      <stop
+         offset="0"
+         stop-color="#ec6c60"
+         id="stop17" />
+      <stop
+         offset="1"
+         stop-color="#d11412"
+         id="stop19" />
+    </linearGradient>
+    <linearGradient
+       id="Grad4"
+       x1="250.39845"
+       y1="101.53633"
+       x2="412.0943"
+       y2="264.54187"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1028564,0,0,0.10681322,1.0000004,5.1888378)">
+      <stop
+         offset="0"
+         stop-color="#ffd9d9"
+         id="stop22" />
+      <stop
+         offset="1"
+         stop-color="#ff2727"
+         id="stop24" />
+    </linearGradient>
+    <radialGradient
+       id="Grad5"
+       cx="295.47125"
+       cy="186.09634"
+       r="179.55"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.17037225,-0.09390987,-2.4099214e-6,49.328051,-23.159866)">
+      <stop
+         offset="0"
+         stop-color="#ffffff"
+         id="stop27" />
+      <stop
+         offset="0.5"
+         stop-color="#ffffff"
+         id="stop29" />
+      <stop
+         offset="1"
+         stop-color="#d5d5d5"
+         id="stop31" />
+    </radialGradient>
+  </defs>
+  <path
+     d="m 30.5028,7.5139081 c 0,0 -27.8740714,47.5318579 -27.8740714,47.5318579 -0.5348541,0.907918 -0.5348541,2.029451 0,2.937368 0.5245675,0.897228 1.5119883,1.463345 2.5816945,1.463345 l 55.7481489,0 c 1.059418,0 2.046843,-0.566117 2.58169,-1.463345 0.524565,-0.907917 0.524565,-2.02945 0,-2.937368 L 35.666191,7.5139081 c -0.534848,-0.9079111 -1.522275,-1.4740216 -2.5817,-1.4740216 -1.059414,0 -2.04684,0.5661105 -2.581691,1.4740216 z"
+     style="fill-opacity:0.17857104"
+     id="path33"
+     inkscape:connector-curvature="0" />
+  <path
+     d="m 29.275219,6.6628606 c 0,0 -27.8740792,47.5318564 -27.8740792,47.5318564 -0.53485309,0.907918 -0.53485309,2.029463 0,2.937369 0.5245677,0.897237 1.5119881,1.463341 2.5816944,1.463341 l 55.7481458,0 c 1.059424,0 2.046838,-0.566104 2.581701,-1.463341 0.52456,-0.907906 0.52456,-2.029451 0,-2.937369 L 34.438597,6.6628606 C 33.903747,5.7549484 32.916334,5.188839 31.856907,5.188839 c -1.059426,0 -2.046838,0.5661094 -2.581688,1.4740216 z"
+     style="fill:url(#Grad1)"
+     id="path35"
+     inkscape:connector-curvature="0" />
+  <path
+     d="m 31.856907,7.6348601 c -0.174854,0 -0.339422,0.096135 -0.431993,0.2456701 L 17.487873,31.646467 3.550838,55.41239 c -0.092571,0.14954 -0.092571,0.341802 0,0.491339 0.09257,0.149539 0.2571403,0.245671 0.4319962,0.245671 l 55.7481458,0 c 0.174855,0 0.339424,-0.09613 0.432007,-0.245671 0.09256,-0.149537 0.09256,-0.341799 0,-0.491339 L 32.288901,7.8805302 C 32.196331,7.7309918 32.031763,7.6348601 31.856907,7.6348601 Z"
+     style="fill:url(#Grad2)"
+     id="path37"
+     inkscape:connector-curvature="0" />
+  <path
+     d="m 31.853051,7.6348601 c -0.174856,0 -0.339436,0.096135 -0.432004,0.2456701 L 17.484016,31.646467 3.5469789,55.41239 c -0.092572,0.14954 -0.092572,0.341802 0,0.491339 0.09257,0.149539 0.2571404,0.245671 0.4319963,0.245671 l 55.7481468,0 c 0.174855,0 0.339424,-0.09613 0.431994,-0.245671 0.09257,-0.149537 0.09257,-0.341799 0,-0.491339 L 32.285045,7.8805302 C 32.192475,7.7309918 32.027904,7.6348601 31.853051,7.6348601 Z"
+     style="fill:none;stroke:url(#Grad3);stroke-width:1.2577858;stroke-linejoin:round"
+     id="path39"
+     inkscape:connector-curvature="0" />
+  <path
+     d="m 31.8643,8.4908547 c -0.165609,0.00854 -0.319978,0.1044731 -0.408207,0.2470058 L 17.519052,32.503792 15.577638,35.815003 c 4.728601,2.947692 10.261233,4.646368 16.174165,4.646368 5.996896,0 11.604186,-1.744327 16.376659,-4.769869 L 32.320723,8.7378605 c -0.09257,-0.1495396 -0.255854,-0.2470058 -0.430709,-0.2470058 -0.0082,0 -0.01758,-4.087e-4 -0.02572,0 z"
+     style="fill:url(#Grad4);stroke-width:10;stroke-linejoin:round"
+     id="path41"
+     inkscape:connector-curvature="0" />
+  <path
+     d="m 30.437499,20.313589 -16.837595,28.70071 c -0.287995,0.502028 -0.287995,1.121539 0,1.612881 0.288007,0.502017 0.833143,0.811785 1.419421,0.811785 l 33.664901,0 c 0.58628,0 1.131427,-0.309768 1.419424,-0.811785 0.287994,-0.502022 0.287994,-1.110853 0,-1.612881 L 33.276338,20.313589 c -0.287995,-0.502021 -0.833141,-0.811777 -1.419419,-0.811777 -0.586279,0 -1.131423,0.309756 -1.41942,0.811777 z"
+     style="fill:url(#Grad5)"
+     id="path43"
+     inkscape:connector-curvature="0" />
+  <path
+     d="m 30.969176,50.420598 c -0.964669,-0.479803 -1.699326,-1.633479 -1.699326,-2.668545 0,-1.92727 1.939303,-3.37905 3.774142,-2.825358 1.237815,0.373544 2.079121,1.533547 2.068815,2.852514 -0.0088,1.120421 -0.475773,1.945794 -1.428956,2.525663 -0.729622,0.44385 -1.950349,0.495876 -2.714675,0.115726 z m 0.219256,-7.610173 c -0.120588,-0.06883 -0.404599,-0.308433 -0.631097,-0.532473 -0.791399,-0.78278 -0.790414,-0.775892 -1.30629,-9.151632 -0.458585,-7.445434 -0.462378,-7.561125 -0.265603,-8.095945 0.442678,-1.203277 1.429043,-1.730174 3.071401,-1.640697 1.043956,0.05689 1.847956,0.437609 2.370558,1.122567 0.446394,0.585054 0.543443,0.915796 0.543036,1.850484 -4.75e-4,1.015697 -0.625235,13.471485 -0.714045,14.234796 -0.116279,0.999709 -0.678344,1.810994 -1.502164,2.168205 -0.470757,0.204147 -1.247544,0.22632 -1.565796,0.04469 z"
+     id="path45"
+     inkscape:connector-curvature="0" />
+</svg>
diff --git a/Crow/Icons/Icon_no.svg b/Crow/Icons/Icon_no.svg
new file mode 100644 (file)
index 0000000..c7613fb
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16">
+<path d="M1,1H15V15H1zM3.5,3.5 12.5,12.5M12.5,3.5 3.5,12.5" fill="none" stroke="#f00" stroke-width="2"/>
+</svg>
\ No newline at end of file
diff --git a/Crow/Icons/assembly.svg b/Crow/Icons/assembly.svg
new file mode 100644 (file)
index 0000000..5ac3643
--- /dev/null
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<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"
+   viewBox="0 0 64 64"
+   height="64"
+   width="64"
+   id="svg2"
+   version="1.1">
+  <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></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs6" />
+  <path
+     d="M 15,33.964845 A 6.2543149,5.8551034 0 0 1 8.7456846,39.819949 6.2543149,5.8551034 0 0 1 2.4913703,33.964845 6.2543149,5.8551034 0 0 1 8.7456846,28.109741 6.2543149,5.8551034 0 0 1 15,33.964845 Z M 30.205524,19.726298 h 24.484978 c 3.833495,0 6.919666,3.88699 6.919666,8.715226 v 11.046641 c 0,4.828235 -3.086171,8.715225 -6.919666,8.715225 H 30.205524 c -3.833494,0 -6.919665,-3.88699 -6.919665,-8.715225 V 28.441524 c 0,-4.828236 3.086171,-8.715226 6.919665,-8.715226 z M 15,33.964845 h 8.285859"
+     style="opacity:1;fill:#a0a8ab;fill-opacity:1;stroke:#181818;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
+     id="path819" />
+</svg>
diff --git a/Crow/Icons/checkbox.svg b/Crow/Icons/checkbox.svg
new file mode 100644 (file)
index 0000000..6b6914a
--- /dev/null
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<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"
+   version="1.1"
+   id="svg2"
+   viewBox="0 0 64 64"
+   height="64"
+   width="64">
+  <defs
+     id="defs4" />
+  <metadata
+     id="metadata7">
+    <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></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="False">
+    <rect
+       style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:3.38882232;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="background-0"
+       width="50.832325"
+       height="50.832325"
+       x="7.1542463"
+       y="10.990663" />
+  </g>
+  <g
+     id="True">
+    <rect
+       style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:3.38882232;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="background"
+       width="50.832333"
+       height="50.832333"
+       x="7.1542463"
+       y="10.990663" />
+    <path
+       style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.99999988;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:0;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+       d="m 31.716712,35.071243 c 0,0 -6.596639,-15.24725 -21.446849,-19.472822 C 28.252789,42.42005 32.673128,59.741754 32.673128,59.741754 42.630927,26.54013 47.25986,13.972168 62.050847,1.147331 42.892384,10.522281 37.883684,17.76245 31.716712,35.071243 Z"
+       id="checkmark" />
+  </g>
+</svg>
diff --git a/Crow/Icons/compiler_error.svg b/Crow/Icons/compiler_error.svg
new file mode 100644 (file)
index 0000000..1b50568
--- /dev/null
@@ -0,0 +1,13 @@
+<svg width="32" height="32" xmlns="http://www.w3.org/2000/svg">
+ <!-- Created with Method Draw - http://github.com/duopixel/Method-Draw/ -->
+ <g id="False">
+  <title>Layer 1</title>
+  <rect id="svg_1" height="27" width="27" y="2.5" x="2.5" stroke-width="5" stroke="#bf0000" fill="#fff"/>
+  <text font-weight="bold" xml:space="preserve" text-anchor="start" font-family="Helvetica, Arial, sans-serif" font-size="24" id="svg_2" y="24.84615" x="7.82692" stroke-width="0" stroke="#bf0000" fill="#000000">X</text>
+ </g>
+  <g id="True">
+  <title>Layer 2</title>
+  <path id="svg_1" d="m16.28846,3.46154l13.78846,26.61539l-27.57692,0l13.78846,-26.61539z" stroke-linecap="null" stroke-linejoin="null" stroke-width="3" stroke="#d1d100" fill-opacity="null" fill="#fff"/>
+  <text font-weight="bold" xml:space="preserve" text-anchor="start" font-family="Georgia, Times, 'Times New Roman', serif" font-size="24" id="svg_3" y="27.15385" x="12.44231" stroke-width="0" stroke="#bf0000" fill="#000000">!</text>
+ </g>
+</svg>
\ No newline at end of file
diff --git a/Crow/Icons/compiler_warning.svg b/Crow/Icons/compiler_warning.svg
new file mode 100644 (file)
index 0000000..9dac377
--- /dev/null
@@ -0,0 +1,53 @@
+<?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:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="378.30496" height="326.05325" id="svg2" sodipodi:version="0.32" inkscape:version="0.46" version="1.0" sodipodi:docbase="C:\Documents and Settings\KevinDuke\Desktop" sodipodi:docname="Ambox_warning_yellow.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape">
+  <sodipodi:namedview id="base" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" gridtolerance="10000" guidetolerance="10" objecttolerance="10" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="1.4225" inkscape:cx="90.333919" inkscape:cy="200" inkscape:document-units="px" inkscape:current-layer="layer1" width="400px" height="400px" showgrid="false" inkscape:window-width="1280" inkscape:window-height="750" inkscape:window-x="-8" inkscape:window-y="-8"/>
+  <defs id="defs4">
+    <linearGradient id="linearGradient3149">
+      <stop id="stop3151" style="stop-color:#f6eb71;stop-opacity:1;" offset="0"/>
+      <stop offset="0.5138889" style="stop-color:#ffeb00;stop-opacity:1;" id="stop3271"/>
+      <stop offset="1" style="stop-color:#f4c930;stop-opacity:1;" id="stop3153"/>
+    </linearGradient>
+    <linearGradient id="linearGradient3134">
+      <stop offset="0" style="stop-color:#ffb300;stop-opacity:1;" id="stop3136"/>
+      <stop id="stop3165" style="stop-color:#ff9900;stop-opacity:1;" offset="1"/>
+    </linearGradient>
+    <linearGradient id="linearGradient3140" gradientUnits="userSpaceOnUse" inkscape:collect="always" x1="57.553783" x2="142.16243" xlink:href="#linearGradient3149" y1="-7.0170116" y2="123.27175"/>
+    <linearGradient id="linearGradient3148" gradientUnits="userSpaceOnUse" inkscape:collect="always" x1="57.553783" x2="142.16243" xlink:href="#linearGradient3149" y1="-7.0170116" y2="123.27175"/>
+    <filter inkscape:collect="always" id="filter3172">
+      <feGaussianBlur inkscape:collect="always" stdDeviation="5.0924795" id="feGaussianBlur3174"/>
+    </filter>
+    <linearGradient inkscape:collect="always" xlink:href="#linearGradient3134" id="linearGradient2184" gradientUnits="userSpaceOnUse" x1="-49.164131" y1="-82.266502" x2="227.38515" y2="216.95886" gradientTransform="matrix(1.2084425,0,0,1.2084425,89.669573,106.93911)"/>
+  </defs>
+  <metadata id="metadata7">
+    <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>3D effect warning triangle</dc:title>
+        <dc:date>18/9/07</dc:date>
+        <dc:creator>
+          <cc:Agent>
+            <dc:title>Tim O'Ryan</dc:title>
+          </cc:Agent>
+        </dc:creator>
+        <cc:license rdf:resource="http://creativecommons.org/licenses/by-sa/2.5/"/>
+      </cc:Work>
+      <cc:License rdf:about="http://creativecommons.org/licenses/by-sa/2.5/">
+        <cc:permits rdf:resource="http://web.resource.org/cc/Reproduction"/>
+        <cc:permits rdf:resource="http://web.resource.org/cc/Distribution"/>
+        <cc:requires rdf:resource="http://web.resource.org/cc/Notice"/>
+        <cc:requires rdf:resource="http://web.resource.org/cc/Attribution"/>
+        <cc:permits rdf:resource="http://web.resource.org/cc/DerivativeWorks"/>
+        <cc:requires rdf:resource="http://web.resource.org/cc/ShareAlike"/>
+      </cc:License>
+    </rdf:RDF>
+  </metadata>
+  <g inkscape:label="Layer 1" id="layer1" inkscape:groupmode="layer" transform="translate(-15.90328,-38.352144)">
+    <path style="opacity:1;fill:#777777;fill-opacity:0.79729728;stroke:none;stroke-width:20.6877861;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter3172)" d="M 213.05399,47.37801 C 208.83955,47.5955 205.01929,49.92458 202.89552,53.57127 L 33.940149,345.10803 C 31.700749,348.97294 31.693669,353.73905 33.921559,357.61061 C 36.149459,361.48217 40.273789,363.87084 44.740599,363.87665 L 381.66948,364.40534 C 386.13811,364.41875 390.27406,362.04591 392.51793,358.18147 C 394.7618,354.31704 394.77229,349.54876 392.54546,345.67448 L 224.53419,53.60904 C 222.18314,49.53899 217.74782,47.13166 213.05399,47.37801 L 213.05399,47.37801 z M 213.65821,84.83972 L 360.06857,339.36792 L 66.417039,338.91476 L 213.65821,84.83972 z" id="path3152"/>
+    <path style="opacity:1;fill:url(#linearGradient2184);fill-opacity:1;stroke:#a37900;stroke-width:6.25;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 199.82666,41.494396 C 195.61222,41.711894 191.79197,44.040971 189.66819,47.687664 L 20.712823,339.22442 C 18.473424,343.08933 18.466339,347.85544 20.694238,351.727 C 22.922136,355.59856 27.04646,357.98723 31.513278,357.99304 L 368.44215,358.52173 C 372.91078,358.53514 377.04674,356.1623 379.2906,352.29786 C 381.53447,348.43343 381.54497,343.66515 379.31813,339.79087 L 211.30686,47.725427 C 208.95581,43.655381 204.52049,41.248051 199.82666,41.494396 L 199.82666,41.494396 z M 200.43088,78.956113 L 346.84124,333.48431 L 53.189715,333.03115 L 200.43088,78.956113 z" id="path2178"/>
+    <path sodipodi:arg2="1.5723975" style="opacity:1;fill:url(#linearGradient3140);fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient3148);stroke-width:20.6877861;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" id="path2160" sodipodi:cx="91.428574" sodipodi:cy="117.14286" sodipodi:arg1="0.52519998" sodipodi:type="star" d="M 230.71429,197.85715 L -48.114905,197.41068 L 91.686339,-43.839248 L 230.71429,197.85715 z" sodipodi:r2="80.491158" sodipodi:sides="3" inkscape:randomized="0" transform="matrix(1.2084425,0,0,1.2084425,89.669573,106.93911)" inkscape:rounded="0" sodipodi:r1="160.98232" inkscape:flatsided="true"/>
+    <path sodipodi:nodetypes="cccsccscccc" d="M 199.89464,117.765 C 197.29017,117.9016 194.92932,119.3644 193.61684,121.65473 L 89.204984,304.75655 C 87.82107,307.18391 87.81669,310.17731 89.193499,312.60887 C 90.570306,315.04044 93.119077,316.54066 95.879504,316.54431 L 304.09647,316.87636 C 306.85801,316.88477 309.41397,315.39449 310.80064,312.96739 C 312.18732,310.54032 312.1938,307.54558 310.81766,305.1123 L 206.98922,121.67846 C 205.53631,119.12222 202.79534,117.61029 199.89464,117.765 L 199.89464,117.765 z" style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:20.6877861;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1" id="path19491"/>
+    <path style="font-size:333.22640991px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Angsana New" d="M 203.68708,256.44083 L 198.35371,256.44083 C 197.80195,246.98576 195.96287,235.6645 192.83645,222.47702 L 186.4916,195.60456 C 182.6908,179.49366 180.79042,167.95467 180.79043,160.9876 C 180.79042,146.92949 187.50308,139.90034 200.92845,139.90018 C 206.81347,139.90034 211.67173,141.84424 215.50321,145.73187 C 219.33458,149.61982 221.25031,154.58066 221.25036,160.61436 C 221.25031,167.0216 219.22731,178.685 215.18136,195.60456 L 208.74456,222.47702 C 206.47631,231.93222 204.79048,243.25347 203.68708,256.44083 L 203.68708,256.44083 z M 201.20431,274.07588 C 207.45715,274.07593 212.30007,276.20643 215.7331,280.46742 C 219.166,284.72848 220.88248,289.28498 220.88254,294.13692 C 220.88248,300.54403 218.79818,305.47375 214.62964,308.92611 C 210.461,312.37848 205.98588,314.10466 201.20431,314.10466 C 194.89007,314.10466 190.03183,311.98969 186.62953,307.75978 C 183.22721,303.52985 181.52605,298.9889 181.52607,294.13692 C 181.52605,288.47632 183.41112,283.71765 187.18126,279.86093 C 190.95137,276.00427 195.6257,274.07593 201.20431,274.07588 L 201.20431,274.07588 z" id="text2171"/>
+  </g>
+</svg>
\ No newline at end of file
diff --git a/Crow/Icons/compiler_warning_orange.svg b/Crow/Icons/compiler_warning_orange.svg
new file mode 100644 (file)
index 0000000..233437f
--- /dev/null
@@ -0,0 +1,54 @@
+<?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:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="378.30496" height="326.05325" id="svg2" sodipodi:version="0.32" inkscape:version="0.46" version="1.0" sodipodi:docbase="C:\Documents and Settings\KevinDuke\Desktop" sodipodi:docname="Ambox_warning_orange.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape">
+  <sodipodi:namedview id="base" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" gridtolerance="10000" guidetolerance="10" objecttolerance="10" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="0.64877047" inkscape:cx="107.30042" inkscape:cy="95.503105" inkscape:document-units="px" inkscape:current-layer="layer1" width="400px" height="400px" showgrid="false" inkscape:window-width="1280" inkscape:window-height="750" inkscape:window-x="-8" inkscape:window-y="-8"/>
+  <defs id="defs4">
+    <linearGradient id="linearGradient3149">
+      <stop id="stop3151" style="stop-color:#f3c381;stop-opacity:1;" offset="0"/>
+      <stop offset="0.25" style="stop-color:#f4b24e;stop-opacity:1;" id="stop3172"/>
+      <stop offset="0.5" style="stop-color:#f39502;stop-opacity:1;" id="stop3171"/>
+      <stop offset="1" style="stop-color:#f67805;stop-opacity:1;" id="stop3153"/>
+    </linearGradient>
+    <linearGradient id="linearGradient3134">
+      <stop offset="0" style="stop-color:#ffb300;stop-opacity:1;" id="stop3136"/>
+      <stop id="stop3165" style="stop-color:#ff9900;stop-opacity:1;" offset="1"/>
+    </linearGradient>
+    <linearGradient id="linearGradient3140" gradientUnits="userSpaceOnUse" inkscape:collect="always" x1="15.087464" x2="120.05667" xlink:href="#linearGradient3149" y1="9.8531685" y2="108.72849"/>
+    <linearGradient id="linearGradient3148" gradientUnits="userSpaceOnUse" inkscape:collect="always" x1="15.087464" x2="120.05667" xlink:href="#linearGradient3149" y1="9.8531685" y2="108.72849"/>
+    <filter inkscape:collect="always" id="filter3172">
+      <feGaussianBlur inkscape:collect="always" stdDeviation="5.0924795" id="feGaussianBlur3174"/>
+    </filter>
+    <linearGradient inkscape:collect="always" xlink:href="#linearGradient3134" id="linearGradient2184" gradientUnits="userSpaceOnUse" x1="-49.164131" y1="-82.266502" x2="227.38515" y2="216.95886" gradientTransform="matrix(1.2084425,0,0,1.2084425,89.669573,106.93911)"/>
+  </defs>
+  <metadata id="metadata7">
+    <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>3D effect warning triangle</dc:title>
+        <dc:date>18/9/07</dc:date>
+        <dc:creator>
+          <cc:Agent>
+            <dc:title>Tim O'Ryan</dc:title>
+          </cc:Agent>
+        </dc:creator>
+        <cc:license rdf:resource="http://creativecommons.org/licenses/by-sa/2.5/"/>
+      </cc:Work>
+      <cc:License rdf:about="http://creativecommons.org/licenses/by-sa/2.5/">
+        <cc:permits rdf:resource="http://web.resource.org/cc/Reproduction"/>
+        <cc:permits rdf:resource="http://web.resource.org/cc/Distribution"/>
+        <cc:requires rdf:resource="http://web.resource.org/cc/Notice"/>
+        <cc:requires rdf:resource="http://web.resource.org/cc/Attribution"/>
+        <cc:permits rdf:resource="http://web.resource.org/cc/DerivativeWorks"/>
+        <cc:requires rdf:resource="http://web.resource.org/cc/ShareAlike"/>
+      </cc:License>
+    </rdf:RDF>
+  </metadata>
+  <g inkscape:label="Layer 1" id="layer1" inkscape:groupmode="layer" transform="translate(-15.90328,-38.352144)">
+    <path style="opacity:1;fill:#777777;fill-opacity:0.79729728;stroke:none;stroke-width:20.6877861;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter3172)" d="M 213.05399,47.37801 C 208.83955,47.5955 205.01929,49.92458 202.89552,53.57127 L 33.940149,345.10803 C 31.700749,348.97294 31.693669,353.73905 33.921559,357.61061 C 36.149459,361.48217 40.273789,363.87084 44.740599,363.87665 L 381.66948,364.40534 C 386.13811,364.41875 390.27406,362.04591 392.51793,358.18147 C 394.7618,354.31704 394.77229,349.54876 392.54546,345.67448 L 224.53419,53.60904 C 222.18314,49.53899 217.74782,47.13166 213.05399,47.37801 L 213.05399,47.37801 z M 213.65821,84.83972 L 360.06857,339.36792 L 66.417039,338.91476 L 213.65821,84.83972 z" id="path3152"/>
+    <path style="opacity:1;fill:url(#linearGradient2184);fill-opacity:1;stroke:#a37900;stroke-width:6.25;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 199.82666,41.494396 C 195.61222,41.711894 191.79197,44.040971 189.66819,47.687664 L 20.712823,339.22442 C 18.473424,343.08933 18.466339,347.85544 20.694238,351.727 C 22.922136,355.59856 27.04646,357.98723 31.513278,357.99304 L 368.44215,358.52173 C 372.91078,358.53514 377.04674,356.1623 379.2906,352.29786 C 381.53447,348.43343 381.54497,343.66515 379.31813,339.79087 L 211.30686,47.725427 C 208.95581,43.655381 204.52049,41.248051 199.82666,41.494396 L 199.82666,41.494396 z M 200.43088,78.956113 L 346.84124,333.48431 L 53.189715,333.03115 L 200.43088,78.956113 z" id="path2178"/>
+    <path sodipodi:arg2="1.5723975" style="opacity:1;fill:url(#linearGradient3140);fill-opacity:1.0;fill-rule:nonzero;stroke:url(#linearGradient3148);stroke-width:20.68778610000000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" id="path2160" sodipodi:cx="91.428574" sodipodi:cy="117.14286" sodipodi:arg1="0.52519998" sodipodi:type="star" d="M 230.71429,197.85715 L -48.114905,197.41068 L 91.686339,-43.839248 L 230.71429,197.85715 z" sodipodi:r2="80.491158" sodipodi:sides="3" inkscape:randomized="0" transform="matrix(1.2084425,0,0,1.2084425,89.669573,106.93911)" inkscape:rounded="0" sodipodi:r1="160.98232" inkscape:flatsided="true"/>
+    <path sodipodi:nodetypes="cccsccscccc" d="M 199.89464,117.765 C 197.29017,117.9016 194.92932,119.3644 193.61684,121.65473 L 89.204984,304.75655 C 87.82107,307.18391 87.81669,310.17731 89.193499,312.60887 C 90.570306,315.04044 93.119077,316.54066 95.879504,316.54431 L 304.09647,316.87636 C 306.85801,316.88477 309.41397,315.39449 310.80064,312.96739 C 312.18732,310.54032 312.1938,307.54558 310.81766,305.1123 L 206.98922,121.67846 C 205.53631,119.12222 202.79534,117.61029 199.89464,117.765 L 199.89464,117.765 z" style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:20.6877861;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1" id="path19491"/>
+    <path style="font-size:333.22640991px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Angsana New" d="M 203.68708,256.44083 L 198.35371,256.44083 C 197.80195,246.98576 195.96287,235.6645 192.83645,222.47702 L 186.4916,195.60456 C 182.6908,179.49366 180.79042,167.95467 180.79043,160.9876 C 180.79042,146.92949 187.50308,139.90034 200.92845,139.90018 C 206.81347,139.90034 211.67173,141.84424 215.50321,145.73187 C 219.33458,149.61982 221.25031,154.58066 221.25036,160.61436 C 221.25031,167.0216 219.22731,178.685 215.18136,195.60456 L 208.74456,222.47702 C 206.47631,231.93222 204.79048,243.25347 203.68708,256.44083 L 203.68708,256.44083 z M 201.20431,274.07588 C 207.45715,274.07593 212.30007,276.20643 215.7331,280.46742 C 219.166,284.72848 220.88248,289.28498 220.88254,294.13692 C 220.88248,300.54403 218.79818,305.47375 214.62964,308.92611 C 210.461,312.37848 205.98588,314.10466 201.20431,314.10466 C 194.89007,314.10466 190.03183,311.98969 186.62953,307.75978 C 183.22721,303.52985 181.52605,298.9889 181.52607,294.13692 C 181.52605,288.47632 183.41112,283.71765 187.18126,279.86093 C 190.95137,276.00427 195.6257,274.07593 201.20431,274.07588 L 201.20431,274.07588 z" id="text2171"/>
+  </g>
+</svg>
\ No newline at end of file
diff --git a/Crow/Icons/copy-file.svg b/Crow/Icons/copy-file.svg
new file mode 100644 (file)
index 0000000..63c2dd3
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generated by IcoMoon.io -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16">
+<path fill="#FFFFFF" d="M13 3h-3l-3-3h-7v13h6v3h10v-10l-3-3zM7 1l2 2h-2v-2zM1 12v-11h5v3h3v8h-8zM15 15h-8v-2h3v-9h2v3h3v8zM13 6v-2l2 2h-2z"></path>
+</svg>
diff --git a/Crow/Icons/crow.svg b/Crow/Icons/crow.svg
new file mode 100644 (file)
index 0000000..4904e68
--- /dev/null
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<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:xlink="http://www.w3.org/1999/xlink"
+   version="1.1"
+   id="svg4242"
+   viewBox="0 0 256 256"
+   height="256"
+   width="256">
+  <defs
+     id="defs4244">
+    <radialGradient
+       r="110.25913"
+       fy="270.70752"
+       fx="372.23856"
+       cy="270.70752"
+       cx="372.23856"
+       gradientTransform="matrix(1.062155,-0.3274557,0.07305654,0.2041912,-10.009476,513.34516)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient4294"
+       xlink:href="#linearGradient3866" />
+    <linearGradient
+       id="linearGradient3866">
+      <stop
+         id="stop3868"
+         offset="0"
+         style="stop-color:#7f8084;stop-opacity:1;" />
+      <stop
+         id="stop3870"
+         offset="1"
+         style="stop-color:#33343c;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       y2="306.08167"
+       x2="343.59439"
+       y1="279.60583"
+       x1="334.9541"
+       gradientTransform="matrix(1,0,0,1.0091769,40.07781,159.75914)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4296"
+       xlink:href="#linearGradient3876" />
+    <linearGradient
+       id="linearGradient3876">
+      <stop
+         id="stop3878"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         style="stop-color:#7f7f7f;stop-opacity:1;"
+         offset="0.64247584"
+         id="stop3884" />
+      <stop
+         id="stop3880"
+         offset="1"
+         style="stop-color:#1a1a1a;stop-opacity:1;" />
+    </linearGradient>
+  </defs>
+  <metadata
+     id="metadata4247">
+    <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></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     transform="translate(0,-796.36219)"
+     id="layer1">
+    <g
+       transform="matrix(1.2350742,-0.53882275,0.65916664,1.4650343,-673.53297,471.49303)"
+       id="g4184">
+      <path
+         style="opacity:1;fill:url(#radialGradient4294);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.96044916px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="m 487.68304,411.00893 c -2.99682,-0.23105 -5.81177,-0.55121 -9.1875,-0.59375 -8.40713,2.77744 -30.28806,5.94556 -33.03125,6.90625 -42.47708,7.28343 -94.98471,24.15339 -120.90625,39.21875 l 4.5,12 c -2.11072,-3.69563 -4.31718,-7.19861 -5.78125,-12.1875 -0.18227,2.82859 0.84496,7.82162 1.5,9.53125 0.65503,1.70962 1.61057,3.36756 3.34375,5.96875 -1.99166,-0.84449 -7.11658,-11.75343 -7.375,-12.875 -0.15386,-0.66767 1.05534,10.33056 2.84375,11.6875 -1.80696,-1.49188 -1.52305,-1.66181 -2.75,-2.84375 -1.22696,-1.18195 -2.71173,-3.93719 -3.9375,-5.0625 0.3843,2.49805 3.42098,8.39174 4.8125,9.40625 -0.86053,-0.0279 -2.97317,-2.46587 -3.46875,-3.03125 -0.99115,-1.13075 -1.48932,-3.9565 -2.03125,-4.9375 -0.50246,0.39731 -1.6681,3.34737 -2.0625,4 -0.39441,0.65262 -0.74884,1.40612 -1.03125,2.25 -0.56482,1.68775 -0.87547,3.68174 -0.96875,5.75 -0.0933,2.06825 0.0591,4.22015 0.46875,6.15625 0.20483,0.96804 0.47603,1.87987 0.8125,2.71875 0.33646,0.83887 0.71548,1.60436 1.1875,2.25 0.70264,0.75969 1.84388,1.48568 3.25,2.15625 1.40611,0.67056 3.0821,1.28578 4.84375,1.8125 1.76164,0.52671 3.60577,0.95312 5.375,1.28125 1.76922,0.32812 3.47738,0.55018 4.90625,0.625 0.24031,-0.0875 -0.45581,-0.78256 -1.3125,-2.15625 -0.42835,-0.68686 -0.90225,-1.56763 -1.3125,-2.59375 -0.41026,-1.02613 -0.77149,-2.21654 -0.96875,-3.59375 0.5081,1.36152 1.77536,3.78883 3.0625,5.34375 1.28714,1.55493 5.38999,3.14625 5.5,3.03125 -1.03917,-1.47385 -1.47448,-2.2088 -1.71875,-4.5625 -0.16233,-1.56406 -0.31418,-1.70098 -0.3125,-2.59375 0.002,-1.18053 -0.57594,-1.72994 -0.53125,-2.03125 1.77126,1.56 0.69713,6.57726 3.03125,8.65625 0.54324,0.48387 1.40275,0.27647 2.375,0.4375 0.36923,-0.0588 2.2407,0.0938 2.625,0.0312 l -4.34375,-9.75 5.75,9.5 c 2.18192,-0.25918 6.49585,-2.30584 6.53125,-2.3125 -1.93129,-2.48728 -4.12405,-4.98149 -6.53125,-7.46875 1.76984,1.76613 7.30073,6.91537 7.78125,6.96875 2.24762,0.24967 67.93089,-26.76399 85.5,-30.96875 l -4.71875,-6.3125 6.625,5.90625 c 16.63744,-3.85235 29.80389,-5.39971 51.3125,-12.78125 2.77265,-0.72543 5.88424,-2.80725 9.125,-5.3125 l -2.96875,-9.34375 4.1875,8.375 c 1.1134,-0.89476 2.14336,-1.65364 3.3125,-2.65625 l -4.28125,-6.4375 5.9375,5.03125 c 0.22145,-0.19242 0.4641,-0.39907 0.6875,-0.59375 l -3.40625,-4.4375 4.59375,3.40625 c 1.49874,-1.3084 2.9456,-2.59231 4.53125,-3.9375 l -4.84375,-1.25 7.75,-1.03125 c 2.01674,-1.64114 4.00268,-3.30676 6.15625,-4.8125 -4.34436,-4.58536 -11.02475,-7.98537 -20.34375,-10.09375 l -5.71875,4.15625 3.875,-4.59375 c -0.34329,-0.0684 -0.74363,-0.0912 -1.09375,-0.15625 l -6.34375,4.375 3.09375,-4.90625 c -0.40346,-0.0596 -0.77578,-0.13199 -1.1875,-0.1875 l -6.1875,6.1875 3.78125,-6.4375 c -0.69105,-0.0777 -1.53691,-0.0583 -2.25,-0.125 l -7.25,7.96875 5.1875,-8.125 z"
+         id="path4150" />
+      <path
+         style="fill:url(#linearGradient4296);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="m 502.57781,423.08731 c -85.9867,11.86766 -158.64637,39.03586 -212.85714,75.32784 -0.54182,2.60394 0.35052,2.5753 2.37373,3.22191 50.90148,-37.35132 134.86502,-67.36701 210.48341,-78.54975 z"
+         id="path4143" />
+    </g>
+    <text
+       id="text4912"
+       y="1041.6479"
+       x="85.000008"
+       style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       xml:space="preserve"><tspan
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Arial Black';-inkscape-font-specification:'Arial Black, '"
+         y="1041.6479"
+         x="85.000008"
+         id="tspan4914">C<tspan
+   id="tspan4916"
+   style="font-size:15px">.</tspan>R<tspan
+   id="tspan4918"
+   style="font-size:15px">.</tspan>O<tspan
+   id="tspan4922"
+   style="font-size:15px">.</tspan>W<tspan
+   id="tspan4924"
+   style="font-size:15px">.</tspan></tspan></text>
+  </g>
+</svg>
diff --git a/Crow/Icons/crowproj.svg b/Crow/Icons/crowproj.svg
new file mode 100644 (file)
index 0000000..b0f6b86
--- /dev/null
@@ -0,0 +1,8 @@
+<svg width="64" height="64" xmlns="http://www.w3.org/2000/svg">
+ <!-- Created with Method Draw - http://github.com/duopixel/Method-Draw/ -->
+ <g>
+  <rect opacity="1.0" rx="5" id="svg_1" height="59" width="59" y="2.5" x="2.5" stroke-width="6" stroke="#111111" fill="#bbbbcc"/>
+  <rect opacity="1.0" rx="5" id="svg_1" height="22" width="59" y="2.5" x="2.5" stroke-width="6" stroke="#111111" fill="#4455aa"/>
+<!--  <line stroke-linecap="undefined" stroke-linejoin="undefined" id="svg_2" y2="24.5" x2="61.5" y1="24.5" x1="2.5" stroke-width="6" stroke="#bbbbbb" fill="none"/>-->
+ </g>
+</svg>
\ No newline at end of file
diff --git a/Crow/Icons/exit-symbol.svg b/Crow/Icons/exit-symbol.svg
new file mode 100644 (file)
index 0000000..3fbaa0d
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generated by IcoMoon.io -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16">
+<path fill="#FFFFFF" d="M14 6h-1.7c-0.2 0-0.4-0.1-0.6-0.2l-1.3-1.3c-0.2-0.3-0.6-0.5-1.1-0.5h-0.3c1.1 0 2-0.9 2-2s-0.9-2-2-2-2 0.9-2 2c0 0.7 0.4 1.4 1 1.7l-0.2 0.3h-2c-1.1 0-2.3 0.5-3 1.5l-0.6 0.8c-0.4 0.4-0.2 1 0.2 1.3 0.4 0.2 0.9 0.1 1.2-0.3l0.5-0.7c0.3-0.4 0.7-0.6 1.2-0.6h0.8l-0.7 1.6c-0.3 0.6-0.4 1.2-0.4 1.9v2c0 0.3-0.2 0.5-0.5 0.5h-2.5c-0.6 0-1 0.4-1 1s0.4 1 1 1h3.5c0.8 0 1.5-0.7 1.5-1.5v-2.5l3.8 4.5c0.6 0.9 1.7 1.5 2.8 1.5h0.9l-5.4-6.7c-0.3-0.4-0.2-0.8 0-1.3l0.6-1.5 0.7 0.8c0.4 0.4 1 0.7 1.6 0.7h2c0.6 0 1-0.4 1-1s-0.4-1-1-1z"></path>
+</svg>
diff --git a/Crow/Icons/exit2.svg b/Crow/Icons/exit2.svg
new file mode 100644 (file)
index 0000000..2361ba8
--- /dev/null
@@ -0,0 +1,64 @@
+<?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"
+   width="64"
+   height="64"
+   viewBox="0 0 64 64.000002"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.91 r13725"
+   sodipodi:docname="exit.svg">
+  <defs
+     id="defs4" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="2.6992188"
+     inkscape:cx="-80.264621"
+     inkscape:cy="63.946457"
+     inkscape:document-units="px"
+     inkscape:current-layer="svg2"
+     showgrid="false"
+     units="px"
+     inkscape:window-width="1280"
+     inkscape:window-height="1009"
+     inkscape:window-x="0"
+     inkscape:window-y="0"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata7">
+    <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>
+  <path
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:9;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+     d="m 13.884262,15.143117 c 24.231966,13.49131 34.18672,34.186719 34.18672,34.186719"
+     id="path4175"
+     inkscape:connector-curvature="0"
+     sodipodi:nodetypes="cc" />
+  <path
+     sodipodi:nodetypes="cc"
+     inkscape:connector-curvature="0"
+     id="path4177"
+     d="M 50.43178,15.408178 C 20.436536,37.282439 16.245061,49.594898 16.245061,49.594898"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:9;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+</svg>
diff --git a/Crow/Icons/expandable.svg b/Crow/Icons/expandable.svg
new file mode 100644 (file)
index 0000000..134d02e
--- /dev/null
@@ -0,0 +1,11 @@
+<svg width="9" height="9" xmlns="http://www.w3.org/2000/svg">
+ <g id="False">
+  <rect height="8" width="8" y="0.5" x="0.5" stroke="#000" fill="#fff" stroke-width="1"/>
+  <line stroke-linecap="undefined" stroke-linejoin="undefined" id="svg_2" y2="4.5" x2="7" y1="4.5" x1="2" stroke="#000" fill="none"/>
+  <line stroke-linecap="undefined" stroke-linejoin="undefined" id="svg_3" y2="7" x2="4.5" y1="2" x1="4.5" stroke="#000" fill="none"/>
+ </g>
+ <g id="True">
+  <rect height="8" width="8" y="0.5" x="0.5" stroke="#000" fill="#fff" stroke-width="1"/>
+  <line stroke-linecap="undefined" stroke-linejoin="undefined" id="svg_2" y2="4.5" x2="7" y1="4.5" x1="2" stroke="#000" fill="none"/>
+ </g>
+</svg>
\ No newline at end of file
diff --git a/Crow/Icons/file.svg b/Crow/Icons/file.svg
new file mode 100644 (file)
index 0000000..b156b0a
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+        width="64px" height="64px" viewBox="0 0 64 64" enable-background="new 0 0 64 64" xml:space="preserve">
+<g>
+       <polygon fill="#ffffff" stroke="#000000" stroke-width="2" stroke-miterlimit="10" points="23,1 55,1 55,63 9,63 9,15      "/>
+       <polyline fill="#ffffff" stroke="#000000" stroke-width="2" stroke-miterlimit="10" points="9,15 23,15 23,1       "/>
+</g>
+</svg>
diff --git a/Crow/Icons/folder.svg b/Crow/Icons/folder.svg
new file mode 100644 (file)
index 0000000..84caa4f
--- /dev/null
@@ -0,0 +1,15 @@
+<?xml version="1.0"?>
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64">
+       <defs>
+               <linearGradient id="0" x1="59.31" y1="-10.513" x2="59.15" y2="-37.783" gradientUnits="userSpaceOnUse" gradientTransform="matrix(4.17478 0 0 4.16765-1066.12 447.73)">
+                       <stop stop-color="#e4c754"/>
+                       <stop offset="1" stop-color="#ffe684"/>
+               </linearGradient>
+               <linearGradient gradientUnits="userSpaceOnUse" y2="354.29" x2="-704.05" y1="647.77" x1="-701.19" id="1">
+                       <stop stop-color="#ffdd5a"/>
+                       <stop offset="1" stop-color="#f4eca5"/>
+               </linearGradient>
+       </defs>
+       <path d="m-880.52 294.78c-4.626 0-8.349 3.718-8.349 8.335v161.41l88.94.193 372.09.807v-121.2c0-4.618-3.724-8.335-8.35-8.335h-265.48c-8.51.751-9.607-.377-13.812-5.981-5.964-7.968-14.969-21.443-20.84-29.21-4.712-6.805-5.477-6.02-13.292-6.02z" transform="matrix(.12614 0 0 .12614 115.04-27.788)" fill="url(#0)" color="#000"/>
+       <rect transform="matrix(.12614 0 0 .12614 115.04-27.788)" y="356.85" x="-890.28" height="295.13" width="463.85" fill="url(#1)" stroke="url(#1)" stroke-width="2.378" rx="9.63"/>
+</svg>
diff --git a/Crow/Icons/frame.svg b/Crow/Icons/frame.svg
new file mode 100644 (file)
index 0000000..576d418
--- /dev/null
@@ -0,0 +1,66 @@
+<?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"
+   width="67.316353mm"
+   height="27.756908mm"
+   viewBox="0 0 67.316353 27.756908"
+   version="1.1"
+   id="svg8895"
+   inkscape:version="0.92.2 (5c3e80d, 2017-08-06)"
+   sodipodi:docname="frame.svg">
+  <defs
+     id="defs8889" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#434343"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="0.35"
+     inkscape:cx="195.58263"
+     inkscape:cy="-58.812438"
+     inkscape:document-units="mm"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:window-width="1600"
+     inkscape:window-height="881"
+     inkscape:window-x="0"
+     inkscape:window-y="0"
+     inkscape:window-maximized="1"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0" />
+  <metadata
+     id="metadata8892">
+    <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></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Calque 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(106.44585,-169.24652)">
+    <polygon
+       transform="matrix(0.26458333,0,0,0.26458333,-314.15488,52.734079)"
+       style="fill:#f5fcff"
+       id="polygon6818"
+       points="860.815,440.362 785.042,440.362 785.042,469.369 789.327,469.369 789.327,515.071 815.242,540.986 971.44,540.986 971.44,545.27 1001.438,545.27 1001.438,540.986 1039.466,540.986 1039.466,470.564 1013.109,444.207 1012.21,445.105 1038.193,471.091 1038.193,539.714 815.77,539.714 790.598,514.544 790.598,445.919 1014.176,445.919 1014.176,444.648 860.815,444.648 " />
+  </g>
+</svg>
diff --git a/Crow/Icons/iconInfo.svg b/Crow/Icons/iconInfo.svg
new file mode 100644 (file)
index 0000000..8234550
--- /dev/null
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 62 62" width="62" height="62" version="1.0">
+       <defs>
+               <linearGradient id="fieldGradient" gradientUnits="userSpaceOnUse" x1="42.9863" y1="7.01270" x2="22.0144" y2="51.9871">
+                       <stop offset="0.0" stop-color="#BCD6FE"/>
+                       <stop offset="1.0" stop-color="#6787D3"/>
+               </linearGradient>
+               <linearGradient id="edgeGradient" gradientUnits="userSpaceOnUse" x1="55.4541" y1="42.7529" x2="9.54710" y2="16.2485">
+                       <stop offset="0.0" stop-color="#3057A7"/>
+                       <stop offset="1.0" stop-color="#5A7AC6"/>
+               </linearGradient>
+               <radialGradient id="shadowGradient">
+                       <stop offset="0.0" stop-color="#C0C0C0"/>
+                       <stop offset="0.88" stop-color="#C0C0C0"/>
+                       <stop offset="1.0" stop-color="#C0C0C0" stop-opacity="0.0"/>
+               </radialGradient>
+       </defs>
+       <circle id="shadow" r="26.5" cy="29.5" cx="32.5" fill="url(#shadowGradient)" transform="matrix(1.0648,0.0,0.0,1.064822,-2.1,1.0864)"/>
+       <circle id="field" r="25.8" cx="31" cy="31" fill="url(#fieldGradient)" stroke="url(#edgeGradient)" stroke-width="2"/>
+       <g id="info" fill="white">
+               <polygon points="23,25 35,25 35,44 39,44 39,48 23,48 23,44 27,44 27,28 23,28 23,25"/>
+               <circle r="4" cx="31" cy="17"/>
+       </g>
+</svg>
\ No newline at end of file
diff --git a/Crow/Icons/level-up.svg b/Crow/Icons/level-up.svg
new file mode 100644 (file)
index 0000000..86d7c78
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generated by IcoMoon.io -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16">
+<path fill="#FFFFFF" d="M9 0l4 7h-3v9h-7l2-3h2v-6h-3z"></path>
+</svg>
diff --git a/Crow/Icons/maximize.svg b/Crow/Icons/maximize.svg
new file mode 100644 (file)
index 0000000..b70604a
--- /dev/null
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   width="14"
+   height="14"
+   viewBox="0 0 14 14">
+       <path
+               style="fill:none;stroke:#ffffff;stroke-width:2"
+               d="m 2,2 10,0 0,10 -10,0 z"/>
+</svg>
diff --git a/Crow/Icons/minimize.svg b/Crow/Icons/minimize.svg
new file mode 100644 (file)
index 0000000..dc3dcd2
--- /dev/null
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   width="64"
+   height="64"
+   viewBox="0 0 14 14">
+       <path
+               style="fill:#ffffff;stroke:none"
+               d="m 1,6 12,0 0,4 -12,0 z"/>
+</svg>
diff --git a/Crow/Icons/normalize.svg b/Crow/Icons/normalize.svg
new file mode 100644 (file)
index 0000000..b8b44bd
--- /dev/null
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   width="14"
+   height="14"
+   viewBox="0 0 14 14">
+<!--   <rect y="7" x="7" height="40" width="40"
+     style="opacity:1;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:3;stroke-opacity:1" />
+   <rect y="7" x="7" height="10" width="40"
+     style="opacity:1;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:3;stroke-opacity:1" />
+   <rect y="17" x="17" height="40" width="40"
+     style="opacity:1;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:3;stroke-opacity:1" />
+   <rect y="17" x="17" height="10" width="40"
+     style="opacity:1;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:3;stroke-opacity:1" />-->
+       <path
+               style="fill:none;stroke:#ffffff;stroke-width:1"
+               d="m 1,1 8,0 0,8 -8,0 z"/>
+       <path
+               style="fill:none;stroke:#ffffff;stroke-width:1"
+               d="m 4,4 8,0 0,8 -8,0 z"/>
+</svg>
diff --git a/Crow/Icons/open-file.svg b/Crow/Icons/open-file.svg
new file mode 100644 (file)
index 0000000..d5c6a84
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generated by IcoMoon.io -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16">
+<path fill="#FFFFFF" d="M 4.0527344 0.24023438 L 4.0527344 2.1777344 L 1.9316406 2.1777344 L 0.93164062 4.1777344 L -0.068359375 4.1777344 L -0.068359375 15.177734 L 13.931641 15.177734 L 15.931641 6.1777344 L 13.759766 6.1777344 L 13.759766 3.4746094 L 10.525391 0.24023438 L 4.0527344 0.24023438 z M 4.8613281 1.0488281 L 9.7148438 1.0488281 L 9.7148438 4.2851562 L 12.951172 4.2851562 L 12.951172 6.1777344 L 4.8613281 6.1777344 L 4.8613281 1.0488281 z M 10.525391 1.0488281 L 12.951172 3.4746094 L 10.525391 3.4746094 L 10.525391 1.0488281 z M 2.53125 3.1777344 L 4.0527344 3.1777344 L 4.0527344 6.1777344 L 2.9316406 6.1777344 L 0.93164062 12.078125 L 0.93164062 5.1777344 L 1.53125 5.1777344 L 2.53125 3.1777344 z M 3.6328125 7.1777344 L 14.832031 7.1777344 L 13.232422 14.177734 L 1.3320312 14.078125 L 3.6328125 7.1777344 z "/>
+</svg>
diff --git a/Crow/Icons/paste-on-document.svg b/Crow/Icons/paste-on-document.svg
new file mode 100644 (file)
index 0000000..b0a705e
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generated by IcoMoon.io -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16">
+<path fill="#FFFFFF" d="M13 4h-3v-4h-10v14h6v2h10v-9l-3-3zM3 1h4v1h-4v-1zM15 15h-8v-10h5v3h3v7zM13 7v-2l2 2h-2z"></path>
+</svg>
diff --git a/Crow/Icons/project.svg b/Crow/Icons/project.svg
new file mode 100644 (file)
index 0000000..7522605
--- /dev/null
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns="http://www.w3.org/2000/svg"
+   viewBox="0 0 64 64"
+   height="64"
+   width="64">  
+  <g>
+   <path fill="#3333dd" stroke="#bbbbff" stroke-width="10" d="m1.655043,19.482317l17.905939,-17.913175l25.323143,0l17.905937,17.913175l0,25.333551l-17.905937,17.913147l-25.323143,0l-17.905939,-17.913147l0,-25.333551z" id="svg_2"/>
+  </g>
+</svg>
diff --git a/Crow/Icons/projectRef.svg b/Crow/Icons/projectRef.svg
new file mode 100644 (file)
index 0000000..3ebd7b5
--- /dev/null
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<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"
+   viewBox="0 0 64 64"
+   height="64"
+   width="64"
+   id="svg2"
+   version="1.1">  
+  <defs id="defs6" />
+  <g>
+          <path fill="#007fff" stroke="#111111" stroke-width="2" d="m1.655043,19.482317l17.905939,-17.913175l25.323143,0l17.905937,17.913175l0,25.333551l-17.905937,17.913147l-25.323143,0l-17.905939,-17.913147l0,-25.333551z" id="svg_2"/>
+         <path
+            d="M 15,33.964845 A 6.2543149,5.8551034 0 0 1 8.7456846,39.819949 6.2543149,5.8551034 0 0 1 2.4913703,33.964845 6.2543149,5.8551034 0 0 1 8.7456846,28.109741 6.2543149,5.8551034 0 0 1 15,33.964845 Z M 30.205524,19.726298 h 24.484978 c 3.833495,0 6.919666,3.88699 6.919666,8.715226 v 11.046641 c 0,4.828235 -3.086171,8.715225 -6.919666,8.715225 H 30.205524 c -3.833494,0 -6.919665,-3.88699 -6.919665,-8.715225 V 28.441524 c 0,-4.828236 3.086171,-8.715226 6.919665,-8.715226 z M 15,33.964845 h 8.285859"
+            style="opacity:1;fill:#a0a8ab;fill-opacity:1;stroke:#181818;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
+            id="path819" />
+  </g>
+</svg>
diff --git a/Crow/Icons/question.svg b/Crow/Icons/question.svg
new file mode 100644 (file)
index 0000000..fb8e3d3
--- /dev/null
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generated by IcoMoon.io -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16">
+<path fill="#FFFFFF" d="M9 11h-3c0-3 1.6-4 2.7-4.6 0.4-0.2 0.7-0.4 0.9-0.6 0.5-0.5 0.3-1.2 0.2-1.4-0.3-0.7-1-1.4-2.3-1.4-2.1 0-2.5 1.9-2.5 2.3l-3-0.4c0.2-1.7 1.7-4.9 5.5-4.9 2.3 0 4.3 1.3 5.1 3.2 0.7 1.7 0.4 3.5-0.8 4.7-0.5 0.5-1.1 0.8-1.6 1.1-0.9 0.5-1.2 1-1.2 2z"></path>
+<path fill="#FFFFFF" d="M9.5 14c0 1.105-0.895 2-2 2s-2-0.895-2-2c0-1.105 0.895-2 2-2s2 0.895 2 2z"></path>
+</svg>
diff --git a/Crow/Icons/radiobutton.svg b/Crow/Icons/radiobutton.svg
new file mode 100644 (file)
index 0000000..b102b3e
--- /dev/null
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<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"
+   id="svg2"
+   width="64"
+   height="64"
+   viewBox="0 0 64 64"
+   version="1.1">
+  <metadata
+     id="metadata12">
+    <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></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs10" />
+  <g
+     id="True">
+    <circle
+       r="30"
+       cy="32"
+       cx="32"
+       id="path4166"
+       style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.99999952;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:0;stroke-dasharray:none;stroke-opacity:1" />
+    <circle
+       r="22"
+       cy="32"
+       cx="32"
+       id="path4166-1"
+       style="opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:2.99999952;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:0;stroke-dasharray:none;stroke-opacity:1" />
+  </g>
+  <circle
+     style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.99999952;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:0;stroke-dasharray:none;stroke-opacity:1"
+     id="False"
+     cx="32"
+     cy="32"
+     r="30" />
+</svg>
diff --git a/Crow/Icons/scissors.svg b/Crow/Icons/scissors.svg
new file mode 100644 (file)
index 0000000..4b5a225
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generated by IcoMoon.io -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16">
+<path fill="#FFFFFF" d="M16 3.1c0 0-2.1-1.1-3.5-1-0.3 0-0.5 0.1-0.7 0.2l-4.3 3.4-1.8-1.5c0.1-0.3 0.2-0.6 0.3-1 0.1-1.8-1.4-3.4-3.3-3.2-1.2 0.1-2.3 1-2.6 2.2-0.3 1.3 0.2 2.5 1.2 3.2l3.3 2.6-3.3 2.6c-1 0.7-1.5 1.9-1.2 3.2 0.3 1.2 1.4 2 2.6 2.2 1.9 0.2 3.4-1.4 3.2-3.2 0-0.3-0.1-0.7-0.3-1l1.8-1.5 4.3 3.4c0.2 0.1 0.4 0.2 0.7 0.2 1.4 0.1 3.5-1 3.5-1l-5.7-4.9 5.8-4.9zM2.8 4.6c-0.9-0.1-1.6-0.9-1.5-1.8s0.9-1.6 1.8-1.5c0.9 0.1 1.6 0.9 1.5 1.8 0 0.9-0.9 1.6-1.8 1.5zM3.1 14.7c-0.9 0.1-1.7-0.6-1.8-1.5s0.6-1.7 1.5-1.8c0.9-0.1 1.7 0.6 1.8 1.5s-0.6 1.7-1.5 1.8zM12.4 3.2c0 0 0.1 0 0.2 0 0.4 0 0.9 0.1 1.4 0.2l-6.8 5.7-0.9-1.1 6.1-4.8zM14 12.6c-0.5 0.2-1 0.3-1.4 0.2-0.1 0-0.2 0-0.2 0l-4-3.2 1-0.9 4.6 3.9z"></path>
+</svg>
diff --git a/Crow/Icons/updown.svg b/Crow/Icons/updown.svg
new file mode 100644 (file)
index 0000000..0df8175
--- /dev/null
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<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"
+   version="1.1"
+   id="svg2"
+   width="44.717388"
+   height="31.938803"
+   viewBox="0 0 44.717389 31.938803">
+  <metadata
+     id="metadata11">
+    <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></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs9" />
+  <g
+     transform="matrix(0.81305037,0,0,0.79847006,-3.6589183,-5.1900554)"
+     id="up">
+    <path
+       id="path4144"
+       d="M 32,9 7,44 57,44 Z"
+       style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+  </g>
+  <g
+     transform="matrix(0.81305037,0,0,0.79847006,-3.6589183,-5.1900554)"
+     id="down">
+    <path
+       id="path4144-0"
+       d="M 7,9 57,9 32,44 Z"
+       style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+  </g>
+</svg>
diff --git a/Crow/Icons/warning_construction.svg b/Crow/Icons/warning_construction.svg
new file mode 100644 (file)
index 0000000..4c101ec
--- /dev/null
@@ -0,0 +1,60 @@
+<?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:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="378.30496" height="326.05325" id="svg2" sodipodi:version="0.32" inkscape:version="0.46" version="1.0" sodipodi:docbase="C:\Documents and Settings\KevinDuke\Desktop" sodipodi:docname="Ambox_warning_blue_construction.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape">
+  <sodipodi:namedview id="base" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" gridtolerance="10000" guidetolerance="10" objecttolerance="10" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="0.64877047" inkscape:cx="-125.04673" inkscape:cy="39.346892" inkscape:document-units="px" inkscape:current-layer="layer1" width="400px" height="400px" showgrid="false" inkscape:window-width="1264" inkscape:window-height="764" inkscape:window-x="0" inkscape:window-y="0"/>
+  <defs id="defs4">
+    <linearGradient id="linearGradient3134">
+      <stop offset="0" style="stop-color:#4c99f5;stop-opacity:1;" id="stop3136"/>
+      <stop id="stop3165" style="stop-color:#1361ba;stop-opacity:1;" offset="0.5"/>
+      <stop offset="1" style="stop-color:#194c9a;stop-opacity:1;" id="stop3138"/>
+    </linearGradient>
+    <linearGradient id="linearGradient3140" gradientUnits="userSpaceOnUse" inkscape:collect="always" x1="91.29969" x2="244.97258" xlink:href="#linearGradient3134" y1="4.3178039" y2="237.70302"/>
+    <linearGradient id="linearGradient3148" gradientUnits="userSpaceOnUse" inkscape:collect="always" x1="91.29969" x2="244.97258" xlink:href="#linearGradient3134" y1="4.3178039" y2="237.70302"/>
+    <filter inkscape:collect="always" id="filter3172">
+      <feGaussianBlur inkscape:collect="always" stdDeviation="5.0924795" id="feGaussianBlur3174"/>
+    </filter>
+    <linearGradient inkscape:collect="always" xlink:href="#linearGradient3134" id="linearGradient2184" gradientUnits="userSpaceOnUse" x1="29.753853" y1="-13.269632" x2="202.58235" y2="183.58783" gradientTransform="matrix(1.2084425,0,0,1.2084425,89.669573,106.93911)"/>
+  </defs>
+  <metadata id="metadata7">
+    <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>3D effect warning triangle</dc:title>
+        <dc:date>18/9/07</dc:date>
+        <dc:creator>
+          <cc:Agent>
+            <dc:title>Tim O'Ryan</dc:title>
+          </cc:Agent>
+        </dc:creator>
+        <cc:license rdf:resource="http://creativecommons.org/licenses/by-sa/2.5/"/>
+      </cc:Work>
+      <cc:License rdf:about="http://creativecommons.org/licenses/by-sa/2.5/">
+        <cc:permits rdf:resource="http://web.resource.org/cc/Reproduction"/>
+        <cc:permits rdf:resource="http://web.resource.org/cc/Distribution"/>
+        <cc:requires rdf:resource="http://web.resource.org/cc/Notice"/>
+        <cc:requires rdf:resource="http://web.resource.org/cc/Attribution"/>
+        <cc:permits rdf:resource="http://web.resource.org/cc/DerivativeWorks"/>
+        <cc:requires rdf:resource="http://web.resource.org/cc/ShareAlike"/>
+      </cc:License>
+    </rdf:RDF>
+  </metadata>
+  <g inkscape:label="Layer 1" id="layer1" inkscape:groupmode="layer" transform="translate(-15.90328,-38.352144)">
+    <path style="opacity:1;fill:#777777;fill-opacity:0.79729728;stroke:none;stroke-width:20.6877861;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter3172)" d="M 213.05399,47.37801 C 208.83955,47.5955 205.01929,49.92458 202.89552,53.57127 L 33.940149,345.10803 C 31.700749,348.97294 31.693669,353.73905 33.921559,357.61061 C 36.149459,361.48217 40.273789,363.87084 44.740599,363.87665 L 381.66948,364.40534 C 386.13811,364.41875 390.27406,362.04591 392.51793,358.18147 C 394.7618,354.31704 394.77229,349.54876 392.54546,345.67448 L 224.53419,53.60904 C 222.18314,49.53899 217.74782,47.13166 213.05399,47.37801 L 213.05399,47.37801 z M 213.65821,84.83972 L 360.06857,339.36792 L 66.417039,338.91476 L 213.65821,84.83972 z" id="path3152"/>
+    <path style="opacity:1;fill:url(#linearGradient2184);fill-opacity:1;stroke:#001387;stroke-width:6.25;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 199.82666,41.494396 C 195.61222,41.711894 191.79197,44.040971 189.66819,47.687664 L 20.712823,339.22442 C 18.473424,343.08933 18.466339,347.85544 20.694238,351.727 C 22.922136,355.59856 27.04646,357.98723 31.513278,357.99304 L 368.44215,358.52173 C 372.91078,358.53514 377.04674,356.1623 379.2906,352.29786 C 381.53447,348.43343 381.54497,343.66515 379.31813,339.79087 L 211.30686,47.725427 C 208.95581,43.655381 204.52049,41.248051 199.82666,41.494396 L 199.82666,41.494396 z M 200.43088,78.956113 L 346.84124,333.48431 L 53.189715,333.03115 L 200.43088,78.956113 z" id="path2178"/>
+    <path sodipodi:arg2="1.5723975" style="opacity:1;fill:url(#linearGradient3140);fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient3148);stroke-width:20.6877861;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" id="path2160" sodipodi:cx="91.428574" sodipodi:cy="117.14286" sodipodi:arg1="0.52519998" sodipodi:type="star" d="M 230.71429,197.85715 L -48.114905,197.41068 L 91.686339,-43.839248 L 230.71429,197.85715 z" sodipodi:r2="80.491158" sodipodi:sides="3" inkscape:randomized="0" transform="matrix(1.2084425,0,0,1.2084425,89.669573,106.93911)" inkscape:rounded="0" sodipodi:r1="160.98232" inkscape:flatsided="true"/>
+    <path sodipodi:nodetypes="cccsccscccc" d="M 199.89464,117.765 C 197.29017,117.9016 194.92932,119.3644 193.61684,121.65473 L 89.204984,304.75655 C 87.82107,307.18391 87.81669,310.17731 89.193499,312.60887 C 90.570306,315.04044 93.119077,316.54066 95.879504,316.54431 L 304.09647,316.87636 C 306.85801,316.88477 309.41397,315.39449 310.80064,312.96739 C 312.18732,310.54032 312.1938,307.54558 310.81766,305.1123 L 206.98922,121.67846 C 205.53631,119.12222 202.79534,117.61029 199.89464,117.765 L 199.89464,117.765 z" style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:20.6877861;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1" id="path19491"/>
+    <g id="g2689" transform="matrix(0.4429717,0,0,0.4429717,130.45212,176.47068)">
+      <path id="path633" style="font-size:12px;fill-rule:evenodd" d="M 385.98026,297.1542 L 140.36506,297.47 C 138.14026,297.2692 136.52876,296.7617 137.37106,294.1072 L 227.62156,178.4191 C 230.74276,173.9958 235.45166,171.6041 240.18906,171.7401 L 285.54036,171.6433 C 292.89546,171.6399 295.73166,173.769 299.77886,178.8507 L 388.15426,292.9709 C 388.96306,294.9787 388.23836,296.9865 385.98026,297.1542 z"/>
+      <rect id="rect613" style="font-size:12px;fill:#000002;fill-rule:evenodd" transform="matrix(0.8854492,0.4647361,-0.4080531,0.9129582,0,0)" y="-14.842998" x="123.87642" ry="11.816919" rx="11.204546" height="124.68408" width="62.141693"/>
+      <rect id="rect615" style="font-size:12px;fill-rule:evenodd" y="46.624874" x="62.235527" ry="8" rx="9.4117651" height="32.5" width="100.00001"/>
+      <rect id="rect616" style="font-size:12px;fill-rule:evenodd" transform="matrix(0.4686899,-0.8833628,0.7446349,0.6674719,0,0)" y="81.759407" x="-81.341789" ry="6.8044353" rx="8.770999" height="27.643017" width="93.191841"/>
+      <rect id="rect617" style="font-size:12px;fill-rule:evenodd" transform="matrix(0.8845854,0.4663782,-0.4366812,0.8996163,0,0)" y="83.646034" x="80.548698" ry="3.8168414" rx="27.532589" height="15.505919" width="292.53378"/>
+      <rect id="rect618" style="font-size:12px;fill-rule:evenodd" transform="matrix(-5.7205843e-2,-0.9983624,0.9970356,-7.6942184e-2,0,0)" y="144.00377" x="-203.17215" ry="6.6537714" rx="12.701341" height="27.030947" width="134.95171"/>
+      <ellipse sodipodi:ry="32.5" sodipodi:rx="31.25" sodipodi:cy="467.36218" sodipodi:cx="418.75" id="path619" style="font-size:12px;fill-rule:evenodd;stroke-width:1" transform="matrix(0.957573,0,0,0.972804,-219.55633,-423.0267)" ry="32.5" rx="31.25" cy="467.36218" cx="418.75"/>
+      <rect id="rect621" style="font-size:12px;fill-rule:evenodd" transform="matrix(-0.2340079,-0.9722347,0.9856452,-0.16883,0,0)" y="45.608078" x="-250.27161" ry="7.6888905" rx="7.3474178" height="31.236115" width="78.066315"/>
+      <rect id="rect622" style="font-size:12px;fill-rule:evenodd" transform="matrix(-7.5698648e-3,-0.9999713,0.9970336,7.6967061e-2,0,0)" y="100.42473" x="-287.73053" ry="7.6912837" rx="7.3637767" height="31.245834" width="78.240143"/>
+      <rect id="rect623" style="font-size:12px;fill-rule:evenodd" transform="matrix(0.4947081,-0.8690592,0.8178671,0.5754071,0,0)" y="135.70329" x="-232.42075" ry="7.8654013" rx="14.748785" height="31.953188" width="156.70583"/>
+    </g>
+  </g>
+</svg>
\ No newline at end of file
diff --git a/Crow/Images/Icons/Cursors/arrow b/Crow/Images/Icons/Cursors/arrow
new file mode 100644 (file)
index 0000000..61f968e
Binary files /dev/null and b/Crow/Images/Icons/Cursors/arrow differ
diff --git a/Crow/Images/Icons/Cursors/bottom_left_corner b/Crow/Images/Icons/Cursors/bottom_left_corner
new file mode 100644 (file)
index 0000000..e9a41a2
Binary files /dev/null and b/Crow/Images/Icons/Cursors/bottom_left_corner differ
diff --git a/Crow/Images/Icons/Cursors/bottom_right_corner b/Crow/Images/Icons/Cursors/bottom_right_corner
new file mode 100644 (file)
index 0000000..208faf4
Binary files /dev/null and b/Crow/Images/Icons/Cursors/bottom_right_corner differ
diff --git a/Crow/Images/Icons/Cursors/cross b/Crow/Images/Icons/Cursors/cross
new file mode 100644 (file)
index 0000000..4596b48
Binary files /dev/null and b/Crow/Images/Icons/Cursors/cross differ
diff --git a/Crow/Images/Icons/Cursors/hand b/Crow/Images/Icons/Cursors/hand
new file mode 100644 (file)
index 0000000..23939b7
Binary files /dev/null and b/Crow/Images/Icons/Cursors/hand differ
diff --git a/Crow/Images/Icons/Cursors/help b/Crow/Images/Icons/Cursors/help
new file mode 100644 (file)
index 0000000..cd7ec27
Binary files /dev/null and b/Crow/Images/Icons/Cursors/help differ
diff --git a/Crow/Images/Icons/Cursors/ibeam b/Crow/Images/Icons/Cursors/ibeam
new file mode 100644 (file)
index 0000000..ccbdcb5
Binary files /dev/null and b/Crow/Images/Icons/Cursors/ibeam differ
diff --git a/Crow/Images/Icons/Cursors/move b/Crow/Images/Icons/Cursors/move
new file mode 100644 (file)
index 0000000..ab98f6a
Binary files /dev/null and b/Crow/Images/Icons/Cursors/move differ
diff --git a/Crow/Images/Icons/Cursors/sb_h_double_arrow b/Crow/Images/Icons/Cursors/sb_h_double_arrow
new file mode 100644 (file)
index 0000000..1768b6a
Binary files /dev/null and b/Crow/Images/Icons/Cursors/sb_h_double_arrow differ
diff --git a/Crow/Images/Icons/Cursors/sb_v_double_arrow b/Crow/Images/Icons/Cursors/sb_v_double_arrow
new file mode 100644 (file)
index 0000000..a36abd4
Binary files /dev/null and b/Crow/Images/Icons/Cursors/sb_v_double_arrow differ
diff --git a/Crow/Images/Icons/Cursors/top_left_corner b/Crow/Images/Icons/Cursors/top_left_corner
new file mode 100644 (file)
index 0000000..3493adc
Binary files /dev/null and b/Crow/Images/Icons/Cursors/top_left_corner differ
diff --git a/Crow/Images/Icons/Cursors/top_right_corner b/Crow/Images/Icons/Cursors/top_right_corner
new file mode 100644 (file)
index 0000000..264cc57
Binary files /dev/null and b/Crow/Images/Icons/Cursors/top_right_corner differ
diff --git a/Crow/Images/Icons/buttonB.svg b/Crow/Images/Icons/buttonB.svg
new file mode 100755 (executable)
index 0000000..56bc8d9
--- /dev/null
@@ -0,0 +1,125 @@
+<?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:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   version="1.1"
+   width="228.18092"
+   height="82.974884"
+   id="Root"
+   pointer-events="none"
+   inkscape:version="0.91 r13725"
+   sodipodi:docname="buttonB.svg">
+  <metadata
+     id="metadata5666">
+    <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></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="1280"
+     inkscape:window-height="984"
+     id="namedview5664"
+     showgrid="false"
+     inkscape:zoom="1.7041667"
+     inkscape:cx="64.029735"
+     inkscape:cy="41.487444"
+     inkscape:window-x="0"
+     inkscape:window-y="16"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="layer1"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0" />
+  <defs
+     id="defs4">
+    <linearGradient
+       id="linearGradient3159">
+      <stop
+         id="stop3163"
+         style="stop-color:#000000;stop-opacity:0"
+         offset="0" />
+      <stop
+         id="stop3161"
+         style="stop-color:#000000;stop-opacity:0.5"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3030">
+      <stop
+         id="stop3032"
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="0" />
+      <stop
+         id="stop3034"
+         style="stop-color:#ffffff;stop-opacity:0"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       x1="120"
+       y1="10"
+       x2="120"
+       y2="50"
+       id="linearGradient3113"
+       xlink:href="#linearGradient3030"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.037186,0,0,1.037186,-4.4623201,-1.8593001)" />
+    <radialGradient
+       cx="120"
+       cy="170"
+       r="100"
+       fx="120"
+       fy="170"
+       id="radialGradient3165"
+       xlink:href="#linearGradient3159"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,-0.75431712,2.074372,0,-232.64324,174.46232)" />
+  </defs>
+  <g
+     id="layer1"
+     transform="translate(-5.9095402,-8.5125599)">
+    <rect
+       width="228.18092"
+       height="82.974884"
+       ry="41.487442"
+       x="5.9095402"
+       y="8.5125599"
+       id="ButtonBase"
+       style="fill:currentColor;stroke:none" />
+    <rect
+       width="228.18092"
+       height="82.974884"
+       ry="41.487442"
+       x="5.9095402"
+       y="8.5125599"
+       id="ButtonGlow"
+       style="fill:url(#radialGradient3165);stroke:none" />
+    <path
+       d="m 47.39698,13.69849 145.20604,0 c 11.49202,0 23.35397,11.319856 20.74372,20.74372 -1.90259,6.868746 -9.2517,5.18593 -20.74372,5.18593 l -145.205989,0 c -11.49202,0 -18.841228,1.682847 -20.743771,-5.18593 -2.610262,-9.423863 9.251699,-20.74372 20.74372,-20.74372 z"
+       id="ButtonHighlight"
+       style="fill:url(#linearGradient3113)"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
diff --git a/Crow/Images/Icons/crow.png b/Crow/Images/Icons/crow.png
new file mode 100644 (file)
index 0000000..7b737d0
Binary files /dev/null and b/Crow/Images/Icons/crow.png differ
diff --git a/Crow/Images/Icons/exit.svg b/Crow/Images/Icons/exit.svg
new file mode 100644 (file)
index 0000000..cb8d1c2
--- /dev/null
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   width="64"
+   height="64"
+   viewBox="0 0 64 64">
+  <path
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:9;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+     d="m 13.884262,15.143117 c 24.231966,13.49131 34.18672,34.186719 34.18672,34.186719"
+     id="path4175"
+     inkscape:connector-curvature="0"
+     sodipodi:nodetypes="cc" />
+  <path
+     sodipodi:nodetypes="cc"
+     inkscape:connector-curvature="0"
+     id="path4177"
+     d="M 50.43178,15.408178 C 20.436536,37.282439 16.245061,49.594898 16.245061,49.594898"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:9;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+</svg>
diff --git a/Crow/Images/Icons/file.svg b/Crow/Images/Icons/file.svg
new file mode 100644 (file)
index 0000000..a31c367
--- /dev/null
@@ -0,0 +1,103 @@
+<?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:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="128" height="128" id="svg2606" sodipodi:version="0.32" inkscape:version="0.48.0 r9654" version="1.0" sodipodi:docname="mime2.svgz" inkscape:output_extension="org.inkscape.output.svgz.inkscape" inkscape:export-filename="/home/pinheiro/pics/oxygen-icons/scalable/mimetypes/mime2.png" inkscape:export-xdpi="360" inkscape:export-ydpi="360">
+  <defs id="defs2608">
+    <linearGradient inkscape:collect="always" id="linearGradient3913">
+      <stop style="stop-color:#ffffff;stop-opacity:1;" offset="0" id="stop3915"/>
+      <stop style="stop-color:#ffffff;stop-opacity:0;" offset="1" id="stop3917"/>
+    </linearGradient>
+    <linearGradient id="linearGradient3897">
+      <stop style="stop-color:#fcfcfc;stop-opacity:1" offset="0" id="stop3899"/>
+      <stop id="stop3901" offset="0.52275378" style="stop-color:#f8f8f8;stop-opacity:1"/>
+      <stop style="stop-color:#f0efef;stop-opacity:1;" offset="0.72337759" id="stop3903"/>
+      <stop style="stop-color:#e3e1e1;stop-opacity:1;" offset="0.89024991" id="stop3905"/>
+      <stop style="stop-color:#cecbcb;stop-opacity:1" offset="1" id="stop3907"/>
+    </linearGradient>
+    <linearGradient id="linearGradient6131">
+      <stop id="stop6133" offset="0" style="stop-color:#fcfcfc;stop-opacity:1"/>
+      <stop style="stop-color:#f8f8f8;stop-opacity:1" offset="0.52275378" id="stop6135"/>
+      <stop id="stop6141" offset="0.77457333" style="stop-color:#f0efef;stop-opacity:1;"/>
+      <stop id="stop6139" offset="0.90122044" style="stop-color:#e3e1e1;stop-opacity:1;"/>
+      <stop id="stop6137" offset="1" style="stop-color:#cecbcb;stop-opacity:1"/>
+    </linearGradient>
+    <linearGradient inkscape:collect="always" id="linearGradient5982">
+      <stop style="stop-color:#ffffff;stop-opacity:1;" offset="0" id="stop5984"/>
+      <stop style="stop-color:#ffffff;stop-opacity:0;" offset="1" id="stop5986"/>
+    </linearGradient>
+    <linearGradient id="linearGradient4518">
+      <stop style="stop-color:#eeecec;stop-opacity:1" offset="0" id="stop4520"/>
+      <stop id="stop5969" offset="0.40000001" style="stop-color:#f4f4f4;stop-opacity:1"/>
+      <stop style="stop-color:#f6f5f5;stop-opacity:1" offset="1" id="stop4522"/>
+    </linearGradient>
+    <linearGradient inkscape:collect="always" xlink:href="#linearGradient4518" id="linearGradient4524" x1="72" y1="0" x2="72" y2="116.40091" gradientUnits="userSpaceOnUse"/>
+    <radialGradient inkscape:collect="always" xlink:href="#linearGradient5982" id="radialGradient5988" cx="64" cy="64.004021" fx="63.793392" fy="47.274845" r="47.5" gradientTransform="matrix(1.6842105,-0.08429519,0.06886339,1.3758846,-48.197002,-18.663233)" gradientUnits="userSpaceOnUse"/>
+    <clipPath clipPathUnits="userSpaceOnUse" id="clipPath6093">
+      <path inkscape:connector-curvature="0" sodipodi:nodetypes="cccssccc" id="path6095" d="M 17.000001,8 17,120 l 57.5,0 c 1.675283,0 3.914297,-0.56468 7,-3.6 8.870045,-8.72523 20.24047,-19.851805 27.49904,-27.175957 C 111.4396,86.761431 112,84.752873 112,82.5 L 112,8 z" style="fill:#ffffff;fill-opacity:1"/>
+    </clipPath>
+    <filter inkscape:collect="always" id="filter6118" x="-0.1126375" width="1.225275" y="-0.12064722" height="1.2412944">
+      <feGaussianBlur inkscape:collect="always" stdDeviation="2.3860572" id="feGaussianBlur6120"/>
+    </filter>
+    <filter inkscape:collect="always" id="filter6171" x="-0.47870938" width="1.9574188" y="-0.51275067" height="2.0255013">
+      <feGaussianBlur inkscape:collect="always" stdDeviation="10.140743" id="feGaussianBlur6173"/>
+    </filter>
+    <clipPath clipPathUnits="userSpaceOnUse" id="clipPath3889">
+      <path sodipodi:nodetypes="cscscssc" inkscape:connector-curvature="0" id="path3891" d="m 112,82.502986 c 0,4.465301 -2.79749,6.409952 -5.27972,8.093625 -5.10854,3.46508 -14.939114,3.32536 -20.720284,3.40638 -0.081,5.781159 0.16586,15.504599 -3.29922,20.613139 -1.68367,2.48224 -5.29051,5.38687 -8.20078,5.38687 2.31803,0 4.74284,-1.33476 7.58402,-4.08481 9.14197,-8.84873 17.36714,-16.13535 25.673154,-25.297529 C 109.67612,88.503916 112,86.97878 112,82.502986 z" style="fill:url(#linearGradient3893);fill-opacity:1;stroke:none"/>
+    </clipPath>
+    <linearGradient inkscape:collect="always" xlink:href="#linearGradient6131" id="linearGradient3893" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.0119858,0,0,1.0119858,-0.89554075,-0.9871566)" x1="86.73793" y1="93.621468" x2="95.460213" y2="102.34375"/>
+    <linearGradient inkscape:collect="always" xlink:href="#linearGradient3897" id="linearGradient3895" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.0119858,0,0,1.0119858,-0.89554075,-0.9871566)" x1="86.73793" y1="93.621468" x2="95.18235" y2="102.06589"/>
+    <filter inkscape:collect="always" id="filter3909">
+      <feGaussianBlur inkscape:collect="always" stdDeviation="0.43040059" id="feGaussianBlur3911"/>
+    </filter>
+    <radialGradient inkscape:collect="always" xlink:href="#linearGradient3913" id="radialGradient3919" cx="90.75" cy="110.25299" fx="90.75" fy="110.25299" r="18.750002" gradientTransform="matrix(1.3067347,0,0,1.3067347,-27.83617,-33.818441)" gradientUnits="userSpaceOnUse"/>
+    <filter inkscape:collect="always" id="filter3826">
+      <feGaussianBlur inkscape:collect="always" stdDeviation="1.036" id="feGaussianBlur3828"/>
+    </filter>
+    <filter inkscape:collect="always" id="filter3834">
+      <feGaussianBlur inkscape:collect="always" stdDeviation="1.50075" id="feGaussianBlur3836"/>
+    </filter>
+  </defs>
+  <sodipodi:namedview id="base" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="2.8284271" inkscape:cx="36.031425" inkscape:cy="70.491779" inkscape:document-units="px" inkscape:current-layer="layer1" width="128px" height="128px" showgrid="false" inkscape:grid-points="true" showguides="true" inkscape:guide-bbox="true" inkscape:window-width="1487" inkscape:window-height="789" inkscape:window-x="317" inkscape:window-y="144" inkscape:snap-global="false" inkscape:window-maximized="0">
+    <inkscape:grid id="GridFromPre046Settings" type="xygrid" originx="0px" originy="0px" spacingx="1px" spacingy="1px" color="#0000ff" empcolor="#0000ff" opacity="0.2" empopacity="0.4" empspacing="2" visible="true" enabled="true" snapvisiblegridlinesonly="true"/>
+    <sodipodi:guide orientation="1,0" position="-68,29.325902" id="guide4564"/>
+    <sodipodi:guide orientation="1,0" position="-51.972348,130.81475" id="guide3859"/>
+  </sodipodi:namedview>
+  <metadata id="metadata2611">
+    <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>
+  <g inkscape:label="Livello 1" inkscape:groupmode="layer" id="layer1">
+    <path style="opacity:0.26237623999999998;fill:#000000;fill-opacity:1;filter:url(#filter3834)" d="m 17,8.5 0,112 58.1875,0 c 2.115556,0 4.528919,-1.77169 7,-4.25 0.71234,-0.71442 1.440746,-1.39395 2.15625,-2.09375 0.415612,-0.40649 0.832187,-0.81443 1.25,-1.21875 7.773958,-7.40962 14.98341,-14.022603 22.21875,-22 0.42065,-0.420645 0.81207,-0.811101 1.15625,-1.1875 1.46444,-1.497657 2.76158,-2.837804 2.99375,-5.8625 L 112,83.15625 112,8.5 z" id="path5990" inkscape:connector-curvature="0" sodipodi:nodetypes="ccsssccccccc"/>
+    <path sodipodi:nodetypes="cccssccc" id="path3722" d="M 17.000001,8 17,120.2 l 57.746418,0 c 4.168166,0 7.728581,-4.85625 20.853582,-17.1 7.48636,-6.9837 10.43958,-10.889428 13.15009,-13.599933 C 110.49334,87.756815 112,86.462557 112,82.3 L 112,8 z" style="fill:#000000;fill-opacity:0.70053478000000002;filter:url(#filter3826)" inkscape:connector-curvature="0"/>
+    <path style="fill:#ffffff;fill-opacity:1" d="M 17.000001,8 17,120 l 57.5,0 c 1.675283,0 3.914297,-0.56468 7,-3.6 8.870045,-8.72523 20.24047,-19.851805 27.49904,-27.175957 C 111.4396,86.761431 112,84.752873 112,82.5 L 112,8 z" id="path34" sodipodi:nodetypes="cccssccc" inkscape:connector-curvature="0"/>
+    <path style="fill:url(#linearGradient4524);fill-opacity:1" d="M 18.5,9 C 18.160156,9 18,9.2346178 18,9.5 l 0,107.96875 c 0,0.82158 0.679323,1.5 1.5,1.5 l 53.6875,0 c 0.05307,0 0.810384,0.0234 1.5,0.0313 1.777664,-0.0401 3.131974,-0.75374 4.356035,-1.59328 1.051866,-0.29103 20.649835,-19.619593 29.770955,-28.809238 1.36239,-1.372621 2.18546,-3.948169 2.18546,-4.895612 L 111,9.5 C 111,9.1772826 110.83678,9 110.5,9 z" id="path3967" inkscape:connector-curvature="0" sodipodi:nodetypes="ccsssccscccc"/>
+    <path clip-path="url(#clipPath6093)" style="opacity:0.27722772;fill:#000000;fill-opacity:1;stroke:none;filter:url(#filter6171)" d="m 114.4,82.502986 c 0,4.465301 -4.99749,6.609952 -7.47972,8.293625 -5.10854,3.46508 -14.739114,3.52536 -20.520284,3.60638 -0.081,5.781159 -0.03414,15.304599 -3.49922,20.413139 -1.68367,2.48224 -5.79051,8.68687 -8.70078,8.68687 -2.091359,1.5337 3.488204,8.21101 6.734971,5.31989 9.501888,-8.46107 35.131683,-30.022704 43.350823,-39.262889 2.04044,-2.29392 -4.90514,-9.844666 -9.88579,-7.057015 z" id="path6153" inkscape:connector-curvature="0" sodipodi:nodetypes="cscscssc"/>
+    <path style="fill:#000000" d="" id="path2197"/>
+    <g style="display:none" id="Frame_copy" display="none" transform="translate(1042.0419,-279.83386)">
+      <g style="display:inline" display="inline" id="g3978">
+        <image style="opacity:0.75" width="571" height="571" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAjsAAAI7CAYAAAAK1lpbAAAACXBIWXMAAAsSAAALEgHS3X78AAAA BGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAFS4SURB VHja7J0JdxrbkmaDFBpsX9fr//8rq969tqwJul2tfA6CiDhxkgQS2HstlgbbEsISufXFcFYCAJfK 6oC/syq8r/ftU7E98O3ofdn7q38OABf6ZAkAy/457RWX1uvV953jOWTbeL36vuz1XkFCggCQHQCY 4WeyJTS90qJfrg74O6d8HslEZhu8r/fvVP+sIjoIEACyA8DPX/H9VWnJxGQ109urQHiO+XwSpS5b 5yYzvj1FkBAgAGQHgJ+3othUZaYlJXPfhkSqjo0nIJtAeo51i+SoIkEIEACyA3BzctMrNBURqbw9 TPg33p+tOiTu0DQnS3Q2weuttzeNf5993DlEqPV1AgCyA3AVcpNJTUU8vJfR+6K/0/q4QyJL0dc4 d5rjyc7GeblpiIz9u623Wx9305CvQ5Ig5AcA2QG4KLmpJDUtgfHenvO2anwee59ETlPOyspXnqxs GnKT3T6Kf5Z9zkrCVOkJqiZBAIDsABz1Z2aK3NgkJZOYu+Tt1uut900VIZs4neK5xEtJNhOFxhMY 7+VH4e9UP08rDdpKfwkM+QFAdgCOnt5kU089YhNJyV3xbfu+6O+3RKiaHLVKWYc+v1T6daqCsw2S mUhuPhzRqdwiQcqkyKZP1X4gUh8AZAfgpOlNqxyVpTWRuKw7327dhuR1fZ+qJbLqKPoxU51tR5qz dYSjKjTvhdez9300UqJWCpT1AGWpD+IDgOwAlAWnld54vS6tpCaSm7Xz+jr5O5H4rJPPWS1prYqp zrnLWNtCalIpXUXiUnlZeV9VhqoCVCl7IT4AyA5ASXCy9CZKbVpCY2Umu90HEuR9zEq6E8lOZWqr d/z8FOlOayIrK2f1JDvvjdd7bpkQefLzIX39P4gPALIDfM93C06lgfjOSVyqEnPfeOndeiUnanRu SU0mOecePW9JTyZBUf9Or/Bktzfn9bfgzyvyk5XAEB8AZAegtO8mGwG/S9IbLSCRxFRfz4SnVcYa giTHK1lFkrNqyI0nO6dMdiLZyXbdtJKflvi8S17eiiTHe/nmvB3JUFQia8kP4gOA7AApTld6YyUi K0PdN24PieB4AlRNdHpHyyubkaMEZ6lnY1UkaCP1aa6etOejkOr03loC9C7t8hfiA4DsAIJTkhuv T+a+ITcPSmweAtmpJDlrJ8nJenGm9txkYiNymaee9wpQJD829bGJik19oqTHS3deG29777Mfb3w7 Kn8dIj5IDyA7AAv+Xo7KVPaC75WmouQmEpwHIzgPzvuqotNKcVoJTvX8q0pa0yM355Cdivz0pkAt 8akkP9Xylic0r8n7XpO/+yZx+atXfEh7ANkBuOAUpzU1VRGb+0Bmopv9+1XB0ZKTCU6W2AzJ4zFF alYLe+6oiE+vBE0VoOoIeyY8meRktzfz+hTxqY60Iz2A7AAsIMVpSU40Cm7l5qGR2lRu9t97pSpv fDxrMu4tR/WITY/QLOV5YztBhCriI1JrePYEyBtrj0pdFfHRQvOi3vfivO+1Q3zenfsZbXS2jw3i A8gOwJlTHG+CyktwtHhkUvPYeDuTHJvmVJuMexqKRdr9Na2UpvVccCnPE9vOP6smQJEEVRqes3JX pcyVyc5L8HpLfN4OTHxIewDZAThTimP7cLIS1b0jN4/Oy8fgz3oE517a/TfecQ2t9OaQxOaQn/+l PWdsZ/w3WSmsp/zVU/JqTXNFJS1Pdl6K4vM6k/hUUjQAZAfgQMmJUpxWierBCE1265GcdSPFaaU3 1eV91YmoFc8Dky7EUxuhe+Un2+nTkp4X5+VLQXxeAvHJ+nxIewDZATix5Nixaq/RuFdwnoLXM8mJ SlRTBGf8eqRTcKo/w/yczyNDVQmqTnxl8uMlPl4/z2uH9FSTn0h89H2sjLEjPYDsADQkR1/cvYV/ UR+OJzgPgdw8mdejVMcrU1X24FQO0azusmn9vPKzfB4JaglQK/mppD5e2uOJT5b2/HKE51ciP95Y e1Tm8sQH6QFkB6AgOba0U+nD8XpwbGrTIzpZihM1GU8VHJHaoj5+ZpcvQZXpr6r8ZD0+WV9PlvT8 Cl566U802VXZ32OFD+kBZAeQHCM5U1KcLL3J3o5KVtEkVUVwKlNTJDa3KUBV+cnEp9rb44mPlhx9 ezGvW+mJylxR2jPed6QHkB1AcgqSk6U4Xv9N65ZJjt6LE0lONb2pJDj8PCI/LfnJSl2Z+GRTXC+B 8PwKJGiOtAfpAWQHkBwjOfYU8ajRWMvLFyU0XwLJ8cpV3uK/VorTk94gN9ASoKzZ2ZOfSHyqTc1e WevZSM6zk/pk4tOa5EJ6ANkBJKczxXlyxOZLQXQejOS0SlXZBFV2CviKnzeYQX683pdNUXy8/h6v xGVLW8+B8DwH4mPLXN7hpEgPIDuA5DiSE6U4nuB8CURHJz9eP45XqhqSFKey+4afL5hbfloTXq1x 9krak5W1noOXlTKXN76O9ACyA0hOIjhWbqzwRCUruwDQS3G8c6i8AzURHLhE8fHKXJn0vCTC81wQ Hy/tQXoA2QEkJ5CcL4VbS3LuG5JTTXG8nxl+hmCJ4hOVukbRsCWuHunxxOdZ4sZmpAeQHUBylORk Cc7XJNWJylW6uTnaatzag4PgwLWIj3750Uh7qtKT3aZKz0ZYTgjIDixUcrTsDDNJzlclOV+DNOex IDlew7EnOQgOXKv4ZBNdFel5FX9yywrOz0B89L/NpCc6jkIkPnwUANmBo37feJKjD+acIjlfjeh4 iU4ryckajqOzqBAcuGbx8cbZvaWFVnyysXUv5fmpXv6UuMwVNTNnCwopbQGyA2dJc1bSPtLhvkNy WqKT9eRk/TiVUhU/E3BL4hOVuVpTXFnSY6Xnp5EfKz52iqvS04P0ALIDZ5WcrFxl9+N8KUjOV/H7 cnSSo5cAelNVpDgANfFplbi80XWvpycSnkx6tPiMHzeSHu/sLYQHkB2Y7XskO4XcSs6YuGSTVZHg fJW8L0dPV9mm42yqCsEB2BeDqMxlm5mt+OglhePN6+f5mdxazczRURTRKetIDyA7MFuaM4pEdDhn a3z8a3LzRsmznpyoH6d3szEAaU9+NpdNe0YBeQuSHtvP48nOD5P42C3Nr4n0UNoCZAeOIjleX07W eDxKi05wvnVKzqPs78mJzqmyy/9IcQAOT3si8dH7eqKeHjuqrsXmh3nppT26RPaWSA+lLUB2YNL3 Q1Sy8iRHl6sekxTnm3mpS1k9kpPtxyHFAZg/7elpZtZJz4uRHtvP8yMRH6+8NUqUPnsra2Im5QEu BlBKcwYnzRnlw5uuspLzLREdm+ZUJafSj8P3NcDx055oSaEnPbaJeRQaLTpR2vPLJD3RuHpW2kJ4 bpw1DwGi40hOVLLSY+Q6yXlKUhz9uk1zdCKE5AAs87lh6/ycbdVL/VzxYZ4v3iSeynyW/UN9f8j+ YMLPz3///PmxRum5k7yfR5z7j/QgO0CaU+rL8UbIvxq5+eakObZkpRcCIjkAlys9W+e540PiXVue +DzJfklb334o8fn1+fF+yZ/S1vApPCvZ7SmyKc8K4UF2gDRHTzd5zcf6yWeUl2+B6FjJsWnOFMmh 6Rjg8qXnviE9nvjohOen+ji/Pj+2Jz2kPIDskOaUSlZRX87XQHL+krg359FJc6ZIDoIDsDzpWTkJ iic9rc3qFenR5S29jmL8+GM/zyD7U1ukPMgO3HiaoxuQvb6crFz1l/i9OVHJKjvWAckBuLxfnrbq ZzaTnmii00t7npzU5zH4xelZfUzbz0PKA8gOaU46Sv6USM5f4petWiUrb+sxkgNwXWmPJz36uedD 4l1dWXnr0Xlu8X6R+iX7e7hIeZAdIM3ZSXOs5HxVcvOXIztZA3JlISCSA3D90jM+92ySpKclPp7s 2OeaZyU8pDyA7Nyg6GQ7c7ySlU1y/nISHS/NiUpWSA7AbUqPyO7IerTHKyptedLzmCQ8+rnnhZQH kJ3rlhyR+GRym+bofTmR5FjRiRqQo74cu/XYu78AcF3PR970ViQ+d5I3MlekZ/z7a/M8RMqD7MAN pTnezhyb5vwV3FppTrVkJaQ5ADed8owMzi9ktpcwkp7W7Z6UB5Cd63wyEYlPJ9dPGl4D8rdO0bGn kmdnWFGyAoBqE7Pe91WZ3noQv5ylb17KM+7keSukPAgPsgMLTHNWHWlOJDnfJS5beWnO+HnoywGA 3qTHK2utJkjPg8Q9PDbl+f3xxkWEWnhWRnooayE7sEDRiUbKK2nO90B0dNnKnmW1VpJzJ/TlAED9 +Svq59mYlz17elrSo2XHlrbGc7a03FDWQnbgzJIjEk82eEc96N6cUWa+O6KjtyF/baQ5UQOykOYA wISURz6fR1qTW5H0VHp7WstN3z/vB2UtZAcWlObouNc7uNNLc7TcfJf9/pxRdFq9OZSsAGBu6bH7 eXqlp9q8bFdj3AUpj1fWQniQHTih6EQj5VFvjic6UdnK7s2p7MxBcgBgzqTHPt9FSbb9RS8Sn3vx +3iiX+DeTbKzMfcZ6UF24Iiio3/YvTTnUfzenO+O5GjR0U3IXuTr9eaI0JcDAPM+32WlrY20z91a N1KeqIcn2gv2YdIdUh5kB44kOWJ+CPUPtm7Ki/bmZKJjm5C9NCcaJyfNAYBTpTxb9frg3Lz9PLaf 574hPVGJ/sNJeBAeZAdmTnNaZSvdhGzHySPRyZqQ18lvOqQ5ALCElKe1hXmdyM59Q3Zsyf7NSA/C g+zAkUQn2p1TTXNsf042Uk6aAwCXnPJEm5ij3TvrJOEZnwffkpRH1PsA2YFO0fEO8BxFZ5yW0qeT R5LzXfaXBEZNyPTmAMASnxsPTXnWSnDuzetWdKKS1pv6/PTxIDtwgOSI7G8RjcpWUZrzX1IvW40f m0krALiE58melCeTHk92KiUt28fDPh5kByakOVF/jt2d401a/Zd6qRcFRrtzspFy0hwAWOpzZk/K Y6XHkx9PdrKmZdvHwz4eZAcmiI7Xn6PLVnpvjhYdm+i0dudk0wekOQCw9OfOLOXJkh6b4FRlJytr CcKD7EBbdKL9Od7unL8cyfFExzvAMxopH0hzAOACn0ejlMf7RVJLj5Wfu0SGhob00LiM7ECH6OhG ZHu2lS1bWckZS1c60dFlK12jHsSfthJEBwAu9Pk02r4cpTxeecvr27kLpMf7HCI0LiM70BSdVn+O l+boRMcbK882IdsfUiQHAC75udVLeaaKj5Ugb0rL+4WRxmVkhx9G9VJPXGX7c7KyVSQ63pJAmpAB 4FaeY3ulJ5OcdUN2sudUGpeRnZsXHf1DFu3PicpW/5L9HTrRWLkVHdIcALiF51vvJHX95z2TW73l LHuQKMKD7NzMD57eoWMbkW1/zig63ztFR29D9o58QHQA4NZ+wdzK/g6zbOVHr/S09pMhPMjOzfyw RaPl3qJArz/nX7JfusoakXV/zuD8gCM6AHBLz8NeWct7bh5fv2tIzyBxKcu72UkthAfZuSnR8RqR o7LV+Lo3ceX150TTVkgOANy68FSmtjLpGSQfSY9Sno16ifAgO1ctOrp0Fe3PsZKjS1f66Af6cwAA pgnPIH19PIPEu3pa6c748W0fD8KD7FyN6EQ7dPTElT7bSgvO+LoVnVYjMksCAQDi5+dqH8/KPKfe FWSn1b+D8CA7Vy063g4dfVr5fxnJ8UpXWnS808rpzwEAqD1XV/p4rOzYdoTKZmXvufgD4UF2rl10 ngLR+ZcjO94Onex8K8pWAADThCfr41k5MjMUbl5i5IHwIDsXJzrZssBotPxf4ic63mi5FR36cwAA 5hGewZGN6gbmylRWBsKD7FyU6GTLAkfRyUpXNtGxomMnrujPAQA4/Dk86uNpTW6tGtLT85yM8CA7 FyU69tRyKzrfJe7RqYoO/TkAAPM+n0d9PCLtdGcl01MdhAfZuVjRyXbofDeCY5uRI9G5Q3QAAM4i PKvCrbVFGeFBdq5GdPRWZO8wT68ZOduKPH686MRyJAcA4HjCEz3PVmQnep6uPGcjPMjOokXHjpaP ovNfgeh8D0Qn26GD6AAAnE54dONyq5ende3oAeFBdhYvOt8C0fEmrrytyGOiw2g5AMD5hEeM9Ni/ 02piPvR5GuFBds4mOjqy9JqR9WGe3rSVHS0fd+jYZYGIDgDA+Z/3vUkt73n4WM/LCA+ycxbR0Rs0 bTOyJzr/R/zRcm8rsndqOaIDAHDea4BtXL6T/T6cVfFjITzIzkWIjt2jYw/0tKKjZSc7/iEbLUd0 AACWJTzDEaQG4UF2zvpNHh0B4Y2XW9H5P+p9VnQeP2+6EZllgQAAlyc8p3iORniQnaNJji1feUdA ZKJjx8tZFggAcJ3CcwoQHmTn7KLTmrr6Jn926LAsEAAA4bFsC+9HeJCdWb6R9eu6ITk66yqavPqX ER0v0WFZIADA7QpPj6y8IzzIzpyiE/Xo9IiObkaORIfRcgAAhKciRFslPPrzIjzIziyi442Ya9H5 LvvnXH2X3WbkJ0QHAADh6ZCa6H22nIXwIDsHiY4eMc+OgfAO9Gzt0UF0AAAQnor4tHp4EB5kp1t0 7HZkLTpe6cprSK5OXSE6AAAIj5UX72V0E0d4ANlpio4tXdkTzP+S+ATzsaT1DdEBAEB4OoWnR3Ky 0hbSg+w0RScrXY2iEzUj26krfagnW5EBABAeSaTEk5yNeenJjv27+n4gOxCKTmVpYKt0NfboeJuR ER0AAIQnEp9MdiL50TCSjuzsSU7P0kCvT2d8e0x0vgrNyAAAXGP6hSeSHXvLkh5G0pGdnW9C/bpX vvJEp7UwMBOdAdEBAEB4GnITCU4kPdG0FhNaNy47laWBdsQ8SnRsQ7LepaNLV4gOAADC4wmPyH7f Tq/4RL08Nz+htb7hbzqRuHxlR8wj0dGyY0VnTHTWQukKAADqJa1DEh4v6bn5Ca1bT3aiEXNbvvou +0dBeImOXRqoS1cDogMAgPBILeGJmpN/3z7MrSI7Nz2htb7RbzSb6OjFgY+SNyTrm7dLR/fo3BnJ AQAAiIRnK396RkX6k52spDVykxNa6xv8BtOvR306nuhkzcgsDQQAgEOF5069vv28rlSTnUrKc7MT Wusb+8bSkqPLV17pyvbp6DTHLg1EdAAAYA7hGZSMiPjlLC01WoBafTwjN9ewvL6hbygRvyH5XnbL V7ohOZKd6LwrtiMDAMAhwjPKzp0jO9tAcqKbLWlpwdmo+3D10nNryU525pU9xdxOX40LA1sHe7Id GQAA5hCeSHZ0utMSnaikpUtYV1/OWt/IN5GVHXuSeWtDsi5d2akrvUuHRAcAAOYQHv3L+dRkx5Oe m2xYXt/AN0+P6Hh9OrZH52siOiwNBACAOYSnsn/HS3feP29eD8/NHimxvvJvGis6Y+lqrUSn1afD dmQAADjXdUw3LN9LO915l76UR+QGGpZvIdnxjoN4ULIT9elURYfSFQAAzHnd8ia0vIZlPYXVkp1N Ijv65VWmO+sr/maxstNzknlFdLzyFaIDAADHEh5PdrYS9+68y25Zy5vQ0h9rda3Cs77SbxJPdHSq M4qOPffqu7SPgdDnXbEdGQAATiE8eiS9le58OJLTGku/6v6d9RV+c2jRWcn+4kA9Zv6XEhstOmMz MksDAQBgKcLjTWhF6c671NMdvXPnKvt3rjXZ6d2nYxMdvR3ZnmLO5BUAAJxDeLIDQ22zciQ7nvRE h4deTbqzvrJvCCs7ekuyPvdqTHX+SkTnayI6JDoAAHBq4RF1fdt+XpfsdFbWt+OVtjzZubr+nfUV fSN4orMuiM73hujQkAwAAEu61onEDcu6f+e9cIukR/fvXDzXluxk01e6IdlOX32X+CiIrCEZ0QEA gFNd46oNy17/ztvnLROdqy1nra/kG0AS0Rn7dLJUp3LmlVe+AgAAOJfwRA3L0WTWeyA+WePyVZSz 1lfwH++JTtSn860gOjQkAwDAJQhP1LCskxorOG9Gdt4c4dFTXldRzrqWZMfKzr3spzqe6ERnXo3/ noZkAABYqvCI+A3LD7Lbt/PhiM6rtEtbV1POWl/4f7ZIvjzwUXYP+bSy803aR0HQkAwAAEu+Dors Nyx7o+jvSnReZT/l8UTnKspZ6wv/D64cB2HLV/rlX0p0dKpj+3QE0QEAgIVdB7OGZU92snTH9vDY puWLLmdderJTaUr+JvtNybp09SURHdunAwAAsFThsddDLTxesvNq3rayczXlrPWF/ueKxE3JdvrK pjr2KAgWBwIAwDUIT7Rw8FH8dOfVER+b8FxFOWt9gf+pnuiMiU6W6mjhGUXnixKdUXaYvAIAgEsV HjHCE6U7Vdm5inLWpSY7veUrKzrRPh1EBwAALll6tOxo4fF6d14D4bm6ctb6Av8TK+Wrb7Lfq9Pq 0xmEPh0AALhc0fEalkfhefiUlifxe3dsD89VlbPWF/Sf6IlOpXxlRUfv09Fj5ndCqgMAAJcvPPp6 qaezRuFp9e5ECc/FlrMuLdmplq+ipuTsgE+b5iA6AABwqdIjsjuOXpnOeglk510uvJy1vqD/tOxI iKh81TN9RfkKAACuQXRa4+iPSmJeG7ds4eDFlLPWF/CflonOvfxZCOgd9On16TBmDgAAtyA8+vqp y1n3SnhsOcumO9GG5UEuqJx1KcmOlp1BdstX+kiIv8RPdb46okP5CgAArl16RNrlrKx3J+rf2Zqb lSxkp/M/SSQ+EsI70bw31aF8BQAA1yg6PeUsr3fnRfb37+h0x+vfWSSXUMbSiY495PNJiY5Nduz0 FeUrAAC4ReHR19NWOcuTHS/hsbKjp7QWJz3rBf8HSSA6rVRHNyRTvgIAAKTn/+OVs+yyQS03L+rm lbN0wrOSBTcrrxf8nxKNmlvRiWSHQz4BAADRyctZetmg7d3RouMdKWHLWYttVl5yshPt1NGj5l+l PWZulwdSvgIAgFsUHn19zZYNesmOt4PHG0dfZLPyeoH/IeLYp92pE/XqaNHRZ19RvgIAAKTn/zOo l7qc9f557XwLZGe8ZenOIpuVl1rGsr063pEQXwPRaR3ySfkKAABuUXRsOWtMd/Q6l3dHdn593rKE ZxSeQRbYrLxe2H+Elp3xP6I1gfXNER1v+upOKF8BAADCY4OFMVT4+Lx2ZqWsSjlrcc3KSyxjReWr SqpjRede/AM+ER0AALhl6RH5swX5Tv6Moutm5dfPa6tOd3TKE6U7i2tWXi/sge/dq/NN4j6de9k9 zZzyFQAAIDq7MqKFxw4C6XTHik62cHBxzcrrhTzwWnRsrPagHvivgez0bklGeAAA4NaFR8w1d5zO 0s3KWnY86XkNZGcjC0p3lpTseKPma9mdwPriyI4VHW+nDuUrAACAOGwYnKDh0QjP79uzIzteOWtM jBaR7qwX8kBbu4zKV1+V4GjR0Tt1okQHyQEAANiVDzsUZI+S0JNZvwXnL9kvZ+mEx9u9I0IZKz3V 3DYm20THGzPXvTpMXwEAALSFZ0xivOksfQ3+pV5WmpV1Kets6c76zA+yfl2Lzlr8Cayv0i5fadEZ EB0AAIDS9bjVrPziiI5OeGzvzti/8yGUsZrTV18cyfkq/U3JAAAAsH8d9pqVN+p6/C5/2kl0k/Kz /Onh8fp3xrLY2U9FX5/xwdWys5LdpmRvW3KW6tjyFU3JAAAA067L3pmU9pr8LH3lLJEbL2NFqY4+ 2bzSq+P16SA5AAAA7etxtFlZBxBvn9feLN0ZhUeXs8by2NnSnfWZHlRtj3YC616JTlTC8spX+vwr Uh0AAIDDrs9eujPKjk53vHLWmO68ywLSnfUCH1CvV+erkR1vpw6j5gAAANOvy3oUPWpW1sLzywiP V876/W/Pnu4MZ5ac1qj5V0d09E4db3kgo+YAAACHXaOjEw30NfqLCSS8Y5u8Bb8nvzYvoYzVSnWi 8pX3QDJqDgAAMM91Wqc7nvD8vi6Pe3ee1du/X19UujOc4cHzUp11YIzeBFYmOkgOAADA4ddqe71u Xat1KNGqwJz8Wn3uMlZrtM178OwEFuUrAACA+a/Xq+L12rtm6+u1HSI6ufQMJ3zQrCW2tiXbBYLR pmQWCAIAAMx/zbbX7ahZOQonFpPunLOMFdUAI0PMLJFRcwAAgPmv26sJ123ddrKIdGc40YNlHzjd 3a3P3vhizFC/zqg5AADA6QOKbNHgkyM8X2Rhk1mnLGN5UVir2Sl7sDgWAgAA4HTCY9MdL6zIem3P lu4MJ3qgRPJGp8wMHyXu1SHVAQAAOE1g0ZPuROtivLDiaspYnhXac7B0slNtcGICCwAA4PihRSXd iUILfR33Jqnl2NfxU5axsm5uT3SiOf3oQQIAAIDTBRfeZFZ0LbelrJNOUw9HfmCyB+hBdmt92YMT pTpHt0EAAABEZ+d6Hk1m2UO8KycfnOR6foqencgE7yUuYekHxk5grYReHQAAgHNIT7X/1mtJ0enO SftvhyM+IJEFeudgVVIdr3tbBOEBAAA4hei0rutZOat6ruVFyY59YKLTzaNU56wGCAAAAOn1Pevd eZRprSlHGzgajvQgiCM6U+xv3bA/hAcAAOD0oqOFxxs6ejpQeBYvO9b6VrK7RLDVqxONqJHqAAAA nFd0vDDDDh95wvMkfaWsWa/zxy5jZSWsHuu7EyawAAAAliI92fCRrd48OcITXeOPEmgMR3gAJHgQ 7BLBLwXr0w/CgOQAAACcXXQkuda3+nIfpT6GvljZ8YzPHvpp460nqcVbVqYAAADgfNKTlbK8UfTs Wu8Jz2zX+mHmL1wkPvQz69XRJSzdq8MEFgAAwPJEx5Oe6IQET3psFeeovbnHLGPZXp2sU9suEdQn o3IGFgAAwHKlx17zdbqjAw6d7LQalWe95h+zjNWyvOgLt1/00ZcNAQAAwGTRaS0ZjK77evJ67Vzz F1fGqpSwIsPz6ncnm70HAACAg67/1UblTHiO2qg8nOAL9vp1rOhER0Mwbg4AALBc0akKz5MjPCcr ZQ0zfrEitVSn8sXqcXNSHQAAgOWLj77+eyeiR2HH0as6c5axqiUs74s9+TZFAAAAOLkD9Kycmc0B jlXG0k1KUc0u6sa+kyM1KAEAAMDsomM9YM7AY5Z0Z5jpi4xEx0ZYj+qLO+sJqAAAADC79LQms/QJ CtoN9DT2nSywjOXN2euNyZHR6b06dokg4+YAAACXJzqVdOcxcYFMeCZ7wdw9O95ZWC3ZOWp0BQAA ACcVH69RuRJ+ZH07Z+vZ6dmt8yhxqpOdi3HwFwgAAAAnE53evTuPkld6FtOz41lcFlt5jcm2XwfJ AQAAuCzRsX6RpTteCKKdwJ6icJAbDDN8UT0Gl9XnaEwGAAC4fOnJFgzboaXHwAvWMuNywWHGL6jS jOR1XmcbkwEAAOByRCfyg+xQ8KOXsuYqY+mR80pUxcZkAACA6xafaPdelO5E25QPTniGiV+AZ252 CitrQoq+GO/zAAAAwGWJjohf+cmEp9XiMtkNhpm+kGx5kFfGynp1kBwAAIDLF52op/de9lfTVE5V OGvPTrRI0BOeB/V3sogKAAAALl98BmmvpsmalGcpZQ0T7nhmbOuGrXmd1uzWAQAAuD7R8Vwh6u09 ainr0J4dz9aiMhaHfgIAANyG6Ni39VSWDkYi4Zm1lHVIz060EjqbodclrOhoCIQHAADgesTHK2WN Acmj8YajlLKGzjsssh9NebGUd8crh3wBAADA9YhO6/iIk5SyDunZ0abmbUd8MK9njcnddxwAAAAW LTrWN4ZO4ZmtlDW1Z8dbFBTd8cjQKGEBAADchvhEO3dOUso6pGcnO+TL3u6FEhYAAMCtik40lVUp ZUXJzuw9O63zLnpSHUpYAAAAtyE61jkyd4j84eCzsg5pUPZSHS/Z8Xp1vI3JCA8AAMD1ik9WyvL6 faNe3+6EZzjCnfVkJ0p1EBwAAIDbEJ3WgsFq385RenayElZ01oWX6sx6qBcAAABchOjYt7NJ7soI endgMqVnxzYmZ6lOdCcRHgAAgNsTn0HOMODU27OTNSffS1+qg+AAAADcjuh4wUnmEeNtLf6ZmiLF 0GRKz85c/TrNOwcAAABXITpWerIKUXTMVNT7e3CDcmvkPIufsmVAiA4AAMBtik8mPFWfmL2M5QlP a+T8XvLjIVaB8QEAAMD1io5IfOTU2jiE9Yk7ySe7V4fIjgQW1mpOzs60QHAAAABuU3SiY6cqfTuT jo3olR17auna2Bcj5wAAAFBxCu9wUOsVlUrRQT07XqdztF+nIjqMnAMAACA6Vnis6HheoZ3C6wOe LDsi8SLBqIRlbYwSFgAAAHii02pU9pKdSUdPTe3Z6dmvMwiTWAAAALDvFlGjclTKOkqDspfsjMJz 7wiPNw9/h+gAAABA4hdRslNZZ9OsGg3JnfDMS9+ZtXNHKqecC9IDAABw06Ij0j5cPCpleS0yMkV2 RPajoVXxzlQakwEAAADRqSwYtH7RSndWPbIjgXnZzcneHdIlrFLzEAAAANyk/GR9O61kp9S3U+3Z ycpYWnSq1gUAAACITrVvJ9q3M7lB2duvUxkNW0u9nob0AAAA3LboWMdotcrYQKXctzN03onojkSi Q78OAAAAZI7RKzzdnlFpUB7Eb072hKd1FhbCAwAAANY3osXFFeHxPGNVlR0rPN4BoF6qwyJBAAAA qIpO66QGL1jxXKN7Gsv+Iy9aij5564gIpAcAAABWgfBEw1BZb3BayhqCT2ylJ/rka4knsJjCAgAA gKrw2BF0byDKBiulJuXWNJbXnOylO5O6owEAAOCmJUf7xipxDS9k8U4/d92jVcaqNCdHx66X598B AADgpsWnNf09JWBZtWRHpDZ27pWxuo9eBwAAAKRH6q0zXQHL0DAsrzv6rlN0AAAAACLBEam1zmS9 wmmT8uB8QnsnKvWzO4nPqkB4AAAAoCU6vX075cWCwwGGlU1iMW4OAAAAvfJTFZ4oZBFPerIy1tD4 hNkIGNNYAAAAMFV0omXGWd9O2KRcmcY6JNmhORkAAABaohP5R+YdWni8np10Gis67bz1iWhOBgAA gEOkpydoyXqF3TLWKhGd6idkczIAAAD0Co5IvUm5UsraozV63hKdO+lc2QwAAACQyE92CHlLdFwP iUbPo1TH+4T06gAAAMDcomP7du7M660m5f+8HJJPNN4yybmrfiL+DwEAAGCi9NwZ//A8pNmzUzWr ilFRygIAAIBewclE584RntaREf/5uNlSwYrolJuDAAAAABqiI+IHLi3pSRcLDhOsqmJTJDsAAABw iPhk6U7XMVU2ifF6dqJ0p7I1GeEBAACAXuGJJrJawUs6jeWtVx46P8lK2K8DAAAA84hORXoG8Zca h2WsyKiGxieJGpOZxAIAAIBDpGfocJFSg3KlhFWNjRAcAAAA6BUc6XSRTHhKyc7QYVSUsAAAAGBu +amkO60G5dVQsKpB8kQnO1odAAAAoCI2nocMEqc7mYs0j4vITGoomBTSAwAAAHOIjyc61XTnPz4y BB+4FR0N0o6OEB4AAACYKjyVgalSpSk7Gyv7oNmYF5IDAAAAcwnPkNyi/mER06Ac1ckym/IsCgAA AGAuyRGphzDpdPjQYVGVZiB27AAAAMCc0qMble8kD2BcJxmcDyiBRXkv09gIAAAAoFNwrEtkjcot 0flfevfseKKTHr4FAAAAMFF8vHRnaNz2psOrG5QrJgUAAABwiNxEwhOJTqWMFY6eV/p1mMQCAACA Y0lPFMCsekRHpD2NFS0VbB66BQAAAHCg8FSkJwtg/vfW2rMTCU/LohAeAAAAOFR4WsuOo/ftMDQ+ cKsBiDIWAAAAnFJ8ur3Ejp5LxwejORkAAABOLTmep6TT4a1kp8egvDsIAAAAMFVy5AAv2VsqKBI3 KK8kTnTYmgwAAADHlB6RWnuN17MTHhdRER5EBwAAAI4pOOI4yaSqUzQ6vko+OE3JAAAAcArpscFK JDilBmWRfHw8qp1lJgYAAAAwt/i0RtD3fCY7G0ukXrZCdAAAAGAOqamITiQ87rT4ULSoSIQQHQAA ADiW9KwawuP1Fu/9+6FgViwPBAAAgKUJTzZEteMy0annkrweSREAAADAscQnu4kkR1gNgbSsijeE BwAAAJYgPtHfLW1QRngAAADgnGIjjm9kLTc7f97aoNyzW4deHgAAADim+IjU2mx2GAJLysa7aFYG AACAc4hO9L5095899TxbybwqCg/yAwAAAKeSnuafZUsFq6uYAQAAABZLlOxE2wm9U0URHwAAAFgC q0h2bAnKS3KaJ4oCAAAALEFuPNnR/8BrUK6UsyZ9cgAAAIBjY5cKtkbOI9Fh3w4AAAAsWnYi4alM YCE6AAAAsGjZiTYQitQ3KAMAAAAsVnZEahuRSXAAAADgYmUnk5jKGVgIEAAAACxedgAAAACuWna2 wd/Zqj/L/g4AAADAYmVn25AcKQgPAAAAwCJlZ+sIztZ5O7oBAAAALFp2tOh4grP5vEWiQ+IDAAAA i5cdT3Q2gfggPAAAAHBxsiPil6825pYJj5iPBQAAALAI2bE9O57UWOGhZwcAAAAuRnZE4nLVJrl5 pS8AAACAU1FyjyH4h16akzUpAwAAACxSfqJkJ5rGak1mlS0LAAAA4BQMEi8O3BYlB7kBAACAU7Cd 8mfVPTve694nQXwAAADgFJKTVZW2kex4olPdoIzkAAAAwCmEZxu8HjIkRlQ9JgLRAQAAgGMJTuQc 28Rbdv58CP5i9EGk8T4AAACAUwhQpX94a2VHHFvaSn5QKAAAAMC5BCc7vPw//3YofGCRONkBAAAA OJbgSCIz0akPaRkrkhh6dgAAAGBJorNJhGfv32dlrJbYdHdDAwAAABQkJ3OS6EircE1OdOp59kkQ GwAAADi1BHmnO2SnPPzn3w6SNyFvG8KD+AAAAMCxBUckPqA8O7/TLWN5cuNFRFETEOIDAAAAh0pO JD3bRHo2gaM0j4vYSHwoKMIDAAAApxCfluRY4dn595XjIlo1sazXBwAAAGCK5GSTWJVU5z//fkg+ aOuDZYeCAgAAAMwlPdvAQ7K+nf/QSnZaMRHNygAAAHAO6Sl7ydD4YPaDfkihEQjpAQAAgBkFpzJy 7vXsyCg72ZZCT3Qi4UF0AAAAYC7RiaSn0ke8cxsC0dlInuhQxgIAAIBjik5LcqrVJneDcpbsZNID AAAAcKjkiOMmUcmqJDxD4wNvpD/lAQAAAJhDfipnYkU9O3sNytHxEDbVsX072XJBAAAAgF7BsS4R OUlpe7KWnegDeklOJdlBfAAAAOBQ8bGpzkdDesKlgtE0ltev8+F8AhqUAQAAYG7J8YTHc5Ksl7j7 uIjsg5PqAAAAwDGkJ+vPsV7ittVEo+fZjh3vAzOVBQAAAHOLjnaSD+e2qfhI5dTzj8InYd8OAAAA zCU6Ivnuvy4faR0XkX3g7BMAAAAATBEcKzrbouiUDwKVmT44wgMAAABTxafVO9wKX3Y+nrdBWZwP vpH+ZAfxAQAAgB7JsW8fXML6zeB8gpZNvYu/YJBSFgAAABwqPJXm5HfpCF56e3beC0aVWRoAAABA VXoqqY7XWrPjINlSwWzU6132Ex4WDAIAAMDcohM5yHvVQbxkRySvk0XREbt2AAAAYIrciLQXG7+L X2FqCk926rmX7rzLtHIWAAAAQEV8Wo3JUXUpmsZqHheRNShXylhMZAEAAEBFciLpiUTHBi+hfwwd ZpV9ouysLAAAAICK8GSBSyQ6Uaqzc+r53jtl/zh1L9XxeneYyAIAAIA5pCdrUP5IHCRsUPbKTa3x cyayAAAAYG7J8RYbvwc3LTphZam3Qbmyb2eD5AAAAEBRcOzLVnNyNI1VHj23wrMxwpOZVcmuAAAA AALh8cKWinukYcvUZKdn/JyJLAAAAKiKT1ZVymQnnAQfGp8wm8byambp6BcAAABAIjlV92gtNm6e jRV90pbsRJ8U0QEAAIBe4cm8w2tQDgOWaPRcAsOyn+QtkB4kBwAAAFpyYyWnKjpdJzi0GpTHm62b vSWikyU7CBAAAABEwpOVsDzv0M7RNXquqfbseJ/YPWYdAAAAIBCfbVF0spBlzzuqyY43/vUmuwlP Nu+O8AAAAEDLOWzI4nlHS3TEekc0ei4dn/i98MkRHQAAANgTEZnWmOyVsUSKZaysSVl/8jfZT3Yy 4QEAAACQxDvsQJTnHD1nc4ayI45pRX07b8kdyM7JQn4AAAAgWnfj9etkwUrz5IahcEeyWKlHeBAd AAAA8Dwj2uv35gjPeGstFCzJTlTKspLzKnGzMn07AAAA0BKeiui0PENkwjSWFGwrSnY84wIAAADI lgnaYaiW6DQXCkay0zoywitjvUot2aGcBQAAAFmo0mqVyZKdsux4d6gykUXfDgAAAPQIT8UxonaZ sl8MnXfEs65XqdfTEB0AAADQnpFVj1p9wSXh6W1Q1uYVWRd9OwAAAFBxiyhQmVI96p7Gap1E6tXT 6NsBAACAXuFp9QS/ir9QsNSvk8mOd8eyU0hfJW8iom8HAAAAxBGdKNXJ2mS6jqXqaVBuxUyv4qc7 5dEwAAAAuGrBidzCNie/Sp7sdA1ADcU7VmlSfjV3sNKkjPgAAADcpvT0TmG9yf6ZWEdvUP5w7kRl mzKSAwAAgOjYgz+9Xh1vAKqrX6clO94dzJqUszvmTWUhPAAAALcpPF4JywYn1iuysfOj9ezY2ppX ynoT9u0AAAAgOLtO4TUmR1NYWXOyyMw9OyLTmpRbjcqIDwAAwG0KT0t0oubkrvBkShkruoOvReFB dAAAAG5XeFpTWPZmS1gn7dmZcgcpZQEAANye4HiiE+3W8XqAtU90LykeDrijWRmrtXOHbcoAAAC3 KzytVOdF/OBkkkcME+5gZGTeHWylO4gOAADA7QhPJdV5kdoUVplh4p1tTWXZO5pZGQAAAFyv4HgO YY+eepW4HcYKT3c7zDDhTusyVqvWNt6iw7uyBwQAAACuQ3i86pAWndEhXqRdwure2dfboCySH9z1 6tzZNyM8Xr0N0QEAALhu4bHuYBcJZqmO15x8kgZl3aT8XrzDH4mdAQAAwHUJTiQ83vmaL+bWak4u M7VnJ2tS9u6sXQoUiQ7iAwAAcF3C0zoe4k35QuQNBw04TenZEWkvF3w1d9w7sZRSFgAAwG0IT9T+ MorOS+ANs5zCMLVnp3LHbcrTuuMAAABwPYITCY8XkETNyVFI0sVwwBeRnVbq3WlKWQAAALclPJUT zrP2l1l29E3t2cmEp9VoRCkLAADgdoQnm+Cu9PlGzckn7dlp9e1UOqspZQEAAFyP4GhX2Ep7Y/Kv xBUOKmFNkR37xWTnW7yYLyDbqMxZWQAAANcpPF4wkoUir4knTHKEYYYvwjO21hcRRVOIDgAAwPUI j3fqQuQIeqBpthLWVNmplrKiL0ILz+RzLgAAAGCRgmNFR09h2cbkX7Jfwmo1J3czzPBFVZqU9Rdj S1mTjmsHAACAxQpPax9fFobYye2D3eDQnh0rPJUm5Rdpb0ZEdAAAAC5PcjTZOVg2DBkDEW9FzaJ6 drxlQd4Xko2hbxoPHAAAACxbeLIprKjqc7QS1iGy431hPaWsaAydnTsAAACXLzytVOeX7Ich2cGf Imfu2fG+sPeOL8pLdxAdAACAyxKc8WUr1fklfj+vt19nln7eYeYvzNu343VcZxZHozIAAMBlC09r B9+z7FZ7Ric4yqT2MOMXGM3S6y/k1+cXWNmSiOgAAABcjuRoH7Dj5lGlp1LCWlTPTm8pq5LuCNID AABwEcJTcYGp/ToHucBcPTvSKTvPp7I5AAAAOJnwRB6Q9fBGW5MXXcbKtilHX6Q3akajMgAAwPIF J/MAL9V5lr4SlshCylgi9VLWs/SVsujfAQAAuAzhyRqTW5PZWTvLQQxH+IJb42ae1VWFBwAAAJYl OVp0pl7/j3o4+HCEL7p66FcrxprlWHcAAAA4qvBs1fW6muqcrIQ1p+z0lLI84bGnob8fy+4AAABg tuu+d+2v9uocvTF5btmxX7AVHq9vp7d3R5AeAACARQlP73BSzzT2bNf8Y5Wxqk1KVnp0uqO/8Nmb lQAAAOCg671IfA7WeD3X1/rKFNZRrvXDER+I1viZ/eJfhHQHAADgUoTHS3bGPl2vT8dLdcbr/VFb V4YTPAA23fF6dkbpqYyhIToAAADLEZ7KBFbWr3PUEtYxZGfqGJoXbUWlLDmG9QEAAED5Ol9tWXkW v5IzhhonOTnh2GWslvF5D4JXy7MPAqIDAABwPuHJrvG/itf4aApr9kDjWGWsQ4Snp3cHAAAATic5 In6qE/Xl/vy8taawjnp9H07wwFSOj/CEhyWDAAAAyxOeVpDxHNy8VOckU9fDiR+Q8UGJ+na8UXQa lQEAAM4vOSJxquOVsHSq82yu629ywonr4cgPiki9lGUflOxEdNIdAACA0wtPdE1/CUQnKmHZa/pR r+fDiR4YW8p6l3YpKypnke4AAACcVnK88MJLdTzRqZawjiY8wwkeHO8B8h4cr5HJi7xIdwAAAE4v PL2pjic6Xnhx9Ov4cKIHSCTv3M5iLz2TT7oDAABwWsnxQotWqvMsfgnr5KnOKWTHio4+ETUqZXnC Q7oDAABwPuE5pFcnGzg6yfV7OOEDJVLfuUO6AwAAcH7JEbnwVOdUstOb7vwU0h0AAIClCM9Fpzqn kp1IelrrpaemOwgPAADAfNfsi051Tik7c6U7rb07iA4AAMB81+6LT3VOKTuR9FTTnfHBi0bXOBEd AABg/mv1xac6p5adQ9Kd6qw+6Q4AAMB8onPxqc5v1md6IFeSpztesvPl832P/+/28P9u95/3/+5T 2jafH3dlPg8AAAD0XadbJ5tX207OnuqcQ3as6Kyklu78+JSdp8+bFZ6PT+HRsoPoAAAA9F2j9esb yU82jyowi0p1ziE7kfRED+STEp3xZZTujAnPVskO6Q4AAEDf9bl6gHfrwM9FpDrnkp0p6Y4WnjHZ icpZKyU9CA8AAEDt2qxfn3Ligd2Lt4hU51yyE0mP1/w0pjtaeL6IX8rSsrOS3YQHAAAA2tdlW77y enV0i8niU51zyk6W7ngP6pPsJjs63bl3hEcnOyKkOwAAANk1WdQ1eSt5U/KzEp0f6n1nPdl8ibIT SY+X7jwq4RmlRzcrP3zerOyQ7gAAANRFZ2tEx5uU/mlEZ/Gpzrllx0t3PhzheVbC46U7Wna8chbp DgAAQH499kpY3sLfn47oaNlZXKpzbtmx0qOFZ2yG+n3/7pXwPDk33btzL/vpDqPoAAAA/vVXv66b kqOdOj/UbRQfb+HvYlKdJciOTnfGt0fZuZPdMXSvnOVNZt3J7ij6RnbLWkgPAADAn+tuNmo+pjqR 6Cw+1VmC7Fi7tOnOmyM8XsJjJ7PWsj+ZxSg6AADA7nW3coTTT0d2RuHJDummjGUe8JXzoNt0Z3zA tex8kd1kx1s0uBGalQEAADzR0U3JWnS8pmQrOlmqs1mC5CxJdiLLtI3K958yo0tZT0p+Wnt3aFYG AADYF52oKTkSnR/iT2CNqY49mJsyliMfdjrLTmY9fD7Qj+KXsjzh8ZqVER4AALhFyRFzvc323I1y 88/nLUp1xhKWLl9tl/JFrxf6n9A6M8s2K2dHSNiEZ1DCAwAAcGuisxX/SAgv1fGSHW+JoO7V2QZy hezIbgOxriEOsj+K/vNTah6dW5busFkZAABuXXiyIyH09NXv2z/ipzovEk9gLSrVWZrsWOGxpayo WVmXs6rpDiejAwDArUmOJzyj6LzJfvlqFJxqU/LienWWKjv2P0ULz9untIzNyvfiJzt2yaBNd8YO ccpZAABwS6KTHQkRLQ9s9erYCazFic5SZcdrVh7LWaPw/JK8nBWNodt0h3IWAADcivB4O3VsT2wm Oj8LorNd4he/Xvh/jBUe20B1r8TmIZCdqHeHchYAANyC5FjhsTt1RtF5DkQnWiD4LvuJjixReJZc xrLNylp4xmbltRIeL9mJ0p1BiQ3lLAAAuGbRya6levrKis54y8pX3l6dxbH0ZCdqVh6U8DzLfrqj X+p0x1s2SDkLAACuWXjs9FU0Zm5Fx56BZRcIeqUrylgHmql3Kvqd/El37gPZeQhkh3IWAABcs+RY 4dHlK2/6KpIdu1Mn6tUh2TngP8trVh6XA97JfjnLu7V6d0QoZwEAwHWJTnaiuXfIpxUdr1fnYpqS L0l2vP8420X+In/KWfdGemwpi+ksAAC4FeGJylfemPlvwflb+lKdxZevLkl2bLOyTnf0KHor3cnK WfrMLBHKWQAAcLmSY4XHm76yywPt7Yf4m5IvpnR1abJjhUdkf/fOoIQnk54o3eHsLAAAuBbRseGA N31ly1c61dHTV79k96BPrzGZMtYR/yN1LDfIn3KWbViOZCc6FV2fjk66AwAAl3adzJYHVspXP5Ts vF666Fya7GTlrJX8OUqiIjs23bH9OyK7k1oIDwAAXEoYsJXalmQrOv8Y0bmYgz6vSXas8Ij45Sw9 oaUlp9W7Y5MdxtEBAOAaROdN9rckV0Unkh25JOFZX8F/bKWc5cmOFR5PekQJDwAAwNJFJxsz97Yk /y35QZ8XXb66ZNlplbMGJS9eSeu+ITu2WZn+HQAAWPp1sXdL8t+y36tzdeWrS5YdKzwiu+Use3aW TXjupXaMBOPoAACw9Guhfj0SnXH6yqY5UarzKldSvrp02bH/0fo/eezdeRE/3clkJ5rOGhAeAABY 8PXPpjrePp0f8ifR0aKjd+roLclXITqXLjutZYO2nGV38ETlrEH2j5OgfwcAAJYoOlvnF36d6nil Kys7XlPyVZSvrkF2rPCI7J+d5Z2fdR+ITiXdoX8HAACWJDqV4yD+cWQnOxLiqlKda5Ad7z/fm87y 0p2q9FipYf8OAACc+5oXTV7ZfTqR6NhNyVlT8kWLzrXIjlfOWslu3VIvD1wXRCfaqsz+HQAAOPcv 9vqX+3GfzntDdP79efNSnawheXsND9w1JTtROcsraXmiU21WFqFhGQAAziM6XukqO+DT69PRqY49 0dwe9CnXIDzrK/1m0OmO3b1jS1pr6ZvMEqFhGQAAziM6rcWBnuj8uyA6H9cqOtcmO166M8rIaL06 3bGNy1aA7oSGZQAAWJbotBqSI9Gx5SuvT8fr1bkKrjHZWZlvjGi7spfwVEVHQ8MyAACcQnRaDck/ jOxo0RllR4uOnb6yfTpXIzzrK/7mEPmT7thxdLuD586RHW8qiwNDAQDgXNc2ryHZHgVhE53xpbcl +eqWB96S7HhGbMfRbcPynSM6Vnai09FFaFgGAIDjXsMqDcladLzpq6s9DuJWZScaR3+X/ZJWtGn5 TvbLWV66I7LfsIzwAADAHKLjla+miM5PJTqvRnSusk/nFmTHCo/IbsNyq6TlvR2lOyK752chPAAA MJfojJIzRXT+NqKjy1c3k+pcu+zYb5ysf8c2Lkfyk/XuCMIDAAAzi45NdLIzr6zs6EM+bfnqasfM b1F2bLpjD0vzSlr2PC1vMqsynQUAADBVdLaJ6OgNyaPo/I/U+3RuSnRuQXas8GzU+1dKeFoJT0V4 rPgwkg4AAFNFR5eusjOv/p2Izs3t07ll2RHJ9++8yW55KpOeQdrpzloYSQcAgOmio8tXkejYslXU pzOKzpvE515dvfCsb/AbSmS3f0fEP0MrkxwrO5H4MJIOAAC9opMtDYx6dFp9OjrR2dyS6Nya7Nhv LlvS8tIdL+mxstM6PwvhAQCAyrVJT155iY6Wnf9RN69Pxx7w+WEk52ZE5xZlp9Kw3JIeT3ZWieyw gwcAAKJfvHXZSl+PosM9/y1+omMbknWfjm1IvplenVuVHSs8UcNyr/QMifT85g7hAQAAR3R0+aq1 HXmUG5vo/C35huSba0hGdnaFR1u17d/plR5PcuzHQXgAABAdkXxpYLRLx4qOd+7VWL7ylgbeVJ8O suP/Z28OlJ1WuiMIDwAAoiPx0sA3R3Ss5ESiY08y946DuEnRuXXZsd98dkJLHOnpFR1PZBAeAABE Z1sQHTtiXl0c6EnOzYoOshOfnyWy32zsiU9ryaD+WAgPAACi4y0NfJd4O7Lt0/kfJTo/pXaS+c32 6iA7sfBo214lotMqcWUTWggPAMDtio6dvHpRohP16HgNyT8T0bnphmRkpy08m+DveKLTalJuyQvC AwBwe6KTHQOhTzHPdul4fTqR6Ny88CA7vvB4Y+lZ4/JqouwgPAAAiI5XurLNyFp2es68ItlBdlLh kc9vmtXnN1JVeiLZWSE8AACIjtR7dPTLSqJz8yPmyE7/N6ko4ZFEdqrbk1sgPAAA1y06epeOtx35 b0d0xpKWTnTGPh2b6Nz8iDmyM/0btio7cqDsIDwAANcrOl6ikzUj2z4dPXk1HifBLh1k5+BvWG8k /SP4+9lenV4QHgCA6xedbGlgJjreKebs0kF2ZhceEf9ICGm8D+EBALgd0RlFpKcZOTvFnF06yM7J hEcf1jaH1CA8AACXLzladPQOnQ/Z3Yz861NexkRnlJv//rzppYGtwz0RHWTnaMKj0533jo+xmvjD g/AAAFym6ExJdHSq0xIdlgYiOycTno8Z5EYa36wIDwDAMkVHtzl4R0C8iL8wcBSd/zYv7Yi5PsWc pYHIzlmFZy6psb8h6LfvEB4AgMWJTuX0cp3o/CO7iY4uXUVLA70Rc0QH2Vm88PQK0Sg645EUWngE 6QEAWITovDdExzsCIpu80tuR34WlgcjOBQvPNrjpP7s3/2YwkkPKAwBwPtGxywLtHh1duoomr/5x REf36WyEXTrIzgUKz7ZDgPT77pTo2JQH4QEAOI/ojEv+9Fbk6AiI7ATzrEcH0UF2LkJ4to0fHP0D 1IoqbbqD8AAAnF509LLA6PiHv43gRKLjnXfFdmRk5yKFJ/s4kex4t7WRHoQHAOA0omOXBb7Jnx06 0TlXnujohYG6RwfRQXauSngikdkUxOc3dwgPAMBRJUekvSzQjpaPE1f2QE97qKfeo6OnrujRQXau SnjsVuboViltITwAAKcRnfdEdEaZ8fpzsrOuEB1k5yqFJ0t1WtLj7Vi4E0bTAQDmEp1sWWBLdP4n EJ1/JD7Uk2ZkZOfqhMebsoqkJpIefbOj6UxqAQAcJjpRovOaiE40Wu5NXHlHQHzIbpKP6CA7Fyk8 3jfvNvnBakmOd7sTJrUAAOYSnY9EdPQOHZvo6H4dnej8kvpZV4gOsnOxwvPu/D0rOq1kpyVANC4D APRJjkjciOwtC7THP0Q9OlZ0XhAdZOeWhKe1Z6f3Fi0ipI8HACAXHdufk+3Q8Y5/8MbL/1aio0fL sx06iA6yc1XCUylj9aY7nvTo/1v6eAAAfNHJJq7GrcijsHjHP+iSld2hY7cijwL1IZx1hexcufCs AtHxduzY20fyeiQ99PEAAMS/bFYmrkbR8RKdfweiY3fo2EQH0UF2rlp4RPxJrUo560N2a8kfgfRY caKPBwB4Ht59actWrYmrLNHRE1dWdN4QHWQH4dkVHU96toH0fCTSs0l+oOjjAYBbFp2obDUmOmN/ TnT8g71lo+XRskD7vA/IztULj/2Gb21W/ijcIuGxfTz6RsoDANcqOSLtspUWHW9Z4N+B6Oj+HDta zrJAZAfhUe/zUp5sB8+H+W3kvSA+Xh+PV9YSpAcArkh0WmWrUXK8iSsv0Rnf/kf8wzxZFojsQEF4 WhuWrexUE57ftwcjPNtEehAeALgG0amUraKJq78D2flH/P4cduggOxD8MIqRi9ZoetSk3Ep6rPis P29bJT12WkuQHgC44OdV75fFrGzl7dDRL72xct2fww4dZAeSH87KaHprMsuTnHfzg+fVjtdGbEh5 AOCSRSf6JbFVtvrREJ2obDVOXEWnliM6yA44wiOyP5pemcx6l/105z2RIZvy6BH1lZDyAMBlSU70 XFktW0Wi84/sHvuQHf3AaDmyAxOEp7J0sCU7WWnrMRCesaRFygMAl5LmiORlK+98K1u2+jtJc3TZ Su/PifpzEB1kB4rCM0pP9BtLVs7Sv8m8mx9MT34elPTcCSkPAFxumrMxz4He+VY/HNGxvTk2zfH2 5+g0ZxNIGCA70BCebfGHO2pW9mQnkh4tPKQ8AHBJac7WPAe+KdH5pUQnK1t5TchR2Yr+HGQHZvyt RaTeuBylO1p27G388yfxe3lIeQBgyWlO1IScbUOOEh2vCVmLjtf7SNkK2YEZfri9xuXektab+S1H v7TSM/by3AspDwBcRprTU7b6p5Hm/DBpTnS+FaKD7MCRhaeV8kSy85rIjpWeR1IeAFhomuM1IXuH eOptyHZRYFS2am1D9spWiA6yA0cQnmyfxNY8AWTSY29eL4+X8gyf0kPKAwCnlJzolzqd5rTGyq3k ULZCdmChP/w24ZHik4G9ebLz5ojPo/gNzIOwfRkAjvNc55Ws9KSVbUL2ylY/lNR4kuPtzqFshezA AlOejdR6eKrpjhWfbGJrLGtp4bEnqSM9ADBHmuP15nhLAr3+nH+CNOen5GdbWdERRAfZgfMJjzg/ jK0enqrsaOl5Uh/rXvzyFqUtAJhTcqppji1b/dOQnFF0XoSyFbIDFyE8W9ltGM6a+Fopz0tDfGxp SwvP2MsjQgMzAPRJjohfsop+UdO7c34moqMlJ2tCpmyF7MDCnywqx0y0RtJ7pOdLIDy6pDUIpS0A yJ+7vDTaGye3k1Z6d44nOp7k2CZkO5hB2QrZgQtKeSSRnuxoiaic9eKIjxak36WtByflsb08XmkL 6QG47TSnp2SVpTk20YlKVlkTMmUrZAcuTHi2JknZmt9WNs5vTdmUVquv5+nzYzwo8VnLbmnLTm1p 6UF4AG5XcuwGZO/wTq83R+/P+SdIcmzJKjry4cO5T4gOsgMLf0JppTzZWVrvsrt48CW5/f7zr4H0 6NLWRvypLVIegNuSHJH2UTdeA7JNczzRGV//GaQ5dsrUHo/DkkBkB2405fHKWVZ2xte/OsIzlrbW Snjo5wG4LdGJ+nKySdEX2d+b45Wtfsh+87FXsqpsQibNQXbghlKeqKz10kh6tBg9OSnP/afsrCXf zYP0AFxXmlM55iErWXlNyJnkeCWrVm8OooPswA2mPNlOnhfzW9eL+Q1qTHm09Dwo6fmQ3YWEA9ID cHOSUy1Z2TQnkpyf6t/qX76qaQ6ig+wAKc9eWaslO1p4Rul5NNKjhQfpAbh8wfEkx/slylsM6KU5 tjfH3nSSE5WsdAMyaQ6yA6Q84W9flZTnl/mtTD/xfDHC8yi7pa0p0oP4ACwrxRHp2+8V7czRk1Y/ xJ+usvtyfgWSQ5oDyA5PUqWUx5a03oPfyF4c2RlvX5X0PAUpT4/0CGkPwEVJTjRKrs+zaqU5VnKe zXOPnbKKJIc0B9kBUp6dt4dAerx9PJHo/FK/fX35FJ8vJuV5VMJTlR5BegAuSnJaJSuvN8dKju3L sZKTjZOT5iA7wBNYmvL0lrV+mSeyb+rlKD1fTNLzgPQAXKTkeGPknuS0GpB/BqJT7cvR2+H1/RLS HEB2oJryRP08bxKXtfSTmhaer07K0ys9K9lfToj0AMwvOCL75Z+N1Cas3pznhGfxe3N+GPHRE1bR KHm1ZIXoABcECL8n9MtRLEbZGPflrD+FZJSURyUuX4zYjKJjb18mSI9dTDiY+7vi+xxg9hTHS3u9 haTeAEPUm+NJTtR8/Ko+h5Wcjfg9OUgOcBGA0veFbRAelPDcKeHJpOeLkp6vndJjx9XtmVvZ9Jb3 tQBAnuKI5HtyojFyry/Hpjk/kxSn0nxs0xxKVoDswFFSnpVJVkbpuS8kPV+cxKclPd64ut3GPEh+ DIWQ9gCUUhyRuB/HK1e9y27f3pjEjMmMlhx9+2H+TA8zeEsBKVkBsgNnkR5dQrorJD2PSdLzJZCe 8e8/OknPWvzyVtbXQ9oDCE47xcn6cVorKLySlXfTf8dOWEWSY5uPkRxAduCo3yut0pYnPQ8m6Xkq SI+d3HqUeDHhWvK+HtIeQHJqKU5LcrwJTLsz59mRm5bkjB/7XfxRckpWgOzA2aXHS3q0hFSlJxMe nfI8St7T09vMjPgAKc5uihKNkEd9Oc+y35/z05Ege7yMTXJa+3JIcwDZgZN/72T9PMNE6fHSHm8/ z2MgPd7I+l0gPa0yFz8ncC2CI4UUJzsTz0tyfgWJznNDcnRPjh0jpy8HkB1YfMojRigOlZ4vQcLz VEh67p2kp1Liynp6+JmBSxEckXgBoG06fpf2wb92U/pz4fYrkRyb5HgTVpSsANmBq5Sex0R6vgTS Y5Oex6L0eM3M2c4exAeWLDgifpmqJ8XpkZxfidz0SI4da4/OsEJ0ANmBq5aeSH6eJkiPLnF5+3p0 2oP4wCUJjjgJjneUQ6VUFUnOL0dunhuCU+3J2ThfD5IDyA5cvfRE4vPFkZ+nidKTlbiyEXbEB04p NyJxSceWfWyKs1GCEaU4tun4xUjMc/DSCk7Uj4PkALIDSE8gPV7ak4mPJzxRM7MnPetEemziI1Jr bubnDOYWnFaZamqpKkty7PteCinOm+xuWkZyANkBpMdIj7eV2Ut7Hh3J8V5/TKTHW1JYFZ8pR1Tw cwctuZkiOK0FgG9JiuNJjn39ZUKKg+QAsgNIT0N6etOex0B4vMmtbGzdlrgy8VlJ+4gK5AemyI3I /iRVVKbSCYo9ymGK5ESNxp7gRNuOkRxAdoDvu07puXOkp1Lmim6PDemxaY8VH+8g0mriUzmugp/N 6xObTG4kSW8qZapqP07Uk1MVnFaK4+3IQXIA2QG+/xLpWTWkx0t7IvF5DITHlra8Ete9tMtcPeKD /NyG2EyRm6rgVEpVrZ6cluAcmuJskRxAdgDa0rOaMe3xyl2PQcoTiU+rzOWNsR8qPwjQZYuNvdj3 CI530rhtOPZKVa9KVKKSlX3fi/k3VnC8LcfRuVXsyQFkB6BDekTi87es9Nw50mPFx2tufkzeZ4Wn MsnVEp+ektch4+38bB9PalpiUxGcLL3JBMdLcd4cwfHKVlGTsT2jytuL827uWyQ4SA4gOwAzSY93 8Kg3vh6VuTz5yW4PzsuoxOWVuQ6RH5H5J734ua9fhFvL/CSQGnFEoFWe2pj0xCY4UakqKllF0mMT nKhMFU1UbQKBQ3IA2QE4kvREh4+2xCdKfR4awhM1M3vSM0V+ppa8KsnP6oaeG7YH/t2ekpQEUhON h09JcFqS8+qkNFH/zZRm400xxUFyANkBmOn7NEt7ot4e29+zDsQnSn482fFSnntHfO7N5281OB9S 8ooEsfJzv1rIc8vcF8tt8f3bwsvoaIaW3HgNxlZuIsl5DUTnpfjyVfZLVFGZihQHkB2AK0h7MvGJ Sl5e+uPJjtfIHPX3eFub50h9MgHq7QFaShK0neHvV8tRlZ6bjfT33rQSnKwXJxOd6H3ex3iXeJqq JTn2MUFyANkBOFPaEzU1j4JgRWItebnLSsxD4xZJz4MjVV7J607iJmdvtH0Qv48peizmkqDqn095 ftlO/LNeqWkJTaWpeFuQmx7BaSU5URnLS21aPTikOIDsAFxp2tOT+HjiY8telZf3xcSn1eCcHV1h U59K+hNJz6rxuFakc+pzzLbz7ZbUSHDB3so0uan03kRy05Kc10ai89YhNja98SapPhxxI8UBZAfg QtMeSaRnVRCfOyMi9xKXvu6T97XkJ2pubvX43AXSM6cAVURmakrUk8REF9wpi/sysdkWxCZb8vfh SMdbQXTeApmpik2U3lQTHFIcQHYAriTtkYnicydxz43XkHzfkJ+sqblXeu7M/a4mPz39P9JIfaZM ifU0CLf22vQIzqYoOC25qaQ4Wbmq92bToQ/npb3P2dI/JqoA2QG4gbSnR3yGIPXJ+n4qAtRqZr6X 9hj7IfIzx7h7pU+oRTbxtE1EqCo5Wb9Nb3oTJTnvTuLSEp73JK2JUhtvPDxKb1rj4qQ4gOwAID5h n0+U/kQCFMnPWvKRdfvv7Qh7dqvKT1V8vMdKpF4ay5KdSqkpS3mmCs6H+Mv9MsGJkpyq8LwHSU1F bD6c+xwlVRXBQXIA2QFAfFzxiZKfoUN+Ipm5T/7OuiA8UZmr1eszZaNz1gu1KiY8FVlplV6mNBdX SlSe4HwEQhKJS/b2R1FsrNxspb88heAAT/gA/Bx0iU8r+WklQJ6wrIs3r4R2V0x6MuGpjLZXG75X yb+VQHgqPTVZyuMt9tsmCU5FdLJE5yMRnvdEiFpS8xHc55bYIDgAyA7A7OIjQZpREaBW+esuEZsp gjNFeLyvKROdVjmsmuxkpadWP090TMMU0cmEJ2oMzpqGI6n5kHy0vTe5QXAAkB2AWcRHpL+sU0l/ WjLUIzKt/p1KWas6sRV9jatCuhOVoHov+D0bjT3ZqYjPh7T7aFpSkzUSRweHRkmWIDgAyA7AsX9W KtNJ1SQk6wEaOoWlV25a/TtTv55WutNKdTIRaB3nkPXpTJGfTeP1TeN1T9xaJanK6D2CA4DsAJwt 9emVn1VDGIainHh/ftf571uy0kp1op6fluxkk1NZ0uEdzLkp3D4KMhRJS1R+at3vav+RSFyaQm4A kB2ARaU+mfxk8tBq/B0ar7d260zZvSNSK2PZ99mv2V60bc9N1LdTbVKu7tSp/nlFZFpC09tvQ2kK ANkBuDr5kYJYDAfKUesoibnGzudqUJ5z/HxblKlN4X5UZKaa2gjpDQCyA3AL8lMRIJH5dt4Mxb9X WSq4lD07IvVjIloff06Z6dlUjNwAIDsAV/9z1zpxvFeIpCAuU87Gan3eIfk7LdmRQDgiqZgiPZW/ JzK9r4bUBgDZAYCJAjS3ELVeF8kPAe1Jn1pEAtKSDCkkKr2vV15WpQa5AUB2AGDiz+fqSFLUel+P XLU+RiQPh4rGdsLHrr6O2AAgOwCwgJ/Znh6hXnGqyk9FdKqSUU1Qth1vz1FqQmoAkB0AuBARav3b VefHXE24X9vOt3vl45CmYKQG4ML5vwIMADa9e26qZ/20AAAAAElFTkSuQmCC" id="image3980"/>
+        <g id="g3982">
+          <circle sodipodi:ry="275.909" sodipodi:rx="275.909" sodipodi:cy="278.93399" sodipodi:cx="279.51501" cx="279.51501" cy="278.93399" r="275.909" id="circle3984" d="m 555.42401,278.93399 c 0,152.38033 -123.52866,275.909 -275.909,275.909 -152.38033,0 -275.9089919,-123.52867 -275.9089919,-275.909 0,-152.38033 123.5286619,-275.9089961 275.9089919,-275.9089961 152.38034,0 275.909,123.5286661 275.909,275.9089961 z"/>
+        </g>
+      </g>
+      <g style="display:inline" id="Frame_copy_1_" display="inline"/>
+    </g>
+    <g style="display:none" id="Frame_copy_2" display="none" transform="translate(1042.0419,-279.83386)">
+      <circle style="fill:#ffffff;display:inline" sodipodi:ry="275.909" sodipodi:rx="275.909" sodipodi:cy="278.93399" sodipodi:cx="279.51501" display="inline" cx="279.51501" cy="278.93399" r="275.909" id="circle3988" d="m 555.42401,278.93399 c 0,152.38033 -123.52866,275.909 -275.909,275.909 -152.38033,0 -275.9089919,-123.52867 -275.9089919,-275.909 0,-152.38033 123.5286619,-275.9089961 275.9089919,-275.9089961 152.38034,0 275.909,123.5286661 275.909,275.9089961 z"/>
+      <g style="display:inline" id="Frame_copy_2_1_" display="inline"/>
+    </g>
+    <g id="Foreground_Grid_1_" transform="matrix(0.333692,0,0,0.333692,-610.81394,-151.23635)"/>
+    <g id="layer4" inkscape:label="box" style="display:inline" transform="matrix(0.6433923,0,0,0.6433923,563.19164,120.38376)"/>
+    <g id="layer5" inkscape:label="zip_app" style="display:inline" transform="matrix(0.6433923,0,0,0.6433923,563.19164,120.38376)"/>
+    <rect style="opacity:0.57786889;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none" id="rect1327" width="0.64339232" height="0" x="563.78369" y="130.76021"/>
+    <path sodipodi:nodetypes="ccssscccccc" inkscape:connector-curvature="0" id="path5980" d="M 18.5,9 C 18.160156,9 18,9.2346178 18,9.5 l 0,107.96875 c 0,0.82158 0.679323,1.49953 1.5,1.5 L 74,119 c 0.05307,3e-5 3.273884,-0.008 3.9635,5e-5 6.540972,-4.50361 22.6373,-21.953284 31.58253,-30.955094 1.47685,-1.656484 0.4576,-0.370067 1.45391,-1.607456 L 111,9.5 C 111,9.1772826 110.83678,9 110.5,9 z" style="opacity:0.84653476;fill:url(#radialGradient5988);fill-opacity:1"/>
+    <path sodipodi:nodetypes="cscscssc" inkscape:connector-curvature="0" id="path6081" d="m 113.9,82.502986 c 0,4.465301 -4.49749,6.609952 -6.97972,8.293625 -5.10854,3.46508 -14.739114,3.52536 -20.520284,3.60638 -0.081,5.781159 0.76586,15.304599 -2.69922,20.413139 -1.68367,2.48224 -5.79051,7.98687 -8.70078,7.98687 -2.091359,1.5337 3.488204,11.21101 6.734971,8.31989 9.501888,-8.46107 45.998943,-30.20138 54.218083,-39.441569 2.04044,-2.29392 -17.0724,-11.965986 -22.05305,-9.178335 z" style="opacity:0.40099009;fill:#000000;fill-opacity:1;stroke:none;filter:url(#filter6118)" clip-path="url(#clipPath6093)"/>
+    <path style="fill:url(#linearGradient3895);fill-opacity:1;stroke:none" d="m 112,82.502986 c 0,4.465301 -2.79749,6.409952 -5.27972,8.093625 -5.10854,3.46508 -14.939114,3.32536 -20.720284,3.40638 -0.081,5.781159 0.16586,15.504599 -3.29922,20.613139 -1.68367,2.48224 -5.29051,5.38687 -8.20078,5.38687 2.31803,0 4.74284,-1.33476 7.58402,-4.08481 9.14197,-8.84873 17.36714,-16.13535 25.673154,-25.297529 C 109.67612,88.503916 112,86.97878 112,82.502986 z" id="path6011" inkscape:connector-curvature="0" sodipodi:nodetypes="cscscssc"/>
+    <path style="fill:#ffffff;fill-opacity:1;stroke:none" d="m 112.01875,83.2125 c -0.31643,3.899106 -3.52291,5.902807 -5.85,7.48125 C 101.06021,94.15883 90.83117,93.01898 85.05,93.1 c -0.081,5.781159 0.85258,16.31646 -2.6125,21.425 -1.473211,2.17196 -4.099456,4.6601 -6.7625,5.25 1.980459,-0.3623 3.884931,-1.66139 6.26875,-3.96875 0.339117,-0.38853 0.574297,-0.67895 1.10625,-1.5 3.46508,-5.10854 2.8315,-14.51259 2.9125,-20.29375 5.78117,-0.08102 15.81021,0.25883 20.91875,-3.20625 0.46542,-0.315689 1.59399,-1.187744 2.00625,-1.6 1.53629,-1.536293 2.90171,-2.613421 3.13125,-5.99375 z M 75.675,119.775 c -0.157658,0.0349 -0.313437,0.0414 -0.46875,0.0625 0.156991,-0.0169 0.310443,-0.0335 0.46875,-0.0625 z" id="path6122" inkscape:connector-curvature="0" sodipodi:nodetypes="cscsccccsscccc"/>
+    <path style="fill:none;stroke:url(#radialGradient3919);stroke-width:1.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;filter:url(#filter3909)" d="M 117.31456,81.861283 72.639105,125.34835" id="path3873" inkscape:connector-curvature="0" sodipodi:nodetypes="cc" clip-path="url(#clipPath3889)"/>
+  </g>
+</svg>
\ No newline at end of file
diff --git a/Crow/Images/Icons/folder.svg b/Crow/Images/Icons/folder.svg
new file mode 100644 (file)
index 0000000..beac8a1
--- /dev/null
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
+       <!ENTITY ns_svg "http://www.w3.org/2000/svg">
+       <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
+]>
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128" viewBox="0 0 128 128" style="overflow:visible;enable-background:new 0 0 128 128;" xml:space="preserve">
+<linearGradient id="XMLID_14_" gradientUnits="userSpaceOnUse" x1="53.9155" y1="91.1152" x2="55.8202" y2="110.6698">
+       <stop offset="0" style="stop-color:#999999"/>
+       <stop offset="1" style="stop-color:#4D4D4D"/>
+</linearGradient>
+<path style="opacity:0.2;fill:url(#XMLID_14_);" d="M0,96.969C0,101.766,4.52,104,6.5,104h98.342  c3.922-0.238,4.158-3.357,4.158-7.104v0.109C109,93.197,0,96.969,0,96.969z"/>
+<linearGradient id="XMLID_15_" gradientUnits="userSpaceOnUse" x1="56.8511" y1="91.5078" x2="58.8261" y2="111.7843">
+       <stop offset="0" style="stop-color:#999999"/>
+       <stop offset="1" style="stop-color:#4D4D4D"/>
+</linearGradient>
+<path style="opacity:0.2;fill:url(#XMLID_15_);" d="M0,97.969C0,102.078,3.266,105,6.5,105h101.553  c3.922-0.238,7.114-0.754,7.114-4.5L115,98.005C115,94.296,0,95.861,0,97.969z"/>
+<linearGradient id="XMLID_16_" gradientUnits="userSpaceOnUse" x1="57.9409" y1="89.6006" x2="60.2324" y2="113.1264">
+       <stop offset="0" style="stop-color:#999999"/>
+       <stop offset="1" style="stop-color:#4D4D4D"/>
+</linearGradient>
+<path style="opacity:0.2;fill:url(#XMLID_16_);" d="M110.053,97.824L0,95.969v3C0,104.609,4.52,106,6.5,106h103.167  c1.729-0.104,3.551-0.264,5.05-0.729c1.903-0.591,3.283-1.675,3.283-3.771C118,101.5,116.206,97.824,110.053,97.824z"/>
+<linearGradient id="XMLID_17_" gradientUnits="userSpaceOnUse" x1="47.3115" y1="10.7583" x2="58.863" y2="110.2979">
+       <stop offset="0" style="stop-color:#999999"/>
+       <stop offset="1" style="stop-color:#4D4D4D"/>
+</linearGradient>
+<path style="opacity:0.75;fill:url(#XMLID_17_);" d="M6.946,16.1C3.116,16.1,0,19.209,0,23.031v73.038C0,99.891,3.116,103,6.946,103  h93.108c3.83,0,6.945-3.109,6.945-6.931V32.097c0-3.822-3.115-6.931-6.945-6.931H62.729c-2.793,0-6.33-1.492-8.801-3.713  c0,0-1.035-0.928-1.035-0.928c-2.114-1.899-5.372-4.425-9.246-4.425H6.946z"/>
+<linearGradient id="XMLID_18_" gradientUnits="userSpaceOnUse" x1="35.979" y1="15.0229" x2="68.9291" y2="107.2834">
+       <stop offset="0" style="stop-color:#FFFFFF"/>
+       <stop offset="0.2191" style="stop-color:#F4F4F4"/>
+       <stop offset="0.6013" style="stop-color:#D8D8D8"/>
+       <stop offset="1" style="stop-color:#B3B3B3"/>
+</linearGradient>
+<path style="fill:url(#XMLID_18_);" d="M106,96.069c0,3.263-2.676,5.931-5.945,5.931H6.946C3.676,102,1,99.332,1,96.069V23.031  C1,19.769,3.676,17.1,6.946,17.1h36.701c3.271,0,6.149,1.987,8.578,4.169l1.034,0.928c2.429,2.182,6.2,3.969,9.47,3.969h37.326  c3.27,0,5.945,2.668,5.945,5.931V96.069z"/>
+<path style="fill:#FFFFFF;" d="M100.055,26.167H62.729c-3.27,0-7.041-1.787-9.47-3.969l-1.034-0.928  c-2.428-2.182-5.307-4.169-8.578-4.169H6.946C3.676,17.1,1,19.769,1,23.031v1C1,20.769,3.676,18.1,6.946,18.1h36.701  c3.271,0,6.149,1.987,8.578,4.169l1.034,0.928c2.429,2.182,6.2,3.969,9.47,3.969h37.326c3.27,0,5.945,2.668,5.945,5.931v-1  C106,28.835,103.324,26.167,100.055,26.167z"/>
+<linearGradient id="XMLID_19_" gradientUnits="userSpaceOnUse" x1="49.9219" y1="23.2446" x2="58.3703" y2="104.0195">
+       <stop offset="0" style="stop-color:#D9D9D9"/>
+       <stop offset="0.3749" style="stop-color:#CECECE"/>
+       <stop offset="1" style="stop-color:#B3B3B3"/>
+</linearGradient>
+<path style="fill:url(#XMLID_19_);" d="M3.344,99.816c0,0,0.984,0.168,1.615-0.284C5.625,99.054,6,97.695,6,95.896V54.132  c0-3.808,3.117-6.905,6.947-6.905h37.308c2.996,0,6.582-2.007,8.807-3.997l1.033-0.924c3.164-2.831,6.188-4.207,9.247-4.207H106  v-0.6H68.342c-3.059,0-6.083,1.376-9.247,4.207l-1.033,0.924c-2.225,1.989-5.811,3.997-8.807,3.997H11.947  C8.117,46.627,5,49.725,5,53.533v41.763c0.062,2.017-0.495,3.878-1.167,4.351C3.701,99.739,3.344,99.816,3.344,99.816z"/>
+<linearGradient id="XMLID_20_" gradientUnits="userSpaceOnUse" x1="54.9907" y1="39.2622" x2="63.2101" y2="110.0893">
+       <stop offset="0" style="stop-color:#999999"/>
+       <stop offset="1" style="stop-color:#4D4D4D"/>
+</linearGradient>
+<path style="opacity:0.75;fill:url(#XMLID_20_);" d="M69.342,38.1c-3.059,0-6.083,1.376-9.247,4.207l-1.033,0.924  c-2.225,1.989-5.811,3.996-8.807,3.996H12.947C9.117,47.227,6,50.325,6,54.132v41.763c0,1.847-0.37,3.165-1.015,3.619  C4.607,99.78,3.94,99.97,3.171,99.78c-0.762-0.188-1.067-0.562-1.563-1.022c-0.241,0.421,0.332,2.104,0.705,2.414  c0.219,0.183,2.062,1.719,4.344,1.719L109.053,103c3.923-0.238,6.947-3.358,6.947-7.104V45.005c0-3.807-3.116-6.905-6.947-6.905  H69.342z"/>
+<radialGradient id="XMLID_21_" cx="79.6152" cy="116.7344" r="88.0417" gradientUnits="userSpaceOnUse">
+       <stop offset="0" style="stop-color:#FFDD70"/>
+       <stop offset="0.4225" style="stop-color:#FFAB43"/>
+       <stop offset="0.8022" style="stop-color:#FF841F"/>
+       <stop offset="1" style="stop-color:#FF7512"/>
+</radialGradient>
+<path style="fill:url(#XMLID_21_);" d="M7,95.896c0,3.417-1.516,5.839-4.047,4.558c0,0,1.859,1.547,3.547,1.547s102.553,0,102.553,0  c3.271-0.2,5.947-2.857,5.947-6.104V45.005c0-3.248-2.676-5.905-5.947-5.905H69.342c-3.271,0-6.151,1.779-8.58,3.952l-1.033,0.924  c-2.43,2.172-6.202,4.251-9.474,4.251H12.947C9.676,48.227,7,50.884,7,54.132V95.896z"/>
+<radialGradient id="XMLID_22_" cx="126.5" cy="130.1982" r="82.3742" gradientUnits="userSpaceOnUse">
+       <stop offset="0" style="stop-color:#F2D26A"/>
+       <stop offset="0.2621" style="stop-color:#F6B650"/>
+       <stop offset="0.7541" style="stop-color:#FC8723"/>
+       <stop offset="1" style="stop-color:#FF7512"/>
+</radialGradient>
+<path style="fill:url(#XMLID_22_);" d="M109.053,39.1H106V102c2.578,0,3.053,0,3.053,0c3.271-0.2,5.947-2.857,5.947-6.104V45.005  C115,41.757,112.324,39.1,109.053,39.1z"/>
+<linearGradient id="XMLID_23_" gradientUnits="userSpaceOnUse" x1="132.5059" y1="35.3008" x2="40.7597" y2="115.4526">
+       <stop offset="0" style="stop-color:#FFDD70"/>
+       <stop offset="0.3826" style="stop-color:#FFB047"/>
+       <stop offset="0.791" style="stop-color:#FF8521"/>
+       <stop offset="1" style="stop-color:#FF7512"/>
+</linearGradient>
+<path style="fill:url(#XMLID_23_);" d="M109.053,100c0,0-100.947-0.52-102.553,0c-0.324,0.104-0.608,0.189-0.866,0.26  c-0.623,0.479-1.739,0.85-2.638,0.19C3.479,100.83,5.083,102,6.5,102c1.688,0,102.553,0,102.553,0  c3.271-0.2,5.947-2.857,5.947-6.104v-1C115,98.143,112.324,99.8,109.053,100z"/>
+<radialGradient id="XMLID_24_" cx="87.5469" cy="108.1338" r="112.4545" gradientUnits="userSpaceOnUse">
+       <stop offset="0" style="stop-color:#FFF3CC"/>
+       <stop offset="0.1912" style="stop-color:#FFDBAA"/>
+       <stop offset="0.5738" style="stop-color:#FFB06C"/>
+       <stop offset="0.854" style="stop-color:#FF9445"/>
+       <stop offset="1" style="stop-color:#FF8A36"/>
+</radialGradient>
+<path style="fill:url(#XMLID_24_);" d="M58.636,69.891C86.75,66.5,115,65.75,115,65.75V45.005c0-3.248-2.676-5.905-5.947-5.905  H69.342c-3.271,0-6.151,1.779-8.58,3.952l-1.033,0.924c-2.43,2.172-6.202,4.251-9.474,4.251H12.947C9.676,48.227,7,50.884,7,54.132  V84.75C7,84.75,30.521,73.281,58.636,69.891z"/>
+<linearGradient id="XMLID_25_" gradientUnits="userSpaceOnUse" x1="59.6372" y1="28.6401" x2="65.5115" y2="120.5861">
+       <stop offset="0" style="stop-color:#EBDBA6"/>
+       <stop offset="1" style="stop-color:#FF7512"/>
+</linearGradient>
+<path style="fill:url(#XMLID_25_);" d="M109.053,39.1H69.342c-3.271,0-6.151,1.779-8.58,3.952l-1.033,0.924  c-2.43,2.172-6.202,4.251-9.474,4.251H12.947C9.676,48.227,7,50.884,7,54.132v1c0-3.248,2.676-5.905,5.947-5.905h37.308  c3.271,0,7.044-2.079,9.474-4.251l1.033-0.924c2.429-2.173,5.309-3.952,8.58-3.952h39.711c3.271,0,5.947,2.657,5.947,5.905v-1  C115,41.757,112.324,39.1,109.053,39.1z"/>
+<linearGradient id="XMLID_26_" gradientUnits="userSpaceOnUse" x1="103.9541" y1="11.4053" x2="108.0303" y2="106.0095">
+       <stop offset="0" style="stop-color:#999999"/>
+       <stop offset="1" style="stop-color:#4D4D4D"/>
+</linearGradient>
+<rect x="106" y="39" style="opacity:0.15;fill:url(#XMLID_26_);" width="1" height="63"/>
+<path style="fill:#F3AF61;" d="M42,24c0,1.1-0.9,2-2,2H9c-1.1,0-2-0.9-2-2v-2c0-1.1,0.9-2,2-2h31c1.1,0,2,0.9,2,2V24z"/>
+<path style="fill:#CCCCCC;" d="M8.5,42C7.672,42,7,42.672,7,43.5S7.672,45,8.5,45s1.5-0.672,1.5-1.5S9.328,42,8.5,42z M17.5,42  c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S18.328,42,17.5,42z M26.5,42c-0.828,0-1.5,0.672-1.5,1.5  s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S27.328,42,26.5,42z M35.5,42c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5  S36.328,42,35.5,42z M44.5,42c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S45.328,42,44.5,42z M53.5,42  c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S54.328,42,53.5,42z"/>
+<path style="opacity:0.07;fill:#802600;" d="M8.5,51C7.672,51,7,51.672,7,52.5S7.672,54,8.5,54s1.5-0.672,1.5-1.5S9.328,51,8.5,51z   M17.5,51c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S18.328,51,17.5,51z M26.5,51c-0.828,0-1.5,0.672-1.5,1.5  s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S27.328,51,26.5,51z M35.5,51c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5  S36.328,51,35.5,51z M44.5,51c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S45.328,51,44.5,51z M53.5,51  c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S54.328,51,53.5,51z M62.5,51c-0.828,0-1.5,0.672-1.5,1.5  s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S63.328,51,62.5,51z M71.5,51c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5  S72.328,51,71.5,51z M80.5,51c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S81.328,51,80.5,51z M89.5,51  c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S90.328,51,89.5,51z M98.5,51c-0.828,0-1.5,0.672-1.5,1.5  s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S99.328,51,98.5,51z M62.5,42c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5  S63.328,42,62.5,42z M71.5,42c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S72.328,42,71.5,42z M80.5,42  c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S81.328,42,80.5,42z M89.5,42c-0.828,0-1.5,0.672-1.5,1.5  s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S90.328,42,89.5,42z M98.5,45c0.828,0,1.5-0.672,1.5-1.5S99.328,42,98.5,42S97,42.672,97,43.5  S97.672,45,98.5,45z M8.5,60C7.672,60,7,60.672,7,61.5S7.672,63,8.5,63s1.5-0.672,1.5-1.5S9.328,60,8.5,60z M17.5,60  c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S18.328,60,17.5,60z M26.5,60c-0.828,0-1.5,0.672-1.5,1.5  s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S27.328,60,26.5,60z M35.5,60c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5  S36.328,60,35.5,60z M44.5,60c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S45.328,60,44.5,60z M53.5,60  c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S54.328,60,53.5,60z M62.5,60c-0.828,0-1.5,0.672-1.5,1.5  s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S63.328,60,62.5,60z M71.5,60c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5  S72.328,60,71.5,60z M80.5,60c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S81.328,60,80.5,60z M89.5,60  c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S90.328,60,89.5,60z M98.5,60c-0.828,0-1.5,0.672-1.5,1.5  s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S99.328,60,98.5,60z M8.5,69C7.672,69,7,69.672,7,70.5S7.672,72,8.5,72s1.5-0.672,1.5-1.5  S9.328,69,8.5,69z M17.5,69c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S18.328,69,17.5,69z M26.5,69  c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S27.328,69,26.5,69z M35.5,69c-0.828,0-1.5,0.672-1.5,1.5  s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S36.328,69,35.5,69z M44.5,69c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5  S45.328,69,44.5,69z M53.5,69c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S54.328,69,53.5,69z M62.5,69  c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S63.328,69,62.5,69z M71.5,69c-0.828,0-1.5,0.672-1.5,1.5  s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S72.328,69,71.5,69z M80.5,69c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5  S81.328,69,80.5,69z M89.5,69c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S90.328,69,89.5,69z M98.5,69  c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S99.328,69,98.5,69z M8.5,78C7.672,78,7,78.672,7,79.5  S7.672,81,8.5,81s1.5-0.672,1.5-1.5S9.328,78,8.5,78z M17.5,78c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5  S18.328,78,17.5,78z M26.5,78c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S27.328,78,26.5,78z M35.5,78  c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S36.328,78,35.5,78z M44.5,78c-0.828,0-1.5,0.672-1.5,1.5  s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S45.328,78,44.5,78z M53.5,78c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5  S54.328,78,53.5,78z M62.5,78c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S63.328,78,62.5,78z M71.5,78  c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S72.328,78,71.5,78z M80.5,78c-0.828,0-1.5,0.672-1.5,1.5  s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S81.328,78,80.5,78z M89.5,78c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5  S90.328,78,89.5,78z M98.5,78c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S99.328,78,98.5,78z M8.5,87  C7.672,87,7,87.672,7,88.5S7.672,90,8.5,90s1.5-0.672,1.5-1.5S9.328,87,8.5,87z M17.5,87c-0.828,0-1.5,0.672-1.5,1.5  s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S18.328,87,17.5,87z M26.5,87c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5  S27.328,87,26.5,87z M35.5,87c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S36.328,87,35.5,87z M44.5,87  c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S45.328,87,44.5,87z M53.5,87c-0.828,0-1.5,0.672-1.5,1.5  s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S54.328,87,53.5,87z M62.5,87c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5  S63.328,87,62.5,87z M71.5,87c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S72.328,87,71.5,87z M80.5,87  c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S81.328,87,80.5,87z M89.5,87c-0.828,0-1.5,0.672-1.5,1.5  s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S90.328,87,89.5,87z M98.5,87c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5  S99.328,87,98.5,87z"/>
+</svg>
\ No newline at end of file
diff --git a/Crow/Images/Icons/member.svg b/Crow/Images/Icons/member.svg
new file mode 100644 (file)
index 0000000..af654a9
--- /dev/null
@@ -0,0 +1,93 @@
+<?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"
+   width="64"
+   height="64"
+   viewBox="0 0 63.999998 63.999998"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.91 r13725"
+   sodipodi:docname="member.svg">
+  <defs
+     id="defs4" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="1.9604882"
+     inkscape:cx="-66.406882"
+     inkscape:cy="33.211154"
+     inkscape:document-units="px"
+     inkscape:current-layer="svg2"
+     showgrid="false"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0"
+     units="px"
+     inkscape:window-width="1280"
+     inkscape:window-height="1009"
+     inkscape:window-x="0"
+     inkscape:window-y="0"
+     inkscape:window-maximized="1" />
+  <g
+     id="ctor">
+    <rect
+       style="opacity:1;fill:#3fff69;fill-opacity:1;stroke:#000000;stroke-width:6;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:0;stroke-dasharray:none;stroke-opacity:0.74509804"
+       id="rect4185"
+       width="58"
+       height="58"
+       x="3"
+       y="3" />
+    <text
+       sodipodi:linespacing="125%"
+       id="text4176"
+       y="51.758148"
+       x="7.4200573"
+       style="font-style:normal;font-weight:normal;font-size:57.0553093px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       xml:space="preserve"><tspan
+         y="51.758148"
+         x="7.4200573"
+         id="tspan4178"
+         sodipodi:role="line">#</tspan></text>
+  </g>
+  <circle
+     style="opacity:1;fill:#70bbff;fill-opacity:1;stroke:#000000;stroke-width:5.99999905;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:0;stroke-dasharray:none;stroke-opacity:0.74509804"
+     id="property"
+     cx="32"
+     cy="32"
+     r="29" />
+  <metadata
+     id="metadata4158">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <rect
+     style="opacity:1;fill:#ff543f;fill-opacity:1;stroke:#000000;stroke-width:6;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:0;stroke-dasharray:none;stroke-opacity:0.74509804"
+     id="method"
+     width="58"
+     height="58"
+     x="3"
+     y="3" />
+  <path
+     style="fill:#f7ff3f;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.06100774px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     d="M 22.471298,1.892924 8.8054675,32.128113 30.276085,31.763018 10.90935,62.764759 56.012472,21.268821 30.415746,22.059981 47.587854,2.0447011 Z"
+     id="event"
+     inkscape:connector-curvature="0"
+     sodipodi:nodetypes="cccccccc" />
+</svg>
diff --git a/Crow/Images/Icons/tetra.png b/Crow/Images/Icons/tetra.png
new file mode 100644 (file)
index 0000000..b0c855a
Binary files /dev/null and b/Crow/Images/Icons/tetra.png differ
diff --git a/Crow/Images/button.svg b/Crow/Images/button.svg
new file mode 100644 (file)
index 0000000..314f63f
--- /dev/null
@@ -0,0 +1,16 @@
+ <svg width="200" height="100">
+       <g id="normal">
+               <rect width="98%" height="98%" 
+                       rx="10px" ry="10px" x="2%" y="2%"
+                       style="fill:rgb(50,50,50);" />
+               <rect width="98%" height="98%" 
+                       rx="10px" ry="10px" 
+                       style="fill:rgb(200,200,200);" />
+       </g>
+       <g id="pressed">
+               <rect width="98%" height="98%" 
+                       rx="10px" ry="10px" x="2%" y="2%"
+                       style="fill:rgb(200,200,200);" />
+       </g>
+
+</svg> 
diff --git a/Crow/Images/crow0.svg b/Crow/Images/crow0.svg
new file mode 100644 (file)
index 0000000..c621130
--- /dev/null
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<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"
+   height="35.987217"
+   width="51.116982"
+   version="1.1"
+   id="svg2">
+  <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></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs6" />
+  <path
+     id="path2818"
+     d="m 36.232985,35.977162 c -0.02345,-0.0094 -0.04263,-0.04436 -0.04263,-0.07772 0,-0.03337 -0.04543,-0.117846 -0.100965,-0.187724 -0.05553,-0.06987 -0.10986,-0.152552 -0.120738,-0.183728 -0.04888,-0.140096 -0.547064,-0.441575 -0.740404,-0.448061 -0.01333,-6.73e-4 -0.0417,0.06441 -0.06301,0.144127 -0.0213,0.07971 -0.05448,0.164118 -0.0737,0.187567 -0.06807,0.08303 -0.2351,0.04596 -0.448164,-0.09947 -0.114492,-0.07815 -0.231452,-0.140793 -0.259915,-0.139198 -0.103032,0.0057 -0.22753,-0.0647 -0.284401,-0.160973 -0.105659,-0.178872 -0.451937,-0.41031 -0.613884,-0.41031 -0.11287,0 -0.378547,-0.121442 -0.488394,-0.223239 -0.06283,-0.05824 -0.129597,-0.08369 -0.219515,-0.08369 -0.191898,0 -0.291236,-0.05025 -0.332315,-0.168082 -0.02007,-0.05761 -0.05795,-0.104746 -0.08415,-0.104746 -0.02621,0 -0.07371,-0.02879 -0.105549,-0.06398 -0.03185,-0.03519 -0.108169,-0.07213 -0.169604,-0.08211 -0.219849,-0.03568 -0.937873,-0.414299 -0.993727,-0.524009 -0.01875,-0.03685 -0.103161,-0.143806 -0.187567,-0.237705 -0.189643,-0.210956 -0.537045,-0.371869 -0.741262,-0.343338 -0.710425,0.09925 -0.737631,0.100685 -1.030367,0.05449 -0.337983,-0.05334 -0.630446,-0.05889 -1.115893,-0.02117 -0.331487,0.02576 -0.347801,0.02387 -0.368967,-0.04283 -0.01219,-0.03838 0.0026,-0.154623 0.03266,-0.258318 0.03015,-0.103694 0.04455,-0.205124 0.03202,-0.225402 -0.04471,-0.07234 -0.314032,-0.0065 -0.532991,0.130268 -0.165667,0.103489 -0.230973,0.169125 -0.288563,0.290041 -0.07126,0.149603 -0.19268,0.232754 -0.339892,0.232754 -0.09327,0 -0.01149,-0.448641 0.108895,-0.597398 0.0301,-0.03719 0.045,-0.04843 0.03312,-0.02499 -0.01262,0.02492 3.4e-5,0.04263 0.03051,0.04263 0.03229,0 0.04463,-0.01945 0.03247,-0.05115 -0.0108,-0.02813 -0.0027,-0.05115 0.01813,-0.05115 0.02077,0 0.03776,-0.02034 0.03776,-0.04521 0,-0.05853 0.151433,-0.201223 0.181571,-0.171088 0.01268,0.01268 0.02305,0.003 0.02305,-0.02158 0,-0.05501 0.190827,-0.241992 0.218611,-0.214209 0.01107,0.01107 0.02012,0.0013 0.02012,-0.02169 0,-0.02299 0.01358,-0.03341 0.03018,-0.02314 0.0166,0.01026 0.07415,0.0046 0.127887,-0.01261 0.05374,-0.01721 0.185946,-0.03746 0.293797,-0.04502 0.154262,-0.01082 0.196092,-0.0032 0.196092,0.03533 0,0.03062 0.02017,0.04134 0.05362,0.02851 0.02949,-0.01132 0.08321,-0.0048 0.119365,0.01461 0.04469,0.02391 0.06573,0.02399 0.06573,0 0,-0.0546 0.166343,-0.02716 0.19016,0.03136 0.01696,0.04168 0.02726,0.03685 0.05065,-0.02383 0.03017,-0.0782 0.05209,-0.07969 0.33327,-0.02256 0.04625,0.0094 0.07104,0.0023 0.05918,-0.01685 -0.01918,-0.03103 0.105189,-0.09308 0.158609,-0.07913 0.01351,0.0035 0.0409,-0.02412 0.06088,-0.06145 0.01998,-0.03733 0.06279,-0.06787 0.09513,-0.06787 0.03235,0 0.07872,-0.0319 0.103074,-0.07089 0.03874,-0.06204 0.03597,-0.07306 -0.02225,-0.08828 -0.04068,-0.01065 -0.07465,-0.05808 -0.08746,-0.122132 -0.01151,-0.0576 -0.03098,-0.0947 -0.04325,-0.08243 -0.02243,0.02243 -0.09396,-0.07925 -0.134223,-0.190818 -0.01192,-0.03303 -0.05709,-0.06895 -0.100386,-0.07981 -0.0433,-0.01087 -0.08702,-0.04139 -0.09717,-0.06783 -0.01015,-0.02644 -0.03811,-0.04866 -0.06215,-0.04937 -0.02403,-6.72e-4 -0.09734,-0.06977 -0.162897,-0.153463 -0.06556,-0.08369 -0.141017,-0.152171 -0.167679,-0.152171 -0.02665,0 -0.03909,-0.0094 -0.02762,-0.02084 0.02949,-0.02949 -0.161533,-0.183774 -0.227545,-0.183774 -0.03567,0 -0.05475,-0.02971 -0.05475,-0.08526 0,-0.04689 -0.01667,-0.08526 -0.03705,-0.08526 -0.02039,0 -0.132932,-0.09206 -0.250118,-0.204591 -0.117184,-0.112527 -0.225744,-0.193097 -0.241239,-0.179042 -0.0155,0.01404 -0.01813,0.008 -0.0059,-0.01351 0.02148,-0.0376 -0.06692,-0.09775 -0.12476,-0.08487 -0.01546,0.0034 -0.01943,-0.0078 -0.0088,-0.02496 0.01062,-0.01717 -0.02277,-0.05853 -0.0742,-0.09191 -0.05142,-0.03337 -0.113546,-0.08877 -0.138053,-0.123093 -0.02451,-0.03432 -0.06672,-0.0624 -0.09378,-0.0624 -0.02707,0 -0.04922,-0.01355 -0.04922,-0.03012 0,-0.0438 -0.778285,-0.624964 -0.930964,-0.695162 -0.0729,-0.03352 -0.164401,-0.05081 -0.209278,-0.03955 -0.05655,0.01418 -0.102151,-0.0031 -0.15683,-0.05944 -0.0424,-0.0437 -0.06447,-0.05739 -0.04905,-0.03043 0.01542,0.02698 -0.03574,-0.0023 -0.113694,-0.06486 -0.140423,-0.112848 -0.199258,-0.210672 -0.162485,-0.270173 0.01048,-0.01696 -0.0034,-0.03946 -0.03092,-0.05001 -0.03157,-0.0121 -0.04839,-0.06147 -0.04566,-0.133995 0.0046,-0.123415 -0.115972,-0.333547 -0.242202,-0.421962 -0.03969,-0.0278 -0.06324,-0.06494 -0.05237,-0.08255 0.01089,-0.01761 -0.0042,-0.04121 -0.03354,-0.05247 -0.02932,-0.01125 -0.05331,-0.04833 -0.05331,-0.0824 0,-0.03407 -0.03837,-0.107533 -0.08526,-0.163263 -0.07704,-0.09156 -0.08519,-0.130424 -0.08459,-0.403332 0.0011,-0.467434 0.102818,-0.951299 0.346875,-1.649081 0.133708,-0.382291 0.234679,-0.776483 0.280602,-1.095504 0.01999,-0.138863 0.01188,-0.170521 -0.06808,-0.265547 -0.09126,-0.108463 -0.277674,-0.207699 -0.390138,-0.207699 -0.03326,0 -0.167911,-0.04572 -0.299229,-0.101598 -0.334854,-0.142493 -0.698295,-0.199641 -1.524701,-0.239741 -0.393891,-0.01911 -0.856189,-0.05756 -1.027322,-0.08543 -0.171134,-0.02796 -0.404168,-0.05076 -0.517855,-0.05076 -0.113686,0 -0.249901,-0.01718 -0.302703,-0.03821 -0.0528,-0.02101 -0.22913,-0.0397 -0.391836,-0.04152 -0.16271,-0.0018 -0.288412,-0.01532 -0.27934,-0.03 0.0091,-0.01468 -0.01127,-0.02647 -0.0452,-0.02621 -0.03393,2.24e-4 -0.315468,-0.0481 -0.625641,-0.107494 l -0.563945,-0.107977 -0.33979,0.10758 c -0.186882,0.05917 -0.349511,0.107539 -0.361388,0.107494 -0.04086,-1.36e-4 -0.05638,-0.13324 -0.01741,-0.149221 0.02145,-0.0088 -0.0023,-0.01721 -0.05276,-0.01869 -0.05047,-0.0015 -0.100161,0.01089 -0.110412,0.02747 -0.03208,0.05191 -0.458126,0.118498 -0.505769,0.07904 -0.02811,-0.02328 -0.09385,-0.0242 -0.195783,-0.0028 -0.08441,0.01777 -0.280073,0.0495 -0.434816,0.07054 -0.154743,0.02104 -0.281352,0.05283 -0.281352,0.07068 0,0.01786 -0.02302,0.02362 -0.05115,0.01281 -0.02814,-0.0108 -0.05123,-0.0086 -0.05131,0.0049 0,0.01348 -0.05615,0.02741 -0.124603,0.03097 -0.06845,0.0036 -0.1336,0.01891 -0.144786,0.0341 -0.02606,0.03542 -0.139983,0.04146 -0.796184,0.04221 -0.297591,4.49e-4 -0.537126,0.01439 -0.537126,0.0315 0,0.01698 -0.134282,0.03143 -0.298403,0.0321 -0.369505,0.0015 -0.539084,0.01992 -0.844055,0.09164 -0.131298,0.03088 -0.373004,0.06513 -0.537126,0.0761 -0.164122,0.01097 -0.298404,0.03207 -0.298404,0.04687 0,0.01481 -0.05371,0.0182 -0.119361,0.0076 -0.08039,-0.01304 -0.119361,-0.0061 -0.119361,0.02122 0,0.02232 -0.01443,0.03166 -0.03208,0.02075 -0.03408,-0.02106 -0.587009,0.111706 -0.615884,0.147893 -0.0094,0.01176 -0.04775,0.02527 -0.08526,0.03003 -0.319552,0.04061 -0.388045,0.05571 -0.371812,0.08197 0.01026,0.01661 -0.02466,0.02725 -0.07759,0.02367 -0.107275,-0.0073 -0.331986,0.114563 -0.292219,0.15843 0.014,0.01544 0.0067,0.01729 -0.01626,0.0041 -0.03986,-0.0229 -0.410541,0.170723 -0.776766,0.405746 -0.09378,0.06018 -0.400713,0.229852 -0.682064,0.377042 -0.8431486,0.441091 -1.5106691,0.786933 -1.9438848,1.00712 -0.331279,0.168378 -0.7656083,0.411685 -1.2106655,0.678201 -0.1208071,0.07234 -0.7235464,0.348753 -1.0060453,0.461358 -0.1688108,0.06729 -0.3529682,0.143067 -0.4092389,0.168389 -0.3782305,0.170213 -0.4488005,0.204855 -0.4944967,0.24276 -0.1118065,0.09275 -0.7795227,0.48269 -0.974639,0.569184 -0.1140235,0.05055 -0.3212008,0.108223 -0.4603938,0.12817 -0.2794774,0.04005 -0.6793677,0.03386 -0.6793677,-0.01051 0,-0.01562 -0.014897,-0.01916 -0.033103,-0.0079 -0.018206,0.01125 -0.04289,-0.01852 -0.054852,-0.0662 -0.011962,-0.04766 -0.028767,-0.08665 -0.037344,-0.08665 -0.027842,0 -0.1640932,0.0777 -0.1816285,0.103583 -0.024028,0.03546 -0.2704515,0.135139 -0.3340901,0.135139 -0.040327,0 -0.033244,-0.02142 0.029742,-0.08996 l 0.082677,-0.08996 -0.1534646,0.02493 c -0.084405,0.01371 -0.2762361,0.02752 -0.4262904,0.0307 -0.1617809,0.0034 -0.3133657,0.02625 -0.3724277,0.0561 -0.076685,0.03876 -0.1028397,0.04063 -0.113677,0.0081 -0.00774,-0.02322 -0.050258,-0.04223 -0.09448,-0.04223 -0.044221,0 -0.090781,-0.0168 -0.1034652,-0.03732 -0.012684,-0.02052 -0.05963,-0.03032 -0.1043224,-0.02178 -0.044694,0.0085 -0.0812605,0.0028 -0.0812605,-0.01277 0,-0.01557 -0.0226251,-0.01963 -0.0502787,-0.009 -0.0276536,0.01062 -0.0747891,-0.0052 -0.10474605,-0.03517 -0.0299569,-0.02996 -0.0836695,-0.05446 -0.11936206,-0.05446 -0.0755134,0 -0.16300798,-0.155442 -0.14396948,-0.255775 0.0216458,-0.114071 0.0858903,-0.269677 0.13551736,-0.328235 0.0258287,-0.03048 0.0424846,-0.07582 0.0370134,-0.100762 -0.005471,-0.02494 0.0126179,-0.04604 0.0401989,-0.04689 0.0275816,-8.75e-4 0.0695576,-0.03992 0.0932812,-0.08681 0.0237239,-0.04689 0.0433594,-0.07187 0.0436366,-0.05551 2.7333e-4,0.01638 0.0233532,0.0108 0.0512819,-0.01239 0.0279281,-0.02318 0.0409047,-0.05812 0.0288344,-0.07765 -0.0120695,-0.01954 -0.00597,-0.02563 0.013563,-0.01355 0.03826,0.02364 0.1334119,-0.06902 0.102556,-0.09987 -0.010234,-0.01023 -0.081291,0.01337 -0.15790503,0.05246 -0.19132318,0.0976 -0.53029094,0.131726 -0.60948002,0.06135 -0.040574,-0.03605 -0.10602968,-0.04828 -0.20760549,-0.03876 L 0,26.723956 0.13129745,26.603285 c 0.20194096,-0.185598 1.15569925,-0.834706 1.22646285,-0.834706 0.017944,0 1.0011722,-0.593762 1.1596288,-0.700289 l 0.1062908,-0.07146 -0.097498,-0.04316 c -0.075194,-0.03329 -0.09082,-0.05618 -0.068306,-0.100101 0.016056,-0.03132 0.038207,-0.148677 0.049225,-0.2608 0.013936,-0.141813 0.038705,-0.216631 0.081377,-0.245814 0.1348325,-0.09221 0.317117,-0.268214 0.317117,-0.306188 0,-0.04333 -0.2144179,0.01817 -0.8473768,0.243035 -0.1940842,0.06895 -0.3609084,0.117337 -0.3707213,0.107524 -0.030038,-0.03004 0.1889381,-0.28351 0.3932649,-0.455219 0.1064018,-0.08942 0.2148835,-0.182797 0.2410706,-0.207519 0.134978,-0.127412 0.6824316,-0.46318 1.0116807,-0.620491 0.2054297,-0.09815 0.4118743,-0.205241 0.4587663,-0.237974 0.046892,-0.03274 0.2270451,-0.133333 0.40034,-0.223546 0.1732947,-0.09022 0.3093674,-0.169742 0.3023838,-0.176726 -0.00698,-0.007 -0.1087422,0.01965 -0.226129,0.0592 -0.1501313,0.05057 -0.2241353,0.06119 -0.249524,0.0358 -0.025388,-0.02539 -0.024637,-0.03609 0.00253,-0.03609 0.021244,0 0.048451,-0.03096 0.060459,-0.06879 0.019185,-0.06045 0.1680893,-0.221549 0.4635947,-0.501568 0.048755,-0.0462 0.1428871,-0.117089 0.2091823,-0.157532 0.2161395,-0.131856 0.3951126,-0.257621 0.4169899,-0.29302 0.022754,-0.03682 1.0610754,-0.562441 1.1881729,-0.601483 0.04125,-0.01267 0.1911105,-0.08059 0.3330257,-0.150923 0.1419153,-0.07034 0.2933966,-0.139111 0.3366242,-0.152832 0.043226,-0.01372 0.1463559,-0.07271 0.2291753,-0.131083 0.1199707,-0.08456 0.1625792,-0.09864 0.2096072,-0.06927 0.047284,0.02953 0.1538875,-0.0087 0.5358933,-0.192258 0.2622766,-0.126017 0.5689448,-0.264972 0.6814862,-0.308789 0.1125401,-0.04382 0.2249981,-0.09985 0.2499076,-0.124513 0.081951,-0.08115 0.1773194,-0.116582 0.3449729,-0.128175 0.1131113,-0.0078 0.1886589,-0.03475 0.2391522,-0.08524 0.040595,-0.0406 0.1438461,-0.118225 0.2294472,-0.172512 0.1733184,-0.109916 0.2284002,-0.176259 0.2623733,-0.316014 0.01334,-0.05486 0.06939,-0.123095 0.132975,-0.161862 0.06158,-0.03755 0.08742,-0.0685 0.05876,-0.07038 -0.08661,-0.0057 0.555593,-0.16351 0.673539,-0.16552 0.06836,-0.0011 0.110835,-0.01922 0.110835,-0.0471 0,-0.02486 0.03789,-0.08081 0.08421,-0.124319 0.09656,-0.09071 0.08465,-0.1374 -0.03506,-0.1374 -0.139172,0 -0.09502,-0.04884 0.164003,-0.181411 0.306614,-0.156928 0.449342,-0.161093 0.841624,-0.02456 0.28366,0.09873 0.288206,0.09917 0.345032,0.03364 0.03167,-0.03652 0.06838,-0.06639 0.08158,-0.06639 0.02544,0 0.444123,-0.288445 0.530711,-0.36562 0.02814,-0.02508 0.1816,-0.14031 0.341033,-0.256071 0.159432,-0.115763 0.427996,-0.311618 0.596806,-0.435234 0.324997,-0.237988 0.519973,-0.363211 0.852581,-0.547569 0.112541,-0.06238 0.272663,-0.181743 0.355823,-0.265252 l 0.151204,-0.151834 -0.279091,0.01616 c -0.295876,0.01713 -0.322422,0.0016 -0.24494,-0.143172 0.05332,-0.09963 0.736112,-0.634181 1.100461,-0.86154 0.05926,-0.03698 0.08714,-0.07645 0.07227,-0.102311 -0.01332,-0.02315 -0.01159,-0.03067 0.0038,-0.01669 0.01542,0.01398 0.07543,-0.01065 0.133354,-0.05471 0.219267,-0.166827 1.171023,-0.727058 1.367134,-0.804733 0.258942,-0.102562 0.861798,-0.404573 0.886111,-0.443911 0.0101,-0.01634 0.121786,-0.06366 0.248193,-0.105146 0.287589,-0.09439 0.30873,-0.106826 0.229061,-0.134772 -0.06732,-0.02362 -0.07326,-0.02127 0.880461,-0.347551 0.239998,-0.08211 0.429331,-0.156371 0.420748,-0.165033 -0.0086,-0.0087 0.03161,-0.01751 0.08933,-0.01966 0.05771,-0.0022 0.121598,-0.02517 0.141958,-0.05115 0.02171,-0.0277 0.120634,-0.05234 0.239187,-0.05957 0.210669,-0.01285 0.602989,-0.173276 0.928324,-0.379597 0.08567,-0.05433 0.264945,-0.123611 0.398397,-0.153965 0.133453,-0.03035 0.2584,-0.06637 0.277662,-0.08004 0.01927,-0.01367 0.09641,-0.04558 0.171433,-0.07092 0.07503,-0.02534 0.173013,-0.07458 0.217746,-0.109424 0.04473,-0.03484 0.09298,-0.06335 0.107228,-0.06335 0.01425,0 0.07348,-0.04445 0.131636,-0.09877 0.113963,-0.106457 0.351444,-0.240935 0.463279,-0.26234 0.038,-0.0073 0.08445,-0.03321 0.10321,-0.05764 0.01875,-0.02443 0.09498,-0.08983 0.169391,-0.145337 0.194156,-0.144837 0.214536,-0.162058 0.478569,-0.404414 0.251516,-0.230862 0.606848,-0.516232 1.227718,-0.98599 0.344093,-0.2603468 0.589539,-0.4332454 1.258562,-0.886573 0.133088,-0.09018 0.449157,-0.2640469 0.702374,-0.3863728 0.253216,-0.1223245 0.529451,-0.2557186 0.613857,-0.2964302 0.08441,-0.04071 0.158614,-0.085626 0.16491,-0.099811 0.0063,-0.014184 0.02548,-0.017112 0.04263,-0.00653 0.01716,0.010605 0.0312,0.00558 0.0312,-0.011156 0,-0.016741 0.02005,-0.030435 0.04455,-0.030435 0.0245,0 0.158784,-0.058252 0.298402,-0.129445 0.139619,-0.071195 0.430335,-0.1978034 0.646038,-0.2813523 0.215704,-0.083549 0.491939,-0.1954213 0.613858,-0.2486049 0.121921,-0.053185 0.306077,-0.1321049 0.40924,-0.1753788 0.103162,-0.043273 0.29828,-0.1359289 0.433601,-0.2058975 0.135324,-0.069969 0.361685,-0.1753594 0.503025,-0.2342005 0.141344,-0.058844 0.256987,-0.118339 0.256987,-0.1322199 0,-0.013882 0.01945,-0.02524 0.04319,-0.02524 0.02377,0 0.303834,-0.1227275 0.622385,-0.2727296 0.318551,-0.1500017 0.675102,-0.3078947 0.792333,-0.3508747 0.117228,-0.042978 0.213145,-0.092292 0.213145,-0.1095837 0,-0.017291 0.01918,-0.027759 0.04263,-0.02326 0.06969,0.013374 0.594379,-0.1884232 0.639435,-0.2459351 0.0094,-0.011971 0.04007,-0.021527 0.06821,-0.021238 0.121558,0.00127 0.660662,-0.1945862 0.918837,-0.3337747 0.241294,-0.1300895 0.587545,-0.3830342 0.701059,-0.5121391 0.01875,-0.021333 0.06131,-0.048999 0.09456,-0.061479 0.03325,-0.012481 0.07001,-0.047591 0.08169,-0.078024 0.02692,-0.070138 0.174568,-0.219039 0.217202,-0.219039 0.01774,0 0.05143,-0.030691 0.07486,-0.068207 0.02342,-0.037513 0.06448,-0.068206 0.09123,-0.068206 0.02675,0 0.03887,-0.00976 0.02696,-0.021682 -0.01192,-0.011924 0.05783,-0.09633 0.155007,-0.1875678 0.09718,-0.091238 0.161929,-0.1668596 0.143886,-0.168049 -0.01803,-0.00118 0.0028,-0.016405 0.04612,-0.033815 0.04747,-0.019039 0.06915,-0.047456 0.05441,-0.071314 -0.01348,-0.021822 -0.0098,-0.030553 0.0083,-0.019409 0.01801,0.011138 0.09144,-0.040204 0.163151,-0.1140923 0.0717,-0.073888 0.117738,-0.1343421 0.10229,-0.1343421 -0.01546,0 0.02072,-0.036015 0.08038,-0.080032 0.05967,-0.044017 0.09718,-0.091336 0.08336,-0.105152 -0.01383,-0.013815 -0.0095,-0.020006 0.0097,-0.013752 0.04939,0.01615 0.223702,-0.1274928 0.194271,-0.1600887 -0.01342,-0.014875 -0.0072,-0.017247 0.01376,-0.00527 0.06096,0.034779 0.607999,-0.4589859 0.563584,-0.5087016 -0.0121,-0.013544 -0.0039,-0.014234 0.01831,-0.00155 0.02248,0.012885 0.06394,-0.010665 0.09378,-0.053276 0.02942,-0.042001 0.05349,-0.064232 0.05349,-0.049403 0,0.035425 0.155483,-0.078134 0.314002,-0.2293306 0.06954,-0.066327 0.191209,-0.1634486 0.270384,-0.2158258 l 0.143933,-0.095226 -0.09461,-0.017052 c -0.09208,-0.016595 -0.08962,-0.020213 0.09234,-0.1351948 0.102836,-0.064979 0.180276,-0.1355869 0.172099,-0.1569075 -0.0082,-0.021322 0.03576,-0.063723 0.09766,-0.094226 l 0.112534,-0.055461 -0.110835,-7.738e-4 c -0.121681,-8.545e-4 -0.148951,-0.052289 -0.04518,-0.085223 0.03611,-0.011461 0.177308,-0.1287936 0.313783,-0.260741 0.136473,-0.1319475 0.294923,-0.2638643 0.352116,-0.2931487 0.05718,-0.029285 0.112307,-0.066044 0.122484,-0.081687 0.01017,-0.015643 0.08691,-0.0653452 0.170517,-0.1104495 0.08361,-0.0451035 0.148684,-0.0976873 0.144617,-0.11685267 -0.0041,-0.0191645 0.0331,-0.0450046 0.08257,-0.0574227 0.04948,-0.0124174 0.127764,-0.0523182 0.173974,-0.0886698 0.04622,-0.0363507 0.110775,-0.0660921 0.143466,-0.0660921 0.08441,0 0.311151,-0.09789 0.391757,-0.16912543 0.07224,-0.0638419 0.511584,-0.24011339 0.598463,-0.24011339 0.02826,0 0.08528,-0.0237481 0.126716,-0.0527741 0.137291,-0.09616158 0.661132,-0.14352007 1.525634,-0.1379271367 0.792642,0.005129127 0.827085,0.008206607 1.091305,0.0975625367 0.150053,0.050747 0.291903,0.09246343 0.315215,0.09270283 0.09396,9.6895e-4 0.976611,0.42511458 1.100071,0.52862744 0.02811,0.02359 0.159498,0.0947176 0.291932,0.15806233 0.235834,0.11281152 0.25372,0.12719829 0.25372,0.20412699 0,0.023291 0.03271,0.029587 0.08526,0.016402 0.05003,-0.012556 0.08526,-0.00673 0.08526,0.014086 0,0.019516 0.04219,0.054229 0.09378,0.077137 0.05158,0.022909 0.123537,0.06862 0.159895,0.1015785 0.03637,0.032959 0.08624,0.059926 0.110835,0.059926 0.02459,0 0.04471,0.012883 0.04471,0.028629 0,0.037801 0.156041,0.1077839 0.240323,0.1077839 0.03664,0 0.0666,0.015347 0.0666,0.034103 0,0.050098 0.102113,0.041678 0.103394,-0.00853 4.52e-4,-0.025512 0.01972,-0.01804 0.04753,0.018611 0.03352,0.044207 0.07116,0.055035 0.135327,0.038932 0.05776,-0.014496 0.08889,-0.00837 0.08889,0.017504 0,0.021897 0.01498,0.030556 0.0333,0.019242 0.0461,-0.028494 0.444224,0.057046 0.423279,0.090944 -0.0093,0.015101 0.01841,0.027008 0.06163,0.02646 0.09589,-0.00121 0.512136,0.096881 0.42817,0.100902 -0.03285,0.00157 -0.05968,0.016565 -0.05968,0.033318 0,0.03259 0.410853,0.1157062 0.437957,0.0886 0.0089,-0.00889 0.03294,-0.00257 0.0534,0.014024 0.06789,0.055028 0.736829,0.2457834 0.776319,0.2213777 0.02148,-0.013281 0.02951,-0.00894 0.01796,0.00974 -0.01146,0.018537 0.130919,0.1054296 0.316393,0.1930939 0.185473,0.087664 0.472547,0.2615323 0.637942,0.3863739 0.1654,0.1248417 0.319902,0.2270363 0.343352,0.2270984 0.02346,6.81e-5 0.03547,0.00725 0.02675,0.015975 -0.0087,0.00872 0.03686,0.077444 0.101278,0.1527108 0.06442,0.075267 0.110018,0.148369 0.101315,0.162449 -0.0087,0.014079 0.0071,0.034399 0.03515,0.045154 0.02802,0.010755 0.0512,8.546e-4 0.05148,-0.022004 4.51e-4,-0.032265 0.0064,-0.032371 0.02662,-4.693e-4 0.01435,0.022595 0.02243,0.1068802 0.01796,0.1872996 -0.0057,0.1024476 0.0013,0.1309839 0.024,0.09533 0.02653,-0.041988 0.03272,-0.038959 0.03537,0.017319 0.0018,0.037513 0.01096,0.049024 0.0204,0.025578 0.0094,-0.023446 0.02802,-0.042629 0.04119,-0.042629 0.03781,0 0.03799,0.1327189 0,0.1560674 -0.02003,0.012395 -0.01119,0.037667 0.0217,0.061689 0.03979,0.029097 0.04904,0.067036 0.03244,0.1331389 -0.01277,0.050846 -0.03781,0.092447 -0.05563,0.092447 -0.01783,0 -0.02058,-0.019183 -0.0061,-0.042629 0.01444,-0.023446 -0.01394,-0.016324 -0.06312,0.015829 -0.08648,0.056549 -0.219373,0.09752 -0.342779,0.1056776 -0.0328,0.00217 -0.05968,0.015832 -0.05968,0.030358 0,0.014528 -0.03452,0.026195 -0.07673,0.025926 -0.04219,-2.688e-4 -0.12277,0.00591 -0.17904,0.013737 -0.971882,0.1351175 -1.779858,0.2316536 -2.0803,0.2485518 -0.206324,0.011606 -0.393648,0.035672 -0.416267,0.053482 -0.02261,0.017814 -0.05578,0.023341 -0.07366,0.012286 -0.05845,-0.036117 -0.137867,0.016695 -0.115393,0.076729 0.01854,0.049502 0.01385,0.050803 -0.03628,0.010053 -0.03979,-0.032383 -0.05754,-0.034549 -0.05754,-0.00703 0,0.021875 -0.01918,0.037283 -0.04264,0.034238 -0.113695,-0.014764 -0.168405,0.00487 -0.149657,0.0537 0.02179,0.056803 -0.03027,0.070789 -0.06349,0.017051 -0.01159,-0.018757 -0.0547,-0.032889 -0.0958,-0.031409 -0.04111,0.00149 -0.0564,0.010143 -0.03402,0.019253 0.02238,0.00911 0.03199,0.039256 0.02134,0.066986 -0.01674,0.043659 -0.02757,0.043 -0.0805,-0.00493 -0.04614,-0.041755 -0.07725,-0.046733 -0.126687,-0.020273 -0.03605,0.019289 -0.100448,0.02594 -0.143132,0.014777 -0.06857,-0.017931 -0.07496,-0.010784 -0.05491,0.061432 0.02026,0.072941 0.01773,0.075587 -0.02355,0.024614 -0.043,-0.053101 -0.05392,-0.052267 -0.155229,0.011876 -0.05993,0.037942 -0.108954,0.096734 -0.108954,0.1306499 0,0.044877 -0.01859,0.056808 -0.0682,0.04383 -0.0459,-0.012002 -0.06821,-0.00104 -0.06821,0.033502 0,0.031463 -0.04526,0.059826 -0.11689,0.073265 -0.0945,0.017728 -0.121158,0.041367 -0.139184,0.1234405 -0.02175,0.099065 -0.131379,0.1912377 -0.208964,0.1757021 -0.0213,-0.00429 -0.04769,0.015535 -0.05861,0.044002 -0.01092,0.028466 -0.0342,0.051758 -0.05175,0.051758 -0.03502,0 -0.139325,0.089285 -0.496709,0.4251098 -0.130107,0.1222664 -0.264395,0.2311337 -0.298403,0.241927 -0.03401,0.010793 -0.0623,0.045447 -0.06289,0.077007 -6.73e-4,0.031562 -0.0658,0.1065697 -0.144939,0.1666874 -0.270923,0.2058155 -0.531097,0.4853767 -0.510157,0.5481845 0.0076,0.022891 -0.0026,0.041625 -0.02258,0.041625 -0.02005,0 -0.05384,0.069059 -0.0751,0.1534642 -0.02126,0.084405 -0.05168,0.153465 -0.06763,0.153465 -0.01593,0 -0.02014,0.023019 -0.0093,0.051153 0.0108,0.028133 0.0056,0.051153 -0.01149,0.051153 -0.01712,0 -0.03115,0.034533 -0.03119,0.076733 0,0.1328989 -0.05393,0.4006339 -0.07758,0.3860182 -0.02005,-0.012388 -0.02725,0.1344432 -0.04256,0.8672752 -0.002,0.1031621 -0.01694,0.1959073 -0.03288,0.2061001 -0.03087,0.019749 -0.0581,0.1355871 -0.06226,0.2648322 -0.0013,0.043314 -0.0177,0.069369 -0.03625,0.057909 -0.01933,-0.011951 -0.02505,0.00175 -0.0134,0.03209 0.01118,0.029109 0.0038,0.052929 -0.01638,0.052929 -0.02017,0 -0.02725,0.024567 -0.01573,0.054598 0.01151,0.030024 0.004,0.065088 -0.01676,0.077907 -0.02074,0.012818 -0.04479,0.099111 -0.05345,0.1917602 -0.0087,0.092648 -0.03066,0.1734248 -0.0489,0.1795037 -0.01824,0.00606 -0.02536,0.040824 -0.01584,0.077209 0.01077,0.041208 -0.0034,0.074092 -0.03753,0.087197 -0.03015,0.01157 -0.04634,0.03478 -0.03596,0.05157 0.01038,0.0168 0.005,0.03053 -0.01205,0.03053 -0.017,0 -0.03228,0.04742 -0.03393,0.105393 -0.0051,0.179718 -0.117438,0.644115 -0.15081,0.623489 -0.01741,-0.01076 -0.02813,0.0011 -0.02381,0.02649 0.0043,0.02533 -0.0024,0.08442 -0.01478,0.131309 -0.01244,0.04689 -0.02923,0.154317 -0.03733,0.238722 -0.03648,0.380211 -0.166541,0.813049 -0.262056,0.87208 -0.01658,0.01025 -0.03014,0.06376 -0.03014,0.118927 0,0.05516 -0.01494,0.100297 -0.03323,0.100297 -0.04322,0 -0.145532,0.197792 -0.122006,0.23586 0.01,0.01608 -0.0048,0.04821 -0.0327,0.07138 -0.02793,0.02318 -0.05078,0.06201 -0.05078,0.08628 0,0.02428 -0.01521,0.04926 -0.03381,0.05551 -0.01859,0.0063 -0.03965,0.06171 -0.0468,0.123232 -0.0071,0.06153 -0.03801,0.139504 -0.06858,0.173284 -0.03057,0.03378 -0.04532,0.07168 -0.03278,0.08423 0.01255,0.01254 0.0024,0.02281 -0.02266,0.02281 -0.02501,0 -0.03585,0.0096 -0.0241,0.02137 0.0306,0.0306 -0.07344,0.220798 -0.170284,0.311282 -0.04526,0.04228 -0.07383,0.09055 -0.06351,0.107262 0.01033,0.01671 -0.0042,0.03918 -0.03219,0.04993 -0.02803,0.01075 -0.05096,0.05164 -0.05096,0.09084 0,0.03921 -0.01459,0.06228 -0.03239,0.05127 -0.03561,-0.022 -0.113081,0.09788 -0.08282,0.128147 0.01035,0.01034 -0.02074,0.04474 -0.06911,0.07642 -0.04835,0.03169 -0.08004,0.07036 -0.0704,0.08595 0.01898,0.03069 -0.114371,0.168819 -0.162961,0.168819 -0.01633,0 -0.02025,0.01524 -0.0088,0.03387 0.01151,0.01863 -0.03329,0.0897 -0.09956,0.157928 -0.06627,0.06823 -0.110938,0.139503 -0.09927,0.158378 0.01168,0.01887 -0.01552,0.06424 -0.06042,0.100806 -0.0449,0.03656 -0.05862,0.05631 -0.03048,0.04387 0.02814,-0.01243 0.01662,0.0079 -0.02558,0.04514 -0.0422,0.03726 -0.07673,0.08078 -0.07673,0.09671 0,0.01593 -0.03129,0.0485 -0.06953,0.07238 -0.03825,0.02388 -0.06135,0.05666 -0.05135,0.07284 0.01,0.01618 -0.0057,0.03859 -0.03494,0.0498 -0.02921,0.01121 -0.04333,0.03622 -0.03137,0.05557 0.01196,0.01935 0.0028,0.03097 -0.02039,0.02582 -0.02317,-0.0052 -0.05348,0.02899 -0.06734,0.07589 -0.01387,0.04689 -0.02673,0.07265 -0.0286,0.05724 -0.0047,-0.0388 -0.105707,0.06596 -0.105707,0.109636 0,0.01944 -0.03113,0.05199 -0.06916,0.07235 -0.03805,0.02035 -0.06111,0.05004 -0.05127,0.06597 0.0099,0.01593 -0.03193,0.07271 -0.09283,0.126176 -0.0609,0.05347 -0.118399,0.112566 -0.127777,0.131323 -0.0094,0.01876 -0.0255,0.03129 -0.03584,0.02784 -0.01033,-0.0034 -0.03831,0.02502 -0.0622,0.06325 -0.03566,0.0571 -0.03535,0.06485 0.0018,0.0434 0.05754,-0.03329 -0.100394,0.1488 -0.202424,0.233387 -0.04238,0.03514 -0.06834,0.078 -0.05767,0.09525 0.01067,0.01725 -0.0028,0.03137 -0.02973,0.03137 -0.05121,0 -0.198718,0.175689 -0.238939,0.28459 -0.01279,0.0346 -0.05386,0.07092 -0.09128,0.08071 -0.03742,0.0098 -0.06803,0.03258 -0.06803,0.05064 0,0.01807 -0.09548,0.127541 -0.212171,0.243271 -0.116693,0.115729 -0.208771,0.221926 -0.204617,0.235994 0.0042,0.01407 -0.0136,0.02558 -0.03946,0.02558 -0.0419,0 -0.36223,0.342153 -0.36223,0.386912 0,0.01812 -0.168333,0.207786 -0.434598,0.489667 -0.0797,0.08438 -0.134927,0.169585 -0.122716,0.189342 0.01221,0.01976 0.0063,0.02606 -0.01324,0.01401 -0.01949,-0.01205 -0.148957,0.09803 -0.287676,0.244627 -0.138717,0.146595 -0.276317,0.280693 -0.305775,0.297993 -0.113761,0.06682 -0.575254,0.510672 -0.575254,0.553274 0,0.0247 -0.01457,0.0359 -0.03239,0.0249 -0.01781,-0.01102 -0.04944,0.01184 -0.07028,0.05078 -0.02084,0.03893 -0.07624,0.08538 -0.123127,0.103201 -0.04688,0.01782 -0.07681,0.04604 -0.06651,0.06271 0.01031,0.01667 0,0.04609 -0.02352,0.06537 -0.04179,0.03468 -0.06108,0.04086 -0.127513,0.04086 -0.01875,0 -0.03027,0.01782 -0.02558,0.03961 0.0047,0.02178 -0.02216,0.04864 -0.05968,0.05968 -0.09596,0.02823 -0.460392,0.278998 -0.460392,0.316789 0,0.01721 -0.01255,0.02353 -0.02789,0.01405 -0.01535,-0.0095 -0.06906,0.02093 -0.119362,0.06757 -0.05031,0.04665 -0.09193,0.07268 -0.09251,0.05785 -6.72e-4,-0.01482 -0.01667,-6.8e-5 -0.0358,0.03272 -0.01911,0.03282 -0.06469,0.05968 -0.101275,0.05968 -0.03659,0 -0.09465,0.02686 -0.129032,0.05968 -0.03439,0.03282 -0.08427,0.06436 -0.110835,0.07008 -0.02657,0.0057 -0.06461,0.03156 -0.08453,0.05742 -0.01992,0.02586 -0.07746,0.05738 -0.127885,0.07003 -0.05042,0.01265 -0.09168,0.03925 -0.09168,0.0591 0,0.01985 -0.0097,0.02636 -0.02162,0.01447 -0.04327,-0.04327 -0.532043,0.244878 -0.72163,0.425432 -0.107024,0.101924 -0.294339,0.269485 -0.416257,0.372357 -0.351072,0.296226 -0.477445,0.419441 -0.477445,0.465526 0,0.02358 -0.01248,0.03903 -0.02774,0.03434 -0.03696,-0.01136 -0.401163,0.357536 -0.389174,0.394188 0.0052,0.01575 -0.0044,0.02012 -0.0213,0.0097 -0.01687,-0.01042 -0.120842,0.08723 -0.231043,0.217028 -0.110194,0.129794 -0.21571,0.237324 -0.234468,0.238955 -0.01875,0.0015 -0.139775,0.102333 -0.268924,0.223779 -0.129156,0.121446 -0.242179,0.220809 -0.251161,0.220809 -0.02537,0 -0.405851,0.275683 -0.572008,0.414454 -0.08205,0.06852 -0.314931,0.239897 -0.51753,0.380842 -0.387603,0.269655 -0.569368,0.44102 -0.766137,0.7223 -0.153643,0.219636 -0.36955,0.618807 -0.36955,0.683236 0,0.02749 -0.01176,0.04998 -0.02616,0.04998 -0.03167,0 -0.156417,0.321733 -0.224782,0.579755 -0.02733,0.103161 -0.05974,0.38707 -0.07201,0.63091 -0.01228,0.243838 -0.0367,0.457921 -0.0543,0.47574 -0.01759,0.01781 -0.03199,0.148686 -0.03199,0.290814 0,0.176685 -0.01649,0.281962 -0.05214,0.332861 -0.06265,0.08945 -0.03628,0.229636 0.05526,0.293757 0.03494,0.02447 0.273134,0.242804 0.529317,0.485172 0.256175,0.242373 0.479046,0.445791 0.495268,0.452042 0.01622,0.0063 0.02949,0.03311 0.02949,0.05968 0,0.02657 0.01297,0.04831 0.02881,0.04831 0.01584,0 0.103231,0.07579 0.194197,0.168432 0.09096,0.09264 0.17544,0.16222 0.187725,0.154627 0.01228,-0.0076 0.05524,0.02404 0.09546,0.07029 0.04022,0.04625 0.08856,0.0841 0.107445,0.0841 0.01889,0 0.03433,0.02302 0.03433,0.05115 0,0.02814 0.02393,0.05115 0.05316,0.05115 0.02924,0 0.04403,0.01481 0.03285,0.03288 -0.01118,0.01808 0.0378,0.07056 0.108823,0.116611 0.146636,0.09507 0.410528,0.327953 0.371622,0.327953 -0.01411,0 -0.0027,0.02302 0.02548,0.05115 0.02813,0.02814 0.07527,0.05115 0.104743,0.05115 0.02948,0 0.04976,0.01918 0.04506,0.04263 -0.0047,0.02344 0.01067,0.03879 0.0341,0.0341 0.02345,-0.0047 0.03879,0.01066 0.0341,0.0341 -0.0047,0.02344 0.01067,0.03879 0.03411,0.0341 0.02345,-0.0047 0.04263,0.0068 0.04263,0.02558 0,0.01875 0.01151,0.03167 0.02558,0.02869 0.01407,-0.003 0.05372,0.0068 0.08812,0.0218 0.04921,0.02142 0.05285,0.03336 0.01705,0.05605 -0.03107,0.0197 -0.01515,0.029 0.05031,0.02936 0.05269,4.48e-4 0.08814,0.01291 0.07878,0.02806 -0.0094,0.01515 0.01658,0.05262 0.05767,0.08326 0.211981,0.158129 0.321478,0.232868 0.398667,0.272128 0.115603,0.05878 0.204537,0.136366 0.205017,0.178823 6.73e-4,0.01926 0.06544,0.06496 0.144938,0.101519 0.141447,0.06505 0.340091,0.238163 0.308982,0.269278 -0.02718,0.02718 0.06833,0.153699 0.127777,0.169241 0.06948,0.01817 0.188265,0.276674 0.320871,0.69827 0.08404,0.267179 0.118475,0.330863 0.220688,0.408197 0.06662,0.0504 0.147197,0.124217 0.17907,0.164057 0.09286,0.116054 0.407185,0.314295 0.561941,0.354407 0.212211,0.05501 0.317944,0.197997 0.317944,0.42998 0,0.177064 0.0046,0.186422 0.114315,0.232258 0.06286,0.02626 0.181802,0.05857 0.2643,0.07179 0.08249,0.01322 0.264143,0.05332 0.403658,0.08911 0.139516,0.0358 0.327111,0.06508 0.416878,0.06508 0.191088,0 0.623427,0.160645 0.804959,0.299105 0.06647,0.0507 0.148841,0.153773 0.183033,0.229045 0.08345,0.183693 0.08156,0.232392 -0.0079,0.203999 -0.0628,-0.01994 -0.06843,-0.01289 -0.04589,0.05738 0.06069,0.189278 0.08178,0.333911 0.08254,0.566071 l 8.75e-4,0.247251 -0.10231,0 c -0.141004,0 -0.224605,-0.0965 -0.270173,-0.311862 -0.02207,-0.104268 -0.09225,-0.260923 -0.163567,-0.365089 -0.119313,-0.174261 -0.130354,-0.181565 -0.24619,-0.162767 -0.149842,0.02432 -0.206755,0.09784 -0.206755,0.267096 l 0,0.130514 -0.144938,-0.0091 c -0.128781,-0.0081 -0.143506,-0.0015 -0.132061,0.05907 0.02757,0.146015 0.01951,0.403542 -0.01289,0.41185 -0.01875,0.0048 -0.05329,0.0011 -0.07673,-0.0083 z m -4.19369,-3.988246 c 0.03255,-0.03255 -0.11857,-0.219098 -0.220265,-0.271924 -0.05026,-0.0261 -0.100619,-0.07448 -0.111934,-0.107508 -0.01132,-0.03303 -0.08846,-0.113161 -0.171444,-0.178065 -0.08298,-0.06491 -0.144604,-0.124279 -0.136937,-0.131946 0.01826,-0.01826 -0.252842,-0.244541 -0.292968,-0.244541 -0.01698,0 -0.03088,-0.02302 -0.03088,-0.05116 0,-0.02813 -0.01918,-0.04732 -0.04263,-0.04263 -0.02345,0.0047 -0.03879,-0.01067 -0.03411,-0.0341 0.0047,-0.02344 -0.0145,-0.04263 -0.04263,-0.04263 -0.02814,0 -0.05115,-0.02165 -0.05115,-0.04811 0,-0.02646 -0.09552,-0.13005 -0.212251,-0.230198 -0.116736,-0.100146 -0.253339,-0.224289 -0.30356,-0.27587 -0.05022,-0.05158 -0.09883,-0.09379 -0.108026,-0.09379 -0.0092,0 -0.09926,-0.08057 -0.200152,-0.17904 -0.186476,-0.182007 -0.359788,-0.332507 -0.382912,-0.332507 -0.007,0 -0.08682,-0.06799 -0.177335,-0.151102 -0.09051,-0.08311 -0.17673,-0.143589 -0.191592,-0.1344 -0.01486,0.0092 -0.02702,0.0024 -0.02702,-0.01528 0,-0.04201 -0.511787,-0.42675 -0.567681,-0.42675 -0.02375,0 -0.03553,-0.01237 -0.02619,-0.02747 0.02194,-0.03549 -0.281469,-0.225376 -0.403641,-0.252609 -0.05158,-0.01149 -0.09378,-0.03557 -0.09378,-0.05349 0,-0.019 -0.02956,-0.01678 -0.07091,0.0054 -0.06793,0.03636 -0.064,0.04498 0.09378,0.205769 0.09058,0.0923 0.183871,0.167842 0.207322,0.167869 0.02344,2.7e-5 0.04263,0.01302 0.04263,0.02885 0,0.01584 0.117144,0.14245 0.26033,0.281352 0.143178,0.138902 0.292804,0.289504 0.332507,0.334665 0.125042,0.142265 0.487691,0.495555 0.560957,0.546484 0.03864,0.02686 0.06096,0.06523 0.04957,0.08526 -0.01138,0.02003 -0.0087,0.02557 0.0061,0.0123 0.0147,-0.01326 0.07471,0.01169 0.133356,0.05543 0.05864,0.04375 0.165259,0.106726 0.236917,0.139967 0.0936,0.04341 0.117608,0.06848 0.08526,0.08899 -0.03381,0.02144 -0.02966,0.02869 0.01667,0.02908 0.03393,4.48e-4 0.05331,0.01409 0.04306,0.03066 -0.01667,0.02698 0.14951,0.115529 0.236282,0.125904 0.01875,0.0023 0.05419,0.0064 0.07875,0.0093 0.02455,0.0029 0.03515,0.02054 0.02356,0.0393 -0.01161,0.01875 0.0036,0.0341 0.0339,0.0341 0.03023,0 0.111436,0.03837 0.180445,0.08526 0.06901,0.04689 0.10272,0.08549 0.07492,0.08578 -0.04424,6.72e-4 -0.04417,0.0046 6.73e-4,0.03333 0.02814,0.01803 0.0764,0.02496 0.107242,0.01537 0.05882,-0.01828 0.141637,0.04693 0.20138,0.15856 0.01945,0.03632 0.09688,0.104889 0.17209,0.152367 0.10982,0.06933 0.132322,0.100292 0.114247,0.157236 -0.01432,0.04508 -0.0096,0.06294 0.01288,0.04903 0.01947,-0.01203 0.04436,-0.0074 0.05532,0.01035 0.01095,0.01772 -0.01483,0.0389 -0.05733,0.04706 -0.06684,0.01286 -0.06461,0.01548 0.01656,0.01949 0.07775,0.0038 0.09378,0.02023 0.09378,0.09574 0,0.149781 0.08859,0.215831 0.289483,0.215831 0.09713,0 0.186006,-0.0094 0.197504,-0.02091 z m -3.916702,-3.351519 c 0.01031,-0.01667 -0.03866,-0.07277 -0.108823,-0.124668 -0.162544,-0.12024 -0.245198,-0.220673 -0.246159,-0.299097 -0.0011,-0.08664 -0.139045,-0.398508 -0.176318,-0.398508 -0.01692,0 -0.04534,-0.03837 -0.06316,-0.08526 -0.01784,-0.04689 -0.04766,-0.08526 -0.06629,-0.08526 -0.01864,0 -0.02504,-0.02302 -0.01425,-0.05115 0.0108,-0.02813 0.0057,-0.05115 -0.01129,-0.05115 -0.04968,0 -0.120395,0.399496 -0.08306,0.469258 0.01779,0.03321 0.143661,0.159902 0.279747,0.281536 0.13608,0.121632 0.279425,0.254059 0.318537,0.294281 0.07702,0.0792 0.141411,0.09803 0.17108,0.05003 z m -0.771004,-2.50443 c -0.0043,-0.02202 0.0183,-0.08917 0.05025,-0.149197 0.03194,-0.06003 0.05808,-0.149179 0.05808,-0.198109 0,-0.05436 0.01416,-0.08021 0.0364,-0.06647 0.03025,0.01869 0.09496,-0.116002 0.0709,-0.147575 -0.004,-0.0054 0.01613,-0.03331 0.04495,-0.06211 0.02881,-0.02881 0.05237,-0.08874 0.05237,-0.133183 0,-0.04445 0.01414,-0.08955 0.03142,-0.100225 0.01728,-0.01069 0.05839,-0.09215 0.09136,-0.181054 0.03297,-0.08891 0.08744,-0.201739 0.12104,-0.250748 0.0336,-0.04901 0.05132,-0.09889 0.03937,-0.110837 -0.01194,-0.01194 -0.0038,-0.02173 0.01806,-0.02173 0.02189,0 0.03955,-0.02686 0.03927,-0.05968 -6.73e-4,-0.05155 -0.0055,-0.05271 -0.03706,-0.0085 -0.03005,0.04207 -0.03367,0.03904 -0.02039,-0.01705 0.0089,-0.03751 0.02822,-0.09773 0.04298,-0.13381 0.02151,-0.05253 0.01548,-0.06124 -0.03023,-0.0437 -0.07092,0.02721 -0.07416,-0.02222 -0.0059,-0.09045 0.02814,-0.02813 0.05065,-0.07911 0.05002,-0.113272 -8.75e-4,-0.05383 -0.01019,-0.05124 -0.06906,0.01945 -0.03736,0.04486 -0.07781,0.07168 -0.08988,0.0596 -0.01208,-0.01207 -0.05363,0.0049 -0.09234,0.0378 -0.06688,0.05679 -0.06809,0.05679 -0.02417,0 0.02827,-0.0365 0.03201,-0.05968 0.0096,-0.05968 -0.02012,0 -0.04886,0.01918 -0.06386,0.04263 -0.01501,0.02344 -0.057,0.06565 -0.09334,0.09379 -0.06006,0.0465 -0.06403,0.04573 -0.0437,-0.0085 0.0123,-0.03282 0.0081,-0.05969 -0.0093,-0.05969 -0.01746,0 -0.04841,0.06522 -0.06882,0.144939 -0.02042,0.07972 -0.04562,0.167959 -0.05602,0.196096 -0.04849,0.131129 -0.111834,0.499144 -0.09503,0.552109 0.01033,0.03255 0.0018,0.09092 -0.01898,0.129723 -0.04485,0.08379 -0.0079,0.827525 0.03967,0.798134 0.01662,-0.01026 0.02669,-0.0367 0.02239,-0.05873 z m 0.415265,-1.487433 c 0,-0.01986 0.01535,-0.03611 0.0341,-0.03611 0.01875,0 0.03411,0.0068 0.03411,0.01503 0,0.0083 -0.01535,0.02453 -0.03411,0.03611 -0.01875,0.01158 -0.0341,0.0048 -0.0341,-0.01503 z m 0.06821,-0.102309 c 0,-0.01985 0.01535,-0.03611 0.0341,-0.03611 0.01875,0 0.0341,0.0068 0.0341,0.01503 0,0.0083 -0.01535,0.02452 -0.0341,0.03611 -0.01875,0.01158 -0.0341,0.0048 -0.0341,-0.01503 z M 50.350048,2.911456 c -0.04024,-0.04024 -0.0851,-0.060404 -0.09969,-0.044811 -0.01458,0.015594 -0.0073,0.035235 0.01633,0.043647 0.02355,0.00841 0.03614,0.026146 0.02793,0.039407 -0.0082,0.013261 0.01737,0.026543 0.05685,0.029515 l 0.07175,0.0054 -0.07316,-0.073163 z M 28.551232,31.653751 c 0,-0.0083 0.01534,-0.02453 0.0341,-0.03611 0.01875,-0.01158 0.0341,-0.0048 0.0341,0.01503 0,0.01987 -0.01534,0.03611 -0.0341,0.03611 -0.01875,0 -0.0341,-0.0067 -0.0341,-0.01503 z M 47.469354,1.6014697 c 0.0231,-0.00934 0.06912,-0.00991 0.102307,-0.00127 0.03317,0.00865 0.01431,0.016289 -0.04196,0.016985 -0.05627,6.93e-4 -0.08342,-0.00638 -0.06032,-0.015721 z"
+     style="fill:#000000" />
+</svg>
diff --git a/Crow/Images/meter.svg b/Crow/Images/meter.svg
new file mode 100755 (executable)
index 0000000..cc3d4e9
--- /dev/null
@@ -0,0 +1,584 @@
+<?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"
+   width="358.84189"
+   height="213.71251"
+   id="svg5482"
+   version="1.1"
+   inkscape:version="0.91 r13725"
+   sodipodi:docname="meter.svg">
+  <defs
+     id="defs5484">
+    <inkscape:path-effect
+       effect="bend_path"
+       id="path-effect5049"
+       is_visible="true"
+       bendpath="m 2212.9341,609.06371 c 56.0922,-68.23166 186.5294,-57.7916 231.5248,0"
+       prop_scale="1"
+       scale_y_rel="false"
+       vertical="false"
+       bendpath-nodetypes="cc" />
+    <linearGradient
+       id="linearGradient5562">
+      <stop
+         style="stop-color:#090909;stop-opacity:1;"
+         offset="0"
+         id="stop5564" />
+      <stop
+         style="stop-color:#444444;stop-opacity:1"
+         offset="1"
+         id="stop5566" />
+    </linearGradient>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="1"
+     inkscape:cx="161.38816"
+     inkscape:cy="62.457854"
+     inkscape:document-units="px"
+     inkscape:current-layer="background"
+     showgrid="false"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0"
+     inkscape:window-width="1214"
+     inkscape:window-height="816"
+     inkscape:window-x="64"
+     inkscape:window-y="33"
+     inkscape:window-maximized="0" />
+  <metadata
+     id="metadata5487">
+    <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>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="background"
+     transform="translate(0.49098801,0.49175768)">
+    <path
+       style="display:inline;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.79999989;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="m 3.580112,-0.09175773 350.699898,0 c 2.0337,0 3.6709,1.98745993 3.6709,4.45612993 l 0,203.8363478 c 0,2.46871 -1.6372,4.45615 -3.6709,4.45615 -260.867099,0.36873 -182.3838,0 -350.699898,0 -2.0338,0 -3.67110006,-1.98744 -3.67110006,-4.45615 l 0,-203.8363478 c 0,-2.46867 1.63730006,-4.45612993 3.67110006,-4.45612993 z"
+       id="rect5471-8-1-9-8"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ssssccsss" />
+    <path
+       style="display:inline;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.79999995;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="m 16.535111,11.100601 324.789899,0 c 1.8834,0 3.3997,1.7785 3.3997,3.98763 l 0,182.405869 c 0,2.20916 -1.5163,3.98765 -3.3997,3.98765 -241.593999,0.32996 -168.9091,0 -324.789899,0 -1.8835,0 -3.3998,-1.77849 -3.3998,-3.98765 l 0,-182.405869 c 0,-2.20913 1.5163,-3.98763 3.3998,-3.98763 z"
+       id="rect5471-8-1-9"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ssssccsss" />
+    <path
+       style="display:inline;fill:none;fill-opacity:1;stroke:none;stroke-width:10;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;stroke-dasharray:none"
+       d="m 20.798511,15.453201 316.263299,0 c 1.8339,0 3.3104,1.69724 3.3104,3.80544 l 0,174.071799 c 0,2.10822 -1.4765,3.80545 -3.3104,3.80545 -235.2515,0.31489 -164.4748,0 -316.263299,0 -1.834,0 -3.3105,-1.69723 -3.3105,-3.80545 l 0,-174.071799 c 0,-2.1082 1.4765,-3.80544 3.3105,-3.80544 z"
+       id="rect5471-8-1"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ssssccsss" />
+    <g
+       id="g4984"
+       inkscape:path-effect="#path-effect5049"
+       transform="matrix(1.0315417,0,0,1.1956775,-2225.4304,-607.66273)">
+      <g
+         id="g4913">
+        <path
+           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 2328.6578,555.28595 -0.095,12.8839"
+           id="path4662"
+           inkscape:connector-curvature="0"
+           inkscape:original-d="m 2332.9084,545.46229 0,12.87806" />
+        <path
+           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 2333.776,561.83359 -0.2149,6.43605"
+           id="path4662-9"
+           inkscape:connector-curvature="0"
+           inkscape:original-d="m 2338.0163,551.90135 0,6.439" />
+        <path
+           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 2338.938,562.0725 -0.381,6.4311"
+           id="path4662-9-8"
+           inkscape:connector-curvature="0"
+           inkscape:original-d="m 2343.1241,551.90135 0,6.439" />
+        <path
+           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 2344.0935,562.44544 -0.5491,6.42037"
+           id="path4662-9-4"
+           inkscape:connector-curvature="0"
+           inkscape:original-d="m 2348.2318,551.90135 0,6.439" />
+        <path
+           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 2349.2383,562.95413 -0.7193,6.40384"
+           id="path4662-9-0"
+           inkscape:connector-curvature="0"
+           inkscape:original-d="m 2353.3397,551.90135 0,6.439" />
+        <path
+           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 2355.2592,557.21866 -1.7833,12.76309"
+           id="path4662-7"
+           inkscape:connector-curvature="0"
+           inkscape:original-d="m 2358.4476,545.46229 0,12.87806" />
+        <path
+           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 2355.2592,557.21866 -1.7833,12.76309"
+           id="path4662-6"
+           inkscape:connector-curvature="0"
+           inkscape:original-d="m 2358.4476,545.46229 0,12.87806" />
+        <path
+           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 2359.4766,564.38544 -1.0661,6.3534"
+           id="path4662-9-3"
+           inkscape:connector-curvature="0"
+           inkscape:original-d="m 2363.5555,551.90135 0,6.439" />
+        <path
+           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 2364.5606,565.31142 -1.2426,6.31948"
+           id="path4662-9-8-6"
+           inkscape:connector-curvature="0"
+           inkscape:original-d="m 2368.6633,551.90135 0,6.439" />
+        <path
+           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 2369.615,566.37983 -1.4212,6.27979"
+           id="path4662-9-4-1"
+           inkscape:connector-curvature="0"
+           inkscape:original-d="m 2373.771,551.90135 0,6.439" />
+        <path
+           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 2374.6354,567.59244 -1.6019,6.23429"
+           id="path4662-9-0-5"
+           inkscape:connector-curvature="0"
+           inkscape:original-d="m 2378.8789,551.90135 0,6.439" />
+        <path
+           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 2381.4018,562.76784 -3.5696,12.36605"
+           id="path4662-7-4"
+           inkscape:connector-curvature="0"
+           inkscape:original-d="m 2383.9868,545.46229 0,12.87806" />
+        <path
+           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 2381.4018,562.76784 -3.5696,12.36605"
+           id="path4662-2"
+           inkscape:connector-curvature="0"
+           inkscape:original-d="m 2383.9868,545.46229 0,12.87806" />
+        <path
+           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 2384.5551,570.45687 -1.9697,6.12592"
+           id="path4662-9-09"
+           inkscape:connector-curvature="0"
+           inkscape:original-d="m 2389.0947,551.90135 0,6.439" />
+        <path
+           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 2389.445,572.11202 -2.1567,6.06304"
+           id="path4662-9-8-7"
+           inkscape:connector-curvature="0"
+           inkscape:original-d="m 2394.2025,551.90135 0,6.439" />
+        <path
+           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 2394.2821,573.91802 -2.3459,5.99437"
+           id="path4662-9-4-3"
+           inkscape:connector-curvature="0"
+           inkscape:original-d="m 2399.3102,551.90135 0,6.439" />
+        <path
+           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 2399.0617,575.87705 -2.5397,5.91841"
+           id="path4662-9-0-7"
+           inkscape:connector-curvature="0"
+           inkscape:original-d="m 2404.4181,551.90135 0,6.439" />
+        <path
+           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 2406.5173,572.1671 -5.4849,11.65685"
+           id="path4662-7-2"
+           inkscape:connector-curvature="0"
+           inkscape:original-d="m 2409.526,545.46229 0,12.87806" />
+        <path
+           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 2406.5173,572.1671 -5.4849,11.65685"
+           id="path4662-60"
+           inkscape:connector-curvature="0"
+           inkscape:original-d="m 2409.526,545.46229 0,12.87806" />
+        <path
+           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 2408.4101,580.27926 -2.9515,5.72413"
+           id="path4662-9-1"
+           inkscape:connector-curvature="0"
+           inkscape:original-d="m 2414.6339,551.90135 0,6.439" />
+        <path
+           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 2412.9559,582.73313 -3.1667,5.60561"
+           id="path4662-9-8-65"
+           inkscape:connector-curvature="0"
+           inkscape:original-d="m 2419.7417,551.90135 0,6.439" />
+        <path
+           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 2417.4008,585.36218 -3.3883,5.47283"
+           id="path4662-9-4-7"
+           inkscape:connector-curvature="0"
+           inkscape:original-d="m 2424.8494,551.90135 0,6.439" />
+        <path
+           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 2421.7336,588.17159 -3.6161,5.32576"
+           id="path4662-9-0-54"
+           inkscape:connector-curvature="0"
+           inkscape:original-d="m 2429.9573,551.90135 0,6.439" />
+        <path
+           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 2429.7946,586.00329 -7.704,10.32666"
+           id="path4662-7-1"
+           inkscape:connector-curvature="0"
+           inkscape:original-d="m 2435.0652,545.46229 0,12.87806" />
+        <path
+           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 2429.7946,586.00329 -7.704,10.32666"
+           id="path4662-20"
+           inkscape:connector-curvature="0"
+           inkscape:original-d="m 2435.0652,545.46229 0,12.87806" />
+        <path
+           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 2430.0118,594.35366 -4.0931,4.97586"
+           id="path4662-9-01"
+           inkscape:connector-curvature="0"
+           inkscape:original-d="m 2440.1731,551.90135 0,6.439" />
+        <path
+           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 2433.9196,597.73496 -4.3365,4.76139"
+           id="path4662-9-8-4"
+           inkscape:connector-curvature="0"
+           inkscape:original-d="m 2445.2809,551.90135 0,6.439" />
+        <path
+           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 2437.6444,601.31242 -4.5822,4.51988"
+           id="path4662-9-4-6"
+           inkscape:connector-curvature="0"
+           inkscape:original-d="m 2450.3886,551.90135 0,6.439" />
+        <path
+           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 2441.1648,605.0881 -4.8303,4.25131"
+           id="path4662-9-0-0"
+           inkscape:connector-curvature="0"
+           inkscape:original-d="m 2455.4965,551.90135 0,6.439" />
+        <path
+           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 2449.5396,605.10799 -10.1614,7.91144"
+           id="path4662-7-7"
+           inkscape:connector-curvature="0"
+           inkscape:original-d="m 2460.6044,545.46229 0,12.87806" />
+        <path
+           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 2301.9948,556.88956 1.664,12.77523"
+           id="path4662-1"
+           inkscape:connector-curvature="0"
+           inkscape:original-d="m 2307.3692,545.46229 0,12.87806" />
+        <path
+           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 2307.9612,562.68275 0.6504,6.41059"
+           id="path4662-9-7"
+           inkscape:connector-curvature="0"
+           inkscape:original-d="m 2312.4771,551.90135 0,6.439" />
+        <path
+           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 2313.1115,562.23287 0.4716,6.42754"
+           id="path4662-9-8-77"
+           inkscape:connector-curvature="0"
+           inkscape:original-d="m 2317.5849,551.90135 0,6.439" />
+        <path
+           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 2318.2729,561.9253 0.2957,6.4384"
+           id="path4662-9-4-73"
+           inkscape:connector-curvature="0"
+           inkscape:original-d="m 2322.6926,551.90135 0,6.439" />
+        <path
+           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 2323.4408,561.75774 0.1225,6.44319"
+           id="path4662-9-0-3"
+           inkscape:connector-curvature="0"
+           inkscape:original-d="m 2327.8005,551.90135 0,6.439" />
+        <path
+           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 2328.6578,555.28595 -0.095,12.8839"
+           id="path4662-7-5"
+           inkscape:connector-curvature="0"
+           inkscape:original-d="m 2332.9084,545.46229 0,12.87806" />
+        <path
+           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 2275.7834,562.31605 3.5651,12.36297"
+           id="path4662-99"
+           inkscape:connector-curvature="0"
+           inkscape:original-d="m 2281.83,545.46229 0,12.87806" />
+        <path
+           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 2282.5472,567.14615 1.5867,6.23483"
+           id="path4662-9-81"
+           inkscape:connector-curvature="0"
+           inkscape:original-d="m 2286.9379,551.90135 0,6.439" />
+        <path
+           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 2287.5686,565.9507 1.3939,6.28213"
+           id="path4662-9-8-8"
+           inkscape:connector-curvature="0"
+           inkscape:original-d="m 2292.0457,551.90135 0,6.439" />
+        <path
+           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 2292.6255,564.90893 1.2038,6.32335"
+           id="path4662-9-4-2"
+           inkscape:connector-curvature="0"
+           inkscape:original-d="m 2297.1534,551.90135 0,6.439" />
+        <path
+           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 2297.7133,564.01851 1.0164,6.3585"
+           id="path4662-9-0-6"
+           inkscape:connector-curvature="0"
+           inkscape:original-d="m 2302.2613,551.90135 0,6.439" />
+        <path
+           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 2301.9948,556.88956 1.664,12.77523"
+           id="path4662-7-6"
+           inkscape:connector-curvature="0"
+           inkscape:original-d="m 2307.3692,545.46229 0,12.87806" />
+        <path
+           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 2250.6482,571.8947 5.6313,11.5831"
+           id="path4662-0"
+           inkscape:connector-curvature="0"
+           inkscape:original-d="m 2256.2908,545.46229 0,12.87806" />
+        <path
+           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 2258.1514,575.51331 2.6016,5.89185"
+           id="path4662-9-38"
+           inkscape:connector-curvature="0"
+           inkscape:original-d="m 2261.3987,551.90135 0,6.439" />
+        <path
+           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 2262.9147,573.51105 2.3902,5.98047"
+           id="path4662-9-8-0"
+           inkscape:connector-curvature="0"
+           inkscape:original-d="m 2266.5065,551.90135 0,6.439" />
+        <path
+           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 2267.7442,571.67729 2.1826,6.05649"
+           id="path4662-9-4-12"
+           inkscape:connector-curvature="0"
+           inkscape:original-d="m 2271.6142,551.90135 0,6.439" />
+        <path
+           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 2272.63,570.00718 1.9812,6.12201"
+           id="path4662-9-0-50"
+           inkscape:connector-curvature="0"
+           inkscape:original-d="m 2276.7221,551.90135 0,6.439" />
+        <path
+           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 2275.7834,562.31605 3.5651,12.36297"
+           id="path4662-7-9"
+           inkscape:connector-curvature="0"
+           inkscape:original-d="m 2281.83,545.46229 0,12.87806" />
+        <path
+           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 2227.5729,586.07497 7.844,10.21712"
+           id="path4662-4"
+           inkscape:connector-curvature="0"
+           inkscape:original-d="m 2230.7516,545.46229 0,12.87806" />
+        <path
+           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 2235.66,588.12641 3.6982,5.27188"
+           id="path4662-9-78"
+           inkscape:connector-curvature="0"
+           inkscape:original-d="m 2235.8595,551.90135 0,6.439" />
+        <path
+           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 2239.9501,585.24991 3.4733,5.42021"
+           id="path4662-9-8-3"
+           inkscape:connector-curvature="0"
+           inkscape:original-d="m 2240.9673,551.90135 0,6.439" />
+        <path
+           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 2244.3537,582.55255 3.2515,5.5557"
+           id="path4662-9-4-5"
+           inkscape:connector-curvature="0"
+           inkscape:original-d="m 2246.075,551.90135 0,6.439" />
+        <path
+           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 2248.8615,580.032 3.0322,5.67947"
+           id="path4662-9-0-1"
+           inkscape:connector-curvature="0"
+           inkscape:original-d="m 2251.1829,551.90135 0,6.439" />
+        <path
+           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 2250.6482,571.8947 5.6313,11.5831"
+           id="path4662-7-20"
+           inkscape:connector-curvature="0"
+           inkscape:original-d="m 2256.2908,545.46229 0,12.87806" />
+        <path
+           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 2207.9601,604.97466 9.948,8.1781"
+           id="path4662-16"
+           inkscape:connector-curvature="0"
+           inkscape:original-d="m 2205.2124,545.46229 0,12.87806" />
+        <path
+           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 2216.3083,605.15362 4.7725,4.31998"
+           id="path4662-9-40"
+           inkscape:connector-curvature="0"
+           inkscape:original-d="m 2210.3203,551.90135 0,6.439" />
+        <path
+           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 2219.8623,601.40703 4.5665,4.53739"
+           id="path4662-9-8-61"
+           inkscape:connector-curvature="0"
+           inkscape:original-d="m 2215.4281,551.90135 0,6.439" />
+        <path
+           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 2223.5852,597.82751 4.3562,4.74129"
+           id="path4662-9-4-8"
+           inkscape:connector-curvature="0"
+           inkscape:original-d="m 2220.5358,551.90135 0,6.439" />
+        <path
+           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 2227.4664,594.41845 4.1413,4.93167"
+           id="path4662-9-0-9"
+           inkscape:connector-curvature="0"
+           inkscape:original-d="m 2225.6437,551.90135 0,6.439" />
+        <path
+           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 2227.5729,586.07497 7.844,10.21712"
+           id="path4662-7-8"
+           inkscape:connector-curvature="0"
+           inkscape:original-d="m 2230.7516,545.46229 0,12.87806" />
+      </g>
+    </g>
+    <g
+       id="g3220"
+       transform="translate(-196.07004,-425.99769)">
+      <g
+         id="g3196">
+        <path
+           inkscape:connector-curvature="0"
+           id="path3170"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:100%;font-family:'Arial Rounded MT Bold';-inkscape-font-specification:'Arial Rounded MT Bold,';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+           d="m 371.8461,471.78022 -2.7832,0 -0.334,1.89843 c 0.5547,-0.29686 1.0664,-0.4453 1.5352,-0.44531 0.375,10e-6 0.7255,0.0703 1.0517,0.21094 0.3262,0.14063 0.6123,0.33497 0.8584,0.58301 0.2461,0.24805 0.4395,0.54199 0.5801,0.88183 0.1406,0.33985 0.2109,0.70509 0.2109,1.09571 0,0.56641 -0.1269,1.08203 -0.3808,1.54687 -0.2539,0.46485 -0.6202,0.83399 -1.0987,1.10742 -0.4785,0.27344 -1.0302,0.41016 -1.6552,0.41016 -0.6993,0 -1.2666,-0.12891 -1.7022,-0.38672 -0.4355,-0.25781 -0.7441,-0.55371 -0.9258,-0.88769 -0.1816,-0.33399 -0.2724,-0.62598 -0.2724,-0.87598 0,-0.15234 0.063,-0.29687 0.1904,-0.43359 0.127,-0.13672 0.2861,-0.20508 0.4775,-0.20508 0.3282,0 0.5723,0.18945 0.7325,0.56836 0.1562,0.34765 0.3671,0.61816 0.6328,0.81152 0.2656,0.19336 0.5625,0.29004 0.8906,0.29004 0.3008,0 0.5644,-0.0781 0.791,-0.23438 0.2266,-0.15624 0.4014,-0.37109 0.5244,-0.64453 0.1231,-0.27343 0.1846,-0.58398 0.1846,-0.93164 0,-0.37499 -0.066,-0.69531 -0.1992,-0.96094 -0.1328,-0.26562 -0.3106,-0.46386 -0.5332,-0.59472 -0.2227,-0.13086 -0.4707,-0.19629 -0.7442,-0.19629 -0.3359,0 -0.5761,0.041 -0.7207,0.12305 -0.1445,0.082 -0.3525,0.22559 -0.624,0.43066 -0.2715,0.20508 -0.4951,0.30762 -0.6709,0.30762 -0.1914,0 -0.3613,-0.0693 -0.5098,-0.20801 -0.1484,-0.13867 -0.2226,-0.29589 -0.2226,-0.47168 0,-0.0195 0.021,-0.15234 0.064,-0.39844 l 0.4922,-2.80664 c 0.055,-0.33593 0.1563,-0.58007 0.3047,-0.73242 0.1485,-0.15234 0.3906,-0.22851 0.7266,-0.22852 l 3.0937,0 c 0.6094,1e-5 0.9141,0.23243 0.9141,0.69727 0,0.20313 -0.074,0.36719 -0.2227,0.49219 -0.1484,0.125 -0.3672,0.1875 -0.6562,0.1875 z" />
+        <path
+           inkscape:connector-curvature="0"
+           id="path3172"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:100%;font-family:'Arial Rounded MT Bold';-inkscape-font-specification:'Arial Rounded MT Bold,';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+           d="m 379.9789,474.7099 c 0,0.64063 -0.039,1.19141 -0.1172,1.65235 -0.078,0.46094 -0.2226,0.87891 -0.4336,1.2539 -0.2656,0.46094 -0.6094,0.81641 -1.0312,1.06641 -0.4219,0.25 -0.8907,0.375 -1.4063,0.375 -0.5937,0 -1.126,-0.16797 -1.5967,-0.50391 -0.4707,-0.33593 -0.8252,-0.80078 -1.0634,-1.39453 -0.1211,-0.32421 -0.21,-0.68261 -0.2666,-1.07519 -0.057,-0.39258 -0.085,-0.81738 -0.085,-1.27442 0,-0.58983 0.031,-1.12108 0.094,-1.59375 0.062,-0.47265 0.1601,-0.8789 0.2929,-1.21875 0.2305,-0.56249 0.5654,-0.9912 1.0049,-1.28613 0.4395,-0.29491 0.9639,-0.44237 1.5732,-0.44238 0.4024,10e-6 0.7676,0.0654 1.0957,0.19629 0.3282,0.13087 0.6163,0.32227 0.8643,0.57422 0.248,0.25196 0.458,0.56348 0.6299,0.93457 0.2969,0.64453 0.4453,1.55664 0.4453,2.73632 z m -1.6055,-0.11718 c 0,-0.71484 -0.043,-1.2998 -0.1289,-1.75489 -0.086,-0.45507 -0.2304,-0.79882 -0.4336,-1.03125 -0.2031,-0.23241 -0.4843,-0.34862 -0.8437,-0.34863 -0.5156,1e-5 -0.874,0.25977 -1.0752,0.7793 -0.2012,0.51954 -0.3018,1.32032 -0.3018,2.40234 0,0.73438 0.043,1.33594 0.1289,1.80469 0.086,0.46875 0.2305,0.82324 0.4336,1.06348 0.2032,0.24023 0.4785,0.36035 0.8262,0.36035 0.3594,0 0.6406,-0.125 0.8438,-0.375 0.2031,-0.25 0.3456,-0.60742 0.4277,-1.07227 0.082,-0.46484 0.123,-1.07421 0.123,-1.82812 z" />
+        <path
+           inkscape:connector-curvature="0"
+           id="path3165"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:100%;font-family:'Arial Rounded MT Bold';-inkscape-font-specification:'Arial Rounded MT Bold,';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+           d="m 395.705,475.8873 c 0.2657,-0.3164 0.5547,-0.55077 0.8672,-0.70312 0.3125,-0.15234 0.6621,-0.22851 1.0488,-0.22852 0.3711,10e-6 0.7139,0.0693 1.0284,0.20801 0.3144,0.13868 0.5898,0.33594 0.8261,0.5918 0.2364,0.25586 0.419,0.55762 0.5479,0.90527 0.1289,0.34766 0.1933,0.71094 0.1933,1.08984 0,0.55079 -0.1259,1.05079 -0.3779,1.5 -0.2519,0.44922 -0.6035,0.79981 -1.0547,1.05176 -0.4511,0.25195 -0.9619,0.37793 -1.5322,0.37793 -0.6562,0 -1.2227,-0.16016 -1.6992,-0.48047 -0.4766,-0.32031 -0.8408,-0.79394 -1.0928,-1.4209 -0.2519,-0.62695 -0.3779,-1.39355 -0.3779,-2.2998 0,-0.73828 0.076,-1.39843 0.2285,-1.98047 0.1523,-0.58203 0.3711,-1.06445 0.6562,-1.44727 0.2852,-0.3828 0.6309,-0.67186 1.0372,-0.86718 0.4062,-0.19531 0.8691,-0.29296 1.3886,-0.29297 0.5,10e-6 0.9405,0.0977 1.3213,0.29297 0.3809,0.19532 0.668,0.4375 0.8613,0.72656 0.1934,0.28907 0.2901,0.56641 0.2901,0.83203 0,0.16016 -0.061,0.30567 -0.1817,0.43652 -0.1211,0.13087 -0.2754,0.1963 -0.4628,0.19629 -0.1641,10e-6 -0.3165,-0.0518 -0.4571,-0.15527 -0.1406,-0.10351 -0.2441,-0.24706 -0.3105,-0.43067 -0.09,-0.23436 -0.2325,-0.42284 -0.4278,-0.56542 -0.1953,-0.14258 -0.4218,-0.21386 -0.6796,-0.21387 -0.2071,10e-6 -0.4131,0.0596 -0.6182,0.17871 -0.2051,0.11915 -0.3779,0.28028 -0.5186,0.4834 -0.2851,0.41407 -0.4531,1.15235 -0.5039,2.21484 z m 1.5821,3.63867 c 0.3945,0 0.7207,-0.16113 0.9785,-0.4834 0.2578,-0.32226 0.3867,-0.74511 0.3867,-1.26855 0,-0.35547 -0.061,-0.66113 -0.1816,-0.91699 -0.1211,-0.25586 -0.2872,-0.45117 -0.4981,-0.58594 -0.2109,-0.13476 -0.4434,-0.20214 -0.6973,-0.20215 -0.2422,10e-6 -0.4736,0.0645 -0.6943,0.19336 -0.2207,0.12891 -0.3984,0.31543 -0.5332,0.55957 -0.1348,0.24415 -0.2021,0.53028 -0.2021,0.8584 0,0.52735 0.1367,0.9668 0.4101,1.31836 0.2734,0.35156 0.6172,0.52734 1.0313,0.52734 z" />
+        <path
+           inkscape:connector-curvature="0"
+           id="path3167"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:100%;font-family:'Arial Rounded MT Bold';-inkscape-font-specification:'Arial Rounded MT Bold,';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+           d="m 407.2187,476.32089 c 0,0.64063 -0.039,1.19141 -0.1172,1.65235 -0.078,0.46094 -0.2226,0.87891 -0.4336,1.2539 -0.2656,0.46094 -0.6094,0.81641 -1.0312,1.06641 -0.4219,0.25 -0.8907,0.375 -1.4063,0.375 -0.5937,0 -1.126,-0.16797 -1.5967,-0.50391 -0.4707,-0.33593 -0.8252,-0.80078 -1.0634,-1.39453 -0.1211,-0.32421 -0.21,-0.68261 -0.2666,-1.07519 -0.057,-0.39258 -0.085,-0.81738 -0.085,-1.27442 0,-0.58983 0.031,-1.12108 0.094,-1.59375 0.062,-0.47265 0.1601,-0.8789 0.2929,-1.21875 0.2305,-0.56249 0.5654,-0.9912 1.0049,-1.28613 0.4395,-0.29491 0.9639,-0.44237 1.5732,-0.44238 0.4024,1e-5 0.7676,0.0654 1.0957,0.19629 0.3282,0.13087 0.6163,0.32227 0.8643,0.57422 0.248,0.25196 0.458,0.56348 0.6299,0.93457 0.2969,0.64453 0.4453,1.55664 0.4453,2.73632 z m -1.6055,-0.11718 c 0,-0.71484 -0.043,-1.2998 -0.1289,-1.75489 -0.086,-0.45507 -0.2304,-0.79882 -0.4336,-1.03125 -0.2031,-0.23241 -0.4843,-0.34862 -0.8437,-0.34863 -0.5156,10e-6 -0.874,0.25977 -1.0752,0.7793 -0.2012,0.51954 -0.3018,1.32032 -0.3018,2.40234 0,0.73438 0.043,1.33594 0.1289,1.80469 0.086,0.46875 0.2305,0.82324 0.4336,1.06348 0.2032,0.24023 0.4785,0.36035 0.8262,0.36035 0.3594,0 0.6406,-0.125 0.8438,-0.375 0.2031,-0.25 0.3456,-0.60742 0.4277,-1.07227 0.082,-0.46484 0.123,-1.07421 0.123,-1.82812 z" />
+        <path
+           inkscape:connector-curvature="0"
+           id="path3160"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:100%;font-family:'Arial Rounded MT Bold';-inkscape-font-specification:'Arial Rounded MT Bold,';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+           d="m 423.0055,478.82111 3.9024,0 c 0.375,1e-5 0.6465,0.0586 0.8144,0.17578 0.168,0.1172 0.252,0.31056 0.252,0.58008 0,0.16407 -0.099,0.38087 -0.2959,0.65039 -0.1973,0.26954 -0.4219,0.56739 -0.6738,0.89356 -0.252,0.32618 -0.5118,0.73145 -0.7793,1.21582 -0.2676,0.48438 -0.5127,1.07617 -0.7354,1.77539 -0.094,0.3086 -0.1601,0.56445 -0.1992,0.76758 -0.039,0.20312 -0.082,0.4668 -0.1289,0.79101 -0.047,0.32422 -0.088,0.57227 -0.1231,0.74414 -0.082,0.39844 -0.1982,0.67481 -0.3486,0.8291 -0.1504,0.1543 -0.3506,0.23145 -0.6006,0.23145 -0.2383,0 -0.4297,-0.083 -0.5742,-0.24902 -0.1445,-0.16602 -0.2168,-0.41114 -0.2168,-0.73536 0,-0.24999 0.053,-0.58984 0.1582,-1.01953 0.1055,-0.42968 0.2774,-0.94433 0.5156,-1.54394 0.2383,-0.59961 0.5362,-1.21484 0.8936,-1.8457 0.3574,-0.63086 0.7822,-1.25879 1.2744,-1.88379 l -3.1348,0 c -0.3281,0 -0.5732,-0.0596 -0.7353,-0.17871 -0.1621,-0.11914 -0.2432,-0.30566 -0.2432,-0.55958 0,-0.26952 0.086,-0.44335 0.2578,-0.52148 0.1719,-0.0781 0.4121,-0.11718 0.7207,-0.11719 z" />
+        <path
+           inkscape:connector-curvature="0"
+           id="path3162"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:100%;font-family:'Arial Rounded MT Bold';-inkscape-font-specification:'Arial Rounded MT Bold,';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+           d="m 434.8239,483.11603 c 0,0.64063 -0.039,1.19141 -0.1172,1.65235 -0.078,0.46094 -0.2226,0.87891 -0.4336,1.2539 -0.2656,0.46094 -0.6094,0.81641 -1.0312,1.06641 -0.4219,0.25 -0.8907,0.375 -1.4063,0.375 -0.5937,0 -1.126,-0.16797 -1.5967,-0.50391 -0.4707,-0.33593 -0.8252,-0.80078 -1.0634,-1.39453 -0.1211,-0.32421 -0.21,-0.68261 -0.2666,-1.07519 -0.057,-0.39258 -0.085,-0.81738 -0.085,-1.27442 0,-0.58983 0.031,-1.12108 0.094,-1.59375 0.062,-0.47265 0.1601,-0.8789 0.2929,-1.21875 0.2305,-0.56249 0.5654,-0.9912 1.0049,-1.28613 0.4395,-0.29491 0.9639,-0.44237 1.5732,-0.44238 0.4024,1e-5 0.7676,0.0654 1.0957,0.19629 0.3282,0.13087 0.6163,0.32227 0.8643,0.57422 0.248,0.25196 0.458,0.56348 0.6299,0.93457 0.2969,0.64453 0.4453,1.55664 0.4453,2.73632 z m -1.6055,-0.11718 c 0,-0.71484 -0.043,-1.2998 -0.1289,-1.75489 -0.086,-0.45507 -0.2304,-0.79882 -0.4336,-1.03125 -0.2031,-0.23241 -0.4843,-0.34862 -0.8437,-0.34863 -0.5156,10e-6 -0.874,0.25977 -1.0752,0.7793 -0.2012,0.51954 -0.3018,1.32032 -0.3018,2.40234 0,0.73438 0.043,1.33594 0.1289,1.80469 0.086,0.46875 0.2305,0.82324 0.4336,1.06348 0.2032,0.24023 0.4785,0.36035 0.8262,0.36035 0.3594,0 0.6406,-0.125 0.8438,-0.375 0.2031,-0.25 0.3456,-0.60742 0.4277,-1.07227 0.082,-0.46484 0.123,-1.07421 0.123,-1.82812 z" />
+        <path
+           inkscape:connector-curvature="0"
+           id="path3155"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:100%;font-family:'Arial Rounded MT Bold';-inkscape-font-specification:'Arial Rounded MT Bold,';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+           d="m 447.4209,492.81026 c 0,-0.39062 0.1065,-0.75878 0.3194,-1.10449 0.2129,-0.3457 0.5254,-0.62207 0.9375,-0.8291 0.4121,-0.20703 0.8935,-0.31054 1.4443,-0.31055 0.4648,10e-6 0.873,0.0606 1.2246,0.18164 0.3516,0.1211 0.6445,0.28809 0.8789,0.50098 0.2344,0.21289 0.4082,0.45313 0.5215,0.7207 0.1133,0.26758 0.1699,0.55176 0.1699,0.85254 0,0.38282 -0.099,0.72461 -0.2959,1.02539 -0.1972,0.30078 -0.4912,0.54688 -0.8818,0.73828 0.332,0.12891 0.6074,0.29786 0.8262,0.50684 0.2187,0.20898 0.3837,0.45117 0.4951,0.72656 0.1113,0.27539 0.167,0.58106 0.167,0.91699 0,0.49219 -0.1192,0.93848 -0.3574,1.33887 -0.2383,0.40039 -0.5879,0.71387 -1.0489,0.94043 -0.4609,0.22656 -1.0039,0.33984 -1.6289,0.33984 -0.6484,0 -1.2031,-0.11328 -1.664,-0.33984 -0.461,-0.22656 -0.8086,-0.53809 -1.043,-0.93457 -0.2344,-0.39649 -0.3516,-0.84082 -0.3516,-1.33301 0,-1.05078 0.4961,-1.77148 1.4883,-2.16211 -0.8008,-0.375 -1.2012,-0.96679 -1.2012,-1.77539 z m 4.2012,3.87891 c 0,-0.30469 -0.062,-0.57031 -0.1875,-0.79688 -0.125,-0.22656 -0.3008,-0.40039 -0.5273,-0.52148 -0.2266,-0.12109 -0.4805,-0.18164 -0.7618,-0.18164 -0.3984,0 -0.7324,0.13281 -1.0019,0.39843 -0.2695,0.26563 -0.4043,0.63672 -0.4043,1.11328 0,0.30469 0.064,0.57325 0.1904,0.80567 0.127,0.23242 0.2998,0.41211 0.5186,0.53906 0.2187,0.12695 0.4629,0.19043 0.7324,0.19043 0.2734,0 0.5195,-0.0644 0.7383,-0.19336 0.2187,-0.1289 0.3906,-0.31054 0.5156,-0.54492 0.125,-0.23437 0.1875,-0.5039 0.1875,-0.80859 z m -1.4648,-5.00391 c -0.3672,10e-6 -0.6631,0.11426 -0.8877,0.34277 -0.2246,0.22853 -0.3369,0.52247 -0.3369,0.88184 0,0.33204 0.1152,0.6084 0.3457,0.8291 0.2304,0.22071 0.5273,0.33106 0.8906,0.33105 0.1836,10e-6 0.3506,-0.0293 0.501,-0.0879 0.1503,-0.0586 0.2793,-0.13964 0.3867,-0.24316 0.1074,-0.10351 0.1904,-0.22656 0.249,-0.36914 0.059,-0.14257 0.088,-0.2998 0.088,-0.47168 0,-0.23046 -0.052,-0.43749 -0.1553,-0.62109 -0.1035,-0.18359 -0.249,-0.32812 -0.4365,-0.4336 -0.1875,-0.10546 -0.4024,-0.15819 -0.6445,-0.1582 z" />
+        <path
+           inkscape:connector-curvature="0"
+           id="path3157"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:100%;font-family:'Arial Rounded MT Bold';-inkscape-font-specification:'Arial Rounded MT Bold,';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+           d="m 460.3057,495.00752 c 0,0.64063 -0.039,1.19141 -0.1172,1.65235 -0.078,0.46094 -0.2226,0.87891 -0.4336,1.2539 -0.2656,0.46094 -0.6094,0.81641 -1.0312,1.06641 -0.4219,0.25 -0.8907,0.375 -1.4063,0.375 -0.5937,0 -1.126,-0.16797 -1.5967,-0.50391 -0.4707,-0.33593 -0.8252,-0.80078 -1.0634,-1.39453 -0.1211,-0.32421 -0.21,-0.68261 -0.2666,-1.07519 -0.057,-0.39258 -0.085,-0.81738 -0.085,-1.27442 0,-0.58983 0.031,-1.12108 0.094,-1.59375 0.062,-0.47265 0.1601,-0.8789 0.2929,-1.21875 0.2305,-0.56249 0.5654,-0.9912 1.0049,-1.28613 0.4395,-0.29491 0.9639,-0.44237 1.5732,-0.44238 0.4024,10e-6 0.7676,0.0654 1.0957,0.19629 0.3282,0.13087 0.6163,0.32227 0.8643,0.57422 0.248,0.25196 0.458,0.56348 0.6299,0.93457 0.2969,0.64453 0.4453,1.55664 0.4453,2.73632 z m -1.6055,-0.11718 c 0,-0.71484 -0.043,-1.2998 -0.1289,-1.75489 -0.086,-0.45507 -0.2304,-0.79882 -0.4336,-1.03125 -0.2031,-0.23241 -0.4843,-0.34862 -0.8437,-0.34863 -0.5156,1e-5 -0.874,0.25977 -1.0752,0.7793 -0.2012,0.51954 -0.3018,1.32032 -0.3018,2.40234 0,0.73438 0.043,1.33594 0.1289,1.80469 0.086,0.46875 0.2305,0.82324 0.4336,1.06348 0.2032,0.24023 0.4785,0.36035 0.8262,0.36035 0.3594,0 0.6406,-0.125 0.8438,-0.375 0.2031,-0.25 0.3456,-0.60742 0.4277,-1.07227 0.082,-0.46484 0.123,-1.07421 0.123,-1.82812 z" />
+        <path
+           inkscape:connector-curvature="0"
+           id="path3150"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:100%;font-family:'Arial Rounded MT Bold';-inkscape-font-specification:'Arial Rounded MT Bold,';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+           d="m 476.5619,510.65987 c -0.2578,0.30469 -0.5459,0.53418 -0.8642,0.68847 -0.3184,0.1543 -0.6709,0.23145 -1.0577,0.23145 -0.3671,0 -0.7099,-0.0713 -1.0283,-0.21387 -0.3183,-0.14257 -0.5937,-0.34179 -0.8261,-0.59766 -0.2325,-0.25585 -0.4112,-0.55468 -0.5362,-0.89648 -0.125,-0.34179 -0.1875,-0.70019 -0.1875,-1.0752 0,-0.40233 0.07,-0.78417 0.211,-1.1455 0.1406,-0.36132 0.3418,-0.6748 0.6035,-0.94043 0.2617,-0.26562 0.5732,-0.47265 0.9345,-0.6211 0.3614,-0.14843 0.7608,-0.22264 1.1983,-0.22265 0.5039,1e-5 0.9531,0.0918 1.3476,0.27539 0.3946,0.1836 0.7266,0.4502 0.9961,0.7998 0.2696,0.34962 0.4766,0.79005 0.6211,1.32129 0.1446,0.53126 0.2168,1.13282 0.2168,1.80469 0,0.75 -0.076,1.41114 -0.2285,1.9834 -0.1523,0.57227 -0.374,1.05273 -0.665,1.4414 -0.2911,0.38868 -0.6397,0.67774 -1.0459,0.86719 -0.4063,0.18945 -0.8672,0.28418 -1.3828,0.28418 -0.5079,0 -0.9493,-0.0967 -1.3243,-0.29004 -0.375,-0.19336 -0.6601,-0.43359 -0.8554,-0.7207 -0.1953,-0.28711 -0.293,-0.56348 -0.293,-0.8291 0,-0.16406 0.061,-0.31055 0.1816,-0.43946 0.1211,-0.1289 0.2754,-0.19335 0.4629,-0.19336 0.1719,1e-5 0.3262,0.0479 0.4629,0.14356 0.1367,0.0957 0.2403,0.23926 0.3106,0.43066 0.086,0.23438 0.2285,0.42286 0.4277,0.56543 0.1992,0.14258 0.4238,0.21387 0.6738,0.21387 0.2227,0 0.4336,-0.0566 0.6328,-0.16992 0.1993,-0.11328 0.3692,-0.27344 0.5098,-0.48047 0.2813,-0.41797 0.4492,-1.15625 0.5039,-2.21484 z m -0.1347,-1.79297 c -1e-4,-0.26562 -0.036,-0.51074 -0.1084,-0.73535 -0.072,-0.22461 -0.1739,-0.41894 -0.3047,-0.58301 -0.1309,-0.16406 -0.2871,-0.29296 -0.4688,-0.38672 -0.1816,-0.0937 -0.3799,-0.14062 -0.5947,-0.14063 -0.3711,1e-5 -0.6856,0.15919 -0.9434,0.47754 -0.2578,0.31837 -0.3867,0.73927 -0.3867,1.2627 0,0.51954 0.1289,0.9336 0.3867,1.24219 0.2578,0.30859 0.584,0.46289 0.9785,0.46289 0.2422,0 0.4737,-0.0635 0.6944,-0.19043 0.2207,-0.12695 0.4004,-0.31152 0.539,-0.55371 0.1387,-0.24219 0.208,-0.52734 0.2081,-0.85547 z" />
+        <path
+           inkscape:connector-curvature="0"
+           id="path3152"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:100%;font-family:'Arial Rounded MT Bold';-inkscape-font-specification:'Arial Rounded MT Bold,';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+           d="m 485.3627,510.29658 c 0,0.64063 -0.039,1.19141 -0.1172,1.65235 -0.078,0.46094 -0.2226,0.87891 -0.4336,1.2539 -0.2656,0.46094 -0.6094,0.81641 -1.0312,1.06641 -0.4219,0.25 -0.8907,0.375 -1.4063,0.375 -0.5937,0 -1.126,-0.16797 -1.5967,-0.50391 -0.4707,-0.33593 -0.8252,-0.80078 -1.0634,-1.39453 -0.1211,-0.32421 -0.21,-0.68261 -0.2666,-1.07519 -0.057,-0.39258 -0.085,-0.81738 -0.085,-1.27442 0,-0.58983 0.031,-1.12108 0.094,-1.59375 0.062,-0.47265 0.1601,-0.8789 0.2929,-1.21875 0.2305,-0.56249 0.5654,-0.9912 1.0049,-1.28613 0.4395,-0.29491 0.9639,-0.44237 1.5732,-0.44238 0.4024,10e-6 0.7676,0.0654 1.0957,0.19629 0.3282,0.13087 0.6163,0.32227 0.8643,0.57422 0.248,0.25196 0.458,0.56348 0.6299,0.93457 0.2969,0.64453 0.4453,1.55664 0.4453,2.73632 z m -1.6055,-0.11718 c 0,-0.71484 -0.043,-1.2998 -0.1289,-1.75489 -0.086,-0.45507 -0.2304,-0.79882 -0.4336,-1.03125 -0.2031,-0.23241 -0.4843,-0.34862 -0.8437,-0.34863 -0.5156,1e-5 -0.874,0.25977 -1.0752,0.7793 -0.2012,0.51954 -0.3018,1.32032 -0.3018,2.40234 0,0.73438 0.043,1.33594 0.1289,1.80469 0.086,0.46875 0.2305,0.82324 0.4336,1.06348 0.2032,0.24023 0.4785,0.36035 0.8262,0.36035 0.3594,0 0.6406,-0.125 0.8438,-0.375 0.2031,-0.25 0.3456,-0.60742 0.4277,-1.07227 0.082,-0.46484 0.123,-1.07421 0.123,-1.82812 z" />
+        <path
+           inkscape:connector-curvature="0"
+           id="path3143"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:100%;font-family:'Arial Rounded MT Bold';-inkscape-font-specification:'Arial Rounded MT Bold,';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+           d="m 495.8721,535.36624 0,-5.33203 c -0.9922,0.76172 -1.6601,1.14258 -2.0039,1.14258 -0.1641,0 -0.3096,-0.0654 -0.4365,-0.19629 -0.127,-0.13086 -0.1904,-0.28222 -0.1904,-0.4541 0,-0.19922 0.062,-0.3457 0.1875,-0.43946 0.125,-0.0937 0.3457,-0.21483 0.6621,-0.36328 0.4726,-0.22265 0.8506,-0.45702 1.1338,-0.70312 0.2832,-0.24609 0.5341,-0.52148 0.7529,-0.82617 0.2187,-0.30468 0.3613,-0.49218 0.4277,-0.5625 0.066,-0.0703 0.1914,-0.10546 0.375,-0.10547 0.207,1e-5 0.3731,0.0801 0.4981,0.24023 0.125,0.16017 0.1875,0.38087 0.1875,0.66211 l 0,6.70899 c 0,0.78515 -0.2676,1.17773 -0.8028,1.17773 -0.2383,0 -0.4297,-0.0801 -0.5742,-0.24023 -0.1445,-0.16016 -0.2168,-0.39649 -0.2168,-0.70899 z" />
+        <path
+           inkscape:connector-curvature="0"
+           id="path3145"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:100%;font-family:'Arial Rounded MT Bold';-inkscape-font-specification:'Arial Rounded MT Bold,';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+           d="m 506.1729,531.95608 c 0,0.64063 -0.039,1.19141 -0.1172,1.65235 -0.078,0.46094 -0.2226,0.87891 -0.4336,1.2539 -0.2656,0.46094 -0.6094,0.81641 -1.0312,1.06641 -0.4219,0.25 -0.8907,0.375 -1.4063,0.375 -0.5937,0 -1.126,-0.16797 -1.5967,-0.50391 -0.4707,-0.33593 -0.8252,-0.80078 -1.0634,-1.39453 -0.1211,-0.32421 -0.21,-0.68261 -0.2666,-1.07519 -0.057,-0.39258 -0.085,-0.81738 -0.085,-1.27442 0,-0.58983 0.031,-1.12108 0.094,-1.59375 0.062,-0.47265 0.1601,-0.8789 0.2929,-1.21875 0.2305,-0.56249 0.5654,-0.9912 1.0049,-1.28613 0.4395,-0.29491 0.9639,-0.44237 1.5732,-0.44238 0.4024,10e-6 0.7676,0.0654 1.0957,0.19629 0.3282,0.13087 0.6163,0.32227 0.8643,0.57422 0.248,0.25196 0.458,0.56348 0.6299,0.93457 0.2969,0.64453 0.4453,1.55664 0.4453,2.73632 z m -1.6055,-0.11718 c 0,-0.71484 -0.043,-1.2998 -0.1289,-1.75489 -0.086,-0.45507 -0.2304,-0.79882 -0.4336,-1.03125 -0.2031,-0.23241 -0.4843,-0.34862 -0.8437,-0.34863 -0.5156,1e-5 -0.874,0.25977 -1.0752,0.7793 -0.2012,0.51954 -0.3018,1.32032 -0.3018,2.40234 0,0.73438 0.043,1.33594 0.1289,1.80469 0.086,0.46875 0.2305,0.82324 0.4336,1.06348 0.2032,0.24023 0.4785,0.36035 0.8262,0.36035 0.3594,0 0.6406,-0.125 0.8438,-0.375 0.2031,-0.25 0.3456,-0.60742 0.4277,-1.07227 0.082,-0.46484 0.123,-1.07421 0.123,-1.82812 z" />
+        <path
+           inkscape:connector-curvature="0"
+           id="path3147"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:100%;font-family:'Arial Rounded MT Bold';-inkscape-font-specification:'Arial Rounded MT Bold,';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+           d="m 513.2979,531.95608 c 0,0.64063 -0.039,1.19141 -0.1172,1.65235 -0.078,0.46094 -0.2226,0.87891 -0.4336,1.2539 -0.2656,0.46094 -0.6094,0.81641 -1.0312,1.06641 -0.4219,0.25 -0.8907,0.375 -1.4063,0.375 -0.5937,0 -1.126,-0.16797 -1.5967,-0.50391 -0.4707,-0.33593 -0.8252,-0.80078 -1.0634,-1.39453 -0.1211,-0.32421 -0.21,-0.68261 -0.2666,-1.07519 -0.057,-0.39258 -0.085,-0.81738 -0.085,-1.27442 0,-0.58983 0.031,-1.12108 0.094,-1.59375 0.062,-0.47265 0.1601,-0.8789 0.2929,-1.21875 0.2305,-0.56249 0.5654,-0.9912 1.0049,-1.28613 0.4395,-0.29491 0.9639,-0.44237 1.5732,-0.44238 0.4024,10e-6 0.7676,0.0654 1.0957,0.19629 0.3282,0.13087 0.6163,0.32227 0.8643,0.57422 0.248,0.25196 0.458,0.56348 0.6299,0.93457 0.2969,0.64453 0.4453,1.55664 0.4453,2.73632 z m -1.6055,-0.11718 c 0,-0.71484 -0.043,-1.2998 -0.1289,-1.75489 -0.086,-0.45507 -0.2304,-0.79882 -0.4336,-1.03125 -0.2031,-0.23241 -0.4843,-0.34862 -0.8437,-0.34863 -0.5156,1e-5 -0.874,0.25977 -1.0752,0.7793 -0.2012,0.51954 -0.3018,1.32032 -0.3018,2.40234 0,0.73438 0.043,1.33594 0.1289,1.80469 0.086,0.46875 0.2305,0.82324 0.4336,1.06348 0.2032,0.24023 0.4785,0.36035 0.8262,0.36035 0.3594,0 0.6406,-0.125 0.8438,-0.375 0.2031,-0.25 0.3456,-0.60742 0.4277,-1.07227 0.082,-0.46484 0.123,-1.07421 0.123,-1.82812 z" />
+        <path
+           inkscape:connector-curvature="0"
+           id="path3138"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:100%;font-family:'Arial Rounded MT Bold';-inkscape-font-specification:'Arial Rounded MT Bold,';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+           d="m 341.6725,479.78964 0,-1.08984 -2.9414,0 c -0.3711,0 -0.6494,-0.084 -0.835,-0.25195 -0.1855,-0.16797 -0.2783,-0.39648 -0.2783,-0.68555 0,-0.0742 0.014,-0.14941 0.041,-0.22558 0.027,-0.0762 0.068,-0.15625 0.123,-0.24024 0.055,-0.084 0.1114,-0.16503 0.17,-0.24316 0.059,-0.0781 0.1308,-0.17383 0.2168,-0.28711 l 3.1054,-4.1543 c 0.2032,-0.27343 0.3701,-0.47167 0.501,-0.59473 0.1309,-0.12303 0.2881,-0.18456 0.4717,-0.18457 0.5937,1e-5 0.8906,0.33986 0.8906,1.01953 l 0,4.53516 0.252,0 c 0.3007,0 0.542,0.041 0.7236,0.12305 0.1816,0.082 0.2725,0.26172 0.2725,0.53906 0,0.22657 -0.074,0.3916 -0.2227,0.49512 -0.1484,0.10352 -0.3711,0.15527 -0.668,0.15527 l -0.3574,0 0,1.08984 c 0,0.30079 -0.066,0.52442 -0.1992,0.6709 -0.1328,0.14649 -0.3106,0.21973 -0.5332,0.21973 -0.2188,0 -0.3955,-0.0752 -0.5303,-0.22559 -0.1347,-0.15039 -0.2021,-0.37207 -0.2021,-0.66504 z m -2.5196,-2.40234 2.5196,0 0,-3.4043 z" />
+        <path
+           inkscape:connector-curvature="0"
+           id="path3140"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:100%;font-family:'Arial Rounded MT Bold';-inkscape-font-specification:'Arial Rounded MT Bold,';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+           d="m 351.1588,476.32089 c 0,0.64063 -0.039,1.19141 -0.1172,1.65235 -0.078,0.46094 -0.2226,0.87891 -0.4336,1.2539 -0.2656,0.46094 -0.6094,0.81641 -1.0312,1.06641 -0.4219,0.25 -0.8907,0.375 -1.4063,0.375 -0.5937,0 -1.126,-0.16797 -1.5967,-0.50391 -0.4707,-0.33593 -0.8252,-0.80078 -1.0634,-1.39453 -0.1211,-0.32421 -0.21,-0.68261 -0.2666,-1.07519 -0.057,-0.39258 -0.085,-0.81738 -0.085,-1.27442 0,-0.58983 0.031,-1.12108 0.094,-1.59375 0.062,-0.47265 0.1601,-0.8789 0.2929,-1.21875 0.2305,-0.56249 0.5654,-0.9912 1.0049,-1.28613 0.4395,-0.29491 0.9639,-0.44237 1.5732,-0.44238 0.4024,1e-5 0.7676,0.0654 1.0957,0.19629 0.3282,0.13087 0.6163,0.32227 0.8643,0.57422 0.248,0.25196 0.458,0.56348 0.6299,0.93457 0.2969,0.64453 0.4453,1.55664 0.4453,2.73632 z m -1.6055,-0.11718 c 0,-0.71484 -0.043,-1.2998 -0.1289,-1.75489 -0.086,-0.45507 -0.2304,-0.79882 -0.4336,-1.03125 -0.2031,-0.23241 -0.4843,-0.34862 -0.8437,-0.34863 -0.5156,10e-6 -0.874,0.25977 -1.0752,0.7793 -0.2012,0.51954 -0.3018,1.32032 -0.3018,2.40234 0,0.73438 0.043,1.33594 0.1289,1.80469 0.086,0.46875 0.2305,0.82324 0.4336,1.06348 0.2032,0.24023 0.4785,0.36035 0.8262,0.36035 0.3594,0 0.6406,-0.125 0.8438,-0.375 0.2031,-0.25 0.3456,-0.60742 0.4277,-1.07227 0.082,-0.46484 0.123,-1.07421 0.123,-1.82812 z" />
+        <path
+           inkscape:connector-curvature="0"
+           id="path3133"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:100%;font-family:'Arial Rounded MT Bold';-inkscape-font-specification:'Arial Rounded MT Bold,';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+           d="m 313.5778,482.14338 c 0.3594,0 0.669,-0.10546 0.9287,-0.31641 0.2598,-0.21093 0.3897,-0.51366 0.3897,-0.9082 0,-0.30078 -0.1036,-0.55956 -0.3106,-0.77637 -0.207,-0.21679 -0.4863,-0.32519 -0.8379,-0.32519 -0.2383,0 -0.4345,0.0332 -0.5888,0.0996 -0.1543,0.0664 -0.2764,0.1543 -0.3662,0.26367 -0.09,0.10938 -0.1749,0.25 -0.2549,0.42187 -0.08,0.17188 -0.1534,0.33399 -0.2198,0.48633 -0.039,0.082 -0.1093,0.14649 -0.2109,0.19336 -0.1016,0.0469 -0.2187,0.0703 -0.3516,0.0703 -0.1562,10e-6 -0.2998,-0.0635 -0.4306,-0.19043 -0.1309,-0.12694 -0.1963,-0.29589 -0.1963,-0.50683 0,-0.20312 0.061,-0.41699 0.1846,-0.6416 0.123,-0.22461 0.3027,-0.43847 0.539,-0.64161 0.2363,-0.20311 0.5303,-0.3662 0.8819,-0.48925 0.3515,-0.12304 0.7441,-0.18457 1.1777,-0.18457 0.3789,0 0.7246,0.0518 1.0371,0.15527 0.3125,0.10352 0.584,0.25294 0.8145,0.44824 0.2304,0.19532 0.4042,0.42188 0.5214,0.67969 0.1172,0.25782 0.1758,0.53516 0.1758,0.83203 0,0.39063 -0.085,0.72559 -0.2549,1.00488 -0.1699,0.27931 -0.4131,0.55177 -0.7295,0.81739 0.3047,0.16406 0.5616,0.35156 0.7706,0.5625 0.2089,0.21094 0.3662,0.44434 0.4716,0.70019 0.1055,0.25586 0.1582,0.53223 0.1582,0.8291 0,0.35547 -0.071,0.69922 -0.2138,1.03125 -0.1426,0.33204 -0.3526,0.62793 -0.6299,0.8877 -0.2774,0.25976 -0.6065,0.46289 -0.9873,0.60937 -0.3809,0.14649 -0.8018,0.21973 -1.2627,0.21973 -0.4688,0 -0.8887,-0.084 -1.2598,-0.25195 -0.3711,-0.16797 -0.6767,-0.37793 -0.917,-0.62989 -0.2402,-0.25195 -0.4218,-0.51269 -0.5449,-0.78222 -0.123,-0.26953 -0.1846,-0.49219 -0.1846,-0.66797 0,-0.22656 0.073,-0.40918 0.2198,-0.54785 0.1464,-0.13867 0.3291,-0.20801 0.5478,-0.20801 0.1094,0 0.2149,0.0322 0.3164,0.0967 0.1016,0.0645 0.168,0.1416 0.1992,0.23144 0.2032,0.54298 0.4209,0.94629 0.6534,1.20997 0.2324,0.26367 0.5595,0.3955 0.9814,0.3955 0.2422,0 0.4756,-0.0596 0.7002,-0.17871 0.2246,-0.11914 0.4102,-0.29589 0.5566,-0.53027 0.1465,-0.23437 0.2198,-0.50586 0.2198,-0.81445 0,-0.45703 -0.125,-0.81543 -0.375,-1.0752 -0.25,-0.25976 -0.5977,-0.38964 -1.043,-0.38965 -0.078,10e-6 -0.1992,0.008 -0.3633,0.0234 -0.164,0.0156 -0.2695,0.0234 -0.3164,0.0234 -0.2148,0 -0.3808,-0.0537 -0.498,-0.16114 -0.1172,-0.10741 -0.1758,-0.25683 -0.1758,-0.44824 0,-0.18749 0.07,-0.33886 0.2109,-0.4541 0.1406,-0.11523 0.3496,-0.17285 0.627,-0.17285 z" />
+        <path
+           inkscape:connector-curvature="0"
+           id="path3135"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:100%;font-family:'Arial Rounded MT Bold';-inkscape-font-specification:'Arial Rounded MT Bold,';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+           d="m 323.9782,483.11603 c 0,0.64063 -0.039,1.19141 -0.1172,1.65235 -0.078,0.46094 -0.2226,0.87891 -0.4336,1.2539 -0.2656,0.46094 -0.6094,0.81641 -1.0312,1.06641 -0.4219,0.25 -0.8907,0.375 -1.4063,0.375 -0.5937,0 -1.126,-0.16797 -1.5967,-0.50391 -0.4707,-0.33593 -0.8252,-0.80078 -1.0634,-1.39453 -0.1211,-0.32421 -0.21,-0.68261 -0.2666,-1.07519 -0.057,-0.39258 -0.085,-0.81738 -0.085,-1.27442 0,-0.58983 0.031,-1.12108 0.094,-1.59375 0.062,-0.47265 0.1601,-0.8789 0.2929,-1.21875 0.2305,-0.56249 0.5654,-0.9912 1.0049,-1.28613 0.4395,-0.29491 0.9639,-0.44237 1.5732,-0.44238 0.4024,1e-5 0.7676,0.0654 1.0957,0.19629 0.3282,0.13087 0.6163,0.32227 0.8643,0.57422 0.248,0.25196 0.458,0.56348 0.6299,0.93457 0.2969,0.64453 0.4453,1.55664 0.4453,2.73632 z m -1.6055,-0.11718 c 0,-0.71484 -0.043,-1.2998 -0.1289,-1.75489 -0.086,-0.45507 -0.2304,-0.79882 -0.4336,-1.03125 -0.2031,-0.23241 -0.4843,-0.34862 -0.8437,-0.34863 -0.5156,10e-6 -0.874,0.25977 -1.0752,0.7793 -0.2012,0.51954 -0.3018,1.32032 -0.3018,2.40234 0,0.73438 0.043,1.33594 0.1289,1.80469 0.086,0.46875 0.2305,0.82324 0.4336,1.06348 0.2032,0.24023 0.4785,0.36035 0.8262,0.36035 0.3594,0 0.6406,-0.125 0.8438,-0.375 0.2031,-0.25 0.3456,-0.60742 0.4277,-1.07227 0.082,-0.46484 0.123,-1.07421 0.123,-1.82812 z" />
+        <path
+           inkscape:connector-curvature="0"
+           id="path3128"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:100%;font-family:'Arial Rounded MT Bold';-inkscape-font-specification:'Arial Rounded MT Bold,';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+           d="m 286.2126,496.56351 3.0586,0 c 0.3047,0 0.5371,0.0625 0.6973,0.1875 0.1601,0.125 0.2402,0.29493 0.2402,0.50977 0,0.19141 -0.064,0.35351 -0.1904,0.48633 -0.127,0.13281 -0.3193,0.19922 -0.5771,0.19922 l -4.3125,0 c -0.293,0 -0.5215,-0.0811 -0.6856,-0.24317 -0.1641,-0.16211 -0.2461,-0.35254 -0.2461,-0.57129 0,-0.14062 0.053,-0.32714 0.1582,-0.55957 0.1055,-0.23242 0.2207,-0.41504 0.3457,-0.54785 0.5195,-0.53906 0.9883,-1.00097 1.4063,-1.38574 0.4179,-0.38476 0.7168,-0.63769 0.8965,-0.75879 0.3203,-0.22656 0.5869,-0.4541 0.7998,-0.68262 0.2128,-0.22851 0.375,-0.46288 0.4863,-0.70312 0.1113,-0.24023 0.167,-0.47558 0.167,-0.70606 0,-0.24999 -0.06,-0.47362 -0.1787,-0.6709 -0.1192,-0.19725 -0.2813,-0.35057 -0.4864,-0.45996 -0.205,-0.10936 -0.4287,-0.16405 -0.6709,-0.16406 -0.5117,10e-6 -0.914,0.22462 -1.207,0.67383 -0.039,0.0586 -0.1045,0.21876 -0.1963,0.48047 -0.092,0.26172 -0.1953,0.46289 -0.3105,0.60351 -0.1153,0.14063 -0.2842,0.21095 -0.5069,0.21094 -0.1953,10e-6 -0.3574,-0.0644 -0.4863,-0.19336 -0.1289,-0.1289 -0.1934,-0.30468 -0.1934,-0.52734 0,-0.26953 0.061,-0.55078 0.1817,-0.84375 0.1211,-0.29296 0.3017,-0.55859 0.542,-0.79688 0.2402,-0.23827 0.5449,-0.43065 0.914,-0.57715 0.3692,-0.14647 0.8018,-0.21971 1.2979,-0.21972 0.5976,1e-5 1.1074,0.0938 1.5293,0.28125 0.2734,0.12501 0.5137,0.29688 0.7207,0.51562 0.207,0.21876 0.3682,0.47169 0.4834,0.75879 0.1152,0.28712 0.1728,0.58497 0.1728,0.89356 0,0.48438 -0.1201,0.92481 -0.3603,1.32129 -0.2402,0.39648 -0.4854,0.70703 -0.7354,0.93164 -0.25,0.22461 -0.6689,0.57715 -1.2568,1.05761 -0.5879,0.48047 -0.9912,0.85352 -1.21,1.11914 -0.094,0.10547 -0.1894,0.23243 -0.2871,0.38086 z" />
+        <path
+           inkscape:connector-curvature="0"
+           id="path3130"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:100%;font-family:'Arial Rounded MT Bold';-inkscape-font-specification:'Arial Rounded MT Bold,';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+           d="m 297.2224,493.73343 c 0,0.64063 -0.039,1.19141 -0.1172,1.65235 -0.078,0.46094 -0.2226,0.87891 -0.4336,1.2539 -0.2656,0.46094 -0.6094,0.81641 -1.0312,1.06641 -0.4219,0.25 -0.8907,0.375 -1.4063,0.375 -0.5937,0 -1.126,-0.16797 -1.5967,-0.50391 -0.4707,-0.33593 -0.8252,-0.80078 -1.0634,-1.39453 -0.1211,-0.32421 -0.21,-0.68261 -0.2666,-1.07519 -0.057,-0.39258 -0.085,-0.81738 -0.085,-1.27442 0,-0.58983 0.031,-1.12108 0.094,-1.59375 0.062,-0.47265 0.1601,-0.8789 0.2929,-1.21875 0.2305,-0.56249 0.5654,-0.9912 1.0049,-1.28613 0.4395,-0.29491 0.9639,-0.44237 1.5732,-0.44238 0.4024,10e-6 0.7676,0.0654 1.0957,0.19629 0.3282,0.13087 0.6163,0.32227 0.8643,0.57422 0.248,0.25196 0.458,0.56348 0.6299,0.93457 0.2969,0.64453 0.4453,1.55664 0.4453,2.73632 z m -1.6055,-0.11718 c 0,-0.71484 -0.043,-1.2998 -0.1289,-1.75489 -0.086,-0.45507 -0.2304,-0.79882 -0.4336,-1.03125 -0.2031,-0.23241 -0.4843,-0.34862 -0.8437,-0.34863 -0.5156,1e-5 -0.874,0.25977 -1.0752,0.7793 -0.2012,0.51954 -0.3018,1.32032 -0.3018,2.40234 0,0.73438 0.043,1.33594 0.1289,1.80469 0.086,0.46875 0.2305,0.82324 0.4336,1.06348 0.2032,0.24023 0.4785,0.36035 0.8262,0.36035 0.3594,0 0.6406,-0.125 0.8438,-0.375 0.2031,-0.25 0.3456,-0.60742 0.4277,-1.07227 0.082,-0.46484 0.123,-1.07421 0.123,-1.82812 z" />
+        <path
+           inkscape:connector-curvature="0"
+           id="path3123"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:100%;font-family:'Arial Rounded MT Bold';-inkscape-font-specification:'Arial Rounded MT Bold,';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+           d="m 263.1386,514.13143 0,-5.33203 c -0.9922,0.76172 -1.6601,1.14258 -2.0039,1.14258 -0.1641,0 -0.3096,-0.0654 -0.4365,-0.19629 -0.127,-0.13086 -0.1904,-0.28222 -0.1904,-0.4541 0,-0.19922 0.062,-0.3457 0.1875,-0.43946 0.125,-0.0937 0.3457,-0.21483 0.6621,-0.36328 0.4726,-0.22265 0.8506,-0.45702 1.1338,-0.70312 0.2832,-0.24609 0.5341,-0.52148 0.7529,-0.82617 0.2187,-0.30468 0.3613,-0.49218 0.4277,-0.5625 0.066,-0.0703 0.1914,-0.10546 0.375,-0.10547 0.207,1e-5 0.3731,0.0801 0.4981,0.24023 0.125,0.16017 0.1875,0.38087 0.1875,0.66211 l 0,6.70899 c 0,0.78515 -0.2676,1.17773 -0.8028,1.17773 -0.2383,0 -0.4297,-0.0801 -0.5742,-0.24023 -0.1445,-0.16016 -0.2168,-0.39649 -0.2168,-0.70899 z" />
+        <path
+           inkscape:connector-curvature="0"
+           id="path3125"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:100%;font-family:'Arial Rounded MT Bold';-inkscape-font-specification:'Arial Rounded MT Bold,';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+           d="m 273.4394,510.72127 c 0,0.64063 -0.039,1.19141 -0.1172,1.65235 -0.078,0.46094 -0.2226,0.87891 -0.4336,1.2539 -0.2656,0.46094 -0.6094,0.81641 -1.0312,1.06641 -0.4219,0.25 -0.8907,0.375 -1.4063,0.375 -0.5937,0 -1.126,-0.16797 -1.5967,-0.50391 -0.4707,-0.33593 -0.8252,-0.80078 -1.0634,-1.39453 -0.1211,-0.32421 -0.21,-0.68261 -0.2666,-1.07519 -0.057,-0.39258 -0.085,-0.81738 -0.085,-1.27442 0,-0.58983 0.031,-1.12108 0.094,-1.59375 0.062,-0.47265 0.1601,-0.8789 0.2929,-1.21875 0.2305,-0.56249 0.5654,-0.9912 1.0049,-1.28613 0.4395,-0.29491 0.9639,-0.44237 1.5732,-0.44238 0.4024,10e-6 0.7676,0.0654 1.0957,0.19629 0.3282,0.13087 0.6163,0.32227 0.8643,0.57422 0.248,0.25196 0.458,0.56348 0.6299,0.93457 0.2969,0.64453 0.4453,1.55664 0.4453,2.73632 z m -1.6055,-0.11718 c 0,-0.71484 -0.043,-1.2998 -0.1289,-1.75489 -0.086,-0.45507 -0.2304,-0.79882 -0.4336,-1.03125 -0.2031,-0.23241 -0.4843,-0.34862 -0.8437,-0.34863 -0.5156,1e-5 -0.874,0.25977 -1.0752,0.7793 -0.2012,0.51954 -0.3018,1.32032 -0.3018,2.40234 0,0.73438 0.043,1.33594 0.1289,1.80469 0.086,0.46875 0.2305,0.82324 0.4336,1.06348 0.2032,0.24023 0.4785,0.36035 0.8262,0.36035 0.3594,0 0.6406,-0.125 0.8438,-0.375 0.2031,-0.25 0.3456,-0.60742 0.4277,-1.07227 0.082,-0.46484 0.123,-1.07421 0.123,-1.82812 z" />
+        <path
+           inkscape:connector-curvature="0"
+           id="path3120"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:100%;font-family:'Arial Rounded MT Bold';-inkscape-font-specification:'Arial Rounded MT Bold,';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
+           d="m 244.408,533.10669 c 0,0.64063 -0.039,1.19141 -0.1172,1.65235 -0.078,0.46094 -0.2226,0.87891 -0.4336,1.2539 -0.2656,0.46094 -0.6094,0.81641 -1.0312,1.06641 -0.4219,0.25 -0.8907,0.375 -1.4063,0.375 -0.5937,0 -1.126,-0.16797 -1.5967,-0.50391 -0.4707,-0.33593 -0.8252,-0.80078 -1.0634,-1.39453 -0.1211,-0.32421 -0.21,-0.68261 -0.2666,-1.07519 -0.057,-0.39258 -0.085,-0.81738 -0.085,-1.27442 0,-0.58983 0.031,-1.12108 0.094,-1.59375 0.062,-0.47265 0.1601,-0.8789 0.2929,-1.21875 0.2305,-0.56249 0.5654,-0.9912 1.0049,-1.28613 0.4395,-0.29491 0.9639,-0.44237 1.5732,-0.44238 0.4024,10e-6 0.7676,0.0654 1.0957,0.19629 0.3282,0.13087 0.6163,0.32227 0.8643,0.57422 0.248,0.25196 0.458,0.56348 0.6299,0.93457 0.2969,0.64453 0.4453,1.55664 0.4453,2.73632 z m -1.6055,-0.11718 c 0,-0.71484 -0.043,-1.2998 -0.1289,-1.75489 -0.086,-0.45507 -0.2304,-0.79882 -0.4336,-1.03125 -0.2031,-0.23241 -0.4843,-0.34862 -0.8437,-0.34863 -0.5156,10e-6 -0.874,0.25977 -1.0752,0.7793 -0.2012,0.51954 -0.3018,1.32032 -0.3018,2.40234 0,0.73438 0.043,1.33594 0.1289,1.80469 0.086,0.46875 0.2305,0.82324 0.4336,1.06348 0.2032,0.24023 0.4785,0.36035 0.8262,0.36035 0.3594,0 0.6406,-0.125 0.8438,-0.375 0.2031,-0.25 0.3456,-0.60742 0.4277,-1.07227 0.082,-0.46484 0.123,-1.07421 0.123,-1.82812 z" />
+      </g>
+    </g>
+  </g>
+</svg>
diff --git a/Crow/Images/screenshot.png b/Crow/Images/screenshot.png
new file mode 100644 (file)
index 0000000..3540d6b
Binary files /dev/null and b/Crow/Images/screenshot.png differ
diff --git a/Crow/Images/screenshot2.png b/Crow/Images/screenshot2.png
new file mode 100644 (file)
index 0000000..46a7bec
Binary files /dev/null and b/Crow/Images/screenshot2.png differ
diff --git a/Crow/Templates/ArrowBut.template b/Crow/Templates/ArrowBut.template
new file mode 100755 (executable)
index 0000000..2d3bb29
--- /dev/null
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<Border Name="Content"
+       Background="vgradient|0:White|0.1:LightGrey|0.9:LightGrey|1:Black" Foreground="DarkGrey" 
+       MouseEnter="{Foreground=White}"
+       MouseLeave="{Foreground=DarkGrey}"
+       MouseDown="{Background=vgradient|0:Black|0.1:LightGrey|0.9:LightGrey|1:White}"
+       MouseUp="{Background=vgradient|0:White|0.1:LightGrey|0.9:LightGrey|1:Black}"
+       >
+</Border>
diff --git a/Crow/Templates/Button.template b/Crow/Templates/Button.template
new file mode 100755 (executable)
index 0000000..d2f6c60
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<Border Background="{./Background}" MinimumSize="50,20" Name="Content"
+       Foreground="Transparent" CornerRadius="{../CornerRadius}" BorderWidth="1"
+       MouseEnter="{Foreground=vgradient|0:White|0.2:Grey|0.9:Grey|1:Black;caption.Foreground=White}"
+       MouseLeave="{Foreground=Transparent;caption.Foreground=LightGrey}"
+       MouseDown="{Foreground=vgradient|0:Black|0.05:Grey|0.85:Grey|1:White}"
+       MouseUp="{Foreground=vgradient|0:White|0.2:Grey|0.9:Grey|1:Black}"                  
+       >
+       <Label Font="{./Font}" Name="caption" Margin="3" Foreground="LightGrey" Text="{./Caption}"/>
+</Border>
diff --git a/Crow/Templates/CheckBox.template b/Crow/Templates/CheckBox.template
new file mode 100755 (executable)
index 0000000..f24b50a
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<HorizontalStack Style="Control" Background="{./Background}">
+       <Image Style="Icon" Path="#Crow.Icons.checkbox.svg"
+               SvgSub="{./IsChecked}"/>
+       <Label Font="{./Font}" Text="{./Caption}" Foreground="{./Foreground}"/>
+</HorizontalStack>
\ No newline at end of file
diff --git a/Crow/Templates/CheckBox2.template b/Crow/Templates/CheckBox2.template
new file mode 100644 (file)
index 0000000..0fa0ffe
--- /dev/null
@@ -0,0 +1,7 @@
+<Border Foreground="Transparent" MouseEnter="{Foreground=Grey}" MouseLeave="{Foreground=Transparent}">
+       <Label Font="{./Font}" Text="{./Caption}"
+               Margin="1"
+               Background="{./Background}"
+               Foreground="{./Foreground}"
+               TextAlignment="Center"/>
+</Border>
\ No newline at end of file
diff --git a/Crow/Templates/ColorPicker.template b/Crow/Templates/ColorPicker.template
new file mode 100755 (executable)
index 0000000..7196585
--- /dev/null
@@ -0,0 +1,44 @@
+<?xml version="1.0"?>
+<Border Background="{./Background}"    Foreground="{./Foreground}"
+               CornerRadius="{./CornerRadius}" BorderWidth="1">
+               <HorizontalStack Spacing="0">
+                       <VerticalStack Margin="5">
+                               <SaturationValueSelector S="{²./S}" V="{²./V}" Focusable="true" Name="colorSelector" Margin="0"
+                                       Foreground="{../hueSelector.HueColor}"
+                                       Width="128" Height="128"/>
+                               <HueSelector Hue="{²./H}" Focusable="true" Name="hueSelector" Margin="0" Width="128" Height="20"/>
+                       </VerticalStack>
+                       <VerticalStack Margin="5" Spacing="1">
+                               <GraphicObject Width="34" Height="21" Background="{./SelectedColor}"/>
+                               <Label Focusable="true" Selectable="true" Text="{./SelectedColor}" />                           
+                               <HorizontalStack Height="Fit">
+                                       <Label Text="R" Width="Fit"/>
+                                       <Spinner Style="ColorSpinner" Value="{²./R}" Width="40"  />
+                               </HorizontalStack>
+                               <HorizontalStack Height="Fit">
+                                       <Label Text="G" Width="Fit"/>
+                                       <Spinner Style="ColorSpinner" Value="{²./G}" Width="40"  />
+                               </HorizontalStack>
+                               <HorizontalStack Height="Fit">
+                                       <Label Text="B" Width="Fit"/>
+                                       <Spinner Style="ColorSpinner" Value="{²./B}" Width="40"  />
+                               </HorizontalStack>
+                               <HorizontalStack Height="Fit">
+                                       <Label Text="A" Width="Fit"/>
+                                       <Spinner Style="ColorSpinner" Value="{²./A}" Width="40"  />
+                               </HorizontalStack>
+                               <HorizontalStack Height="Fit">
+                                       <Label Text="H" Width="Fit"/>
+                                       <Spinner Style="HSVSpinner" Value="{²./H}" Width="40"  />
+                               </HorizontalStack>
+                               <HorizontalStack Height="Fit">
+                                       <Label Text="S" Width="Fit"/>
+                                       <Spinner Style="HSVSpinner" Value="{²./S}" Width="40"  />
+                               </HorizontalStack>
+                               <HorizontalStack Height="Fit">
+                                       <Label Text="V" Width="Fit"/>
+                                       <Spinner Style="HSVSpinner" Value="{²./V}" Width="40"  />
+                               </HorizontalStack>
+                       </VerticalStack>
+               </HorizontalStack>
+</Border>
diff --git a/Crow/Templates/ComboBox.template b/Crow/Templates/ComboBox.template
new file mode 100755 (executable)
index 0000000..f08a839
--- /dev/null
@@ -0,0 +1,30 @@
+<?xml version="1.0"?>
+<Popper Caption="{./SelectedItem}" Name="popper" PopDirection="Bottom" Foreground="{./Foreground}" Background="{./Background}">
+       <Template>
+               <CheckBox Caption="{./Caption}" IsChecked="{²./IsPopped}" Foreground="{./Foreground}" Background="{./Background}">
+                       <Template>
+                               <Border CornerRadius="0" Foreground="LightGrey">
+                                       <HorizontalStack Margin="0" Spacing="1">
+                                               <TextBox MinimumSize="80,10" Margin="1" Foreground="Black" Background="White"
+                                                       Text="{./Caption}"/>
+                                               <Button Width="14" Height="14" Focusable="false"
+                                                       Template="#Crow.ArrowBut.template">
+                                                       <Image Margin="0"  Path="#Crow.Icons.updown.svg" SvgSub="down"/>
+                                               </Button>
+                                       </HorizontalStack>
+                               </Border>
+                       </Template>
+               </CheckBox>
+       </Template>
+       <Border Background="DimGrey" BorderWidth="1" Margin="1"
+               MinimumSize="{../../MinimumPopupSize}" Fit="true">
+               <Scroller Name="scroller1" Margin="2" 
+                       MaximumSize="0,200"
+                       HorizontalAlignment="Left">
+                       <VerticalStack
+                               Height="Fit" Name="ItemsContainer" Margin="0"
+                               HorizontalAlignment="Left"
+                               VerticalAlignment="Top"/>
+               </Scroller>
+       </Border>
+</Popper>
diff --git a/Crow/Templates/ContextMenu.template b/Crow/Templates/ContextMenu.template
new file mode 100644 (file)
index 0000000..7fc8dcc
--- /dev/null
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<MenuItem MinimumSize="20,20" Height="Fit" Width="160" Caption="Context Menu" Data="{ContextCommands}" Orientation="Vertical"
+       IsOpened ="true" Visible="{/IsOpened}" SelectionBackground="Transparent"
+       Background="Red">
+       <Template>
+               <HorizontalStack>
+                       <Border Background="DimGrey" Foreground="DimGrey" CornerRadius="5">
+                       <GenericStack Orientation="{./Orientation}" Name="ItemsContainer"
+                               Margin="2"/>
+                       </Border>
+               </HorizontalStack>
+       </Template>
+       <ItemTemplate>
+               <MenuItem Command="{}" Width="150" PopWidth="120" SelectionBackground="Transparent" IsEnabled="{CanExecute}">
+                       <Template>
+                               <Popper Font="{./Font}" Caption="{./Caption}"  Background="{./Background}" PopDirection="{./PopDirection}"
+                                       Foreground = "{./Foreground}" CanPop="{./HasChildren}" MouseDown="./onMI_Click"
+                                       IsPopped="{²./IsOpened}" PopWidth="{./PopWidth}" PopHeight="{./PopHeight}">
+                                       <Template>
+                                               <Border Name="border1"
+                                                               CornerRadius="2"
+                                                               MouseEnter="{Foreground=vgradient|0:White|0.2:Grey|0.9:Grey|1:Black}"
+                                                               MouseLeave="{Foreground=Transparent}"
+                                                               MouseDown="{Foreground=vgradient|0:Black|0.05:Grey|0.85:Grey|1:White}"
+                                                               MouseUp="{Foreground=vgradient|0:White|0.2:Grey|0.9:Grey|1:Black}"
+                                                               MinimumSize = "60,0"
+                                                               Foreground="Transparent"
+                                                               Background="{./Background}">
+                                                               <Label Text="{./Caption}"
+                                                                       Foreground="{./Foreground}"
+                                                                       Margin="3" HorizontalAlignment="Left"
+                                                                       Font="{./Font}" />
+                                               </Border>
+                                       </Template>
+                                       <Border Foreground="DimGrey" Width="{../PopWidth}" Height="{../PopHeight}" Background="DimGrey">
+                                               <VerticalStack Name="ItemsContainer"/>
+                                       </Border>
+                               </Popper>
+                       </Template>
+               </MenuItem>
+       </ItemTemplate>
+</MenuItem>
+
diff --git a/Crow/Templates/DefaultItem.template b/Crow/Templates/DefaultItem.template
new file mode 100755 (executable)
index 0000000..fc13ab4
--- /dev/null
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<Container Fit="true" Margin="0" Focusable="true"
+               HorizontalAlignment="Left"
+               MouseEnter="{Background=SteelBlue}"
+               MouseLeave="{Background=Transparent}">
+       <Label Text="{}"/>
+</Container>
+
diff --git a/Crow/Templates/DirectoryView.template b/Crow/Templates/DirectoryView.template
new file mode 100755 (executable)
index 0000000..9faab17
--- /dev/null
@@ -0,0 +1,44 @@
+<?xml version="1.0"?>
+<TreeView IsRoot="true" Name="treeView" Data="{./FileSystemEntries}" Background="{./Background}"
+               SelectedItemChanged="./onSelectedItemChanged">
+       <ItemTemplate DataType="System.IO.FileInfo">
+               <Border CornerRadius="2" Margin="0" Focusable="true"  Height="Fit" Width="Stretched" Foreground="Transparent"
+                               MouseEnter="{Foreground=DimGrey}"
+                               MouseLeave="{Foreground=Transparent}">
+                       <HorizontalStack>
+                               <Image Margin="1" Width="14" Height="14"
+                                       Path="#Crow.Icons.file.svg"/>
+                               <Label Text="{Name}" Width="Stretched"/>
+                       </HorizontalStack>
+               </Border>
+       </ItemTemplate>
+       <ItemTemplate DataType="System.IO.DirectoryInfo" Data="GetFileSystemInfos">
+               <Expandable Caption="{Name}" >
+                       <Template>
+                               <VerticalStack>
+                                       <Border CornerRadius="2" Margin="0" Height="Fit" MouseDoubleClick="./onClickForExpand"
+                                                       Foreground="Transparent"
+                                                       MouseEnter="{Foreground=DimGrey}"
+                                                       MouseLeave="{Foreground=Transparent}">
+                                               <HorizontalStack Spacing="1">
+                                                       <Image Margin="1" Width="9" Height="9" Focusable="true" MouseDown="./onClickForExpand"
+                                                               Path="{./Image}"
+                                                               Visible="{./IsExpandable}"
+                                                               SvgSub="{./IsExpanded}"
+                                                               MouseEnter="{Background=LightGrey}"
+                                                               MouseLeave="{Background=Transparent}"/>
+                                                       <Image Margin="1" Width="14" Height="14"
+                                                               Path="#Crow.Icons.folder.svg"/>
+                                                       <Label Text="{./Caption}"/>
+                                               </HorizontalStack>
+                                       </Border>
+                                       <Container Name="Content" Visible="false"/>
+                               </VerticalStack>
+                       </Template>
+                       <HorizontalStack Height="Fit">
+                               <GraphicObject Width="12" Height="10"/>
+                               <VerticalStack Height="Fit" Name="ItemsContainer"/>
+                       </HorizontalStack>
+               </Expandable>
+       </ItemTemplate>
+</TreeView>
diff --git a/Crow/Templates/DockWindow.template b/Crow/Templates/DockWindow.template
new file mode 100755 (executable)
index 0000000..1763b08
--- /dev/null
@@ -0,0 +1,31 @@
+<?xml version="1.0"?>
+<!--<GraphicObject Background="{./Background}"/>-->
+<Border BorderWidth="1" Foreground="Black" CornerRadius="{./CornerRadius}"
+                               Background="{./Background}"
+                               MouseEnter="./onBorderMouseEnter"
+                               MouseLeave="./onBorderMouseLeave">
+       <VerticalStack Spacing="0">
+               <HorizontalStack Visible="{./IsDocked}" Height="Fit" Margin="1" Background="vgradient|0:0.3,0.5,0.8,0.9|1:0.1,0.1,0.1,0.9">
+                       <Label  Text="{./Caption}" TextAlignment="Left" Width="Stretched"
+                                        Foreground="White" />
+                       <Border CornerRadius="6" BorderWidth="1" Foreground="Transparent"  Height="10" Width="10"
+                               MouseEnter="{Foreground=White}" MouseLeave="{Foreground=Transparent}">
+                               <Image Focusable="true" Name="Image" Margin="0" Path="#Crow.Icons.exit2.svg"
+                                        MouseClick="./butQuitPress"/>
+                       </Border>
+               </HorizontalStack>
+               <HorizontalStack Background="vgradient|0:0.5,0.6,0.5,0.5|1:0.2,0.3,0.3,0.7"
+                               Name="hs" Margin="0" Spacing="0" Height="Fit" Visible="{./IsFloating}">
+                       <GraphicObject Width="5"/>
+                       <Image Margin="1" Width="10" Height="10" Path="{./Icon}"/>
+                       <Label Width="Stretched" Foreground="White" Margin="1" TextAlignment="Left" Text="{./Caption}" />
+                       <Border CornerRadius="6" BorderWidth="1" Foreground="Transparent"  Height="10" Width="10"
+                               MouseEnter="{Foreground=White}" MouseLeave="{Foreground=Transparent}">
+                               <Image Focusable="true" Name="Image" Margin="0" Path="#Crow.Icons.exit2.svg"
+                                        MouseClick="./butQuitPress"/>
+                       </Border>
+                       <GraphicObject Width="5"/>
+               </HorizontalStack>
+               <Container Name="Content" MinimumSize="50,50"/>
+       </VerticalStack>
+</Border>
diff --git a/Crow/Templates/Expandable.template b/Crow/Templates/Expandable.template
new file mode 100755 (executable)
index 0000000..e0ba29b
--- /dev/null
@@ -0,0 +1,17 @@
+<?xml version="1.0"?>
+<Border Style="ControlBorder" Foreground="{./Foreground}" Background="{./Background}">
+       <VerticalStack>
+               <HorizontalStack Spacing="1" Height="Fit" Focusable="true" MouseDoubleClick="./onClickForExpand">
+                       <Container Margin="1" Width="9" Height="9" MouseDown="./onClickForExpand"
+                                                                                                               MouseEnter="{Background=LightGrey}"
+                                                                                                               MouseLeave="{Background=Transparent}">
+                               <Image
+                                       Path="#Crow.Icons.expandable.svg"
+                                       Visible="{./IsExpandable}"
+                                       SvgSub="{./IsExpanded}"/>
+                       </Container>
+                       <Label Style="ControlCaption" Text="{./Caption}"/>
+               </HorizontalStack>
+               <Container Name="Content" Visible="false"/>
+       </VerticalStack>
+</Border>
diff --git a/Crow/Templates/FileDialog.template b/Crow/Templates/FileDialog.template
new file mode 100644 (file)
index 0000000..50be219
--- /dev/null
@@ -0,0 +1,64 @@
+<?xml version="1.0"?>
+<Border BorderWidth="1" Foreground="White" CornerRadius="{./CornerRadius}"
+                               Background="{./Background}"
+                               MouseEnter="./onBorderMouseEnter"
+                               MouseLeave="./onBorderMouseLeave">
+       <VerticalStack Spacing="0">
+               <HorizontalStack Background="{./TitleBarBackground}"
+                               Name="hs" Margin="2" Spacing="0" Height="Fit">
+                       <GraphicObject Width="5"/>
+                       <Image Margin="1" Width="12" Height="12" Path="{./Icon}"/>
+                       <Label Width="Stretched" Foreground="{./TitleBarForeground}" Margin="1" TextAlignment="Center" Text="{./Caption}" />
+                       <Border CornerRadius="0" BorderWidth="1" Foreground="Transparent"  Height="12" Width="12"
+                               MouseEnter="{Foreground=White}" MouseLeave="{Foreground=Transparent}">
+                               <Image Focusable="true" Name="Image" Margin="0" Width="Stretched" Height="Stretched" Path="#Crow.Icons.exit2.svg"
+                                        MouseClick="./butQuitPress"/>
+                       </Border>
+                       <GraphicObject Width="5"/>
+               </HorizontalStack>
+               <Container Name="Content" MinimumSize="50,50" Background="Jet">
+                       <VerticalStack Margin="1">
+                               <HorizontalStack Height="Fit">
+                                       <Button Fit="true" Caption="Up" MouseClick="./goUpDirClick">
+                                               <Image Margin="2" Width="14" Height="14"
+                                                       Path="#Crow.Icons.level-up.svg"/>
+                                       </Button>
+                                       <TextBox Style="TxtInFileDialog" Text="{²./CurrentDirectory}"/>
+                               </HorizontalStack>
+                               <DirectoryView ShowHidden="{²../cbShowHidden.IsChecked}" FileMask="{²../txtFileMask.Text}" ShowFiles="{²../cbShowFiles.IsChecked}" Name="fv" CurrentDirectory="{./CurrentDirectory}" SelectedItemChanged="./onFVSelectedItemChanged"
+                                               Width="100%" Margin="0" MouseDoubleClick="./onFileSelect">
+                                       <Template>
+                                               <ListBox ItemTemplate="#Crow.FileItems.template" Name="fileView" Data="{./FileSystemEntries}"
+                                                       SelectedItemChanged="./onSelectedItemChanged">
+                                                       <Template>
+                                                               <HorizontalStack>
+                                                                       <Scroller Name="scroller1">
+                                                                               <VerticalStack Height="Fit" VerticalAlignment="Top"
+                                                                                       Name="ItemsContainer" Margin="0" Spacing="1"/>
+                                                                       </Scroller>
+                                                                       <ScrollBar Name="scrollbar1" Orientation="Vertical"
+                                                                               Value="{²../scroller1.ScrollY}"        Maximum="{../scroller1.MaxScrollY}" 
+                                                                               CursorSize="{../scroller1.ChildHeightRatio}"
+                                                                               LargeIncrement="{../scroller1.PageHeight}" SmallIncrement="30"
+                                                                               Width="14" />
+                                                               </HorizontalStack>
+                                                       </Template>
+                                               </ListBox>
+                                       </Template>
+                               </DirectoryView>
+                               <HorizontalStack Height="Fit">
+                                       <TextBox Style="TxtInFileDialog" Text="{²./SelectedFile}"/>
+                                       <TextBox Style="TxtInFileDialog" Width="50" Name="txtFileMask" Text="{²./SearchPattern}"/>
+                               </HorizontalStack>
+                               <HorizontalStack Margin="5" Fit="true" HorizontalAlignment="Right">
+                                       <CheckBox Style="CheckBoxAlt" Name="cbShowFiles" Caption="Show Files" IsChecked="{²./ShowFiles}"/>
+                                       <CheckBox Style="CheckBoxAlt" Name="cbShowHidden" Caption="Show Hidden" IsChecked="{²./ShowHidden}"/>
+                               </HorizontalStack>
+                               <HorizontalStack Fit="true" HorizontalAlignment="Right">
+                                       <Button Caption="Ok" MouseClick="./onFileSelect"/>
+                                       <Button Caption="Cancel" MouseClick="./onCancel"/>
+                               </HorizontalStack>
+                       </VerticalStack>
+               </Container>
+       </VerticalStack>
+</Border>
diff --git a/Crow/Templates/FileItems.template b/Crow/Templates/FileItems.template
new file mode 100644 (file)
index 0000000..452a402
--- /dev/null
@@ -0,0 +1,25 @@
+<ItemTemplate>
+       <GraphicObject Height="16" Background="Red"/>
+</ItemTemplate>
+<ItemTemplate DataType="System.IO.FileInfo">
+       <HorizontalStack Focusable="true"  Height="Fit">
+               <Image Margin="2" Width="16" Height="16"
+                       Path="#Crow.Icons.file.svg"/>
+                       <Label Text="{Name}" Width="Stretched"
+                               MouseEnter="{Background=RoyalBlue}"
+                               MouseLeave="{Background=Transparent}"/>
+       </HorizontalStack>
+</ItemTemplate>
+<ItemTemplate DataType="System.IO.DirectoryInfo">
+       <Border Foreground="Transparent" Focusable="true" Height="Fit">
+               <HorizontalStack
+                               MouseEnter="{Background=RoyalBlue}"
+                               MouseLeave="{Background=Transparent}">
+                       <Image Margin="2" Width="16" Height="16"
+                               Path="#Crow.Icons.folder.svg"/>
+                       <Label Text="{Name}" Width="Stretched"/>
+                       <Label Text="{LastAccessTime}" />
+               </HorizontalStack>
+       </Border>
+</ItemTemplate>
+
diff --git a/Crow/Templates/GroupBox.template b/Crow/Templates/GroupBox.template
new file mode 100755 (executable)
index 0000000..199cfe9
--- /dev/null
@@ -0,0 +1,13 @@
+<?xml version="1.0"?>
+<Container Background="{./Background}">
+       <Group>
+               <VerticalStack Spacing="0">
+                       <GraphicObject Height="6"/>
+                       <Border  CornerRadius="5" BorderWidth="1" Margin="10" Foreground="{./Foreground}">
+                               <Container Name="Content" Margin="0" MinimumSize="70,10"/>
+                       </Border>
+               </VerticalStack>
+               <Label Text="{./Caption}" VerticalAlignment="Top" Left="8"
+                       Background="Clear" Margin="1"/>
+       </Group>
+</Container>
\ No newline at end of file
diff --git a/Crow/Templates/HScrollBar.template b/Crow/Templates/HScrollBar.template
new file mode 100755 (executable)
index 0000000..a4ab641
--- /dev/null
@@ -0,0 +1,20 @@
+<?xml version="1.0"?>
+<Border BorderWidth="1" Foreground="{./Foreground}" Background="{./Background}">
+       <GenericStack Orientation="{./Orientation}" Spacing="0">
+               <Shape Style="HArrowBut" MouseDown="./onScrollBack"
+            Margin="1" Width="6" Size="10,10" Path="M 0.5,4.5 L 9.5,0.5 L 9.5,9.5 Z"/>
+               <Slider Name="Slider"                   
+                       Orientation="{./Orientation}"
+                       Value="{²./Value}"
+                       Maximum="{./Maximum}"
+                       CursorSize="{./CursorSize}"
+                       Height="{./HeightPolicy}" Width="{./WidthPolicy}"
+                       LargeIncrement="{./LargeIncrement}"
+                       SmallIncrement="{./SmallIncrement}"
+                       CursorColor="vgradient|0:Silver|1:Grey"
+            Background="Transparent"
+                       Foreground="{./Foreground}"/>
+               <Shape Style="HArrowBut" MouseDown="./onScrollForth"
+            Margin="1" Width="6" Size="10,10" Path="M 0.5,0.5 L 9.5,4.5 L 0.5,9.5 Z"/>
+       </GenericStack>
+</Border>
\ No newline at end of file
diff --git a/Crow/Templates/ListBox.template b/Crow/Templates/ListBox.template
new file mode 100755 (executable)
index 0000000..a1aea50
--- /dev/null
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<Border BorderWidth="1" Margin="1" MinimumSize="10,10">
+       <Scroller  Name="scroller1" Margin="1" >
+               <VerticalStack
+                       Height="Fit" Name="ItemsContainer" Margin="0" VerticalAlignment="Top"/>
+       </Scroller>
+</Border>
diff --git a/Crow/Templates/Menu.template b/Crow/Templates/Menu.template
new file mode 100644 (file)
index 0000000..99ae554
--- /dev/null
@@ -0,0 +1,2 @@
+<?xml version="1.0"?>
+<GenericStack Orientation="{./Orientation}" Name="ItemsContainer" Margin="0" Background="{./Background}"/>
diff --git a/Crow/Templates/MenuItem.template b/Crow/Templates/MenuItem.template
new file mode 100644 (file)
index 0000000..4f77fb4
--- /dev/null
@@ -0,0 +1,26 @@
+<?xml version="1.0"?>
+<HorizontalStack>
+<Popper Font="{./Font}" Caption="{./Caption}"  Background="{./Background}" PopDirection="{./PopDirection}"
+       Foreground = "{./Foreground}" CanPop="{./HasChildren}" MouseClick="./onMI_Click"
+       IsPopped="{²./IsOpened}" PopWidth="{./PopWidth}" PopHeight="{./PopHeight}">
+       <Template>
+               <CheckBox IsChecked="{²./IsPopped}" Caption="{./Caption}" Background="{./Background}" Foreground="{./Foreground}">
+                       <Template>              
+                               <Border Name="border1"
+                                               MinimumSize = "60,0"
+                                               Foreground="Transparent"
+                                               Background="{./Background}">
+                                               <Label Text="{./Caption}"
+                                                       Foreground="{./Foreground}"
+                                                       Margin="2" HorizontalAlignment="Left"
+                                                       Font="{./Font}" />
+                               </Border>
+                       </Template>             
+               </CheckBox>
+       </Template>
+       <Border Foreground="DimGrey" Width="{../PopWidth}" Height="{../PopHeight}" Background="vgradient|0:DimGrey|1:Black">
+               <VerticalStack Name="ItemsContainer"/>
+       </Border>
+</Popper>
+<GraphicObject Background="Green" Width="5" Height="5" Visible="{./AutomaticOpening}"/>
+</HorizontalStack>
diff --git a/Crow/Templates/MessageBox.template b/Crow/Templates/MessageBox.template
new file mode 100644 (file)
index 0000000..54016de
--- /dev/null
@@ -0,0 +1,34 @@
+<?xml version="1.0"?>
+<Border        CornerRadius="0"
+                               MouseEnter="./onBorderMouseEnter"
+                               MouseLeave="./onBorderMouseLeave">
+       <VerticalStack Background="{./Background}">
+               <Border BorderWidth="0" Foreground="White" Height="Fit" Width="Stretched" MinimumSize="200,0"
+                               Background="{./TitleBarBackground}">
+                       <HorizontalStack Name="hs" Margin="2" Spacing="1" Height="Fit" >
+                               <GraphicObject Width="5" Height="5"/>
+                               <Image Margin="1" Width="12" Height="12" Path="{./Icon}"/>
+                               <Label Width="Stretched" Foreground="{./TitleBarForeground}" Margin="1" TextAlignment="Center" Text="{./Caption}" />
+                               <Border CornerRadius="3" BorderWidth="1" Foreground="Transparent"  Height="12" Width="12"
+                                       MouseEnter="{Foreground=White}" MouseLeave="{Foreground=Transparent}">
+                                       <Image Focusable="true" Name="Image" Path="#Crow.Icons.exit2.svg"
+                                                MouseClick="./butQuitPress"/>
+                               </Border>
+                               <GraphicObject Width="5" Height="5"/>
+                       </HorizontalStack>
+               </Border>
+               <HorizontalStack Margin="5" Width="Stretched">
+                       <Image Name="Image" Width="50" Height="30" Path="{./MsgIcon}" />
+                       <Label Margin="5" Font="{./Font}" Width="Stretched" Text="{./Message}"                          
+                               TextAlignment="Center"
+                               Multiline="true" />             
+               </HorizontalStack>
+               <HorizontalStack Margin="4" Spacing="0" Width="Fit" Height="Fit" HorizontalAlignment="Right">
+                       <Button Width="Fit" Caption="{./OkMessage}" MouseClick="./onOkButtonClick" />
+                       <Button Width="Fit" Visible="{./NoButIsVisible}"
+                               Caption="{./NoMessage}" MouseClick="./onNoButtonClick" />
+                       <Button Width="Fit" Visible="{./CancelButIsVisible}"
+                               Caption="{./CancelMessage}" MouseClick="./onCancelButtonClick" />
+               </HorizontalStack>
+       </VerticalStack>
+</Border>
diff --git a/Crow/Templates/Popper.template b/Crow/Templates/Popper.template
new file mode 100755 (executable)
index 0000000..47c6034
--- /dev/null
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<CheckBox Caption="{./Caption}" IsChecked="{²./IsPopped}" Foreground="{./Foreground}" Background="{./Background}">
+       <Template>
+               <Border Style="ControlBorder" Foreground="{./Foreground}" Background="{./Background}">
+                       <HorizontalStack Spacing="1">
+                               <Image Style="Icon" Margin="1" Width="9" Height="9"     
+                                       MouseEnter="{Background=White}" MouseLeave="{Background=Transparent}"
+                                       Background="{./Background}"
+                                       Path="#Crow.Icons.expandable.svg" SvgSub="{./IsChecked}"/>
+                               <Label Style="ControlCaption" Text="{./Caption}" />
+                       </HorizontalStack>
+               </Border>
+       </Template>
+</CheckBox>
diff --git a/Crow/Templates/RadioButton.template b/Crow/Templates/RadioButton.template
new file mode 100755 (executable)
index 0000000..8e97a78
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<HorizontalStack Style="Control" Background="{./Background}">
+       <Image Style="Icon" Path="#Crow.Icons.radiobutton.svg"
+               SvgSub="{./IsChecked}"/>
+       <Label Text="{./Caption}"/>
+</HorizontalStack>
\ No newline at end of file
diff --git a/Crow/Templates/ScrollBar.template b/Crow/Templates/ScrollBar.template
new file mode 100755 (executable)
index 0000000..158671e
--- /dev/null
@@ -0,0 +1,20 @@
+<?xml version="1.0"?>
+<Border BorderWidth="1" Foreground="{./Foreground}" Background="{./Background}">
+       <GenericStack Orientation="{./Orientation}" Spacing="0">
+               <Shape Style="ArrowBut" MouseDown="./onScrollBack"
+            Margin="1" Height="6" Size="10,10" Path="M 4.5,0.5 L 9.5,9.5 L 0.5,9.5 Z"/>
+               <Slider Name="Slider"                   
+                       Orientation="{./Orientation}"
+                       Value="{²./Value}"
+                       Maximum="{./Maximum}"
+                       CursorSize="{./CursorSize}"
+                       Height="{./HeightPolicy}" Width="{./WidthPolicy}"
+                       LargeIncrement="{./LargeIncrement}"
+                       SmallIncrement="{./SmallIncrement}"
+                       CursorColor="hgradient|0:Silver|1:Grey"
+                       Foreground="{./Foreground}"
+            Background="Transparent"/>
+               <Shape Style="ArrowBut" MouseDown="./onScrollForth"
+             Margin="1" Height="6" Size="10,10" Path="M 0.5,0.5 L 9.5,0.5 L 4.5,9.5 Z"/>
+       </GenericStack>
+</Border>
\ No newline at end of file
diff --git a/Crow/Templates/ScrollingListBox.template b/Crow/Templates/ScrollingListBox.template
new file mode 100644 (file)
index 0000000..1e7304f
--- /dev/null
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<Border BorderWidth="1" Background="{./Background}">
+       <HorizontalStack Margin="1">
+               <Scroller Name="scroller1" 
+                               Margin="2">
+                       <VerticalStack Height="Fit" MinimumSize="10,10"
+                               Name="ItemsContainer" Margin="0" VerticalAlignment="Top"/>
+               </Scroller>
+               <ScrollBar Name="scrollbar1" Value="{²../scroller1.ScrollY}"
+                       LargeIncrement="{../scroller1.PageHeight}" SmallIncrement="30" CursorSize="{../scroller1.ChildHeightRatio}"
+                       Maximum="{../scroller1.MaxScrollY}" Orientation="Vertical" 
+                       Width="14" />
+       </HorizontalStack>
+</Border>
diff --git a/Crow/Templates/Slider.template b/Crow/Templates/Slider.template
new file mode 100755 (executable)
index 0000000..9c7bb70
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0"?>
diff --git a/Crow/Templates/Spinner.template b/Crow/Templates/Spinner.template
new file mode 100755 (executable)
index 0000000..60d7ccf
--- /dev/null
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<HorizontalStack MinimumSize="40,13" Name="hstack" Margin="0" Spacing="0">
+       <Border BorderWidth="1" Width="75%"  Background="White" 
+               Foreground="{./Foreground}" Margin="0">
+               <TextBox Foreground="{./Foreground}" Font="{./Font}" Width="Stretched"
+                       Text="{²./Value}" TextAlignment="Right" Margin="0"/>
+       </Border>
+       <VerticalStack MinimumSize="13,13" Width="25%" Height="Stretched" Spacing="0" Margin="0">
+               <Shape Style="ArrowBut" Height="50%" MouseDown="./onUp" Path="M 5.5,0.5 L 10.5,6.5 L 0.5,6.5 Z"/>                       
+               <Shape Style="ArrowBut" Height="50%" MouseDown="./onDown" Path="M 0.5,0.5 L 10.5,0.5 L 5.5,6.5 Z"/>                     
+       </VerticalStack>
+</HorizontalStack>
diff --git a/Crow/Templates/TabItem.template b/Crow/Templates/TabItem.template
new file mode 100644 (file)
index 0000000..b06c9e4
--- /dev/null
@@ -0,0 +1,20 @@
+<?xml version="1.0"?>
+<GenericStack Orientation="Vertical" Spacing="0"
+               Background="{./Background}"
+               MouseEnter="{/caption.Foreground=White}"
+               MouseLeave="{/caption.Foreground=Grey}">
+       <HorizontalStack Margin="2" Left="{./TabOffset}"
+               Name="TabTitle"
+               HorizontalAlignment="Left"
+               Height="{./TabHeight}"
+               Width="{./TabWidth}">
+               <Label Name="caption" Text="{./Caption}" Foreground="Grey"/>
+               <Border CornerRadius="5" BorderWidth="1" Foreground="Transparent"  Height="12" Width="12"
+                                       MouseEnter="{Foreground=White}" MouseLeave="{Foreground=Transparent}">
+                       <Image Focusable="true" Name="Image" Margin="0" Width="Stretched" Height="Stretched" Path="#Crow.Icons.exit2.svg"
+                                MouseClick="./butCloseTabClick"/>
+               </Border>
+       </HorizontalStack>
+       <Container Name="Content"/>
+</GenericStack>
+
diff --git a/Crow/Templates/ToolWindow.template b/Crow/Templates/ToolWindow.template
new file mode 100755 (executable)
index 0000000..16f0c71
--- /dev/null
@@ -0,0 +1,24 @@
+<?xml version="1.0"?>
+<Border BorderWidth="1" Foreground="White" CornerRadius="{./CornerRadius}"
+                               Background="{./Background}"
+                               MouseEnter="./onBorderMouseEnter"
+                               MouseLeave="./onBorderMouseLeave">
+       <VerticalStack Spacing="0">
+<!--           <Border Name="TitleBar" BorderWidth="1" Foreground="White" Width="{./WidthPolicy}" Height="Fit"
+                               Background="vgradient|0:0.4,0.6,0.0,0.5|1:0.0,0.8,0.8,0.9">-->
+                       <HorizontalStack Background="{./TitleBarBackground}"
+                                       Name="hs" Margin="2" Spacing="0" Height="Fit">
+                               <GraphicObject Width="5"/>
+                               <Image Margin="1" Width="12" Height="12" Path="{./Icon}"/>
+                               <Label Width="Stretched" Foreground="{./TitleBarForeground}" Margin="1" TextAlignment="Center" Text="{./Caption}" />
+                               <Border CornerRadius="6" BorderWidth="1" Foreground="Transparent"  Height="12" Width="12"
+                                       MouseEnter="{Foreground=White}" MouseLeave="{Foreground=Transparent}">
+                                       <Image Focusable="true" Name="Image" Margin="0" Width="Stretched" Height="Stretched" Path="#Crow.Icons.exit2.svg"
+                                                MouseClick="./butQuitPress"/>
+                               </Border>
+                               <GraphicObject Width="5"/>
+                       </HorizontalStack>
+<!--           </Border>-->
+               <Container Name="Content" MinimumSize="50,50" Background="0.5,0.5,0.5,0.5"/>
+       </VerticalStack>
+</Border>
diff --git a/Crow/Templates/Tooltip.template b/Crow/Templates/Tooltip.template
new file mode 100644 (file)
index 0000000..277ac7c
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<Border Fit="true" Foreground="DimGrey" Background="Khaki">
+       <Label Margin="3" Foreground="DimGrey" Multiline="true" Text="{Tooltip}"/>
+</Border>
diff --git a/Crow/Templates/TreeView.template b/Crow/Templates/TreeView.template
new file mode 100644 (file)
index 0000000..0f4d9eb
--- /dev/null
@@ -0,0 +1,15 @@
+<?xml version="1.0"?>
+<HorizontalStack>
+       <Scroller  Name="scroller1" Margin="1"
+               Background="{./Background}"
+               ScrollY="{../scrollbar1.Value}">
+               <VerticalStack
+                       Height="Fit" Name="ItemsContainer" Margin="0" VerticalAlignment="Top"/>
+       </Scroller>
+       <ScrollBar
+               Name="scrollbar1"
+               LargeIncrement="{../scroller1.PageHeight}" SmallIncrement="30"
+               CursorSize="{../scroller1.ChildHeightRatio}"
+               Value="{²../scroller1.ScrollY}"
+               Maximum="{../scroller1.MaxScrollY}" Orientation="Vertical"/>
+</HorizontalStack>
diff --git a/Crow/Templates/Window.template b/Crow/Templates/Window.template
new file mode 100755 (executable)
index 0000000..1e66a6d
--- /dev/null
@@ -0,0 +1,39 @@
+<?xml version="1.0"?>
+<Border BorderWidth="1" Foreground="Grey" CornerRadius="{./CornerRadius}"
+                               Background="{./Background}"
+                               MouseEnter="./onBorderMouseEnter"
+                               MouseLeave="./onBorderMouseLeave">
+       <VerticalStack Spacing="0">
+<!--           <Border Name="TitleBar" BorderWidth="1" Foreground="White" Width="{./WidthPolicy}" Height="Fit"
+                               Background="vgradient|0:0.4,0.6,0.0,0.5|1:0.0,0.8,0.8,0.9">-->
+                       <HorizontalStack Background="{./TitleBarBackground}"
+                                       Name="hs" Margin="2" Spacing="0" Height="Fit">
+                               <GraphicObject Width="5"/>
+                               <Image Margin="1" Width="12" Height="12" Path="{./Icon}"/>
+                               <Label Width="Stretched" Foreground="{./TitleBarForeground}" Margin="2" TextAlignment="Center" Text="{./Caption}" />
+                               <Border Visible="{./ShowMinimize}" BorderWidth="1" Foreground="Transparent"  Height="12" Width="12"
+                                       MouseEnter="{Foreground=White}" MouseLeave="{Foreground=Transparent}">
+                                       <Image Focusable="true" Path="#Crow.Icons.minimize.svg"
+                                                MouseClick="./onMinimized"/>
+                               </Border>
+                               <Border Visible="{./ShowNormal}" BorderWidth="1" Foreground="Transparent"  Height="12" Width="12"
+                                       MouseEnter="{Foreground=White}" MouseLeave="{Foreground=Transparent}">
+                                       <Image Focusable="true" Path="#Crow.Icons.normalize.svg"
+                                                MouseClick="./onUnmaximized"/>
+                               </Border>
+                               <Border Visible="{./ShowMaximize}" BorderWidth="1" Foreground="Transparent"  Height="12" Width="12"
+                                       MouseEnter="{Foreground=White}" MouseLeave="{Foreground=Transparent}">
+                                       <Image Focusable="true" Path="#Crow.Icons.maximize.svg"
+                                                MouseClick="./onMaximized"/>
+                               </Border>
+                               <Border BorderWidth="1" Foreground="Transparent"  Height="14" Width="14"
+                                       MouseEnter="{Foreground=White}" MouseLeave="{Foreground=Transparent}">
+                                       <Image Focusable="true" Path="#Crow.Icons.exit2.svg"
+                                                MouseClick="./butQuitPress"/>
+                               </Border>
+                               <GraphicObject Width="5"/>
+                       </HorizontalStack>
+<!--           </Border>-->
+               <Container Name="Content" MinimumSize="0,0" Background="0.5,0.5,0.5,0.5"/>
+       </VerticalStack>
+</Border>
diff --git a/Crow/Templates/imgItem.template b/Crow/Templates/imgItem.template
new file mode 100755 (executable)
index 0000000..9dbf23d
--- /dev/null
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+       <VerticalStack Width="0" Height="-1" Focusable="true"                   
+                       MouseEnter="{Background=RoyalBlue}"
+                       MouseLeave="{Background=Transparent}">
+               <Image Width="-1" Height="-1" Path="{FullName}" MaximumSize="80,80"/>
+               <Label Text="{Name}" Width="-1" Height="-1" Margin="0" MaximumSize="100,0"/>
+       </VerticalStack>
+
diff --git a/Crow/Templates/treeList.template b/Crow/Templates/treeList.template
new file mode 100755 (executable)
index 0000000..d47621a
--- /dev/null
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<VerticalStack
+       Height="Fit" Name="ItemsContainer"/>
diff --git a/Crow/crow.key b/Crow/crow.key
new file mode 100644 (file)
index 0000000..b69aa3e
Binary files /dev/null and b/Crow/crow.key differ
diff --git a/Crow/obj/Crow.NetStd.csproj.nuget.cache b/Crow/obj/Crow.NetStd.csproj.nuget.cache
new file mode 100644 (file)
index 0000000..9a59c47
--- /dev/null
@@ -0,0 +1,5 @@
+{
+  "version": 1,
+  "dgSpecHash": "2rCwvcmtcbaQGG3KBjAhVPu3dFHZmG/pKmVVwS4/M77psHg3X/WV4XzfrouykFVfs3O0q9UTUQizC5BGv4K26Q==",
+  "success": true
+}
\ No newline at end of file
diff --git a/Crow/obj/Crow.NetStd.csproj.nuget.g.props b/Crow/obj/Crow.NetStd.csproj.nuget.g.props
new file mode 100644 (file)
index 0000000..0aed083
--- /dev/null
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
+    <RestoreSuccess Condition=" '$(RestoreSuccess)' == '' ">True</RestoreSuccess>
+    <RestoreTool Condition=" '$(RestoreTool)' == '' ">NuGet</RestoreTool>
+    <ProjectAssetsFile Condition=" '$(ProjectAssetsFile)' == '' ">/mnt/devel/gts/crow-xlib/Crow/obj/project.assets.json</ProjectAssetsFile>
+    <NuGetPackageRoot Condition=" '$(NuGetPackageRoot)' == '' ">/home/jp/.nuget/packages/</NuGetPackageRoot>
+    <NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">/home/jp/.nuget/packages/;/usr/share/dotnet/sdk/NuGetFallbackFolder</NuGetPackageFolders>
+    <NuGetProjectStyle Condition=" '$(NuGetProjectStyle)' == '' ">PackageReference</NuGetProjectStyle>
+    <NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">4.7.0</NuGetToolVersion>
+  </PropertyGroup>
+  <PropertyGroup>
+    <MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildThisFileFullPath)</MSBuildAllProjects>
+  </PropertyGroup>
+</Project>
\ No newline at end of file
diff --git a/Crow/obj/Crow.NetStd.csproj.nuget.g.targets b/Crow/obj/Crow.NetStd.csproj.nuget.g.targets
new file mode 100644 (file)
index 0000000..0ba3e8c
--- /dev/null
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildThisFileFullPath)</MSBuildAllProjects>
+  </PropertyGroup>
+  <ImportGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
+    <Import Project="$(NuGetPackageRoot)netstandard.library/2.0.3/build/netstandard2.0/NETStandard.Library.targets" Condition="Exists('$(NuGetPackageRoot)netstandard.library/2.0.3/build/netstandard2.0/NETStandard.Library.targets')" />
+  </ImportGroup>
+</Project>
\ No newline at end of file
diff --git a/Crow/obj/project.assets.json b/Crow/obj/project.assets.json
new file mode 100644 (file)
index 0000000..79c924a
--- /dev/null
@@ -0,0 +1,885 @@
+{
+  "version": 3,
+  "targets": {
+    ".NETStandard,Version=v2.0": {
+      "Microsoft.NETCore.Platforms/1.1.0": {
+        "type": "package",
+        "compile": {
+          "lib/netstandard1.0/_._": {}
+        },
+        "runtime": {
+          "lib/netstandard1.0/_._": {}
+        }
+      },
+      "Microsoft.NETCore.Targets/1.1.0": {
+        "type": "package",
+        "compile": {
+          "lib/netstandard1.0/_._": {}
+        },
+        "runtime": {
+          "lib/netstandard1.0/_._": {}
+        }
+      },
+      "NETStandard.Library/2.0.3": {
+        "type": "package",
+        "dependencies": {
+          "Microsoft.NETCore.Platforms": "1.1.0"
+        },
+        "compile": {
+          "lib/netstandard1.0/_._": {}
+        },
+        "runtime": {
+          "lib/netstandard1.0/_._": {}
+        },
+        "build": {
+          "build/netstandard2.0/NETStandard.Library.targets": {}
+        }
+      },
+      "System.IO/4.3.0": {
+        "type": "package",
+        "dependencies": {
+          "Microsoft.NETCore.Platforms": "1.1.0",
+          "Microsoft.NETCore.Targets": "1.1.0",
+          "System.Runtime": "4.3.0",
+          "System.Text.Encoding": "4.3.0",
+          "System.Threading.Tasks": "4.3.0"
+        },
+        "compile": {
+          "ref/netstandard1.5/System.IO.dll": {}
+        }
+      },
+      "System.Reflection/4.3.0": {
+        "type": "package",
+        "dependencies": {
+          "Microsoft.NETCore.Platforms": "1.1.0",
+          "Microsoft.NETCore.Targets": "1.1.0",
+          "System.IO": "4.3.0",
+          "System.Reflection.Primitives": "4.3.0",
+          "System.Runtime": "4.3.0"
+        },
+        "compile": {
+          "ref/netstandard1.5/System.Reflection.dll": {}
+        }
+      },
+      "System.Reflection.Emit.ILGeneration/4.3.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Reflection": "4.3.0",
+          "System.Reflection.Primitives": "4.3.0",
+          "System.Runtime": "4.3.0"
+        },
+        "compile": {
+          "ref/netstandard1.0/System.Reflection.Emit.ILGeneration.dll": {}
+        },
+        "runtime": {
+          "lib/netstandard1.3/System.Reflection.Emit.ILGeneration.dll": {}
+        }
+      },
+      "System.Reflection.Emit.Lightweight/4.3.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Reflection": "4.3.0",
+          "System.Reflection.Emit.ILGeneration": "4.3.0",
+          "System.Reflection.Primitives": "4.3.0",
+          "System.Runtime": "4.3.0"
+        },
+        "compile": {
+          "ref/netstandard1.0/System.Reflection.Emit.Lightweight.dll": {}
+        },
+        "runtime": {
+          "lib/netstandard1.3/System.Reflection.Emit.Lightweight.dll": {}
+        }
+      },
+      "System.Reflection.Primitives/4.3.0": {
+        "type": "package",
+        "dependencies": {
+          "Microsoft.NETCore.Platforms": "1.1.0",
+          "Microsoft.NETCore.Targets": "1.1.0",
+          "System.Runtime": "4.3.0"
+        },
+        "compile": {
+          "ref/netstandard1.0/System.Reflection.Primitives.dll": {}
+        }
+      },
+      "System.Runtime/4.3.0": {
+        "type": "package",
+        "dependencies": {
+          "Microsoft.NETCore.Platforms": "1.1.0",
+          "Microsoft.NETCore.Targets": "1.1.0"
+        },
+        "compile": {
+          "ref/netstandard1.5/System.Runtime.dll": {}
+        }
+      },
+      "System.Text.Encoding/4.3.0": {
+        "type": "package",
+        "dependencies": {
+          "Microsoft.NETCore.Platforms": "1.1.0",
+          "Microsoft.NETCore.Targets": "1.1.0",
+          "System.Runtime": "4.3.0"
+        },
+        "compile": {
+          "ref/netstandard1.3/System.Text.Encoding.dll": {}
+        }
+      },
+      "System.Threading.Tasks/4.3.0": {
+        "type": "package",
+        "dependencies": {
+          "Microsoft.NETCore.Platforms": "1.1.0",
+          "Microsoft.NETCore.Targets": "1.1.0",
+          "System.Runtime": "4.3.0"
+        },
+        "compile": {
+          "ref/netstandard1.3/System.Threading.Tasks.dll": {}
+        }
+      }
+    }
+  },
+  "libraries": {
+    "Microsoft.NETCore.Platforms/1.1.0": {
+      "sha512": "kz0PEW2lhqygehI/d6XsPCQzD7ff7gUJaVGPVETX611eadGsA3A877GdSlU0LRVMCTH/+P3o2iDTak+S08V2+A==",
+      "type": "package",
+      "path": "microsoft.netcore.platforms/1.1.0",
+      "files": [
+        "ThirdPartyNotices.txt",
+        "dotnet_library_license.txt",
+        "lib/netstandard1.0/_._",
+        "microsoft.netcore.platforms.1.1.0.nupkg.sha512",
+        "microsoft.netcore.platforms.nuspec",
+        "runtime.json"
+      ]
+    },
+    "Microsoft.NETCore.Targets/1.1.0": {
+      "sha512": "aOZA3BWfz9RXjpzt0sRJJMjAscAUm3Hoa4UWAfceV9UTYxgwZ1lZt5nO2myFf+/jetYQo4uTP7zS8sJY67BBxg==",
+      "type": "package",
+      "path": "microsoft.netcore.targets/1.1.0",
+      "files": [
+        "ThirdPartyNotices.txt",
+        "dotnet_library_license.txt",
+        "lib/netstandard1.0/_._",
+        "microsoft.netcore.targets.1.1.0.nupkg.sha512",
+        "microsoft.netcore.targets.nuspec",
+        "runtime.json"
+      ]
+    },
+    "NETStandard.Library/2.0.3": {
+      "sha512": "R73gEjqCkI2Nw/IlN8QvcgPNklqQiPowp47JwvW0Bnp/RZnjN4UrJwEvWVJWRK1MsQ+HIfGe9i4aQlfK+ei9jA==",
+      "type": "package",
+      "path": "netstandard.library/2.0.3",
+      "files": [
+        ".signature.p7s",
+        "LICENSE.TXT",
+        "THIRD-PARTY-NOTICES.TXT",
+        "build/netstandard2.0/NETStandard.Library.targets",
+        "build/netstandard2.0/ref/Microsoft.Win32.Primitives.dll",
+        "build/netstandard2.0/ref/System.AppContext.dll",
+        "build/netstandard2.0/ref/System.Collections.Concurrent.dll",
+        "build/netstandard2.0/ref/System.Collections.NonGeneric.dll",
+        "build/netstandard2.0/ref/System.Collections.Specialized.dll",
+        "build/netstandard2.0/ref/System.Collections.dll",
+        "build/netstandard2.0/ref/System.ComponentModel.Composition.dll",
+        "build/netstandard2.0/ref/System.ComponentModel.EventBasedAsync.dll",
+        "build/netstandard2.0/ref/System.ComponentModel.Primitives.dll",
+        "build/netstandard2.0/ref/System.ComponentModel.TypeConverter.dll",
+        "build/netstandard2.0/ref/System.ComponentModel.dll",
+        "build/netstandard2.0/ref/System.Console.dll",
+        "build/netstandard2.0/ref/System.Core.dll",
+        "build/netstandard2.0/ref/System.Data.Common.dll",
+        "build/netstandard2.0/ref/System.Data.dll",
+        "build/netstandard2.0/ref/System.Diagnostics.Contracts.dll",
+        "build/netstandard2.0/ref/System.Diagnostics.Debug.dll",
+        "build/netstandard2.0/ref/System.Diagnostics.FileVersionInfo.dll",
+        "build/netstandard2.0/ref/System.Diagnostics.Process.dll",
+        "build/netstandard2.0/ref/System.Diagnostics.StackTrace.dll",
+        "build/netstandard2.0/ref/System.Diagnostics.TextWriterTraceListener.dll",
+        "build/netstandard2.0/ref/System.Diagnostics.Tools.dll",
+        "build/netstandard2.0/ref/System.Diagnostics.TraceSource.dll",
+        "build/netstandard2.0/ref/System.Diagnostics.Tracing.dll",
+        "build/netstandard2.0/ref/System.Drawing.Primitives.dll",
+        "build/netstandard2.0/ref/System.Drawing.dll",
+        "build/netstandard2.0/ref/System.Dynamic.Runtime.dll",
+        "build/netstandard2.0/ref/System.Globalization.Calendars.dll",
+        "build/netstandard2.0/ref/System.Globalization.Extensions.dll",
+        "build/netstandard2.0/ref/System.Globalization.dll",
+        "build/netstandard2.0/ref/System.IO.Compression.FileSystem.dll",
+        "build/netstandard2.0/ref/System.IO.Compression.ZipFile.dll",
+        "build/netstandard2.0/ref/System.IO.Compression.dll",
+        "build/netstandard2.0/ref/System.IO.FileSystem.DriveInfo.dll",
+        "build/netstandard2.0/ref/System.IO.FileSystem.Primitives.dll",
+        "build/netstandard2.0/ref/System.IO.FileSystem.Watcher.dll",
+        "build/netstandard2.0/ref/System.IO.FileSystem.dll",
+        "build/netstandard2.0/ref/System.IO.IsolatedStorage.dll",
+        "build/netstandard2.0/ref/System.IO.MemoryMappedFiles.dll",
+        "build/netstandard2.0/ref/System.IO.Pipes.dll",
+        "build/netstandard2.0/ref/System.IO.UnmanagedMemoryStream.dll",
+        "build/netstandard2.0/ref/System.IO.dll",
+        "build/netstandard2.0/ref/System.Linq.Expressions.dll",
+        "build/netstandard2.0/ref/System.Linq.Parallel.dll",
+        "build/netstandard2.0/ref/System.Linq.Queryable.dll",
+        "build/netstandard2.0/ref/System.Linq.dll",
+        "build/netstandard2.0/ref/System.Net.Http.dll",
+        "build/netstandard2.0/ref/System.Net.NameResolution.dll",
+        "build/netstandard2.0/ref/System.Net.NetworkInformation.dll",
+        "build/netstandard2.0/ref/System.Net.Ping.dll",
+        "build/netstandard2.0/ref/System.Net.Primitives.dll",
+        "build/netstandard2.0/ref/System.Net.Requests.dll",
+        "build/netstandard2.0/ref/System.Net.Security.dll",
+        "build/netstandard2.0/ref/System.Net.Sockets.dll",
+        "build/netstandard2.0/ref/System.Net.WebHeaderCollection.dll",
+        "build/netstandard2.0/ref/System.Net.WebSockets.Client.dll",
+        "build/netstandard2.0/ref/System.Net.WebSockets.dll",
+        "build/netstandard2.0/ref/System.Net.dll",
+        "build/netstandard2.0/ref/System.Numerics.dll",
+        "build/netstandard2.0/ref/System.ObjectModel.dll",
+        "build/netstandard2.0/ref/System.Reflection.Extensions.dll",
+        "build/netstandard2.0/ref/System.Reflection.Primitives.dll",
+        "build/netstandard2.0/ref/System.Reflection.dll",
+        "build/netstandard2.0/ref/System.Resources.Reader.dll",
+        "build/netstandard2.0/ref/System.Resources.ResourceManager.dll",
+        "build/netstandard2.0/ref/System.Resources.Writer.dll",
+        "build/netstandard2.0/ref/System.Runtime.CompilerServices.VisualC.dll",
+        "build/netstandard2.0/ref/System.Runtime.Extensions.dll",
+        "build/netstandard2.0/ref/System.Runtime.Handles.dll",
+        "build/netstandard2.0/ref/System.Runtime.InteropServices.RuntimeInformation.dll",
+        "build/netstandard2.0/ref/System.Runtime.InteropServices.dll",
+        "build/netstandard2.0/ref/System.Runtime.Numerics.dll",
+        "build/netstandard2.0/ref/System.Runtime.Serialization.Formatters.dll",
+        "build/netstandard2.0/ref/System.Runtime.Serialization.Json.dll",
+        "build/netstandard2.0/ref/System.Runtime.Serialization.Primitives.dll",
+        "build/netstandard2.0/ref/System.Runtime.Serialization.Xml.dll",
+        "build/netstandard2.0/ref/System.Runtime.Serialization.dll",
+        "build/netstandard2.0/ref/System.Runtime.dll",
+        "build/netstandard2.0/ref/System.Security.Claims.dll",
+        "build/netstandard2.0/ref/System.Security.Cryptography.Algorithms.dll",
+        "build/netstandard2.0/ref/System.Security.Cryptography.Csp.dll",
+        "build/netstandard2.0/ref/System.Security.Cryptography.Encoding.dll",
+        "build/netstandard2.0/ref/System.Security.Cryptography.Primitives.dll",
+        "build/netstandard2.0/ref/System.Security.Cryptography.X509Certificates.dll",
+        "build/netstandard2.0/ref/System.Security.Principal.dll",
+        "build/netstandard2.0/ref/System.Security.SecureString.dll",
+        "build/netstandard2.0/ref/System.ServiceModel.Web.dll",
+        "build/netstandard2.0/ref/System.Text.Encoding.Extensions.dll",
+        "build/netstandard2.0/ref/System.Text.Encoding.dll",
+        "build/netstandard2.0/ref/System.Text.RegularExpressions.dll",
+        "build/netstandard2.0/ref/System.Threading.Overlapped.dll",
+        "build/netstandard2.0/ref/System.Threading.Tasks.Parallel.dll",
+        "build/netstandard2.0/ref/System.Threading.Tasks.dll",
+        "build/netstandard2.0/ref/System.Threading.Thread.dll",
+        "build/netstandard2.0/ref/System.Threading.ThreadPool.dll",
+        "build/netstandard2.0/ref/System.Threading.Timer.dll",
+        "build/netstandard2.0/ref/System.Threading.dll",
+        "build/netstandard2.0/ref/System.Transactions.dll",
+        "build/netstandard2.0/ref/System.ValueTuple.dll",
+        "build/netstandard2.0/ref/System.Web.dll",
+        "build/netstandard2.0/ref/System.Windows.dll",
+        "build/netstandard2.0/ref/System.Xml.Linq.dll",
+        "build/netstandard2.0/ref/System.Xml.ReaderWriter.dll",
+        "build/netstandard2.0/ref/System.Xml.Serialization.dll",
+        "build/netstandard2.0/ref/System.Xml.XDocument.dll",
+        "build/netstandard2.0/ref/System.Xml.XPath.XDocument.dll",
+        "build/netstandard2.0/ref/System.Xml.XPath.dll",
+        "build/netstandard2.0/ref/System.Xml.XmlDocument.dll",
+        "build/netstandard2.0/ref/System.Xml.XmlSerializer.dll",
+        "build/netstandard2.0/ref/System.Xml.dll",
+        "build/netstandard2.0/ref/System.dll",
+        "build/netstandard2.0/ref/mscorlib.dll",
+        "build/netstandard2.0/ref/netstandard.dll",
+        "build/netstandard2.0/ref/netstandard.xml",
+        "lib/netstandard1.0/_._",
+        "netstandard.library.2.0.3.nupkg.sha512",
+        "netstandard.library.nuspec"
+      ]
+    },
+    "System.IO/4.3.0": {
+      "sha512": "3qjaHvxQPDpSOYICjUoTsmoq5u6QJAFRUITgeT/4gqkF1bajbSmb1kwSxEA8AHlofqgcKJcM8udgieRNhaJ5Cg==",
+      "type": "package",
+      "path": "system.io/4.3.0",
+      "files": [
+        "ThirdPartyNotices.txt",
+        "dotnet_library_license.txt",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net45/_._",
+        "lib/net462/System.IO.dll",
+        "lib/portable-net45+win8+wp8+wpa81/_._",
+        "lib/win8/_._",
+        "lib/wp80/_._",
+        "lib/wpa81/_._",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "lib/xamarintvos10/_._",
+        "lib/xamarinwatchos10/_._",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net45/_._",
+        "ref/net462/System.IO.dll",
+        "ref/netcore50/System.IO.dll",
+        "ref/netcore50/System.IO.xml",
+        "ref/netcore50/de/System.IO.xml",
+        "ref/netcore50/es/System.IO.xml",
+        "ref/netcore50/fr/System.IO.xml",
+        "ref/netcore50/it/System.IO.xml",
+        "ref/netcore50/ja/System.IO.xml",
+        "ref/netcore50/ko/System.IO.xml",
+        "ref/netcore50/ru/System.IO.xml",
+        "ref/netcore50/zh-hans/System.IO.xml",
+        "ref/netcore50/zh-hant/System.IO.xml",
+        "ref/netstandard1.0/System.IO.dll",
+        "ref/netstandard1.0/System.IO.xml",
+        "ref/netstandard1.0/de/System.IO.xml",
+        "ref/netstandard1.0/es/System.IO.xml",
+        "ref/netstandard1.0/fr/System.IO.xml",
+        "ref/netstandard1.0/it/System.IO.xml",
+        "ref/netstandard1.0/ja/System.IO.xml",
+        "ref/netstandard1.0/ko/System.IO.xml",
+        "ref/netstandard1.0/ru/System.IO.xml",
+        "ref/netstandard1.0/zh-hans/System.IO.xml",
+        "ref/netstandard1.0/zh-hant/System.IO.xml",
+        "ref/netstandard1.3/System.IO.dll",
+        "ref/netstandard1.3/System.IO.xml",
+        "ref/netstandard1.3/de/System.IO.xml",
+        "ref/netstandard1.3/es/System.IO.xml",
+        "ref/netstandard1.3/fr/System.IO.xml",
+        "ref/netstandard1.3/it/System.IO.xml",
+        "ref/netstandard1.3/ja/System.IO.xml",
+        "ref/netstandard1.3/ko/System.IO.xml",
+        "ref/netstandard1.3/ru/System.IO.xml",
+        "ref/netstandard1.3/zh-hans/System.IO.xml",
+        "ref/netstandard1.3/zh-hant/System.IO.xml",
+        "ref/netstandard1.5/System.IO.dll",
+        "ref/netstandard1.5/System.IO.xml",
+        "ref/netstandard1.5/de/System.IO.xml",
+        "ref/netstandard1.5/es/System.IO.xml",
+        "ref/netstandard1.5/fr/System.IO.xml",
+        "ref/netstandard1.5/it/System.IO.xml",
+        "ref/netstandard1.5/ja/System.IO.xml",
+        "ref/netstandard1.5/ko/System.IO.xml",
+        "ref/netstandard1.5/ru/System.IO.xml",
+        "ref/netstandard1.5/zh-hans/System.IO.xml",
+        "ref/netstandard1.5/zh-hant/System.IO.xml",
+        "ref/portable-net45+win8+wp8+wpa81/_._",
+        "ref/win8/_._",
+        "ref/wp80/_._",
+        "ref/wpa81/_._",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "ref/xamarintvos10/_._",
+        "ref/xamarinwatchos10/_._",
+        "system.io.4.3.0.nupkg.sha512",
+        "system.io.nuspec"
+      ]
+    },
+    "System.Reflection/4.3.0": {
+      "sha512": "KMiAFoW7MfJGa9nDFNcfu+FpEdiHpWgTcS2HdMpDvt9saK3y/G4GwprPyzqjFH9NTaGPQeWNHU+iDlDILj96aQ==",
+      "type": "package",
+      "path": "system.reflection/4.3.0",
+      "files": [
+        "ThirdPartyNotices.txt",
+        "dotnet_library_license.txt",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net45/_._",
+        "lib/net462/System.Reflection.dll",
+        "lib/portable-net45+win8+wp8+wpa81/_._",
+        "lib/win8/_._",
+        "lib/wp80/_._",
+        "lib/wpa81/_._",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "lib/xamarintvos10/_._",
+        "lib/xamarinwatchos10/_._",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net45/_._",
+        "ref/net462/System.Reflection.dll",
+        "ref/netcore50/System.Reflection.dll",
+        "ref/netcore50/System.Reflection.xml",
+        "ref/netcore50/de/System.Reflection.xml",
+        "ref/netcore50/es/System.Reflection.xml",
+        "ref/netcore50/fr/System.Reflection.xml",
+        "ref/netcore50/it/System.Reflection.xml",
+        "ref/netcore50/ja/System.Reflection.xml",
+        "ref/netcore50/ko/System.Reflection.xml",
+        "ref/netcore50/ru/System.Reflection.xml",
+        "ref/netcore50/zh-hans/System.Reflection.xml",
+        "ref/netcore50/zh-hant/System.Reflection.xml",
+        "ref/netstandard1.0/System.Reflection.dll",
+        "ref/netstandard1.0/System.Reflection.xml",
+        "ref/netstandard1.0/de/System.Reflection.xml",
+        "ref/netstandard1.0/es/System.Reflection.xml",
+        "ref/netstandard1.0/fr/System.Reflection.xml",
+        "ref/netstandard1.0/it/System.Reflection.xml",
+        "ref/netstandard1.0/ja/System.Reflection.xml",
+        "ref/netstandard1.0/ko/System.Reflection.xml",
+        "ref/netstandard1.0/ru/System.Reflection.xml",
+        "ref/netstandard1.0/zh-hans/System.Reflection.xml",
+        "ref/netstandard1.0/zh-hant/System.Reflection.xml",
+        "ref/netstandard1.3/System.Reflection.dll",
+        "ref/netstandard1.3/System.Reflection.xml",
+        "ref/netstandard1.3/de/System.Reflection.xml",
+        "ref/netstandard1.3/es/System.Reflection.xml",
+        "ref/netstandard1.3/fr/System.Reflection.xml",
+        "ref/netstandard1.3/it/System.Reflection.xml",
+        "ref/netstandard1.3/ja/System.Reflection.xml",
+        "ref/netstandard1.3/ko/System.Reflection.xml",
+        "ref/netstandard1.3/ru/System.Reflection.xml",
+        "ref/netstandard1.3/zh-hans/System.Reflection.xml",
+        "ref/netstandard1.3/zh-hant/System.Reflection.xml",
+        "ref/netstandard1.5/System.Reflection.dll",
+        "ref/netstandard1.5/System.Reflection.xml",
+        "ref/netstandard1.5/de/System.Reflection.xml",
+        "ref/netstandard1.5/es/System.Reflection.xml",
+        "ref/netstandard1.5/fr/System.Reflection.xml",
+        "ref/netstandard1.5/it/System.Reflection.xml",
+        "ref/netstandard1.5/ja/System.Reflection.xml",
+        "ref/netstandard1.5/ko/System.Reflection.xml",
+        "ref/netstandard1.5/ru/System.Reflection.xml",
+        "ref/netstandard1.5/zh-hans/System.Reflection.xml",
+        "ref/netstandard1.5/zh-hant/System.Reflection.xml",
+        "ref/portable-net45+win8+wp8+wpa81/_._",
+        "ref/win8/_._",
+        "ref/wp80/_._",
+        "ref/wpa81/_._",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "ref/xamarintvos10/_._",
+        "ref/xamarinwatchos10/_._",
+        "system.reflection.4.3.0.nupkg.sha512",
+        "system.reflection.nuspec"
+      ]
+    },
+    "System.Reflection.Emit.ILGeneration/4.3.0": {
+      "sha512": "59tBslAk9733NXLrUJrwNZEzbMAcu8k344OYo+wfSVygcgZ9lgBdGIzH/nrg3LYhXceynyvTc8t5/GD4Ri0/ng==",
+      "type": "package",
+      "path": "system.reflection.emit.ilgeneration/4.3.0",
+      "files": [
+        "ThirdPartyNotices.txt",
+        "dotnet_library_license.txt",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net45/_._",
+        "lib/netcore50/System.Reflection.Emit.ILGeneration.dll",
+        "lib/netstandard1.3/System.Reflection.Emit.ILGeneration.dll",
+        "lib/portable-net45+wp8/_._",
+        "lib/wp80/_._",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "lib/xamarintvos10/_._",
+        "lib/xamarinwatchos10/_._",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net45/_._",
+        "ref/netstandard1.0/System.Reflection.Emit.ILGeneration.dll",
+        "ref/netstandard1.0/System.Reflection.Emit.ILGeneration.xml",
+        "ref/netstandard1.0/de/System.Reflection.Emit.ILGeneration.xml",
+        "ref/netstandard1.0/es/System.Reflection.Emit.ILGeneration.xml",
+        "ref/netstandard1.0/fr/System.Reflection.Emit.ILGeneration.xml",
+        "ref/netstandard1.0/it/System.Reflection.Emit.ILGeneration.xml",
+        "ref/netstandard1.0/ja/System.Reflection.Emit.ILGeneration.xml",
+        "ref/netstandard1.0/ko/System.Reflection.Emit.ILGeneration.xml",
+        "ref/netstandard1.0/ru/System.Reflection.Emit.ILGeneration.xml",
+        "ref/netstandard1.0/zh-hans/System.Reflection.Emit.ILGeneration.xml",
+        "ref/netstandard1.0/zh-hant/System.Reflection.Emit.ILGeneration.xml",
+        "ref/portable-net45+wp8/_._",
+        "ref/wp80/_._",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "ref/xamarintvos10/_._",
+        "ref/xamarinwatchos10/_._",
+        "runtimes/aot/lib/netcore50/_._",
+        "system.reflection.emit.ilgeneration.4.3.0.nupkg.sha512",
+        "system.reflection.emit.ilgeneration.nuspec"
+      ]
+    },
+    "System.Reflection.Emit.Lightweight/4.3.0": {
+      "sha512": "oadVHGSMsTmZsAF864QYN1t1QzZjIcuKU3l2S9cZOwDdDueNTrqq1yRj7koFfIGEnKpt6NjpL3rOzRhs4ryOgA==",
+      "type": "package",
+      "path": "system.reflection.emit.lightweight/4.3.0",
+      "files": [
+        "ThirdPartyNotices.txt",
+        "dotnet_library_license.txt",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net45/_._",
+        "lib/netcore50/System.Reflection.Emit.Lightweight.dll",
+        "lib/netstandard1.3/System.Reflection.Emit.Lightweight.dll",
+        "lib/portable-net45+wp8/_._",
+        "lib/wp80/_._",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "lib/xamarintvos10/_._",
+        "lib/xamarinwatchos10/_._",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net45/_._",
+        "ref/netstandard1.0/System.Reflection.Emit.Lightweight.dll",
+        "ref/netstandard1.0/System.Reflection.Emit.Lightweight.xml",
+        "ref/netstandard1.0/de/System.Reflection.Emit.Lightweight.xml",
+        "ref/netstandard1.0/es/System.Reflection.Emit.Lightweight.xml",
+        "ref/netstandard1.0/fr/System.Reflection.Emit.Lightweight.xml",
+        "ref/netstandard1.0/it/System.Reflection.Emit.Lightweight.xml",
+        "ref/netstandard1.0/ja/System.Reflection.Emit.Lightweight.xml",
+        "ref/netstandard1.0/ko/System.Reflection.Emit.Lightweight.xml",
+        "ref/netstandard1.0/ru/System.Reflection.Emit.Lightweight.xml",
+        "ref/netstandard1.0/zh-hans/System.Reflection.Emit.Lightweight.xml",
+        "ref/netstandard1.0/zh-hant/System.Reflection.Emit.Lightweight.xml",
+        "ref/portable-net45+wp8/_._",
+        "ref/wp80/_._",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "ref/xamarintvos10/_._",
+        "ref/xamarinwatchos10/_._",
+        "runtimes/aot/lib/netcore50/_._",
+        "system.reflection.emit.lightweight.4.3.0.nupkg.sha512",
+        "system.reflection.emit.lightweight.nuspec"
+      ]
+    },
+    "System.Reflection.Primitives/4.3.0": {
+      "sha512": "5RXItQz5As4xN2/YUDxdpsEkMhvw3e6aNveFXUn4Hl/udNTCNhnKp8lT9fnc3MhvGKh1baak5CovpuQUXHAlIA==",
+      "type": "package",
+      "path": "system.reflection.primitives/4.3.0",
+      "files": [
+        "ThirdPartyNotices.txt",
+        "dotnet_library_license.txt",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net45/_._",
+        "lib/portable-net45+win8+wp8+wpa81/_._",
+        "lib/win8/_._",
+        "lib/wp80/_._",
+        "lib/wpa81/_._",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "lib/xamarintvos10/_._",
+        "lib/xamarinwatchos10/_._",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net45/_._",
+        "ref/netcore50/System.Reflection.Primitives.dll",
+        "ref/netcore50/System.Reflection.Primitives.xml",
+        "ref/netcore50/de/System.Reflection.Primitives.xml",
+        "ref/netcore50/es/System.Reflection.Primitives.xml",
+        "ref/netcore50/fr/System.Reflection.Primitives.xml",
+        "ref/netcore50/it/System.Reflection.Primitives.xml",
+        "ref/netcore50/ja/System.Reflection.Primitives.xml",
+        "ref/netcore50/ko/System.Reflection.Primitives.xml",
+        "ref/netcore50/ru/System.Reflection.Primitives.xml",
+        "ref/netcore50/zh-hans/System.Reflection.Primitives.xml",
+        "ref/netcore50/zh-hant/System.Reflection.Primitives.xml",
+        "ref/netstandard1.0/System.Reflection.Primitives.dll",
+        "ref/netstandard1.0/System.Reflection.Primitives.xml",
+        "ref/netstandard1.0/de/System.Reflection.Primitives.xml",
+        "ref/netstandard1.0/es/System.Reflection.Primitives.xml",
+        "ref/netstandard1.0/fr/System.Reflection.Primitives.xml",
+        "ref/netstandard1.0/it/System.Reflection.Primitives.xml",
+        "ref/netstandard1.0/ja/System.Reflection.Primitives.xml",
+        "ref/netstandard1.0/ko/System.Reflection.Primitives.xml",
+        "ref/netstandard1.0/ru/System.Reflection.Primitives.xml",
+        "ref/netstandard1.0/zh-hans/System.Reflection.Primitives.xml",
+        "ref/netstandard1.0/zh-hant/System.Reflection.Primitives.xml",
+        "ref/portable-net45+win8+wp8+wpa81/_._",
+        "ref/win8/_._",
+        "ref/wp80/_._",
+        "ref/wpa81/_._",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "ref/xamarintvos10/_._",
+        "ref/xamarinwatchos10/_._",
+        "system.reflection.primitives.4.3.0.nupkg.sha512",
+        "system.reflection.primitives.nuspec"
+      ]
+    },
+    "System.Runtime/4.3.0": {
+      "sha512": "JufQi0vPQ0xGnAczR13AUFglDyVYt4Kqnz1AZaiKZ5+GICq0/1MH/mO/eAJHt/mHW1zjKBJd7kV26SrxddAhiw==",
+      "type": "package",
+      "path": "system.runtime/4.3.0",
+      "files": [
+        "ThirdPartyNotices.txt",
+        "dotnet_library_license.txt",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net45/_._",
+        "lib/net462/System.Runtime.dll",
+        "lib/portable-net45+win8+wp80+wpa81/_._",
+        "lib/win8/_._",
+        "lib/wp80/_._",
+        "lib/wpa81/_._",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "lib/xamarintvos10/_._",
+        "lib/xamarinwatchos10/_._",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net45/_._",
+        "ref/net462/System.Runtime.dll",
+        "ref/netcore50/System.Runtime.dll",
+        "ref/netcore50/System.Runtime.xml",
+        "ref/netcore50/de/System.Runtime.xml",
+        "ref/netcore50/es/System.Runtime.xml",
+        "ref/netcore50/fr/System.Runtime.xml",
+        "ref/netcore50/it/System.Runtime.xml",
+        "ref/netcore50/ja/System.Runtime.xml",
+        "ref/netcore50/ko/System.Runtime.xml",
+        "ref/netcore50/ru/System.Runtime.xml",
+        "ref/netcore50/zh-hans/System.Runtime.xml",
+        "ref/netcore50/zh-hant/System.Runtime.xml",
+        "ref/netstandard1.0/System.Runtime.dll",
+        "ref/netstandard1.0/System.Runtime.xml",
+        "ref/netstandard1.0/de/System.Runtime.xml",
+        "ref/netstandard1.0/es/System.Runtime.xml",
+        "ref/netstandard1.0/fr/System.Runtime.xml",
+        "ref/netstandard1.0/it/System.Runtime.xml",
+        "ref/netstandard1.0/ja/System.Runtime.xml",
+        "ref/netstandard1.0/ko/System.Runtime.xml",
+        "ref/netstandard1.0/ru/System.Runtime.xml",
+        "ref/netstandard1.0/zh-hans/System.Runtime.xml",
+        "ref/netstandard1.0/zh-hant/System.Runtime.xml",
+        "ref/netstandard1.2/System.Runtime.dll",
+        "ref/netstandard1.2/System.Runtime.xml",
+        "ref/netstandard1.2/de/System.Runtime.xml",
+        "ref/netstandard1.2/es/System.Runtime.xml",
+        "ref/netstandard1.2/fr/System.Runtime.xml",
+        "ref/netstandard1.2/it/System.Runtime.xml",
+        "ref/netstandard1.2/ja/System.Runtime.xml",
+        "ref/netstandard1.2/ko/System.Runtime.xml",
+        "ref/netstandard1.2/ru/System.Runtime.xml",
+        "ref/netstandard1.2/zh-hans/System.Runtime.xml",
+        "ref/netstandard1.2/zh-hant/System.Runtime.xml",
+        "ref/netstandard1.3/System.Runtime.dll",
+        "ref/netstandard1.3/System.Runtime.xml",
+        "ref/netstandard1.3/de/System.Runtime.xml",
+        "ref/netstandard1.3/es/System.Runtime.xml",
+        "ref/netstandard1.3/fr/System.Runtime.xml",
+        "ref/netstandard1.3/it/System.Runtime.xml",
+        "ref/netstandard1.3/ja/System.Runtime.xml",
+        "ref/netstandard1.3/ko/System.Runtime.xml",
+        "ref/netstandard1.3/ru/System.Runtime.xml",
+        "ref/netstandard1.3/zh-hans/System.Runtime.xml",
+        "ref/netstandard1.3/zh-hant/System.Runtime.xml",
+        "ref/netstandard1.5/System.Runtime.dll",
+        "ref/netstandard1.5/System.Runtime.xml",
+        "ref/netstandard1.5/de/System.Runtime.xml",
+        "ref/netstandard1.5/es/System.Runtime.xml",
+        "ref/netstandard1.5/fr/System.Runtime.xml",
+        "ref/netstandard1.5/it/System.Runtime.xml",
+        "ref/netstandard1.5/ja/System.Runtime.xml",
+        "ref/netstandard1.5/ko/System.Runtime.xml",
+        "ref/netstandard1.5/ru/System.Runtime.xml",
+        "ref/netstandard1.5/zh-hans/System.Runtime.xml",
+        "ref/netstandard1.5/zh-hant/System.Runtime.xml",
+        "ref/portable-net45+win8+wp80+wpa81/_._",
+        "ref/win8/_._",
+        "ref/wp80/_._",
+        "ref/wpa81/_._",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "ref/xamarintvos10/_._",
+        "ref/xamarinwatchos10/_._",
+        "system.runtime.4.3.0.nupkg.sha512",
+        "system.runtime.nuspec"
+      ]
+    },
+    "System.Text.Encoding/4.3.0": {
+      "sha512": "BiIg+KWaSDOITze6jGQynxg64naAPtqGHBwDrLaCtixsa5bKiR8dpPOHA7ge3C0JJQizJE+sfkz1wV+BAKAYZw==",
+      "type": "package",
+      "path": "system.text.encoding/4.3.0",
+      "files": [
+        "ThirdPartyNotices.txt",
+        "dotnet_library_license.txt",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net45/_._",
+        "lib/portable-net45+win8+wp8+wpa81/_._",
+        "lib/win8/_._",
+        "lib/wp80/_._",
+        "lib/wpa81/_._",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "lib/xamarintvos10/_._",
+        "lib/xamarinwatchos10/_._",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net45/_._",
+        "ref/netcore50/System.Text.Encoding.dll",
+        "ref/netcore50/System.Text.Encoding.xml",
+        "ref/netcore50/de/System.Text.Encoding.xml",
+        "ref/netcore50/es/System.Text.Encoding.xml",
+        "ref/netcore50/fr/System.Text.Encoding.xml",
+        "ref/netcore50/it/System.Text.Encoding.xml",
+        "ref/netcore50/ja/System.Text.Encoding.xml",
+        "ref/netcore50/ko/System.Text.Encoding.xml",
+        "ref/netcore50/ru/System.Text.Encoding.xml",
+        "ref/netcore50/zh-hans/System.Text.Encoding.xml",
+        "ref/netcore50/zh-hant/System.Text.Encoding.xml",
+        "ref/netstandard1.0/System.Text.Encoding.dll",
+        "ref/netstandard1.0/System.Text.Encoding.xml",
+        "ref/netstandard1.0/de/System.Text.Encoding.xml",
+        "ref/netstandard1.0/es/System.Text.Encoding.xml",
+        "ref/netstandard1.0/fr/System.Text.Encoding.xml",
+        "ref/netstandard1.0/it/System.Text.Encoding.xml",
+        "ref/netstandard1.0/ja/System.Text.Encoding.xml",
+        "ref/netstandard1.0/ko/System.Text.Encoding.xml",
+        "ref/netstandard1.0/ru/System.Text.Encoding.xml",
+        "ref/netstandard1.0/zh-hans/System.Text.Encoding.xml",
+        "ref/netstandard1.0/zh-hant/System.Text.Encoding.xml",
+        "ref/netstandard1.3/System.Text.Encoding.dll",
+        "ref/netstandard1.3/System.Text.Encoding.xml",
+        "ref/netstandard1.3/de/System.Text.Encoding.xml",
+        "ref/netstandard1.3/es/System.Text.Encoding.xml",
+        "ref/netstandard1.3/fr/System.Text.Encoding.xml",
+        "ref/netstandard1.3/it/System.Text.Encoding.xml",
+        "ref/netstandard1.3/ja/System.Text.Encoding.xml",
+        "ref/netstandard1.3/ko/System.Text.Encoding.xml",
+        "ref/netstandard1.3/ru/System.Text.Encoding.xml",
+        "ref/netstandard1.3/zh-hans/System.Text.Encoding.xml",
+        "ref/netstandard1.3/zh-hant/System.Text.Encoding.xml",
+        "ref/portable-net45+win8+wp8+wpa81/_._",
+        "ref/win8/_._",
+        "ref/wp80/_._",
+        "ref/wpa81/_._",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "ref/xamarintvos10/_._",
+        "ref/xamarinwatchos10/_._",
+        "system.text.encoding.4.3.0.nupkg.sha512",
+        "system.text.encoding.nuspec"
+      ]
+    },
+    "System.Threading.Tasks/4.3.0": {
+      "sha512": "LbSxKEdOUhVe8BezB/9uOGGppt+nZf6e1VFyw6v3DN6lqitm0OSn2uXMOdtP0M3W4iMcqcivm2J6UgqiwwnXiA==",
+      "type": "package",
+      "path": "system.threading.tasks/4.3.0",
+      "files": [
+        "ThirdPartyNotices.txt",
+        "dotnet_library_license.txt",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net45/_._",
+        "lib/portable-net45+win8+wp8+wpa81/_._",
+        "lib/win8/_._",
+        "lib/wp80/_._",
+        "lib/wpa81/_._",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "lib/xamarintvos10/_._",
+        "lib/xamarinwatchos10/_._",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net45/_._",
+        "ref/netcore50/System.Threading.Tasks.dll",
+        "ref/netcore50/System.Threading.Tasks.xml",
+        "ref/netcore50/de/System.Threading.Tasks.xml",
+        "ref/netcore50/es/System.Threading.Tasks.xml",
+        "ref/netcore50/fr/System.Threading.Tasks.xml",
+        "ref/netcore50/it/System.Threading.Tasks.xml",
+        "ref/netcore50/ja/System.Threading.Tasks.xml",
+        "ref/netcore50/ko/System.Threading.Tasks.xml",
+        "ref/netcore50/ru/System.Threading.Tasks.xml",
+        "ref/netcore50/zh-hans/System.Threading.Tasks.xml",
+        "ref/netcore50/zh-hant/System.Threading.Tasks.xml",
+        "ref/netstandard1.0/System.Threading.Tasks.dll",
+        "ref/netstandard1.0/System.Threading.Tasks.xml",
+        "ref/netstandard1.0/de/System.Threading.Tasks.xml",
+        "ref/netstandard1.0/es/System.Threading.Tasks.xml",
+        "ref/netstandard1.0/fr/System.Threading.Tasks.xml",
+        "ref/netstandard1.0/it/System.Threading.Tasks.xml",
+        "ref/netstandard1.0/ja/System.Threading.Tasks.xml",
+        "ref/netstandard1.0/ko/System.Threading.Tasks.xml",
+        "ref/netstandard1.0/ru/System.Threading.Tasks.xml",
+        "ref/netstandard1.0/zh-hans/System.Threading.Tasks.xml",
+        "ref/netstandard1.0/zh-hant/System.Threading.Tasks.xml",
+        "ref/netstandard1.3/System.Threading.Tasks.dll",
+        "ref/netstandard1.3/System.Threading.Tasks.xml",
+        "ref/netstandard1.3/de/System.Threading.Tasks.xml",
+        "ref/netstandard1.3/es/System.Threading.Tasks.xml",
+        "ref/netstandard1.3/fr/System.Threading.Tasks.xml",
+        "ref/netstandard1.3/it/System.Threading.Tasks.xml",
+        "ref/netstandard1.3/ja/System.Threading.Tasks.xml",
+        "ref/netstandard1.3/ko/System.Threading.Tasks.xml",
+        "ref/netstandard1.3/ru/System.Threading.Tasks.xml",
+        "ref/netstandard1.3/zh-hans/System.Threading.Tasks.xml",
+        "ref/netstandard1.3/zh-hant/System.Threading.Tasks.xml",
+        "ref/portable-net45+win8+wp8+wpa81/_._",
+        "ref/win8/_._",
+        "ref/wp80/_._",
+        "ref/wpa81/_._",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "ref/xamarintvos10/_._",
+        "ref/xamarinwatchos10/_._",
+        "system.threading.tasks.4.3.0.nupkg.sha512",
+        "system.threading.tasks.nuspec"
+      ]
+    }
+  },
+  "projectFileDependencyGroups": {
+    ".NETStandard,Version=v2.0": [
+      "NETStandard.Library >= 2.0.3",
+      "System.Reflection.Emit.ILGeneration >= 4.3.0",
+      "System.Reflection.Emit.Lightweight >= 4.3.0"
+    ]
+  },
+  "packageFolders": {
+    "/home/jp/.nuget/packages/": {},
+    "/usr/share/dotnet/sdk/NuGetFallbackFolder": {}
+  },
+  "project": {
+    "version": "1.0.0",
+    "restore": {
+      "projectUniqueName": "/mnt/devel/gts/crow-xlib/Crow/Crow.NetStd.csproj",
+      "projectName": "Crow.NetStd",
+      "projectPath": "/mnt/devel/gts/crow-xlib/Crow/Crow.NetStd.csproj",
+      "packagesPath": "/home/jp/.nuget/packages/",
+      "outputPath": "/mnt/devel/gts/crow-xlib/Crow/obj",
+      "projectStyle": "PackageReference",
+      "fallbackFolders": [
+        "/usr/share/dotnet/sdk/NuGetFallbackFolder"
+      ],
+      "configFilePaths": [
+        "/mnt/devel/gts/crow-xlib/.nuget/NuGet.config",
+        "/home/jp/.config/NuGet/NuGet.Config"
+      ],
+      "originalTargetFrameworks": [
+        "netstandard2.0"
+      ],
+      "sources": {
+        "https://api.nuget.org/v3/index.json": {}
+      },
+      "frameworks": {
+        "netstandard2.0": {
+          "projectReferences": {}
+        }
+      },
+      "warningProperties": {
+        "warnAsError": [
+          "NU1605"
+        ]
+      }
+    },
+    "frameworks": {
+      "netstandard2.0": {
+        "dependencies": {
+          "NETStandard.Library": {
+            "suppressParent": "All",
+            "target": "Package",
+            "version": "[2.0.3, )",
+            "autoReferenced": true
+          },
+          "System.Reflection.Emit.ILGeneration": {
+            "target": "Package",
+            "version": "[4.3.0, )"
+          },
+          "System.Reflection.Emit.Lightweight": {
+            "target": "Package",
+            "version": "[4.3.0, )"
+          }
+        },
+        "imports": [
+          "net461"
+        ],
+        "assetTargetFallback": true,
+        "warn": true
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/Crow/src/BmpPicture.cs b/Crow/src/BmpPicture.cs
new file mode 100644 (file)
index 0000000..98c2a01
--- /dev/null
@@ -0,0 +1,168 @@
+//
+// BmpPicture.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.IO;
+using Cairo;
+
+namespace Crow
+{
+
+       /// <summary>
+       /// Derived from FILL for loading and drawing bitmaps in the interface
+       /// </summary>
+       public class BmpPicture : Picture
+       {
+               byte[] image = null;
+
+               #region CTOR
+               /// <summary>
+               /// Initializes a new instance of BmpPicture.
+               /// </summary>
+               public BmpPicture ()
+               {}
+               /// <summary>
+               /// Initializes a new instance of BmpPicture by loading the image pointed by the path argument
+               /// </summary>
+               /// <param name="path">image path, may be embedded</param>
+               public BmpPicture (string path) : base(path)
+               {}
+               #endregion
+               /// <summary>
+               /// load the image for rendering from the path given as argument
+               /// </summary>
+               /// <param name="path">image path, may be embedded</param>
+               void Load ()
+               {                       
+                       if (sharedResources.ContainsKey (Path)) {
+                               sharedPicture sp = sharedResources [Path];
+                               image = (byte[])sp.Data;
+                               Dimensions = sp.Dims;
+                               return;
+                       }
+                       using (Stream stream = Interface.StaticGetStreamFromPath (Path)) {                              
+                               //loadBitmap (new System.Drawing.Bitmap (stream));      
+                       }
+                       sharedResources [Path] = new sharedPicture (image, Dimensions);
+               }
+
+               //load image via System.Drawing.Bitmap, cairo load png only
+               /*void loadBitmap (System.Drawing.Bitmap bitmap)
+               {
+                       if (bitmap == null)
+                               return;
+
+                       System.Drawing.Imaging.BitmapData data = bitmap.LockBits
+                               (new System.Drawing.Rectangle (0, 0, bitmap.Width, bitmap.Height),
+                                       System.Drawing.Imaging.ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
+
+                       Dimensions = new Size (bitmap.Width, bitmap.Height);
+
+                       int stride = data.Stride;
+                       int bitmapSize = Math.Abs (data.Stride) * bitmap.Height;
+
+                       image = new byte[bitmapSize];
+                       System.Runtime.InteropServices.Marshal.Copy (data.Scan0, image, 0, bitmapSize);
+
+                       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 (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
+
+               /// <summary>
+               /// paint the image in the rectangle given in arguments according
+               /// to the Scale and keepProportion parameters.
+               /// </summary>
+               /// <param name="gr">drawing Backend context</param>
+               /// <param name="rect">bounds of the target surface to paint</param>
+               /// <param name="subPart">used for svg only</param>
+               public override void Paint (Context gr, Rectangle rect, string subPart = "")
+               {
+                       float widthRatio = 1f;
+                       float heightRatio = 1f;
+
+                       if (Scaled){
+                               widthRatio = (float)rect.Width / Dimensions.Width;
+                               heightRatio = (float)rect.Height / Dimensions.Height;
+                       }
+
+                       if (KeepProportions) {
+                               if (widthRatio < heightRatio)
+                                       heightRatio = widthRatio;
+                               else
+                                       widthRatio = heightRatio;
+                       }
+
+                       gr.Save ();
+
+                       gr.Translate (rect.Left,rect.Top);
+                       gr.Scale (widthRatio, heightRatio);
+                       gr.Translate ((rect.Width/widthRatio - Dimensions.Width)/2, (rect.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 ();
+                       }
+                       gr.Restore ();
+               }
+       }
+}
+
diff --git a/Crow/src/BubblingMouseButtonEventArgs.cs b/Crow/src/BubblingMouseButtonEventArgs.cs
new file mode 100644 (file)
index 0000000..e81a6f7
--- /dev/null
@@ -0,0 +1,43 @@
+//
+// BubblingMouseButtonEventArgs.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+
+namespace Crow
+{
+       /// <summary>
+       /// Store focused widget while bubbling mouse down event to the top
+       /// </summary>
+       public class BubblingMouseButtonEventArg: MouseButtonEventArgs
+       {
+               public GraphicObject Focused;
+               public BubblingMouseButtonEventArg(MouseButtonEventArgs mbe) : base(mbe){}
+               public BubblingMouseButtonEventArg(int x, int y, MouseButton button, bool pressed)
+                       : base (x,y,button,pressed){}
+
+       }
+}
+
diff --git a/Crow/src/Cairo/CairoHelpers.cs b/Crow/src/Cairo/CairoHelpers.cs
new file mode 100644 (file)
index 0000000..032980d
--- /dev/null
@@ -0,0 +1,137 @@
+//
+// CairoHelpers.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace Crow
+{
+    public static class CairoHelpers
+    {
+               public static T Clamp<T>(this T val, T min, T max) where T : IComparable<T>
+               {
+                   if (val.CompareTo(min) < 0) return min;
+                   else if(val.CompareTo(max) > 0) return max;
+                   else return val;
+               }
+               /// <summary>
+               /// Convert string to utf8 (extension method)
+               /// </summary>
+               /// <returns>byte array with utf8 encoding</returns>
+               public static byte[] ToUtf8(this String str)
+               {
+                       return System.Text.UTF8Encoding.UTF8.GetBytes (str);
+               }
+
+        public static double min(params double[] arr)
+        {
+            int minp = 0;
+            for (int i = 1; i < arr.Length; i++)
+                if (arr[i] < arr[minp])
+                    minp = i;
+
+            return arr[minp];
+        }
+               public static void CairoRectangle(Cairo.Context gr, Rectangle r, double radius, double stroke = 0.0)
+               {
+                       if (radius > 0)
+                               CairoHelpers.DrawRoundedRectangle (gr, r, radius, stroke);
+                       else
+                               gr.Rectangle (r, stroke);
+               }
+               public static void CairoCircle(Cairo.Context gr, Rectangle r)
+               {
+                       gr.Arc(r.X + r.Width/2, r.Y + r.Height/2, Math.Min(r.Width,r.Height)/2, 0, 2*Math.PI);
+               }
+               public static void DrawRoundedRectangle(Cairo.Context gr, Rectangle r, double radius, double stroke = 0.0)
+        {
+                       if (stroke>0.0) {
+                               gr.LineWidth = stroke;
+                               double hsw = stroke / 2.0;
+                               DrawRoundedRectangle (gr, hsw + r.X, hsw + r.Y, (double)r.Width - stroke, (double)r.Height - stroke, radius);
+                               gr.Stroke ();
+                       }else
+                               DrawRoundedRectangle(gr, r.X, r.Y, r.Width, r.Height, radius);
+        }
+        public static void DrawRoundedRectangle(Cairo.Context gr, double x, double y, double width, double height, double radius)
+        {
+            gr.Save();
+
+            if ((radius > height / 2) || (radius > width / 2))
+                radius = min(height / 2, width / 2);
+
+            gr.MoveTo(x, y + radius);
+            gr.Arc(x + radius, y + radius, radius, Math.PI, -Math.PI / 2);
+            gr.LineTo(x + width - radius, y);
+            gr.Arc(x + width - radius, y + radius, radius, -Math.PI / 2, 0);
+            gr.LineTo(x + width, y + height - radius);
+            gr.Arc(x + width - radius, y + height - radius, radius, 0, Math.PI / 2);
+            gr.LineTo(x + radius, y + height);
+            gr.Arc(x + radius, y + height - radius, radius, Math.PI / 2, Math.PI);
+            gr.ClosePath();
+            gr.Restore();
+        }
+        public static void StrokeRaisedRectangle(Cairo.Context gr, Rectangle r, double width = 1)
+        {
+            gr.Save();
+            r.Inflate((int)-width / 2, (int)-width / 2);
+            gr.LineWidth = width;
+                       gr.SetSourceColor(Color.White);
+            gr.MoveTo(r.BottomLeft);
+            gr.LineTo(r.TopLeft);
+            gr.LineTo(r.TopRight);
+            gr.Stroke();
+
+                       gr.SetSourceColor(Color.DarkGrey);
+            gr.MoveTo(r.TopRight);
+            gr.LineTo(r.BottomRight);
+            gr.LineTo(r.BottomLeft);
+            gr.Stroke();
+
+            gr.Restore();
+        }
+        public static void StrokeLoweredRectangle(Cairo.Context gr, Rectangle r, double width = 1)
+        {
+            gr.Save();
+            r.Inflate((int)-width / 2, (int)-width / 2);
+            gr.LineWidth = width;
+                       gr.SetSourceColor(Color.DarkGrey);
+            gr.MoveTo(r.BottomLeft);
+            gr.LineTo(r.TopLeft);
+            gr.LineTo(r.TopRight);
+            gr.Stroke();
+                       gr.SetSourceColor(Color.White);
+            gr.MoveTo(r.TopRight);
+            gr.LineTo(r.BottomRight);
+            gr.LineTo(r.BottomLeft);
+            gr.Stroke();
+
+            gr.Restore();
+        }
+    }
+}
diff --git a/Crow/src/Colors.cs b/Crow/src/Colors.cs
new file mode 100644 (file)
index 0000000..1da9913
--- /dev/null
@@ -0,0 +1,482 @@
+//
+// Colors.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Xml.Serialization;
+using System.Reflection;
+using System.Diagnostics;
+
+
+
+namespace Crow
+{
+       /// <summary>
+       /// Universal Color structure
+       /// </summary>
+       public struct Color
+    {
+               internal static Type TColor = typeof(Color);
+
+               #region CTOR
+               public Color(double _R, double _G, double _B, double _A)
+               {
+                       A = _A.Clamp(0,1);
+                       R = _R.Clamp(0,1);
+                       G = _G.Clamp(0,1);
+                       B = _B.Clamp(0,1);
+                       predefinied = false;
+                       htmlCode = "";
+                       Name = "";
+               }
+               internal Color(double _R, double _G, double _B, double _A, string _name)
+               {
+                       A = _A;
+                       R = _R;
+                       G = _G;
+                       B = _B;
+                       predefinied = false;
+                       Name = _name;
+                       htmlCode = "";
+                       ColorDic.Add(_name,this);
+               }
+               internal Color(int _R, int _G, int _B, string _name, string _code)
+               {
+                       A = 1.0;
+                       R = _R / 255.0;
+                       G = _G / 255.0;
+                       B = _B / 255.0;
+                       Name = _name;
+                       htmlCode = _code;
+                       predefinied = true;
+                       ColorDic.Add(_name,this);
+               }
+               #endregion
+
+               /// <summary>
+               /// color names dictionary
+               /// </summary>
+               public static Dictionary<string, Color> ColorDic = new Dictionary<string, Color>();
+
+               public string Name;
+               public string htmlCode;
+               internal bool predefinied;
+
+               #region public fields
+        public double A;
+        public double R;
+        public double G;
+               public double B;
+               #endregion
+
+               #region Operators
+        public static implicit operator string(Color c)
+        {
+            return c.ToString();
+        }
+               public static implicit operator Color(string s)
+               {
+                       if (string.IsNullOrEmpty(s))
+                               return White;
+                       Color cc = default(Color);
+                       if (s.StartsWith ("#")) {
+                               cc.R = int.Parse (s.Substring (1, 2), System.Globalization.NumberStyles.HexNumber) / 255.0;
+                               cc.G = int.Parse (s.Substring (3, 2), System.Globalization.NumberStyles.HexNumber) / 255.0;
+                               cc.B = int.Parse (s.Substring (5, 2), System.Globalization.NumberStyles.HexNumber) / 255.0;
+                               if (s.Length > 7)
+                                       cc.A = int.Parse (s.Substring (7, 2), System.Globalization.NumberStyles.HexNumber) / 255.0;
+                               else
+                                       cc.A = 1.0;
+                               return cc;
+                       }
+
+                       if (char.IsLetter(s[0])){
+                               if (ColorDic.ContainsKey (s))
+                                       return ColorDic[s];
+                               throw new Exception ("Unknown color name: " + s);
+                       }
+
+                       string[] c = s.Split(new char[] { ',' });
+                                                       
+                       return new Color(
+                               double.Parse(c[0]),
+                               double.Parse(c[1]),
+                               double.Parse(c[2]),
+                               double.Parse(c[3]));
+               }
+
+               public static bool operator ==(Color left, Color right)
+               {
+                       if (left.predefinied & right.predefinied)
+                               return left.htmlCode == right.htmlCode;
+                       return left.A != right.A ? false :
+                               left.R != right.R ? false :
+                               left.G != right.G ? false :
+                               left.B != right.B ? false : true;
+               }
+               public static bool operator !=(Color left, Color right)
+               {
+                       if (left.predefinied & right.predefinied)
+                               return left.htmlCode != right.htmlCode;
+                       return left.A == right.A ? false :
+                               left.R == right.R ? false :
+                               left.G == right.G ? false :
+                               left.B == right.B ? false : true;
+
+               }
+               public static bool operator ==(Color c, string n)
+               {
+                       return n.StartsWith("#") ?
+                               string.Equals(c.HtmlCode, n, StringComparison.Ordinal) :
+                               string.Equals(c.Name, n, StringComparison.Ordinal);
+               }
+               public static bool operator !=(Color c, string n)
+               {
+                       return n.StartsWith("#") ?
+                               !string.Equals(c.HtmlCode, n, StringComparison.Ordinal) :
+                               !string.Equals(c.Name, n, StringComparison.Ordinal);
+               }
+               public static bool operator ==(string n, Color c)
+               {
+                       return string.Equals (c.Name, n, StringComparison.Ordinal);
+               }
+               public static bool operator !=(string n, Color c)
+               {
+                       return !string.Equals (c.Name, n, StringComparison.Ordinal);
+               }
+               public static Color operator *(Color c, Double f)
+               {
+                       return new Color(c.R,c.G,c.B,c.A * f);
+               }
+               public static Color operator +(Color c1, Color c2)
+               {
+                       return new Color(c1.R + c2.R,c1.G + c2.G,c1.B + c2.B,c1.A + c2.A);
+               }
+               public static Color operator -(Color c1, Color c2)
+               {
+                       return new Color(c1.R - c2.R,c1.G - c2.G,c1.B - c2.B,c1.A - c2.A);
+               }
+               #endregion
+
+               /// <summary>
+               /// compute the hue of the color
+               /// </summary>
+               public double Hue {
+                       get {
+                               double min = Math.Min (R, Math.Min (G, B));     //Min. value of RGB
+                               double max = Math.Max (R, Math.Max (G, B));     //Max. value of RGB
+                               double diff = max - min;                                                        //Delta RGB value
+
+                               if ( diff == 0 )//This is a grey, no chroma...
+                                       return 0;
+
+                               double h = 0.0, s = diff / max;
+
+                               double diffR = (((max - R) / 6.0) + (diff / 2.0)) / diff;
+                               double diffG = (((max - G) / 6.0) + (diff / 2.0)) / diff;
+                               double diffB = (((max - B) / 6.0) + (diff / 2.0)) / diff;
+
+                               if (R == max)
+                                       h = diffB - diffG;
+                               else if (G == max)
+                                       h = (1.0 / 3.0) + diffR - diffB;
+                               else if (B == max)
+                                       h = (2.0 / 3.0) + diffG - diffR;
+
+                               if (h < 0)
+                                       h += 1;
+                               if (h > 1)
+                                       h -= 1;
+
+                               return h;
+                       }
+               }
+               /// <summary>
+               /// compute the saturation of the color
+               /// </summary>
+               public double Saturation {
+                       get {
+                               return Math.Max (R, Math.Max (G, B));   //Max. value of RGB
+                       }
+               }
+               /// <summary>
+               /// compute the RGB intensity of the color
+               /// </summary>
+               /// <value>The value.</value>
+               public double Value {
+                       get {
+                               double min = Math.Min (R, Math.Min (G, B));     //Min. value of RGB
+                               double max = Math.Max (R, Math.Max (G, B));     //Max. value of RGB
+                               double diff = max - min;                                                        //Delta RGB value
+                               return diff == 0 ? 0 : diff / max;
+                       }
+               }
+               public string HtmlCode {
+                       get { 
+                               string tmp = "#" +
+                                       ((int)Math.Round (R * 255.0)).ToString ("X2") +
+                                       ((int)Math.Round (G * 255.0)).ToString ("X2") +
+                                       ((int)Math.Round (B * 255.0)).ToString ("X2");
+                               if (A < 1.0)
+                                       tmp += ((int)Math.Round(A * 255.0)).ToString ("X2");
+                               return tmp;
+                       }
+               }
+               public float[] floatArray
+               {
+                       get { return new float[]{ (float)R, (float)G, (float)B, (float)A }; }
+               }
+               /// <summary>
+               /// return a copy of the color with the alpha component modified
+               /// </summary>
+               /// <returns>new modified color</returns>
+               /// <param name="_A">normalized alpha component</param>
+               public Color AdjustAlpha(double _A)
+               {
+                       return new Color (this.R, this.G, this.B, _A);
+               }
+               public void ResetName(){
+                       Name = "";
+                       htmlCode = "";
+               }
+
+               #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");
+               public static readonly Color AliceBlue = new Color(240,248,255,"AliceBlue","#F0F8FF");
+               public static readonly Color AntiqueWhite = new Color(250,235,215,"AntiqueWhite","#FAEBD7");
+               public static readonly Color Aqua = new Color(0,255,255,"Aqua","#00FFFF");
+               public static readonly Color Aquamarine = new Color(127,255,212,"Aquamarine","#7FFFD4");
+               public static readonly Color Azure = new Color(240,255,255,"Azure","#F0FFFF");
+               public static readonly Color Beige = new Color(245,245,220,"Beige","#F5F5DC");
+               public static readonly Color Bisque = new Color(255,228,196,"Bisque","#FFE4C4");
+               public static readonly Color Black = new Color(0,0,0,"Black","#000000");
+               public static readonly Color BlanchedAlmond = new Color(255,235,205,"BlanchedAlmond","#FFEBCD");
+               public static readonly Color Blue = new Color(0,0,255,"Blue","#0000FF");
+               public static readonly Color BlueViolet = new Color(138,43,226,"BlueViolet","#8A2BE2");
+               public static readonly Color Brown = new Color(165,42,42,"Brown","#A52A2A");
+               public static readonly Color BurlyWood = new Color(222,184,135,"BurlyWood","#DEB887");
+               public static readonly Color CadetBlue = new Color(95,158,160,"CadetBlue","#5F9EA0");
+               public static readonly Color Chartreuse = new Color(127,255,0,"Chartreuse","#7FFF00");
+               public static readonly Color Chocolate = new Color(210,105,30,"Chocolate","#D2691E");
+               public static readonly Color Coral = new Color(255,127,80,"Coral","#FF7F50");
+               public static readonly Color CornflowerBlue = new Color(100,149,237,"CornflowerBlue","#6495ED");
+               public static readonly Color Cornsilk = new Color(255,248,220,"Cornsilk","#FFF8DC");
+               public static readonly Color Crimson = new Color(220,20,60,"Crimson","#DC143C");
+               public static readonly Color Cyan = new Color(0,255,255,"Cyan","#00FFFF");
+               public static readonly Color DarkBlue = new Color(0,0,139,"DarkBlue","#00008B");
+               public static readonly Color DarkCyan = new Color(0,139,139,"DarkCyan","#008B8B");
+               public static readonly Color DarkGoldenRod = new Color(184,134,11,"DarkGoldenRod","#B8860B");
+               public static readonly Color DarkGrey = new Color(169,169,169,"DarkGrey","#A9A9A9");
+               public static readonly Color DarkGreen = new Color(0,100,0,"DarkGreen","#006400");
+               public static readonly Color DarkKhaki = new Color(189,183,107,"DarkKhaki","#BDB76B");
+               public static readonly Color DarkMagenta = new Color(139,0,139,"DarkMagenta","#8B008B");
+               public static readonly Color DarkOliveGreen = new Color(85,107,47,"DarkOliveGreen","#556B2F");
+               public static readonly Color DarkOrange = new Color(255,140,0,"DarkOrange","#FF8C00");
+               public static readonly Color DarkOrchid = new Color(153,50,204,"DarkOrchid","#9932CC");
+               public static readonly Color DarkRed = new Color(139,0,0,"DarkRed","#8B0000");
+               public static readonly Color DarkSalmon = new Color(233,150,122,"DarkSalmon","#E9967A");
+               public static readonly Color DarkSeaGreen = new Color(143,188,143,"DarkSeaGreen","#8FBC8F");
+               public static readonly Color DarkSlateBlue = new Color(72,61,139,"DarkSlateBlue","#483D8B");
+               public static readonly Color DarkSlateGrey = new Color(47,79,79,"DarkSlateGrey","#2F4F4F");
+               public static readonly Color DarkTurquoise = new Color(0,206,209,"DarkTurquoise","#00CED1");
+               public static readonly Color DarkViolet = new Color(148,0,211,"DarkViolet","#9400D3");
+               public static readonly Color DeepPink = new Color(255,20,147,"DeepPink","#FF1493");
+               public static readonly Color DeepSkyBlue = new Color(0,191,255,"DeepSkyBlue","#00BFFF");
+               public static readonly Color DimGrey = new Color(105,105,105,"DimGrey","#696969");
+               public static readonly Color DodgerBlue = new Color(30,144,255,"DodgerBlue","#1E90FF");
+               public static readonly Color FireBrick = new Color(178,34,34,"FireBrick","#B22222");
+               public static readonly Color FloralWhite = new Color(255,250,240,"FloralWhite","#FFFAF0");
+               public static readonly Color ForestGreen = new Color(34,139,34,"ForestGreen","#228B22");
+               public static readonly Color Fuchsia = new Color(255,0,255,"Fuchsia","#FF00FF");
+               public static readonly Color Gainsboro = new Color(220,220,220,"Gainsboro","#DCDCDC");
+               public static readonly Color GhostWhite = new Color(248,248,255,"GhostWhite","#F8F8FF");
+               public static readonly Color Gold = new Color(255,215,0,"Gold","#FFD700");
+               public static readonly Color GoldenRod = new Color(218,165,32,"GoldenRod","#DAA520");
+               public static readonly Color Grey = new Color(128,128,128,"Grey","#808080");
+               public static readonly Color Green = new Color(0,128,0,"Green","#008000");
+               public static readonly Color GreenYellow = new Color(173,255,47,"GreenYellow","#ADFF2F");
+               public static readonly Color HoneyDew = new Color(240,255,240,"HoneyDew","#F0FFF0");
+               public static readonly Color HotPink = new Color(255,105,180,"HotPink","#FF69B4");
+               public static readonly Color IndianRed = new Color(205,92,92,"IndianRed","#CD5C5C");
+               public static readonly Color Indigo = new Color(75,0,130,"Indigo","#4B0082");
+               public static readonly Color Ivory = new Color(255,255,240,"Ivory","#FFFFF0");
+               public static readonly Color Jet = new Color(52,52,52,"Jet","#343434");
+               public static readonly Color Khaki = new Color(240,230,140,"Khaki","#F0E68C");
+               public static readonly Color Lavender = new Color(230,230,250,"Lavender","#E6E6FA");
+               public static readonly Color LavenderBlush = new Color(255,240,245,"LavenderBlush","#FFF0F5");
+               public static readonly Color LawnGreen = new Color(124,252,0,"LawnGreen","#7CFC00");
+               public static readonly Color LemonChiffon = new Color(255,250,205,"LemonChiffon","#FFFACD");
+               public static readonly Color LightBlue = new Color(173,216,230,"LightBlue","#ADD8E6");
+               public static readonly Color LightCoral = new Color(240,128,128,"LightCoral","#F08080");
+               public static readonly Color LightCyan = new Color(224,255,255,"LightCyan","#E0FFFF");
+               public static readonly Color LightGoldenRodYellow = new Color(250,250,210,"LightGoldenRodYellow","#FAFAD2");
+               public static readonly Color LightGrey = new Color(211,211,211,"LightGrey","#D3D3D3");
+               public static readonly Color LightGreen = new Color(144,238,144,"LightGreen","#90EE90");
+               public static readonly Color LightPink = new Color(255,182,193,"LightPink","#FFB6C1");
+               public static readonly Color LightSalmon = new Color(255,160,122,"LightSalmon","#FFA07A");
+               public static readonly Color LightSeaGreen = new Color(32,178,170,"LightSeaGreen","#20B2AA");
+               public static readonly Color LightSkyBlue = new Color(135,206,250,"LightSkyBlue","#87CEFA");
+               public static readonly Color LightSlateGrey = new Color(119,136,153,"LightSlateGrey","#778899");
+               public static readonly Color LightSteelBlue = new Color(176,196,222,"LightSteelBlue","#B0C4DE");
+               public static readonly Color LightYellow = new Color(255,255,224,"LightYellow","#FFFFE0");
+               public static readonly Color Lime = new Color(0,255,0,"Lime","#00FF00");
+               public static readonly Color LimeGreen = new Color(50,205,50,"LimeGreen","#32CD32");
+               public static readonly Color Linen = new Color(250,240,230,"Linen","#FAF0E6");
+               public static readonly Color Magenta = new Color(255,0,255,"Magenta","#FF00FF");
+               public static readonly Color Maroon = new Color(128,0,0,"Maroon","#800000");
+               public static readonly Color MediumAquaMarine = new Color(102,205,170,"MediumAquaMarine","#66CDAA");
+               public static readonly Color MediumBlue = new Color(0,0,205,"MediumBlue","#0000CD");
+               public static readonly Color MediumOrchid = new Color(186,85,211,"MediumOrchid","#BA55D3");
+               public static readonly Color MediumPurple = new Color(147,112,219,"MediumPurple","#9370DB");
+               public static readonly Color MediumSeaGreen = new Color(60,179,113,"MediumSeaGreen","#3CB371");
+               public static readonly Color MediumSlateBlue = new Color(123,104,238,"MediumSlateBlue","#7B68EE");
+               public static readonly Color MediumSpringGreen = new Color(0,250,154,"MediumSpringGreen","#00FA9A");
+               public static readonly Color MediumTurquoise = new Color(72,209,204,"MediumTurquoise","#48D1CC");
+               public static readonly Color MediumVioletRed = new Color(199,21,133,"MediumVioletRed","#C71585");
+               public static readonly Color MidnightBlue = new Color(25,25,112,"MidnightBlue","#191970");
+               public static readonly Color MintCream = new Color(245,255,250,"MintCream","#F5FFFA");
+               public static readonly Color MistyRose = new Color(255,228,225,"MistyRose","#FFE4E1");
+               public static readonly Color Moccasin = new Color(255,228,181,"Moccasin","#FFE4B5");
+               public static readonly Color NavajoWhite = new Color(255,222,173,"NavajoWhite","#FFDEAD");
+               public static readonly Color Navy = new Color(0,0,128,"Navy","#000080");
+               public static readonly Color OldLace = new Color(253,245,230,"OldLace","#FDF5E6");
+               public static readonly Color Olive = new Color(128,128,0,"Olive","#808000");
+               public static readonly Color OliveDrab = new Color(107,142,35,"OliveDrab","#6B8E23");
+               public static readonly Color Onyx = new Color(53,56,57,"Onyx","#353839");
+               public static readonly Color Orange = new Color(255,165,0,"Orange","#FFA500");
+               public static readonly Color OrangeRed = new Color(255,69,0,"OrangeRed","#FF4500");
+               public static readonly Color Orchid = new Color(218,112,214,"Orchid","#DA70D6");
+               public static readonly Color PaleGoldenRod = new Color(238,232,170,"PaleGoldenRod","#EEE8AA");
+               public static readonly Color PaleGreen = new Color(152,251,152,"PaleGreen","#98FB98");
+               public static readonly Color PaleTurquoise = new Color(175,238,238,"PaleTurquoise","#AFEEEE");
+               public static readonly Color PaleVioletRed = new Color(219,112,147,"PaleVioletRed","#DB7093");
+               public static readonly Color PapayaWhip = new Color(255,239,213,"PapayaWhip","#FFEFD5");
+               public static readonly Color PeachPuff = new Color(255,218,185,"PeachPuff","#FFDAB9");
+               public static readonly Color Peru = new Color(205,133,63,"Peru","#CD853F");
+               public static readonly Color Pink = new Color(255,192,203,"Pink","#FFC0CB");
+               public static readonly Color Plum = new Color(221,160,221,"Plum","#DDA0DD");
+               public static readonly Color PowderBlue = new Color(176,224,230,"PowderBlue","#B0E0E6");
+               public static readonly Color Purple = new Color(128,0,128,"Purple","#800080");
+               public static readonly Color RebeccaPurple = new Color(102,51,153,"RebeccaPurple","#663399");
+               public static readonly Color Red = new Color(255,0,0,"Red","#FF0000");
+               public static readonly Color RosyBrown = new Color(188,143,143,"RosyBrown","#BC8F8F");
+               public static readonly Color RoyalBlue = new Color(65,105,225,"RoyalBlue","#4169E1");
+               public static readonly Color SaddleBrown = new Color(139,69,19,"SaddleBrown","#8B4513");
+               public static readonly Color Salmon = new Color(250,128,114,"Salmon","#FA8072");
+               public static readonly Color SandyBrown = new Color(244,164,96,"SandyBrown","#F4A460");
+               public static readonly Color SeaGreen = new Color(46,139,87,"SeaGreen","#2E8B57");
+               public static readonly Color SeaShell = new Color(255,245,238,"SeaShell","#FFF5EE");
+               public static readonly Color Sienna = new Color(160,82,45,"Sienna","#A0522D");
+               public static readonly Color Silver = new Color(192,192,192,"Silver","#C0C0C0");
+               public static readonly Color SkyBlue = new Color(135,206,235,"SkyBlue","#87CEEB");
+               public static readonly Color SlateBlue = new Color(106,90,205,"SlateBlue","#6A5ACD");
+               public static readonly Color SlateGrey = new Color(112,128,144,"SlateGrey","#708090");
+               public static readonly Color Snow = new Color(255,250,250,"Snow","#FFFAFA");
+               public static readonly Color SpringGreen = new Color(0,255,127,"SpringGreen","#00FF7F");
+               public static readonly Color SteelBlue = new Color(70,130,180,"SteelBlue","#4682B4");
+               public static readonly Color Tan = new Color(210,180,140,"Tan","#D2B48C");
+               public static readonly Color Teal = new Color(0,128,128,"Teal","#008080");
+               public static readonly Color Thistle = new Color(216,191,216,"Thistle","#D8BFD8");
+               public static readonly Color Tomato = new Color(255,99,71,"Tomato","#FF6347");
+               public static readonly Color Turquoise = new Color(64,224,208,"Turquoise","#40E0D0");
+               public static readonly Color Violet = new Color(238,130,238,"Violet","#EE82EE");
+               public static readonly Color Wheat = new Color(245,222,179,"Wheat","#F5DEB3");
+               public static readonly Color White = new Color(255,255,255,"White","#FFFFFF");
+               public static readonly Color WhiteSmoke = new Color(245,245,245,"WhiteSmoke","#F5F5F5");
+               public static readonly Color Yellow = new Color(255,255,0,"Yellow","#FFFF00");
+               public static readonly Color YellowGreen = new Color(154,205,50,"YellowGreen","#9ACD32");
+
+               #endregion
+
+               public override int GetHashCode ()
+               {
+                       unchecked // Overflow is fine, just wrap
+                       {
+                               int hash = 17;
+                               // Suitable nullity checks etc, of course :)
+                               hash = hash * 23 + A.GetHashCode();
+                               hash = hash * 23 + R.GetHashCode();
+                               hash = hash * 23 + G.GetHashCode();
+                               hash = hash * 23 + B.GetHashCode();
+                               return hash;
+                       }
+               }
+               public override bool Equals (object obj)
+               {
+                       return (obj == null || obj.GetType() != TColor) ?
+                               false :
+                               this == (Color)obj;
+               }
+               public override string ToString()
+               {
+                       if (!string.IsNullOrEmpty(Name))
+                               return Name;
+                       if (!string.IsNullOrEmpty (htmlCode))
+                               return htmlCode;
+                       string hc = HtmlCode;
+                       Color pc = ColorDic.Values.FirstOrDefault (c => c.htmlCode == hc);
+                       return pc.predefinied ? pc.Name : hc;
+               }
+
+        public static object Parse(string s)
+        {
+            return (Color)s;
+        }
+               public static Color FromHSV(double _h, double _v = 1.0, double _s = 1.0, double _alpha = 1.0){
+                       Color c = Color.Black;
+                       c.ResetName ();
+                       c.A = _alpha;
+                       if (_s == 0) {//HSV from 0 to 1
+                               c.R = _v;
+                               c.G = _v;
+                               c.B = _v;
+                       }else{
+                               double var_h = _h * 6.0;
+
+                               if (var_h == 6.0)
+                                       var_h = 0;      //H must be < 1
+                               double var_i = Math.Floor( var_h );     //Or ... var_i = floor( var_h )
+                               double var_1 = _v * ( 1.0 - _s );
+                               double var_2 = _v * (1.0 - _s * (var_h - var_i));
+                               double var_3 = _v * (1.0 - _s * (1.0 - (var_h - var_i)));
+
+                               if (var_i == 0.0) {
+                                       c.R = _v;
+                                       c.G = var_3;
+                                       c.B = var_1;
+                               }else if ( var_i == 1.0 ) { c.R = var_2 ; c.G = _v     ; c.B = var_1; }
+                               else if ( var_i == 2 ) { c.R = var_1 ; c.G = _v     ; c.B = var_3; }
+                               else if ( var_i == 3 ) { c.R = var_1 ; c.G = var_2 ; c.B = _v;     }
+                               else if ( var_i == 4 ) { c.R = var_3 ; c.G = var_1 ; c.B = _v;    }
+                               else                   { c.R = _v     ; c.G = var_1 ; c.B = var_2; }
+                       }
+                       return c;
+               }
+    }
+}
diff --git a/Crow/src/Command.cs b/Crow/src/Command.cs
new file mode 100644 (file)
index 0000000..5d5f85e
--- /dev/null
@@ -0,0 +1,120 @@
+//
+// Command.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.Xml.Serialization;
+using System.ComponentModel;
+
+namespace Crow
+{
+       /// <summary>
+       /// helper class to bind in one step icon, caption, action, and validity tests to a controls 
+       /// </summary>
+       public class Command : IValueChange
+       {
+               #region IValueChange implementation
+               public event EventHandler<ValueChangeEventArgs> ValueChanged;
+               public virtual void NotifyValueChanged(string MemberName, object _value)
+               {
+                       ValueChanged.Raise(this, new ValueChangeEventArgs(MemberName, _value));
+               }
+               #endregion
+
+               #region CTOR
+               /// <summary>
+               /// Initializes a new instance of Command with the action pass as argument.
+               /// </summary>
+               /// <param name="_executeAction">action to excecute when command is triggered</param>
+               public Command (Action _executeAction)
+               {
+                       execute = _executeAction;
+               }
+               #endregion
+
+               Action execute;
+
+               string caption;
+               Picture icon;
+               bool canExecute = true;
+
+               #region Public properties
+               /// <summary>
+               /// if true, action defined in this command may be executed,
+               /// </summary>
+               [DefaultValue(true)]
+               public virtual bool CanExecute {
+                       get { return canExecute; }
+                       set {
+                               if (canExecute == value)
+                                       return;
+                               canExecute = value;
+                               NotifyValueChanged ("CanExecute", canExecute);
+                       }
+               }
+               /// <summary>
+               /// label to display in the bound control
+               /// </summary>
+               [DefaultValue("Unamed Command")]
+               public virtual string Caption {
+                       get { return caption; }
+                       set {
+                               if (caption == value)
+                                       return;
+                               caption = value;
+                               NotifyValueChanged ("Caption", caption);
+
+                       }
+               }
+               /// <summary>
+               /// Icon to display in the bound control
+               /// </summary>
+               
+               public Picture Icon {
+                       get { return icon; }
+                       set {
+                               if (icon == value)
+                                       return;
+                               icon = value;
+                               NotifyValueChanged ("Icon", icon);
+                       }
+               }
+               #endregion
+
+               /// <summary>
+               /// trigger the execution of the command
+               /// </summary>
+               public void Execute(){
+                       if (execute != null && CanExecute)
+                               execute ();
+               }
+               internal void raiseAllValuesChanged(){
+                       NotifyValueChanged ("CanExecute", canExecute);
+                       NotifyValueChanged ("Icon", icon);
+                       NotifyValueChanged ("Caption", caption);
+               }
+
+       }
+}
diff --git a/Crow/src/CompilerServices/CompilerServices.cs b/Crow/src/CompilerServices/CompilerServices.cs
new file mode 100644 (file)
index 0000000..5112fb1
--- /dev/null
@@ -0,0 +1,931 @@
+//
+// CompilerServices.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.Reflection.Emit;
+using System.Reflection;
+using System.Diagnostics;
+using System.Linq;
+using System.Collections.Generic;
+using System.Runtime.CompilerServices;
+using System.Xml;
+using Crow.IML;
+
+
+namespace Crow.IML
+{
+       public static class CompilerServices
+       {
+               internal static Type TObject = typeof(object);
+               internal static MethodInfo stringEquals = typeof (string).GetMethod("Equals", new Type [3] { typeof (string), typeof (string), typeof (StringComparison) });
+               internal static MethodInfo miObjToString = typeof(object).GetMethod("ToString");
+               internal static MethodInfo miGetType = typeof(object).GetMethod("GetType");
+               internal static MethodInfo miParseEnum = typeof(Enum).GetMethod("Parse", BindingFlags.Static | BindingFlags.Public,
+                       Type.DefaultBinder, new Type [] {typeof (Type), typeof (string), typeof (bool)}, null);
+
+               internal static MethodInfo miGetTypeFromHandle = typeof(Type).GetMethod("GetTypeFromHandle");
+               internal static MethodInfo miGetEvent = typeof(Type).GetMethod("GetEvent", new Type[] {typeof(string)});
+
+               internal static MethodInfo miMIInvoke = typeof(MethodInfo).GetMethod ("Invoke", new Type[] {
+                       typeof(object),
+                       typeof(object[])
+               });
+
+               internal static MethodInfo miCreateBoundDel = typeof(Delegate).GetMethod ("CreateDelegate", new Type[] { typeof(Type), typeof(object), typeof(MethodInfo) });//create bound delegate
+               internal static MethodInfo miGetColCount = typeof(System.Collections.ICollection).GetProperty("Count").GetGetMethod();
+               internal static MethodInfo miGetDelegateListItem = typeof(List<Delegate>).GetMethod("get_Item", new Type[] { typeof(Int32) });
+
+               internal static MethodInfo miCompileDynEventHandler = typeof(CompilerServices).GetMethod ("compileDynEventHandler", BindingFlags.Static | BindingFlags.NonPublic);
+               internal static MethodInfo miRemEvtHdlByName = typeof(CompilerServices).GetMethod("removeEventHandlerByName", BindingFlags.Static | BindingFlags.NonPublic);
+               internal static MethodInfo miRemEvtHdlByTarget = typeof(CompilerServices).GetMethod("removeEventHandlerByTarget", BindingFlags.Static | BindingFlags.NonPublic);
+               internal static MethodInfo miGetMethInfoWithRefx = typeof(CompilerServices).GetMethod ("getMethodInfoWithReflexion", BindingFlags.Static | BindingFlags.NonPublic);
+               internal static MethodInfo miGetMembIinfoWithRefx = typeof(CompilerServices).GetMethod("getMemberInfoWithReflexion", BindingFlags.Static | BindingFlags.NonPublic);
+               internal static MethodInfo miSetValWithRefx = typeof(CompilerServices).GetMethod("setValueWithReflexion", BindingFlags.Static | BindingFlags.NonPublic);
+               internal static MethodInfo miGetValWithRefx = typeof(CompilerServices).GetMethod("getValueWithReflexion", BindingFlags.Static | BindingFlags.NonPublic);
+               internal static MethodInfo miCreateDel = typeof(CompilerServices).GetMethod ("createDel", BindingFlags.Static | BindingFlags.NonPublic);
+               internal static MethodInfo miGetImplOp = typeof(CompilerServices).GetMethod ("getImplicitOp", BindingFlags.Static | BindingFlags.NonPublic);
+               internal static MethodInfo miGetDataTypeAndFetch = typeof(CompilerServices).GetMethod("getDataTypeAndFetch", BindingFlags.Static | BindingFlags.NonPublic);
+
+
+               internal static MethodInfo miGoUpLevels = typeof(CompilerServices).GetMethod("goUpNbLevels", BindingFlags.Static | BindingFlags.NonPublic);
+
+               internal static FieldInfo fiCachedDel = typeof(Instantiator).GetField("cachedDelegates", BindingFlags.Instance | BindingFlags.NonPublic);
+               internal static FieldInfo fiTemplateBinding = typeof(Instantiator).GetField("templateBinding", BindingFlags.Instance | BindingFlags.NonPublic);
+               internal static MethodInfo miDSChangeEmitHelper = typeof(Instantiator).GetMethod("dataSourceChangedEmitHelper", BindingFlags.Instance | BindingFlags.NonPublic);
+               internal static MethodInfo miDSReverseBinding = typeof(Instantiator).GetMethod("dataSourceReverseBinding", BindingFlags.Static | BindingFlags.NonPublic);
+
+               internal static FieldInfo miSetCurIface = typeof(GraphicObject).GetField ("IFace", BindingFlags.Public | BindingFlags.Instance);
+               internal static MethodInfo miFindByName = typeof (GraphicObject).GetMethod ("FindByName");
+               internal static MethodInfo miGetGObjItem = typeof(List<GraphicObject>).GetMethod("get_Item", new Type[] { typeof(Int32) });
+               internal static MethodInfo miLoadDefaultVals = typeof (GraphicObject).GetMethod ("loadDefaultValues");
+               internal static PropertyInfo piStyle = typeof (GraphicObject).GetProperty ("Style");
+               internal static MethodInfo miGetLogicalParent = typeof(GraphicObject).GetProperty("LogicalParent").GetGetMethod();
+               internal static MethodInfo miGetDataSource = typeof(GraphicObject).GetProperty("DataSource").GetGetMethod ();
+               internal static EventInfo eiLogicalParentChanged = typeof(GraphicObject).GetEvent("LogicalParentChanged");
+
+               internal static MethodInfo miIFaceLoad = typeof(Interface).GetMethod ("Load", BindingFlags.Instance | BindingFlags.Public);
+               internal static MethodInfo miGetITemp = typeof(Interface).GetMethod ("GetItemTemplate", BindingFlags.Instance | BindingFlags.Public);
+
+               internal static MethodInfo miAddITemp = typeof(Dictionary<string, ItemTemplate>).GetMethod ("set_Item", new Type[] { typeof(string), typeof(ItemTemplate) });
+               internal static MethodInfo miGetITempFromDic = typeof(Dictionary<string, ItemTemplate>).GetMethod ("get_Item", new Type[] { typeof(string) });
+               internal static FieldInfo fldItemTemplates = typeof(TemplatedGroup).GetField("ItemTemplates");
+               internal static MethodInfo miLoadPage = typeof(TemplatedGroup).GetMethod ("loadPage", BindingFlags.Instance | BindingFlags.NonPublic| BindingFlags.Public);
+               internal static MethodInfo miIsAlreadyExpanded = typeof(TemplatedGroup).GetMethod("emitHelperIsAlreadyExpanded", BindingFlags.Instance | BindingFlags.NonPublic);
+               
+               internal static MethodInfo miCreateExpDel = typeof(ItemTemplate).GetMethod ("CreateExpandDelegate");
+               internal static FieldInfo fiFetchMethodName = typeof(ItemTemplate).GetField("fetchMethodName", BindingFlags.Instance | BindingFlags.NonPublic);
+
+               #if DESIGN_MODE
+               internal static MethodInfo miDicStrStrAdd = typeof(Dictionary<string, string>).GetMethod ("set_Item", new Type[] { typeof(string), typeof(string) });
+               #endif
+
+               #region tree handling methods
+               internal static FieldInfo fiChild = typeof(PrivateContainer).GetField ("child", BindingFlags.Instance | BindingFlags.NonPublic);
+               internal static MethodInfo miSetChild = typeof (Container).GetMethod ("SetChild");
+               internal static MethodInfo miAddChild = typeof (Group).GetMethod ("AddChild");
+               internal static FieldInfo fiChildren = typeof(Group).GetField ("children", BindingFlags.Instance | BindingFlags.NonPublic);
+               internal static MethodInfo miLoadTmp = typeof (TemplatedControl).GetMethod ("loadTemplate", BindingFlags.Instance | BindingFlags.NonPublic);
+               internal static PropertyInfo piContent = typeof(TemplatedContainer).GetProperty ("Content");
+               internal static MethodInfo miAddItem = typeof (TemplatedGroup).GetMethod ("AddItem", BindingFlags.Instance | BindingFlags.Public);
+               internal static MethodInfo miGetItems = typeof(TemplatedGroup).GetProperty ("Items").GetGetMethod ();
+               #endregion
+
+               #region ValueChange & DSChange Reflexion member info
+               internal static EventInfo eiValueChange = typeof (IValueChange).GetEvent ("ValueChanged");
+               internal static MethodInfo miInvokeValueChange = eiValueChange.EventHandlerType.GetMethod ("Invoke");
+               internal static Type [] argsBoundValueChange = { typeof (object), typeof (object), miInvokeValueChange.GetParameters () [1].ParameterType };
+               internal static Type [] argsValueChange = { typeof (object), miInvokeValueChange.GetParameters () [1].ParameterType };
+               internal static FieldInfo fiVCNewValue = typeof (ValueChangeEventArgs).GetField ("NewValue");
+               internal static FieldInfo fiVCMbName = typeof (ValueChangeEventArgs).GetField ("MemberName");
+               internal static MethodInfo miValueChangeAdd = eiValueChange.GetAddMethod ();
+
+               internal static EventInfo eiDSChange = typeof (GraphicObject).GetEvent ("DataSourceChanged");
+               internal static MethodInfo miInvokeDSChange = eiDSChange.EventHandlerType.GetMethod ("Invoke");
+               internal static Type [] argsBoundDSChange = {typeof (object), typeof (object), miInvokeDSChange.GetParameters () [1].ParameterType };
+               internal static FieldInfo fiDSCNewDS = typeof (DataSourceChangeEventArgs).GetField ("NewDataSource");
+               internal static FieldInfo fiDSCOldDS = typeof (DataSourceChangeEventArgs).GetField ("OldDataSource");
+               internal static Type ehTypeDSChange = eiDSChange.EventHandlerType;
+               #endregion
+
+               /// <summary>
+               /// Loc0 is the current graphic object and arg2 of loader is the current interface
+               /// </summary>
+               /// <param name="il">Il.</param>
+               public static void emitSetCurInterface(ILGenerator il){
+                       il.Emit (OpCodes.Ldloc_0);
+                       il.Emit (OpCodes.Ldarg_1);
+                       il.Emit (OpCodes.Stfld, miSetCurIface);
+               }
+
+               public static void EmitSetValue(ILGenerator il, PropertyInfo pi, object val){
+                       il.Emit (OpCodes.Ldloc_0);
+
+                       if (val == null) {
+                               il.Emit (OpCodes.Ldnull);
+                               il.Emit (OpCodes.Callvirt, pi.GetSetMethod ());
+                               return;
+                       }
+                       Type dvType = val.GetType ();
+
+            if (dvType.IsValueType) {
+                               if (pi.PropertyType.IsValueType) {
+                    if (pi.PropertyType.IsEnum) {
+                                               if (pi.PropertyType != dvType)
+                                                       throw new Exception ("Enum mismatch in default values: " + pi.PropertyType.FullName);
+                                               il.Emit (OpCodes.Ldc_I4, Convert.ToInt32 (val));
+                                       } else {
+                                               switch (Type.GetTypeCode (dvType)) {
+                                               case TypeCode.Boolean:
+                                                       if ((bool)val == true)
+                                                               il.Emit (OpCodes.Ldc_I4_1);
+                                                       else
+                                                               il.Emit (OpCodes.Ldc_I4_0);
+                                                       break;
+//                                             case TypeCode.Empty:
+//                                                     break;
+//                                             case TypeCode.Object:
+//                                                     break;
+//                                             case TypeCode.DBNull:
+//                                                     break;
+//                                             case TypeCode.SByte:
+//                                                     break;
+//                                             case TypeCode.Decimal:
+//                                                     break;
+//                                             case TypeCode.DateTime:
+//                                                     break;
+                                               case TypeCode.Char:
+                                                       il.Emit (OpCodes.Ldc_I4, Convert.ToChar (val));
+                                                       break;
+                                               case TypeCode.Byte:
+                                               case TypeCode.Int16:
+                                               case TypeCode.Int32:
+                                                       il.Emit (OpCodes.Ldc_I4, Convert.ToInt32 (val));
+                                                       break;
+                                               case TypeCode.UInt16:
+                                               case TypeCode.UInt32:
+                                                       il.Emit (OpCodes.Ldc_I4, Convert.ToUInt32 (val));
+                                                       break;
+                                               case TypeCode.Int64:
+                                                       il.Emit (OpCodes.Ldc_I8, Convert.ToInt64 (val));
+                                                       break;
+                                               case TypeCode.UInt64:
+                                                       il.Emit (OpCodes.Ldc_I8, Convert.ToUInt64 (val));
+                                                       break;
+                                               case TypeCode.Single:
+                                                       il.Emit (OpCodes.Ldc_R4, Convert.ToSingle (val));
+                                                       break;
+                                               case TypeCode.Double:
+                                                       il.Emit (OpCodes.Ldc_R8, Convert.ToDouble (val));
+                                                       break;
+                                               case TypeCode.String:
+                                                       il.Emit (OpCodes.Ldstr, Convert.ToString (val));
+                                                       break;
+                                               default:
+                                                       il.Emit (OpCodes.Pop);
+                                                       return;
+                                               }
+                                       }
+                               } else
+                                       throw new Exception ("Expecting valuetype in default values for: " + pi.Name);
+                       }else{
+                               //surely a class or struct
+                               if (dvType != typeof(string))
+                                       throw new Exception ("Expecting String in default values for: " + pi.Name);
+                               if (pi.PropertyType == typeof(string))
+                                       il.Emit (OpCodes.Ldstr, Convert.ToString (val));
+                               else if (pi.PropertyType.IsEnum) {
+                                       //load type of enum
+                                       il.Emit(OpCodes.Ldtoken, pi.PropertyType);
+                                       il.Emit(OpCodes.Call, CompilerServices.miGetTypeFromHandle);
+                                       //load enum value name
+                                       il.Emit (OpCodes.Ldstr, Convert.ToString (val));//TODO:implement here string format?
+                                       //load false
+                                       il.Emit (OpCodes.Ldc_I4_0);
+                                       il.Emit (OpCodes.Call, CompilerServices.miParseEnum);
+
+                                       if (CompilerServices.miParseEnum.ReturnType != pi.PropertyType)
+                                               il.Emit (OpCodes.Unbox_Any, pi.PropertyType);
+                               } else {
+                                       MethodInfo miParse = pi.PropertyType.GetMethod
+                                               ("Parse", BindingFlags.Static | BindingFlags.Public,
+                                                       Type.DefaultBinder, new Type [] {typeof (string)},null);
+                                       if (miParse == null)
+                                               throw new Exception ("no Parse method found for: " + pi.PropertyType.FullName);
+
+                                       il.Emit (OpCodes.Ldstr, Convert.ToString (val));//TODO:is this convert required?
+                                       il.Emit (OpCodes.Call, miParse);
+
+                                       if (miParse.ReturnType != pi.PropertyType)
+                                               il.Emit (OpCodes.Unbox_Any, pi.PropertyType);
+                               }
+                       }
+            il.Emit (OpCodes.Callvirt, pi.GetSetMethod ());
+               }
+
+               #region conversions
+
+               internal static MethodInfo GetConvertMethod (Type targetType)
+               {
+                       string name;
+
+                       if (targetType == typeof (bool))
+                               name = "ToBoolean";
+                       else if (targetType == typeof (byte))
+                               name = "ToByte";
+                       else if (targetType == typeof (short))
+                               name = "ToInt16";
+                       else if (targetType == typeof (int))
+                               name = "ToInt32";
+                       else if (targetType == typeof (long))
+                               name = "ToInt64";
+                       else if (targetType == typeof (double))
+                               name = "ToDouble";
+                       else if (targetType == typeof (float))
+                               name = "ToSingle";
+                       else if (targetType == typeof (string))
+                               return typeof (object).GetMethod ("ToString", Type.EmptyTypes);
+                       else //try to find implicit convertion
+                               throw new NotImplementedException (string.Format ("Conversion to {0} is not implemented.", targetType.Name));
+
+                       return typeof (Convert).GetMethod (name, BindingFlags.Static | BindingFlags.Public, null, new Type [] { typeof (object) }, null);
+               }
+               #endregion
+
+               #region Reflexion helpers
+               static MemberInfo getMemberInfoWithReflexion(object instance, string member){
+                       Type t = instance.GetType();
+                       MemberInfo mi = t.GetMember (member)?.FirstOrDefault();
+                       if (mi == null)
+                               mi = CompilerServices.SearchExtMethod (t, member);
+                       return mi;
+               }
+               static MethodInfo getMethodInfoWithReflexion(object instance, string method){
+                       return instance.GetType ().GetMethod (method, BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);
+               }
+               /// <summary>
+               /// set value, convert if required
+               /// </summary>
+               /// <param name="dest">Destination instance</param>
+               /// <param name="value">Value</param>
+               /// <param name="destMember">Destination member</param>
+               static void setValueWithReflexion(object dest, object value, string destMember){
+                       Type destType = null;
+                       Type origType = null;
+                       object convertedVal = null;
+
+                       MemberInfo miDest = getMemberInfoWithReflexion (dest, destMember);
+
+                       if (miDest == null) {
+                               Debug.WriteLine ("Reverse template binding error: " + destMember + " not found in " + dest);
+                               return;
+                       }
+
+                       if (miDest.MemberType == MemberTypes.Property)
+                               destType =(miDest as PropertyInfo).PropertyType;
+                       else if (miDest.MemberType == MemberTypes.Field)
+                               destType =(miDest as FieldInfo).FieldType;
+
+                       try {
+                               if (value != null) {
+                                       if (destType == TObject)//TODO: check that test of destType is not causing problems
+                                               convertedVal = value;
+                                       else {
+                                               origType = value.GetType ();
+                                               if (destType.IsAssignableFrom (origType))
+                                                       convertedVal = Convert.ChangeType (value, destType);
+                                               else if (origType == typeof(string) & destType.IsPrimitive)
+                                                       convertedVal = Convert.ChangeType(value, destType);
+                                               else if (origType.IsPrimitive & destType.IsPrimitive)
+                                                       convertedVal = GetConvertMethod (destType).Invoke (null, new Object[] { value });
+                                               else
+                                                       convertedVal = getImplicitOp (origType, destType).Invoke (value, null);
+                                       }
+                               }
+                       } catch (Exception ex) {
+                               Debug.WriteLine (ex.ToString ());
+                               return;
+                       }
+
+                       if (miDest.MemberType == MemberTypes.Property)
+                               (miDest as PropertyInfo).SetValue (dest, convertedVal);
+                       else if (miDest.MemberType == MemberTypes.Field)
+                               (miDest as FieldInfo).SetValue (dest, convertedVal);
+               }
+               /// <summary>
+               /// Gets value with reflexion, return empty string ("") for string and object and return
+               /// default value for valueType data.
+               /// </summary>
+               static object getValueWithReflexion(object instance, MemberInfo mi){
+                       object tmp = null;
+                       Type dstType = null;
+                       if (mi == null)
+                               return null;
+                       try {
+                               if (mi.MemberType == MemberTypes.Property) {
+                                       PropertyInfo pi = mi as PropertyInfo;
+                                       tmp = pi.GetValue (instance);
+                                       dstType = pi.PropertyType;
+                               }else if (mi.MemberType == MemberTypes.Field) {
+                                       FieldInfo fi = mi as FieldInfo;
+                                       tmp = fi.GetValue (instance);
+                                       dstType = fi.FieldType;
+                               }else if (mi.MemberType == MemberTypes.Method) {
+                                       MethodInfo gi = mi as MethodInfo;
+                                       if (gi.IsStatic)
+                                               tmp = gi.Invoke(null, new object[] {instance});
+                                       else
+                                               tmp = gi.Invoke(instance, null);
+                                       dstType = gi.ReturnType;
+                               }
+
+
+                               if (tmp != null)
+                                       return tmp;
+                               if (dstType == typeof(string) || dstType == CompilerServices.TObject)//TODO:object should be allowed to return null and not ""
+                                       return "";
+                               if (dstType.IsValueType)
+                                       return Activator.CreateInstance (dstType);                              
+                       } catch (Exception ex) {
+                               Debug.WriteLine (ex.ToString ());
+                               return "";
+                       }
+
+                       return null;
+               }
+               /// <summary>
+               /// Gets all extension methods defined in assembly for Type
+               /// </summary>
+               /// <returns>Extension methods enumerable</returns>
+               /// <param name="assembly">Assembly</param>
+               /// <param name="extendedType">Extended type to search for</param>
+               internal static IEnumerable<MethodInfo> GetExtensionMethods (Assembly assembly,
+                       Type extendedType)
+               {
+                       IEnumerable<MethodInfo> query = null;
+                       Type curType = extendedType;
+
+                       do {
+                               query = from type in assembly.GetTypes ()
+                                               where type.IsSealed && !type.IsGenericType && !type.IsNested
+                                       from method in type.GetMethods (BindingFlags.Static
+                                               | BindingFlags.Public | BindingFlags.NonPublic)
+                                               where method.IsDefined (typeof (ExtensionAttribute), false)
+                                               where method.GetParameters () [0].ParameterType == curType
+                                       select method;
+
+                               if (query.Count () > 0)
+                                       break;
+
+                               curType = curType.BaseType;
+                       } while (curType != null);
+
+                       return query;
+               }
+               /// <summary>
+               /// search for extentions method in entry assembly then in crow assembly
+               /// </summary>
+               /// <returns>Extention MethodInfo</returns>
+               /// <param name="t">Extended type</param>
+               /// <param name="methodName">Extention method name</param>
+               internal static MethodInfo SearchExtMethod(Type t, string methodName){
+                       MethodInfo mi = null;
+                       mi = GetExtensionMethods (Assembly.GetEntryAssembly(), t)
+                               .Where (em => em.Name == methodName).FirstOrDefault ();
+                       if (mi != null)
+                               return mi;
+
+                       return GetExtensionMethods (Assembly.GetExecutingAssembly(), t)
+                               .Where (em => em.Name == methodName).FirstOrDefault ();
+               }
+               /// <summary>
+               /// retrieve event handler in class or ancestors
+               /// </summary>
+               static FieldInfo getEventHandlerField (Type type, string eventName)
+               {
+                       FieldInfo fi;
+                       Type ty = type;
+                       do {
+                               fi = ty.GetField (eventName,
+                                       BindingFlags.NonPublic |
+                                       BindingFlags.Instance |
+                                       BindingFlags.GetField);
+                               ty = ty.BaseType;
+                               if (ty == null)
+                                       break;
+                       } while (fi == null);
+                       return fi;
+               }
+               /// <summary>
+               /// search for an implicit conversion method in origine or destination classes
+               /// </summary>
+               static MethodInfo getImplicitOp(Type origType, Type dstType){
+                       foreach(MethodInfo mi in origType.GetMethods(BindingFlags.Public|BindingFlags.Static)){
+                               if (mi.Name == "op_Implicit") {
+                                       if (mi.ReturnType == dstType && mi.GetParameters ().FirstOrDefault ().ParameterType == origType)
+                                               return mi;
+                               }
+                       }
+                       foreach(MethodInfo mi in dstType.GetMethods(BindingFlags.Public|BindingFlags.Static)){
+                               if (mi.Name == "op_Implicit") {
+                                       if (mi.ReturnType == dstType && mi.GetParameters ().FirstOrDefault ().ParameterType == origType)
+                                               return mi;
+                               }
+                       }
+                       return null;
+               }
+               #endregion
+
+               /// <summary>
+               /// Emits tree parsing command to fetch dest instance starting from orig node
+               /// </summary>
+               internal static void emitGetInstance (ILGenerator il, NodeAddress orig, NodeAddress dest){
+                       int ptr = 0;
+                       while (orig [ptr] == dest [ptr]) {
+                               ptr++;
+                               if (ptr == orig.Count || ptr == dest.Count)
+                                       break;
+                       }
+                       for (int i = 0; i < orig.Count - ptr; i++)
+                               il.Emit (OpCodes.Callvirt, CompilerServices.miGetLogicalParent);
+                       while (ptr < dest.Count) {
+                               emitGetChild (il, dest [ptr-1].CrowType, dest [ptr].Index);
+                               ptr++;
+                       }
+               }
+               /// <summary>
+               /// Emits tree parsing commands to get child starting at root node
+               /// </summary>
+               /// <param name="il">MSIL generator</param>
+               /// <param name="dest">Absolute Node Address of the instance to get</param>
+               internal static void emitGetInstance (ILGenerator il, NodeAddress dest){
+                       if (dest == null)
+                               return;
+                       for (int i = 0; i < dest.Count - 1; i++)
+                               emitGetChild (il, dest [i].CrowType, dest [i + 1].Index);
+               }
+               /// <summary>
+               /// Emits msil to fetch chil instance of current GraphicObject on the stack
+               /// </summary>
+               /// <param name="il">Il generator</param>
+               /// <param name="parentType">Parent type</param>
+               /// <param name="index">Index of child, -1 for template root</param>
+               internal static void emitGetChild(ILGenerator il, Type parentType, int index){
+                       if (typeof (Group).IsAssignableFrom (parentType)) {
+                               il.Emit (OpCodes.Ldfld, fiChildren);
+                               il.Emit(OpCodes.Ldc_I4, index);
+                               il.Emit (OpCodes.Callvirt, miGetGObjItem);
+                               return;
+                       }
+                       if (typeof(Container).IsAssignableFrom (parentType) || index < 0) {
+                               il.Emit (OpCodes.Ldfld, fiChild);
+                               return;
+                       }
+                       if (typeof(TemplatedContainer).IsAssignableFrom (parentType)) {
+                               il.Emit (OpCodes.Callvirt, piContent.GetGetMethod());
+                               return;
+                       }
+                       if (typeof(TemplatedGroup).IsAssignableFrom (parentType)) {
+                               il.Emit (OpCodes.Callvirt, miGetItems);
+                               il.Emit(OpCodes.Ldc_I4, index);
+                               il.Emit (OpCodes.Callvirt, miGetGObjItem);
+                               return;
+                       }
+               }
+
+               /// <summary>
+               /// Emit MSIL for conversion from orig type to dest type
+               /// </summary>
+               internal static void emitConvert(ILGenerator il, Type origType, Type destType){
+                       if (destType == CompilerServices.TObject)
+                               return;
+                       if (destType == typeof(string)) {
+                               System.Reflection.Emit.Label emitNullStr = il.DefineLabel ();
+                               System.Reflection.Emit.Label endConvert = il.DefineLabel ();
+                               il.Emit (OpCodes.Dup);
+                               il.Emit (OpCodes.Brfalse, emitNullStr);
+                               il.Emit (OpCodes.Callvirt, CompilerServices.miObjToString);
+                               il.Emit (OpCodes.Br, endConvert);
+                               il.MarkLabel (emitNullStr);
+                               il.Emit (OpCodes.Pop);//remove null string from stack
+                               il.Emit (OpCodes.Ldstr, "");//replace with empty string
+                               il.MarkLabel (endConvert);
+                       }else if (origType.IsValueType) {
+                               if (destType != origType) {
+                                       MethodInfo miIO = getImplicitOp (origType, destType);
+                    if (miIO != null)
+                    {
+                        System.Reflection.Emit.Label emitCreateDefault = il.DefineLabel();
+                        System.Reflection.Emit.Label emitContinue = il.DefineLabel();
+                        LocalBuilder lbStruct = il.DeclareLocal(origType);
+                        il.Emit(OpCodes.Dup);
+                        il.Emit(OpCodes.Brfalse, emitCreateDefault);
+                        il.Emit(OpCodes.Unbox_Any, origType);
+                        il.Emit(OpCodes.Br, emitContinue);
+                        il.MarkLabel(emitCreateDefault);
+                        il.Emit(OpCodes.Pop);//pop null value
+                        il.Emit(OpCodes.Ldloca, lbStruct);
+                        il.Emit(OpCodes.Initobj, origType);
+                        il.Emit(OpCodes.Ldloc, lbStruct);
+                        il.MarkLabel(emitContinue);
+                        il.Emit(OpCodes.Call, miIO);
+                    }
+                    else
+                    {
+                        MethodInfo miconv = CompilerServices.GetConvertMethod(destType);
+                        if (miconv.IsStatic)
+                            il.Emit(OpCodes.Call, miconv);
+                        else
+                            il.Emit(OpCodes.Callvirt, miconv);
+                    }
+                               }else
+                                       il.Emit (OpCodes.Unbox_Any, destType);//TODO:double check this
+                       } else {
+                               if (destType.IsAssignableFrom(origType))
+                                       il.Emit (OpCodes.Castclass, destType);
+                               else {
+                                       //implicit conversion can't be defined from or to object base class,
+                                       //so we will check if object underlying type is one of the implicit converter of destType
+                                       if (origType == TObject) {//test all implicit converter to destType on obj
+                                               System.Reflection.Emit.Label emitTestNextImpOp;
+                                               System.Reflection.Emit.Label emitImpOpFound = il.DefineLabel ();
+                                               foreach (MethodInfo mi in destType.GetMethods(BindingFlags.Public|BindingFlags.Static)) {
+                                                       if (mi.Name == "op_Implicit") {
+                                                               if (mi.GetParameters () [0].ParameterType == destType)
+                                                                       continue;
+                                                               emitTestNextImpOp = il.DefineLabel ();
+                                                               il.Emit (OpCodes.Dup);
+                                                               il.Emit (OpCodes.Isinst, mi.GetParameters () [0].ParameterType);
+                                                               il.Emit (OpCodes.Brfalse, emitTestNextImpOp);
+                                                               if (mi.GetParameters () [0].ParameterType.IsValueType)
+                                                                       il.Emit (OpCodes.Unbox_Any, mi.GetParameters () [0].ParameterType);
+                                                               else
+                                                                       il.Emit (OpCodes.Isinst, mi.GetParameters () [0].ParameterType);
+
+                                                               il.Emit (OpCodes.Call, mi);
+                                                               il.Emit (OpCodes.Br, emitImpOpFound);
+
+                                                               il.MarkLabel (emitTestNextImpOp);
+                                                       }
+                                               }
+                                               //il.Emit (OpCodes.Br, emitImpOpNotFound);
+                                               il.MarkLabel (emitImpOpFound);
+                                       } else {//search both orig and dest types for implicit operators
+                                               MethodInfo miIO = getImplicitOp (origType, destType);
+                                               if (miIO != null)
+                                                       il.Emit (OpCodes.Call, miIO);
+                                       }
+                               }
+                       }
+               }
+               /// <summary>
+               /// check type of current object on the stack and convert to dest type,
+               /// use loc_0 so store it as object!!!
+               /// </summary>
+               internal static void emitConvert(ILGenerator il, Type dstType){
+                       System.Reflection.Emit.Label endConvert = il.DefineLabel ();
+                       System.Reflection.Emit.Label convert = il.DefineLabel ();
+
+                       il.Emit (OpCodes.Dup);
+                       il.Emit (OpCodes.Isinst, dstType);
+                       il.Emit (OpCodes.Brfalse, convert);
+
+                       if (dstType.IsValueType)
+                               il.Emit (OpCodes.Unbox_Any, dstType);
+                       else
+                               il.Emit (OpCodes.Isinst, dstType);
+                       il.Emit (OpCodes.Br, endConvert);
+
+                       il.MarkLabel (convert);
+
+                       if (dstType == typeof(string)) {
+                               System.Reflection.Emit.Label emitNullStr = il.DefineLabel ();
+                               il.Emit (OpCodes.Dup);
+                               il.Emit (OpCodes.Brfalse, emitNullStr);
+                               il.Emit (OpCodes.Callvirt, CompilerServices.miObjToString);
+                               il.Emit (OpCodes.Br, endConvert);
+                               il.MarkLabel (emitNullStr);
+                               il.Emit (OpCodes.Pop);//remove null string from stack
+                               il.Emit (OpCodes.Ldstr, "");//replace with empty string
+                       } else if (dstType.IsPrimitive) {
+                //il.Emit (OpCodes.Unbox_Any, dstType);
+                MethodInfo miconv = CompilerServices.GetConvertMethod(dstType);
+                if (miconv.IsStatic)
+                    il.Emit(OpCodes.Call, miconv);
+                else
+                    il.Emit(OpCodes.Callvirt, miconv);
+                       } else if (dstType.IsValueType) {
+                               il.Emit (OpCodes.Unbox_Any, dstType);
+                       } else{
+                               il.Emit (OpCodes.Stloc_0); //save orig value in loc0
+                               //first check if not null
+                               il.Emit (OpCodes.Ldloc_0);
+                               il.Emit (OpCodes.Dup);
+                               il.Emit (OpCodes.Brfalse, endConvert);
+                               il.Emit (OpCodes.Callvirt, miGetType);
+                               il.Emit (OpCodes.Ldtoken, dstType);//push destination property type for testing
+                               il.Emit (OpCodes.Call, CompilerServices.miGetTypeFromHandle);
+                               il.Emit (OpCodes.Call, miGetImplOp);
+                               il.Emit (OpCodes.Dup);
+                               convert = il.DefineLabel ();
+                               il.Emit (OpCodes.Brtrue, convert);
+                               il.Emit (OpCodes.Pop);
+                               il.Emit (OpCodes.Ldloc_0);
+                               il.Emit (OpCodes.Isinst, dstType);
+                               il.Emit (OpCodes.Br, endConvert);
+
+                               il.MarkLabel (convert);
+                               il.Emit (OpCodes.Ldnull);//null instance for invoke
+                               il.Emit (OpCodes.Ldc_I4_1);
+                               il.Emit(OpCodes.Newarr, CompilerServices.TObject);
+                               il.Emit (OpCodes.Dup);//duplicate the array ref
+                               il.Emit (OpCodes.Ldc_I4_0);//push the index 0
+                               il.Emit (OpCodes.Ldloc_0);//push the orig value to convert
+                               il.Emit (OpCodes.Stelem, CompilerServices.TObject);//set the array element at index 0
+                               il.Emit (OpCodes.Callvirt, miMIInvoke);
+                       }
+
+                       il.MarkLabel (endConvert);
+               }
+
+               /// <summary>
+               /// Removes delegate from event handler by name
+               /// </summary>
+               static void removeEventHandlerByName(object instance, string eventName, string delegateName){
+                       Type t = instance.GetType ();
+                       FieldInfo fiEvt = getEventHandlerField (t, eventName);
+                       if (fiEvt == null) {
+                               #if DEBUG_BINDING
+                               Debug.WriteLine ("RemoveHandlerByName: Event '" + eventName + "' not found in " + instance);
+                               #endif
+                               return;
+                       }
+                       EventInfo eiEvt = t.GetEvent (eventName);
+                       MulticastDelegate multiDel = fiEvt.GetValue (instance) as MulticastDelegate;
+                       if (multiDel != null) {
+                               foreach (Delegate d in multiDel.GetInvocationList()) {
+                                       if (d.Method.Name == delegateName) {
+                                               eiEvt.RemoveEventHandler (instance, d);
+                                               #if DEBUG_BINDING
+                                               Debug.WriteLine ("\t{0} handler removed in {1} for: {2}", d.Method.Name,instance, eventName);
+                                               #endif
+                                       }
+                               }
+                       }
+               }
+               /// <summary>
+               /// Removes delegate from event handler by searching for the object they are bond to
+               /// </summary>
+               static void removeEventHandlerByTarget(object instance, string eventName, object target){
+                       Type t = instance.GetType ();
+                       FieldInfo fiEvt = getEventHandlerField (t, eventName);
+                       EventInfo eiEvt = t.GetEvent (eventName);
+                       MulticastDelegate multiDel = fiEvt.GetValue (instance) as MulticastDelegate;
+                       if (multiDel != null) {
+                               foreach (Delegate d in multiDel.GetInvocationList()) {
+                                       if (d.Target == target) {
+                                               eiEvt.RemoveEventHandler (instance, d);
+                                               #if DEBUG_BINDING
+                                               Debug.WriteLine ("\t{0} handler removed in {1} for: {2}", d.Method.Name,instance, eventName);
+                                               #endif
+                                       }
+                               }
+                       }
+               }
+               /// <summary>
+               /// create delegate helper
+               /// </summary>
+               static Delegate createDel(object instance, Type eventType, string method){
+                       Type t = instance.GetType ();
+                       MethodInfo mi = t.GetMethod (method, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
+                       if (mi == null) {
+                               Debug.WriteLine ("Handler Method '{0}' not found in '{1}'", method, t);
+                               return null;
+                       }
+                       return Delegate.CreateDelegate (eventType, instance, mi);
+               }
+
+               internal static Delegate compileDynEventHandler(EventInfo sourceEvent, string expression, NodeAddress currentNode = null){
+                       #if DEBUG_BINDING
+                       Debug.WriteLine ("\tCompile Event {0}: {1}", sourceEvent.Name, expression);
+                       #endif
+
+                       Type lopType = null;
+
+                       if (currentNode == null)
+                               lopType = sourceEvent.DeclaringType;
+                       else
+                               lopType = currentNode.NodeType;
+
+                       #region Retrieve EventHandler parameter type
+                       MethodInfo evtInvoke = sourceEvent.EventHandlerType.GetMethod ("Invoke");
+                       ParameterInfo [] evtParams = evtInvoke.GetParameters ();
+                       Type handlerArgsType = evtParams [1].ParameterType;
+                       #endregion
+
+                       Type [] args = { CompilerServices.TObject, handlerArgsType };
+                       DynamicMethod dm = new DynamicMethod ("dyn_eventHandler",
+                               typeof(void),
+                               args, true);
+                       ILGenerator il = dm.GetILGenerator (256);
+                       il.Emit (OpCodes.Nop);
+
+                       string [] srcLines = expression.Trim ().Split (new char [] { ';' });
+
+                       foreach (string srcLine in srcLines) {
+                               if (string.IsNullOrEmpty (srcLine))
+                                       continue;
+                               string [] operandes = srcLine.Trim ().Split (new char [] { '=' });
+                               if (operandes.Length != 2) //not an affectation
+                                       throw new NotSupportedException ();
+
+                               System.Reflection.Emit.Label cancel = il.DefineLabel ();
+                               System.Reflection.Emit.Label cancelFinalSet = il.DefineLabel ();
+                               System.Reflection.Emit.Label success = il.DefineLabel ();
+
+                               BindingMember lop = new BindingMember (operandes [0].Trim ());
+                               BindingMember rop = new BindingMember (operandes [1].Trim ());
+
+                               il.Emit (OpCodes.Ldarg_0);  //load sender ref onto the stack, the current node
+
+                               #region Left operande
+                               PropertyInfo lopPI = null;
+
+                               //in dyn handler, no datasource binding, so single name in expression are also handled as current node property
+                               if (lop.IsSingleName)
+                                       lopPI = lopType.GetProperty (lop.Tokens [0]);
+                               else if (lop.IsCurrentNodeProperty)
+                                       lopPI = lopType.GetProperty (lop.Tokens [1]);
+                               else
+                                       lop.emitGetTarget (il, cancel);
+                               #endregion
+
+                               #region RIGHT OPERANDES
+                               if (rop.IsStringConstant){
+                                       il.Emit (OpCodes.Ldstr, rop.Tokens[0]);
+                                       lop.emitSetProperty (il);
+                               }else if (rop.IsSingleName && rop.Tokens[0] == "this"){
+                                       il.Emit (OpCodes.Ldarg_0);  //load sender ref onto the stack, the current node
+                                       lop.emitSetProperty (il);
+                               }else if (rop.LevelsUp ==0 && !string.IsNullOrEmpty(rop.Tokens[0])) {//parsable constant depending on lop type
+                                       //if left operand is member of current node, it's easy to fetch type, else we should use reflexion in msil
+                                       if (lopPI == null){//accept GraphicObj members, but it's restricive
+                                               //TODO: we should get the parse method by reflexion, or something else
+                                               lopPI = typeof(GraphicObject).GetProperty (lop.Tokens [lop.Tokens.Length-1]);
+                                               if (lopPI == null)
+                                                       throw new NotSupportedException ();
+                                       }
+
+                                       MethodInfo lopParseMi = CompilerServices.miParseEnum;
+                                       if (lopPI.PropertyType.IsEnum){
+                                               //load type of enum
+                                               il.Emit(OpCodes.Ldtoken, lopPI.PropertyType);
+                                               il.Emit(OpCodes.Call, CompilerServices.miGetTypeFromHandle);
+                                               //load enum value name
+                                               il.Emit (OpCodes.Ldstr, operandes [1].Trim ());
+                                               //load false
+                                               il.Emit (OpCodes.Ldc_I4_0);
+                                       }else{
+                                               lopParseMi = lopPI.PropertyType.GetMethod ("Parse");
+                                               if (lopParseMi == null)
+                                                       throw new Exception (string.Format
+                                                               ("IML: no static 'Parse' method found in: {0}", lopPI.PropertyType.Name));
+
+                                               il.Emit (OpCodes.Ldstr, operandes [1].Trim ());
+                                       }
+                    if (lopParseMi.IsStatic)
+                                           il.Emit (OpCodes.Call, lopParseMi);
+                    else
+                        il.Emit(OpCodes.Callvirt, lopParseMi);
+                    //il.Emit (OpCodes.Unbox_Any, lopPI.PropertyType);
+                    //emit left operand assignment
+                    il.Emit (OpCodes.Callvirt, lopPI.GetSetMethod());
+                               } else {//tree parsing and propert gets
+                                       il.Emit (OpCodes.Ldarg_0);  //load sender ref onto the stack, the current node
+
+                                       rop.emitGetTarget (il, cancelFinalSet);
+                                       rop.emitGetProperty (il, cancelFinalSet);
+                                       lop.emitSetProperty (il);
+                               }
+                               #endregion
+
+                               il.Emit (OpCodes.Br, success);
+
+                               il.MarkLabel (cancelFinalSet);
+                               il.Emit (OpCodes.Pop);  //pop null MemberInfo on the stack causing cancelation
+                               il.MarkLabel (cancel);
+                               il.Emit (OpCodes.Pop);  //pop null instance on the stack causing cancelation
+                               il.MarkLabel (success);
+                       }
+
+                       il.Emit (OpCodes.Ret);
+
+                       return dm.CreateDelegate (sourceEvent.EventHandlerType);
+               }
+
+               /// <summary>
+               /// MSIL helper, go n levels up
+               /// </summary>
+               /// <returns><c>true</c>, if logical parents are not null</returns>
+               /// <param name="instance">Start Instance</param>
+               /// <param name="levelCount">Levels to go upward</param>
+               internal static ILayoutable goUpNbLevels(ILayoutable instance, int levelCount){
+                       ILayoutable tmp = instance;
+                       int i = 0;
+                       while (tmp != null && i < levelCount) {
+                               tmp = tmp.LogicalParent;
+                               i++;
+                       }
+                       return tmp;
+               }
+               /// <summary>
+               /// Splits expression on semicolon but ignore those between accolades
+               /// </summary>
+               internal static string[] splitOnSemiColumnOutsideAccolades (string expression){
+                       List<String> exps = new List<string>();
+                       int accCount = 0;
+                       int expPtr = 0;
+                       for (int c = 0; c < expression.Length; c++) {
+                               switch (expression[c]){
+                               case '{':
+                                       accCount++;
+                                       break;
+                               case '}':
+                                       accCount--;
+                                       break;
+                               case ';':
+                                       if (accCount > 0)
+                                               break;
+                                       exps.Add(expression.Substring(expPtr, c - expPtr - 1));
+                                       expPtr = c + 1;
+                                       break;
+                               }
+                       }
+                       if (exps.Count == 0)
+                               exps.Add(expression);
+                       return exps.ToArray ();
+               }
+               /// <summary>
+               /// Try to get the type named strDataType, search first in crow assembly then in
+               /// entry assembly.
+               /// </summary>
+               /// <returns>the corresponding type object if found</returns>
+               /// <param name="strDataType">type name</param>
+               internal static Type tryGetType (string strDataType){
+                       Type dataType = Type.GetType(strDataType);
+                       if (dataType != null)
+                               return dataType;
+                       Assembly a = Assembly.GetEntryAssembly ();
+                       foreach (Type expT in a.GetExportedTypes ()) {
+                               if (expT.Name == strDataType)
+                                       return dataType;
+                       }
+                       return null;
+               }
+
+               internal static object getDataTypeAndFetch (object data, string fetchMethod){
+                       Type dataType = data.GetType();
+                       MethodInfo miGetDatas = dataType.GetMethod (fetchMethod, new Type[] {});
+                       if (miGetDatas == null)
+                               miGetDatas = CompilerServices.SearchExtMethod (dataType, fetchMethod);
+
+                       if (miGetDatas == null) {//in last resort, search among properties
+                               PropertyInfo piDatas = dataType.GetProperty (fetchMethod);
+                               if (piDatas == null) {
+                                       FieldInfo fiDatas = dataType.GetField (fetchMethod);
+                                       if (fiDatas == null)//and among fields
+                                               throw new Exception ("Fetch data member not found in ItemTemplate: " + fetchMethod);
+                                       return fiDatas.GetValue (data);
+                               }
+                               miGetDatas = piDatas.GetGetMethod ();
+                               if (miGetDatas == null)
+                                       throw new Exception ("Read only property for fetching data in ItemTemplate: " + fetchMethod);
+                       }
+                       object tmp = miGetDatas.Invoke (data, null);
+                       return tmp;
+               }
+       }
+}
+
diff --git a/Crow/src/Configuration.cs b/Crow/src/Configuration.cs
new file mode 100644 (file)
index 0000000..b8112be
--- /dev/null
@@ -0,0 +1,203 @@
+//
+// Configuration.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.Reflection;
+using System.IO;
+using System.Collections.Generic;
+using System.Threading;
+using System.Linq;
+
+namespace Crow
+{
+       /// <summary>
+       /// single element of configuration
+       /// </summary>
+       public class ConfigItem {
+               Type type;
+               internal object curVal;
+               bool parsingNeeded = false;
+               public ConfigItem(object newVal){
+                       curVal = newVal;
+               }
+               public ConfigItem(string newVal){
+                       curVal = newVal;
+                       parsingNeeded = true;
+               }
+               public T GetValue<T>(){
+                       if (type == null)
+                               type = typeof(T);
+                       if (parsingNeeded) {
+                               MethodInfo miParse = type.GetMethod ("Parse", new Type[] {typeof(string)});
+                               if (miParse != null)
+                                       curVal = miParse.Invoke (null, new object[]{ curVal });
+                               parsingNeeded = false;
+                       }
+                       return (T)Convert.ChangeType (curVal, type);
+               }
+               public void Set(object value){
+                       curVal = value;
+               }
+       }
+       /// <summary>
+       /// Application wide Configuration store utility
+       /// 
+       /// configuration files are automatically stored in **_user/.config/appname/app.config_** on close and every minutes
+       /// if some items have changed.
+       /// New items are automaticaly added on first use. Configuration class expose one templated Get and one Templated Set, so
+       /// creating, storing and retrieving config items is simple as:
+       /// 
+       /// ```csharp\n
+       ///     //storing\n
+       ///     Configuration.Global.Set ("Option1", 42);\n
+       ///     //loading\n
+       ///     int op1 = Configuration.Global.Get<int> ("Option1");\n
+       /// ```\n
+       /// </summary>
+       /// 
+       /// **.config**  file are simple text files with per line, a key/value pair of the form `option=value`. Keys have to be unique
+       /// in the application scope.
+       /// 
+       /// When running the application for the first time, some default options may be necessary. Their can be defined
+       /// in a special embedded resource text file with the key '**appname.default.config**'
+       public class Configuration
+       {
+               volatile bool isDirty = false;
+               string configPath;
+               Dictionary<string, ConfigItem> items = new Dictionary<string, ConfigItem> ();
+               static Configuration  globalConfig;
+
+               public static Configuration Global { get { return globalConfig; } }
+
+               public Configuration (string path, Stream defaultConf = null) {
+                       configPath = path;
+                       if (File.Exists (configPath)) {
+                               using (Stream s = new FileStream (configPath, FileMode.Open))
+                                       load (s);
+                               
+                       } else if (defaultConf != null) {                               
+                               load (defaultConf);
+                       }
+                       startSavingThread ();
+               }
+
+               static Configuration ()
+               {
+                       string configRoot =
+                               Path.Combine(
+                    
+                                       Environment.GetFolderPath(Environment.SpecialFolder.UserProfile),
+                                       ".config");
+
+                       Assembly a = Assembly.GetEntryAssembly ();
+                       string appName = a.GetName().Name;
+                       string globalConfigPath = Path.Combine (configRoot, appName);
+
+                       if (!Directory.Exists (globalConfigPath))
+                               Directory.CreateDirectory (globalConfigPath);
+
+                       globalConfigPath = Path.Combine (globalConfigPath, "global.config");
+
+                       string defaultConfigResID = appName + ".default.config";
+                       foreach (string resIds in a.GetManifestResourceNames()) {
+                               if (string.Equals (defaultConfigResID, resIds, StringComparison.OrdinalIgnoreCase)) {
+                               using (Stream s = a.GetManifestResourceStream (defaultConfigResID))
+                                       globalConfig = new Configuration (globalConfigPath, s);
+                                       return;
+                               }
+                       }
+                       globalConfig = new Configuration (globalConfigPath);
+               }
+
+               public string[] Names {
+                       get {
+                               return items.Keys.ToArray ();
+                       }
+               }
+
+               void startSavingThread(){
+                       Thread t = new Thread (savingThread);
+                       t.IsBackground = true;
+                       t.Start ();
+               }
+               void savingThread(){
+                       while(true){
+                               if (isDirty)
+                                       Save ();                                
+                               Thread.Sleep (100);
+                       }
+               }
+               /// <summary>
+               /// retrive the value of the configuration key given in parameter
+               /// </summary>
+               /// <param name="key">option name</param>
+               public T Get<T>(string key)
+               {
+                       return !items.ContainsKey (key) ? default(T) : items [key].GetValue<T> ();
+               }
+               /// <summary>
+               /// store the value of the configuration key given in parameter
+               /// </summary>
+               /// <param name="key">option name</param>
+               /// <param name="value">value for that option</param>
+               public void Set<T>(string key, T value)
+               {
+                       if (!items.ContainsKey (key)) {
+                               lock(items)
+                                       items[key] = new ConfigItem (value);
+                       }else
+                               items[key].Set (value);
+                       isDirty = true;
+               }
+               public void Save(){
+                       using (Stream s = new FileStream(configPath,FileMode.Create)){
+                               using (StreamWriter sw = new StreamWriter (s)) {
+                                       lock (items) {
+                                               foreach (string key in items.Keys) {
+                                                       if (items [key].curVal != null)
+                                                               sw.WriteLine (key + "=" + (string)items [key].curVal.ToString ());
+                                               }
+                                       }
+                               }
+                       }
+                       isDirty = false;
+               }
+               void load(Stream s){
+                       using (StreamReader sr = new StreamReader (s)) {
+                               while (!sr.EndOfStream) {
+                                       string l = sr.ReadLine();
+                                       if (string.IsNullOrEmpty (l.Trim ()))
+                                               continue;
+                                       string[] tmp = l.Trim ().Split ('=');
+                                       if (tmp.Length != 2)
+                                               continue;
+                                       items[tmp [0].Trim ()] = new ConfigItem(tmp [1].Trim ());
+                               }
+                       }
+               }
+       }
+}
+
diff --git a/Crow/src/CrowThread.cs b/Crow/src/CrowThread.cs
new file mode 100644 (file)
index 0000000..a1b4c38
--- /dev/null
@@ -0,0 +1,65 @@
+//
+// CrowThread.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.Threading;
+
+namespace Crow
+{
+       /// <summary>
+       /// Thread monitored by current interface with Finished event when state==Stopped
+       /// </summary>
+       public class CrowThread {
+               public bool cancelRequested = false;
+               Thread thread;
+               public event EventHandler Finished;
+               public GraphicObject Host;
+               public CrowThread (GraphicObject host, ThreadStart start){
+                       thread = new Thread (start);
+                       thread.IsBackground = true;
+                       Host = host;
+                       lock (Host.IFace.CrowThreads)
+                               Host.IFace.CrowThreads.Add (this);
+               }
+               public void CheckState(){
+                       if (thread.ThreadState != ThreadState.Stopped)
+                               return;
+                       Finished.Raise (Host, null);
+                       lock (Host.IFace.CrowThreads)
+                               Host.IFace.CrowThreads.Remove (this);
+               }
+               public void Start() { thread.Start();}
+               public void Cancel(){
+                       if (thread.IsAlive & !cancelRequested){
+                               cancelRequested = true;
+                               thread.Join ();
+                       }
+                       lock (Host.IFace.CrowThreads)
+                               Host.IFace.CrowThreads.Remove (this);
+               }
+       }
+}
+
diff --git a/Crow/src/DragDropEventArgs.cs b/Crow/src/DragDropEventArgs.cs
new file mode 100644 (file)
index 0000000..428a736
--- /dev/null
@@ -0,0 +1,55 @@
+//
+// LayoutingEventArgs.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+
+namespace Crow
+{
+       public class DragDropEventArgs: EventArgs
+       {
+               /// <summary>
+               /// Source of the drag and drop operation
+               /// </summary>
+               public GraphicObject DragSource;
+               /// <summary>
+               /// Target of the drag and drop operation
+               /// </summary>
+               public GraphicObject DropTarget;
+
+               //public DragDropEventArgs (GraphicObject source, GraphicObject target = null) : base()
+               public DragDropEventArgs (GraphicObject source = null, GraphicObject target = null) : base()
+               {
+                       DragSource = source;
+                       DropTarget = target;
+               }
+
+               public override string ToString ()
+               {
+                       return string.Format ("{0} => {1}", DragSource,DropTarget);
+               }
+       }
+}
+
diff --git a/Crow/src/DynAttribute.cs b/Crow/src/DynAttribute.cs
new file mode 100644 (file)
index 0000000..174eec2
--- /dev/null
@@ -0,0 +1,40 @@
+//
+// DynAttribute.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace Crow
+{
+       public class DynAttribute
+    {
+        public GraphicObject Source;
+        public string MemberName;
+        public String Value;
+    }
+}
diff --git a/Crow/src/Enums.cs b/Crow/src/Enums.cs
new file mode 100644 (file)
index 0000000..8b90d6e
--- /dev/null
@@ -0,0 +1,65 @@
+//
+// Enums.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace Crow
+{
+    public enum Orientation
+    {
+        Horizontal,
+        Vertical
+    }
+
+       public enum Alignment 
+    {
+        Top = 0x01,
+        Left = 0x02,
+               TopLeft = 0x03,
+               Right = 0x04,
+               TopRight = 0x05,
+               Bottom = 0x08,
+        BottomLeft = 0x0a,
+        BottomRight = 0x0c,
+               Center = 0x10,
+               Undefined = 0x40
+    }
+    public enum HorizontalAlignment
+    {
+        Left,
+        Right,
+        Center,
+    }
+    public enum VerticalAlignment
+    {
+        Top,
+        Bottom,
+        Center,
+    }
+}
diff --git a/Crow/src/ExtensionsMethods.cs b/Crow/src/ExtensionsMethods.cs
new file mode 100644 (file)
index 0000000..ecbc8a7
--- /dev/null
@@ -0,0 +1,225 @@
+//
+// ExtensionsMethods.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.Linq.Expressions;
+
+namespace Crow
+{
+       public static class ExtensionsMethods
+       {
+               #region Cairo extensions
+
+               public static void Rectangle(this Cairo.Context ctx, Rectangle r, double stroke = 0.0)
+               {
+                       if (stroke > 0.0) {
+                               ctx.LineWidth = stroke;
+                               double shw = stroke / 2.0;
+                               ctx.Rectangle (r.X + shw, r.Y + shw, r.Width - stroke, r.Height - stroke);
+                               ctx.Stroke ();
+                       }else
+                               ctx.Rectangle (r.X, r.Y, r.Width, r.Height);
+               }
+               public static double GetLength(this Cairo.PointD p){
+                       return Math.Sqrt (Math.Pow (p.X, 2) + Math.Pow (p.Y, 2));
+               }
+               public static Cairo.PointD GetPerp(this Cairo.PointD p){
+                       return new Cairo.PointD(-p.Y, p.X);
+               }
+               public static Cairo.PointD GetNormalized(this Cairo.PointD p){
+                       double length = p.GetLength();
+                       p.X /= length;
+                       p.Y /= length;
+                       return p;
+               }
+               public static Cairo.PointD Substract(this Cairo.PointD p1, Cairo.PointD p2){
+                       return new Cairo.PointD(p1.X - p2.X, p1.Y - p2.Y);
+               }
+               public static Cairo.PointD Divide(this Cairo.PointD p1, double d){
+                       return new Cairo.PointD(p1.X / d, p1.Y / d);
+               }
+               public static Cairo.PointD Add(this Cairo.PointD p1, Cairo.PointD p2){
+                       return new Cairo.PointD(p1.X + p2.X, p1.Y + p2.Y);
+               }
+               public static Cairo.PointD Multiply(this Cairo.PointD p1, double v){
+                       return new Cairo.PointD(p1.X * v, p1.Y * v);
+               }
+               public static void DrawCote(this Cairo.Context ctx, Cairo.PointD p1, Cairo.PointD p2,
+                       double stroke = 1.0, bool fill = false, double arrowWidth = 3.0, double arrowLength = 7.0)
+               {                       
+                       Cairo.PointD vDir = p2.Substract(p1);
+                       vDir = vDir.GetNormalized ();
+                       Cairo.PointD vPerp = vDir.GetPerp ();
+
+                       Cairo.PointD pA0 = p1.Add(vDir.Multiply(arrowLength));
+                       Cairo.PointD pA1 = p2.Substract(vDir.Multiply(arrowLength));
+
+                       Cairo.PointD vA = vPerp.Multiply (arrowWidth);
+
+                       ctx.MoveTo (p1);
+                       ctx.LineTo (pA0.Add (vA));
+                       if (fill)
+                               ctx.LineTo (pA0.Substract (vA));
+                       else
+                               ctx.MoveTo (pA0.Substract (vA));
+                       
+                       ctx.LineTo (p1);
+
+                       ctx.MoveTo (p2);
+                       ctx.LineTo (pA1.Add (vA));
+                       if (fill)
+                               ctx.LineTo (pA1.Substract (vA));
+                       else
+                               ctx.MoveTo (pA1.Substract (vA));
+                       ctx.LineTo (p2);
+
+                       if (fill)
+                               ctx.Fill ();
+
+                       ctx.MoveTo (p1);
+                       ctx.LineTo (p2);
+                       ctx.LineWidth = stroke;
+                       ctx.Stroke ();
+               }
+               public static void DrawCoteInverse(this Cairo.Context ctx, Cairo.PointD p1, Cairo.PointD p2,
+                       double stroke = 1.0, bool fill = false, double arrowWidth = 3.0, double arrowLength = 7.0)
+               {                       
+                       Cairo.PointD vDir = p2.Substract(p1);
+                       vDir = vDir.GetNormalized ();
+                       Cairo.PointD vPerp = vDir.GetPerp ();
+
+                       Cairo.PointD pA0 = p1.Add(vDir.Multiply(arrowLength));
+                       Cairo.PointD pA1 = p2.Substract(vDir.Multiply(arrowLength));
+
+                       Cairo.PointD vA = vPerp.Multiply (arrowWidth);
+
+                       ctx.MoveTo (p1.Add (vA));
+                       ctx.LineTo (pA0);
+                       ctx.LineTo (p1.Substract (vA));
+                       if (fill)
+                               ctx.LineTo (p1.Add (vA));
+
+                       ctx.MoveTo (p2.Add (vA));
+                       ctx.LineTo (pA1);
+                       ctx.LineTo (p2.Substract (vA));
+
+                       if (fill) {
+                               ctx.LineTo (p2.Add (vA));
+                               ctx.Fill ();
+                       }
+
+                       ctx.MoveTo (pA0);
+                       ctx.LineTo (pA1);
+                       ctx.LineWidth = stroke;
+                       ctx.Stroke ();
+               }
+               public static void DrawCoteFixed(this Cairo.Context ctx, Cairo.PointD p1, Cairo.PointD p2,
+                       double stroke = 1.0, double coteWidth = 3.0)
+               {                       
+                       Cairo.PointD vDir = p2.Substract(p1);
+                       vDir = vDir.GetNormalized ();
+                       Cairo.PointD vPerp = vDir.GetPerp ();
+                       Cairo.PointD vA = vPerp.Multiply (coteWidth);
+
+                       ctx.MoveTo (p1.Add (vA));
+                       ctx.LineTo (p1.Substract (vA));
+                       ctx.MoveTo (p2.Add (vA));
+                       ctx.LineTo (p2.Substract (vA));
+                       ctx.MoveTo (p1);
+                       ctx.LineTo (p2);
+                       ctx.LineWidth = stroke;
+                       ctx.Stroke ();
+               }
+
+               public static void SetSourceColor(this Cairo.Context ctx, Color c)
+               {
+                       ctx.SetSourceRGBA(c.R,c.G,c.B,c.A);
+               }
+               public static void AddColorStop(this Cairo.Gradient grad, double offset, Color c)
+               {
+                       grad.AddColorStop (offset, c);
+               }
+               #endregion
+
+               public static Orientation GetOrientation(this Alignment a){
+                       return (a==Alignment.Left) ||(a==Alignment.Right) ? Orientation.Horizontal : Orientation.Vertical;
+               }
+               public static Alignment GetOpposite(this Alignment a){
+                       switch (a) {
+                       case Alignment.Left:
+                               return Alignment.Right;
+                       case Alignment.Right:
+                               return Alignment.Left;
+                       case Alignment.Top:
+                               return Alignment.Bottom;
+                       case Alignment.Bottom:
+                               return Alignment.Top;
+                       case Alignment.TopLeft:
+                               return Alignment.BottomRight;
+                       case Alignment.TopRight:
+                               return Alignment.BottomLeft;
+                       case Alignment.BottomLeft:
+                               return Alignment.TopRight;
+                       case Alignment.BottomRight:
+                               return Alignment.TopLeft;                       
+                       }
+                       return Alignment.Center;
+               }
+               public static void Raise(this EventHandler handler, object sender, EventArgs e)
+               {
+                       if(handler != null)
+                       {
+                               handler(sender, e);
+                       }
+               }
+               public static void Raise<T>(this EventHandler<T> handler, object sender, T e)
+               {
+                       if(handler != null)
+                       {
+                               handler(sender, e);
+                       }
+               }
+               public static byte[] GetBytes(this string str)
+               {
+                       byte[] bytes = new byte[str.Length * sizeof(char)];
+                       System.Buffer.BlockCopy(str.ToCharArray(), 0, bytes, 0, bytes.Length);
+                       return bytes;
+               }
+               public static bool IsWhiteSpaceOrNewLine (this char c)
+               {
+                       return c == '\t' || c == '\r' || c == '\n' || char.IsWhiteSpace (c);
+               }
+               public static object GetDefaultValue(this object obj)
+               {                       
+                       Type t = obj.GetType ();
+                       if (t.IsValueType)
+                               return Activator.CreateInstance (t);
+                       
+                       return null;
+               }
+       }
+}
+
diff --git a/Crow/src/Fill/Fill.cs b/Crow/src/Fill/Fill.cs
new file mode 100644 (file)
index 0000000..d98e47c
--- /dev/null
@@ -0,0 +1,70 @@
+//
+// Fill.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.Collections.Generic;
+using Cairo;
+
+namespace Crow
+{
+       /// <summary>
+       /// base class for drawing content to paint on backend
+       /// </summary>
+       public abstract class Fill
+       {
+               /// <summary>
+               /// set content of fill as source for drawing operations on the backend context
+               /// </summary>
+               /// <param name="ctx">backend context</param>
+               /// <param name="bounds">paint operation bounding box, unused for SolidColor</param>
+               public abstract void SetAsSource (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 Color(Fill c){
+                       SolidColor sc = c as SolidColor;
+                       return sc == null ? default(Color) : sc.color;
+               }
+               public static implicit operator Fill(Color c){
+                       return new SolidColor (c);
+               }
+
+       }
+}
+
diff --git a/Crow/src/Font.cs b/Crow/src/Font.cs
new file mode 100644 (file)
index 0000000..4314222
--- /dev/null
@@ -0,0 +1,130 @@
+//
+// Font.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using Cairo;
+
+namespace Crow
+{
+       public enum FontStyle
+       {
+               Normal,
+               Bold,
+               Italic,
+               Underlined
+       }
+       public class Font
+       {
+               #region CTOR
+               public Font ()
+               {
+               }
+               #endregion
+
+               string _name = "sans";
+               int _size = 10;
+               FontStyle _style = FontStyle.Normal;
+
+               public string Name {
+                       get { return _name; }
+                       set { _name = value; }
+               }
+               public int Size {
+                       get { return _size; }
+                       set { _size = value; }
+               }
+               public FontStyle Style {
+                       get { return _style; }
+                       set { _style = value; }
+               }
+
+               public FontSlant Slant {
+                       get{ 
+                               switch (Style) {
+                               case FontStyle.Normal:
+                               default:
+                                       return FontSlant.Normal;
+                               case FontStyle.Italic:
+                                       return FontSlant.Italic;
+                               }                       
+                       }
+               }
+               public FontWeight Wheight {
+                       get{ 
+                               switch (Style) {
+                               case FontStyle.Bold:
+                                       return FontWeight.Bold;
+                               case FontStyle.Italic:
+                               case FontStyle.Normal:
+                               default:
+                                       return FontWeight.Normal;
+                               }                       
+                       }
+               }
+
+               #region Operators
+               public static implicit operator string(Font c)
+               {
+                       return c.ToString();
+               }
+               public static implicit operator Font(string s)
+               {
+                       Font f = new Font ();
+
+                       if (!string.IsNullOrEmpty (s)) {
+                               string[] c = s.TrimStart().TrimEnd().Split (new char[] { ',' });
+
+                               if (c.Length == 2)
+                                       f.Size = int.Parse (c [1].TrimStart());
+
+                               string[] n = c [0].TrimEnd().Split (new char[] { ' ' });
+
+                               f.Name = n [0];
+
+                               if (n.Length > 1)
+                                       f.Style = (FontStyle)Enum.Parse (typeof(FontStyle), n[n.Length-1], true);
+                       }
+
+                       return f;
+               }
+               #endregion
+
+               public override string ToString()
+               {
+                       if (_style == FontStyle.Normal)
+                               return string.Format("{0},{1}", _name, _size);
+                       else
+                               return string.Format("{0} {1},{2}", _name, _style, _size);
+
+               }
+
+               public static object Parse(string s)
+               {
+                       return (Font)s;
+               }
+       }
+}
+
diff --git a/Crow/src/Gradient.cs b/Crow/src/Gradient.cs
new file mode 100644 (file)
index 0000000..2630c42
--- /dev/null
@@ -0,0 +1,140 @@
+//
+// Gradient.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.Collections.Generic;
+using Cairo;
+
+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 (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) {
+                               if (cs == null)
+                                       continue;
+                               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/Crow/src/GraphicObjects/Border.cs b/Crow/src/GraphicObjects/Border.cs
new file mode 100644 (file)
index 0000000..9379c26
--- /dev/null
@@ -0,0 +1,273 @@
+//
+// Border.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.Xml.Serialization;
+using System.ComponentModel;
+using System.Diagnostics;
+using Cairo;
+
+namespace Crow
+{
+       /// <summary>
+       /// provide an easy way to get 3d border for buttons
+       /// </summary>
+       public enum BorderStyle {
+               Normal,
+               Raised,
+               Sunken
+       };
+
+       /// <summary>
+       /// simple container with border
+       /// </summary>
+       public class Border : Container
+       {
+               #region CTOR
+               protected Border () : base(){}
+               public Border (Interface iface) : base(iface){}
+               #endregion
+
+               #region private fields
+               int _borderWidth;
+               BorderStyle _borderStyle;
+               Fill raisedColor = Color.Grey;
+               Fill sunkenColor = Color.DimGrey;
+               #endregion
+
+               #region public properties
+               /// <summary>
+               /// use to define the colors of the 3d border
+               /// </summary>
+               
+               public virtual Fill RaisedColor {
+                       get { return raisedColor; }
+                       set {
+                               if (raisedColor == value)
+                                       return;
+                               raisedColor = value;
+                               NotifyValueChanged ("RaisedColor", raisedColor);
+                               RegisterForRedraw ();
+                       }
+               }
+               /// <summary>
+               /// use to define the colors of the 3d border
+               /// </summary>
+               
+               public virtual Fill SunkenColor {
+                       get { return sunkenColor; }
+                       set {
+                               if (sunkenColor == value)
+                                       return;
+                               sunkenColor = value;
+                               NotifyValueChanged ("SunkenColor", sunkenColor);
+                               RegisterForRedraw ();
+                       }
+               }
+               /// <summary>
+               /// border width in pixels
+               /// </summary>
+               [DefaultValue(1)]
+               public virtual int BorderWidth {
+                       get { return _borderWidth; }
+                       set {
+                               _borderWidth = value;
+                               RegisterForGraphicUpdate ();
+                       }
+               }
+               /// <summary>
+               /// allow 3d border effects
+               /// </summary>
+               [DefaultValue(BorderStyle.Normal)]
+               public virtual BorderStyle BorderStyle {
+                       get { return _borderStyle; }
+                       set {
+                               if (_borderStyle == value)
+                                       return;
+                               _borderStyle = value;
+                               RegisterForGraphicUpdate ();
+                       }
+               }
+               #endregion
+
+               #region GraphicObject override
+               [XmlIgnore]public override Rectangle ClientRectangle {
+                       get {
+                               Rectangle cb = base.ClientRectangle;
+                               cb.Inflate (- BorderWidth);
+                               return cb;
+                       }
+               }
+
+               protected override int measureRawSize (LayoutingType lt)
+               {
+                       int tmp = base.measureRawSize (lt);
+                       return tmp < 0 ? tmp : tmp + 2 * BorderWidth;
+               }
+               protected override void onDraw (Context gr)
+               {
+                       drawborder2 (gr);
+
+                       gr.Save ();
+                       if (ClipToClientRect) {
+                               //clip to client zone
+                               CairoHelpers.CairoRectangle (gr, ClientRectangle,Math.Max(0.0, CornerRadius-Margin));
+                               gr.Clip ();
+                       }
+
+                       if (child != null)
+                               child.Paint (ref gr);
+                       gr.Restore ();
+               }
+               void drawborder2(Context gr){
+                       Rectangle rBack = new Rectangle (Slot.Size);
+
+                       //rBack.Inflate (-Margin);
+                       //                      if (BorderWidth > 0)
+                       //                              rBack.Inflate (-BorderWidth / 2);
+
+                       Background.SetAsSource (gr, rBack);
+                       CairoHelpers.CairoRectangle(gr, rBack, CornerRadius);
+                       gr.Fill ();
+
+
+                       if (BorderStyle == BorderStyle.Normal) {
+                               if (BorderWidth > 0) {
+                                       Foreground.SetAsSource (gr, rBack);
+                                       CairoHelpers.CairoRectangle (gr, rBack, CornerRadius, BorderWidth);
+                               }
+                       } else {
+                               gr.LineWidth = 1.0;
+                               if (CornerRadius > 0.0) {
+                                       double radius = CornerRadius;
+                                       if ((radius > rBack.Height / 2.0) || (radius > rBack.Width / 2.0))
+                                               radius = Math.Min (rBack.Height / 2.0, rBack.Width / 2.0);
+                                       gr.SetSourceColor (sunkenColor);
+                                       gr.MoveTo (0.5 + rBack.Left, -0.5 + rBack.Bottom - radius);
+                                       gr.ArcNegative (0.5 + rBack.Left + radius, -0.5 + rBack.Bottom - radius, radius, Math.PI, Math.PI * 0.75);
+                                       gr.MoveTo (0.5 + rBack.Left, -0.5 + rBack.Bottom - radius);
+                                       gr.LineTo (0.5 + rBack.Left, 0.5 + rBack.Top + radius);
+                                       gr.Arc (0.5 + rBack.Left + radius, 0.5 + rBack.Top + radius, radius, Math.PI, Math.PI * 1.5);
+                                       gr.LineTo (-0.5 + rBack.Right - radius, 0.5 + rBack.Top);
+                                       gr.Arc (-0.5 + rBack.Right - radius, 0.5 + rBack.Top + radius, radius, Math.PI * 1.5, Math.PI * 1.75);
+                                       gr.Stroke ();
+                                       if (BorderStyle == BorderStyle.Raised) {
+                                               gr.MoveTo (-1.5 + rBack.Right, 1.5 + rBack.Top + radius);
+                                               gr.ArcNegative (-0.5 + rBack.Right - radius, 0.5 + rBack.Top + radius, radius - 1.0, 0, -Math.PI * 0.25);
+                                               gr.MoveTo (-1.5 + rBack.Right, 1.5 + rBack.Top + radius);
+                                               gr.LineTo (-1.5 + rBack.Right, -1.5 + rBack.Bottom - radius);
+                                               gr.Arc (-0.5 + rBack.Right - radius, -0.5 + rBack.Bottom - radius, radius - 1.0, 0, Math.PI / 2.0);
+                                               gr.LineTo (1.5 + rBack.Left + radius, -1.5 + rBack.Bottom);
+                                               gr.Arc (0.5 + rBack.Left + radius, -0.5 + rBack.Bottom - radius, radius - 1.0, Math.PI / 2.0, Math.PI * 0.75);
+                                               gr.Stroke ();
+
+                                               gr.SetSourceColor (raisedColor);
+                                               gr.MoveTo (1.5 + rBack.Left, -1.5 + rBack.Bottom - radius);
+                                               gr.ArcNegative (0.5 + rBack.Left + radius, -0.5 + rBack.Bottom - radius, radius - 1.0, Math.PI, Math.PI * 0.75);
+                                               gr.MoveTo (1.5 + rBack.Left, -1.5 + rBack.Bottom - radius);
+                                               gr.LineTo (1.5 + rBack.Left, 1.5 + rBack.Top + radius);
+                                               gr.Arc (0.5 + rBack.Left + radius, 0.5 + rBack.Top + radius, radius - 1.0, Math.PI, Math.PI * 1.5);
+                                               gr.LineTo (-1.5 + rBack.Right - radius, 1.5 + rBack.Top);
+                                               gr.Arc (-0.5 + rBack.Right - radius, 0.5 + rBack.Top + radius, radius - 1.0, Math.PI * 1.5, Math.PI * 1.75);
+                                       } else {
+                                               gr.Stroke ();
+                                               gr.SetSourceColor (raisedColor);
+                                       }
+                                       gr.MoveTo (-0.5 + rBack.Right, 0.5 + rBack.Top + radius);
+                                       gr.ArcNegative (-0.5 + rBack.Right - radius, 0.5 + rBack.Top + radius, radius, 0, -Math.PI * 0.25);
+                                       gr.MoveTo (-0.5 + rBack.Right, 0.5 + rBack.Top + radius);
+                                       gr.LineTo (-0.5 + rBack.Right, -0.5 + rBack.Bottom - radius);
+                                       gr.Arc (-0.5 + rBack.Right - radius, -0.5 + rBack.Bottom - radius, radius, 0, Math.PI / 2.0);
+                                       gr.LineTo (0.5 + rBack.Left + radius, -0.5 + rBack.Bottom);
+                                       gr.Arc (0.5 + rBack.Left + radius, -0.5 + rBack.Bottom - radius, radius, Math.PI / 2.0, Math.PI * 0.75);
+                                       gr.Stroke ();
+                               } else {
+                                       gr.SetSourceColor (sunkenColor);
+                                       gr.MoveTo (0.5 + rBack.Left, rBack.Bottom);
+                                       gr.LineTo (0.5 + rBack.Left, 0.5 + rBack.Y);
+                                       gr.LineTo (rBack.Right, 0.5 + rBack.Y);
+                                       if (BorderStyle == BorderStyle.Raised) {
+                                               gr.MoveTo (-1.5 + rBack.Right, 2.0 + rBack.Y);
+                                               gr.LineTo (-1.5 + rBack.Right, -1.5 + rBack.Bottom);
+                                               gr.LineTo (2.0 + rBack.Left, -1.5 + rBack.Bottom);
+                                               gr.Stroke ();
+                                               gr.SetSourceColor (raisedColor);
+                                               gr.MoveTo (1.5 + rBack.Left, -1.0 + rBack.Bottom);
+                                               gr.LineTo (1.5 + rBack.Left, 1.5 + rBack.Y);
+                                               gr.LineTo (rBack.Right, 1.5 + rBack.Y);
+                                       } else {
+                                               gr.Stroke ();
+                                               gr.SetSourceColor (raisedColor);
+                                       }
+                                       gr.MoveTo (-0.5 + rBack.Right, 1.5 + rBack.Y);
+                                       gr.LineTo (-0.5 + rBack.Right, -0.5 + rBack.Bottom);
+                                       gr.LineTo (1.0 + rBack.Left, -0.5 + rBack.Bottom);
+                                       gr.Stroke ();
+                               }
+                       }
+               }
+               void drawborder1(Context gr){
+                       Rectangle rBack = new Rectangle (Slot.Size);
+
+                       //rBack.Inflate (-Margin);
+                       //                      if (BorderWidth > 0)
+                       //                              rBack.Inflate (-BorderWidth / 2);
+
+                       Background.SetAsSource (gr, rBack);
+                       CairoHelpers.CairoRectangle(gr, rBack, CornerRadius);
+                       gr.Fill ();
+
+                       double bw = _borderWidth;
+                       double crad = CornerRadius;
+
+                       if (bw > 0) {
+                               if (BorderStyle == BorderStyle.Normal)
+                                       Foreground.SetAsSource (gr, rBack);
+                               else {
+                                       if (BorderStyle == BorderStyle.Sunken)
+                                               gr.SetSourceColor (raisedColor);
+                                       else
+                                               gr.SetSourceColor (sunkenColor);
+
+                                       CairoHelpers.CairoRectangle (gr, rBack, crad, bw);
+
+                                       if (BorderStyle == BorderStyle.Sunken)
+                                               gr.SetSourceColor (sunkenColor);
+                                       else
+                                               gr.SetSourceColor (raisedColor);
+
+                                       bw /= 2.0;
+                                       rBack.Width -= (int)Math.Round(bw);
+                                       rBack.Height -= (int)Math.Round(bw);
+                               }
+
+                               CairoHelpers.CairoRectangle (gr, rBack, crad, bw);
+                       }
+               }
+               #endregion
+       }
+}
+
diff --git a/Crow/src/GraphicObjects/Button.cs b/Crow/src/GraphicObjects/Button.cs
new file mode 100644 (file)
index 0000000..3061251
--- /dev/null
@@ -0,0 +1,108 @@
+//
+// Button.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+//using OpenTK.Graphics.OpenGL;
+
+using System.Diagnostics;
+
+using System.Xml.Serialization;
+using Cairo;
+using System.ComponentModel;
+
+namespace Crow
+{
+       /// <summary>
+       /// templated button control
+       /// </summary>
+    public class Button : TemplatedContainer
+    {
+               #region CTOR
+               protected Button() : base() {}
+               public Button (Interface iface) : base(iface){}
+               #endregion
+
+               string image;
+               bool isPressed;
+
+               public event EventHandler Pressed;
+               public event EventHandler Released;
+
+               #region GraphicObject Overrides
+               public override void onMouseDown (object sender, MouseButtonEventArgs e)
+               {
+                       IsPressed = true;
+
+                       base.onMouseDown (sender, e);
+
+                       //TODO:remove
+                       NotifyValueChanged ("State", "pressed");
+               }
+               public override void onMouseUp (object sender, MouseButtonEventArgs e)
+               {
+                       IsPressed = false;
+
+                       base.onMouseUp (sender, e);
+
+                       //TODO:remove
+                       NotifyValueChanged ("State", "normal");
+               }
+               #endregion
+
+               [DefaultValue("#Crow.Images.button.svg")]
+               public string Image {
+                       get { return image; }
+                       set {
+                               if (image == value)
+                                       return;
+                               image = value;
+                               NotifyValueChanged ("Image", image);
+                       }
+               }
+               [DefaultValue(false)]
+               public bool IsPressed
+               {
+                       get { return isPressed; }
+                       set
+                       {
+                               if (isPressed == value)
+                                       return;
+
+                               isPressed = value;
+
+                               NotifyValueChanged ("IsPressed", isPressed);
+
+                               if (isPressed)
+                                       Pressed.Raise (this, null);
+                               else
+                                       Released.Raise (this, null);
+                       }
+               }
+       }
+}
diff --git a/Crow/src/GraphicObjects/CheckBox.cs b/Crow/src/GraphicObjects/CheckBox.cs
new file mode 100644 (file)
index 0000000..4860d60
--- /dev/null
@@ -0,0 +1,74 @@
+//
+// CheckBox.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.ComponentModel;
+using System.Xml.Serialization;
+
+namespace Crow
+{
+       /// <summary>
+       /// templated checkbox control
+       /// </summary>
+       public class CheckBox : TemplatedControl
+       {
+               #region CTOR
+               protected CheckBox() : base(){}
+               public CheckBox (Interface iface) : base(iface){}
+               #endregion
+
+               bool isChecked;
+
+               public event EventHandler Checked;
+               public event EventHandler Unchecked;
+
+               [DefaultValue(false)]
+               public bool IsChecked
+               {
+                       get { return isChecked; }
+                       set
+                       {
+                               if (isChecked == value)
+                                       return;
+
+                               isChecked = value;
+
+                               NotifyValueChanged ("IsChecked", value);
+
+                               if (isChecked)
+                                       Checked.Raise (this, null);
+                               else
+                                       Unchecked.Raise (this, null);
+                       }
+               }
+
+               public override void onMouseDown (object sender, MouseButtonEventArgs e)
+               {
+                       IsChecked = !IsChecked;
+                       base.onMouseDown (sender, e);
+               }
+       }
+}
diff --git a/Crow/src/GraphicObjects/ColorPicker.cs b/Crow/src/GraphicObjects/ColorPicker.cs
new file mode 100644 (file)
index 0000000..dd45023
--- /dev/null
@@ -0,0 +1,228 @@
+//
+// ColorPicker.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.Xml.Serialization;
+using System.ComponentModel;
+
+namespace Crow
+{
+       /// <summary>
+       /// templated color selector control
+       /// </summary>
+       public class ColorPicker : TemplatedControl
+       {
+               #region CTOR
+               protected ColorPicker() : base(){}
+               public ColorPicker (Interface iface) : base(iface){}
+               #endregion
+
+               const double div = 255.0;
+               const double colDiv = 1.0 / div;
+
+               Color curColor;
+               double h,s,v;
+
+               
+               public virtual double R {
+                       get { return Math.Round(curColor.R * div); }
+                       set {
+                               if (R == value)
+                                       return;
+                               curColor.R = value * colDiv;
+                               NotifyValueChanged ("R", R);
+                               hsvFromRGB ();
+                               notifyCurColorHasChanged ();
+                       }
+               }
+               
+               public virtual double G {
+                       get { return Math.Round(curColor.G * div); }
+                       set {
+                               if (G == value)
+                                       return;
+                               curColor.G = value * colDiv;
+                               NotifyValueChanged ("G", G);
+                               notifyCurColorHasChanged ();
+                               hsvFromRGB ();
+                       }
+               }
+               
+               public virtual double B {
+                       get { return Math.Round(curColor.B * div); }
+                       set {
+                               if (B == value)
+                                       return;
+                               curColor.B = value * colDiv;
+                               NotifyValueChanged ("B", B);
+                               notifyCurColorHasChanged ();
+                               hsvFromRGB ();
+                       }
+               }
+               
+               public virtual double A {
+                       get { return Math.Round(curColor.A * div); }
+                       set {
+                               if (A == value)
+                                       return;
+                               curColor.A = value * colDiv;
+                               NotifyValueChanged ("A", A);
+                               notifyCurColorHasChanged ();
+                               hsvFromRGB ();
+                       }
+               }
+               
+               public virtual double H {
+                       get { return Math.Round (h, 3); }
+                       set {
+                               if (H == value)
+                                       return;
+                               h = value;
+                               NotifyValueChanged ("H", H);
+                               rgbFromHSV ();
+                       }
+               }
+               
+               public virtual double S {
+                       get { return Math.Round (s, 2); }
+                       set {
+                               if (s == value)
+                                       return;
+                               s = value;
+                               NotifyValueChanged ("S", S);
+                               rgbFromHSV ();
+                       }
+               }
+               
+               public virtual double V {
+                       get { return Math.Round (v, 2); }
+                       set {
+                               if (v == value)
+                                       return;
+                               v = value;
+                               NotifyValueChanged ("V", V);
+                               rgbFromHSV ();
+                       }
+               }
+
+               
+               public virtual Fill SelectedColor {
+                       get { return new SolidColor(curColor); }
+                       set {
+                               if (value == null)
+                                       curColor = default(Color);
+                               else if (value is SolidColor) {
+                                       Color c = (value as SolidColor).color;
+                                       if (curColor == c)
+                                               return;
+                                       curColor = c;
+                               }
+                               notifyCurColorHasChanged ();
+                               notifyRGBAHasChanged ();
+                               hsvFromRGB ();
+                       }
+               }
+               
+               public virtual Color SelectedRawColor {
+                       get { return curColor; }
+                       set {
+                               if (curColor == value)
+                                       return;
+                               curColor = value;
+                               notifyCurColorHasChanged ();
+                               notifyRGBAHasChanged ();
+                               hsvFromRGB ();
+                       }
+               }
+               void notifyCurColorHasChanged(){
+                       NotifyValueChanged ("SelectedColor", SelectedColor);
+                       NotifyValueChanged ("SelectedRawColor", curColor);
+                       string n = curColor.ToString ();
+                       if (char.IsLetter(n[0]))
+                               NotifyValueChanged ("SelectedColorName", n);
+                       else
+                               NotifyValueChanged ("SelectedColorName", "-");
+                       string tmp = ((int)Math.Round (R)).ToString ("X2") +
+                                    ((int)Math.Round (G)).ToString ("X2") +
+                                    ((int)Math.Round (B)).ToString ("X2");
+                       if (curColor.A < 1.0)
+                               tmp += ((int)Math.Round (A)).ToString ("X2");
+                       NotifyValueChanged ("HexColor", tmp);
+               }
+               void notifyRGBAHasChanged(){
+                       NotifyValueChanged ("R", R);
+                       NotifyValueChanged ("G", G);
+                       NotifyValueChanged ("B", B);
+                       NotifyValueChanged ("A", A);
+               }
+               void notifyHSVHasChanged(){
+                       NotifyValueChanged ("H", H);
+                       NotifyValueChanged ("S", S);
+                       NotifyValueChanged ("V", V);
+               }
+               void hsvFromRGB(){
+                       Color c = curColor;
+                       c.ResetName ();
+                       double min = Math.Min (c.R, Math.Min (c.G, c.B));       //Min. value of RGB
+                       double max = Math.Max (c.R, Math.Max (c.G, c.B));       //Max. value of RGB
+                       double diff = max - min;                                                        //Delta RGB value
+
+                       v = max;
+
+                       if ( diff == 0 )//This is a gray, no chroma...
+                       {
+                               h = 0;
+                               s = 0;
+                       }else{//Chromatic data...
+                               s = diff / max;
+
+                               double diffR = (((max - c.R) / 6.0) + (diff / 2.0)) / diff;
+                               double diffG = (((max - c.G) / 6.0) + (diff / 2.0)) / diff;
+                               double diffB = (((max - c.B) / 6.0) + (diff / 2.0)) / diff;
+
+                               if (c.R == max)
+                                       h = diffB - diffG;
+                               else if (c.G == max)
+                                       h = (1.0 / 3.0) + diffR - diffB;
+                               else if (c.B == max)
+                                       h = (2.0 / 3.0) + diffG - diffR;
+
+                               if (h < 0)
+                                       h += 1;
+                               if (h > 1)
+                                       h -= 1;
+
+                       }
+                       notifyHSVHasChanged ();
+               }
+               void rgbFromHSV(){
+                       curColor = Color.FromHSV (h, v, s, curColor.A);
+                       notifyCurColorHasChanged ();
+                       notifyRGBAHasChanged ();
+               }
+       }
+}
+
diff --git a/Crow/src/GraphicObjects/ColorSelector.cs b/Crow/src/GraphicObjects/ColorSelector.cs
new file mode 100644 (file)
index 0000000..ee57a26
--- /dev/null
@@ -0,0 +1,74 @@
+//
+// ColorSelector.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.Xml.Serialization;
+using System.ComponentModel;
+
+namespace Crow
+{
+       /// <summary>
+       /// simple squarred rgb color selector
+       /// </summary>
+       [DesignIgnore]
+       public class ColorSelector : GraphicObject
+       {
+               #region CTOR
+               protected ColorSelector() : base(){}
+               public ColorSelector (Interface iface) : base(iface){}
+               #endregion
+
+               const double div = 255.0;
+               const double colDiv = 1.0 / div;
+               protected Point mousePos;
+
+               public override void onMouseMove (object sender, MouseMoveEventArgs e)
+               {
+                       base.onMouseMove (sender, e);
+                       if (IFace.Mouse.LeftButton == ButtonState.Released)
+                               return;
+                       updateMouseLocalPos (e.Position);
+               }
+               public override void onMouseDown (object sender, MouseButtonEventArgs e)
+               {
+                       base.onMouseDown (sender, e);
+                       if (e.Button == MouseButton.Left)
+                               updateMouseLocalPos (e.Position);
+               }
+
+               protected virtual void updateMouseLocalPos(Point mPos){
+                       Rectangle r = ScreenCoordinates (Slot);
+                       Rectangle cb = ClientRectangle;
+                       mousePos = mPos - r.Position;
+
+                       mousePos.X = Math.Max(cb.X, mousePos.X);
+                       mousePos.X = Math.Min(cb.Right, mousePos.X);
+                       mousePos.Y = Math.Max(cb.Y, mousePos.Y);
+                       mousePos.Y = Math.Min(cb.Bottom, mousePos.Y);
+               }
+       }
+}
+
diff --git a/Crow/src/GraphicObjects/ComboBox.cs b/Crow/src/GraphicObjects/ComboBox.cs
new file mode 100644 (file)
index 0000000..6122705
--- /dev/null
@@ -0,0 +1,59 @@
+//
+// ComboBox.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.Xml.Serialization;
+
+namespace Crow
+{
+       /// <summary>
+       /// templated control for selecting value in a pop up list
+       /// </summary>
+       public class ComboBox : ListBox
+    {
+               #region CTOR
+               protected ComboBox() : base(){}
+               public ComboBox (Interface iface) : base(iface){}
+               #endregion
+
+               Size minimumPopupSize = "10,10";
+               [XmlIgnore]public Size MinimumPopupSize{
+                       get { return minimumPopupSize; }
+                       set {
+                               minimumPopupSize = value;
+                               NotifyValueChanged ("MinimumPopupSize", minimumPopupSize);
+                       }
+               }
+
+               public override void OnLayoutChanges (LayoutingType layoutType)
+               {
+                       base.OnLayoutChanges (layoutType);
+
+                       if (layoutType == LayoutingType.Width)
+                               MinimumPopupSize = new Size (this.Slot.Width, minimumPopupSize.Height);                 
+               }
+       }
+}
diff --git a/Crow/src/GraphicObjects/Container.cs b/Crow/src/GraphicObjects/Container.cs
new file mode 100644 (file)
index 0000000..364bad8
--- /dev/null
@@ -0,0 +1,72 @@
+//
+// Container.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.Xml.Serialization;
+using System.Reflection;
+using System.ComponentModel;
+using System.Linq;
+using System.Threading;
+
+namespace Crow
+{
+       /// <summary>
+       /// simple container accepting one child
+       /// </summary>
+    public class Container : PrivateContainer
+    {
+               #if DESIGN_MODE
+               public override void getIML (System.Xml.XmlDocument doc, System.Xml.XmlNode parentElem)
+               {
+                       if (this.design_isTGItem)
+                               return;
+                       base.getIML (doc, parentElem);
+                       if (child == null)
+                               return;
+                       child.getIML (doc, parentElem.LastChild);
+               }
+               #endif
+
+               #region CTOR
+               protected Container() : base(){}
+               public Container (Interface iface) : base(iface){}
+               #endregion
+
+               [XmlIgnore]public GraphicObject Child {
+                       get { return child; }
+                       set { base.SetChild(value); }
+               }
+               /// <summary>
+               /// override this to handle specific steps in child addition in derived class,
+               /// and don't forget to call the base.SetChild
+               /// </summary>
+               public virtual void SetChild(GraphicObject _child)
+               {
+                       base.SetChild (_child);
+               }
+       }
+}
+
diff --git a/Crow/src/GraphicObjects/DataSourceChangeEventArgs.cs b/Crow/src/GraphicObjects/DataSourceChangeEventArgs.cs
new file mode 100644 (file)
index 0000000..a251935
--- /dev/null
@@ -0,0 +1,46 @@
+//
+// DataSourceChangeEventArgs.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+using System;
+
+namespace Crow
+{
+       public class DataSourceChangeEventArgs : EventArgs
+       {
+               public object OldDataSource;
+               public object NewDataSource;
+
+               public DataSourceChangeEventArgs (object oldDataSource, object newDataSource) : base()
+               {
+                       OldDataSource = oldDataSource;
+                       NewDataSource = newDataSource;
+               }
+               public override string ToString ()
+               {
+                       return string.Format ("DSChangeEA: {0} => {1}", OldDataSource, NewDataSource);
+               }
+       }
+}
+
diff --git a/Crow/src/GraphicObjects/DirectoryView.cs b/Crow/src/GraphicObjects/DirectoryView.cs
new file mode 100644 (file)
index 0000000..b021789
--- /dev/null
@@ -0,0 +1,136 @@
+//
+// DirectoryView.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.Xml.Serialization;
+using System.ComponentModel;
+using System.IO;
+using System.Collections.Generic;
+using System.Linq;
+
+namespace Crow
+{
+       /// <summary>
+       /// templated directory viewer
+       /// </summary>
+       public class DirectoryView : TemplatedControl
+       {
+               #region CTOR
+               protected DirectoryView() : base(){}
+               public DirectoryView (Interface iface) : base(iface){}
+               #endregion
+
+               #region events
+               public event EventHandler<SelectionChangeEventArgs> SelectedItemChanged;
+               #endregion
+
+               string currentDirectory = "/";
+               bool showFiles, showHidden;
+               string fileMask = "*.*";
+
+               object _selectedItem;
+               [XmlIgnore]public object SelectedItem {
+                       get {
+                               return _selectedItem;
+                       }
+                       set { 
+                               if (value == _selectedItem)
+                                       return;
+                               _selectedItem = value;
+                               NotifyValueChanged ("SelectedItem", _selectedItem);
+                       }
+               }
+               [DefaultValue(true)]
+               public virtual bool ShowFiles {
+                       get { return showFiles; }
+                       set {
+                               if (showFiles == value)
+                                       return;
+                               showFiles = value;
+                               NotifyValueChanged ("ShowFiles", showFiles);
+                               NotifyValueChanged ("FileSystemEntries", FileSystemEntries);
+                       }
+               }
+               [DefaultValue(false)]
+               public virtual bool ShowHidden {
+                       get { return showHidden; }
+                       set {
+                               if (showHidden == value)
+                                       return;
+                               showHidden = value;
+                               NotifyValueChanged ("ShowHidden", showHidden);
+                               NotifyValueChanged ("FileSystemEntries", FileSystemEntries);
+                       }
+               }
+               [DefaultValue("*.*")]
+               public virtual string FileMask {
+                       get { return fileMask; }
+                       set {
+                               if (fileMask == value)
+                                       return;
+                               fileMask = value;
+                               NotifyValueChanged ("FileMask", fileMask);
+                               NotifyValueChanged ("FileSystemEntries", FileSystemEntries);
+                       }
+               }
+               [DefaultValue("/")]
+               public virtual string CurrentDirectory {
+                       get { return currentDirectory; }
+                       set {
+                               if (currentDirectory == value)
+                                       return;
+                               currentDirectory = value;
+                               NotifyValueChanged ("CurrentDirectory", currentDirectory);
+                               NotifyValueChanged ("FileSystemEntries", FileSystemEntries);
+                       }
+               }
+               [XmlIgnore]public FileSystemInfo[] FileSystemEntries {
+                       get {
+                               try {
+                                       if (string.IsNullOrEmpty(CurrentDirectory))
+                                               return null;
+                                       DirectoryInfo di = new DirectoryInfo(CurrentDirectory);
+                                       List<FileSystemInfo> fi = new List<FileSystemInfo> (di.GetDirectories());
+                                       if (showFiles && !string.IsNullOrEmpty(fileMask))
+                                               fi.AddRange(di.GetFiles(fileMask));
+                                       return showHidden ?
+                                               fi.ToArray() :
+                                               fi.Where(f=>!f.Attributes.HasFlag (FileAttributes.Hidden)).ToArray();
+                               } catch (Exception ex) {
+                                       Console.WriteLine (ex.ToString ());
+                                       return null;
+                               }
+                       }
+               }
+               public void onSelectedItemChanged (object sender, SelectionChangeEventArgs e){
+                       if (e.NewValue == SelectedItem)
+                               return;
+                       SelectedItem = e.NewValue;
+                       SelectedItemChanged.Raise (this, e);
+               }
+       }
+}
+
diff --git a/Crow/src/GraphicObjects/DockStack.cs b/Crow/src/GraphicObjects/DockStack.cs
new file mode 100644 (file)
index 0000000..75f0d2b
--- /dev/null
@@ -0,0 +1,473 @@
+//
+// DockStack.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp_bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+using System;
+using Crow.IML;
+using System.Linq;
+using System.Text;
+using System.IO;
+
+namespace Crow
+{
+       [DesignIgnore]
+       public class DockStack : GenericStack
+       {               
+               #region CTor
+               public DockStack ()     {}
+               public DockStack (Interface iface) : base (iface) {}
+               #endregion
+
+               /*static int color = 10;
+
+               protected override void onInitialized (object sender, EventArgs e)
+               {
+                       base.onInitialized (sender, e);
+                       Background = Color.ColorDic.Values.ToList()[color++];
+               }*/
+               public override void AddChild (GraphicObject g)
+               {
+                       base.AddChild (g);
+                       if (localLogicalParentIsNull)
+                               g.LogicalParent = this;
+                       else
+                               g.LogicalParent = this.LogicalParent;
+               }
+               public override void InsertChild (int idx, GraphicObject g)
+               {
+                       base.InsertChild (idx, g);
+                       g.LogicalParent = this.LogicalParent;
+               }
+
+               public override bool PointIsIn (ref Point m)
+               {                       
+                       if (!base.PointIsIn(ref m))
+                               return false;
+
+                       Group p = Parent as Group;
+                       if (p != null) {
+                               childrenRWLock.EnterReadLock ();
+                               for (int i = p.Children.Count - 1; i >= 0; i--) {
+                                       if (p.Children [i] == this)
+                                               break;
+                                       if (p.Children [i].IsDragged)
+                                               continue;
+                                       if (p.Children [i].Slot.ContainsOrIsEqual (m)) {
+                                               childrenRWLock.ExitReadLock ();
+                                               return false;
+                                       }
+                               }
+                               childrenRWLock.ExitReadLock ();
+                       }
+
+                       return Slot.ContainsOrIsEqual(m);
+               }
+
+//             public override void OnLayoutChanges (LayoutingType layoutType)
+//             {
+//                     base.OnLayoutChanges (layoutType);
+//
+//                     if ((layoutType & LayoutingType.Sizing) > 0)
+//                             computeRects();                 
+//             }
+
+               Rectangle rIn = default(Rectangle);
+               double dockThresh = 0.2;
+               GraphicObject focusedChild;
+               internal GraphicObject stretchedChild;
+
+               void getFocusedChild (Point lm) {
+                       Rectangle cb = ClientRectangle;
+
+                       childrenRWLock.EnterReadLock ();
+                       foreach (GraphicObject c in Children) {
+                               Rectangle bounds = c.Slot + cb.Position;
+                               if (!bounds.ContainsOrIsEqual (lm))
+                                       continue;
+                               rIn = bounds;
+                               focusedChild = c;
+                               break;
+                       }
+                       childrenRWLock.ExitReadLock ();                 
+               }
+
+               public override void onMouseMove (object sender, MouseMoveEventArgs e)
+               {
+                       if (IsDropTarget) {                             
+                               DockWindow dw = IFace.DragAndDropOperation.DragSource as DockWindow;
+                               if (dw == null || dw.IsDocked) {
+                                       base.onMouseMove (sender, e);
+                                       return;
+                               }
+
+                               Alignment curDockPos = dw.DockingPosition;
+                               dw.DockingPosition = Alignment.Undefined;
+
+                               Rectangle cb = ClientRectangle;
+                               Point lm = ScreenPointToLocal (e.Position);
+
+                               if (Children.Count == 0) {
+                                       Rectangle r = cb;
+                                       r.Inflate (r.Width / -5, r.Height / -5);
+                                       if (r.ContainsOrIsEqual(lm))
+                                               dw.DockingPosition = Alignment.Center;
+                               } else {
+                                       rIn = cb;
+
+                                       if (Orientation == Orientation.Horizontal || Children.Count == 1) {
+                                               if (lm.Y > cb.Top + cb.Height / 3 && lm.Y < cb.Bottom - cb.Height / 3) {
+                                                       if (lm.X < cb.Left + cb.Width / 3)
+                                                               dw.DockingPosition = Alignment.Left;
+                                                       else if (lm.X > cb.Right - cb.Width / 3)
+                                                               dw.DockingPosition = Alignment.Right;                                                   
+                                               } else {
+                                                       getFocusedChild (lm);
+                                                       if (focusedChild != null) {
+                                                               if (lm.Y < rIn.Top + rIn.Height / 3)
+                                                                       dw.DockingPosition = Alignment.Top;
+                                                               else if (lm.Y > rIn.Bottom - rIn.Height / 3)
+                                                                       dw.DockingPosition = Alignment.Bottom;                                                                          
+                                                       }
+                                               }
+                                       }
+                                       if (Orientation == Orientation.Vertical || Children.Count == 1) {
+                                               if (lm.X > cb.Left + cb.Width / 3 && lm.X < cb.Right - cb.Width / 3) {
+                                                       if (lm.Y < cb.Top + cb.Height / 3)
+                                                               dw.DockingPosition = Alignment.Top;
+                                                       else if (lm.Y > cb.Bottom - cb.Height / 3)
+                                                               dw.DockingPosition = Alignment.Bottom;                                                  
+                                               } else {
+                                                       getFocusedChild (lm);
+                                                       if (focusedChild != null) {
+                                                               if (lm.X < rIn.Left + rIn.Width / 3)
+                                                                       dw.DockingPosition = Alignment.Left;
+                                                               else if (lm.X > rIn.Right - rIn.Width / 3)
+                                                                       dw.DockingPosition = Alignment.Right;                                                                           
+                                                       }
+                                               }
+                                       }
+                               }
+
+                               if (curDockPos != dw.DockingPosition)
+                                       RegisterForGraphicUpdate ();
+                       }
+                       base.onMouseMove (sender, e);
+               }
+
+               protected override void onDragEnter (object sender, DragDropEventArgs e)
+               {
+                       base.onDragEnter (sender, e);
+                       RegisterForGraphicUpdate ();
+               }
+               protected override void onDragLeave (object sender, DragDropEventArgs e)
+               {
+                       DockWindow dw = e.DragSource as DockWindow;
+                       //if (dw != null)
+                       //      dw.DockingPosition = Alignment.Undefined;
+                       base.onDragLeave (sender, e);
+                       RegisterForGraphicUpdate ();
+               }
+
+               protected override void onDraw (Cairo.Context gr)
+               {
+                       gr.Save ();
+
+                       Rectangle rBack = new Rectangle (Slot.Size);
+
+                       Background.SetAsSource (gr, rBack);
+                       CairoHelpers.CairoRectangle (gr, rBack, CornerRadius);
+                       gr.Fill ();
+
+                       if (ClipToClientRect) {
+                               //clip to client zone
+                               CairoHelpers.CairoRectangle (gr, ClientRectangle, CornerRadius);
+                               gr.Clip ();
+                       }
+
+                       childrenRWLock.EnterReadLock ();
+
+                       foreach (GraphicObject g in Children)
+                               g.Paint (ref gr);                       
+
+                       childrenRWLock.ExitReadLock ();
+
+
+                       if (!IsDropTarget) {
+                               gr.Restore ();
+                               return;
+                       }
+
+                       DockWindow dw = IFace.DragAndDropOperation.DragSource as DockWindow;
+                       if (dw == null)
+                               return;
+                       if (!dw.IsDocked) {
+                               Rectangle cb = ClientRectangle;
+                               double minDim = Math.Min (cb.Width, cb.Height);
+
+                               Rectangle r = rIn;
+                               if (Children.Count <= 1 || dw.DockingPosition.GetOrientation()==Orientation )
+                                       r = cb;
+
+                               switch (dw.DockingPosition) {
+                               case Alignment.Top:
+                                       gr.Rectangle (r.Left, r.Top, r.Width, r.Height * dockThresh);
+                                       break;
+                               case Alignment.Bottom:
+                                       gr.Rectangle (r.Left, r.Bottom - r.Height * dockThresh, r.Width, r.Height * dockThresh);
+                                       break;
+                               case Alignment.Left:
+                                       gr.Rectangle (r.Left, r.Top, r.Width * dockThresh, r.Height);
+                                       break;
+                               case Alignment.Right:
+                                       gr.Rectangle (r.Right - r.Width * dockThresh, r.Top, r.Width * dockThresh, r.Height);
+                                       break;
+                               case Alignment.Center:
+                                       r.Inflate ((int)Math.Ceiling (Math.Min (r.Width, r.Height) * -0.05));
+                                       gr.Rectangle (r);
+                                       break;
+                               }
+                               gr.LineWidth = 1;
+                               gr.SetSourceRGBA (0.4, 0.4, 0.9, 0.4);
+                               gr.FillPreserve ();
+                               gr.SetSourceRGBA (0.9, 0.9, 1.0, 0.8);
+                               gr.Stroke ();
+                       }
+                       gr.Restore ();  
+               }
+                       
+               public void Dock(DockWindow dw){
+                       DockStack activeStack = this;
+
+                       if (Children.Count == 1) {
+                               Orientation = dw.DockingPosition.GetOrientation ();
+                               if (Children [0] is DockWindow) {
+                                       (Children [0] as DockWindow).DockingPosition = dw.DockingPosition.GetOpposite ();
+                               }
+                       } else if (Children.Count > 0 && dw.DockingPosition.GetOrientation () != Orientation) {
+                               activeStack = new DockStack (IFace);
+                               activeStack.Orientation = dw.DockingPosition.GetOrientation ();
+                               activeStack.Width = focusedChild.Width;
+                               activeStack.Height = focusedChild.Height;
+                               int idx = Children.IndexOf (focusedChild);
+                               RemoveChild (focusedChild);
+                               focusedChild.Height = Measure.Stretched;
+                               focusedChild.Width = Measure.Stretched;
+                               InsertChild (idx, activeStack);
+                               activeStack.AddChild (focusedChild);
+                               activeStack.stretchedChild = focusedChild;
+                               if (focusedChild is DockWindow)
+                                       (focusedChild as DockWindow).DockingPosition = dw.DockingPosition.GetOpposite ();
+                               focusedChild = null;
+                       }
+
+                       Rectangle r = ClientRectangle;
+                       int vTreshold = (int)(r.Height * dockThresh);
+                       int hTreshold = (int)(r.Width * dockThresh);
+
+                       Console.WriteLine ("Docking {0} as {2} in {1}", dw.Name, activeStack.Name, dw.DockingPosition);
+                       switch (dw.DockingPosition) {
+                       case Alignment.Top:                                             
+                               dw.Height = vTreshold;
+                               dw.Width = Measure.Stretched;
+                               activeStack.InsertChild (0, dw);
+                               activeStack.InsertChild (1, new Splitter(IFace));
+                               break;
+                       case Alignment.Bottom:
+                               dw.Height = vTreshold;
+                               dw.Width = Measure.Stretched;
+                               activeStack.AddChild (new Splitter(IFace));
+                               activeStack.AddChild (dw);
+                               break;
+                       case Alignment.Left:
+                               dw.Width = hTreshold;
+                               dw.Height = Measure.Stretched;
+                               activeStack.InsertChild (0, dw);
+                               activeStack.InsertChild (1, new Splitter(IFace));
+                               break;
+                       case Alignment.Right:
+                               dw.Width = hTreshold;
+                               dw.Height = Measure.Stretched;
+                               activeStack.AddChild (new Splitter(IFace));
+                               activeStack.AddChild (dw);
+                               break;
+                       case Alignment.Center:
+                               dw.Width = dw.Height = Measure.Stretched;
+                               AddChild (dw);
+                               stretchedChild = dw;
+                               break;
+                       }
+               }
+               public void Undock (DockWindow dw){                     
+                       int idx = Children.IndexOf(dw);
+
+                       Console.WriteLine ("undocking child index: {0} ; name={1}; pos:{2} ; childcount:{3}",idx, dw.Name, dw.DockingPosition, Children.Count);
+
+                       RemoveChild(dw);
+
+                       if (Children.Count == 0)
+                               return;
+                       
+                       if (dw.DockingPosition == Alignment.Left || dw.DockingPosition == Alignment.Top) {                              
+                               RemoveChild (idx);
+                               if (stretchedChild == dw) {
+                                       stretchedChild = Children [idx];
+                                       stretchedChild.Width = stretchedChild.Height = Measure.Stretched;
+                               }
+                       } else {
+                               RemoveChild (idx - 1);
+                               if (stretchedChild == dw) {
+                                       stretchedChild = Children [idx-2];
+                                       stretchedChild.Width = stretchedChild.Height = Measure.Stretched;
+                               }
+                       }
+
+                       if (Children.Count == 1) {
+                               DockStack dsp = Parent as DockStack;
+                               if (dsp == null) {
+                                       Children [0].Width = Children [0].Height = Measure.Stretched;
+                                       return;
+                               }                               
+                               //remove level and move remaining obj to level above
+                               GraphicObject g = Children [0];
+                               RemoveChild (g);
+                               idx = dsp.Children.IndexOf (this);
+                               dsp.RemoveChild (this);
+                               dsp.InsertChild (idx, g);
+                               g.Width = this.Width;
+                               g.Height = this.Height;
+                               if (dsp.stretchedChild == this)
+                                       dsp.stretchedChild = g;
+                               dsp.checkAlignments ();
+                       } else
+                               checkAlignments ();
+               }
+
+               internal void checkAlignments () {
+                       DockWindow dw = Children[0] as DockWindow;
+                       if (dw != null)
+                               dw.DockingPosition = (Orientation == Orientation.Horizontal ? Alignment.Left : Alignment.Top);
+                       dw = Children[Children.Count - 1] as DockWindow;
+                       if (dw != null)
+                               dw.DockingPosition = (Orientation == Orientation.Horizontal ? Alignment.Right : Alignment.Bottom);
+               }
+
+               //read next value in config string until next ';'
+               string getConfAttrib (string conf, ref int i) {
+                       int nextI = conf.Substring (i).IndexOf (';');
+                       string tmp = conf.Substring (i, nextI);
+                       i += nextI + 1;
+                       return tmp;
+               }
+               /// <summary>
+               /// Imports the config.
+               /// </summary>
+               /// <param name="conf">Conf.</param>
+               /// <param name="dataSource">Data source for the docked windows</param>
+               public void ImportConfig (string conf, object dataSource = null) {
+                       lock (IFace.UpdateMutex) {
+                               ClearChildren ();
+                               stretchedChild = null;
+                               int i = 0;
+                               Orientation = (Orientation)Enum.Parse (typeof(Orientation), getConfAttrib (conf, ref i));
+                               importConfig (conf, ref i, dataSource);
+                       }
+               }
+               public string ExportConfig () {
+                       return Orientation.ToString() + ";" + exportConfig();
+               }
+               void importConfig (string conf, ref int i, object dataSource) {                                         
+                       if (conf [i++] != '(')
+                               return;                 
+                       while (i < conf.Length - 4) {
+                               string sc = conf.Substring (i, 4);
+                               i += 4;
+                               switch (sc) {
+                               case "WIN;":
+                                       DockWindow dw = null;
+                                       string wName = getConfAttrib (conf, ref i);
+                                       try {
+                                               dw = IFace.Load (wName) as DockWindow;  
+                                       } catch {
+                                               dw = new DockWindow (IFace);
+                                       }
+
+                                       dw.Name = wName;
+                                       dw.Width = Measure.Parse (getConfAttrib (conf, ref i));
+                                       dw.Height = Measure.Parse (getConfAttrib (conf, ref i));
+                                       dw.DockingPosition = (Alignment)Enum.Parse (typeof(Alignment), getConfAttrib (conf, ref i));
+                                       dw.savedSlot = Rectangle.Parse (getConfAttrib (conf, ref i));
+                                       dw.wasResizable = Boolean.Parse (getConfAttrib (conf, ref i));
+
+                                       dw.IsDocked = true;
+                                       dw.DataSource = dataSource;
+                                       this.AddChild (dw);
+
+                                       break;
+                               case "STK;":
+                                       DockStack ds = new DockStack (IFace);
+                                       ds.Width = Measure.Parse (getConfAttrib (conf, ref i));
+                                       ds.Height = Measure.Parse (getConfAttrib (conf, ref i));
+                                       ds.Orientation = (Orientation)Enum.Parse (typeof(Orientation), getConfAttrib (conf, ref i));
+
+                                       this.AddChild (ds);
+
+                                       ds.importConfig (conf, ref i, dataSource);
+                                       break;
+                               case "SPL;":
+                                       Splitter sp = new Splitter (IFace);
+                                       sp.Width = Measure.Parse (getConfAttrib (conf, ref i));
+                                       sp.Height = Measure.Parse (getConfAttrib (conf, ref i));
+                                       sp.Thickness = int.Parse (getConfAttrib (conf, ref i));
+                                       this.AddChild (sp);
+                                       break;
+                               }
+                               char nextC = conf [i++];
+                               if (nextC == ')')
+                                       break;
+                       }
+               }
+               string exportConfig () {
+                       StringBuilder tmp = new StringBuilder("(");
+
+                       for (int i = 0; i < Children.Count; i++) {
+                               if (Children [i] is DockWindow) {
+                                       DockWindow dw = Children [i] as DockWindow;
+                                       tmp.Append (string.Format("WIN;{0};{1};{2};{3};{4};{5};",dw.Name, dw.Width, dw.Height, dw.DockingPosition, dw.savedSlot, dw.wasResizable));
+                               } else if (Children [i] is DockStack) {
+                                       DockStack ds = Children [i] as DockStack;
+                                       tmp.Append (string.Format("STK;{0};{1};{2};{3}", ds.Width, ds.Height, ds.Orientation, ds.exportConfig()));
+                               } else if (Children [i] is Splitter) {
+                                       Splitter sp = Children [i] as Splitter;
+                                       tmp.Append (string.Format("SPL;{0};{1};{2};", sp.Width, sp.Height, sp.Thickness));
+                               }                                       
+                               if (i < Children.Count - 1)
+                                       tmp.Append ("|");                               
+                       }
+
+                       tmp.Append (")");
+                       return tmp.ToString ();
+               }
+       }
+}
+
diff --git a/Crow/src/GraphicObjects/DockWindow.cs b/Crow/src/GraphicObjects/DockWindow.cs
new file mode 100644 (file)
index 0000000..e368db5
--- /dev/null
@@ -0,0 +1,173 @@
+//
+// DockingView.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+using System;
+using System.Xml.Serialization;
+
+namespace Crow
+{
+       public class DockWindow : Window
+       {
+               #region CTOR
+               public DockWindow () {}
+               public DockWindow (Interface iface) : base (iface) {}
+               #endregion
+
+               int undockThreshold = 10;
+               bool isDocked = false;
+               Alignment docking = Alignment.Undefined;
+
+               Point undockingMousePosOrig; //mouse pos when docking was donne, use for undocking on mouse move
+               internal Rectangle savedSlot;   //last undocked slot recalled when view is undocked
+               internal bool wasResizable;
+
+               public bool IsDocked {
+                       get { return isDocked; }
+                       set {
+                               if (isDocked == value)
+                                       return;
+                               isDocked = value;
+                               NotifyValueChanged ("IsDocked", isDocked);
+                               NotifyValueChanged ("IsFloating", !isDocked);
+                       }
+               }
+               [XmlIgnore] public bool IsFloating { get { return !isDocked; }}
+
+               public Alignment DockingPosition {
+                       get { return docking; }
+                       set {
+                               if (docking == value)
+                                       return;
+                               docking = value;
+                               NotifyValueChanged ("DockingPosition", DockingPosition);
+                       }
+               }
+               public override bool PointIsIn (ref Point m)
+               {                       
+                       if (!base.PointIsIn(ref m))
+                               return false;
+
+                       Group p = Parent as Group;
+                       if (p != null) {
+                               lock (p.Children) {
+                                       for (int i = p.Children.Count - 1; i >= 0; i--) {
+                                               if (p.Children [i] == this)
+                                                       break;
+                                               if (p.Children [i].IsDragged)
+                                                       continue;
+                                               if (p.Children [i].Slot.ContainsOrIsEqual (m)) {                                                
+                                                       return false;
+                                               }
+                                       }
+                               }
+                       }
+                       return Slot.ContainsOrIsEqual(m);
+               }
+
+               public override void onMouseMove (object sender, MouseMoveEventArgs e)
+               {
+//                     if (this.HasFocus && e.Mouse.IsButtonDown (MouseButton.Left) && IsDocked) {
+//                             if (Math.Abs (e.Position.X - undockingMousePosOrig.X) > 10 ||
+//                                 Math.Abs (e.Position.X - undockingMousePosOrig.X) > 10)
+//                                     Undock ();
+//                     }
+
+                       if (this.HasFocus && e.Mouse.IsButtonDown (MouseButton.Left) && IsDocked)
+                               CheckUndock (e.Position);
+
+                       base.onMouseMove (sender, e);
+               }
+               public override void onMouseDown (object sender, MouseButtonEventArgs e)
+               {
+                       base.onMouseDown (sender, e);
+
+                       if (this.HasFocus && IsDocked && e.Button == MouseButton.Left)
+                               undockingMousePosOrig = e.Position;
+               }
+               public bool CheckUndock (Point mousePos) {
+                       //if (DockingPosition == Alignment.Center)
+                       //      return false;
+                       if (Math.Abs (mousePos.X - undockingMousePosOrig.X) < undockThreshold ||
+                           Math.Abs (mousePos.X - undockingMousePosOrig.X) < undockThreshold)
+                               return false;
+                       Undock ();
+                       return true;
+               }
+
+               protected override void onStartDrag (object sender, DragDropEventArgs e)
+               {
+                       base.onStartDrag (sender, e);
+
+                       undockingMousePosOrig = IFace.Mouse.Position;
+               }
+               protected override void onDrop (object sender, DragDropEventArgs e)
+               {
+                       if (!isDocked && DockingPosition != Alignment.Undefined && e.DropTarget is DockStack)
+                               Dock (e.DropTarget as DockStack);
+                       base.onDrop (sender, e);
+               }
+               public void Undock () {
+                       lock (IFace.UpdateMutex) {
+                               DockStack ds = Parent as DockStack;
+                               ds.Undock (this);
+
+                               IFace.AddWidget (this);
+
+                               Left = savedSlot.Left;
+                               Top = savedSlot.Top;
+                               Width = savedSlot.Width;
+                               Height = savedSlot.Height;
+
+                               IsDocked = false;
+                               DockingPosition = Alignment.Undefined;
+                               Resizable = wasResizable;
+                       }
+               }
+
+               public void Dock (DockStack target){
+                       lock (IFace.UpdateMutex) {
+                               IsDocked = true;
+                               //undockingMousePosOrig = lastMousePos;
+                               savedSlot = this.LastPaintedSlot;
+                               wasResizable = Resizable;
+                               Resizable = false;
+                               LastSlots = LastPaintedSlot = Slot = default(Rectangle);
+                               Left = Top = 0;
+
+                               IFace.RemoveWidget (this);
+
+                               target.Dock (this);
+                       }
+               }
+
+               protected override void close ()
+               {
+                       if (isDocked)
+                               Undock ();
+                       base.close ();
+               }
+       }
+}
+
diff --git a/Crow/src/GraphicObjects/Expandable.cs b/Crow/src/GraphicObjects/Expandable.cs
new file mode 100644 (file)
index 0000000..3a480b2
--- /dev/null
@@ -0,0 +1,131 @@
+//
+// Expandable.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.ComponentModel;
+using System.Xml.Serialization;
+
+namespace Crow
+{
+       /// <summary>
+       /// templated control whose content can be hidden and shown on demand
+       /// </summary>
+    public class Expandable : TemplatedContainer
+    {
+               #region CTOR
+               protected Expandable() : base(){}
+               public Expandable (Interface iface) : base(iface){}
+               #endregion
+
+               #region Private fields
+               bool _isExpanded;
+               string image;
+               #endregion
+
+               #region Event Handlers
+               /// <summary>
+               /// Occurs when control is expanded.
+               /// </summary>
+               public event EventHandler Expand;
+               /// <summary>
+               /// Occurs when control is collapsed.
+               /// </summary>
+               public event EventHandler Collapse;
+               #endregion
+
+               public BooleanTestOnInstance GetIsExpandable;
+
+               /// <summary>
+               /// mouse click event handler for easy expand triggering in IML
+               /// </summary>
+               public void onClickForExpand (object sender, MouseButtonEventArgs e)
+               {
+                       IsExpanded = !IsExpanded;
+               }
+
+               #region Public properties
+               [DefaultValue("#Crow.Icons.expandable.svg")]
+               public string Image {
+                       get { return image; }
+                       set {
+                               if (image == value)
+                                       return;
+                               image = value;
+                               NotifyValueChanged ("Image", image);
+                       }
+               }
+               [DefaultValue(false)]
+        public bool IsExpanded
+        {
+                       get { return _isExpanded; }
+            set
+            {
+                               if (value == _isExpanded)
+                                       return;
+
+                               _isExpanded = value;
+
+                               bool isExp = IsExpandable;
+                               NotifyValueChanged ("IsExpandable", isExp);
+                               if (!isExp)
+                                       _isExpanded = false;
+
+                               NotifyValueChanged ("IsExpanded", _isExpanded);
+
+                               if (_isExpanded)
+                                       onExpand (this, null);
+                               else
+                                       onCollapse (this, null);
+            }
+        }
+               [XmlIgnore]public bool IsExpandable {
+                       get {
+                               try {
+                                       return GetIsExpandable == null ? true : GetIsExpandable (this);
+                               } catch (Exception ex) {
+                                       System.Diagnostics.Debug.WriteLine ("Not Expandable error: " + ex.ToString ());
+                                       return false;
+                               }
+                       }
+               }
+               #endregion
+
+               public virtual void onExpand(object sender, EventArgs e)
+               {
+                       if (_contentContainer != null)
+                               _contentContainer.Visible = true;
+
+                       Expand.Raise (this, e);
+               }
+               public virtual void onCollapse(object sender, EventArgs e)
+               {
+                       if (_contentContainer != null)
+                               _contentContainer.Visible = false;
+
+                       Collapse.Raise (this, e);
+               }
+       }
+}
diff --git a/Crow/src/GraphicObjects/FileDialog.cs b/Crow/src/GraphicObjects/FileDialog.cs
new file mode 100644 (file)
index 0000000..db66ae9
--- /dev/null
@@ -0,0 +1,155 @@
+//
+// FileDialog.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.Xml.Serialization;
+using System.ComponentModel;
+using System.IO;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Linq;
+using System.Text.RegularExpressions;
+
+namespace Crow
+{
+       /// <summary>
+       /// templated control for selecting files
+       /// </summary>
+       public class FileDialog: Window
+       {
+               #region CTOR
+               protected FileDialog() : base(){}
+               public FileDialog (Interface iface) : base(iface){}
+               #endregion
+
+               string searchPattern, curDir, _selectedFile, _selectedDir;
+               bool showHidden, showFiles;
+
+               #region events
+               public event EventHandler OkClicked;
+               #endregion
+
+               public string SelectedFileFullPath {
+                       get { return Path.Combine (SelectedDirectory, SelectedFile); }
+               }
+               [DefaultValue("/home")]
+               public virtual string CurrentDirectory {
+                       get { return curDir; }
+                       set {
+                               if (curDir == value)
+                                       return;
+                               curDir = value;
+                               NotifyValueChanged ("CurrentDirectory", curDir);
+                               SelectedDirectory = curDir;
+                       }
+               }
+
+               [DefaultValue("*")]
+               public virtual string SearchPattern {
+                       get { return searchPattern; }
+                       set {
+                               if (searchPattern == value)
+                                       return;
+                               searchPattern = value;
+                               NotifyValueChanged ("SearchPattern", searchPattern);
+
+                       }
+               }
+               [DefaultValue(false)]
+               public virtual bool ShowHidden {
+                       get { return showHidden; }
+                       set {
+                               if (showHidden == value)
+                                       return;
+                               showHidden = value;
+                               NotifyValueChanged ("ShowHidden", showHidden);
+                       }
+               }
+               [DefaultValue(true)]
+               public virtual bool ShowFiles {
+                       get { return showFiles; }
+                       set {
+                               if (showFiles == value)
+                                       return;
+                               showFiles = value;
+                               NotifyValueChanged ("ShowFiles", showFiles);
+                       }
+               }
+               public string SelectedFile {
+                       get { return _selectedFile; }
+                       set {
+                               if (value == _selectedFile)
+                                       return;
+                               _selectedFile = value;
+                               NotifyValueChanged ("SelectedFile", _selectedFile);
+                       }
+               }
+               public string SelectedDirectory {
+                       get { return _selectedDir; }
+                       set {
+                               if (value == _selectedDir)
+                                       return;
+                               _selectedDir = value;
+                               NotifyValueChanged ("SelectedDirectory", _selectedDir);
+                       }
+               }
+
+               public void onFVSelectedItemChanged (object sender, SelectionChangeEventArgs e){
+                       if (e.NewValue != null) {
+                               if (File.GetAttributes (e.NewValue.ToString ()).HasFlag (FileAttributes.Directory)) {
+                                       SelectedDirectory = e.NewValue.ToString ();
+                                       SelectedFile = "";
+                               } else {
+                                       SelectedDirectory = Path.GetDirectoryName (e.NewValue.ToString ());
+                                       SelectedFile = Path.GetFileName (e.NewValue.ToString ());
+                               }
+                       }
+               }
+               public void onDVSelectedItemChanged (object sender, SelectionChangeEventArgs e){
+                       if (e.NewValue != null)
+                               SelectedDirectory = e.NewValue.ToString();
+               }
+               public void goUpDirClick (object sender, MouseButtonEventArgs e){
+                       string root = Directory.GetDirectoryRoot(CurrentDirectory);
+                       if (CurrentDirectory == root)
+                               return;
+                       CurrentDirectory = Directory.GetParent(CurrentDirectory).FullName;
+               }
+               void onFileSelect(object sender, MouseButtonEventArgs e){
+                       if (string.IsNullOrEmpty (SelectedFile))
+                               CurrentDirectory = SelectedDirectory;
+                       else {
+                               OkClicked.Raise (this, null);
+                               IFace.DeleteWidget (this);
+                       }
+               }
+               void onCancel(object sender, MouseButtonEventArgs e){
+                       IFace.DeleteWidget (this);
+               }
+
+       }
+}
+
diff --git a/Crow/src/GraphicObjects/GenericStack.cs b/Crow/src/GraphicObjects/GenericStack.cs
new file mode 100644 (file)
index 0000000..50c66c3
--- /dev/null
@@ -0,0 +1,252 @@
+//
+// GenericStack.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System.ComponentModel;
+using System.Diagnostics;
+using System.Xml.Serialization;
+using System;
+using System.Linq;
+
+namespace Crow
+{
+       /// <summary>
+       /// group container that stacked its children horizontally or vertically
+       /// </summary>
+       public class GenericStack : Group
+    {
+               #region CTOR
+               protected GenericStack() : base(){}
+               public GenericStack(Interface iface) : base(iface){}
+               #endregion
+
+               #region Private fields
+        int _spacing;
+        Orientation _orientation;
+               #endregion
+
+               #region Public Properties
+        [DefaultValue(2)]
+        public int Spacing
+        {
+                       get { return _spacing; }
+            set { 
+                               if (_spacing == value)
+                                       return;
+                               _spacing = value; 
+                               NotifyValueChanged ("Spacing", Spacing);
+                               RegisterForLayouting (LayoutingType.Sizing|LayoutingType.ArrangeChildren);
+                       }
+        }
+        [DefaultValue(Orientation.Horizontal)]
+        public virtual Orientation Orientation
+        {
+            get { return _orientation; }
+            set { _orientation = value; }
+        }
+               #endregion
+
+               #region GraphicObject Overrides
+               public override bool ArrangeChildren { get { return true; } }
+               public override void ChildrenLayoutingConstraints (ref LayoutingType layoutType)
+               {
+                       //Prevent child repositionning in the direction of stacking
+                       if (Orientation == Orientation.Horizontal)
+                               layoutType &= (~LayoutingType.X);
+                       else
+                               layoutType &= (~LayoutingType.Y);                       
+               }
+               protected override int measureRawSize (LayoutingType lt)
+               {
+                       int totSpace = Math.Max(0, Spacing * (Children.Count (c => c.Visible) - 1));
+                       if (lt == LayoutingType.Width) {
+                               if (Orientation == Orientation.Horizontal)
+                                       return contentSize.Width + totSpace + 2 * Margin;
+                       }else if (Orientation == Orientation.Vertical)
+                               return contentSize.Height + totSpace + 2 * Margin;                                                      
+                       
+                       return base.measureRawSize (lt);
+               }
+               public virtual void ComputeChildrenPositions()
+               {
+                       int d = 0;
+                       if (Orientation == Orientation.Horizontal) {
+                               foreach (GraphicObject c in Children) {
+                                       if (!c.Visible)
+                                               continue;
+                                       c.Slot.X = d;
+                                       d += c.Slot.Width + Spacing;
+                               }
+                       } else {
+                               foreach (GraphicObject c in Children) {
+                                       if (!c.Visible)
+                                               continue;                                       
+                                       c.Slot.Y = d;
+                                       d += c.Slot.Height + Spacing;
+                               }
+                       }
+                       IsDirty = true;
+               }
+               GraphicObject stretchedGO = null;
+               public override bool UpdateLayout (LayoutingType layoutType)
+        {
+                       RegisteredLayoutings &= (~layoutType);
+
+                       if (layoutType == LayoutingType.ArrangeChildren) {
+                               //allow 1 child to have size to 0 if stack has fixed or streched size policy,
+                               //this child will occupy remaining space
+                               //if stack size policy is Fit, no child may have stretch enabled
+                               //in the direction of stacking.
+                               ComputeChildrenPositions ();
+
+                               //if no layouting remains in queue for item, registre for redraw
+                               if (RegisteredLayoutings == LayoutingType.None && IsDirty)
+                                       IFace.EnqueueForRepaint (this);
+
+                               return true;
+                       }
+
+                       return base.UpdateLayout(layoutType);
+        }
+
+               void adjustStretchedGo (LayoutingType lt){
+                       if (stretchedGO == null)
+                               return;
+                       if (lt == LayoutingType.Width) {
+                               int newW = Math.Max (
+                                                  this.ClientRectangle.Width - contentSize.Width - Spacing * (Children.Count - 1),
+                                                  stretchedGO.MinimumSize.Width);
+                               if (stretchedGO.MaximumSize.Width > 0)
+                                       newW = Math.Min (newW, stretchedGO.MaximumSize.Width);
+                               if (newW != stretchedGO.Slot.Width) {                                                   
+                                       stretchedGO.Slot.Width = newW;
+                                       stretchedGO.IsDirty = true;
+                                       #if DEBUG_LAYOUTING
+                               Debug.WriteLine ("\tAdjusting Width of " + stretchedGO.ToString());
+                                       #endif
+                                       stretchedGO.LayoutChanged -= OnChildLayoutChanges;
+                                       stretchedGO.OnLayoutChanges (LayoutingType.Width);
+                                       stretchedGO.LayoutChanged += OnChildLayoutChanges;
+                                       stretchedGO.LastSlots.Width = stretchedGO.Slot.Width;
+                               }
+                       } else {
+                               int newH = Math.Max (
+                                       this.ClientRectangle.Height - contentSize.Height - Spacing * (Children.Count - 1),
+                                       stretchedGO.MinimumSize.Height);
+                               if (stretchedGO.MaximumSize.Height > 0)
+                                       newH = Math.Min (newH, stretchedGO.MaximumSize.Height);
+                               if (newH != stretchedGO.Slot.Height) {
+                                       stretchedGO.Slot.Height = newH;
+                                       stretchedGO.IsDirty = true;
+                                       #if DEBUG_LAYOUTING
+                                       Debug.WriteLine ("\tAdjusting Height of " + stretchedGO.ToString());
+                                       #endif
+                                       stretchedGO.LayoutChanged -= OnChildLayoutChanges;
+                                       stretchedGO.OnLayoutChanges (LayoutingType.Height);
+                                       stretchedGO.LayoutChanged += OnChildLayoutChanges;
+                                       stretchedGO.LastSlots.Height = stretchedGO.Slot.Height;
+                               }                               
+                       }
+               }
+
+               public override void OnChildLayoutChanges (object sender, LayoutingEventArgs arg)
+               {
+                       GraphicObject go = sender as GraphicObject;
+                       //Debug.WriteLine ("child layout change: " + go.LastSlots.ToString() + " => " + go.Slot.ToString());
+                       switch (arg.LayoutType) {
+                       case LayoutingType.Width:
+                               if (Orientation == Orientation.Horizontal) {
+                                       if (go.Width == Measure.Stretched) {
+                                               if (stretchedGO == null && Width != Measure.Fit)
+                                                       stretchedGO = go;
+                                               else if (stretchedGO != go) {
+                                                       go.Slot.Width = 0;
+                                                       go.Width = Measure.Fit;
+                                                       return;
+                                               }
+                                       } else
+                                               contentSize.Width += go.Slot.Width - go.LastSlots.Width;
+
+                                       adjustStretchedGo (LayoutingType.Width);                                        
+                                       
+                                       if (Width == Measure.Fit)
+                                               this.RegisterForLayouting (LayoutingType.Width);
+                                       
+                                       this.RegisterForLayouting (LayoutingType.ArrangeChildren);
+                                       return;
+                               }
+                               break;
+                       case LayoutingType.Height:
+                               if (Orientation == Orientation.Vertical) {
+                                       if (go.Height == Measure.Stretched) {
+                                               if (stretchedGO == null && Height != Measure.Fit)
+                                                       stretchedGO = go;
+                                               else if (stretchedGO != go){
+                                                       go.Slot.Height = 0;
+                                                       go.Height = Measure.Fit;
+                                                       return;
+                                               }
+                                       } else
+                                               contentSize.Height += go.Slot.Height - go.LastSlots.Height;
+                                       
+                                       adjustStretchedGo (LayoutingType.Height);
+
+                                       if (Height == Measure.Fit)
+                                               this.RegisterForLayouting (LayoutingType.Height);
+
+                                       this.RegisterForLayouting (LayoutingType.ArrangeChildren);
+                                       return;
+                               }
+                               break;
+                       }
+                       base.OnChildLayoutChanges (sender, arg);
+               }
+               #endregion
+
+       public override void RemoveChild (GraphicObject child)
+               {
+                       if (child != stretchedGO) {
+                               if (Orientation == Orientation.Horizontal)
+                                       contentSize.Width -= child.LastSlots.Width;
+                               else 
+                                       contentSize.Height -= child.LastSlots.Height;                           
+                       }
+                       base.RemoveChild (child);
+                       if (child == stretchedGO) {
+                               stretchedGO = null;
+                               RegisterForLayouting (LayoutingType.Sizing);
+                       }else if (Orientation == Orientation.Horizontal)                                
+                               adjustStretchedGo (LayoutingType.Width);
+                       else                            
+                               adjustStretchedGo (LayoutingType.Height);                       
+               }
+
+               public override void ClearChildren ()
+               {
+                       base.ClearChildren ();
+                       stretchedGO = null;
+               }
+       }
+}
diff --git a/Crow/src/GraphicObjects/GraduatedSlider.cs b/Crow/src/GraphicObjects/GraduatedSlider.cs
new file mode 100644 (file)
index 0000000..e1d4dd4
--- /dev/null
@@ -0,0 +1,82 @@
+//
+// GraduatedSlider.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Cairo;
+using System.Xml.Serialization;
+
+namespace Crow
+{
+       [DesignIgnore]
+       public class GraduatedSlider : Slider
+    {     
+               #region CTOR
+               protected GraduatedSlider() : base(){}
+               public GraduatedSlider(Interface iface) : base(iface)
+               {}
+//             public GraduatedSlider(double minimum, double maximum, double step)
+//            : base()
+//        {
+//                     Minimum = minimum;
+//                     Maximum = maximum;
+//                     SmallIncrement = step;
+//                     LargeIncrement = step * 5;
+//        }
+               #endregion
+
+               protected override void DrawGraduations(Context gr, PointD pStart, PointD pEnd)
+               {
+                       Rectangle r = ClientRectangle;
+                       Foreground.SetAsSource (gr);
+
+                       gr.LineWidth = 2;
+                       gr.MoveTo(pStart);
+                       gr.LineTo(pEnd);
+
+                       gr.Stroke();
+                       gr.LineWidth = 1;
+
+                       double sst = unity * SmallIncrement;
+                       double bst = unity * LargeIncrement;
+
+
+                       PointD vBar = new PointD(0, sst);
+                       for (double x = Minimum; x <= Maximum - Minimum; x += SmallIncrement)
+                       {
+                               double lineLength = r.Height / 3;
+                               if (x % LargeIncrement != 0)
+                                       lineLength /= 3;
+                               PointD p = new PointD(pStart.X + x * unity, pStart.Y);
+                               gr.MoveTo(p);
+                               gr.LineTo(new PointD(p.X, p.Y + lineLength));
+                       }
+                       gr.Stroke();
+               }
+    }
+}
diff --git a/Crow/src/GraphicObjects/GraphicObject.cs b/Crow/src/GraphicObjects/GraphicObject.cs
new file mode 100644 (file)
index 0000000..f444590
--- /dev/null
@@ -0,0 +1,2007 @@
+//
+// GraphicObject.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Xml.Serialization;
+using System.Reflection;
+using System.Reflection.Emit;
+using System.Runtime.CompilerServices;
+using Cairo;
+using System.Diagnostics;
+using Crow.IML;
+using System.Threading;
+
+
+#if DESIGN_MODE
+using System.Xml;
+using System.IO;
+#endif
+
+namespace Crow
+{
+       /// <summary>
+       /// The base class for all the graphic tree elements.
+       /// </summary>
+       public class GraphicObject : ILayoutable, IValueChange, IDisposable
+       {
+               internal ReaderWriterLockSlim parentRWLock = new ReaderWriterLockSlim();
+               #if DEBUG_LOG
+               //0 is the main graphic tree, for other obj tree not added to main tree, it range from 1->n
+               //useful to track events for obj shown later, not on start, or never added to main tree
+               public int treeIndex;
+               public int yIndex;//absolute index in the graphic tree for debug draw
+               public int xLevel;//x increment for debug draw
+               #endif
+               #if DESIGN_MODE
+               static MethodInfo miDesignAddDefLoc = typeof(GraphicObject).GetMethod("design_add_style_location",
+                       BindingFlags.Instance | BindingFlags.NonPublic);
+               static MethodInfo miDesignAddValLoc = typeof(GraphicObject).GetMethod("design_add_iml_location",
+                       BindingFlags.Instance | BindingFlags.NonPublic);
+               
+               public volatile bool design_HasChanged = false;
+               public string design_id;
+               public int design_line;
+               public int design_column;
+               public string design_imlPath;
+               public bool design_isTGItem = false;//true if this is a templated item's root
+               public Dictionary<string,string> design_iml_values = new Dictionary<string, string>();
+               public Dictionary<string,string> design_style_values = new Dictionary<string, string>();
+               //public Dictionary<string,FileLocation> design_iml_locations = new Dictionary<string, FileLocation>();
+               public Dictionary<string,FileLocation> design_style_locations = new Dictionary<string, FileLocation>();
+
+               internal void design_add_style_location (string memberName, string path, int line, int col) {
+                       if (design_style_locations.ContainsKey(memberName)){
+                               Console.WriteLine ("default value localtion already set for {0}{1}.{2}", this.GetType().Name, this.design_id, memberName);
+                               return;
+                       }
+                       design_style_locations.Add(memberName, new FileLocation(path,line,col));
+               }
+//             internal void design_add_iml_location (string memberName, string path, int line, int col) {
+//                     if (design_iml_locations.ContainsKey(memberName)){
+//                             Console.WriteLine ("IML value localtion already set for {0}{1}.{2}", this.GetType().Name, this.design_id, memberName);
+//                             return;
+//                     }
+//                     design_iml_locations.Add(memberName, new FileLocation(path,line,col));
+//             }
+                       
+               public virtual bool FindByDesignID(string designID, out GraphicObject go){
+                       go = null;
+                       if (this.design_id == designID){
+                               go = this;
+                               return true;
+                       }
+                       return false;
+               }
+
+               public string GetIML(){
+                       XmlDocument doc = new XmlDocument( );
+
+                       using (StringWriter sw = new StringWriter ()) {
+                               XmlWriterSettings settings = new XmlWriterSettings {
+                                       Indent = true,
+                                       IndentChars = "\t",
+                               };
+                               using (XmlWriter xtw = XmlWriter.Create (sw, settings)) {
+                                       //(1) the xml declaration is recommended, but not mandatory
+                                       XmlDeclaration xmlDeclaration = doc.CreateXmlDeclaration ("1.0", "UTF-8", null);
+                                       doc.InsertBefore (xmlDeclaration, null);
+                                       getIML (doc, (XmlNode)doc);
+                                       doc.WriteTo (xtw);
+                               }
+                               this.design_HasChanged = false;
+                               return sw.ToString ();
+                       }
+               }
+
+               public virtual void getIML(XmlDocument doc, XmlNode parentElem) {
+                       if (this.design_isTGItem)
+                               return;
+                       
+                       XmlElement xe = doc.CreateElement(this.GetType().Name);
+
+                       foreach (KeyValuePair<string,string> kv in design_iml_values) {
+                               XmlAttribute xa = doc.CreateAttribute (kv.Key);
+                               xa.Value = kv.Value;
+                               xe.Attributes.Append (xa);
+                       }
+
+                       parentElem.AppendChild (xe);
+               }
+               public Surface CreateIcon (int dragIconSize = 32) {
+                       ImageSurface di = new ImageSurface (Format.Argb32, dragIconSize, dragIconSize);
+                       using (Context ctx = new Context (di)) {
+                               double div = Math.Max (LastPaintedSlot.Width, LastPaintedSlot.Height);
+                               double s = (double)dragIconSize / div;
+                               ctx.Scale (s, s);
+                               if (bmp == null)
+                                       this.onDraw (ctx);
+                               else {
+                                       if (LastPaintedSlot.Width>LastPaintedSlot.Height)
+                                               ctx.SetSourceSurface (bmp, 0, (LastPaintedSlot.Width-LastPaintedSlot.Height)/2);
+                                       else
+                                               ctx.SetSourceSurface (bmp, (LastPaintedSlot.Height-LastPaintedSlot.Width)/2, 0);
+                                       ctx.Paint ();
+                               }
+                       }
+                       return di;
+               }                       
+               #endif
+
+               #region IDisposable implementation
+               protected bool disposed = false;
+
+               public void Dispose(){  
+                       Dispose(true);  
+                       GC.SuppressFinalize(this);  
+               }  
+               ~GraphicObject(){
+                       Debug.WriteLine(this.ToString() + " not disposed by user");
+                       Dispose(false);
+               }
+               protected virtual void Dispose(bool disposing){
+                       if (disposed){
+                               #if DEBUG_DISPOSE
+                               Debug.WriteLine ("Trying to dispose already disposed obj: {0}", this.ToString());
+                               #endif
+                               return;
+                       }
+
+                       if (disposing) {
+                               #if DEBUG_DISPOSE
+                               Debug.WriteLine ("Disposing: {0}", this.ToString());
+                               if (IsQueueForRedraw)
+                               throw new Exception("Trying to dispose an object queued for Redraw: " + this.ToString());
+                               #endif
+
+                               unshownPostActions ();
+
+                               if (!localDataSourceIsNull)
+                                       DataSource = null;
+
+                               parentRWLock.EnterWriteLock();
+                               parent = null;
+                               parentRWLock.ExitWriteLock();
+                       } else
+                               Debug.WriteLine ("!!! Finalized by GC: {0}", this.ToString ());
+                       Clipping?.Dispose ();
+                       bmp?.Dispose ();
+                       disposed = true;
+               }  
+               #endregion
+
+               #if DEBUG_LOG
+               internal static List<GraphicObject> GraphicObjects = new List<GraphicObject>();
+               #endif
+
+               internal bool isPopup = false;
+               public GraphicObject focusParent {
+                       get { return (isPopup ? LogicalParent : parent) as GraphicObject; }
+               }
+
+               /// <summary>
+               /// interface this widget is bound to, this should not be changed once the instance is created
+               /// </summary>
+               public Interface IFace = null;
+
+               /// <summary>
+               /// contains the dirty rectangles in the coordinate system of the cache. those dirty zones
+               /// are repeated at each cached levels of the tree with correspondig coordinate system. This is done
+               /// in a dedicated step of the update between layouting and drawing.
+               /// </summary>
+               public Region Clipping;
+
+               #region IValueChange implementation
+               /// <summary>
+               /// Raise to notify that the value of a property has changed, the binding system
+               /// rely mainly on this event. the member name may not be present in the class, this is 
+               /// used in **propertyless** bindings, this allow to raise custom named events without needing
+               /// to create an new one in the class or a new property.
+               /// </summary>
+               public event EventHandler<ValueChangeEventArgs> ValueChanged;
+               /// <summary>
+               /// Helper function to raise the value changed event
+               /// </summary>
+               public virtual void NotifyValueChanged(string MemberName, object _value)
+               {
+                       //Debug.WriteLine ("Value changed: {0}->{1} = {2}", this, MemberName, _value);
+                       ValueChanged.Raise(this, new ValueChangeEventArgs(MemberName, _value));
+               }
+               #endregion
+
+               #region CTOR
+               /// <summary>
+               /// default private parameter less constructor use in instantiators, it should not be used
+               /// when creating widget from code because widgets has to be bound to an interface before any other
+               /// action.
+               /// </summary>
+               protected GraphicObject () {
+                       Clipping = new Region ();
+                       #if DEBUG_LOG
+                       GraphicObjects.Add (this);
+                       DebugLog.AddEvent(DbgEvtType.GOClassCreation, this);
+                       #endif                  
+               }
+               /// <summary>
+               /// This constructor **must** be used when creating widget from code.
+               ///
+               /// When creating new widgets derived from GraphicObject, both parameterless and this constructors are
+               /// facultatives, the compiler will create the parameterless one automaticaly if no other one exists.
+               /// But if you intend to be able to create instances of the new widget in code and override the constructor
+               /// with the Interface parameter, you **must** also provide the override of the parameterless constructor because
+               /// compiler will not create it automatically because of the presence of the other one.
+               /// </summary>
+               /// <param name="iface">Iface.</param>
+               public GraphicObject (Interface iface) : this()
+               {
+                       IFace = iface;
+                       Initialize ();
+               }
+               #endregion
+               //internal bool initialized = false;
+               /// <summary>
+               /// Initialize this Graphic object instance by setting style and default values and loading template if required
+               /// </summary>
+               public virtual void Initialize(){
+                       loadDefaultValues ();
+               }
+               #region private fields
+               LayoutingType registeredLayoutings = LayoutingType.All;
+               ILayoutable logicalParent;
+               ILayoutable parent;
+               string name;
+               Fill background = Color.Transparent;
+               Fill foreground = Color.White;
+               Font font = "sans, 10";
+               protected Measure width, height;
+               int left, top;
+               double cornerRadius = 0;
+               int margin = 0;
+               bool focusable = false;
+               bool hasFocus = false;
+               bool isActive = false;
+               //bool isHover = false;
+               bool mouseRepeat;
+               protected bool isVisible = true;
+               bool isEnabled = true;
+               VerticalAlignment verticalAlignment = VerticalAlignment.Center;
+               HorizontalAlignment horizontalAlignment = HorizontalAlignment.Center;
+               Size maximumSize = "0,0";
+               Size minimumSize = "0,0";
+               bool cacheEnabled = false;
+               bool clipToClientRect = true;
+               protected object dataSource;
+               bool rootDataLevel;
+               string style;
+               object tag;
+               bool isDragged;
+               bool allowDrag;
+               bool allowDrop;
+               string tooltip;
+               IList<Command> contextCommands;
+               #endregion
+
+               #region public fields
+               /// <summary>
+               /// Current size and position computed during layouting pass
+               /// </summary>
+               public Rectangle Slot = new Rectangle ();
+               /// <summary>
+               /// keep last slot components for each layouting pass to track
+               /// changes and trigger update of other component accordingly
+               /// </summary>
+               public Rectangle LastSlots;
+               /// <summary>
+               /// keep last slot painted on screen to clear traces if moved or resized
+               /// version to clear effective oldslot if parents have been moved or resized.
+               /// IDEA is to add a ScreenCoordinates function that use only lastPaintedSlots
+               /// </summary>
+               //TODO: we should ensure the whole parsed widget tree is the last painted
+               public Rectangle LastPaintedSlot;
+               /// <summary>Prevent requeuing multiple times the same widget</summary>
+               public bool IsQueueForClipping = false;
+               /// <summary>drawing Cache, if null, a redraw is done, cached or not</summary>
+               public Surface bmp;
+               public bool IsDirty = true;
+               /// <summary>
+               /// This size is computed on each child' layout changes.
+               /// In stacking widget, it is used to compute the remaining space for the stretched
+               /// widget inside the stack, which is never added to the contentSize, instead, its size
+               /// is deducted from (parent.ClientRectangle - contentSize)
+               /// </summary>
+               internal Size contentSize;
+               #endregion
+
+               #region ILayoutable
+               [XmlIgnore]public LayoutingType RegisteredLayoutings { get { return registeredLayoutings; } set { registeredLayoutings = value; } }
+               //TODO: it would save the recurent cost of a cast in event bubbling if parent type was GraphicObject
+               //              or we could add to the interface the mouse events
+               /// <summary>
+               /// Parent in the graphic tree, used for rendering and layouting
+               /// </summary>
+               [XmlIgnore]public virtual ILayoutable Parent {
+                       get { return parent; }
+                       set {
+                               if (parent == value)
+                                       return;
+                               DataSourceChangeEventArgs e = new DataSourceChangeEventArgs (parent, value);
+
+                               parentRWLock.EnterWriteLock();
+                               parent = value;
+                               Slot = LastSlots = default(Rectangle);
+                               parentRWLock.ExitWriteLock();
+                                                                       
+                               onParentChanged (this, e);
+                       }
+               }
+               [XmlIgnore]public ILayoutable LogicalParent {
+                       get { return logicalParent == null ? Parent : logicalParent; }
+                       set {
+                               if (logicalParent == value)
+                                       return;
+                               if (logicalParent != null)
+                                       (logicalParent as GraphicObject).DataSourceChanged -= onLogicalParentDataSourceChanged;
+                               DataSourceChangeEventArgs dsce = new DataSourceChangeEventArgs (LogicalParent, null);
+                               logicalParent = value;
+                               dsce.NewDataSource = LogicalParent;
+                               if (logicalParent != null)
+                                       (logicalParent as GraphicObject).DataSourceChanged += onLogicalParentDataSourceChanged;
+                               onLogicalParentChanged (this, dsce);
+                       }
+               }
+               [XmlIgnore]public virtual Rectangle ClientRectangle {
+                       get {
+                               Rectangle cb = Slot.Size;
+                               cb.Inflate ( - Margin);
+                               return cb;
+                       }
+               }
+               public virtual Rectangle ContextCoordinates(Rectangle r){
+                       GraphicObject go = Parent as GraphicObject;
+                       if (go == null)
+                               return r + Parent.ClientRectangle.Position;
+                       return go.CacheEnabled ?
+                               r + Parent.ClientRectangle.Position :
+                               Parent.ContextCoordinates (r);
+               }
+               public virtual Rectangle ScreenCoordinates (Rectangle r){
+                       try {
+                               return
+                                       Parent.ScreenCoordinates(r) + Parent.getSlot().Position + Parent.ClientRectangle.Position;                              
+                       } catch (Exception ex) {
+                               Debug.WriteLine (ex);
+                               return default(Rectangle);
+                       }
+               }
+               public virtual Rectangle getSlot () { return Slot;}
+               #endregion
+               public Point ScreenPointToLocal(Point p){
+                       Point pt = p - ScreenCoordinates(Slot).TopLeft - ClientRectangle.TopLeft;
+                       if (pt.X < 0)
+                               pt.X = 0;
+                       if (pt.Y < 0)
+                               pt.Y = 0;
+                       return pt;
+               }
+
+               #region EVENT HANDLERS
+               /// <summary>Occurs when mouse wheel is rolled in this object. It bubbles to the root</summary>
+               public event EventHandler<MouseWheelEventArgs> MouseWheelChanged;
+               /// <summary>Occurs when mouse button is released in this object. It bubbles to the root</summary>
+               public event EventHandler<MouseButtonEventArgs> MouseUp;
+               /// <summary>Occurs when mouse button is pressed in this object. It bubbles to the root</summary>
+               public event EventHandler<MouseButtonEventArgs> MouseDown;
+               /// <summary>Occurs when mouse button has been pressed then relesed in this object. It bubbles to the root</summary>
+               public event EventHandler<MouseButtonEventArgs> MouseClick;
+               /// <summary>Occurs when mouse button has been pressed then relesed 2 times in this object. It bubbles to the root</summary>
+               public event EventHandler<MouseButtonEventArgs> MouseDoubleClick;
+               /// <summary>Occurs when mouse mouve in this object. It bubbles to the root</summary>
+               public event EventHandler<MouseMoveEventArgs> MouseMove;
+               /// <summary>Occurs when mouse enter this object</summary>
+               public event EventHandler<MouseMoveEventArgs> MouseEnter;
+               /// <summary>Occurs when mouse leave this object</summary>
+               public event EventHandler<MouseMoveEventArgs> MouseLeave;
+               /// <summary>Occurs when key is pressed when this object is active</summary>
+               public event EventHandler<KeyEventArgs> KeyDown;
+               /// <summary>Occurs when key is released when this object is active</summary>
+               public event EventHandler<KeyEventArgs> KeyUp;
+               /// <summary>Occurs when translated key event occurs in the host when this object is active</summary>
+               public event EventHandler<KeyPressEventArgs> KeyPress;
+               /// <summary>Occurs when this object received focus</summary>
+               public event EventHandler Focused;
+               /// <summary>Occurs when this object loose focus</summary>
+               public event EventHandler Unfocused;
+               /// <summary>Occurs when mouse is over</summary>
+               //public event EventHandler Hover;
+               /// <summary>Occurs when this control is no longer the Hover one</summary>
+               //public event EventHandler UnHover;
+               /// <summary>Occurs when this object loose focus</summary>
+               public event EventHandler Enabled;
+               /// <summary>Occurs when the enabled state this object is set to false</summary>
+               public event EventHandler Disabled;
+
+               #region DragAndDrop Events
+               public event EventHandler<DragDropEventArgs> StartDrag;
+               public event EventHandler<DragDropEventArgs> DragEnter;
+               public event EventHandler<DragDropEventArgs> DragLeave;
+               public event EventHandler<DragDropEventArgs> EndDrag;
+               public event EventHandler<DragDropEventArgs> Drop;
+               #endregion
+
+               /// <summary>
+               /// Occurs when default value and styling are loaded, and for templated control,
+               /// template is also loaded. Bindings should be functionnal as well.
+               /// </summary>
+               public event EventHandler Initialized;
+
+               /// <summary>Occurs when one part of the rendering slot changed</summary>
+               public event EventHandler<LayoutingEventArgs> LayoutChanged;
+               /// <summary>Occurs when DataSource changed</summary>
+               public event EventHandler<DataSourceChangeEventArgs> DataSourceChanged;
+               /// <summary>Occurs when the parent has changed</summary>
+               public event EventHandler<DataSourceChangeEventArgs> ParentChanged;
+               /// <summary>Occurs when the logical parent has changed</summary>
+               public event EventHandler<DataSourceChangeEventArgs> LogicalParentChanged;
+               #endregion
+
+               #region public properties
+               /// <summary>Random value placeholder</summary>
+               [DesignCategory ("Divers")]
+               public object Tag {
+                       get { return tag; }
+                       set {
+                               if (tag == value)
+                                       return;
+                               tag = value;
+                               NotifyValueChanged ("Tag", tag);
+                       }
+               }
+               /// <summary>
+               /// If enabled, resulting bitmap of graphic object is cached
+               /// speeding up rendering of complex object. Default is enabled.
+               /// </summary>
+               [DesignCategory ("Behavior")][DefaultValue(true)]
+               public virtual bool CacheEnabled {
+                       get { return cacheEnabled; }
+                       set {
+                               if (cacheEnabled == value)
+                                       return;
+                               cacheEnabled = value;
+                               NotifyValueChanged ("CacheEnabled", cacheEnabled);
+                       }
+               }
+               /// <summary>
+               /// If true, rendering of GraphicObject is clipped inside client rectangle
+               /// </summary>
+               [DesignCategory ("Appearance")][DefaultValue(true)]
+               public virtual bool ClipToClientRect {
+                       get { return clipToClientRect; }
+                       set {
+                               if (clipToClientRect == value)
+                                       return;
+                               clipToClientRect = value;
+                               NotifyValueChanged ("ClipToClientRect", clipToClientRect);
+                               this.RegisterForRedraw ();
+                       }
+               }
+               #if DEBUG_LOG
+               [XmlIgnore]public string TreePath {
+                       get { return this.GetType().Name + GraphicObjects.IndexOf(this).ToString ();    }
+               }
+               #endif
+               /// <summary>
+               /// Name is used in binding to reference other GraphicObjects inside the graphic tree
+               /// and by template controls to find special element in their template implementation such
+               /// as a container or a group to put children in.
+               /// </summary>
+               [DesignCategory ("Divers")][DefaultValue(null)]
+               public virtual string Name {
+                       get {
+                               #if DEBUG_LOG
+                               return string.IsNullOrEmpty(name) ? this.GetType().Name + GraphicObjects.IndexOf(this).ToString () : name;
+                               #else
+                               return name;
+                               #endif
+                       }
+                       set {
+                               if (name == value)
+                                       return;
+                               name = value;
+                               NotifyValueChanged("Name", name);
+                       }
+               }
+               /// <summary>
+               /// Vertical alignment inside parent, disabled if height is stretched
+               /// or top coordinate is not null
+               /// </summary>
+               [DesignCategory ("Layout")][DefaultValue(VerticalAlignment.Center)]
+               public virtual VerticalAlignment VerticalAlignment {
+                       get { return verticalAlignment; }
+                       set {
+                               if (verticalAlignment == value)
+                                       return;
+
+                               verticalAlignment = value;
+                               NotifyValueChanged("VerticalAlignment", verticalAlignment);
+                               RegisterForLayouting (LayoutingType.Y);
+                       }
+               }
+               /// <summary>
+               /// Horizontal alignment inside parent, disabled if width is stretched
+               /// or left coordinate is not null
+               /// </summary>
+               [DesignCategory ("Layout")][DefaultValue(HorizontalAlignment.Center)]
+               public virtual HorizontalAlignment HorizontalAlignment {
+                       get { return horizontalAlignment; }
+                       set {
+                               if (horizontalAlignment == value)
+                                       return;
+                               horizontalAlignment = value;
+                               NotifyValueChanged("HorizontalAlignment", horizontalAlignment);
+                               RegisterForLayouting (LayoutingType.X);
+                       }
+               }
+               /// <summary>
+               /// x position inside parent
+               /// </summary>
+               [DesignCategory ("Layout")][DefaultValue(0)]
+               public virtual int Left {
+                       get { return left; }
+                       set {
+                               if (left == value)
+                                       return;
+                               left = value;
+                               NotifyValueChanged ("Left", left);
+                               this.RegisterForLayouting (LayoutingType.X);
+                       }
+               }
+               /// <summary>
+               /// y position inside parent
+               /// </summary>
+               [DesignCategory ("Layout")][DefaultValue(0)]
+               public virtual int Top {
+                       get { return top; }
+                       set {
+                               if (top == value)
+                                       return;
+                               top = value;
+                               NotifyValueChanged ("Top", top);
+                               this.RegisterForLayouting (LayoutingType.Y);
+                       }
+               }
+               /// <summary>
+               /// Helper property used to set width and height to fit in one call
+               /// </summary>
+               [DesignCategory ("Layout")][DefaultValue(false)]
+               public virtual bool Fit {
+                       get { return Width == Measure.Fit && Height == Measure.Fit ? true : false; }
+                       set {
+                               if (value == Fit)
+                                       return;
+
+                               Width = Height = Measure.Fit;
+                       }
+               }
+               /// <summary>
+               /// Width of this control, by default inherited from parent. May have special values
+               /// such as Stretched or Fit. It may be proportionnal or absolute.
+               /// </summary>
+               [DesignCategory ("Layout")][DefaultValue("Inherit")]
+               public virtual Measure Width {
+                       get {
+                               return width.Units == Unit.Inherit ?
+                                       Parent is GraphicObject ? (Parent as GraphicObject).WidthPolicy :
+                                       Measure.Stretched : width;
+                       }
+                       set {
+                               if (width == value)
+                                       return;
+                               if (value.IsFixed) {
+                                       if (value < MinimumSize.Width || (value > MaximumSize.Width && MaximumSize.Width > 0))
+                                               return;
+                               }
+                               Measure old = width;
+                               width = value;
+                               NotifyValueChanged ("Width", width);
+                               if (width == Measure.Stretched || old == Measure.Stretched) {
+                                       //NotifyValueChanged ("WidthPolicy", width.Policy);
+                                       //contentSize in Stacks are only update on childLayoutChange, and the single stretched
+                                       //child of the stack is not counted in contentSize, so when changing size policy of a child
+                                       //we should adapt contentSize
+                                       //TODO:check case when child become stretched, and another stretched item already exists.
+                                       GenericStack gs = Parent as GenericStack;
+                                       if (gs != null){ //TODO:check if I should test Group instead
+                                               if (gs.Orientation == Orientation.Horizontal) {
+                                                       if (width == Measure.Stretched)
+                                                               gs.contentSize.Width -= this.LastSlots.Width;
+                                                       else
+                                                               gs.contentSize.Width += this.LastSlots.Width;
+                                               }
+                                       }                                                       
+                               }
+
+                               this.RegisterForLayouting (LayoutingType.Width);
+                       }
+               }
+               /// <summary>
+               /// Height of this control, by default inherited from parent. May have special values
+               /// such as Stretched or Fit. It may be proportionnal or absolute.
+               /// </summary>
+               [DesignCategory ("Layout")][DefaultValue("Inherit")]
+               public virtual Measure Height {
+                       get {
+                               return height.Units == Unit.Inherit ?
+                                       Parent is GraphicObject ? (Parent as GraphicObject).HeightPolicy :
+                                       Measure.Stretched : height;
+                       }
+                       set {
+                               if (height == value)
+                                       return;
+                               if (value.IsFixed) {
+                                       if (value < MinimumSize.Height || (value > MaximumSize.Height && MaximumSize.Height > 0))
+                                               return;
+                               }
+                               Measure old = height;
+                               height = value;
+                               NotifyValueChanged ("Height", height);
+                               if (height == Measure.Stretched || old == Measure.Stretched) {
+                                       //NotifyValueChanged ("HeightPolicy", HeightPolicy);
+                                       GenericStack gs = Parent as GenericStack;
+                                       if (gs != null){ //TODO:check if I should test Group instead
+                                               if (gs.Orientation == Orientation.Vertical) {
+                                                       if (height == Measure.Stretched)
+                                                               gs.contentSize.Height -= this.LastSlots.Height;
+                                                       else
+                                                               gs.contentSize.Height += this.LastSlots.Height;
+                                               }
+                                       }
+                               }
+
+                               this.RegisterForLayouting (LayoutingType.Height);
+                       }
+               }
+               /// <summary>
+               /// Was Used for binding on dimensions, this property will never hold fixed size, but instead only
+               /// Fit or Stretched, **with inherited state implementation, it is not longer used in binding**
+               /// </summary>
+               [XmlIgnore]public virtual Measure WidthPolicy { get {
+                               return Width.IsFit ? Measure.Fit : Measure.Stretched; } }
+               /// <summary>
+               /// Was Used for binding on dimensions, this property will never hold fixed size, but instead only
+               /// Fit or Stretched, **with inherited state implementation, it is not longer used in binding**
+               /// </summary>
+               [XmlIgnore]public virtual Measure HeightPolicy { get {
+                               return Height.IsFit ? Measure.Fit : Measure.Stretched; } }
+               /// <summary>
+               /// Indicate that this object may received focus or not, if not focusable all the descendants are 
+               /// affected.
+               /// </summary>
+               [DesignCategory ("Behaviour")][DefaultValue(false)]
+               public virtual bool Focusable {
+                       get { return focusable; }
+                       set {
+                               if (focusable == value)
+                                       return;
+                               focusable = value;
+                               NotifyValueChanged ("Focusable", focusable);
+                       }
+               }
+               /// <summary>
+               /// True when this control has the focus, only one control per interface may have it.
+               /// </summary>
+               [XmlIgnore]public virtual bool HasFocus {
+                       get { return hasFocus; }
+                       set {
+                               if (value == hasFocus)
+                                       return;
+
+                               hasFocus = value;
+                               if (hasFocus)
+                                       onFocused (this, null);
+                               else
+                                       onUnfocused (this, null);
+                               NotifyValueChanged ("HasFocus", hasFocus);
+                       }
+               }
+               /// <summary>
+               /// true if this control is active, this means that mouse has been pressed in it and not yet released. It could 
+               /// be used for other two states periferic action.
+               /// </summary>
+               [XmlIgnore]public virtual bool IsActive {
+                       get { return isActive; }
+                       set {
+                               if (value == isActive)
+                                       return;
+
+                               isActive = value;
+                               NotifyValueChanged ("IsActive", isActive);
+                       }
+               }
+               /// <summary>
+               /// true if this control has the pointer hover
+               /// </summary>
+               /*[XmlIgnore]public virtual bool IsHover {
+                       get { return isHover; }
+                       set {
+                               if (value == isHover)
+                                       return;
+
+                               isHover = value;
+
+                               if (isHover)
+                                       onHover (this, null);
+                               else
+                                       onUnHover (this, null);
+
+                               NotifyValueChanged ("IsHover", isHover);
+                       }
+               }*/
+               /// <summary>
+               /// true if holding mouse button down should trigger multiple click events
+               /// </summary>
+               [DesignCategory ("Behaviour")][DefaultValue(false)]
+               public virtual bool MouseRepeat {
+                       get { return mouseRepeat; }
+                       set {
+                               if (mouseRepeat == value)
+                                       return;
+                               mouseRepeat = value;
+                               NotifyValueChanged ("MouseRepeat", mouseRepeat);
+                       }
+               }
+               bool clearBackground = false;
+               /// <summary>
+               /// background fill of the control, maybe solid color, gradient, image, or svg
+               /// </summary>
+               [DesignCategory ("Appearance")][DefaultValue("Transparent")]
+               public virtual Fill Background {
+                       get { return background; }
+                       set {
+                               if (background == value)
+                                       return;
+                               clearBackground = false;
+                               if (value == null)
+                                       return;
+                               background = value;
+                               NotifyValueChanged ("Background", background);
+                               RegisterForRedraw ();
+                               if (background is SolidColor) {
+                                       if ((Background as SolidColor).Equals (Color.Clear))
+                                               clearBackground = true;
+                               }
+                       }
+               }
+               /// <summary>
+               /// Foreground fill of the control, usage may be different among derived controls
+               /// </summary>
+               [DesignCategory ("Appearance")][DefaultValue("White")]
+               public virtual Fill Foreground {
+                       get { return foreground; }
+                       set {
+                               if (foreground == value)
+                                       return;
+                               foreground = value;
+                               NotifyValueChanged ("Foreground", foreground);
+                               RegisterForRedraw ();
+                       }
+               }
+               /// <summary>
+               /// Font being used in many controls, it is defined in the base GraphicObject class.
+               /// </summary>
+               [DesignCategory ("Appearance")][DefaultValue("sans, 10")]
+               public virtual Font Font {
+                       get { return font; }
+                       set {
+                               if (value == font)
+                                       return;
+                               font = value;
+                               NotifyValueChanged ("Font", font);
+                               RegisterForGraphicUpdate ();
+                       }
+               }
+               /// <summary>
+               /// to get rounded corners
+               /// </summary>
+               [DesignCategory ("Appearance")][DefaultValue(0.0)]
+               public virtual double CornerRadius {
+                       get { return cornerRadius; }
+                       set {
+                               if (value == cornerRadius)
+                                       return;
+                               cornerRadius = value;
+                               NotifyValueChanged ("CornerRadius", cornerRadius);
+                               RegisterForRedraw ();
+                       }
+               }
+               /// <summary>
+               /// This is a single integer for the 4 direction, a gap between the control and it's container,
+               /// by default it is filled with the background.
+               /// </summary>
+               [DesignCategory ("Layout")][DefaultValue(0)]
+               public virtual int Margin {
+                       get { return margin; }
+                       set {
+                               if (value == margin)
+                                       return;
+                               margin = value;
+                               NotifyValueChanged ("Margin", margin);
+                               RegisterForGraphicUpdate ();
+                       }
+               }
+               /// <summary>
+               /// set the visible state of the control, invisible controls does reserve space in the layouting system.
+               /// </summary>
+               [DesignCategory ("Appearance")][DefaultValue(true)]
+               public virtual bool Visible {
+                       get { return isVisible; }
+                       set {
+                               if (value == isVisible)
+                                       return;
+
+                               isVisible = value;
+
+                               RegisterForLayouting (LayoutingType.Sizing);
+
+                               if (!isVisible && IFace.HoverWidget != null) {                                  
+                                       if (IFace.HoverWidget.IsOrIsInside (this)) {
+                                               //IFace.HoverWidget = null;
+                                               IFace.ProcessMouseMove (IFace.Mouse.X, IFace.Mouse.Y);
+                                       }
+                               }
+
+                               NotifyValueChanged ("Visible", isVisible);
+                       }
+               }
+               /// <summary>
+               /// get or set the enabled state, disabling a control will affect focuability and
+               /// also it's rendering which will be grayed
+               /// </summary>
+               [DesignCategory ("Behaviour")][DefaultValue(true)]
+               public virtual bool IsEnabled {
+                       get { return isEnabled; }
+                       set {
+                               if (value == isEnabled)
+                                       return;
+
+                               isEnabled = value;
+
+                               if (isEnabled)
+                                       onEnable (this, null);
+                               else
+                                       onDisable (this, null);
+
+                               NotifyValueChanged ("IsEnabled", isEnabled);
+                               RegisterForRedraw ();
+                       }
+               }
+               /// <summary>
+               /// Minimal width and  height for this control
+               /// </summary>
+               [DesignCategory ("Layout")][DefaultValue("1,1")]
+               public virtual Size MinimumSize {
+                       get { return minimumSize; }
+                       set {
+                               if (value == minimumSize)
+                                       return;
+
+                               minimumSize = value;
+
+                               NotifyValueChanged ("MinimumSize", minimumSize);
+                               RegisterForLayouting (LayoutingType.Sizing);
+                       }
+               }
+               /// <summary>
+               /// Maximum width and  height for this control, unlimited if null.
+               /// </summary>
+               [DesignCategory ("Layout")][DefaultValue("0,0")]
+               public virtual Size MaximumSize {
+                       get { return maximumSize; }
+                       set {
+                               if (value == maximumSize)
+                                       return;
+
+                               maximumSize = value;
+
+                               NotifyValueChanged ("MaximumSize", maximumSize);
+                               RegisterForLayouting (LayoutingType.Sizing);
+                       }
+               }
+               /// <summary>
+               /// Seek first logical tree upward if logicalParent is set, or seek graphic tree for
+               /// a not null dataSource that will be active for all descendants having dataSource=null
+               /// </summary>
+               [DesignCategory ("Data")]
+               public virtual object DataSource {
+                       set {
+                               if (DataSource == value)
+                                       return;
+
+                               DataSourceChangeEventArgs dse = new DataSourceChangeEventArgs (DataSource, null);
+                               dataSource = value;
+                               dse.NewDataSource = DataSource;
+
+                               if (dse.NewDataSource == dse.OldDataSource)
+                                       return;
+
+                               if (value != null)
+                                       rootDataLevel = true;
+
+                               #if DEBUG_LOG
+                               DbgEvent dbgEvt = DebugLog.AddEvent(DbgEvtType.GOLockLayouting, this);
+                               #endif
+                               lock (IFace.LayoutMutex) {
+                                       OnDataSourceChanged (this, dse);
+                                       NotifyValueChanged ("DataSource", DataSource);
+                               }
+                               #if DEBUG_LOG
+                               dbgEvt.end = DebugLog.chrono.ElapsedTicks;
+                               #endif
+                       }
+                       get {
+                               return rootDataLevel ? dataSource : dataSource == null ?
+                                       LogicalParent == null ? null :
+                                       LogicalParent is GraphicObject ? (LogicalParent as GraphicObject).DataSource : null :
+                                       dataSource;
+                       }
+               }
+               /// <summary>
+               /// If true, rendering of GraphicObject is clipped inside client rectangle
+               /// </summary>
+               [DesignCategory ("Data")][DefaultValue(false)]
+               public virtual bool RootDataLevel {
+                       get { return rootDataLevel; }
+                       set {
+                               if (rootDataLevel == value)
+                                       return;
+                               rootDataLevel = value;
+                               NotifyValueChanged ("RootDataLevel", rootDataLevel);
+                               this.RegisterForRedraw ();
+                       }
+               }
+               protected virtual void onLogicalParentDataSourceChanged(object sender, DataSourceChangeEventArgs e){
+                       if (localDataSourceIsNull)
+                               OnDataSourceChanged (this, e);
+               }
+               internal bool localDataSourceIsNull { get { return dataSource == null; } }
+               public bool localLogicalParentIsNull { get { return logicalParent == null; } }
+
+               public virtual void OnDataSourceChanged(object sender, DataSourceChangeEventArgs e){
+                       DataSourceChanged.Raise (this, e);
+                       #if DEBUG_LOG
+                       DebugLog.AddEvent(DbgEvtType.GONewDataSource, this);
+                       #endif
+
+                       #if DEBUG_BINDING
+                       Debug.WriteLine("New DataSource for => {0} \n\t{1}=>{2}", this.ToString(),e.OldDataSource,e.NewDataSource);
+                       #endif
+               }
+               /// <summary>
+               /// Style key to use for this control
+               /// </summary>
+               [DesignCategory ("Appearance")]
+               public virtual string Style {
+                       get { return style; }
+                       set {
+                               if (value == style)
+                                       return;
+
+                               style = value;
+
+                               NotifyValueChanged ("Style", style);
+                       }
+               }
+               [DesignCategory ("Divers")]
+               public virtual string Tooltip {
+                       get { return tooltip; }
+                       set {
+                               if (tooltip == value)
+                                       return;
+                               tooltip = value;
+                               NotifyValueChanged("Tooltip", tooltip);
+                       }
+               }
+               [DesignCategory ("Divers")]
+               public IList<Command> ContextCommands {
+                       get { return contextCommands; }
+                       set {
+                               if (contextCommands == value)
+                                       return;
+                               contextCommands = value;
+                               NotifyValueChanged("ContextCommands", contextCommands);
+                       }
+               }
+               #endregion
+
+               #region Default and Style Values loading
+               /// <summary> Loads the default values from XML attributes default </summary>
+               public void loadDefaultValues()
+               {
+                       #if DEBUG_LOG
+                       DbgEvent dbgEvt = DebugLog.AddEvent(DbgEvtType.GOInitialization, this);
+                       #endif
+
+                       Type thisType = this.GetType ();
+
+                       if (!string.IsNullOrEmpty (Style)) {
+                               if (IFace.DefaultValuesLoader.ContainsKey (Style)) {
+                                       IFace.DefaultValuesLoader [Style] (this);
+                                       onInitialized (this, null);
+                                       return;
+                               }
+                       } else if (IFace.DefaultValuesLoader.ContainsKey (thisType.FullName)) {
+                               IFace.DefaultValuesLoader [thisType.FullName] (this);
+                               onInitialized (this, null);
+                               return;
+                       } else  if (IFace.DefaultValuesLoader.ContainsKey (thisType.Name)) {
+                               IFace.DefaultValuesLoader [thisType.Name] (this);
+                               onInitialized (this, null);
+                               return;
+                       }
+
+                       List<Style> styling = new List<Style>();
+
+                       //Search for a style matching :
+                       //1: Full class name, with full namespace
+                       //2: class name
+                       //3: style may have been registered with their ressource ID minus .style extention
+                       //   those files being placed in a Styles folder
+                       string styleKey = Style;
+                       if (!string.IsNullOrEmpty (Style)) {
+                               if (IFace.Styling.ContainsKey (Style)) {
+                                       styling.Add (IFace.Styling [Style]);
+                               }
+                       }
+                       if (IFace.Styling.ContainsKey (thisType.FullName)) {
+                               styling.Add (IFace.Styling [thisType.FullName]);
+                               if (string.IsNullOrEmpty (styleKey))
+                                       styleKey = thisType.FullName;
+                       }
+                       if (IFace.Styling.ContainsKey (thisType.Name)) {
+                               styling.Add (IFace.Styling [thisType.Name]);
+                               if (string.IsNullOrEmpty (styleKey))
+                                       styleKey = thisType.Name;
+                       }
+
+                       if (string.IsNullOrEmpty (styleKey))
+                               styleKey = thisType.FullName;
+
+                       //Reflexion being very slow compared to dyn method or delegates,
+                       //I compile the initial values coded in the CustomAttribs of the class,
+                       //all other instance of this type would not longer use reflexion to init properly
+                       //but will fetch the  dynamic initialisation method compiled for this precise type
+                       //TODO:measure speed gain.
+                       #region Delfault values Loading dynamic compilation
+                       DynamicMethod dm = null;
+                       ILGenerator il = null;
+
+            /*dm = new DynamicMethod("dyn_loadDefValues",
+                               MethodAttributes.Family | MethodAttributes.FamANDAssem | MethodAttributes.NewSlot,
+                               CallingConventions.Standard,
+                               typeof(void),new Type[] {CompilerServices.TObject}, thisType, true);*/
+
+            dm = new DynamicMethod("dyn_loadDefValues", null, new Type[] {CompilerServices.TObject}, thisType, true);
+
+            il = dm.GetILGenerator(256);
+                       il.DeclareLocal(CompilerServices.TObject);
+                       il.Emit(OpCodes.Nop);
+                       //set local GraphicObject to root object passed as 1st argument
+                       il.Emit (OpCodes.Ldarg_0);
+                       il.Emit (OpCodes.Stloc_0);
+
+                       foreach (EventInfo ei in thisType.GetEvents(BindingFlags.Public | BindingFlags.Instance)) {
+                               string expression;
+                               if (!getDefaultEvent(ei, styling, out expression))
+                                       continue;
+                               //TODO:dynEventHandler could be cached somewhere, maybe a style instanciator class holding the styling delegate and bound to it.
+                               foreach (string exp in CompilerServices.splitOnSemiColumnOutsideAccolades(expression)) {
+                                       string trimed = exp.Trim();
+                                       if (trimed.StartsWith ("{", StringComparison.OrdinalIgnoreCase)){
+                                               il.Emit (OpCodes.Ldloc_0);//load this as 1st arg of event Add
+
+                                               //push eventInfo as 1st arg of compile
+                                               il.Emit (OpCodes.Ldloc_0);
+                                               il.Emit (OpCodes.Call, CompilerServices.miGetType);
+                                               il.Emit (OpCodes.Ldstr, ei.Name);//push event name
+                                               il.Emit (OpCodes.Call, CompilerServices.miGetEvent);
+                                               //push expression as 2nd arg of compile
+                                               il.Emit (OpCodes.Ldstr, trimed.Substring (1, trimed.Length - 2));
+                                               //push null as 3rd arg, currentNode, not known when instanciing
+                                               il.Emit (OpCodes.Ldnull);
+                                               il.Emit (OpCodes.Call, CompilerServices.miCompileDynEventHandler);
+                                               il.Emit (OpCodes.Castclass, ei.EventHandlerType);
+                                               il.Emit (OpCodes.Call, ei.AddMethod);
+                                       }else
+                                               Debug.WriteLine("error in styling, event not handled : " + trimed);
+                               }
+                       }
+
+                       foreach (PropertyInfo pi in thisType.GetProperties(BindingFlags.Public | BindingFlags.Instance)) {
+                               if (pi.GetSetMethod () == null)
+                                       continue;
+                               XmlIgnoreAttribute xia = (XmlIgnoreAttribute)pi.GetCustomAttribute (typeof(XmlIgnoreAttribute));
+                               if (xia != null)
+                                       continue;
+
+                               object defaultValue;
+                               string name = "";
+                               XmlAttributeAttribute xaa = (XmlAttributeAttribute)pi.GetCustomAttribute (typeof(XmlAttributeAttribute));
+                               if (xaa != null) {
+                                       if (string.IsNullOrEmpty (xaa.AttributeName))
+                                               name = pi.Name;
+                                       else
+                                               name = xaa.AttributeName;
+                               }else
+                                       name = pi.Name;
+                               
+                               int styleIndex = -1;
+                               if (styling.Count > 0){
+                                       for (int i = 0; i < styling.Count; i++) {
+                                               if (styling[i].ContainsKey (name)){
+                                                       styleIndex = i;
+                                                       break;
+                                               }
+                                       }
+                               }
+                               if (styleIndex >= 0){
+                                       if (pi.PropertyType.IsEnum)//maybe should be in parser..
+                                               defaultValue = Enum.Parse(pi.PropertyType, (string)styling[styleIndex] [name], true);
+                                       else
+                                               defaultValue = styling[styleIndex] [name];
+
+                                       #if DESIGN_MODE
+                                       if (defaultValue != null){
+                                               FileLocation fl = styling[styleIndex].Locations[name];
+                                               il.Emit (OpCodes.Ldloc_0);
+                                               il.Emit (OpCodes.Ldstr, name);
+                                               il.Emit (OpCodes.Ldstr, fl.FilePath);
+                                               il.Emit (OpCodes.Ldc_I4, fl.Line);
+                                               il.Emit (OpCodes.Ldc_I4, fl.Column);
+                                               il.Emit (OpCodes.Call, miDesignAddDefLoc);
+
+                                               il.Emit (OpCodes.Ldloc_0);
+                                               il.Emit (OpCodes.Ldfld, typeof(GraphicObject).GetField("design_style_values"));
+                                               il.Emit (OpCodes.Ldstr, name);
+                                               il.Emit (OpCodes.Ldstr, defaultValue.ToString());
+                                               il.Emit (OpCodes.Call, CompilerServices.miDicStrStrAdd);
+                                       }
+                                       #endif
+
+                               }else {
+                                       DefaultValueAttribute dv = (DefaultValueAttribute)pi.GetCustomAttribute (typeof (DefaultValueAttribute));
+                                       if (dv == null)
+                                               continue;
+                                       defaultValue = dv.Value;
+                               }
+
+                               CompilerServices.EmitSetValue (il, pi, defaultValue);
+                       }
+                       il.Emit(OpCodes.Ret);
+                       #endregion
+
+                       try {
+                               IFace.DefaultValuesLoader[styleKey] = (Interface.LoaderInvoker)dm.CreateDelegate(typeof(Interface.LoaderInvoker));
+                               IFace.DefaultValuesLoader[styleKey] (this);
+                       } catch (Exception ex) {
+                               throw new Exception ("Error applying style <" + styleKey + ">:", ex);
+                       }
+
+                       #if DEBUG_LOG
+                       dbgEvt.end = DebugLog.chrono.ElapsedTicks;
+                       #endif
+
+                       onInitialized (this, null);
+               }
+               protected virtual void onInitialized (object sender, EventArgs e){
+                       Initialized.Raise(sender, e);
+               }
+               bool getDefaultEvent(EventInfo ei, List<Style> styling,
+                       out string expression){
+                       expression = "";
+                       if (styling.Count > 0){
+                               for (int i = 0; i < styling.Count; i++) {
+                                       if (styling[i].ContainsKey (ei.Name)){
+                                               expression = (string)styling[i] [ei.Name];
+                                               return true;
+                                       }
+                               }
+                       }
+                       return false;
+               }
+               #endregion
+
+               public virtual GraphicObject FindByName(string nameToFind){
+                       return string.Equals(nameToFind, name, StringComparison.Ordinal) ? this : null;
+               }
+               public virtual bool Contains(GraphicObject goToFind){
+                       return false;
+               }
+               /// <summary>
+               /// return true if this is contained inside go
+               /// </summary>
+               public bool IsOrIsInside(GraphicObject go){
+                       if (this == go)
+                               return true;
+                       ILayoutable p = this.Parent;
+                       while (p != null) {
+                               if (p == go)
+                                       return true;
+                               p = p.Parent;
+                       }
+                       return false;
+               }
+
+               #region Drag&Drop
+               [DesignCategory ("DragAndDrop")][DefaultValue(false)]
+               public virtual bool AllowDrag {
+                       get { return allowDrag; }
+                       set {
+                               if (allowDrag == value)
+                                       return;
+                               allowDrag = value;
+                               NotifyValueChanged ("AllowDrag", allowDrag);
+                       }
+               }
+               [DesignCategory ("DragAndDrop")][DefaultValue(false)]
+               public virtual bool AllowDrop {
+                       get { return allowDrop; }
+                       set {
+                               if (allowDrop == value)
+                                       return;
+                               allowDrop = value;
+                               NotifyValueChanged ("AllowDrop", allowDrop);
+                       }
+               }
+
+//             public List<Type> AllowedDroppedTypes;
+//             public void AddAllowedDroppedType (Type newType){
+//                     if (AllowedDroppedTypes == null)
+//                             AllowedDroppedTypes = new List<Type> ();
+//                     AllowedDroppedTypes.Add (newType);
+//                     NotifyValueChanged ("AllowDrop", AllowDrop);
+//             }
+//             [XmlIgnore]public virtual bool AllowDrop {
+//                     get { return AllowedDroppedTypes?.Count>0; }
+//             }
+               [XmlIgnore]public virtual bool IsDragged {
+                       get { return isDragged; }
+                       set {
+                               if (isDragged == value)
+                                       return;
+                               isDragged = value;
+
+                               NotifyValueChanged ("IsDragged", IsDragged);
+                       }
+               }
+               /// <summary>
+               /// fired when drag and drop operation start
+               /// </summary>
+               protected virtual void onStartDrag (object sender, DragDropEventArgs e){
+                       IFace.HoverWidget = null;
+                       IsDragged = true;
+                       StartDrag.Raise (this, e);
+                       #if DEBUG_DRAGNDROP
+                       Debug.WriteLine(this.ToString() + " : START DRAG => " + e.ToString());
+                       #endif
+               }
+               /// <summary>
+               ///  Occured when dragging ends without dropping
+               /// </summary>
+               protected virtual void onEndDrag (object sender, DragDropEventArgs e){                  
+                       IsDragged = false;
+                       EndDrag.Raise (this, e);
+                       #if DEBUG_DRAGNDROP
+                       Debug.WriteLine(this.ToString() + " : END DRAG => " + e.ToString());
+                       #endif
+               }
+               protected virtual void onDragEnter (object sender, DragDropEventArgs e){
+                       e.DropTarget = this;
+                       DragEnter.Raise (this, e);
+                       #if DEBUG_DRAGNDROP
+                       Debug.WriteLine(this.ToString() + " : DRAG Enter => " + e.ToString());
+                       #endif
+               }
+               protected virtual void onDragLeave (object sender, DragDropEventArgs e){                        
+                       e.DropTarget = null;
+                       DragLeave.Raise (this, e);
+                       #if DEBUG_DRAGNDROP
+                       Debug.WriteLine(this.ToString() + " : DRAG Leave => " + e.ToString());
+                       #endif
+               }
+               protected virtual void onDrop (object sender, DragDropEventArgs e){                     
+                       IsDragged = false;
+                       Drop.Raise (this, e);
+                       //e.DropTarget.onDragLeave (this, e);//raise drag leave in target
+                       #if DEBUG_DRAGNDROP
+                       Debug.WriteLine(this.ToString() + " : DROP => " + e.ToString());
+                       #endif
+               }
+               public bool IsDropTarget {
+                       get { return IFace.DragAndDropOperation?.DropTarget == this; }
+               }
+
+               #endregion
+
+               #region Queuing
+               /// <summary>
+               /// Register old and new slot for clipping
+               /// </summary>
+               public virtual void ClippingRegistration(){
+                       #if DEBUG_LOG
+                       DbgEvent dbgEvt = DebugLog.AddEvent(DbgEvtType.GOClippingRegistration, this);
+                       #endif  
+                       parentRWLock.EnterReadLock ();
+                       if (parent != null) {                                   
+                               Parent.RegisterClip (LastPaintedSlot);
+                               Parent.RegisterClip (Slot);
+                       }
+                       parentRWLock.ExitReadLock ();
+                       #if DEBUG_LOG
+                       dbgEvt.end = DebugLog.chrono.ElapsedTicks;
+                       #endif
+               }
+               /// <summary>
+               /// Add clip rectangle to this.clipping and propagate up to root
+               /// </summary>
+               /// <param name="clip">Clip rectangle</param>
+               public virtual void RegisterClip(Rectangle clip){
+                       #if DEBUG_LOG
+                       DbgEvent dbgEvt = DebugLog.AddEvent(DbgEvtType.GORegisterClip, this);
+                       #endif
+                       Rectangle cb = ClientRectangle;
+                       Rectangle  r = clip + cb.Position;
+                       if (r.Right > cb.Right)
+                               r.Width -= r.Right - cb.Right;
+                       if (r.Bottom > cb.Bottom)
+                               r.Height -= r.Bottom - cb.Bottom;
+                       if (CacheEnabled && !IsDirty)
+                               Clipping.UnionRectangle (r);
+                       if (Parent == null)
+                               return;
+                       GraphicObject p = Parent as GraphicObject;
+                       if (p?.IsDirty == true && p?.CacheEnabled == true)
+                               return;
+                       Parent.RegisterClip (r + Slot.Position);
+                       #if DEBUG_LOG
+                       dbgEvt.end = DebugLog.chrono.ElapsedTicks;
+                       #endif
+               }
+               /// <summary> Full update, content and layouting, taking care of sizing policy </summary>
+               [MethodImpl(MethodImplOptions.AggressiveInlining)]
+               public void RegisterForGraphicUpdate ()
+               {
+                       IsDirty = true;
+                       if (Width.IsFit || Height.IsFit)
+                               RegisterForLayouting (LayoutingType.Sizing);
+                       else if (RegisteredLayoutings == LayoutingType.None)
+                               IFace.EnqueueForRepaint (this);
+               }
+               /// <summary> query an update of the content without layouting changes</summary>
+               [MethodImpl(MethodImplOptions.AggressiveInlining)]
+               public void RegisterForRedraw ()
+               {
+                       IsDirty = true;
+                       if (RegisteredLayoutings == LayoutingType.None)
+                               IFace.EnqueueForRepaint (this);
+               }
+               #endregion
+
+               #region Layouting
+
+               /// <summary> return size of content + margins </summary>
+               protected virtual int measureRawSize (LayoutingType lt) {
+                       return lt == LayoutingType.Width ?
+                               contentSize.Width + 2 * Margin: contentSize.Height + 2 * Margin;
+               }
+               /// <summary> By default in groups, LayoutingType.ArrangeChildren is reset </summary>
+               public virtual void ChildrenLayoutingConstraints(ref LayoutingType layoutType){
+               }
+               public virtual bool ArrangeChildren { get { return false; } }
+               public virtual void RegisterForLayouting(LayoutingType layoutType){
+                       if (Parent == null)
+                               return;
+                       lock (IFace.LayoutMutex) {
+                               //prevent queueing same LayoutingType for this
+                               layoutType &= (~RegisteredLayoutings);
+
+                               if (layoutType == LayoutingType.None)
+                                       return;
+                               //dont set position for stretched item
+                               if (Width == Measure.Stretched)
+                                       layoutType &= (~LayoutingType.X);
+                               if (Height == Measure.Stretched)
+                                       layoutType &= (~LayoutingType.Y);
+
+                               if (!ArrangeChildren)
+                                       layoutType &= (~LayoutingType.ArrangeChildren);
+
+                               //apply constraints depending on parent type
+                               if (Parent is GraphicObject)
+                                       (Parent as GraphicObject).ChildrenLayoutingConstraints (ref layoutType);
+
+//                             //prevent queueing same LayoutingType for this
+                               layoutType &= (~RegisteredLayoutings);
+
+                               if (layoutType == LayoutingType.None)
+                                       return;
+
+                               //enqueue LQI LayoutingTypes separately
+                               if (layoutType.HasFlag (LayoutingType.Width))
+                                       IFace.LayoutingQueue.Enqueue (new LayoutingQueueItem (LayoutingType.Width, this));
+                               if (layoutType.HasFlag (LayoutingType.Height))
+                                       IFace.LayoutingQueue.Enqueue (new LayoutingQueueItem (LayoutingType.Height, this));
+                               if (layoutType.HasFlag (LayoutingType.X))
+                                       IFace.LayoutingQueue.Enqueue (new LayoutingQueueItem (LayoutingType.X, this));
+                               if (layoutType.HasFlag (LayoutingType.Y))
+                                       IFace.LayoutingQueue.Enqueue (new LayoutingQueueItem (LayoutingType.Y, this));
+                               if (layoutType.HasFlag (LayoutingType.ArrangeChildren))
+                                       IFace.LayoutingQueue.Enqueue (new LayoutingQueueItem (LayoutingType.ArrangeChildren, this));
+                       }
+               }
+
+               /// <summary> trigger dependant sizing component update </summary>
+               public virtual void OnLayoutChanges(LayoutingType  layoutType)
+               {
+                       switch (layoutType) {
+                       case LayoutingType.Width:
+                               RegisterForLayouting (LayoutingType.X);
+                               break;
+                       case LayoutingType.Height:
+                               RegisterForLayouting (LayoutingType.Y);
+                               break;
+                       }
+                       LayoutChanged.Raise (this, new LayoutingEventArgs (layoutType));
+               }
+               internal protected void raiseLayoutChanged(LayoutingEventArgs e){
+                       LayoutChanged.Raise (this, e);
+               }
+               /// <summary> Update layout component only one at a time, this is where the computation of alignement
+               /// and size take place.
+               /// The redrawing will only be triggered if final slot size has changed </summary>
+               /// <returns><c>true</c>, if layouting was possible, <c>false</c> if conditions were not
+               /// met and LQI has to be re-queued</returns>
+               public virtual bool UpdateLayout (LayoutingType layoutType)
+               {
+                       //unset bit, it would be reset if LQI is re-queued
+                       registeredLayoutings &= (~layoutType);
+
+                       switch (layoutType) {
+                       case LayoutingType.X:
+                               if (Left == 0) {
+
+                                       if (Parent.RegisteredLayoutings.HasFlag (LayoutingType.Width) ||
+                                           RegisteredLayoutings.HasFlag (LayoutingType.Width))
+                                               return false;
+
+                                       switch (HorizontalAlignment) {
+                                       case HorizontalAlignment.Left:
+                                               Slot.X = 0;
+                                               break;
+                                       case HorizontalAlignment.Right:
+                                               Slot.X = Parent.ClientRectangle.Width - Slot.Width;
+                                               break;
+                                       case HorizontalAlignment.Center:
+                                               Slot.X = Parent.ClientRectangle.Width / 2 - Slot.Width / 2;
+                                               break;
+                                       }
+                               } else
+                                       Slot.X = Left;
+
+                               if (LastSlots.X == Slot.X)
+                                       break;
+
+                               IsDirty = true;
+
+                               OnLayoutChanges (layoutType);
+
+                               LastSlots.X = Slot.X;
+                               break;
+                       case LayoutingType.Y:
+                               if (Top == 0) {
+
+                                       if (Parent.RegisteredLayoutings.HasFlag (LayoutingType.Height) ||
+                                           RegisteredLayoutings.HasFlag (LayoutingType.Height))
+                                               return false;
+
+                                       switch (VerticalAlignment) {
+                                       case VerticalAlignment.Top://this could be processed even if parent Height is not known
+                                               Slot.Y = 0;
+                                               break;
+                                       case VerticalAlignment.Bottom:
+                                               Slot.Y = Parent.ClientRectangle.Height - Slot.Height;
+                                               break;
+                                       case VerticalAlignment.Center:
+                                               Slot.Y = Parent.ClientRectangle.Height / 2 - Slot.Height / 2;
+                                               break;
+                                       }
+                               } else
+                                       Slot.Y = Top;
+
+                               if (LastSlots.Y == Slot.Y)
+                                       break;
+
+                               IsDirty = true;
+
+                               OnLayoutChanges (layoutType);
+
+                               LastSlots.Y = Slot.Y;
+                               break;
+                       case LayoutingType.Width:
+                               if (Visible) {
+                                       if (Width.IsFixed)
+                                               Slot.Width = Width;
+                                       else if (Width == Measure.Fit) {
+                                               Slot.Width = measureRawSize (LayoutingType.Width);
+                                       } else if (Parent.RegisteredLayoutings.HasFlag (LayoutingType.Width))
+                                               return false;
+                                       else if (Width == Measure.Stretched)
+                                               Slot.Width = Parent.ClientRectangle.Width;
+                                       else
+                                               Slot.Width = (int)Math.Round ((double)(Parent.ClientRectangle.Width * Width) / 100.0);
+
+                                       if (Slot.Width < 0)
+                                               return false;
+
+                                       //size constrain
+                                       if (Slot.Width < MinimumSize.Width) {
+                                               Slot.Width = MinimumSize.Width;
+                                               //NotifyValueChanged ("WidthPolicy", Measure.Stretched);
+                                       } else if (Slot.Width > MaximumSize.Width && MaximumSize.Width > 0) {
+                                               Slot.Width = MaximumSize.Width;
+                                               //NotifyValueChanged ("WidthPolicy", Measure.Stretched);
+                                       }
+                               } else
+                                       Slot.Width = 0;
+
+                               if (LastSlots.Width == Slot.Width)
+                                       break;
+
+                               IsDirty = true;
+
+                               OnLayoutChanges (layoutType);
+
+                               LastSlots.Width = Slot.Width;
+                               break;
+                       case LayoutingType.Height:
+                               if (Visible) {
+                                       if (Height.IsFixed)
+                                               Slot.Height = Height;
+                                       else if (Height == Measure.Fit) {
+                                               Slot.Height = measureRawSize (LayoutingType.Height);
+                                       } else if (Parent.RegisteredLayoutings.HasFlag (LayoutingType.Height))
+                                               return false;
+                                       else if (Height == Measure.Stretched)
+                                               Slot.Height = Parent.ClientRectangle.Height;
+                                       else
+                                               Slot.Height = (int)Math.Round ((double)(Parent.ClientRectangle.Height * Height) / 100.0);
+
+                                       if (Slot.Height < 0)
+                                               return false;
+
+                                       //size constrain
+                                       if (Slot.Height < MinimumSize.Height) {
+                                               Slot.Height = MinimumSize.Height;
+                                               //NotifyValueChanged ("HeightPolicy", Measure.Stretched);
+                                       } else if (Slot.Height > MaximumSize.Height && MaximumSize.Height > 0) {
+                                               Slot.Height = MaximumSize.Height;
+                                               //NotifyValueChanged ("HeightPolicy", Measure.Stretched);
+                                       }
+                               } else
+                                       Slot.Height = 0;
+
+                               if (LastSlots.Height == Slot.Height)
+                                       break;
+
+                               IsDirty = true;
+
+                               OnLayoutChanges (layoutType);
+
+                               LastSlots.Height = Slot.Height;
+                               break;
+                       }
+
+                       //if no layouting remains in queue for item, registre for redraw
+                       if (this.registeredLayoutings == LayoutingType.None && IsDirty)
+                               IFace.EnqueueForRepaint (this);
+
+                       return true;
+               }
+               #endregion
+
+               #region Rendering
+               /// <summary> This is the common overridable drawing routine to create new widget </summary>
+               protected virtual void onDraw(Context gr)
+               {
+                       #if DEBUG_LOG
+                       DbgEvent dbgEvt = DebugLog.AddEvent(DbgEvtType.GODraw, this);
+                       #endif
+
+                       Rectangle rBack = new Rectangle (Slot.Size);
+
+                       Background.SetAsSource (gr, rBack);
+                       CairoHelpers.CairoRectangle (gr, rBack, cornerRadius);
+                       gr.Fill ();
+
+                       #if DEBUG_LOG
+                       dbgEvt.end = DebugLog.chrono.ElapsedTicks;
+                       #endif
+               }
+
+               /// <summary>
+               /// Internal drawing context creation on a cached surface limited to slot size
+               /// this trigger the effective drawing routine </summary>
+               protected virtual void RecreateCache ()
+               {
+                       #if DEBUG_LOG
+                       DbgEvent dbgEvt = DebugLog.AddEvent(DbgEvtType.GORecreateCache, this);
+                       #endif
+
+                       /*if (bmp == null)
+                               bmp = IFace.surf.CreateSimilar (Content.ColorAlpha, Slot.Width, Slot.Height);
+                       else if (LastPaintedSlot.Width != Slot.Width || LastPaintedSlot.Height != Slot.Height)
+                               bmp.SetSize (Slot.Width, Slot.Height);*/
+                       bmp?.Dispose ();
+                       bmp = new ImageSurface(Format.Argb32, Slot.Width, Slot.Height);
+                       
+                       using (Context gr = new Context (bmp)) {
+                               gr.Antialias = Interface.Antialias;
+                               onDraw (gr);
+                       }
+
+                       IsDirty = false;
+
+                       #if DEBUG_LOG
+                       dbgEvt.end = DebugLog.chrono.ElapsedTicks;
+                       #endif
+               }
+               protected virtual void UpdateCache(Context ctx){
+                       #if DEBUG_LOG
+                       DbgEvent dbgEvt = DebugLog.AddEvent(DbgEvtType.GOUpdateCacheAndPaintOnCTX, this);
+                       #endif
+
+                       Rectangle rb = Slot + Parent.ClientRectangle.Position;
+                       if (clearBackground) {
+                                       ctx.Save ();
+                                       ctx.Operator = Operator.Clear;
+                                       ctx.Rectangle (rb);
+                                       ctx.Fill ();
+                                       ctx.Restore ();
+                       }
+
+                       ctx.SetSourceSurface (bmp, rb.X, rb.Y);
+                       ctx.Paint ();
+                       Clipping.Dispose ();
+                       Clipping = new Region ();
+                       #if DEBUG_LOG
+                       dbgEvt.end = DebugLog.chrono.ElapsedTicks;
+                       #endif
+               }
+               /// <summary> Chained painting routine on the parent context of the actual cached version
+               /// of the widget </summary>
+               public virtual void Paint (ref Context ctx)
+               {
+                       #if DEBUG_LOG
+                       DebugLog.AddEvent(DbgEvtType.GOPaint, this);
+                       #endif
+                       //TODO:this test should not be necessary
+                       if (Slot.Height < 0 || Slot.Width < 0 || parent == null)
+                               return;
+                       lock (this) {
+                               if (cacheEnabled) {
+                                       if (Slot.Width > Interface.MaxCacheSize || Slot.Height > Interface.MaxCacheSize)
+                                               cacheEnabled = false;
+                               }
+
+                               if (cacheEnabled) {
+                                       if (IsDirty)
+                                               RecreateCache ();
+
+                                       UpdateCache (ctx);
+                                       if (!isEnabled)                                         
+                                               paintDisabled (ctx, Slot + Parent.ClientRectangle.Position);                                    
+                               } else {
+                                       Rectangle rb = Slot + Parent.ClientRectangle.Position;
+                                       ctx.Save ();
+
+                                       ctx.Translate (rb.X, rb.Y);
+
+                                       onDraw (ctx);
+                                       if (!isEnabled)
+                                               paintDisabled (ctx, Slot);
+
+                                       ctx.Restore ();
+                               }
+                               LastPaintedSlot = Slot;
+                       }
+               }
+               void paintDisabled(Context gr, Rectangle rb){
+                       gr.Operator = Operator.Xor;
+                       gr.SetSourceRGBA (0.6, 0.6, 0.6, 0.3);
+                       gr.Rectangle (rb);
+                       gr.Fill ();
+                       gr.Operator = Operator.Over;
+               }
+               #endregion
+
+        #region Keyboard handling
+               public virtual void onKeyDown(object sender, KeyEventArgs e){
+                       KeyDown.Raise (this, e);
+               }
+               public virtual void onKeyUp(object sender, KeyEventArgs e){
+                       KeyUp.Raise (this, e);
+               }
+               public virtual void onKeyPress(object sender, KeyPressEventArgs e){
+                       KeyPress.Raise (this, e);
+               }
+        #endregion
+
+               #region Mouse handling
+               /// <summary>
+               /// Recursive local coordinate point test.
+               /// After test on parent, point m is in local coord system.
+               /// </summary>
+               /// <returns>return true, if point is in the bounds of this control</returns>
+               /// <param name="m">by ref point to test, init value is not kept</param>
+               public virtual bool PointIsIn(ref Point m)
+               {
+                       if (parent == null)
+                               return false;
+                       if (!(Visible & isEnabled)||IsDragged)
+                               return false;
+                       if (!parent.PointIsIn(ref m))
+                               return false;
+                       m -= (parent.getSlot().Position + parent.ClientRectangle.Position) ;
+                       return Slot.ContainsOrIsEqual (m);                                      
+               }
+               public virtual bool MouseIsIn(Point m)
+               {                       
+                       return (!(Visible & isEnabled)||IsDragged) ? false : PointIsIn (ref m);
+               }
+               public virtual void checkHoverWidget(MouseMoveEventArgs e)
+               {
+                       if (IFace.HoverWidget != this) {
+                               IFace.HoverWidget = this;
+                               onMouseEnter (this, e);
+                       }
+
+                       //this.onMouseMove (this, e);//without this, window border doesn't work, should be removed
+               }
+               public virtual void onMouseMove(object sender, MouseMoveEventArgs e)
+               {
+                       if (AllowDrag & HasFocus & e.Mouse.LeftButton == ButtonState.Pressed) {
+                               if (IFace.DragAndDropOperation == null) {
+                                       IFace.DragAndDropOperation = new DragDropEventArgs (this);
+                                       onStartDrag (this, IFace.DragAndDropOperation);
+                               }
+                       }
+
+                       //dont bubble event if dragged, mouse move is routed directely from iface
+                       //to let other control behind have mouse entering
+                       if (isDragged)
+                               return;
+                       
+                       //bubble event to the top
+                       GraphicObject p = focusParent;
+                       if (p != null)
+                               p.onMouseMove(sender,e);
+
+                       MouseMove.Raise (this, e);
+               }
+               public virtual void onMouseDown(object sender, MouseButtonEventArgs e){
+                       #if DEBUG_FOCUS
+                       Debug.WriteLine("MOUSE DOWN => " + this.ToString());
+                       #endif
+
+                       if (this.Focusable && !Interface.FocusOnHover) {
+                               BubblingMouseButtonEventArg be = e as BubblingMouseButtonEventArg;
+                               if (be.Focused == null) {
+                                       be.Focused = this;
+                                       IFace.FocusedWidget = this;
+                                       if (e.Button == MouseButton.Right && this.ContextCommands != null)
+                                               IFace.ShowContextMenu (this);                                   
+                               }
+                       }
+                       //bubble event to the top
+                       GraphicObject p = focusParent;
+                       if (p != null)
+                               p.onMouseDown(sender,e);
+
+                       MouseDown.Raise (this, e);
+               }
+               public virtual void onMouseUp(object sender, MouseButtonEventArgs e){
+                       #if DEBUG_FOCUS
+                       Debug.WriteLine("MOUSE UP => " + this.ToString());
+                       #endif
+
+                       if (IFace.DragAndDropOperation != null){
+                               if (IFace.DragAndDropOperation.DragSource == this) {
+                                       if (IFace.DragAndDropOperation.DropTarget != null)
+                                               onDrop (this, IFace.DragAndDropOperation);
+                                       else
+                                               onEndDrag (this, IFace.DragAndDropOperation);
+                                       IFace.DragAndDropOperation = null;
+                               }
+                       }
+
+                       //bubble event to the top
+                       GraphicObject p = focusParent;
+                       if (p != null)
+                               p.onMouseUp(sender,e);
+
+                       MouseUp.Raise (this, e);
+               }
+               public virtual void onMouseClick(object sender, MouseButtonEventArgs e){
+#if DEBUG_FOCUS
+                       Debug.WriteLine("CLICK => " + this.ToString());
+#endif
+            if (MouseClick != null)
+            {
+                MouseClick.Raise(this, e);
+                return;
+            }
+                       GraphicObject p = focusParent;
+                       if (p != null)
+                               p.onMouseClick(sender,e);                       
+               }
+               public virtual void onMouseDoubleClick(object sender, MouseButtonEventArgs e){
+#if DEBUG_FOCUS
+                       Debug.WriteLine("DOUBLE CLICK => " + this.ToString());
+#endif
+            if (MouseDoubleClick != null)
+            {
+                MouseDoubleClick.Raise(this, e);
+                return;
+            }
+            GraphicObject p = focusParent;
+                       if (p != null)
+                               p.onMouseDoubleClick(sender,e);                 
+               }
+               public virtual void onMouseWheel(object sender, MouseWheelEventArgs e){
+            if (MouseWheelChanged != null)
+            {
+                MouseWheelChanged.Raise(this, e);
+                return;
+            }
+            GraphicObject p = focusParent;
+                       if (p != null)
+                               p.onMouseWheel(sender,e);
+               }
+               public virtual void onMouseEnter(object sender, MouseMoveEventArgs e)
+               {
+                       #if DEBUG_FOCUS
+                       Debug.WriteLine("MouseEnter => " + this.ToString());
+                       #endif
+
+                       if (IFace.DragAndDropOperation != null) {
+                               GraphicObject g = this;
+                               while (g != null) {
+                                       if (g.AllowDrop) {
+                                               if (IFace.DragAndDropOperation.DragSource != this && IFace.DragAndDropOperation.DropTarget != this) {
+                                                       if (IFace.DragAndDropOperation.DropTarget != null)
+                                                               IFace.DragAndDropOperation.DropTarget.onDragLeave (this, IFace.DragAndDropOperation);
+                                                       g.onDragEnter (this, IFace.DragAndDropOperation);
+                                               }
+                                               break;
+                                       }
+                                       g = g.focusParent;
+                               }
+                       }
+
+                       MouseEnter.Raise (this, e);
+               }
+               public virtual void onMouseLeave(object sender, MouseMoveEventArgs e)
+               {
+                       #if DEBUG_FOCUS
+                       Debug.WriteLine("MouseLeave => " + this.ToString());
+                       #endif
+
+                       MouseLeave.Raise (this, e);
+               }
+
+               #endregion
+
+               protected virtual void onFocused(object sender, EventArgs e){
+                       #if DEBUG_FOCUS
+                       Debug.WriteLine("Focused => " + this.ToString());
+                       #endif
+                       Focused.Raise (this, e);
+               }
+               protected virtual void onUnfocused(object sender, EventArgs e){
+                       #if DEBUG_FOCUS
+                       Debug.WriteLine("UnFocused => " + this.ToString());
+                       #endif
+                       Unfocused.Raise (this, e);
+               }
+               public virtual void onEnable(object sender, EventArgs e){
+                       Enabled.Raise (this, e);
+               }
+               public virtual void onDisable(object sender, EventArgs e){
+                       Disabled.Raise (this, e);
+               }
+               protected virtual void onParentChanged(object sender, DataSourceChangeEventArgs e) {
+//                     if (e.NewDataSource != null) {
+//                             if (width == Measure.Inherit)
+//                                     RegisterForLayouting (LayoutingType.Width);
+//                             if (height == Measure.Inherit)
+//                                     RegisterForLayouting (LayoutingType.Height);
+//                     }
+                       
+                       ParentChanged.Raise (this, e);
+                       if (logicalParent == null)
+                               LogicalParentChanged.Raise (this, e);
+               }
+               protected virtual void onLogicalParentChanged(object sender, DataSourceChangeEventArgs e) {
+                       LogicalParentChanged.Raise (this, e);
+               }
+               internal void ClearTemplateBinding(){
+                       #if DEBUG_UPDATE
+                       Debug.WriteLine (string.Format("ClearTemplateBinding: {0}", this.ToString()));
+                       #endif
+                       if (ValueChanged == null)
+                               return;
+                       EventInfo eiEvt = this.GetType().GetEvent ("ValueChanged");
+                       foreach (Delegate d in ValueChanged.GetInvocationList()) {
+                               if (d.Method.Name == "dyn_tmpValueChanged") {
+                                       eiEvt.RemoveEventHandler (this, d);
+                                       #if DEBUG_BINDING
+                                       Debug.WriteLine ("\t{0} template binding handler removed in {1} for: {2}", d.Method.Name, this, "ValueChanged");
+                                       #endif
+                               }
+                       }
+               }
+               public override string ToString ()
+               {
+                       string tmp ="";
+
+                       if (Parent != null)
+                               tmp = Parent.ToString () + tmp;
+                       #if DEBUG_LAYOUTING
+                       return Name == "unamed" ? tmp + "." + this.GetType ().Name + GraphicObjects.IndexOf(this).ToString(): tmp + "." + Name;
+                       #else
+                       return string.IsNullOrEmpty(Name) ? tmp + "." + this.GetType ().Name : tmp + "." + Name;
+                       #endif
+               }
+               /// <summary>
+               /// Checks to handle when widget is removed from the visible graphic tree
+               /// </summary>
+               void unshownPostActions () {
+                       if (IFace.HoverWidget != null) {
+                               if (IFace.HoverWidget.IsOrIsInside (this)) {
+                                       IFace.HoverWidget = null;
+                                       IFace.ProcessMouseMove (IFace.Mouse.X, IFace.Mouse.Y);
+                               }
+                       }
+                       if (IFace.ActiveWidget != null) {
+                               if (IFace.ActiveWidget.IsOrIsInside (this))
+                                       IFace.ActiveWidget = null;
+                       }
+                       if (IFace.FocusedWidget != null) {
+                               if (IFace.FocusedWidget.IsOrIsInside (this))
+                                       IFace.FocusedWidget = null;
+                       }                                       
+               }
+       }
+}
diff --git a/Crow/src/GraphicObjects/Grid.cs b/Crow/src/GraphicObjects/Grid.cs
new file mode 100644 (file)
index 0000000..71e89bd
--- /dev/null
@@ -0,0 +1,171 @@
+//
+// Grid.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.Diagnostics;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Xml.Serialization;
+using System.ComponentModel;
+
+namespace Crow
+{
+       /// <summary>
+       /// Simple grid container
+       /// Allow symetric placement of children on a grid,
+       /// excedental child (above grid sizing) are ignored
+       /// and invisible child keep their place in the grid
+       /// </summary>
+    public class Grid : Group
+    {
+               #region CTOR
+               protected Grid () : base(){}
+               public Grid(Interface iface) : base(iface)
+               {            
+               }
+               #endregion
+
+               #region Private fields
+        int _spacing;
+               int _columnCount;
+               int _rowCount;
+               #endregion
+
+               #region Public Properties
+        [DefaultValue(2)]
+        public int Spacing
+        {
+                       get { return _spacing; }
+            set { _spacing = value; }
+        }
+        [DefaultValue(2)]
+        public virtual int ColumnCount
+        {
+            get { return _columnCount; }
+            set { 
+                               if (_columnCount == value)
+                                       return;
+
+                               _columnCount = value; 
+
+                               NotifyValueChanged ("ColumnCount", ColumnCount);
+                               this.RegisterForLayouting (LayoutingType.ArrangeChildren);
+                       }
+        }
+               [DefaultValue(2)]
+               public virtual int RowCount
+               {
+                       get { return _rowCount; }
+                       set { 
+                               if (_rowCount == value)
+                                       return;
+
+                               _rowCount = value; 
+
+                               NotifyValueChanged ("RowCount", RowCount);
+                               this.RegisterForLayouting (LayoutingType.ArrangeChildren);
+                       }
+               }
+               public virtual int CaseWidth {
+                       get { return (Slot.Width - (ColumnCount - 1) * Spacing) / ColumnCount; }
+               }
+               public virtual int CaseHeight {
+                       get { return (Slot.Height - (RowCount - 1) * Spacing) / RowCount; }
+               }
+
+               #endregion
+
+               #region GraphicObject Overrides
+//             protected override Size measureRawSize ()
+//             {
+//                     Size tmp = new Size ();
+//
+//                     foreach (GraphicObject c in Children.Where(ch=>ch.Visible)) {
+//                             tmp.Width = Math.Max (tmp.Width, c.Slot.Width);
+//                             tmp.Height = Math.Max (tmp.Height, c.Slot.Height);
+//                     }
+//
+//                     tmp.Width *= (ColumnCount - 1) * Spacing / ColumnCount;;
+//                     tmp.Height *= (RowCount - 1) * Spacing / RowCount;
+//                     tmp.Width += 2 * Margin;
+//                     tmp.Height += 2 * Margin;
+//
+//                     return tmp;
+//             }
+               public override void ChildrenLayoutingConstraints (ref LayoutingType layoutType)
+               {
+                       //Prevent child repositionning
+                       layoutType &= (~LayoutingType.Positioning);
+               }
+               public override bool ArrangeChildren { get { return true; } }
+               public virtual void ComputeChildrenPositions()
+               {
+                       int slotWidth = CaseWidth;
+                       int slotHeight = CaseHeight;
+                       for (int curY = 0; curY < RowCount; curY++) {
+                               for (int curX = 0; curX < ColumnCount; curX++) {
+                                       int idx = curY * ColumnCount + curX;
+                                       if (idx >= Children.Count)
+                                               return;
+                                       GraphicObject c = Children [idx];
+                                       if (!c.Visible)
+                                               continue;
+                                       c.Slot.X = curX * (slotWidth + Spacing);
+                                       c.Slot.Y = curY * (slotHeight + Spacing);
+                                       //c.Slot.Width = slotWidth;
+                                       //c.Slot.Height = slotHeight;
+                               }
+                       }
+                       IsDirty = true;
+               }
+               public override void OnChildLayoutChanges (object sender, LayoutingEventArgs arg)
+               {
+                       //base.OnChildLayoutChanges (sender, arg);
+               }
+
+               public override bool UpdateLayout (LayoutingType layoutType)
+               {
+                       RegisteredLayoutings &= (~layoutType);
+
+                       if (layoutType == LayoutingType.ArrangeChildren) {                              
+
+                               ComputeChildrenPositions ();
+
+                               //if no layouting remains in queue for item, registre for redraw
+                               if (RegisteredLayoutings == LayoutingType.None && IsDirty)
+                                       IFace.EnqueueForRepaint (this);
+                               
+                               return true;
+                       }
+
+                       return base.UpdateLayout(layoutType);
+               }
+               #endregion
+
+    
+       }
+}
diff --git a/Crow/src/GraphicObjects/Group.cs b/Crow/src/GraphicObjects/Group.cs
new file mode 100644 (file)
index 0000000..13fdcd4
--- /dev/null
@@ -0,0 +1,473 @@
+//
+// Group.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Xml.Serialization;
+using Cairo;
+using System.Diagnostics;
+using System.Reflection;
+using System.Threading;
+
+
+namespace Crow
+{
+       public class Group : GraphicObject
+    {
+               #if DESIGN_MODE
+               public override bool FindByDesignID(string designID, out GraphicObject go){
+                       go = null;
+                       if (base.FindByDesignID (designID, out go))
+                               return true;
+                       childrenRWLock.EnterReadLock ();
+                       foreach (GraphicObject w in Children) {
+                               if (!w.FindByDesignID (designID, out go))
+                                       continue;
+                               childrenRWLock.ExitReadLock ();
+                               return true;
+                       }
+                       childrenRWLock.ExitReadLock ();
+                       return false;
+               }
+               public override void getIML (System.Xml.XmlDocument doc, System.Xml.XmlNode parentElem)
+               {
+                       if (this.design_isTGItem)
+                               return;
+                       base.getIML (doc, parentElem);
+                       foreach (GraphicObject g in Children) {
+                               g.getIML (doc, parentElem.LastChild);   
+                       }
+               }
+               #endif
+
+               protected ReaderWriterLockSlim childrenRWLock = new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion);
+
+               #region CTOR
+               public Group () : base() {}
+               public Group(Interface iface) : base(iface){}
+               #endregion
+
+               #region EVENT HANDLERS
+               public event EventHandler<EventArgs> ChildrenCleared;
+               #endregion
+
+               internal GraphicObject largestChild = null;
+               internal GraphicObject tallestChild = null;
+
+        bool _multiSelect = false;
+               List<GraphicObject> children = new List<GraphicObject>();
+
+        public virtual List<GraphicObject> Children {
+                       get { return children; }
+               }
+               [DefaultValue(false)]
+        public bool MultiSelect
+        {
+            get { return _multiSelect; }
+            set { _multiSelect = value; }
+        }
+               public virtual void AddChild(GraphicObject g){
+                       childrenRWLock.EnterWriteLock();
+
+                       g.Parent = this;
+                       Children.Add (g);
+
+                       childrenRWLock.ExitWriteLock();
+
+                       g.RegisteredLayoutings = LayoutingType.None;
+                       g.LayoutChanged += OnChildLayoutChanges;
+                       g.RegisterForLayouting (LayoutingType.Sizing | LayoutingType.ArrangeChildren);
+               }
+        public virtual void RemoveChild(GraphicObject child)
+               {
+                       child.LayoutChanged -= OnChildLayoutChanges;
+                       //check if HoverWidget is removed from Tree
+                       if (IFace.HoverWidget != null) {
+                               if (this.Contains (IFace.HoverWidget))
+                                       IFace.HoverWidget = null;
+                       }
+
+                       childrenRWLock.EnterWriteLock ();
+
+                       Children.Remove(child);
+                       child.Parent = null;
+
+                       childrenRWLock.ExitWriteLock ();
+
+                       if (child == largestChild && Width == Measure.Fit)
+                               searchLargestChild ();
+                       if (child == tallestChild && Height == Measure.Fit)
+                               searchTallestChild ();
+
+                       this.RegisterForLayouting (LayoutingType.Sizing | LayoutingType.ArrangeChildren);
+
+               }
+        public virtual void DeleteChild(GraphicObject child)
+               {
+                       RemoveChild (child);
+                       child.Dispose ();
+        }
+               public virtual void InsertChild (int idx, GraphicObject g) {
+                       childrenRWLock.EnterWriteLock ();
+                               
+                       g.Parent = this;
+                       Children.Insert (idx, g);
+
+                       childrenRWLock.ExitWriteLock ();
+
+                       g.RegisteredLayoutings = LayoutingType.None;
+                       g.LayoutChanged += OnChildLayoutChanges;
+                       g.RegisterForLayouting (LayoutingType.Sizing | LayoutingType.ArrangeChildren);
+               }
+               public virtual void RemoveChild (int idx) {
+                       RemoveChild (children[idx]);
+               }
+               public virtual void DeleteChild (int idx) {
+                       DeleteChild (children[idx]);
+               }
+               public virtual void ClearChildren()
+               {
+                       childrenRWLock.EnterWriteLock ();
+
+                       while (Children.Count > 0) {
+                               GraphicObject g = Children [Children.Count - 1];
+                               g.LayoutChanged -= OnChildLayoutChanges;
+                               Children.RemoveAt (Children.Count - 1);
+                               g.Dispose ();
+                       }
+
+                       childrenRWLock.ExitWriteLock ();
+
+                       resetChildrenMaxSize ();
+
+                       this.RegisterForLayouting (LayoutingType.Sizing);
+                       ChildrenCleared.Raise (this, new EventArgs ());
+               }
+               public override void OnDataSourceChanged (object sender, DataSourceChangeEventArgs e)
+               {
+                       base.OnDataSourceChanged (this, e);
+
+                       childrenRWLock.EnterReadLock ();
+                       foreach (GraphicObject g in Children) {
+                               if (g.localDataSourceIsNull & g.localLogicalParentIsNull)
+                                       g.OnDataSourceChanged (g, e);   
+                       }
+                       childrenRWLock.ExitReadLock ();
+               }
+
+               public void putWidgetOnTop(GraphicObject w)
+               {
+                       if (Children.Contains(w))
+                       {
+                               childrenRWLock.EnterWriteLock ();
+
+                               Children.Remove (w);
+                               Children.Add (w);
+
+                               childrenRWLock.ExitWriteLock ();
+                       }
+               }
+               public void putWidgetOnBottom(GraphicObject w)
+               {
+                       if (Children.Contains(w))
+                       {
+                               childrenRWLock.EnterWriteLock ();
+
+                               Children.Remove (w);
+                               Children.Insert (0, w);
+
+                               childrenRWLock.ExitWriteLock ();
+                       }
+               }
+
+               #region GraphicObject overrides
+
+               public override GraphicObject FindByName (string nameToFind)
+               {
+                       if (Name == nameToFind)
+                               return this;
+                       GraphicObject tmp = null;
+
+                       childrenRWLock.EnterReadLock ();
+
+                       foreach (GraphicObject w in Children) {
+                               tmp = w.FindByName (nameToFind);
+                               if (tmp != null)
+                                       break;
+                       }
+
+                       childrenRWLock.ExitReadLock ();
+
+                       return tmp;
+               }
+               public override bool Contains (GraphicObject goToFind)
+               {
+                       foreach (GraphicObject w in Children) {
+                               if (w == goToFind)
+                                       return true;
+                               if (w.Contains (goToFind))
+                                       return true;
+                       }
+                       return false;
+               }
+               protected override int measureRawSize (LayoutingType lt)
+               {
+                       if (Children.Count > 0) {
+                               if (lt == LayoutingType.Width) {
+                                       if (largestChild == null)
+                                               searchLargestChild ();
+                                       if (largestChild == null) {
+                                               //if still null, not possible to determine a width
+                                               //because all children are stretched, force first one to fit
+                                               Children [0].Width = Measure.Fit;
+                                               return -1;//cancel actual sizing to let child computation take place
+                                       }
+                               } else {
+                                       if (tallestChild == null)
+                                               searchTallestChild ();
+                                       if (tallestChild == null) {
+                                               Children [0].Height = Measure.Fit;
+                                               return -1;
+                                       }
+                               }
+                       }
+                       return base.measureRawSize (lt);
+               }
+
+               public override void OnLayoutChanges (LayoutingType layoutType)
+               {
+                       base.OnLayoutChanges (layoutType);
+
+                       childrenRWLock.EnterReadLock ();
+                       //position smaller objects in group when group size is fit
+                       switch (layoutType) {
+                       case LayoutingType.Width:
+                               foreach (GraphicObject c in Children) {
+                                       if (c.Width.IsRelativeToParent)
+                                               c.RegisterForLayouting (LayoutingType.Width);
+                                       else
+                                               c.RegisterForLayouting (LayoutingType.X);
+                               }
+                               break;
+                       case LayoutingType.Height:
+                               foreach (GraphicObject c in Children) {
+                                       if (c.Height.IsRelativeToParent)
+                                               c.RegisterForLayouting (LayoutingType.Height);
+                                       else
+                                               c.RegisterForLayouting (LayoutingType.Y);
+                               }
+                               break;
+                       }
+                       childrenRWLock.ExitReadLock ();
+               }
+               protected override void onDraw (Context gr)
+               {
+                       base.onDraw (gr);
+
+                       gr.Save ();
+
+                       if (ClipToClientRect) {
+                               //clip to client zone
+                               CairoHelpers.CairoRectangle (gr, ClientRectangle, CornerRadius);
+                               gr.Clip ();
+                       }
+
+                       childrenRWLock.EnterReadLock ();
+
+                       foreach (GraphicObject g in Children) {
+                               g.Paint (ref gr);
+                       }
+
+                       childrenRWLock.ExitReadLock ();
+                       gr.Restore ();
+               }
+               protected override void UpdateCache (Context ctx)
+               {
+                       Rectangle rb = Slot + Parent.ClientRectangle.Position;
+
+
+                       Context gr = new Context (bmp);
+
+                       if (!Clipping.IsEmpty) {
+                               for (int i = 0; i < Clipping.NumRectangles; i++)
+                                       gr.Rectangle(Clipping.GetRectangle(i));
+                               gr.ClipPreserve();
+                               gr.Operator = Operator.Clear;
+                               gr.Fill();
+                               gr.Operator = Operator.Over;
+
+                               base.onDraw (gr);
+
+                               if (ClipToClientRect) {
+                                       CairoHelpers.CairoRectangle (gr, ClientRectangle, CornerRadius);
+                                       gr.Clip ();
+                               }
+
+                               childrenRWLock.EnterReadLock ();
+
+                               foreach (GraphicObject c in Children) {
+                                       if (!c.Visible)
+                                               continue;
+                                       if (Clipping.Contains (c.Slot + ClientRectangle.Position) == RegionOverlap.Out)
+                                               continue;
+                                       c.Paint (ref gr);
+                               }
+
+                               childrenRWLock.ExitReadLock ();
+
+                               #if DEBUG_CLIP_RECTANGLE
+                               /*gr.LineWidth = 1;
+                               gr.SetSourceColor(Color.DarkMagenta.AdjustAlpha (0.8));
+                               for (int i = 0; i < Clipping.NumRectangles; i++)
+                                       gr.Rectangle(Clipping.GetRectangle(i));
+                               gr.Stroke ();*/
+                               #endif
+                       }
+                       gr.Dispose ();
+
+                       ctx.SetSourceSurface (bmp, rb.X, rb.Y);
+                       ctx.Paint ();
+
+                       Clipping.Dispose();
+                       Clipping = new Region ();
+               }
+               #endregion
+
+               public virtual void OnChildLayoutChanges (object sender, LayoutingEventArgs arg)
+               {
+                       GraphicObject g = sender as GraphicObject;
+
+                       switch (arg.LayoutType) {
+                       case LayoutingType.Width:
+                               if (Width != Measure.Fit)
+                                       return;
+                               if (g.Slot.Width > contentSize.Width) {
+                                       largestChild = g;
+                                       contentSize.Width = g.Slot.Width;
+                               } else if (g == largestChild)
+                                       searchLargestChild ();
+
+                               this.RegisterForLayouting (LayoutingType.Width);
+                               break;
+                       case LayoutingType.Height:
+                               if (Height != Measure.Fit)
+                                       return;
+                               if (g.Slot.Height > contentSize.Height) {
+                                       tallestChild = g;
+                                       contentSize.Height = g.Slot.Height;
+                               } else if (g == tallestChild)
+                                       searchTallestChild ();
+
+                               this.RegisterForLayouting (LayoutingType.Height);
+                               break;
+                       }
+               }
+               //TODO: x,y position should be taken in account for computation of width and height
+               void resetChildrenMaxSize(){
+                       largestChild = null;
+                       tallestChild = null;
+                       contentSize = 0;
+               }
+               void searchLargestChild(){
+                       #if DEBUG_LAYOUTING
+                       Debug.WriteLine("\tSearch largest child");
+                       #endif
+                       largestChild = null;
+                       contentSize.Width = 0;
+                       for (int i = 0; i < Children.Count; i++) {
+                               if (!Children [i].Visible)
+                                       continue;
+                               if (children [i].RegisteredLayoutings.HasFlag (LayoutingType.Width))
+                                       continue;
+                               if (Children [i].Slot.Width > contentSize.Width) {
+                                       contentSize.Width = Children [i].Slot.Width;
+                                       largestChild = Children [i];
+                               }
+                       }
+               }
+               void searchTallestChild(){
+                       #if DEBUG_LAYOUTING
+                       Debug.WriteLine("\tSearch tallest child");
+                       #endif
+                       tallestChild = null;
+                       contentSize.Height = 0;
+                       for (int i = 0; i < Children.Count; i++) {
+                               if (!Children [i].Visible)
+                                       continue;
+                               if (children [i].RegisteredLayoutings.HasFlag (LayoutingType.Height))
+                                       continue;
+                               if (Children [i].Slot.Height > contentSize.Height) {
+                                       contentSize.Height = Children [i].Slot.Height;
+                                       tallestChild = Children [i];
+                               }
+                       }
+               }
+
+
+               #region Mouse handling
+               public override void checkHoverWidget (MouseMoveEventArgs e)
+               {
+                       if (IFace.HoverWidget != this) {
+                               IFace.HoverWidget = this;
+                               onMouseEnter (this, e);
+                       }
+                       for (int i = Children.Count - 1; i >= 0; i--) {
+                               if (Children[i].MouseIsIn(e.Position))
+                               {
+                                       Children[i].checkHoverWidget (e);
+                                       return;
+                               }
+                       }
+                       base.checkHoverWidget (e);
+               }
+//             public override bool PointIsIn (ref Point m)
+//             {
+//                     if (!base.PointIsIn (ref m))
+//                             return false;
+//                     if (CurrentInterface.HoverWidget == this)
+//                             return true;
+//                     lock (Children) {
+//                             for (int i = Children.Count - 1; i >= 0; i--) {
+//                                     if (Children [i].Slot.ContainsOrIsEqual (m) && !(bool)CurrentInterface.HoverWidget?.IsOrIsInside(Children[i])) {                                                
+//                                             return false;
+//                                     }
+//                             }
+//                     }
+//                     return true;
+//             }
+               #endregion
+
+               protected override void Dispose (bool disposing)
+               {
+                       if (disposing) {
+                               foreach (GraphicObject c in children)
+                                       c.Dispose ();
+                       }
+                       base.Dispose (disposing);
+               }
+       }
+}
diff --git a/Crow/src/GraphicObjects/GroupBox.cs b/Crow/src/GraphicObjects/GroupBox.cs
new file mode 100644 (file)
index 0000000..2e32ddd
--- /dev/null
@@ -0,0 +1,43 @@
+//
+// GroupBox.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.Xml.Serialization;
+using System.ComponentModel;
+
+namespace Crow
+{
+       /// <summary>
+       /// templated container accepting one child
+       /// </summary>
+    public class GroupBox : TemplatedContainer
+    {          
+               #region CTOR
+               protected GroupBox () : base(){}
+               public GroupBox(Interface iface) : base(iface){}
+               #endregion
+       }
+}
diff --git a/Crow/src/GraphicObjects/HorizontalStack.cs b/Crow/src/GraphicObjects/HorizontalStack.cs
new file mode 100644 (file)
index 0000000..64d7cae
--- /dev/null
@@ -0,0 +1,53 @@
+//
+// HorizontalStack.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Xml.Serialization;
+
+namespace Crow
+{
+       /// <summary>
+       /// group control stacking its children horizontally
+       /// </summary>
+    public class HorizontalStack : GenericStack
+    {
+               #region CTOR
+               protected HorizontalStack () : base(){}
+               public HorizontalStack(Interface iface) : base(iface)
+        {            
+        }
+               #endregion
+
+        [XmlIgnore]
+        public override Orientation Orientation
+        {
+            get { return Orientation.Horizontal; }
+        }
+    }
+}
diff --git a/Crow/src/GraphicObjects/HueSelector.cs b/Crow/src/GraphicObjects/HueSelector.cs
new file mode 100644 (file)
index 0000000..d8218fe
--- /dev/null
@@ -0,0 +1,155 @@
+//
+// HueSelector.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.Xml.Serialization;
+using System.ComponentModel;
+using Cairo;
+
+namespace Crow
+{
+       [DesignIgnore]
+       public class HueSelector : ColorSelector
+       {
+               #region CTOR
+               protected HueSelector () : base(){}
+               public HueSelector (Interface iface) : base(iface)
+               {
+               }
+               #endregion
+
+               Orientation _orientation;
+               double hue;
+
+               [DefaultValue(Orientation.Horizontal)]
+               public virtual Orientation Orientation
+               {
+                       get { return _orientation; }
+                       set {
+                               if (_orientation == value)
+                                       return;
+                               _orientation = value;
+                               NotifyValueChanged ("Orientation", _orientation);
+                               RegisterForGraphicUpdate ();
+                       }
+               }
+               
+               public virtual double Hue {
+                       get { return hue; }
+                       set {
+                               if (hue == value)
+                                       return;
+                               hue = value;
+                               notifyHueChanged ();
+                               updateMousePosFromHue ();
+                               RegisterForRedraw ();
+                       }
+               }
+               protected override void onDraw (Context gr)
+               {
+                       base.onDraw (gr);
+
+                       Rectangle r = ClientRectangle;
+                       r.Height -= 4;
+                       r.Y += 2;
+
+                       Gradient.Type gt = Gradient.Type.Horizontal;
+                       if (Orientation == Orientation.Vertical)
+                               gt = Gradient.Type.Vertical;
+
+                       Crow.Gradient grad = new Gradient (gt);
+
+                       grad.Stops.Add (new Gradient.ColorStop (0,     new Color (1, 0, 0, 1)));
+                       grad.Stops.Add (new Gradient.ColorStop (0.167, new Color (1, 1, 0, 1)));
+                       grad.Stops.Add (new Gradient.ColorStop (0.333, new Color (0, 1, 0, 1)));
+                       grad.Stops.Add (new Gradient.ColorStop (0.5,   new Color (0, 1, 1, 1)));
+                       grad.Stops.Add (new Gradient.ColorStop (0.667, new Color (0, 0, 1, 1)));
+                       grad.Stops.Add (new Gradient.ColorStop (0.833, new Color (1, 0, 1, 1)));
+                       grad.Stops.Add (new Gradient.ColorStop (1,     new Color (1, 0, 0, 1)));
+
+                       grad.SetAsSource (gr, r);
+                       CairoHelpers.CairoRectangle (gr, r, CornerRadius);
+                       gr.Fill();
+               }
+
+               public override void Paint (ref Context ctx)
+               {
+                       base.Paint (ref ctx);
+
+                       Rectangle rb = Slot + Parent.ClientRectangle.Position;
+                       ctx.Save ();
+
+                       ctx.Translate (rb.X, rb.Y);
+
+                       ctx.SetSourceColor (Color.White);
+                       Rectangle r = ClientRectangle;
+                       if (Orientation == Orientation.Horizontal) {
+                               r.Width = 4;
+                               r.X = mousePos.X - 2;
+                       } else {
+                               r.Height = 4;
+                               r.Y = mousePos.Y - 2;
+                       }
+
+                       CairoHelpers.CairoRectangle (ctx, r, 1);
+                       ctx.SetSourceColor (Color.White);
+                       ctx.LineWidth = 1.0;
+                       ctx.Stroke();
+                       ctx.Restore ();
+               }
+               public override void OnLayoutChanges (LayoutingType layoutType)
+               {
+                       base.OnLayoutChanges (layoutType);
+
+                       if (Orientation == Orientation.Horizontal) {
+                               if (layoutType == LayoutingType.Width)
+                                       updateMousePosFromHue ();
+                       } else if (layoutType == LayoutingType.Height)
+                               updateMousePosFromHue ();
+               }
+               protected override void updateMouseLocalPos (Point mPos)
+               {
+                       base.updateMouseLocalPos (mPos);
+                       if (Orientation == Orientation.Horizontal)
+                               hue = (double)mousePos.X / (double)ClientRectangle.Width;
+                       else
+                               hue = (double)mousePos.Y / (double)ClientRectangle.Height;
+                       notifyHueChanged ();
+                       RegisterForRedraw ();
+               }
+               void updateMousePosFromHue(){
+                       if (Orientation == Orientation.Horizontal)
+                               mousePos.X = (int)Math.Floor(hue * (double)ClientRectangle.Width);
+                       else
+                               mousePos.Y = (int)Math.Floor(hue * (double)ClientRectangle.Height);
+               }
+               void notifyHueChanged(){
+                       NotifyValueChanged ("Hue", hue);
+                       NotifyValueChanged ("HueColor", new SolidColor (Color.FromHSV (hue)));
+               }
+       }
+}
+
diff --git a/Crow/src/GraphicObjects/ILayoutable.cs b/Crow/src/GraphicObjects/ILayoutable.cs
new file mode 100644 (file)
index 0000000..c8aa38f
--- /dev/null
@@ -0,0 +1,55 @@
+//
+// ILayoutable.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.Collections.Generic;
+
+namespace Crow
+{
+       public interface ILayoutable
+       {
+               /// <summary> Parent in the graphic tree </summary>
+               ILayoutable Parent { get; set; }
+               /// <summary> The logical parent (used mainly for bindings) as opposed
+               ///  to the parent in the graphic tree </summary>
+               ILayoutable LogicalParent { get; set; }
+
+               Rectangle ClientRectangle { get; }
+               Rectangle getSlot();
+
+               bool ArrangeChildren { get; }
+               LayoutingType RegisteredLayoutings { get; set; }
+               void RegisterForLayouting(LayoutingType layoutType);
+               void RegisterClip(Rectangle clip);
+               bool UpdateLayout(LayoutingType layoutType);
+               bool PointIsIn(ref Point m);
+
+               Rectangle ContextCoordinates(Rectangle r);
+               Rectangle ScreenCoordinates (Rectangle r);
+
+       }
+}
+
diff --git a/Crow/src/GraphicObjects/IMLContainer.cs b/Crow/src/GraphicObjects/IMLContainer.cs
new file mode 100644 (file)
index 0000000..8469228
--- /dev/null
@@ -0,0 +1,50 @@
+//
+// IMLContainer.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp_bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+using System;
+
+namespace Crow
+{
+       public class IMLContainer : PrivateContainer
+       {
+               public IMLContainer () : base()
+               {
+               }
+
+               string path;
+
+               public string Path {
+                       get { return path; }
+                       set {
+                               if (path == value)
+                                       return;
+                               path = value;
+                               this.SetChild (IFace.Load (path));
+                               NotifyValueChanged ("Path", path);
+                       }
+               }
+       }
+}
+
diff --git a/Crow/src/GraphicObjects/IValueChange.cs b/Crow/src/GraphicObjects/IValueChange.cs
new file mode 100644 (file)
index 0000000..7e18e5e
--- /dev/null
@@ -0,0 +1,36 @@
+//
+// IValueChange.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+
+namespace Crow
+{
+       public interface IValueChange
+       {
+               event EventHandler<ValueChangeEventArgs> ValueChanged;
+       }
+}
+
diff --git a/Crow/src/GraphicObjects/Image.cs b/Crow/src/GraphicObjects/Image.cs
new file mode 100644 (file)
index 0000000..21a83f9
--- /dev/null
@@ -0,0 +1,215 @@
+//
+// Image.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using Cairo;
+using System.Xml.Serialization;
+using System.ComponentModel;
+using System.Diagnostics;
+
+
+namespace Crow
+{
+       /// <summary>
+       /// Base widget to display an image. Accepts bitmaps and SVGs.
+       /// </summary>
+       /// <remarks>
+       /// </remarks>
+       public class Image : GraphicObject
+       {
+               Picture _pic;
+               string _svgSub;
+               bool scaled, keepProps;
+               double opacity;
+
+               #region Public properties
+               /// <summary>
+               /// If false, original size will be kept in any case.
+               /// </summary>
+               [DefaultValue(true)]
+               public virtual bool Scaled {
+                       get { return scaled; }
+                       set {
+                               if (scaled == value)
+                                       return;
+                               scaled = value;
+                               NotifyValueChanged ("Scaled", scaled);
+                               if (_pic == null)
+                                       return;
+                               _pic.Scaled = scaled;
+                               RegisterForGraphicUpdate ();
+                       }
+               }
+               /// <summary>
+               /// If image is scaled, proportions will be preserved.
+               /// </summary>
+               [DefaultValue(true)]
+               public virtual bool KeepProportions {
+                       get { return keepProps; }
+                       set {
+                               if (keepProps == value)
+                                       return;
+                               keepProps = value;
+                               NotifyValueChanged ("KeepProportions", keepProps);
+                               if (_pic == null)
+                                       return;
+                               _pic.KeepProportions = keepProps;
+                               RegisterForGraphicUpdate ();
+                       }
+               }
+               /// <summary>
+               /// Image file path, may be on disk or embedded. Accepts bitmaps or SVG drawings.
+               /// </summary>
+        
+               public string Path {
+                       get { return _pic == null ? "" : _pic.Path; }
+                       set {
+                               if (value == Path)
+                                       return;
+                               try {
+                                       if (string.IsNullOrEmpty(value))
+                                               Picture = null;
+                                       else {
+                                               //lock(IFace.LayoutMutex){
+                                                       LoadImage (value);
+                                               //}
+                                       }
+                               } catch (Exception ex) {
+                                       Debug.WriteLine (ex.Message);
+                                       _pic = null;
+                               }
+                               NotifyValueChanged ("Path", Path);
+                       }
+               }
+               /// <summary>
+               /// Used only for svg images, repaint only node named referenced in SvgSub.
+               /// If null, all the svg is rendered
+               /// </summary>
+               
+               public string SvgSub {
+                       get { return _svgSub; }
+                       set {
+                               if (_svgSub == value)
+                                       return;
+                               _svgSub = value;
+                               RegisterForGraphicUpdate ();
+                       }
+               }
+               /// <summary>
+               /// Object holding the image data once loaded, may be used directely to pupulate this control without 
+               /// specifying a path.
+               /// </summary>
+               
+               public Picture Picture {
+                       get { return _pic; }
+                       set {
+                               if (_pic == value)
+                                       return;
+                               _pic = value;
+                               NotifyValueChanged ("Picture", _pic);
+                               RegisterForGraphicUpdate ();
+                       }
+               }
+               /// <summary>
+               /// Opacity parameter for the image
+               /// </summary>
+               // TODO:could be moved in GraphicObject
+               [DefaultValue(1.0)]
+               public virtual double Opacity {
+                       get { return opacity; }
+                       set {
+                               if (opacity == value)
+                                       return;
+                               opacity = value;
+                               NotifyValueChanged ("Faded", opacity);
+                               RegisterForRedraw ();
+                       }
+               }
+               #endregion
+
+               #region CTOR
+               /// <summary>
+               /// Initializes a new instance of the <see cref="Crow.Image"/> class.
+               /// </summary>
+               protected Image () : base(){}
+               /// <summary>
+               /// Initializes a new instance of the <see cref="Crow.Image"/> class from code
+               /// </summary>
+               /// <param name="iface">interface to bound to</param>
+               public Image (Interface iface) : base(iface)
+               {
+               }
+               #endregion
+
+               #region Image Loading
+               public void LoadImage (string path)
+               {
+                       Picture pic;
+                       if (path.EndsWith (".svg", true, System.Globalization.CultureInfo.InvariantCulture))
+                               pic = new SvgPicture (path);
+                       else
+                               pic = new BmpPicture (path);
+
+
+                       pic.Scaled = scaled;
+                       pic.KeepProportions = keepProps;
+
+                       Picture = pic;
+               }
+               #endregion
+
+               #region GraphicObject overrides
+               protected override int measureRawSize (LayoutingType lt)
+               {
+                       if (_pic == null)
+                               return 2 * Margin;
+                               //_pic = "#Crow.Images.Icons.IconAlerte.svg";
+                       //TODO:take scalling in account
+                       if (lt == LayoutingType.Width)
+                               return _pic.Dimensions.Width + 2 * Margin;
+                       else
+                               return _pic.Dimensions.Height + 2 * Margin;
+               }
+               protected override void onDraw (Context gr)
+               {
+                       base.onDraw (gr);
+
+                       if (_pic == null)
+                               return;
+
+                       _pic.Paint (gr, ClientRectangle, _svgSub);
+
+                       if (Opacity<1.0) {
+                               gr.SetSourceRGBA (0.0, 0.0, 0.0, 1.0-Opacity);
+                               gr.Operator = Operator.DestOut;
+                               gr.Rectangle (ClientRectangle);
+                               gr.Fill ();
+                               gr.Operator = Operator.Over;
+                       }
+               }
+               #endregion
+       }
+}
diff --git a/Crow/src/GraphicObjects/Label.cs b/Crow/src/GraphicObjects/Label.cs
new file mode 100644 (file)
index 0000000..6aba6ee
--- /dev/null
@@ -0,0 +1,847 @@
+//
+// Label.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Diagnostics;
+using Cairo;
+using System.Text.RegularExpressions;
+using System.Xml.Serialization;
+using System.ComponentModel;
+
+namespace Crow
+{
+    public class Label : GraphicObject
+    {
+               #region CTOR
+               protected Label () : base(){}
+
+               public Label(Interface iface) : base(iface)
+               {
+
+               }
+//             public Label(string _text)
+//                     : base()
+//             {
+//                     Text = _text;
+//             }
+               #endregion
+
+               public event EventHandler<TextChangeEventArgs> TextChanged;
+
+               public virtual void OnTextChanged(Object sender, TextChangeEventArgs e)
+               {
+                       textMeasureIsUpToDate = false;
+                       NotifyValueChanged ("Text", Text);
+                       TextChanged.Raise (this, e);
+               }
+        //TODO:change protected to private
+
+               #region private and protected fields
+               string _text = "label";
+        Alignment _textAlignment;
+               bool horizontalStretch;
+               bool verticalStretch;
+               bool _selectable;
+               bool _multiline;
+               Color selBackground;
+               Color selForeground;
+               Point mouseLocalPos = -1;//mouse coord in widget space, filled only when clicked
+               int _currentCol;        //0 based cursor position in string
+               int _currentLine;
+               Point _selBegin = -1;   //selection start (row,column)
+               Point _selRelease = -1; //selection end (row,column)
+               double textCursorPos;   //cursor position in cairo units in widget client coord.
+               double SelStartCursorPos = -1;
+               double SelEndCursorPos = -1;
+               bool SelectionInProgress = false;
+
+        protected Rectangle rText;
+               protected float widthRatio = 1f;
+               protected float heightRatio = 1f;
+               protected FontExtents fe;
+               protected TextExtents te;
+               #endregion
+
+               [DefaultValue("SteelBlue")]
+               public virtual Color SelectionBackground {
+                       get { return selBackground; }
+                       set {
+                               if (value == selBackground)
+                                       return;
+                               selBackground = value;
+                               NotifyValueChanged ("SelectionBackground", selBackground);
+                               RegisterForRedraw ();
+                       }
+               }
+               [DefaultValue("White")]
+               public virtual Color SelectionForeground {
+                       get { return selForeground; }
+                       set {
+                               if (value == selForeground)
+                                       return;
+                               selForeground = value;
+                               NotifyValueChanged ("SelectionForeground", selForeground);
+                               RegisterForRedraw ();
+                       }
+               }
+               [DefaultValue(Alignment.Left)]
+               public Alignment TextAlignment
+        {
+            get { return _textAlignment; }
+            set {
+                               if (value == _textAlignment)
+                                       return;
+                               _textAlignment = value;
+                               RegisterForRedraw ();
+                               NotifyValueChanged ("TextAlignment", _textAlignment);
+                       }
+        }
+               [DefaultValue(false)]
+               public virtual bool HorizontalStretch {
+                       get { return horizontalStretch; }
+                       set {
+                               if (horizontalStretch == value)
+                                       return;
+                               horizontalStretch = value;
+                               RegisterForRedraw ();
+                               NotifyValueChanged ("HorizontalStretch", horizontalStretch);
+                       }
+               }
+               [DefaultValue(false)]
+               public virtual bool VerticalStretch {
+                       get { return verticalStretch; }
+                       set {
+                               if (verticalStretch == value)
+                                       return;
+                               verticalStretch = value;
+                               RegisterForRedraw ();
+                               NotifyValueChanged ("VerticalStretch", verticalStretch);
+                       }
+               }
+               [DefaultValue("label")]
+        public string Text
+        {
+            get {
+                               return lines == null ?
+                                       _text : lines.Aggregate((i, j) => i + Interface.LineBreak + j);
+                       }
+            set
+            {
+                               if (string.Equals (value, _text, StringComparison.Ordinal))
+                    return;
+
+                _text = value;
+
+                               if (string.IsNullOrEmpty(_text))
+                                       _text = "";
+
+                               lines = getLines;
+
+                               OnTextChanged (this, new TextChangeEventArgs (Text));
+                               RegisterForGraphicUpdate ();
+            }
+        }
+               [DefaultValue(false)]
+               public bool Selectable
+               {
+                       get { return _selectable; }
+                       set
+                       {
+                               if (value == _selectable)
+                                       return;
+                               _selectable = value;
+                               NotifyValueChanged ("Selectable", _selectable);
+                               SelBegin = -1;
+                               SelRelease = -1;
+                               RegisterForRedraw ();
+                       }
+               }
+               [DefaultValue(false)]
+               public bool Multiline
+               {
+                       get { return _multiline; }
+                       set
+                       {
+                               if (value == _multiline)
+                                       return;
+                               _multiline = value;
+                               NotifyValueChanged ("Multiline", _multiline);
+                               RegisterForGraphicUpdate();
+                       }
+               }
+               [DefaultValue(0)]
+               public int CurrentColumn{
+                       get { return _currentCol; }
+                       set {
+                               if (value == _currentCol)
+                                       return;
+                               if (value < 0)
+                                       _currentCol = 0;
+                               else if (value > lines [_currentLine].Length)
+                                       _currentCol = lines [_currentLine].Length;
+                               else
+                                       _currentCol = value;
+                               NotifyValueChanged ("CurrentColumn", _currentCol);
+                       }
+               }
+               [DefaultValue(0)]
+               public int CurrentLine{
+                       get { return _currentLine; }
+                       set {
+                               if (value == _currentLine)
+                                       return;
+                               if (value >= lines.Count)
+                                       _currentLine = lines.Count-1;
+                               else if (value < 0)
+                                       _currentLine = 0;
+                               else
+                                       _currentLine = value;
+                               //force recheck of currentCol for bounding
+                               int cc = _currentCol;
+                               _currentCol = 0;
+                               CurrentColumn = cc;
+                               NotifyValueChanged ("CurrentLine", _currentLine);
+                       }
+               }
+               [XmlIgnore]public Point CurrentPosition {
+                       get { return new Point(_currentCol, CurrentLine); }
+               }
+               //TODO:using HasFocus for drawing selection cause SelBegin and Release binding not to work
+               /// <summary>
+               /// Selection begin position in char units
+               /// </summary>
+               [DefaultValue("-1")]
+               public Point SelBegin {
+                       get {
+                               return _selBegin;
+                       }
+                       set {
+                               if (value == _selBegin)
+                                       return;
+                               _selBegin = value;
+                               NotifyValueChanged ("SelBegin", _selBegin);
+                               NotifyValueChanged ("SelectedText", SelectedText);
+                       }
+               }
+               [DefaultValue("-1")]
+               public Point SelRelease {
+                       get {
+                               return _selRelease;
+                       }
+                       set {
+                               if (value == _selRelease)
+                                       return;
+                               _selRelease = value;
+                               NotifyValueChanged ("SelRelease", _selRelease);
+                               NotifyValueChanged ("SelectedText", SelectedText);
+                       }
+               }
+               /// <summary>
+               /// return char at CurrentLine, CurrentColumn
+               /// </summary>
+               [XmlIgnore]protected Char CurrentChar
+               {
+                       get {
+                               return lines [CurrentLine] [CurrentColumn];
+                       }
+               }
+               /// <summary>
+               /// ordered selection start and end positions in char units
+               /// </summary>
+               [XmlIgnore]protected Point selectionStart
+               {
+                       get {
+                               return SelRelease < 0 || SelBegin.Y < SelRelease.Y ? SelBegin :
+                                       SelBegin.Y > SelRelease.Y ? SelRelease :
+                                       SelBegin.X < SelRelease.X ? SelBegin : SelRelease;
+                       }
+               }
+               [XmlIgnore]public Point selectionEnd
+               {
+                       get {
+                               return SelRelease < 0 || SelBegin.Y > SelRelease.Y ? SelBegin :
+                                       SelBegin.Y < SelRelease.Y ? SelRelease :
+                                       SelBegin.X > SelRelease.X ? SelBegin : SelRelease;
+                       }
+               }
+               [XmlIgnore]public string SelectedText
+               {
+                       get {
+
+                               if (SelRelease < 0 || SelBegin < 0)
+                                       return "";
+                               if (selectionStart.Y == selectionEnd.Y)
+                                       return lines [selectionStart.Y].Substring (selectionStart.X, selectionEnd.X - selectionStart.X);
+                               string tmp = "";
+                               tmp = lines [selectionStart.Y].Substring (selectionStart.X);
+                               for (int l = selectionStart.Y + 1; l < selectionEnd.Y; l++) {
+                                       tmp += Interface.LineBreak + lines [l];
+                               }
+                               tmp += Interface.LineBreak + lines [selectionEnd.Y].Substring (0, selectionEnd.X);
+                               return tmp;
+                       }
+               }
+               [XmlIgnore]public bool selectionIsEmpty
+               { get { return SelRelease < 0; } }
+
+               List<string> lines;
+               List<string> getLines {
+                       get {
+                               return _multiline ?
+                                       Regex.Split (_text, "\r\n|\r|\n|\\\\n").ToList() :
+                                       new List<string>(new string[] { _text });
+                       }
+               }
+               /// <summary>
+               /// Moves cursor one char to the left.
+               /// </summary>
+               /// <returns><c>true</c> if move succeed</returns>
+               public bool MoveLeft(){
+                       int tmp = _currentCol - 1;
+                       if (tmp < 0) {
+                               if (_currentLine == 0)
+                                       return false;
+                               CurrentLine--;
+                               CurrentColumn = int.MaxValue;
+                       } else
+                               CurrentColumn = tmp;
+                       return true;
+               }
+               /// <summary>
+               /// Moves cursor one char to the right.
+               /// </summary>
+               /// <returns><c>true</c> if move succeed</returns>
+               public bool MoveRight(){
+                       int tmp = _currentCol + 1;
+                       if (tmp > lines [_currentLine].Length){
+                               if (CurrentLine == lines.Count - 1)
+                                       return false;
+                               CurrentLine++;
+                               CurrentColumn = 0;
+                       } else
+                               CurrentColumn = tmp;
+                       return true;
+               }
+               public void GotoWordStart(){
+                       CurrentColumn--;
+                       //skip white spaces
+                       while (!char.IsLetterOrDigit (this.CurrentChar) && CurrentColumn > 0)
+                               CurrentColumn--;
+                       while (char.IsLetterOrDigit (lines [CurrentLine] [CurrentColumn]) && CurrentColumn > 0)
+                               CurrentColumn--;
+                       if (!char.IsLetterOrDigit (this.CurrentChar))
+                               CurrentColumn++;
+               }
+               public void GotoWordEnd(){
+                       //skip white spaces
+                       if (CurrentColumn >= lines [CurrentLine].Length - 1)
+                               return;
+                       while (!char.IsLetterOrDigit (this.CurrentChar) && CurrentColumn < lines [CurrentLine].Length-1)
+                               CurrentColumn++;
+                       while (char.IsLetterOrDigit (this.CurrentChar) && CurrentColumn < lines [CurrentLine].Length-1)
+                               CurrentColumn++;
+                       if (char.IsLetterOrDigit (this.CurrentChar))
+                               CurrentColumn++;
+               }
+               public void DeleteChar()
+               {
+                       if (selectionIsEmpty) {
+                               if (CurrentColumn == 0) {
+                                       if (CurrentLine == 0 && lines.Count == 1)
+                                               return;
+                                       CurrentLine--;
+                                       CurrentColumn = lines [CurrentLine].Length;
+                                       lines [CurrentLine] += lines [CurrentLine + 1];
+                                       lines.RemoveAt (CurrentLine + 1);
+
+                                       OnTextChanged (this, new TextChangeEventArgs (Text));
+                                       return;
+                               }
+                               CurrentColumn--;
+                               lines [CurrentLine] = lines [CurrentLine].Remove (CurrentColumn, 1);
+                       } else {
+                               int linesToRemove = selectionEnd.Y - selectionStart.Y + 1;
+                               int l = selectionStart.Y;
+
+                               if (linesToRemove > 0) {
+                                       lines [l] = lines [l].Remove (selectionStart.X, lines [l].Length - selectionStart.X) +
+                                               lines [selectionEnd.Y].Substring (selectionEnd.X, lines [selectionEnd.Y].Length - selectionEnd.X);
+                                       l++;
+                                       for (int c = 0; c < linesToRemove-1; c++)
+                                               lines.RemoveAt (l);
+                                       CurrentLine = selectionStart.Y;
+                                       CurrentColumn = selectionStart.X;
+                               } else
+                                       lines [l] = lines [l].Remove (selectionStart.X, selectionEnd.X - selectionStart.X);
+                               CurrentColumn = selectionStart.X;
+                               SelBegin = -1;
+                               SelRelease = -1;
+                       }
+                       OnTextChanged (this, new TextChangeEventArgs (Text));
+               }
+               /// <summary>
+               /// Insert new string at caret position, should be sure no line break is inside.
+               /// </summary>
+               /// <param name="str">String.</param>
+               protected void Insert(string str)
+               {
+                       if (!selectionIsEmpty)
+                               this.DeleteChar ();
+                       if (_multiline) {
+                               string[] strLines = Regex.Split (str, "\r\n|\r|\n|" + @"\\n").ToArray();
+                               lines [CurrentLine] = lines [CurrentLine].Insert (CurrentColumn, strLines[0]);
+                               CurrentColumn += strLines[0].Length;
+                               for (int i = 1; i < strLines.Length; i++) {
+                                       InsertLineBreak ();
+                                       lines [CurrentLine] = lines [CurrentLine].Insert (CurrentColumn, strLines[i]);
+                                       CurrentColumn += strLines[i].Length;
+                               }
+                       } else {
+                               lines [CurrentLine] = lines [CurrentLine].Insert (CurrentColumn, str);
+                               CurrentColumn += str.Length;
+                       }
+                       OnTextChanged (this, new TextChangeEventArgs (Text));
+               }
+               /// <summary>
+               /// Insert a line break.
+               /// </summary>
+               protected void InsertLineBreak()
+               {
+                       lines.Insert(CurrentLine + 1, lines[CurrentLine].Substring(CurrentColumn));
+                       lines [CurrentLine] = lines [CurrentLine].Substring (0, CurrentColumn);
+                       CurrentLine++;
+                       CurrentColumn = 0;
+                       OnTextChanged (this, new TextChangeEventArgs (Text));
+               }
+               bool textMeasureIsUpToDate = false;
+               Size cachedTextSize = default(Size);
+
+               #region GraphicObject overrides
+               protected override int measureRawSize(LayoutingType lt)
+               {
+                       if (lines == null)
+                               lines = getLines;
+                       if (!textMeasureIsUpToDate) {
+                               using (ImageSurface img = new ImageSurface (Format.Argb32, 10, 10)) {
+                                       using (Context gr = new Context (img)) {
+                                               //Cairo.FontFace cf = gr.GetContextFontFace ();
+
+                                               gr.SelectFontFace (Font.Name, Font.Slant, Font.Wheight);
+                                               gr.SetFontSize (Font.Size);
+                                               gr.FontOptions = Interface.FontRenderingOptions;
+                                               gr.Antialias = Interface.Antialias;
+
+                                               fe = gr.FontExtents;
+                                               te = new TextExtents ();
+
+                                               cachedTextSize.Height = (int)Math.Ceiling ((fe.Ascent+fe.Descent) * Math.Max (1, lines.Count)) + Margin * 2;
+
+                                               try {
+                                                       foreach (string s in lines) {
+                                                               string l = s.Replace ("\t", new String (' ', Interface.TabSize));
+
+                                                               TextExtents tmp = gr.TextExtents (l);
+
+                                                               if (tmp.XAdvance > te.XAdvance)
+                                                                       te = tmp;
+                                                       }
+                                                       cachedTextSize.Width = (int)Math.Ceiling (te.XAdvance) + Margin * 2;
+                                                       textMeasureIsUpToDate = true;
+                                               } catch {                                                       
+                                                       return -1;
+                                               }                                       
+                                       }
+                               }
+
+                       }
+                       return lt == LayoutingType.Height ? cachedTextSize.Height : cachedTextSize.Width;
+               }
+               protected override void onDraw (Context gr)
+               {
+                       base.onDraw (gr);
+
+                       gr.SelectFontFace (Font.Name, Font.Slant, Font.Wheight);
+                       gr.SetFontSize (Font.Size);
+                       gr.FontOptions = Interface.FontRenderingOptions;
+                       gr.Antialias = Interface.Antialias;
+
+                       rText = new Rectangle(new Size(
+                               measureRawSize(LayoutingType.Width), measureRawSize(LayoutingType.Height)));
+                       rText.Width -= 2 * Margin;
+                       rText.Height -= 2 * Margin;
+
+                       widthRatio = 1f;
+                       heightRatio = 1f;
+
+                       Rectangle cb = ClientRectangle;
+
+                       rText.X = cb.X;
+                       rText.Y = cb.Y;
+
+                       if (horizontalStretch) {
+                               widthRatio = (float)cb.Width / (float)rText.Width;
+                               if (!verticalStretch)
+                                       heightRatio = widthRatio;
+                       }
+
+                       if (verticalStretch) {
+                               heightRatio = (float)cb.Height / (float)rText.Height;
+                               if (!horizontalStretch)
+                                       widthRatio = heightRatio;
+                       }
+
+                       rText.Width = (int)(widthRatio * (float)rText.Width);
+                       rText.Height = (int)(heightRatio * (float)rText.Height);
+
+                       switch (TextAlignment)
+                       {
+                       case Alignment.TopLeft:     //ok
+                               rText.X = cb.X;
+                               rText.Y = cb.Y;
+                               break;
+                       case Alignment.Top:   //ok
+                               rText.Y = cb.Y;
+                               rText.X = cb.X + cb.Width / 2 - rText.Width / 2;
+                               break;
+                       case Alignment.TopRight:    //ok
+                               rText.Y = cb.Y;
+                               rText.X = cb.Right - rText.Width;
+                               break;
+                       case Alignment.Left://ok
+                               rText.X = cb.X;
+                               rText.Y = cb.Y + cb.Height / 2 - rText.Height / 2;
+                               break;
+                       case Alignment.Right://ok
+                               rText.X = cb.X + cb.Width - rText.Width;
+                               rText.Y = cb.Y + cb.Height / 2 - rText.Height / 2;
+                               break;
+                       case Alignment.Bottom://ok
+                               rText.X = cb.Width / 2 - rText.Width / 2;
+                               rText.Y = cb.Height - rText.Height;
+                               break;
+                       case Alignment.BottomLeft://ok
+                               rText.X = cb.X;
+                               rText.Y = cb.Bottom - rText.Height;
+                               break;
+                       case Alignment.BottomRight://ok
+                               rText.Y = cb.Bottom - rText.Height;
+                               rText.X = cb.Right - rText.Width;
+                               break;
+                       case Alignment.Center://ok
+                               rText.X = cb.X + cb.Width / 2 - rText.Width / 2;
+                               //rText.Y = cb.Y + cb.Height / 2 - rText.Height / 2;
+                               rText.Y = cb.Y + (int)Math.Floor((double)cb.Height / 2.0 - (double)rText.Height / 2.0);
+                               break;
+                       }
+
+                       //gr.FontMatrix = new Matrix(widthRatio * (float)Font.Size, 0, 0, heightRatio * (float)Font.Size, 0, 0);
+                       fe = gr.FontExtents;
+
+                       #region draw text cursor
+                       if (HasFocus && Selectable)
+                       {
+                               if (mouseLocalPos >= 0)
+                               {
+                                       computeTextCursor(gr);
+
+                                       if (SelectionInProgress)
+                                       {
+                                               if (SelBegin < 0){
+                                                       SelBegin = new Point(CurrentColumn, CurrentLine);
+                                                       SelStartCursorPos = textCursorPos;
+                                                       SelRelease = -1;
+                                               }else{
+                                                       SelRelease = new Point(CurrentColumn, CurrentLine);
+                                                       if (SelRelease == SelBegin)
+                                                               SelRelease = -1;
+                                                       else
+                                                               SelEndCursorPos = textCursorPos;
+                                               }
+                                       }else
+                                               computeTextCursorPosition(gr);
+                               }else
+                                       computeTextCursorPosition(gr);
+
+                               Foreground.SetAsSource (gr);
+                               gr.LineWidth = 1.0;
+                               gr.MoveTo (0.5 + textCursorPos + rText.X, rText.Y + CurrentLine * (fe.Ascent+fe.Descent));
+                               gr.LineTo (0.5 + textCursorPos + rText.X, rText.Y + (CurrentLine + 1) * (fe.Ascent+fe.Descent));
+                               gr.Stroke();
+                       }
+                       #endregion
+
+                       //****** debug selection *************
+//                     if (SelRelease >= 0) {
+//                             new SolidColor(Color.DarkGreen).SetAsSource(gr);
+//                             Rectangle R = new Rectangle (
+//                                                  rText.X + (int)SelEndCursorPos - 3,
+//                                                  rText.Y + (int)(SelRelease.Y * (fe.Ascent+fe.Descent)),
+//                                                  6,
+//                                                  (int)(fe.Ascent+fe.Descent));
+//                             gr.Rectangle (R);
+//                             gr.Fill ();
+//                     }
+//                     if (SelBegin >= 0) {
+//                             new SolidColor(Color.DarkRed).SetAsSource(gr);
+//                             Rectangle R = new Rectangle (
+//                                     rText.X + (int)SelStartCursorPos - 3,
+//                                     rText.Y + (int)(SelBegin.Y * (fe.Ascent+fe.Descent)),
+//                                     6,
+//                                     (int)(fe.Ascent+fe.Descent));
+//                             gr.Rectangle (R);
+//                             gr.Fill ();
+//                     }
+                       //*******************
+
+                       for (int i = 0; i < lines.Count; i++) {
+                               string l = lines [i].Replace ("\t", new String (' ', Interface.TabSize));
+                               int lineLength = (int)gr.TextExtents (l).XAdvance;
+                               Rectangle lineRect = new Rectangle (
+                                       rText.X,
+                                       rText.Y + i * (int)(fe.Ascent+fe.Descent),
+                                       lineLength,
+                                       (int)(fe.Ascent+fe.Descent));
+
+//                             if (TextAlignment == Alignment.Center ||
+//                                     TextAlignment == Alignment.Top ||
+//                                     TextAlignment == Alignment.Bottom)
+//                                     lineRect.X += (rText.Width - lineLength) / 2;
+//                             else if (TextAlignment == Alignment.Right ||
+//                                     TextAlignment == Alignment.TopRight ||
+//                                     TextAlignment == Alignment.BottomRight)
+//                                     lineRect.X += (rText.Width - lineLength);
+                               if (string.IsNullOrWhiteSpace (l))
+                                       continue;
+
+                               Foreground.SetAsSource (gr);
+                               gr.MoveTo (lineRect.X,(double)rText.Y + fe.Ascent + (fe.Ascent+fe.Descent) * i) ;
+
+                gr.ShowText (l);
+                               gr.Fill ();
+
+                               if (Selectable) {
+                                       if (SelRelease >= 0 && i >= selectionStart.Y && i <= selectionEnd.Y) {
+                                               gr.SetSourceColor (selBackground);
+
+                                               Rectangle selRect = lineRect;
+
+                                               int cpStart = (int)SelStartCursorPos,
+                                               cpEnd = (int)SelEndCursorPos;
+
+                                               if (SelBegin.Y > SelRelease.Y) {
+                                                       cpStart = cpEnd;
+                                                       cpEnd = (int)SelStartCursorPos;
+                                               }
+
+                                               if (i == selectionStart.Y) {
+                                                       selRect.Width -= cpStart;
+                                                       selRect.Left += cpStart;
+                                               }
+                                               if (i == selectionEnd.Y)
+                                                       selRect.Width -= (lineLength - cpEnd);
+
+                                               gr.Rectangle (selRect);
+                                               gr.FillPreserve ();
+                                               gr.Save ();
+                                               gr.Clip ();
+                                               gr.SetSourceColor (SelectionForeground);
+                                               gr.MoveTo (lineRect.X, rText.Y + fe.Ascent + (fe.Ascent+fe.Descent) * i);
+                                               gr.ShowText (l);
+                                               gr.Fill ();
+                                               gr.Restore ();
+                                       }
+                               }
+                       }
+               }
+               #endregion
+
+               #region Mouse handling
+               void updatemouseLocalPos(Point mpos){
+                       mouseLocalPos = mpos - ScreenCoordinates(Slot).TopLeft - ClientRectangle.TopLeft;
+                       if (mouseLocalPos.X < 0)
+                               mouseLocalPos.X = 0;
+                       if (mouseLocalPos.Y < 0)
+                               mouseLocalPos.Y = 0;
+               }
+               public override void onMouseEnter (object sender, MouseMoveEventArgs e)
+               {
+                       base.onMouseEnter (sender, e);
+                       if (Selectable)
+                               IFace.MouseCursor = XCursor.Text;
+               }
+               public override void onMouseLeave (object sender, MouseMoveEventArgs e)
+               {
+                       base.onMouseLeave (sender, e);
+                       IFace.MouseCursor = XCursor.Default;
+               }
+               protected override void onFocused (object sender, EventArgs e)
+               {
+                       base.onFocused (sender, e);
+
+                       if (!_selectable)
+                               return;
+                       SelBegin = new Point(0,0);
+                       SelRelease = new Point (lines.LastOrDefault ().Length, lines.Count-1);
+                       RegisterForRedraw ();
+               }
+               protected override void onUnfocused (object sender, EventArgs e)
+               {
+                       base.onUnfocused (sender, e);
+
+                       SelBegin = -1;
+                       SelRelease = -1;
+                       RegisterForRedraw ();
+               }
+               public override void onMouseMove (object sender, MouseMoveEventArgs e)
+               {
+                       base.onMouseMove (sender, e);
+
+                       if (!(SelectionInProgress && HasFocus && _selectable))
+                               return;
+
+                       updatemouseLocalPos (e.Position);
+
+                       RegisterForRedraw();
+               }
+               public override void onMouseDown (object sender, MouseButtonEventArgs e)
+               {
+                       if (this.HasFocus && _selectable){
+                               updatemouseLocalPos (e.Position);
+                               SelBegin = -1;
+                               SelRelease = -1;
+                               SelectionInProgress = true;
+                               RegisterForRedraw();//TODO:should put it in properties
+                       }
+
+                       //done at the end to set 'hasFocus' value after testing it
+                       base.onMouseDown (sender, e);
+               }
+               public override void onMouseUp (object sender, MouseButtonEventArgs e)
+               {
+                       base.onMouseUp (sender, e);
+                       if (!(this.HasFocus || _selectable))
+                               return;
+                       if (!SelectionInProgress)
+                               return;
+
+                       updatemouseLocalPos (e.Position);
+                       SelectionInProgress = false;
+                       RegisterForRedraw ();
+               }
+               public override void onMouseDoubleClick (object sender, MouseButtonEventArgs e)
+               {
+                       base.onMouseDoubleClick (sender, e);
+                       if (!(this.HasFocus || _selectable))
+                               return;
+                       
+                       GotoWordStart ();
+                       SelBegin = CurrentPosition;
+                       GotoWordEnd ();
+                       SelRelease = CurrentPosition;
+                       SelectionInProgress = false;
+                       RegisterForRedraw ();
+               }
+               #endregion
+
+               /// <summary>
+               /// Update Current Column, line and TextCursorPos
+               /// from mouseLocalPos
+               /// </summary>
+               void computeTextCursor(Context gr)
+               {
+                       TextExtents te;
+
+                       double cPos = 0f;
+
+                       CurrentLine = (int)(mouseLocalPos.Y / (fe.Ascent+fe.Descent));
+
+                       //fix cu
+                       if (CurrentLine >= lines.Count)
+                               CurrentLine = lines.Count - 1;
+
+                       switch (TextAlignment) {
+                       case Alignment.Center:
+                       case Alignment.Top:
+                       case Alignment.Bottom:
+                               cPos+= ClientRectangle.Width - gr.TextExtents(lines [CurrentLine]).Width/2.0;
+                               break;
+                       case Alignment.Right:
+                       case Alignment.TopRight:
+                       case Alignment.BottomRight:
+                               cPos += ClientRectangle.Width - gr.TextExtents(lines [CurrentLine]).Width;
+                               break;
+                       }
+
+                       for (int i = 0; i < lines[CurrentLine].Length; i++)
+                       {
+                               string c = lines [CurrentLine].Substring (i, 1);
+                               if (c == "\t")
+                                       c = new string (' ', Interface.TabSize);
+
+                               te = gr.TextExtents(c);
+
+                               double halfWidth = te.XAdvance / 2;
+
+                               if (mouseLocalPos.X <= cPos + halfWidth)
+                               {
+                                       CurrentColumn = i;
+                                       textCursorPos = cPos;
+                                       mouseLocalPos = -1;
+                                       return;
+                               }
+
+                               cPos += te.XAdvance;
+                       }
+                       CurrentColumn = lines[CurrentLine].Length;
+                       textCursorPos = cPos;
+
+                       //reset mouseLocalPos
+                       mouseLocalPos = -1;
+               }
+               /// <summary> Computes offsets in cairo units </summary>
+               void computeTextCursorPosition(Context gr)
+               {
+                       if (SelBegin >= 0)
+                               SelStartCursorPos = GetXFromTextPointer (gr, SelBegin);
+                       if (SelRelease >= 0)
+                               SelEndCursorPos = GetXFromTextPointer (gr, SelRelease);
+                       textCursorPos = GetXFromTextPointer (gr, new Point(CurrentColumn, CurrentLine));
+               }
+               /// <summary> Compute x offset in cairo unit from text position </summary>
+               double GetXFromTextPointer(Context gr, Point pos)
+               {
+                       try {
+                               string l = lines [pos.Y].Substring (0, pos.X).
+                                       Replace ("\t", new String (' ', Interface.TabSize));
+                               return gr.TextExtents (l).XAdvance;
+                       } catch{
+                               return -1;
+                       }
+               }
+    }
+}
diff --git a/Crow/src/GraphicObjects/ListBox.cs b/Crow/src/GraphicObjects/ListBox.cs
new file mode 100644 (file)
index 0000000..438e8d6
--- /dev/null
@@ -0,0 +1,48 @@
+//
+// ListBox.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.Collections;
+using System.Xml.Serialization;
+using System.ComponentModel;
+using System.IO;
+using System.Diagnostics;
+using System.Xml;
+using System.Collections.Generic;
+using System.Threading;
+
+namespace Crow
+{
+       public class ListBox : TemplatedGroup
+       {
+               #region CTOR
+               protected ListBox () : base(){}
+               public ListBox (Interface iface) : base(iface) {}
+               #endregion
+
+       }
+}
+
diff --git a/Crow/src/GraphicObjects/Menu.cs b/Crow/src/GraphicObjects/Menu.cs
new file mode 100644 (file)
index 0000000..7339623
--- /dev/null
@@ -0,0 +1,82 @@
+//
+// Menu.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.Xml.Serialization;
+using System.ComponentModel;
+
+namespace Crow
+{
+       public class Menu : TemplatedGroup
+       {
+               #region CTOR
+               protected Menu () : base(){}
+               public Menu (Interface iface) : base(iface) {}
+               #endregion
+
+               Orientation orientation;
+               bool autoOpen = false;
+
+               #region Public properties
+               [DefaultValue(Orientation.Horizontal)]
+               public Orientation Orientation {
+                       get { return orientation; }
+                       set {
+                               if (orientation == value)
+                                       return;
+                               orientation = value;
+                               NotifyValueChanged ("Orientation", orientation);
+                       }
+               }
+               [XmlIgnore]public bool AutomaticOpening
+               {
+                       get { return autoOpen; }
+                       set     {
+                               if (autoOpen == value)
+                                       return;
+                               autoOpen = value;
+                               NotifyValueChanged ("AutomaticOpening", autoOpen);
+                       }
+               }
+               #endregion
+
+               public override void AddItem (GraphicObject g)
+               {                       
+                       base.AddItem (g);
+
+                       if (orientation == Orientation.Horizontal)
+                               g.NotifyValueChanged ("PopDirection", Alignment.Bottom);
+                       else
+                               g.NotifyValueChanged ("PopDirection", Alignment.Right);
+               }
+               public override void onMouseLeave (object sender, MouseMoveEventArgs e)
+               {
+                       base.onMouseLeave (sender, e);
+                       AutomaticOpening = false;
+               }
+       }
+}
+
diff --git a/Crow/src/GraphicObjects/MenuItem.cs b/Crow/src/GraphicObjects/MenuItem.cs
new file mode 100644 (file)
index 0000000..a9e164d
--- /dev/null
@@ -0,0 +1,191 @@
+//
+// MenuItem.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.Xml.Serialization;
+using System.ComponentModel;
+
+namespace Crow
+{
+       public class MenuItem : Menu
+       {
+               #region CTOR
+               protected MenuItem () : base(){}
+               public MenuItem (Interface iface) : base(iface) {}
+               #endregion
+
+               public event EventHandler Open;
+               public event EventHandler Close;
+
+               Command command;
+               Picture icon;
+               bool isOpened;
+               Measure popWidth, popHeight;
+
+               #region Public properties
+               [DefaultValue(false)]
+               public bool IsOpened {
+                       get { return isOpened; }
+                       set {
+                               if (isOpened == value)
+                                       return;
+                               isOpened = value;
+                               NotifyValueChanged ("IsOpened", isOpened);
+
+                               if (isOpened) {
+                                       onOpen (this, null);
+                                       if (LogicalParent is Menu)
+                                               (LogicalParent as Menu).AutomaticOpening = true;
+                               }else
+                                       onClose (this, null);
+                       }
+               }
+               [DefaultValue(null)]
+               public virtual Command Command {
+                       get { return command; }
+                       set {
+                               if (command == value)
+                                       return;
+
+                               if (command != null) {
+                                       command.raiseAllValuesChanged ();
+                                       command.ValueChanged -= Command_ValueChanged;
+                               }
+
+                               command = value;
+
+                               if (command != null) {
+                                       command.ValueChanged += Command_ValueChanged;
+                                       command.raiseAllValuesChanged ();
+                               }
+
+                               NotifyValueChanged ("Command", command);
+                       }
+               }
+               
+               public override bool IsEnabled {
+                       get { return Command == null ? base.IsEnabled : Command.CanExecute; }
+                       set { base.IsEnabled = value; }
+               }
+               
+               public override string Caption {
+                       get { return Command == null ? base.Caption : Command.Caption; }
+                       set { base.Caption = value; }
+               }
+               
+               public Picture Icon {
+                       get { return Command == null ? icon : Command.Icon;; }
+                       set {
+                               if (icon == value)
+                                       return;
+                               icon = value;
+                               if (command == null)
+                                       NotifyValueChanged ("Icon", icon);
+                       }
+               }
+               [DefaultValue("Fit")]
+               public virtual Measure PopWidth {
+                       get { return popWidth; }
+                       set {
+                               if (popWidth == value)
+                                       return;
+                               popWidth = value;
+                               NotifyValueChanged ("PopWidth", popWidth);
+                       }
+               }
+               [DefaultValue("Fit")]
+               public virtual Measure PopHeight {
+                       get { return popHeight; }
+                       set {
+                               if (popHeight == value)
+                                       return;
+                               popHeight = value;
+                               NotifyValueChanged ("PopHeight", popHeight);
+                       }
+               }
+               #endregion
+
+               public override void AddItem (GraphicObject g)
+               {
+                       base.AddItem (g);
+                       g.NotifyValueChanged ("PopDirection", Alignment.Right);
+               }
+
+               void Command_ValueChanged (object sender, ValueChangeEventArgs e)
+               {
+                       string mName = e.MemberName;
+                       if (mName == "CanExecute")
+                               mName = "IsEnabled";
+                       NotifyValueChanged (mName, e.NewValue);
+               }
+               void onMI_Click (object sender, MouseButtonEventArgs e)
+               {
+                       if (command != null) {
+                               command.Execute ();
+                               closeMenu ();
+                       }
+                       if(!IsOpened)
+                               (LogicalParent as Menu).AutomaticOpening = false;
+               }
+               protected virtual void onOpen (object sender, EventArgs e){
+                       Open.Raise (this, null);
+               }
+               protected virtual void onClose (object sender, EventArgs e){
+                       System.Diagnostics.Debug.WriteLine ("close: " + this.ToString());
+                       Close.Raise (this, null);
+               }
+               public override bool MouseIsIn (Point m)
+               {
+                       return IsEnabled && !IsDragged ? base.MouseIsIn (m) || child.MouseIsIn (m) : false;
+               }
+               public override void onMouseEnter (object sender, MouseMoveEventArgs e)
+               {
+                       base.onMouseEnter (sender, e);
+                       Menu menu = LogicalParent as Menu;
+                       if (menu == null)
+                               return;
+                       if (menu.AutomaticOpening && items.Children.Count>0)
+                               IsOpened = true;
+               }
+               public override void onMouseLeave (object sender, MouseMoveEventArgs e)
+               {
+                       if (IsOpened)
+                               IsOpened = false;
+                       base.onMouseLeave (this, e);
+               }
+
+               void closeMenu () {
+                       MenuItem tmp = LogicalParent as MenuItem;
+                       while (tmp != null) {
+                               tmp.IsOpened = false;
+                               tmp.Background = Color.Transparent;
+                               tmp.AutomaticOpening = false;
+                               tmp = tmp.LogicalParent as MenuItem;
+                       }
+               }
+       }
+}
+
diff --git a/Crow/src/GraphicObjects/MessageBox.cs b/Crow/src/GraphicObjects/MessageBox.cs
new file mode 100644 (file)
index 0000000..ed9da2b
--- /dev/null
@@ -0,0 +1,203 @@
+//
+// MessageBox.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.Xml.Serialization;
+using System.ComponentModel;
+
+namespace Crow
+{
+       public class MessageBox : Window
+       {
+               #region CTOR
+               protected MessageBox () : base(){}
+               public MessageBox (Interface iface) : base(iface){}
+               #endregion
+
+               public enum Type {
+                       None,
+                       Information,
+                       Alert,
+                       Error,
+                       YesNo,
+                       YesNoCancel,
+
+               }
+
+               protected override void loadTemplate (GraphicObject template)
+               {
+                       base.loadTemplate (template);
+                       NotifyValueChanged ("MsgIcon", "#Crow.Icons.iconInfo.svg");
+               }
+               string message, okMessage, cancelMessage, noMessage;
+               Type msgType = Type.None;
+
+               public event EventHandler Yes;
+               public event EventHandler No;
+               public event EventHandler Cancel;
+
+               [DefaultValue("Informations")]
+               public virtual string Message
+               {
+                       get { return message; }
+                       set {
+                               if (message == value)
+                                       return;
+                               message = value;
+                               NotifyValueChanged ("Message", message);
+                       }
+               }
+               [DefaultValue("Ok")]
+               public virtual string OkMessage
+               {
+                       get { return okMessage; }
+                       set {
+                               if (okMessage == value)
+                                       return;
+                               okMessage = value;
+                               NotifyValueChanged ("OkMessage", okMessage);
+                       }
+               }
+               [DefaultValue("Cancel")]
+               public virtual string CancelMessage
+               {
+                       get { return cancelMessage; }
+                       set {
+                               if (cancelMessage == value)
+                                       return;
+                               cancelMessage = value;
+                               NotifyValueChanged ("CancelMessage", cancelMessage);
+                       }
+               }
+               [DefaultValue("No")]
+               public virtual string NoMessage
+               {
+                       get { return cancelMessage; }
+                       set {
+                               if (cancelMessage == value)
+                                       return;
+                               cancelMessage = value;
+                               NotifyValueChanged ("NoMessage", cancelMessage);
+                       }
+               }
+               [DefaultValue("Information")]
+               public virtual Type MsgType
+               {
+                       get { return msgType; }
+                       set {
+                               if (msgType == value)
+                                       return;
+                               msgType = value;
+                               NotifyValueChanged ("MsgType", msgType);
+                               switch (msgType) {
+                               case Type.Information:
+                                       MsgIcon = "#Crow.Icons.iconInfo.svg";
+                                       Caption = "Informations";
+                                       OkMessage = "Ok";
+                                       NotifyValueChanged ("CancelButIsVisible", false);
+                                       NotifyValueChanged ("NoButIsVisible", false);
+                                       break;
+                               case Type.YesNo:
+                               case Type.YesNoCancel:
+                                       MsgIcon = "#Crow.Icons.question.svg";
+                                       Caption = "Choice";
+                                       OkMessage = "Yes";
+                                       NoMessage = "No";
+                                       NotifyValueChanged ("CancelButIsVisible", msgType == Type.YesNoCancel);
+                                       NotifyValueChanged ("NoButIsVisible", true);
+                                       break;
+                               case Type.Alert:
+                                       MsgIcon = "#Crow.Icons.IconAlerte.svg";
+                                       Caption = "Alert";
+                                       OkMessage = "Ok";
+                                       CancelMessage = "Cancel";
+                                       NotifyValueChanged ("CancelButIsVisible", true);
+                                       NotifyValueChanged ("NoButIsVisible", false);
+                                       break;
+                               case Type.Error:
+                                       MsgIcon = "#Crow.Icons.exit.svg";
+                                       Caption = "Error";
+                                       OkMessage = "Ok";
+                                       NotifyValueChanged ("CancelButIsVisible", false);
+                                       NotifyValueChanged ("NoButIsVisible", false);
+                                       break;
+                               }
+                       }
+               }
+
+               string msgIcon = null;
+               public string MsgIcon {
+                       get { return msgIcon; }
+                       set {
+                               if (value == MsgIcon)
+                                       return;
+                               msgIcon = value;
+                               NotifyValueChanged ("MsgIcon", MsgIcon);
+                       }
+               }
+               void onOkButtonClick (object sender, EventArgs e)
+               {
+                       Yes.Raise (this, null);
+                       close ();
+               }
+               void onNoButtonClick (object sender, EventArgs e)
+               {
+                       No.Raise (this, null);
+                       close ();
+               }
+               void onCancelButtonClick (object sender, EventArgs e)
+               {
+                       Cancel.Raise (this, null);
+                       close ();
+               }
+               public static MessageBox Show (Interface iface, Type msgBoxType, string message, string okMsg = "", string cancelMsg = ""){
+                       lock (iface.UpdateMutex) {
+                               MessageBox mb = new MessageBox (iface);
+                               mb.IFace.AddWidget (mb);
+                               mb.MsgType = msgBoxType;
+                               mb.Message = message;
+                               if (!string.IsNullOrEmpty(okMsg))
+                                       mb.OkMessage = okMsg;
+                               if (!string.IsNullOrEmpty(cancelMsg))
+                                       mb.CancelMessage = cancelMsg;
+                               return mb;
+                       }
+               }
+               public static MessageBox ShowModal (Interface iface, Type msgBoxType, string message){
+                       lock (iface.UpdateMutex) {
+                               MessageBox mb = new MessageBox (iface) {
+                                       Modal = true,
+                                       MsgType = msgBoxType,
+                                       Message = message
+                               };
+
+                               iface.AddWidget (mb);
+                               return mb;
+                       }
+               }
+       }
+}
+
diff --git a/Crow/src/GraphicObjects/NumericControl.cs b/Crow/src/GraphicObjects/NumericControl.cs
new file mode 100644 (file)
index 0000000..7308331
--- /dev/null
@@ -0,0 +1,142 @@
+//
+// NumericControl.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.Xml.Serialization;
+using System.ComponentModel;
+
+namespace Crow
+{
+       public abstract class NumericControl : TemplatedControl
+       {
+               #region CTOR
+               protected NumericControl () : base(){}
+               public NumericControl (Interface iface) : base(iface)
+               {
+               }
+//             public NumericControl(double minimum, double maximum, double step)
+//                     : base()
+//             {
+//             }
+               #endregion
+
+               #region private fields
+               double _actualValue, minValue, maxValue, smallStep, bigStep;
+               int _decimals;
+               #endregion
+
+               #region public properties
+               [DefaultValue(2)]
+               public int Decimals
+               {
+                       get { return _decimals; }
+                       set
+                       {
+                               if (value == _decimals)
+                                       return;
+                               _decimals = value;
+                               NotifyValueChanged("Decimals",  _decimals);
+                               RegisterForGraphicUpdate();
+                       }
+               }
+               [DefaultValue(0.0)]
+               public virtual double Minimum {
+                       get { return minValue; }
+                       set {
+                               if (minValue == value)
+                                       return;
+
+                               minValue = value;
+                               NotifyValueChanged ("Minimum", minValue);
+                               RegisterForRedraw ();
+                       }
+               }
+               [DefaultValue(100.0)]
+               public virtual double Maximum
+               {
+                       get { return maxValue; }
+                       set {
+                               if (maxValue == value)
+                                       return;
+
+                               maxValue = value;
+                               NotifyValueChanged ("Maximum", maxValue);
+                               RegisterForRedraw ();
+                       }
+               }
+               [DefaultValue(1.0)]
+               public virtual double SmallIncrement
+               {
+                       get { return smallStep; }
+                       set {
+                               if (smallStep == value)
+                                       return;
+
+                               smallStep = value;
+                               NotifyValueChanged ("SmallIncrement", smallStep);
+                               RegisterForRedraw ();
+                       }
+               }
+               [DefaultValue(5.0)]
+               public virtual double LargeIncrement
+               {
+                       get { return bigStep; }
+                       set {
+                               if (bigStep == value)
+                                       return;
+
+                               bigStep = value;
+                               NotifyValueChanged ("LargeIncrement", bigStep);
+                               RegisterForRedraw ();
+                       }
+               }
+               [DefaultValue(0.0)]
+               public double Value
+               {
+                       get { return _actualValue; }
+                       set
+                       {
+                               if (value == _actualValue)
+                                       return;
+
+                               if (value < minValue)
+                                       _actualValue = minValue;
+                               else if (value > maxValue)
+                                       _actualValue = maxValue;
+                               else                    
+                                       _actualValue = value;
+
+                               _actualValue = Math.Round (_actualValue, _decimals);
+
+                               NotifyValueChanged("Value",  _actualValue);
+                               RegisterForGraphicUpdate();
+                       }
+               }
+               #endregion
+
+       }
+}
+
diff --git a/Crow/src/GraphicObjects/Popper.cs b/Crow/src/GraphicObjects/Popper.cs
new file mode 100644 (file)
index 0000000..89c0fa5
--- /dev/null
@@ -0,0 +1,250 @@
+//
+// Popper.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.Xml.Serialization;
+using System.ComponentModel;
+
+namespace Crow
+{
+    public class Popper : TemplatedContainer
+    {
+               #region CTOR
+               protected Popper () : base(){}
+               public Popper (Interface iface) : base(iface){}
+               #endregion
+
+               bool _isPopped, _canPop;
+               Alignment popDirection;
+               GraphicObject _content;
+               Measure popWidth, popHeight;
+
+               public event EventHandler Popped;
+               public event EventHandler Unpoped;
+
+               #region Public Properties
+               [DefaultValue("Fit")]
+               public virtual Measure PopWidth {
+                       get { return popWidth; }
+                       set {
+                               if (popWidth == value)
+                                       return;
+                               popWidth = value;
+                               NotifyValueChanged ("PopWidth", popWidth);
+                       }
+               }
+               [DefaultValue("Fit")]
+               public virtual Measure PopHeight {
+                       get { return popHeight; }
+                       set {
+                               if (popHeight == value)
+                                       return;
+                               popHeight = value;
+                               NotifyValueChanged ("PopHeight", popHeight);
+                       }
+               }
+               [DefaultValue(false)]
+               public bool IsPopped
+               {
+                       get { return _isPopped; }
+                       set
+                       {
+                               if (!_canPop & value)
+                                       return;                                 
+                               
+                               if (value == _isPopped)
+                                       return;
+
+                               _isPopped = value;
+
+                               NotifyValueChanged ("IsPopped", _isPopped);
+
+                               if (_isPopped)
+                                       onPop (this, null);
+                               else
+                                       onUnpop (this, null);
+
+                       }
+               }
+               [DefaultValue(true)]
+               public bool CanPop
+               {
+                       get { return _canPop; }
+                       set
+                       {
+                               if (value == _canPop)
+                                       return;
+
+                               _canPop = value;
+                               NotifyValueChanged ("CanPop", _canPop);
+                       }
+               }
+               [DefaultValue(Alignment.Bottom)]
+               public virtual Alignment PopDirection {
+                       get { return popDirection; }
+                       set {
+                               if (popDirection == value)
+                                       return;
+                               popDirection = value;
+                               NotifyValueChanged ("PopDirection", popDirection);
+                       }
+               }
+               #endregion
+
+               public override GraphicObject Content {
+                       get { return _content; }
+                       set {
+                               if (_content != null) {
+                                       _content.LogicalParent = null;
+                                       _content.isPopup = false;
+                                       _content.LayoutChanged -= _content_LayoutChanged;
+                               }
+
+                               _content = value;
+
+                               if (_content == null)
+                                       return;
+
+                               _content.LogicalParent = this;
+                               _content.isPopup = true;
+                               _content.HorizontalAlignment = HorizontalAlignment.Left;
+                               _content.VerticalAlignment = VerticalAlignment.Top;
+                               _content.LayoutChanged += _content_LayoutChanged;
+                       }
+               }
+               void positionContent(LayoutingType lt){
+                       ILayoutable tc = Content.Parent;
+                       if (tc == null)
+                               return;
+                       Rectangle r = this.ScreenCoordinates (this.Slot);
+                       if (lt == LayoutingType.X) {
+                               if (popDirection.HasFlag (Alignment.Right)) {
+                                       if (r.Right + Content.Slot.Width > tc.ClientRectangle.Right)
+                                               Content.Left = r.Left - Content.Slot.Width;
+                                       else
+                                               Content.Left = r.Right;
+                               } else if (popDirection.HasFlag (Alignment.Left)) {
+                                       if (r.Left - Content.Slot.Width < tc.ClientRectangle.Left)
+                                               Content.Left = r.Right;
+                                       else
+                                               Content.Left = r.Left - Content.Slot.Width;
+                               } else {
+                                       if (Content.Slot.Width < tc.ClientRectangle.Width) {
+                                               if (r.Left + Content.Slot.Width > tc.ClientRectangle.Right)
+                                                       Content.Left = tc.ClientRectangle.Right - Content.Slot.Width;
+                                               else
+                                                       Content.Left = r.Left;
+                                       } else
+                                               Content.Left = 0;
+                               }
+                       }else if (lt == LayoutingType.Y) {
+                               if (Content.Slot.Height < tc.ClientRectangle.Height) {
+                                       if (PopDirection.HasFlag (Alignment.Bottom)) {
+                                               if (r.Bottom + Content.Slot.Height > tc.ClientRectangle.Bottom)
+                                                       Content.Top = r.Top - Content.Slot.Height;
+                                               else
+                                                       Content.Top = r.Bottom;
+                                       } else if (PopDirection.HasFlag (Alignment.Top)) {
+                                               if (r.Top - Content.Slot.Height < tc.ClientRectangle.Top)
+                                                       Content.Top = r.Bottom;
+                                               else
+                                                       Content.Top = r.Top - Content.Slot.Height;
+                                       } else
+                                               Content.Top = r.Top;
+                               }else
+                                       Content.Top = 0;
+                       }
+               }
+               protected void _content_LayoutChanged (object sender, LayoutingEventArgs e)
+               {
+                       if (e.LayoutType.HasFlag (LayoutingType.Width))
+                               positionContent (LayoutingType.X);
+                       if (e.LayoutType.HasFlag(LayoutingType.Height))
+                               positionContent (LayoutingType.Y);
+               }
+
+               #region GraphicObject overrides
+               public override void onMouseLeave (object sender, MouseMoveEventArgs e)
+               {
+                       base.onMouseLeave (this, e);
+                       IsPopped = false;
+               }
+               public override bool MouseIsIn (Point m)
+               {                       
+                       if (Content?.Parent != null)
+                               if (Content.MouseIsIn (m))
+                                       return true;
+                       return base.MouseIsIn (m);
+               }
+               public override void checkHoverWidget (MouseMoveEventArgs e)
+               {
+                       if (IFace.HoverWidget != this) {
+                               IFace.HoverWidget = this;
+                               onMouseEnter (this, e);
+                       }
+                       if (Content != null){
+                               if (Content.Parent != null) {
+                                       if (Content.MouseIsIn (e.Position)) {
+                                               Content.checkHoverWidget (e);
+                                               return;
+                                       }
+                               }
+                       }
+                       base.checkHoverWidget (e);
+               }
+               #endregion
+
+               public virtual void onPop(object sender, EventArgs e)
+               {
+                       if (Content != null) {
+                               Content.Visible = true;
+                               if (Content.Parent == null)
+                                       IFace.AddWidget (Content);
+                               if (Content.LogicalParent != this)
+                                       Content.LogicalParent = this;
+                               IFace.PutOnTop (Content, true);
+                               _content_LayoutChanged (this, new LayoutingEventArgs (LayoutingType.Sizing));
+                       }
+                       Popped.Raise (this, e);
+               }
+               public virtual void onUnpop(object sender, EventArgs e)
+               {
+                       if (Content != null) {
+                               Content.Visible = false;
+                       }
+                       Unpoped.Raise (this, e);
+               }
+
+               protected override void Dispose (bool disposing)
+               {
+                       if (_content != null && disposing) {
+                               if (_content.Parent == null)
+                                       _content.Dispose ();
+                       }
+                       base.Dispose (disposing);
+               }
+       }
+}
diff --git a/Crow/src/GraphicObjects/PrivateContainer.cs b/Crow/src/GraphicObjects/PrivateContainer.cs
new file mode 100644 (file)
index 0000000..0f9b0c5
--- /dev/null
@@ -0,0 +1,244 @@
+//
+// PrivateContainer.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.Xml.Serialization;
+using System.ComponentModel;
+using Cairo;
+
+namespace Crow
+{
+       /// <summary>
+       /// Implement drawing and layouting for a single child, but
+       /// does not expose child to allow reuse of container
+       /// behaviour for widgets that have other xml hierarchy: example
+       /// TemplatedControl may have 3 children (template,templateItem,content) but
+       /// behave exactely as a container for layouting and drawing
+       /// </summary>
+       [DesignIgnore]
+       public class PrivateContainer : GraphicObject
+       {
+               #region CTOR
+               protected PrivateContainer () : base(){}
+               public PrivateContainer (Interface iface) : base(iface){}
+               #endregion
+
+               #if DESIGN_MODE
+               public override bool FindByDesignID(string designID, out GraphicObject go){
+                       go = null;
+                       if (base.FindByDesignID (designID, out go))
+                               return true;
+                       if (child == null)
+                               return false;
+                       return child.FindByDesignID (designID, out go);                                 
+               }
+               #endif
+               protected GraphicObject child;
+               #if DEBUG_LOG
+               internal GraphicObject getTemplateRoot {
+                       get { return child; }
+               }
+               #endif
+
+               protected virtual void SetChild(GraphicObject _child)
+               {
+
+                       if (child != null) {
+                               //check if HoverWidget is removed from Tree
+                               if (IFace.HoverWidget != null) {
+                                       if (this.Contains (IFace.HoverWidget))
+                                               IFace.HoverWidget = null;
+                               }
+                               contentSize = default(Size);
+                               child.LayoutChanged -= OnChildLayoutChanges;
+                               this.RegisterForGraphicUpdate ();
+                       }
+
+                       child = _child as GraphicObject;
+
+                       if (child != null) {
+                               child.Parent = this;
+                               child.LayoutChanged += OnChildLayoutChanges;
+                               contentSize = child.Slot.Size;
+                               child.RegisteredLayoutings = LayoutingType.None;
+                               child.RegisterForLayouting (LayoutingType.Sizing);
+                       }
+               }
+               //dispose child if not null
+               protected virtual void deleteChild () {
+                       GraphicObject g = child;
+                       SetChild (null);
+                       if (g != null)
+                               g.Dispose ();
+               }
+
+               #region GraphicObject Overrides
+
+               public override GraphicObject FindByName (string nameToFind)
+               {
+                       if (Name == nameToFind)
+                               return this;
+
+                       return child == null ? null : child.FindByName (nameToFind);
+               }
+               public override bool Contains (GraphicObject goToFind)
+               {
+                       return child == goToFind ? true : 
+                               child == null ? false : child.Contains(goToFind);
+               }
+               public override void OnDataSourceChanged (object sender, DataSourceChangeEventArgs e)
+               {
+                       base.OnDataSourceChanged (this, e);
+                       if (child != null)
+                       if (child.localDataSourceIsNull & child.localLogicalParentIsNull)
+                               child.OnDataSourceChanged (child, e);
+               }
+               public override bool UpdateLayout (LayoutingType layoutType)
+               {
+                       if (child != null) {
+                               //force sizing to fit if sizing on children and child has stretched size
+                               switch (layoutType) {
+                               case LayoutingType.Width:
+                                       if (Width == Measure.Fit && child.Width.IsRelativeToParent)
+                                               child.Width = Measure.Fit;
+                                       break;
+                               case LayoutingType.Height:
+                                       if (Height == Measure.Fit && child.Height.IsRelativeToParent)
+                                               child.Height = Measure.Fit;
+                                       break;
+                               }
+                       }
+                       return base.UpdateLayout (layoutType);
+               }
+               public override void OnLayoutChanges (LayoutingType layoutType)
+               {
+                       base.OnLayoutChanges (layoutType);
+
+                       if (child == null)
+                               return;
+                       
+                       LayoutingType ltChild = LayoutingType.None;
+
+                       if (layoutType == LayoutingType.Width) {
+                               if (child.Width.IsRelativeToParent) {
+                                       ltChild |= LayoutingType.Width;
+                                       if (child.Width.Value < 100 && child.Left == 0)
+                                               ltChild |= LayoutingType.X;
+                               } else if (child.Left == 0)
+                                       ltChild |= LayoutingType.X;
+                       } else if (layoutType == LayoutingType.Height) {
+                               if (child.Height.IsRelativeToParent) {
+                                       ltChild |= LayoutingType.Height;
+                                       if (child.Height.Value < 100 && child.Top == 0)
+                                               ltChild |= LayoutingType.Y;
+                               } else if (child.Top == 0)
+                                               ltChild |= LayoutingType.Y;
+                       }
+                       if (ltChild == LayoutingType.None)
+                               return;
+                       child.RegisterForLayouting (ltChild);
+               }
+               public virtual void OnChildLayoutChanges (object sender, LayoutingEventArgs arg)
+               {                       
+                       GraphicObject g = sender as GraphicObject;
+
+                       if (arg.LayoutType == LayoutingType.Width) {
+                               if (Width != Measure.Fit)
+                                       return;
+                               contentSize.Width = g.Slot.Width;
+                               this.RegisterForLayouting (LayoutingType.Width);
+                       }else if (arg.LayoutType == LayoutingType.Height){
+                               if (Height != Measure.Fit)
+                                       return;
+                               contentSize.Height = g.Slot.Height;
+                               this.RegisterForLayouting (LayoutingType.Height);
+                       }
+               }
+               protected override void onDraw (Context gr)
+               {
+                       base.onDraw (gr);
+
+                       gr.Save ();
+
+                       if (ClipToClientRect) {
+                               //clip to client zone
+                               CairoHelpers.CairoRectangle (gr, ClientRectangle, CornerRadius);
+                               gr.Clip ();
+                       }
+
+                       if (child != null) {
+                               if (child.Visible)
+                                       child.Paint (ref gr);
+                       }
+                       gr.Restore ();
+               }
+               protected override void UpdateCache (Context ctx)
+               {
+                       Rectangle rb = Slot + Parent.ClientRectangle.Position;
+
+
+                       Context gr = new Context (bmp);
+
+                       if (!Clipping.IsEmpty) {
+                               for (int i = 0; i < Clipping.NumRectangles; i++)
+                                       gr.Rectangle(Clipping.GetRectangle(i));
+                               gr.ClipPreserve();
+                               gr.Operator = Operator.Clear;
+                               gr.Fill();
+                               gr.Operator = Operator.Over;
+
+                               onDraw (gr);
+                       }
+                               
+                       gr.Dispose ();
+
+                       ctx.SetSourceSurface (bmp, rb.X, rb.Y);
+                       ctx.Paint ();
+                       Clipping.Dispose();
+                       Clipping = new Region ();
+               }
+               #endregion
+
+               #region Mouse handling
+               public override void checkHoverWidget (MouseMoveEventArgs e)
+               {
+                       base.checkHoverWidget (e);
+
+                       if (child != null) 
+                               if (child.MouseIsIn (e.Position)) 
+                                       child.checkHoverWidget (e);
+               }
+               #endregion
+
+               protected override void Dispose (bool disposing)
+               {
+                       if (disposing && child != null)
+                               child.Dispose ();
+                       base.Dispose (disposing);
+               }
+       }
+}
+
diff --git a/Crow/src/GraphicObjects/ProgressBar.cs b/Crow/src/GraphicObjects/ProgressBar.cs
new file mode 100644 (file)
index 0000000..e8165fd
--- /dev/null
@@ -0,0 +1,68 @@
+//
+// ProgressBar.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Cairo;
+using System.Diagnostics;
+using System.Xml.Serialization;
+using System.ComponentModel;
+
+namespace Crow
+{
+       
+       public class ProgressBar : NumericControl
+    {
+               #region CTOR
+               protected ProgressBar () : base(){}
+               public ProgressBar(Interface iface) : base(iface){}
+               #endregion
+
+               protected override void loadTemplate (GraphicObject template)
+               {
+                       
+               }
+
+               #region GraphicObject overrides
+               protected override void onDraw (Context gr)
+               {
+                       base.onDraw (gr);
+
+                       if (Maximum == 0)
+                               return;
+
+                       Rectangle rBack = ClientRectangle;
+                       rBack.Width = (int)((double)rBack.Width / Maximum * Value);
+                       Foreground.SetAsSource (gr, rBack);
+
+                       CairoHelpers.CairoRectangle(gr,rBack,CornerRadius);
+                       gr.Fill();
+               }
+               #endregion
+    }
+}
diff --git a/Crow/src/GraphicObjects/RadioButton.cs b/Crow/src/GraphicObjects/RadioButton.cs
new file mode 100644 (file)
index 0000000..d18971a
--- /dev/null
@@ -0,0 +1,83 @@
+//
+// RadioButton.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.ComponentModel;
+using System.Xml.Serialization;
+
+namespace Crow
+{
+    public class RadioButton : TemplatedControl
+    {                  
+               bool isChecked;
+
+               #region CTOR
+               protected RadioButton () : base(){}
+               public RadioButton(Interface iface) : base(iface){}     
+               #endregion
+
+               public event EventHandler Checked;
+               public event EventHandler Unchecked;
+
+               #region GraphicObject overrides
+               public override void onMouseDown (object sender, MouseButtonEventArgs e)
+               {                                               
+                       Group pg = Parent as Group;
+                       if (pg != null) {
+                               for (int i = 0; i < pg.Children.Count; i++) {
+                                       RadioButton c = pg.Children [i] as RadioButton;
+                                       if (c == null)
+                                               continue;
+                                       c.IsChecked = (c == this);
+                               }
+                       } else
+                               IsChecked = !IsChecked;
+
+                       base.onMouseDown (sender, e);
+               }
+               #endregion
+
+        [DefaultValue(false)]
+        public bool IsChecked
+        {
+                       get { return isChecked; }
+            set
+            {
+                               if (isChecked == value)
+                                       return;
+                               
+                               isChecked = value;
+
+                               NotifyValueChanged ("IsChecked", value);
+
+                               if (isChecked)
+                                       Checked.Raise (this, null);
+                               else
+                                       Unchecked.Raise (this, null);
+            }
+        }
+       }
+}
diff --git a/Crow/src/GraphicObjects/SaturationValueSelector.cs b/Crow/src/GraphicObjects/SaturationValueSelector.cs
new file mode 100644 (file)
index 0000000..5a25d6a
--- /dev/null
@@ -0,0 +1,143 @@
+//
+// SaturationValueSelector.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using Cairo;
+using System.Xml.Serialization;
+
+namespace Crow
+{
+       [DesignIgnore]
+       public class SaturationValueSelector : ColorSelector
+       {
+               public SaturationValueSelector () : base(){}
+               public SaturationValueSelector (Interface iface) : base(iface)
+               {
+               }
+
+               double v, s;
+
+               
+               public virtual double V {
+                       get { return v; }
+                       set {
+                               if (v == value)
+                                       return;
+                               v = value;
+                               NotifyValueChanged ("V", v);
+                               mousePos.Y = (int)Math.Floor((1.0-v) * (double)ClientRectangle.Height);
+
+                               RegisterForRedraw ();
+                       }
+               }
+               
+               public virtual double S {
+                       get { return s; }
+                       set {
+                               if (s == value)
+                                       return;
+                               s = value;
+                               NotifyValueChanged ("S", s);
+                               mousePos.X = (int)Math.Floor(s * (double)ClientRectangle.Width);
+
+                               RegisterForRedraw ();
+                       }
+               }
+               protected override void onDraw (Context gr)
+               {
+                       base.onDraw (gr);
+
+                       Rectangle r = ClientRectangle;
+
+                       if (Foreground != null) {//TODO:test if null should be removed
+                               Foreground.SetAsSource (gr, r);
+                               CairoHelpers.CairoRectangle (gr, r, CornerRadius);
+                               gr.Fill ();
+                       }
+
+                       Crow.Gradient grad = new Gradient (Gradient.Type.Horizontal);
+                       grad.Stops.Add (new Gradient.ColorStop (0, new Color (1, 1, 1, 1)));
+                       grad.Stops.Add (new Gradient.ColorStop (1, new Color (1, 1, 1, 0)));
+                       grad.SetAsSource (gr, r);
+                       CairoHelpers.CairoRectangle (gr, r, CornerRadius);
+                       gr.Fill();
+                       grad = new Gradient (Gradient.Type.Vertical);
+                       grad.Stops.Add (new Gradient.ColorStop (0, new Color (0, 0, 0, 0)));
+                       grad.Stops.Add (new Gradient.ColorStop (1, new Color (0, 0, 0, 1)));
+                       grad.SetAsSource (gr, r);
+                       CairoHelpers.CairoRectangle (gr, r, CornerRadius);
+                       gr.Fill();
+
+               }
+
+               public override void Paint (ref Context ctx)
+               {
+                       base.Paint (ref ctx);
+
+                       Rectangle rb = Slot + Parent.ClientRectangle.Position;
+                       ctx.Save ();
+
+                       ctx.Translate (rb.X, rb.Y);
+
+                       ctx.SetSourceColor (Color.DimGrey);
+                       ctx.Arc (mousePos.X, mousePos.Y, 3.5, 0, Math.PI * 2.0);
+                       ctx.LineWidth = 0.5;
+                       ctx.Stroke ();
+                       ctx.Translate (-0.5, -0.5);
+                       ctx.Arc (mousePos.X, mousePos.Y, 3.5, 0, Math.PI * 2.0);
+                       ctx.SetSourceColor (Color.White);
+                       ctx.Stroke ();
+
+                       ctx.Restore ();
+               }
+
+               protected override void updateMouseLocalPos (Point mPos)
+               {
+                       base.updateMouseLocalPos (mPos);
+
+                       Rectangle cb = ClientRectangle;
+                       s = (double)mousePos.X / (double)cb.Width;
+                       v = 1.0 - (double)mousePos.Y / (double)cb.Height;
+                       NotifyValueChanged ("S", s);
+                       NotifyValueChanged ("V", v);
+
+                       RegisterForRedraw ();
+               }
+               public override void OnLayoutChanges (LayoutingType layoutType)
+               {
+                       base.OnLayoutChanges (layoutType);
+                       switch (layoutType) {
+                       case LayoutingType.Width:
+                               mousePos.X = (int)Math.Floor(s * (double)ClientRectangle.Width);
+                               break;
+                       case LayoutingType.Height:
+                               mousePos.Y = (int)Math.Floor((1.0-v) * (double)ClientRectangle.Height);
+                               break;
+                       }
+               }
+       }
+}
+
diff --git a/Crow/src/GraphicObjects/ScrollBar.cs b/Crow/src/GraphicObjects/ScrollBar.cs
new file mode 100644 (file)
index 0000000..cf6201e
--- /dev/null
@@ -0,0 +1,90 @@
+//
+// ScrollBar.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.Xml.Serialization;
+using System.ComponentModel;
+
+namespace Crow
+{
+       /// <summary>
+       /// templeted numeric control
+       /// </summary>
+       public class ScrollBar : NumericControl
+       {
+               //TODO:could be replaced by a template for a Slider
+
+               Orientation _orientation;
+               int _cursorSize;
+
+               #region CTOR
+               protected ScrollBar () : base(){}
+               public ScrollBar(Interface iface) : base(iface) {}
+               #endregion
+
+               [DefaultValue(Orientation.Vertical)]
+               public virtual Orientation Orientation
+               {
+                       get { return _orientation; }
+                       set {                           
+                               if (_orientation == value)
+                                       return;
+                               _orientation = value;
+                               NotifyValueChanged ("Orientation", _orientation);
+                               if (_orientation == Orientation.Horizontal)
+                                       NotifyValueChanged ("ScrollBackShape", "M 1.5,3.5 L 6.5,0.5 L 6.5,6.5 Z");
+                               else
+                                       NotifyValueChanged ("ScrollBackShape", "M 4.5,0.5 L 9.5,9.5 L 0.5,9.5 Z");
+
+                RegisterForGraphicUpdate ();
+                       }
+               }
+               [DefaultValue(20)]
+               public virtual int CursorSize {
+                       get { return _cursorSize; }
+                       set {
+                               if (_cursorSize == value)
+                                       return;
+                               _cursorSize = value;
+                               RegisterForGraphicUpdate ();
+                               NotifyValueChanged ("CursorSize", _cursorSize);
+                       }
+               }
+               public void onScrollBack (object sender, MouseButtonEventArgs e)
+               {
+                       Value -= SmallIncrement;
+               }
+               public void onScrollForth (object sender, MouseButtonEventArgs e)
+               {
+                       Value += SmallIncrement;
+               }
+
+               public void onSliderValueChange(object sender, ValueChangeEventArgs e){
+                       if (e.MemberName == "Value")
+                               Value = Convert.ToDouble(e.NewValue);
+               }
+       }
+}
diff --git a/Crow/src/GraphicObjects/Scroller.cs b/Crow/src/GraphicObjects/Scroller.cs
new file mode 100644 (file)
index 0000000..16f6556
--- /dev/null
@@ -0,0 +1,291 @@
+//
+// Scroller.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.Xml.Serialization;
+using System.ComponentModel;
+using System.Diagnostics;
+using Cairo;
+
+namespace Crow
+{
+       /// <summary>
+       /// scrolling surface, to be contained in a smaller container in which it will be scrolled
+       /// </summary>
+       public class Scroller : Container
+       {
+               #region CTOR
+               protected Scroller () : base(){}
+               public Scroller (Interface iface) : base(iface){}
+               #endregion
+
+               public event EventHandler<ScrollingEventArgs> Scrolled;
+
+               int scrollX, scrollY, maxScrollX, maxScrollY, scrollSpeed;
+
+               /// <summary>
+               /// if true, key stroke are handled in derrived class
+               /// </summary>
+               protected bool KeyEventsOverrides = false;
+
+               #region public properties
+               /// <summary> Horizontal Scrolling Position </summary>
+               [DefaultValue(0)]
+               public virtual int ScrollX {
+                       get { return scrollX; }
+                       set {
+                               if (scrollX == value)
+                                       return;
+
+                               int newS = value;
+                               if (newS < 0)
+                                       newS = 0;
+                               else if (newS > maxScrollX)
+                                       newS = maxScrollX;
+
+                               if (newS == scrollX)
+                                       return;
+
+                               scrollX = value;
+
+                               NotifyValueChanged ("ScrollX", scrollX);
+                               RegisterForGraphicUpdate ();
+                       }
+               }
+               /// <summary> Vertical Scrolling Position </summary>
+               [DefaultValue(0)]
+               public virtual int ScrollY {
+                       get { return scrollY; }
+                       set {
+                               if (scrollY == value)
+                                       return;
+
+                               int newS = value;
+                               if (newS < 0)
+                                       newS = 0;
+                               else if (newS > maxScrollY)
+                                       newS = maxScrollY;
+
+                               if (newS == scrollY)
+                                       return;
+
+                               scrollY = value;
+
+                               NotifyValueChanged ("ScrollY", scrollY);
+                               RegisterForGraphicUpdate ();
+                       }
+               }
+               /// <summary> Horizontal Scrolling maximum value </summary>
+               [DefaultValue(0)]
+               public virtual int MaxScrollX {
+                       get { return maxScrollX; }
+                       set {
+                               if (maxScrollX == value)
+                                       return;
+
+                               maxScrollX = value;
+
+                               if (scrollX > maxScrollX)
+                                       ScrollX = maxScrollX;
+
+                               NotifyValueChanged ("MaxScrollX", maxScrollX);
+                               RegisterForGraphicUpdate ();
+                       }
+               }
+               /// <summary> Vertical Scrolling maximum value </summary>
+               [DefaultValue(0)]
+               public virtual int MaxScrollY {
+                       get { return maxScrollY; }
+                       set {
+                               if (maxScrollY == value)
+                                       return;
+
+                               maxScrollY = value;
+
+                               if (scrollY > maxScrollY)
+                                       ScrollY = maxScrollY;
+
+                               NotifyValueChanged ("MaxScrollY", maxScrollY);
+                               RegisterForGraphicUpdate ();
+                       }
+               }
+               /// <summary> Mouse Wheel Scrolling multiplier </summary>
+               [DefaultValue(50)]
+               public virtual int ScrollSpeed {
+                       get { return scrollSpeed; }
+                       set {
+                               if (scrollSpeed == value)
+                                       return;
+
+                               scrollSpeed = value;
+
+                               NotifyValueChanged ("ScrollSpeed", scrollSpeed);
+                       }
+               }
+               #endregion
+
+               public override void SetChild (GraphicObject _child)
+               {
+                       Group g = child as Group;
+                       if (g != null)
+                               g.ChildrenCleared -= onChildListCleared;
+                       
+                       base.SetChild (_child);
+
+                       g = _child as Group;
+                       if (g != null)
+                               g.ChildrenCleared += onChildListCleared;                        
+               }
+               public override void OnChildLayoutChanges (object sender, LayoutingEventArgs arg)
+               {
+                       base.OnChildLayoutChanges (sender, arg);
+                       updateMaxScroll (arg.LayoutType);
+               }
+
+
+               #region GraphicObject Overrides
+               public override Rectangle ScreenCoordinates (Rectangle r)
+               {
+                       return base.ScreenCoordinates (r) - new Point((int)ScrollX,(int)ScrollY);
+               }
+               public override bool PointIsIn (ref Point m)
+               {
+                       if (!base.PointIsIn(ref m))
+                               return false;
+                       if (!Slot.ContainsOrIsEqual (m) || child==null)
+                               return false;
+                       m += new Point (ScrollX, ScrollY);
+                       return true;
+               }
+               public override void RegisterClip (Rectangle clip)
+               {
+                       base.RegisterClip (clip - new Point(ScrollX,ScrollY));
+               }
+               public override void OnLayoutChanges (LayoutingType layoutType)
+               {
+                       base.OnLayoutChanges (layoutType);
+
+                       if (layoutType == LayoutingType.Height)
+                               NotifyValueChanged ("PageHeight", Slot.Height);
+                       else if (layoutType == LayoutingType.Width)
+                               NotifyValueChanged ("PageWidth", Slot.Width);
+                       else
+                               return;
+                       updateMaxScroll(layoutType);
+               }
+               protected override void onDraw (Context gr)
+               {
+                       Rectangle rBack = new Rectangle (Slot.Size);
+
+                       Background.SetAsSource (gr, rBack);
+                       CairoHelpers.CairoRectangle(gr,rBack, CornerRadius);
+                       gr.Fill ();
+
+                       gr.Save ();
+                       if (ClipToClientRect) {
+                               //clip to scrolled client zone
+                               CairoHelpers.CairoRectangle (gr, ClientRectangle, CornerRadius);
+                               gr.Clip ();
+                       }
+
+                       gr.Translate (-ScrollX, -ScrollY);
+                       if (child != null)
+                               child.Paint (ref gr);
+                       gr.Restore ();
+               }
+
+               #region Mouse & Keyboard
+               /// <summary> Process scrolling vertically, or if shift is down, vertically </summary>
+               public override void onMouseWheel (object sender, MouseWheelEventArgs e)
+               {
+                       base.onMouseWheel (sender, e);
+                       if (IFace.IsKeyDown (Key.Shift_L))
+                               ScrollX += e.Delta * ScrollSpeed;
+                       else
+                               ScrollY -= e.Delta * ScrollSpeed;
+               }
+               /// <summary> Process scrolling with arrow keys, home and end keys. </summary>
+               public override void onKeyDown (object sender, KeyEventArgs e)
+               {
+                       base.onKeyDown (sender, e);
+
+                       if (KeyEventsOverrides)
+                               return;
+
+                       switch (e.Key) {
+                       case Key.Up:
+                               ScrollY--;
+                               break;
+                       case Key.Down:
+                               ScrollY++;
+                               break;
+                       case Key.Left:
+                               ScrollX--;
+                               break;
+                       case Key.Right:
+                               ScrollX++;
+                               break;
+                       case Key.Home:
+                               ScrollX = 0;
+                               ScrollY = 0;
+                               break;
+                       case Key.End:
+                               ScrollX = MaxScrollX;
+                               ScrollY = MaxScrollY;
+                               break;
+                       }
+               }
+               #endregion
+
+               #endregion
+
+               void updateMaxScroll (LayoutingType lt){
+                       if (Child == null) {
+                               MaxScrollX = 0;
+                               MaxScrollY = 0;
+                               return;
+                       }
+
+                       Rectangle cb = ClientRectangle;
+
+                       if (lt == LayoutingType.Height) {
+                               MaxScrollY = child.Slot.Height - cb.Height;
+                               if (child.Slot.Height > 0)
+                                       NotifyValueChanged ("ChildHeightRatio", Slot.Height * Slot.Height / child.Slot.Height);                 
+                       } else if (lt == LayoutingType.Width) {
+                               MaxScrollX = child.Slot.Width - cb.Width;
+                               if (child.Slot.Width > 0)
+                                       NotifyValueChanged ("ChildWidthRatio", Slot.Width * Slot.Width / child.Slot.Width);
+                       }
+               }
+               void onChildListCleared(object sender, EventArgs e){
+                       ScrollY = 0;
+                       ScrollX = 0;
+               }
+
+
+    }
+}
diff --git a/Crow/src/GraphicObjects/ScrollingObject.cs b/Crow/src/GraphicObjects/ScrollingObject.cs
new file mode 100644 (file)
index 0000000..bc57b32
--- /dev/null
@@ -0,0 +1,190 @@
+//
+// ScrollingObject.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.Xml.Serialization;
+using System.ComponentModel;
+using System.Collections;
+using Cairo;
+
+
+namespace Crow
+{
+       /// <summary>
+       /// generic class to build scrolling control in both directions
+       /// </summary>
+       [DesignIgnore]
+       public class ScrollingObject : GraphicObject
+       {
+               #region CTOR
+               protected ScrollingObject ():base(){}
+               public ScrollingObject (Interface iface):base(iface){}
+               #endregion
+
+               int scrollX, scrollY, maxScrollX, maxScrollY, mouseWheelSpeed;
+
+               /// <summary>
+               /// if true, key stroke are handled in derrived class
+               /// </summary>
+               protected bool KeyEventsOverrides = false;
+
+               /// <summary> Horizontal Scrolling Position </summary>
+               [DefaultValue(0)]
+               public virtual int ScrollX {
+                       get { return scrollX; }
+                       set {
+                               if (scrollX == value)
+                                       return;
+
+                               int newS = value;
+                               if (newS < 0)
+                                       newS = 0;
+                               else if (newS > maxScrollX)
+                                       newS = maxScrollX;
+
+                               if (newS == scrollX)
+                                       return;
+
+                               scrollX = newS;
+
+                               NotifyValueChanged ("ScrollX", scrollX);
+                               RegisterForGraphicUpdate ();
+                       }
+               }
+               /// <summary> Vertical Scrolling Position </summary>
+               [DefaultValue(0)]
+               public virtual int ScrollY {
+                       get { return scrollY; }
+                       set {
+                               if (scrollY == value)
+                                       return;
+
+                               int newS = value;
+                               if (newS < 0)
+                                       newS = 0;
+                               else if (newS > maxScrollY)
+                                       newS = maxScrollY;
+
+                               if (newS == scrollY)
+                                       return;
+
+                               scrollY = newS;
+
+                               NotifyValueChanged ("ScrollY", scrollY);
+                               RegisterForGraphicUpdate ();
+                       }
+               }
+               /// <summary> Horizontal Scrolling maximum value </summary>
+               [DefaultValue(0)]
+               public virtual int MaxScrollX {
+                       get { return maxScrollX; }
+                       set {
+                               if (maxScrollX == value)
+                                       return;
+
+                               maxScrollX = value;
+
+                               if (scrollX > maxScrollX)
+                                       ScrollX = maxScrollX;
+                               
+                               NotifyValueChanged ("MaxScrollX", maxScrollX);
+                               RegisterForGraphicUpdate ();
+                       }
+               }
+               /// <summary> Vertical Scrolling maximum value </summary>
+               [DefaultValue(0)]
+               public virtual int MaxScrollY {
+                       get { return maxScrollY; }
+                       set {
+                               if (maxScrollY == value)
+                                       return;
+
+                               maxScrollY = value;
+
+                               if (scrollY > maxScrollY)
+                                       ScrollY = maxScrollY;
+
+                               NotifyValueChanged ("MaxScrollY", maxScrollY);
+                               RegisterForGraphicUpdate ();
+                       }
+               }
+               /// <summary> Mouse Wheel Scrolling multiplier </summary>
+               [DefaultValue(1)]
+               public virtual int MouseWheelSpeed {
+                       get { return mouseWheelSpeed; }
+                       set {
+                               if (mouseWheelSpeed == value)
+                                       return;
+                               
+                               mouseWheelSpeed = value;
+
+                               NotifyValueChanged ("MouseWheelSpeed", mouseWheelSpeed);
+                       }
+               }
+
+               /// <summary> Process scrolling vertically, or if shift is down, vertically </summary>
+               public override void onMouseWheel (object sender, MouseWheelEventArgs e)
+               {
+                       base.onMouseWheel (sender, e);
+                       if (IFace.Keyboard.Shift)
+                               ScrollX += e.Delta * MouseWheelSpeed;
+                       else
+                               ScrollY -= e.Delta * MouseWheelSpeed;
+               }
+               /// <summary> Process scrolling with arrow keys, home and end keys. </summary>
+               public override void onKeyDown (object sender, KeyEventArgs e)
+               {
+                       base.onKeyDown (sender, e);
+
+                       if (KeyEventsOverrides)
+                               return;
+
+                       switch (e.Key) {
+                       case Key.Up:
+                               ScrollY--;
+                               break;
+                       case Key.Down:
+                               ScrollY++;
+                               break;
+                       case Key.Left:
+                               ScrollX--;
+                               break;
+                       case Key.Right:
+                               ScrollX++;
+                               break;
+                       case Key.Home:
+                               ScrollX = 0;
+                               ScrollY = 0;
+                               break;
+                       case Key.End:
+                               ScrollX = MaxScrollX;
+                               ScrollY = MaxScrollY;
+                               break;
+                       }
+               }
+       }
+}
+
diff --git a/Crow/src/GraphicObjects/Shape.cs b/Crow/src/GraphicObjects/Shape.cs
new file mode 100644 (file)
index 0000000..aa39731
--- /dev/null
@@ -0,0 +1,196 @@
+//
+// Shape.cs
+//
+// Author:
+//       jp <>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+using System;
+using System.Xml.Serialization;
+using System.ComponentModel;
+using System.IO;
+using System.Text;
+using Cairo;
+
+namespace Crow
+{
+       public class PathParser : StringReader
+       {
+               public PathParser (string str) : base (str) {}
+
+               public double ReadDouble () {
+                       StringBuilder tmp = new StringBuilder();
+
+                       while (Peek () >= 0) {                          
+                               char c = (char)Read();
+                               if (c.IsWhiteSpaceOrNewLine()) {
+                                       if (tmp.Length == 0)
+                                               continue;
+                                       else
+                                               break;
+                               } else if (c == ',')
+                                       break;                          
+                               tmp.Append (c);
+                       }
+                       return double.Parse (tmp.ToString ());
+               }
+               
+       }
+       public class Shape : GraphicObject
+       {
+               #region CTOR
+               protected Shape () : base() {}
+               public Shape (Interface iface) : base (iface) {}
+               #endregion
+
+               string path;
+               double strokeWidth;
+        Size size;
+
+               public string Path {
+                       get { return path; }
+                       set {
+                               if (path == value)
+                                       return;
+                               path = value;
+                               contentSize = default (Size);
+                               NotifyValueChanged ("Path", path);
+                               RegisterForGraphicUpdate ();
+                       }
+               }
+               [DefaultValue(1.0)]
+               public double StokeWidth {
+                       get { return strokeWidth; }
+                       set {
+                               if (strokeWidth == value)
+                                       return;
+                               strokeWidth = value;
+                               contentSize = default (Size);
+                               NotifyValueChanged ("StrokeWidth", strokeWidth);
+                               RegisterForGraphicUpdate ();
+                       }
+               }
+        [DefaultValue("0,0")]
+        public Size Size
+        {
+            get { return size; }
+            set
+            {
+                if (size == value)
+                    return;
+                size = value;
+                contentSize = default(Size);
+                NotifyValueChanged("Size", size);
+                RegisterForLayouting(LayoutingType.Sizing);
+            }
+        }
+        protected override void onDraw(Context gr)
+        {
+
+            if (string.IsNullOrEmpty(path))
+                return;
+
+            gr.Save();
+
+            Rectangle r = ClientRectangle;
+
+
+            double sx = (double)r.Width / (double)(contentSize.Width == 0? size.Width : contentSize.Width);
+            double sy = (double)r.Height / (double)(contentSize.Height == 0 ? size.Height : contentSize.Height);            
+
+            gr.Translate(r.Left, r.Top);
+            gr.Scale (sx,sy);
+
+
+                       executePath (gr);
+
+                       Background.SetAsSource (gr, r);
+                       gr.FillPreserve ();
+                       gr.LineWidth = strokeWidth;
+                       Foreground.SetAsSource (gr, r);
+                       gr.Stroke ();
+            gr.Restore();
+               }
+
+               void executePath (Context gr){
+                       using (PathParser sr = new PathParser (path)) {
+                               while (sr.Peek () >= 0) {
+                                       char c = (char)sr.Read ();
+                                       if (c.IsWhiteSpaceOrNewLine ())
+                                               continue;
+                                       switch (c) {
+                                       case 'M':                                               
+                                               gr.MoveTo (sr.ReadDouble (), sr.ReadDouble ());
+                                               break;
+                                       case 'm':
+                                               gr.RelMoveTo (sr.ReadDouble (), sr.ReadDouble ());
+                                               break;
+                                       case 'L':
+                                               gr.LineTo (sr.ReadDouble (), sr.ReadDouble ());
+                                               break;
+                                       case 'l':
+                                               gr.RelLineTo (sr.ReadDouble (), sr.ReadDouble ());
+                                               break;
+                                       case 'C':
+                                               gr.CurveTo (sr.ReadDouble (), sr.ReadDouble (), sr.ReadDouble (), sr.ReadDouble (), sr.ReadDouble (), sr.ReadDouble ());
+                                               break;
+                                       case 'c':
+                                               gr.RelCurveTo (sr.ReadDouble (), sr.ReadDouble (), sr.ReadDouble (), sr.ReadDouble (), sr.ReadDouble (), sr.ReadDouble ());
+                                               break;
+                                       case 'Z':
+                                               gr.ClosePath ();
+                                               break;
+                                       case 'F':
+                                               gr.Fill ();
+                                               break;
+                                       case 'G':
+                                               gr.Stroke ();
+                                               break;
+                                       default:
+                                               throw new Exception ("Invalid character in path string of Shape control");
+                                       }
+                               }
+                       }
+               }
+               protected override int measureRawSize (LayoutingType lt)
+               {
+                       if ((lt == LayoutingType.Width && contentSize.Width == 0) || (lt == LayoutingType.Height && contentSize.Height == 0)) {
+                if (size != default(Size))
+                    contentSize = size;
+                else
+                {
+                    using (Surface drawing = new ImageSurface(Format.A1, 1, 1))
+                    {
+                        using (Context ctx = new Context(drawing))
+                        {
+                            executePath(ctx);
+                            Rectangle r = ctx.StrokeExtents();
+                            contentSize = new Size(r.Right, r.Bottom);
+                        }
+                    }
+                }
+                       }
+                       return lt == LayoutingType.Width ?
+                               contentSize.Width + 2 * Margin: contentSize.Height + 2 * Margin;
+               }
+       }
+}
+
diff --git a/Crow/src/GraphicObjects/Slider.cs b/Crow/src/GraphicObjects/Slider.cs
new file mode 100644 (file)
index 0000000..d76d637
--- /dev/null
@@ -0,0 +1,258 @@
+//
+// Slider.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using Cairo;
+using System.Xml.Serialization;
+using System.ComponentModel;
+using System.Diagnostics;
+
+namespace Crow
+{
+       /// <summary>
+       /// templated numeric control to select a value
+       /// by slidding a cursor
+       /// </summary>
+       public class Slider : NumericControl
+    {
+               #region CTOR
+               protected Slider() : base(){}
+               public Slider(Interface iface) : base(iface)
+               {}
+//             public Slider(double minimum, double maximum, double step)
+//                     : base(minimum,maximum,step)
+//             {
+//             }
+               #endregion
+
+               #region implemented abstract members of TemplatedControl
+
+               protected override void loadTemplate (GraphicObject template = null)
+               {
+                       
+               }
+
+               #endregion
+
+               #region private fields
+        Rectangle cursor;
+               int _cursorSize;
+               Fill _cursorColor;
+               Orientation _orientation;
+               bool holdCursor = false;
+               #endregion
+
+               protected double unity;
+
+               #region Public properties
+               [DefaultValue("vgradient|0:White|0,1:LightGrey|0,9:LightGrey|1:DimGrey")]
+               public virtual Fill CursorColor {
+                       get { return _cursorColor; }
+                       set {
+                               if (_cursorColor == value)
+                                       return;
+                               _cursorColor = value;
+                               RegisterForRedraw ();
+                               NotifyValueChanged ("CursorColor", _cursorColor);
+                       }
+               }
+               [DefaultValue(20)]
+               public virtual int CursorSize {
+                       get { return _cursorSize; }
+                       set {
+                               if (_cursorSize == value || value < 8)
+                                       return;
+                               _cursorSize = value;
+                               RegisterForGraphicUpdate ();
+                               NotifyValueChanged ("CursorSize", _cursorSize);
+                       }
+               }
+               [DefaultValue(Orientation.Horizontal)]
+               public virtual Orientation Orientation
+               {
+                       get { return _orientation; }
+                       set { 
+                               if (_orientation == value)
+                                       return;
+                               _orientation = value; 
+
+                               RegisterForLayouting (LayoutingType.All);
+                               NotifyValueChanged ("Orientation", _orientation);
+                       }
+               }
+               #endregion
+
+               [DefaultValue(10.0)]
+               public override double Maximum {
+                       get { return base.Maximum; }
+                       set {                           
+                               if (value == base.Maximum)
+                                       return;
+                               base.Maximum = value;
+                               LargeIncrement = base.Maximum / 10.0;
+                               SmallIncrement = LargeIncrement / 5.0;
+                       }
+               }
+
+               #region GraphicObject Overrides
+               protected override void onDraw (Context gr)
+               {
+                       base.onDraw (gr);
+
+                       if (Maximum <= 0)
+                               return;
+
+                       computeCursorPosition ();
+
+                       Rectangle r = ClientRectangle;
+                       PointD pStart;
+                       PointD pEnd;
+                       if (_orientation == Orientation.Horizontal) {
+                               pStart = r.TopLeft + new Point (_cursorSize / 2, r.Height / 2);
+                               pEnd = r.TopRight + new Point (-_cursorSize / 2, r.Height / 2);
+                               pStart.Y += 0.5;
+                               pEnd.Y += 0.5;
+                       } else {
+                               pStart = r.TopLeft + new Point (r.Width / 2, _cursorSize / 2);
+                               pEnd = r.BottomLeft + new Point (r.Width / 2,- _cursorSize / 2);
+                               pStart.X += 0.5;
+                               pEnd.X += 0.5;
+
+                       }
+
+            Background.SetAsSource(gr, r);
+            gr.Rectangle (r);
+            gr.Fill ();
+
+                       DrawGraduations (gr, pStart,pEnd);
+
+                       DrawCursor (gr, cursor);
+               }
+               #endregion
+
+               protected virtual void DrawGraduations(Context gr, PointD pStart, PointD pEnd)
+               {
+                       Foreground.SetAsSource (gr);
+
+                       gr.LineWidth = 1;
+                       gr.MoveTo(pStart);
+                       gr.LineTo(pEnd);
+
+                       gr.Stroke();
+
+               }
+               protected virtual void DrawCursor(Context gr, Rectangle _cursor)
+               {
+                       CairoHelpers.CairoRectangle (gr, _cursor, CornerRadius);
+            Foreground.SetAsSource(gr, _cursor);
+            gr.StrokePreserve();
+            CursorColor.SetAsSource(gr, _cursor);
+            gr.Fill();
+               }
+
+        void computeCursorPosition()
+        {            
+            Rectangle r = ClientRectangle;
+                       PointD p1; 
+
+                       if (_orientation == Orientation.Horizontal) {
+                               cursor = new Rectangle (new Size (_cursorSize, (int)(r.Height)));
+                               p1 = r.TopLeft + new Point (_cursorSize / 2, r.Height / 2);
+                               unity = (double)(r.Width - _cursorSize) / (Maximum - Minimum);
+                               cursor.TopLeft = new Point (r.Left + (int)((Value - Minimum) * unity),
+                                       (int)(p1.Y - cursor.Height / 2));
+                       } else {
+                               cursor = new Rectangle (new Size ((int)(r.Width), _cursorSize));
+                               p1 = r.TopLeft + new Point (r.Width / 2, _cursorSize / 2);
+                               unity = (double)(r.Height - _cursorSize) / (Maximum - Minimum);
+                               cursor.TopLeft = new Point ((int)(p1.X - r.Width / 2),
+                                       r.Top + (int)((Value - Minimum) * unity));                              
+                       }
+                       //cursor.Inflate (-1);
+        }
+               Point mouseDownInit;
+               double mouseDownInitValue;
+
+               #region mouse handling
+               public override void onMouseDown (object sender, MouseButtonEventArgs e)
+               {
+                       base.onMouseDown (sender, e);
+                       mouseDownInit = ScreenPointToLocal (e.Position);
+                       mouseDownInitValue = Value;
+                       Rectangle cursInScreenCoord = ScreenCoordinates (cursor + Slot.Position);
+                       if (cursInScreenCoord.ContainsOrIsEqual (e.Position)){
+//                             Rectangle r = ClientRectangle;
+//                             if (r.Width - _cursorSize > 0) {
+//                                     double unit = (Maximum - Minimum) / (double)(r.Width - _cursorSize);
+//                                     mouseDownInit += new Point ((int)(Value / unit), (int)(Value / unit));
+//                             }
+                               holdCursor = true;
+                       }else if (_orientation == Orientation.Horizontal) {
+                               if (e.Position.X < cursInScreenCoord.Left)
+                                       Value -= LargeIncrement;
+                               else
+                                       Value += LargeIncrement;
+                       } else {
+                               if (e.Position.Y < cursInScreenCoord.Top)
+                                       Value -= LargeIncrement;
+                               else
+                                       Value += LargeIncrement;
+                       }
+               }
+               public override void onMouseUp (object sender,MouseButtonEventArgs e)
+               {
+                       base.onMouseUp (sender, e);
+
+                       holdCursor = false;
+               }
+               public override void onMouseMove (object sender, MouseMoveEventArgs e)
+               {
+                       if (holdCursor) {                               
+                               Point m = ScreenPointToLocal (e.Position) - mouseDownInit;
+                               Rectangle r = ClientRectangle;
+
+                               if (_orientation == Orientation.Horizontal) {
+                                       if (r.Width - _cursorSize == 0)
+                                               return;                                 
+                                       double unit = (Maximum - Minimum) / (double)(r.Width - _cursorSize);
+                                       double tmp = mouseDownInitValue + (double)m.X * unit;
+                                       tmp -= tmp % SmallIncrement;
+                                       Value = tmp;
+                               } else {
+                                       if (r.Height - _cursorSize == 0)
+                                               return;                                 
+                                       double unit = (Maximum - Minimum) / (double)(r.Height - _cursorSize);
+                                       double tmp = mouseDownInitValue + (double)m.Y * unit;
+                                       tmp -= tmp % SmallIncrement;
+                                       Value = tmp;
+                               }
+                       }
+                       
+                       base.onMouseMove (sender, e);
+               }
+               #endregion
+    }
+}
diff --git a/Crow/src/GraphicObjects/Spinner.cs b/Crow/src/GraphicObjects/Spinner.cs
new file mode 100644 (file)
index 0000000..7c5fdb2
--- /dev/null
@@ -0,0 +1,55 @@
+//
+// Spinner.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+
+namespace Crow
+{
+       /// <summary>
+       /// templated control for selecting a numeric value by clicking on
+       /// up and down buttons
+       /// </summary>
+       public class Spinner : NumericControl
+       {
+               #region CTOR
+               protected Spinner() : base(){}
+               public Spinner (Interface iface) : base(iface)
+               {
+               }
+               #endregion
+
+               void onUp (object sender, MouseButtonEventArgs e)
+               {
+                       Value += this.SmallIncrement;
+               }
+               void onDown (object sender, MouseButtonEventArgs e)
+               {
+                       Value -= this.SmallIncrement;
+               }
+
+       }
+}
+
diff --git a/Crow/src/GraphicObjects/Splitter.cs b/Crow/src/GraphicObjects/Splitter.cs
new file mode 100644 (file)
index 0000000..8fb7bb7
--- /dev/null
@@ -0,0 +1,237 @@
+//
+// Splitter.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.Xml.Serialization;
+using System.ComponentModel;
+
+namespace Crow
+{
+       /// <summary>
+       /// control to add between children of a Stack to allow them to be resized
+       /// with the pointer
+       /// </summary>
+       public class Splitter : GraphicObject
+       {
+               #region CTOR
+               protected Splitter() : base(){}
+               public Splitter (Interface iface) : base(iface){}
+               #endregion
+
+               int thickness;
+
+               [DefaultValue(1)]
+               public virtual int Thickness {
+                       get { return thickness; }
+                       set {
+                               if (thickness == value)
+                                       return;
+                               thickness = value; 
+                               NotifyValueChanged ("Thickness", thickness);
+                               RegisterForLayouting (LayoutingType.Sizing);
+                               RegisterForGraphicUpdate ();
+                       }
+               }
+
+               Unit u1, u2;
+               int init1 = -1, init2 = -1, delta = 0, min1, min2, max1 , max2;
+               GraphicObject go1 = null, go2 = null;
+
+               void initSplit(Measure m1, int size1, Measure m2, int size2){
+                       if (m1 != Measure.Stretched) {
+                               init1 = size1;
+                               u1 = m1.Units;
+                       }
+                       if (m2 != Measure.Stretched) {
+                               init2 = size2;
+                               u2 = m2.Units;
+                       }
+               }
+               void convertSizeInPix(GraphicObject g1){
+
+               }
+
+               #region GraphicObject override
+               public override ILayoutable Parent {
+                       get { return base.Parent; }
+                       set {
+                               if (value != null) {                    
+                                       GenericStack gs = value as GenericStack;
+                                       if (gs == null)
+                                               throw new Exception ("Splitter may only be chil of stack");
+                                       
+                               }
+                               base.Parent = value;
+                       }
+               }
+               public override void onMouseEnter (object sender, MouseMoveEventArgs e)
+               {
+                       base.onMouseEnter (sender, e);
+                       if ((Parent as GenericStack).Orientation == Orientation.Horizontal)
+                               IFace.MouseCursor = XCursor.H;
+                       else
+                               IFace.MouseCursor = XCursor.V;
+               }
+               public override void onMouseLeave (object sender, MouseMoveEventArgs e)
+               {
+                       base.onMouseLeave (sender, e);
+                       IFace.MouseCursor = XCursor.Default;
+               }
+               public override void onMouseDown (object sender, MouseButtonEventArgs e)
+               {
+                       base.onMouseDown (sender, e);
+                       go1 = go2 = null;
+                       init1 = init2 = -1;
+                       delta = 0;
+
+                       GenericStack gs = Parent as GenericStack;
+                       int ptrSplit = gs.Children.IndexOf (this);
+                       if (ptrSplit == 0 || ptrSplit == gs.Children.Count - 1)
+                               return;
+
+                       go1 = gs.Children [ptrSplit - 1];
+                       go2 = gs.Children [ptrSplit + 1];
+
+                       if (gs.Orientation == Orientation.Horizontal) {
+                               initSplit (go1.Width, go1.Slot.Width, go2.Width, go2.Slot.Width);
+                               min1 = go1.MinimumSize.Width;
+                               min2 = go2.MinimumSize.Width;
+                               max1 = go1.MaximumSize.Width;
+                               max2 = go2.MaximumSize.Width;
+                               if (init1 >= 0)
+                                       go1.Width = init1;
+                               if (init2 >= 0)
+                                       go2.Width = init2;
+                       } else {
+                               initSplit (go1.Height, go1.Slot.Height, go2.Height, go2.Slot.Height);
+                               min1 = go1.MinimumSize.Height;
+                               min2 = go2.MinimumSize.Height;
+                               max1 = go1.MaximumSize.Height;
+                               max2 = go2.MaximumSize.Height;
+                               if (init1 >= 0)
+                                       go1.Height = init1;
+                               if (init2 >= 0)
+                                       go2.Height = init2;
+                       }
+               }
+               public override void onMouseMove (object sender, MouseMoveEventArgs e)
+               {
+                       base.onMouseMove (sender, e);
+
+                       if (!IsActive || go1 == null || go2 == null)
+                               return;
+
+                       GenericStack gs = Parent as GenericStack;
+                       int newDelta = delta, size1 = init1 , size2 = init2;
+                       if (gs.Orientation == Orientation.Horizontal) {
+                               newDelta -= e.XDelta;
+                               if (size1 < 0)
+                                       size1 = go1.Slot.Width + delta;
+                               if (size2 < 0)
+                                       size2 = go2.Slot.Width - delta;
+                       } else {
+                               newDelta -= e.YDelta;
+                               if (size1 < 0)
+                                       size1 = go1.Slot.Height + delta;
+                               if (size2 < 0)
+                                       size2 = go2.Slot.Height - delta;
+                       }
+
+                       if (size1 - newDelta < min1 || (max1 > 0 && size1 - newDelta > max1) ||
+                               size2 + newDelta < min2 || (max2 > 0 && size2 + newDelta > max2))
+                               return;
+
+                       delta = newDelta;
+
+                       if (gs.Orientation == Orientation.Horizontal) {
+                               if (init1 >= 0)
+                                       go1.Width = init1 - delta;
+                               if (init2 >= 0)
+                                       go2.Width = init2 + delta;
+                       } else {
+                               if (init1 >= 0)
+                                       go1.Height = init1 - delta;
+                               if (init2 >= 0)
+                                       go2.Height = init2 + delta;
+                       }
+               }
+               public override void onMouseUp (object sender, MouseButtonEventArgs e)
+               {
+                       base.onMouseUp (sender, e);
+
+                       GenericStack gs = Parent as GenericStack;
+
+                       if (init1 >= 0 && u1 == Unit.Percent) {
+                               if (gs.Orientation == Orientation.Horizontal)
+                                       go1.Width = new Measure ((int)Math.Ceiling (
+                                               go1.Width.Value * 100.0 / (double)gs.Slot.Width), Unit.Percent);
+                               else
+                                       go1.Height = new Measure ((int)Math.Ceiling (
+                                               go1.Height.Value * 100.0 / (double)gs.Slot.Height), Unit.Percent);
+                       }
+                       if (init2 >= 0 && u2 == Unit.Percent) {
+                               if (gs.Orientation == Orientation.Horizontal)
+                                       go2.Width = new Measure ((int)Math.Floor (
+                                               go2.Width.Value * 100.0 / (double)gs.Slot.Width), Unit.Percent);
+                               else
+                                       go2.Height = new Measure ((int)Math.Floor (
+                                               go2.Height.Value * 100.0 / (double)gs.Slot.Height), Unit.Percent);
+                       }
+               }
+               public override bool UpdateLayout (LayoutingType layoutType)
+               {
+                       GenericStack gs = Parent as GenericStack;
+                       if (layoutType == LayoutingType.Width){
+                               if (gs.Orientation == Orientation.Horizontal)
+                                       Width = thickness;
+                               else
+                                       Width = Measure.Stretched;
+                       } else if (layoutType == LayoutingType.Height){
+                               if (gs.Orientation == Orientation.Vertical)
+                                       Height = thickness;
+                               else
+                                       Height = Measure.Stretched;
+                       }
+                       return base.UpdateLayout (layoutType);
+               }
+               public override bool PointIsIn (ref Point m)
+               {
+                       if (!(Visible & IsEnabled)||IsDragged)
+                               return false;
+                       if (!Parent.PointIsIn(ref m))
+                               return false;
+                       m -= (Parent.getSlot().Position + Parent.ClientRectangle.Position) ;
+                       Rectangle r = Slot;
+                       if (Width == Measure.Stretched)
+                               r.Inflate (0, 5);
+                       else
+                               r.Inflate (5, 0);
+                       return r.ContainsOrIsEqual (m); 
+               }
+               #endregion
+       }
+}
+
diff --git a/Crow/src/GraphicObjects/TabItem.cs b/Crow/src/GraphicObjects/TabItem.cs
new file mode 100644 (file)
index 0000000..f92c1d7
--- /dev/null
@@ -0,0 +1,336 @@
+//
+// TabItem.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.Xml.Serialization;
+using System.ComponentModel;
+using System.Diagnostics;
+using Cairo;
+using System.Linq;
+
+namespace Crow
+{
+       public class TabItem : TemplatedContainer
+       {
+               #region CTOR
+               protected TabItem() : base(){}
+               public TabItem (Interface iface) : base(iface){}
+               #endregion
+
+               public event EventHandler QueryClose;
+
+               internal TabView tview = null;
+
+               #region Private fields
+               GraphicObject titleWidget;
+               int tabOffset;
+               bool isSelected;
+               Measure tabThickness;
+               Fill selectedBackground = Color.Transparent;
+               #endregion
+
+               #region TemplatedControl overrides
+               public override GraphicObject Content {
+                       get {
+                               return _contentContainer == null ? null : _contentContainer.Child;
+                       }
+                       set {
+                               if (Content != null) {
+                                       Content.LogicalParent = null;
+                                       _contentContainer.SetChild (null);
+                               }
+                               _contentContainer.SetChild(value);
+                               if (value != null)
+                                       value.LogicalParent = this;
+                       }
+               }
+               protected override void loadTemplate(GraphicObject template = null)
+               {
+                       base.loadTemplate (template);
+
+                       titleWidget = this.child.FindByName ("TabTitle");
+               }
+               internal GraphicObject TabTitle { get { return titleWidget; }}
+               #endregion
+
+               /// <summary>
+               /// order of redrawing, items can't be reordered in TemplatedGroup due to data linked, so we need another index
+               /// instead of children list order
+               /// </summary>
+               public int viewIndex = 0;
+               public virtual int ViewIndex {
+                       get { return viewIndex; }
+                       set {
+                               if (viewIndex == value)
+                                       return;
+                               viewIndex = value;
+                               NotifyValueChanged ("ViewIndex", viewIndex);
+                       }
+               }
+                       
+               [DefaultValue(0)]
+               public int TabOffset {
+                       get { return tabOffset; }
+                       set {
+                               if (tabOffset == value)
+                                       return;
+                               tabOffset = value;
+                               NotifyValueChanged ("TabOffset", tabOffset);
+
+                               RegisterForLayouting (LayoutingType.X);
+                               RegisterForGraphicUpdate ();
+                       }
+               }
+               public Measure TabHeight {
+                       get { return tview == null ? Measure.Fit : tview.TabHeight; }
+               }
+               public Measure TabWidth {
+                       get { return tview == null ? Measure.Fit : tview.TabWidth; }
+               }
+               [DefaultValue(false)]
+               public virtual bool IsSelected {
+                       get { return isSelected; }
+                       set {
+                               if (isSelected == value)
+                                       return;
+
+                               if (tview != null)
+                                       tview.SelectedTab = tview.Children.IndexOf(this);
+                               
+                               isSelected = value;
+                               NotifyValueChanged ("IsSelected", isSelected);
+                               RegisterForRedraw ();
+                       }
+               }
+
+               /// <summary>
+               /// background fill of the control, maybe solid color, gradient, image, or svg
+               /// </summary>
+               [DesignCategory ("Appearance")][DefaultValue("DimGrey")]
+               public virtual Fill SelectedBackground {
+                       get { return selectedBackground; }
+                       set {
+                               if (selectedBackground == value)
+                                       return;                         
+                               if (value == null)
+                                       return;
+                               selectedBackground = value;
+                               NotifyValueChanged ("SelectedBackground", selectedBackground);
+                               RegisterForRedraw ();
+                       }
+               }
+               protected override void onDraw (Context gr)
+               {
+                       gr.Save ();
+
+                       TabView tv = Parent as TabView;
+
+                       Rectangle r = TabTitle.Slot;
+                       r.Width = TabWidth;
+
+                       gr.MoveTo (0.5, r.Bottom-0.5);
+                       gr.LineTo (r.Left - tv.LeftSlope, r.Bottom-0.5);
+                       gr.CurveTo (
+                               r.Left - tv.LeftSlope / 2, r.Bottom-0.5,
+                               r.Left - tv.LeftSlope / 2, 0.5,
+                               r.Left, 0.5);
+                       gr.LineTo (r.Right, 0.5);
+                       gr.CurveTo (
+                               r.Right + tv.RightSlope / 2, 0.5,
+                               r.Right + tv.RightSlope / 2, r.Bottom-0.5,
+                               r.Right + tv.RightSlope, r.Bottom-0.5);
+                       gr.LineTo (Slot.Width-0.5, r.Bottom-0.5);
+
+
+                       gr.LineTo (Slot.Width-0.5, Slot.Height-0.5);
+                       gr.LineTo (0.5, Slot.Height-0.5);
+                       gr.ClosePath ();
+                       gr.LineWidth = 1;
+                       Foreground.SetAsSource (gr);
+                       gr.StrokePreserve ();
+                       gr.ClipPreserve ();
+
+                       if (IsSelected)
+                               SelectedBackground.SetAsSource (gr, ClientRectangle);
+                       else
+                               Background.SetAsSource (gr, ClientRectangle);
+
+                       gr.Fill ();
+
+                       base.onDraw (gr);
+
+                       gr.Restore ();
+               }
+
+               Point dragStartPoint;
+               int dragThreshold = 16;
+               int dis = 128;
+               internal TabView savedParent = null;
+
+
+               void makeFloating (TabView tv) {                        
+                       lock (IFace.UpdateMutex) {                              
+                               ImageSurface di = new ImageSurface (Format.Argb32, dis, dis);
+                               IFace.DragImageHeight = dis;
+                               IFace.DragImageWidth = dis;
+                               using (Context ctx = new Context (di)) {
+                                       double div = Math.Max (LastPaintedSlot.Width, LastPaintedSlot.Height);
+                                       double s = (double)dis / div;
+                                       ctx.Scale (s, s);
+                                       if (bmp == null)
+                                               this.onDraw (ctx);
+                                       else {
+                                               if (LastPaintedSlot.Width>LastPaintedSlot.Height)
+                                                       ctx.SetSourceSurface (bmp, 0, (LastPaintedSlot.Width-LastPaintedSlot.Height)/2);
+                                               else
+                                                       ctx.SetSourceSurface (bmp, (LastPaintedSlot.Height-LastPaintedSlot.Width)/2, 0);
+
+                                               ctx.Paint ();
+                                       }
+                               }
+                               IFace.DragImage = di;
+                       }
+                       tv.RemoveChild (this);
+                       savedParent = tv;
+               }
+
+               public override ILayoutable Parent {
+                       get {
+                               return base.Parent;
+                       }
+                       set {
+                               base.Parent = value;
+                               if (value != null) {
+                                       dragStartPoint = IFace.Mouse.Position;
+                                       savedParent = value as TabView;
+                               }
+                       }
+               }
+               protected override void onStartDrag (object sender, DragDropEventArgs e)
+               {
+                       base.onStartDrag (sender, e);
+
+                       dragStartPoint = IFace.Mouse.Position;
+               }
+               protected override void onEndDrag (object sender, DragDropEventArgs e)
+               {
+                       base.onEndDrag (sender, e);
+
+                       if (Parent != null)
+                               return;
+
+                       savedParent.AddChild (this);
+
+                       IFace.ClearDragImage ();
+               }
+               protected override void onDrop (object sender, DragDropEventArgs e)
+               {
+                       base.onDrop (sender, e);
+                       if (Parent != null)
+                               return;
+                       TabView tv = e.DropTarget as TabView;
+                       if (tv == null)
+                               return;
+
+                       IFace.ClearDragImage ();
+
+                       tv.AddChild (this);
+               }
+               #region Mouse Handling
+               public override bool PointIsIn (ref Point m)
+               {
+                       if (!base.PointIsIn (ref m))
+                               return false;
+                       if (tview == null)//double check this, just added to prevent exception
+                               return false;
+                       if (m.Y < tview.TabHeight)
+                               return TabTitle.Slot.ContainsOrIsEqual (m);
+                       else
+                               return this.isSelected;
+               }
+               public override void onMouseUp (object sender, MouseButtonEventArgs e)
+               {
+                       base.onMouseUp (sender, e);
+                       tview?.UpdateLayout (LayoutingType.ArrangeChildren);
+               }
+               public override void onMouseMove (object sender, MouseMoveEventArgs e)
+               {
+                       base.onMouseMove (sender, e);
+
+                       if (Parent == null)
+                               return;
+                       
+                       if (!IsDragged)
+                               return;
+
+                       TabView tv = Parent as TabView;
+                       if (Math.Abs (e.Position.Y - dragStartPoint.Y) > dragThreshold ||
+                               Math.Abs (e.Position.X - dragStartPoint.X) > dragThreshold) {
+                               makeFloating (tv);
+                               return;
+                       }
+
+                       Rectangle cb = ClientRectangle;
+
+                       int tmp = TabOffset + e.XDelta;
+                       if (tmp < tview.LeftSlope) {                            
+                               TabOffset = tview.LeftSlope;
+                       } else if (tmp > cb.Width - tv.RightSlope - tv.TabWidth) {
+                               TabOffset = cb.Width - tv.RightSlope - tv.TabWidth;
+                       }else{
+                               dragStartPoint.X = e.Position.X;
+                               TabItem[] tabItms = tv.Children.Cast<TabItem>().OrderBy (t=>t.ViewIndex).ToArray();
+                               if (ViewIndex > 0 && e.XDelta < 0) {
+                                       TabItem previous = tabItms [ViewIndex - 1];
+                                       if (tmp < previous.TabOffset + tview.TabWidth / 2) {
+                                               previous.ViewIndex = ViewIndex;
+                                               ViewIndex--;
+                                               tv.UpdateLayout (LayoutingType.ArrangeChildren);
+                                       }
+
+                               }else if (ViewIndex < tabItms.Length - 1 && e.XDelta > 0) {
+                                       TabItem next = tabItms [ViewIndex + 1];
+                                       if (tmp > next.TabOffset - tview.TabWidth / 2){
+                                               next.ViewIndex = ViewIndex;
+                                               ViewIndex++;
+                                               tv.UpdateLayout (LayoutingType.ArrangeChildren);
+                                       }
+                               }
+                               TabOffset = tmp;
+                       }
+               }
+               public void butCloseTabClick (object sender, MouseButtonEventArgs e){                   
+                       QueryClose.Raise (this, null);
+                       //if tab is used as a templated item root in a templatedGroup, local datasource
+                       //is not null, in this case, removing the data entries will delete automatically the item
+                       if (localDataSourceIsNull)
+                               (Parent as TabView)?.DeleteChild (this);
+               }
+               #endregion
+
+       }
+}
+
diff --git a/Crow/src/GraphicObjects/TabView.cs b/Crow/src/GraphicObjects/TabView.cs
new file mode 100644 (file)
index 0000000..304e820
--- /dev/null
@@ -0,0 +1,337 @@
+//
+// TabView.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.Xml.Serialization;
+using System.ComponentModel;
+using Cairo;
+using System.Diagnostics;
+using System.Linq;
+
+namespace Crow
+{      
+       public class TabView : Group
+       {
+               #region CTOR
+               public TabView() : base(){}
+               public TabView (Interface iface) : base(iface){}
+               #endregion
+
+               #region Private fields
+               int adjustedTab = -1;
+               int leftSlope;
+               int rightSlope;
+               Measure tabHeight, tabWidth;
+               Orientation _orientation;
+               int selectedTab;
+               #endregion
+
+               #region public properties
+               [DefaultValue(Orientation.Horizontal)]
+               public virtual Orientation Orientation
+               {
+                       get { return _orientation; }
+                       set {
+                               if (_orientation == value)
+                                       return;
+                               _orientation = value;
+                               NotifyValueChanged ("Orientation", _orientation);
+                               if (_orientation == Orientation.Horizontal)
+                                       NotifyValueChanged ("TabOrientation", Orientation.Vertical);
+                               else
+                                       NotifyValueChanged ("TabOrientation", Orientation.Horizontal);                          
+                               this.RegisterForLayouting (LayoutingType.ArrangeChildren);
+                       }
+               }
+               [DefaultValue(16)]
+               public int LeftSlope
+               {
+                       get { return leftSlope; }
+                       set {
+                               if (leftSlope == value)
+                                       return;
+                               leftSlope = value;
+                               NotifyValueChanged ("leftSlope", leftSlope);
+                               tabSizeHasChanged = true;
+                               //RegisterForLayouting (LayoutingType.ArrangeChildren);
+                       }
+               }
+               bool tabSizeHasChanged = false;
+               [DefaultValue(16)]
+               public int RightSlope
+               {
+                       get { return rightSlope; }
+                       set {
+                               if (rightSlope == value)
+                                       return;
+                               rightSlope = value;
+                               NotifyValueChanged ("RightSlope", rightSlope);
+                               tabSizeHasChanged = true;
+                               //RegisterForLayouting (LayoutingType.ArrangeChildren);
+                       }
+               }
+               [DefaultValue("18")]
+               public Measure TabHeight {
+                       get { return tabHeight; }
+                       set {
+                               if (tabHeight == value)
+                                       return;
+                               tabHeight = value;
+                               NotifyValueChanged ("TabHeight", tabHeight);
+//                             childrenRWLock.EnterReadLock ();
+//                             foreach (GraphicObject ti in Children) {
+//                                     ti.NotifyValueChanged ("TabHeight", tabHeight);
+//                             }
+//                             childrenRWLock.ExitReadLock ();
+                               RegisterForLayouting (LayoutingType.ArrangeChildren);
+                       }
+               }
+               [DefaultValue("120")]
+               public Measure TabWidth {
+                       get { return adjustedTab > 0 ? (Measure)adjustedTab : tabWidth; }
+                       set {
+                               if (tabWidth == value)
+                                       return;
+                               tabWidth = value;
+                               NotifyValueChanged ("TabWidth", TabWidth);
+//
+//                             childrenRWLock.EnterReadLock ();
+//                             foreach (GraphicObject ti in Children) { 
+//                                     ti.NotifyValueChanged ("TabWidth", tabWidth);
+//                             }
+//                             childrenRWLock.ExitReadLock ();
+                               RegisterForLayouting (LayoutingType.ArrangeChildren);
+                       }
+               }
+
+               public virtual int SelectedTab {
+                       get { return selectedTab; }
+                       set {
+                               if (value == selectedTab)
+                                       return;
+
+                               if (selectedTab < Children.Count && selectedTab >= 0)
+                                       (Children [selectedTab] as TabItem).IsSelected = false;
+
+                               selectedTab = value;
+
+                               if (selectedTab < Children.Count && selectedTab >= 0)
+                                       (Children [selectedTab] as TabItem).IsSelected = true;
+
+                               NotifyValueChanged ("SelectedTab", selectedTab);
+                               RegisterForRedraw ();
+                       }
+               }
+               #endregion
+
+               public override void AddChild (GraphicObject child)
+               {
+                       TabItem ti = child as TabItem;
+                       if (ti == null)
+                               throw new Exception ("TabView control accept only TabItem as child.");
+
+                       ti.MouseDown += Ti_MouseDown;
+                       ti.TabTitle.LayoutChanged += Ti_TabTitle_LayoutChanged;
+                       ti.tview = this;
+
+                       base.AddChild (child);
+
+                       SelectedTab = ti.ViewIndex = Children.Count - 1;
+                       this.RegisterForLayouting (LayoutingType.ArrangeChildren);
+               }
+               public override void RemoveChild (GraphicObject child)
+               {
+                       TabItem ti = child as TabItem;
+                       if (ti == null)
+                               throw new Exception ("TabView control accept only TabItem as child.");
+
+                       ti.MouseDown -= Ti_MouseDown;
+                       ti.TabTitle.LayoutChanged -= Ti_TabTitle_LayoutChanged;
+                       ti.tview = null;
+
+                       childrenRWLock.EnterReadLock ();
+
+                       TabItem[] tabItms = Children.Cast<TabItem>().OrderBy (t=>t.ViewIndex).ToArray();
+                       int selTabViewIdx = -1;
+
+                       if (SelectedTab < tabItms.Length && SelectedTab >= 0)
+                               selTabViewIdx = (Children [SelectedTab] as TabItem).ViewIndex;
+
+                       for (int i = selTabViewIdx+1; i < tabItms.Length; i++)
+                               tabItms [i].ViewIndex--;
+
+                       if (selTabViewIdx > tabItms.Length - 2)
+                               selTabViewIdx = tabItms.Length - 2;
+
+                       if (selTabViewIdx < 0)
+                               SelectedTab = -1;
+                       else
+                               SelectedTab = Children.IndexOf (tabItms [selTabViewIdx]);
+
+                       childrenRWLock.ExitReadLock ();
+
+                       base.RemoveChild (child);
+               }
+
+               public override bool ArrangeChildren { get { return true; } }
+               public override bool UpdateLayout (LayoutingType layoutType)
+               {
+                       RegisteredLayoutings &= (~layoutType);
+
+                       if (layoutType == LayoutingType.ArrangeChildren && Children.Count > 0) {
+                               Rectangle cb = ClientRectangle;
+
+                               int tabSpace = tabWidth + leftSlope;
+                               int tc = Children.Count (c => c.Visible == true);
+
+                               if (tc > 0)
+                                       tabSpace = Math.Min(tabSpace, (cb.Width-rightSlope) / tc);
+
+                               if (tabSpace < tabWidth + leftSlope)
+                                       adjustedTab = tabSpace - leftSlope;
+                               else
+                                       adjustedTab = -1;
+
+                               //Console.WriteLine ("tabspace: {0} tw:{1}", tabSpace, tabWidth);
+
+                               childrenRWLock.EnterReadLock();
+                               TabItem[] tabItms = Children.Cast<TabItem>().OrderBy (t=>t.ViewIndex).ToArray();
+                               childrenRWLock.ExitReadLock();
+                               int curOffset = leftSlope;
+
+                               for (int i = 0; i < tabItms.Length; i++) {
+                                       if (!tabItms [i].Visible)
+                                               continue;
+                                       tabItms [i].NotifyValueChanged ("TabHeight", tabHeight);
+                                       tabItms [i].NotifyValueChanged ("TabWidth", TabWidth);
+                                       if (!tabItms [i].IsDragged) {
+                                               tabItms [i].TabOffset = curOffset;
+                                               //Console.WriteLine ("offset: {0}=>{1}", tabItms [i].Name, tabItms [i].TabOffset);
+                                       }
+                                       if (Orientation == Orientation.Horizontal) {
+                                               curOffset += tabSpace;
+                                       } else
+                                               curOffset += tabSpace;                                  
+                               }
+
+                               //if no layouting remains in queue for item, registre for redraw
+                               if (RegisteredLayoutings == LayoutingType.None && IsDirty)
+                                       IFace.EnqueueForRepaint (this);
+
+                               return true;
+                       }
+
+                       return base.UpdateLayout(layoutType);
+               }
+               public override void OnLayoutChanges (LayoutingType layoutType)
+               {
+                       if (_orientation == Orientation.Horizontal) {
+                               if (layoutType == LayoutingType.Width)
+                                       RegisterForLayouting (LayoutingType.ArrangeChildren);                           
+                       } else if (layoutType == LayoutingType.Height)
+                               RegisterForLayouting (LayoutingType.ArrangeChildren);                   
+                       
+                       base.OnLayoutChanges (layoutType);
+               }
+
+               protected override void onDraw (Context gr)
+               {
+                       Rectangle rBack = new Rectangle (Slot.Size);
+
+                       Background.SetAsSource (gr, rBack);
+                       CairoHelpers.CairoRectangle(gr,rBack, CornerRadius);
+                       gr.Fill ();
+
+                       gr.Save ();
+
+                       if (ClipToClientRect) {
+                               //clip to client zone
+                               CairoHelpers.CairoRectangle (gr, ClientRectangle, CornerRadius);
+                               gr.Clip ();
+                       }
+
+                       childrenRWLock.EnterReadLock ();
+
+                       TabItem[] tabItms = Children.Where(tt=>tt.Visible).Cast<TabItem> ().
+                               OrderBy (t => t.ViewIndex).ToArray ();
+
+                       int selTabViewIdx = -1;
+                       if (SelectedTab < tabItms.Length && SelectedTab >= 0)
+                               selTabViewIdx = (Children [SelectedTab] as TabItem).ViewIndex;
+
+                       childrenRWLock.ExitReadLock ();
+
+                       int i = 0;
+                       while (i < selTabViewIdx) {
+                               tabItms [i].Paint (ref gr);
+                               i++;
+                       }
+                       i = tabItms.Length - 1;
+                       while (i > selTabViewIdx) {
+                               tabItms [i].Paint (ref gr);
+                               i--;
+                       }
+
+                       if (selTabViewIdx >= 0)
+                               tabItms [selTabViewIdx].Paint (ref gr);
+               
+                       gr.Restore ();
+               }
+
+               protected override void onDragEnter (object sender, DragDropEventArgs e)
+               {
+                       base.onDragEnter (sender, e);
+
+                       TabItem ti = e.DragSource as TabItem;
+                       if (ti == null)
+                               return;
+                       if (ti.Parent != null || ti.savedParent == this)
+                               return;
+
+                       this.AddChild (ti);
+
+                       Point p = ScreenPointToLocal (IFace.Mouse.Position) - Margin;
+
+                       p.X = Math.Max (leftSlope, p.X);
+                       p.X = Math.Min (ClientRectangle.Width - rightSlope - TabWidth, p.X);
+                       ti.TabOffset = p.X;
+
+                       IFace.ClearDragImage ();
+
+               }
+
+               void Ti_TabTitle_LayoutChanged (object sender, LayoutingEventArgs e)
+               {
+                       if (e.LayoutType == LayoutingType.X)                            
+                               RegisterForLayouting (LayoutingType.ArrangeChildren);                   
+               }
+               void Ti_MouseDown (object sender, MouseButtonEventArgs e)
+               {
+                       SelectedTab = Children.IndexOf (sender as GraphicObject);
+               }
+       }
+}
+
diff --git a/Crow/src/GraphicObjects/TemplatedContainer.cs b/Crow/src/GraphicObjects/TemplatedContainer.cs
new file mode 100644 (file)
index 0000000..a779595
--- /dev/null
@@ -0,0 +1,101 @@
+//
+// TemplatedContainer.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.Xml.Serialization;
+using System.Xml;
+using System.Reflection;
+
+namespace Crow
+{
+       /// <summary>
+       /// base class for new containers that will use templates.
+       /// 
+       /// TemplatedControl's **must** provide a widget of the [`Container`](Container) class named **_'Content'_** inside their template tree
+       /// </summary>
+       public class TemplatedContainer : TemplatedControl
+       {
+               #if DESIGN_MODE
+               public override void getIML (System.Xml.XmlDocument doc, System.Xml.XmlNode parentElem)
+               {
+                       if (this.design_isTGItem)
+                               return;
+                       base.getIML (doc, parentElem);
+                       if (!HasContent)
+                               return;
+                       Content.getIML (doc, parentElem.LastChild);
+               }
+               #endif
+
+               #region CTOR
+               protected TemplatedContainer() : base(){}
+               public TemplatedContainer (Interface iface) : base(iface){}
+               #endregion
+
+               protected Container _contentContainer;
+
+               /// <summary>
+               /// Single child of this templated container.
+               /// </summary>
+               public virtual GraphicObject Content {
+                       get {
+                               return _contentContainer == null ? null : _contentContainer.Child;
+                       }
+                       set {
+                               _contentContainer.SetChild(value);
+                               NotifyValueChanged ("HasContent", HasContent);
+                       }
+               }
+               [XmlIgnore]public bool HasContent {
+                       get { return _contentContainer?.Child != null; }
+               }
+               //TODO: move loadTemplate and ResolveBinding in TemplatedContainer
+               protected override void loadTemplate(GraphicObject template = null)
+               {
+                       base.loadTemplate (template);
+                       _contentContainer = this.child.FindByName ("Content") as Container;
+               }
+
+               #region GraphicObject overrides
+               public override GraphicObject FindByName (string nameToFind)
+               {
+                       if (Name == nameToFind)
+                               return this;
+
+                       return Content == null ? null : Content.FindByName (nameToFind);
+               }
+               public override bool Contains (GraphicObject goToFind)
+               {
+                       if (Content == goToFind)
+                               return true;
+                       if (Content?.Contains (goToFind) == true)
+                               return true;
+                       return base.Contains (goToFind);
+               }
+               #endregion
+       }
+}
+
diff --git a/Crow/src/GraphicObjects/TemplatedControl.cs b/Crow/src/GraphicObjects/TemplatedControl.cs
new file mode 100644 (file)
index 0000000..a1a11b2
--- /dev/null
@@ -0,0 +1,158 @@
+//
+// TemplatedControl.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.Xml.Serialization;
+using System.ComponentModel;
+using System.IO;
+using System.Xml;
+using System.Diagnostics;
+using System.Linq;
+using System.Collections.Generic;
+using System.Text;
+using System.Reflection;
+using Cairo;
+
+namespace Crow
+{
+       /// <summary>
+       /// Base class for all templated widget
+       /// </summary>
+       public abstract class TemplatedControl : PrivateContainer
+       {
+               #if DESIGN_MODE
+               public bool design_inlineTemplate = false;
+               public override void getIML (System.Xml.XmlDocument doc, System.Xml.XmlNode parentElem)
+               {
+                       if (this.design_isTGItem)
+                               return;
+                       base.getIML (doc, parentElem);
+                       if (child == null || !design_inlineTemplate)
+                               return;
+                       XmlElement xe = doc.CreateElement("Template");
+                       child.getIML (doc, xe);
+                       parentElem.LastChild.AppendChild (xe);
+               }
+               #endif
+               #region CTOR
+               protected TemplatedControl() : base(){}
+               public TemplatedControl (Interface iface) : base(iface){}
+               #endregion
+
+               string _template;
+               string caption;
+
+               /// <summary>
+               /// Template path
+               /// </summary>
+               //TODO: this property should be renamed 'TemplatePath'
+               [DefaultValue(null)]
+               public string Template {
+                       get { return _template; }
+                       set {
+                               if (Template == value)
+                                       return;
+                               _template = value;
+
+                               if (string.IsNullOrEmpty(_template))
+                                       loadTemplate ();
+                               else
+                                       loadTemplate (IFace.Load (_template));
+                       }
+               }
+               /// <summary>
+               /// a caption being recurrent need in templated widget, it is declared here.
+               /// </summary>
+               [DefaultValue("Templated Control")]
+               public virtual string Caption {
+                       get { return caption; }
+                       set {
+                               if (caption == value)
+                                       return;
+                               caption = value;
+                               NotifyValueChanged ("Caption", caption);
+                       }
+               }
+
+               #region GraphicObject overrides
+
+               public override void Initialize ()
+               {
+                       loadTemplate ();
+                       base.Initialize ();
+               }
+               /// <summary>
+               /// override search method from GraphicObject to prevent
+               /// searching inside template
+               /// </summary>
+               /// <returns>widget identified by name, or null if not found</returns>
+               /// <param name="nameToFind">widget's name to find</param>
+               public override GraphicObject FindByName (string nameToFind)
+               {
+                       //prevent name searching in template
+                       return nameToFind == this.Name ? this : null;
+               }
+               /// <summary>
+               ///onDraw is overrided to prevent default drawing of background, template top container
+               ///may have a binding to root background or a fixed one.
+               ///this allow applying root background to random template's component
+               /// </summary>
+               /// <param name="gr">Backend context</param>
+               protected override void onDraw (Context gr)
+               {
+                       gr.Save ();
+
+                       if (ClipToClientRect) {
+                               //clip to client zone
+                               CairoHelpers.CairoRectangle (gr, ClientRectangle, CornerRadius);
+                               gr.Clip ();
+                       }
+
+                       if (child != null)
+                               child.Paint (ref gr);
+                       gr.Restore ();
+               }
+               #endregion
+
+               /// <summary>
+               /// Loads the template.
+               /// </summary>
+               /// <param name="template">Optional template instance</param>
+               protected virtual void loadTemplate(GraphicObject template = null)
+               {
+                       if (this.child != null)//template change, bindings has to be reset
+                               this.ClearTemplateBinding();
+                       
+                       if (template == null) {
+                               if (!IFace.DefaultTemplates.ContainsKey (this.GetType ().FullName))
+                                       throw new Exception (string.Format ("No default template found for '{0}'", this.GetType ().FullName));
+                               this.SetChild (IFace.Load (IFace.DefaultTemplates[this.GetType ().FullName]));
+                       }else
+                               this.SetChild (template);
+               }
+       }
+}
+
diff --git a/Crow/src/GraphicObjects/TemplatedGroup.cs b/Crow/src/GraphicObjects/TemplatedGroup.cs
new file mode 100644 (file)
index 0000000..dd9afb6
--- /dev/null
@@ -0,0 +1,514 @@
+//
+// TemplatedGroup.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.Xml.Serialization;
+using System.Xml;
+using System.Reflection;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Collections;
+using System.Threading;
+using System.Linq;
+using Crow.IML;
+using System.Diagnostics;
+
+namespace Crow
+{
+       public abstract class TemplatedGroup : TemplatedControl
+       {
+               #if DESIGN_MODE
+               public override void getIML (System.Xml.XmlDocument doc, System.Xml.XmlNode parentElem)
+               {
+                       if (this.design_isTGItem)
+                               return;
+                       base.getIML (doc, parentElem);
+
+                       if (string.IsNullOrEmpty(_itemTemplate)) {
+                               foreach (ItemTemplate it in ItemTemplates.Values) 
+                                       it.getIML (doc, parentElem.LastChild);                          
+                       }
+
+                       foreach (GraphicObject g in Items) {
+                               g.getIML (doc, parentElem.LastChild);   
+                       }
+               }
+               #endif
+
+               #region CTOR
+               protected TemplatedGroup() : base(){}
+               public TemplatedGroup (Interface iface) : base(iface){}
+               #endregion
+
+               protected Group items;
+               string _itemTemplate, dataTest;
+
+               #region events
+               public event EventHandler<SelectionChangeEventArgs> SelectedItemChanged;
+               public event EventHandler Loaded;
+               #endregion
+
+               IList data;
+               int _selectedIndex = -1;
+               Color selBackground, selForeground;
+
+               int itemPerPage = 50;
+               CrowThread loadingThread = null;
+
+               bool isPaged = false;
+
+               #region Templating
+               //TODO: dont instantiate ItemTemplates if not used
+               //but then i should test if null in msil gen
+               public Dictionary<string, ItemTemplate> ItemTemplates = new Dictionary<string, Crow.ItemTemplate>();
+
+               /// <summary>
+               /// Keep track of expanded subnodes and closed time to unload
+               /// </summary>
+               //Dictionary<GraphicObject, Stopwatch> nodes = new Dictionary<GraphicObject, Stopwatch>();
+               internal List<GraphicObject> nodes = new List<GraphicObject>();
+               /// <summary>
+               /// Item templates file path, on disk or embedded.
+               /// 
+               /// ItemTemplate file may contains either a single template without the
+               /// ItemTemplate enclosing tag, or several item templates each enclosed
+               /// in a separate tag.
+               /// </summary>
+               
+               public string ItemTemplate {
+                       get { return _itemTemplate; }
+                       set {
+                               if (value == _itemTemplate)
+                                       return;
+
+                               _itemTemplate = value;
+
+                               //TODO:reload list with new template?
+                               NotifyValueChanged("ItemTemplate", _itemTemplate);
+                       }
+               }
+               protected override void loadTemplate(GraphicObject template = null)
+               {
+                       base.loadTemplate (template);
+
+                       items = this.child.FindByName ("ItemsContainer") as Group;
+                       if (items == null)
+                               throw new Exception ("TemplatedGroup template Must contain a Group named 'ItemsContainer'");
+                       if (items.Children.Count == 0)
+                               NotifyValueChanged ("HasChildren", false);
+                       else
+                               NotifyValueChanged ("HasChildren", true);
+               }
+               /// <summary>
+               /// Use to define condition on Data item for selecting among ItemTemplates.
+               /// Default value is 'TypeOf' for selecting Template depending on Type of Data.
+               /// Other possible values are properties of Data
+               /// </summary>
+               /// <value>The data property test.</value>
+               [DefaultValue("TypeOf")]
+               public string DataTest {
+                       get { return dataTest; }
+                       set {
+                               if (value == dataTest)
+                                       return;
+
+                               dataTest = value;
+
+                               NotifyValueChanged("DataTest", dataTest);
+                       }
+               }
+               #endregion
+
+               public virtual List<GraphicObject> Items{
+                       get {
+                               return isPaged ? items.Children.SelectMany(x => (x as Group).Children).ToList()
+                               : items.Children;
+                       }
+               }
+               [DefaultValue(-1)]public virtual int SelectedIndex{
+                       get { return _selectedIndex; }
+                       set {
+                               if (value == _selectedIndex)
+                                       return;
+
+                               /*if (_selectedIndex >= 0 && Items.Count > _selectedIndex) {
+                                       Items[_selectedIndex].Foreground = Color.Transparent;
+                                       Items[_selectedIndex].Background = Color.Transparent;
+                               }*/
+
+                               _selectedIndex = value;
+
+                               /*if (_selectedIndex >= 0 && Items.Count > _selectedIndex) {
+                                       Items[_selectedIndex].Foreground = SelectionForeground;
+                                       Items[_selectedIndex].Background = SelectionBackground;
+                               }*/
+
+                               NotifyValueChanged ("SelectedIndex", _selectedIndex);
+                               NotifyValueChanged ("SelectedItem", SelectedItem);
+                               SelectedItemChanged.Raise (this, new SelectionChangeEventArgs (SelectedItem));
+                       }
+               }
+               [XmlIgnore]public virtual object SelectedItem{
+                       get { return data == null ? null : _selectedIndex < 0 ? data.GetDefaultValue() : data[_selectedIndex]; }
+                       set {
+                               if (data == null) {
+                                       SelectedIndex = -1;
+                                       return;
+                               }
+                               //TODO:double check if value type will be notified to binding sys
+                               if (value == SelectedItem)
+                                       return;
+                               
+                               SelectedIndex = data.IndexOf (value);
+                       }
+               }
+               [XmlIgnore]public bool HasItems {
+                       get { return Items.Count > 0; }
+               }
+               public IList Data {
+                       get { return data; }
+                       set {
+                               if (value == data)
+                                       return;
+
+                               cancelLoadingThread ();
+
+                               if (data is IObservableList) {
+                                       IObservableList ol = data as IObservableList;
+                                       ol.ListAdd -= Ol_ListAdd;
+                                       ol.ListRemove -= Ol_ListRemove;
+                               }
+
+                               data = value;
+
+                               if (data is IObservableList) {
+                                       IObservableList ol = data as IObservableList;
+                                       ol.ListAdd += Ol_ListAdd;
+                                       ol.ListRemove += Ol_ListRemove;
+                               }
+
+                               NotifyValueChanged ("Data", data);
+
+                               //lock (CurrentInterface.LayoutMutex)
+                                       ClearItems ();
+
+                               if (data == null)
+                                       return;
+
+                               loadingThread = new CrowThread (this, loading);
+                               loadingThread.Finished += (object sender, EventArgs e) => (sender as TemplatedGroup).Loaded.Raise (sender, e);
+                               loadingThread.Start ();
+
+                               NotifyValueChanged ("SelectedIndex", _selectedIndex);
+                               NotifyValueChanged ("SelectedItem", SelectedItem);
+                               SelectedItemChanged.Raise (this, new SelectionChangeEventArgs (SelectedItem));
+                               NotifyValueChanged ("HasItems", HasItems);
+                       }
+               }
+
+               void Ol_ListRemove (object sender, ListChangedEventArg e)
+               {
+                       if (this.isPaged) {
+                               int p = e.Index / itemPerPage;
+                               int i = e.Index % itemPerPage;
+                               (items.Children [p] as Group).DeleteChild (i);
+                       } else
+                               items.DeleteChild (e.Index);
+               }
+
+               void Ol_ListAdd (object sender, ListChangedEventArg e)
+               {
+                       if (this.isPaged) {
+                               throw new NotImplementedException();
+//                             int p = e.Index / itemPerPage;
+//                             int i = e.Index % itemPerPage;
+//                             (items.Children [p] as Group).InsertChild (i, e.Element);
+                       } else
+                               loadItem (e.Element, items, dataTest);
+               }
+
+               [DefaultValue("SteelBlue")]
+               public virtual Color SelectionBackground {
+                       get { return selBackground; }
+                       set {
+                               if (value == selBackground)
+                                       return;
+                               selBackground = value;
+                               NotifyValueChanged ("SelectionBackground", selBackground);
+                               RegisterForRedraw ();
+                       }
+               }
+               [DefaultValue("White")]
+               public virtual Color SelectionForeground {
+                       get { return selForeground; }
+                       set {
+                               if (value == selForeground)
+                                       return;
+                               selForeground = value;
+                               NotifyValueChanged ("SelectionForeground", selForeground);
+                               RegisterForRedraw ();
+                       }
+               }
+
+               protected void raiseSelectedItemChanged(){
+                       SelectedItemChanged.Raise (this, new SelectionChangeEventArgs (SelectedItem));
+               }
+
+
+               public virtual void AddItem(GraphicObject g){
+                       items.AddChild (g);
+                       g.LogicalParent = this;
+                       NotifyValueChanged ("HasChildren", true);
+               }
+               public virtual void RemoveItem(GraphicObject g)
+               {
+                       g.LogicalParent = null;
+                       items.DeleteChild (g);
+                       if (items.Children.Count == 0)
+                               NotifyValueChanged ("HasChildren", false);
+               }
+
+               public virtual void ClearItems()
+               {
+                       _selectedIndex = -1;
+                       NotifyValueChanged ("SelectedIndex", _selectedIndex);
+                       NotifyValueChanged ("SelectedItem", null);
+
+                       items.ClearChildren ();
+                       NotifyValueChanged ("HasChildren", false);
+               }
+
+
+               #region GraphicObject overrides
+               public override GraphicObject FindByName (string nameToFind)
+               {
+                       if (Name == nameToFind)
+                               return this;
+
+                       foreach (GraphicObject w in Items) {
+                               GraphicObject r = w.FindByName (nameToFind);
+                               if (r != null)
+                                       return r;
+                       }
+                       return null;
+               }
+               public override bool Contains (GraphicObject goToFind)
+               {
+                       foreach (GraphicObject w in Items) {
+                               if (w == goToFind)
+                                       return true;
+                               if (w.Contains (goToFind))
+                                       return true;
+                       }
+                       return base.Contains(goToFind);
+               }
+//             public override void ClearBinding ()
+//             {
+//                     if (items != null)
+//                             items.ClearBinding ();
+//
+//                     base.ClearBinding ();
+//             }
+//             public override void ResolveBindings ()
+//             {
+//                     base.ResolveBindings ();
+//                     if (items != null)
+//                             items.ResolveBindings ();
+//             }
+               #endregion
+
+               /// <summary>
+               /// Items loading thread
+               /// </summary>
+               void loading(){
+                       loadPage (data, items, dataTest);
+               }
+//                     //if (!ItemTemplates.ContainsKey ("default"))
+//                     //      ItemTemplates ["default"] = Interface.GetItemTemplate (ItemTemplate);
+//
+//                     for (int i = 1; i <= (data.Count / itemPerPage) + 1; i++) {
+//                             if ((bool)loadingThread?.cancelRequested) {
+//                                     this.Dispose ();
+//                                     return;
+//                             }
+//                             loadPage (i);
+//                             Thread.Sleep (1);
+//                     }
+//             }
+               void cancelLoadingThread(){
+                       if (loadingThread != null)
+                               loadingThread.Cancel ();
+               }
+               void loadPage(IList _data, Group page, string _dataTest)
+               {
+                       #if DEBUG_LOAD
+                       Stopwatch loadingTime = new Stopwatch ();
+                       loadingTime.Start ();
+                       #endif
+
+
+//                     if (typeof(TabView).IsAssignableFrom (items.GetType ())||
+//                             typeof(Menu).IsAssignableFrom (this.GetType())||
+//                             typeof(Wrapper).IsAssignableFrom (items.GetType ())) {
+                               //page = items;
+                               itemPerPage = int.MaxValue;
+//                     } else if (typeof(GenericStack).IsAssignableFrom (items.GetType ())) {
+//                             GenericStack gs = new GenericStack (items.CurrentInterface);
+//                             gs.Orientation = (items as GenericStack).Orientation;
+//                             gs.Width = items.Width;
+//                             gs.Height = items.Height;
+//                             gs.VerticalAlignment = items.VerticalAlignment;
+//                             gs.HorizontalAlignment = items.HorizontalAlignment;
+//                             page = gs;
+//                             page.Name = "page" + pageNum;
+//                             isPaged = true;
+//                     } else {
+//                             page = Activator.CreateInstance (items.GetType ()) as Group;
+//                             page.CurrentInterface = items.CurrentInterface;
+//                             page.Initialize ();
+//                             page.Name = "page" + pageNum;
+//                             isPaged = true;
+//                     }
+
+                       for (int i = 0; i < _data.Count; i++) {                         
+                               loadItem (_data[i], page, _dataTest);
+                               if (loadingThread.cancelRequested)
+                                       break;
+                       }
+
+//                     if (page == items)
+//                             return;
+//                     lock (CurrentInterface.LayoutMutex)
+//                             items.AddChild (page);
+
+                       #if DEBUG_LOAD
+                       loadingTime.Stop ();
+                       Debug.WriteLine("Listbox {2} Loading: {0} ticks \t, {1} ms",
+                       loadingTime.ElapsedTicks,
+                       loadingTime.ElapsedMilliseconds, this.ToString());
+                       #endif
+               }
+               string getItempKey(Type dataType, object o, string propertyName){
+                       try {
+                               return dataType.GetProperty (propertyName).GetGetMethod ().Invoke (o, null)?.ToString();
+                       } catch  {
+                               return dataType.FullName;
+                       }
+               }
+               protected void loadItem(object o, Group page, string _dataTest){
+                       if (o == null)//TODO:surely a threading sync problem
+                               return;
+                       GraphicObject g = null;
+                       ItemTemplate iTemp = null;
+                       Type dataType = o.GetType ();
+                       string itempKey = dataType.FullName;
+
+                       if (_dataTest != "TypeOf")
+                               itempKey = getItempKey (dataType, o, _dataTest);
+
+                       if (ItemTemplates.ContainsKey (itempKey))
+                               iTemp = ItemTemplates [itempKey];
+                       else {
+                               foreach (string it in ItemTemplates.Keys) {
+                                       Type t = CompilerServices.tryGetType (it);
+                                       if (t == null)
+                                               continue;
+                                       if (t.IsAssignableFrom (dataType)) {//TODO:types could be cached
+                                               iTemp = ItemTemplates [it];
+                                               break;
+                                       }
+                               }
+                               if (iTemp == null)
+                                       iTemp = ItemTemplates ["default"];
+                       }
+
+                       lock (IFace.LayoutMutex) {
+                               g = iTemp.CreateInstance();
+                               #if DESIGN_MODE
+                               g.design_isTGItem = true;
+                               #endif
+                               page.AddChild (g);
+//                             if (isPaged)
+                               g.LogicalParent = this;
+                               g.MouseDown += itemClick;
+                       }
+
+                       if (iTemp.Expand != null && g is Expandable) {
+                               Expandable e = g as Expandable;
+                               e.Expand += iTemp.Expand;
+                               e.GetIsExpandable = iTemp.HasSubItems;
+                       }
+
+                       g.DataSource = o;
+               }
+//             protected void _list_LayoutChanged (object sender, LayoutingEventArgs e)
+//             {
+//                     #if DEBUG_LAYOUTING
+//                     Debug.WriteLine("list_LayoutChanged");
+//                     #endif
+//                     if (_gsList.Orientation == Orientation.Horizontal) {
+//                             if (e.LayoutType == LayoutingType.Width)
+//                                     _gsList.Width = approxSize;
+//                     } else if (e.LayoutType == LayoutingType.Height)
+//                             _gsList.Height = approxSize;
+//             }
+               int approxSize
+               {
+                       get {
+                               if (data == null)
+                                       return -1;
+                               GenericStack page1 = items.FindByName ("page1") as GenericStack;
+                               if (page1 == null)
+                                       return -1;
+
+                               return page1.Orientation == Orientation.Horizontal ?
+                                       data.Count < itemPerPage ?
+                                       -1:
+                                       (int)Math.Ceiling ((double)page1.Slot.Width / (double)itemPerPage * (double)(data.Count+1)):
+                                       data.Count < itemPerPage ?
+                                       -1:
+                                       (int)Math.Ceiling ((double)page1.Slot.Height / (double)itemPerPage * (double)(data.Count+1));
+                       }
+               }
+               internal virtual void itemClick(object sender, MouseButtonEventArgs e){
+                       SelectedIndex = data.IndexOf((sender as GraphicObject).DataSource);
+               }
+
+               bool emitHelperIsAlreadyExpanded (GraphicObject go){
+                       if (nodes.Contains (go))
+                               return true;
+                       nodes.Add (go);
+                       return false;
+               }
+
+               protected override void Dispose (bool disposing)
+               {
+                       if (disposing && loadingThread != null)
+                               loadingThread.Cancel ();
+                       base.Dispose (disposing);
+               }
+       }
+}
diff --git a/Crow/src/GraphicObjects/TestCairoPatch.cs b/Crow/src/GraphicObjects/TestCairoPatch.cs
new file mode 100644 (file)
index 0000000..f155d3c
--- /dev/null
@@ -0,0 +1,148 @@
+//
+// TestCairoPatch.cs
+//
+// Author:
+//       jp <>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+using System;
+using Cairo;
+
+namespace Crow
+{
+       public class TestCairoPatch : GraphicObject
+       {
+               void computeControlPoints (
+                       double xc, double yc,
+                       double x1, double y1,
+                       out double x2, out double y2,
+                       out double x3, out double y3,
+                       double x4, double y4){
+                       double ax = x1 - xc;
+                       double ay = y1 - yc;
+                       double bx = x4 - xc;
+                       double byy = y4 - yc;
+                       double q1 = ax * ax + ay * ay;
+                       double q2 = q1 + ax * bx + ay * byy;
+                       double k2 = 4.0/3.0 * (Math.Sqrt(2.0 * q1 * q2) - q2) / (ax * byy - ay * bx);
+
+
+                       x2 = xc + ax - k2 * ay;
+                       y2 = yc + ay + k2 * ax;
+                       x3 = xc + bx + k2 * byy;
+                       y3 = yc + byy - k2 * bx;
+               }
+               protected override void onDraw (Context gr)
+               {
+                       base.onDraw (gr);
+
+                       double radius = 100;
+
+                       double pi3 = Math.PI / 3.0;
+
+                       MeshPattern mp = new MeshPattern ();
+
+                       double x1 = radius,y1 = 0,
+                       x2 = 0, y2 = 0, x3 = 0, y3 = 0, x4 = 0, y4 = 0,
+                       xc = radius,yc = radius;
+
+                       double dx = Math.Sin (pi3) * radius;
+                       double dy = Math.Cos (pi3) * radius;
+
+                       mp.BeginPatch ();
+                       mp.MoveTo (xc, yc);
+                       mp.LineTo (x1, y1);
+                       x4 = xc + dx;
+                       y4 = yc - dy;
+                       computeControlPoints (xc, yc, x1, y1, out x2, out y2, out x3, out y3, x4, y4);
+                       mp.CurveTo (x2, y2, x3, y3, x4, y4);
+
+                       mp.SetCornerColorRGB (0, 1, 1, 1);
+                       mp.SetCornerColorRGB (1, 1, 0, 0);
+                       mp.SetCornerColorRGB (2, 1, 1, 0);
+
+                       x1 = x4;
+                       y1 = y4;
+                       y4 = yc + dy;
+
+                       computeControlPoints (xc, yc, x1, y1, out x2, out y2, out x3, out y3, x4, y4);
+                       mp.CurveTo (x2, y2, x3, y3, x4, y4);
+
+                       mp.SetCornerColorRGB (3, 0, 1, 0);
+                       mp.EndPatch ();
+
+                       x1 = x4;
+                       y1 = y4;
+                       x4 = xc;
+                       y4 = yc * 2.0;
+
+                       mp.BeginPatch ();
+                       mp.MoveTo (xc, yc);
+                       mp.LineTo (x1, y1);
+                       computeControlPoints (xc, yc, x1, y1, out x2, out y2, out x3, out y3, x4, y4);
+                       mp.CurveTo (x2, y2, x3, y3, x4, y4);
+
+                       mp.SetCornerColorRGB (0, 1, 1, 1);
+                       mp.SetCornerColorRGB (1, 0, 1, 0);
+                       mp.SetCornerColorRGB (2, 0, 1, 1);
+
+                       x1 = x4;
+                       y1 = y4;
+                       x4 = xc-dx;
+                       y4 = yc+dy;
+
+                       computeControlPoints (xc, yc, x1, y1, out x2, out y2, out x3, out y3, x4, y4);
+                       mp.CurveTo (x2, y2, x3, y3, x4, y4);
+
+                       mp.SetCornerColorRGB (3, 0, 0, 1);
+                       mp.EndPatch ();
+
+                       x1 = x4;
+                       y1 = y4;
+                       y4 = yc - dy;
+
+                       mp.BeginPatch ();
+                       mp.MoveTo (xc, yc);
+                       mp.LineTo (x1, y1);
+                       computeControlPoints (xc, yc, x1, y1, out x2, out y2, out x3, out y3, x4, y4);
+                       mp.CurveTo (x2, y2, x3, y3, x4, y4);
+
+                       mp.SetCornerColorRGB (0, 1, 1, 1);
+                       mp.SetCornerColorRGB (1, 0, 0, 1);
+                       mp.SetCornerColorRGB (2, 1, 0, 1);
+
+                       x1 = x4;
+                       y1 = y4;
+                       x4 = radius;
+                       y4 = 0;
+
+                       computeControlPoints (xc, yc, x1, y1, out x2, out y2, out x3, out y3, x4, y4);
+                       mp.CurveTo (x2, y2, x3, y3, x4, y4);
+
+                       mp.SetCornerColorRGB (3, 1, 0, 0);
+                       mp.EndPatch ();
+
+                       gr.SetSource (mp);
+                       gr.Paint ();
+               }
+       }
+}
+
diff --git a/Crow/src/GraphicObjects/TextBox.cs b/Crow/src/GraphicObjects/TextBox.cs
new file mode 100644 (file)
index 0000000..5da67e3
--- /dev/null
@@ -0,0 +1,228 @@
+//
+// TextBox.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using Cairo;
+using System.Diagnostics;
+using System.Xml.Serialization;
+
+namespace Crow
+{
+    public class TextBox : Label
+    {
+               #region CTOR
+               protected TextBox() : base(){}
+               public TextBox(Interface iface) : base(iface)
+               { }
+//             public TextBox(string _initialValue)
+//                     : base(_initialValue)
+//             {
+//
+//             }
+               #endregion
+
+               #region GraphicObject overrides
+               [XmlIgnore]public override bool HasFocus   //trigger update when lost focus to errase text beam
+        {
+            get
+            {
+                return base.HasFocus;
+            }
+            set
+            {
+                base.HasFocus = value;
+                RegisterForRedraw();
+            }
+        }
+
+               protected override void onDraw (Context gr)
+               {
+                       base.onDraw (gr);
+                       FontExtents fe = gr.FontExtents;
+               }
+               #endregion
+                       
+        #region Keyboard handling
+               public override void onKeyDown (object sender, KeyEventArgs e)
+               {
+                       base.onKeyDown (sender, e);
+
+                       Key key = e.Key;
+
+                       switch (key)
+                       {
+                       case Key.BackSpace:
+                               if (CurrentPosition == 0)
+                                       return;
+                               this.DeleteChar();
+                               break;
+                       case Key.Clear:
+                               break;
+                       case Key.Delete:
+                               if (selectionIsEmpty) {
+                                       if (!MoveRight ())
+                                               return;
+                               }else if (IFace.Keyboard.Shift)
+                                       IFace.Clipboard = this.SelectedText;
+                               this.DeleteChar ();
+                               break;
+                       case Key.KP_Enter:
+                       case Key.Return:
+                               if (!selectionIsEmpty)
+                                       this.DeleteChar ();
+                               if (Multiline)
+                                       this.InsertLineBreak ();
+                               else
+                                       OnTextChanged(this,new TextChangeEventArgs(Text));
+                               break;
+                       case Key.Escape:
+                               Text = "";
+                               CurrentColumn = 0;
+                               SelRelease = -1;
+                               break;
+                       case Key.Home:
+                               if (IFace.Keyboard.Shift) {
+                                       if (selectionIsEmpty)
+                                               SelBegin = new Point (CurrentColumn, CurrentLine);
+                                       if (IFace.Keyboard.Ctrl)
+                                               CurrentLine = 0;
+                                       CurrentColumn = 0;
+                                       SelRelease = new Point (CurrentColumn, CurrentLine);
+                                       break;
+                               }
+                               SelRelease = -1;
+                               if (IFace.Keyboard.Ctrl)
+                                       CurrentLine = 0;
+                               CurrentColumn = 0;
+                               break;
+                       case Key.End:
+                               if (IFace.Keyboard.Shift) {
+                                       if (selectionIsEmpty)
+                                               SelBegin = CurrentPosition;
+                                       if (IFace.Keyboard.Ctrl)
+                                               CurrentLine = int.MaxValue;
+                                       CurrentColumn = int.MaxValue;
+                                       SelRelease = CurrentPosition;
+                                       break;
+                               }
+                               SelRelease = -1;
+                               if (IFace.Keyboard.Ctrl)
+                                       CurrentLine = int.MaxValue;
+                               CurrentColumn = int.MaxValue;
+                               break;
+                       case Key.Insert:
+                               if (IFace.Keyboard.Shift)
+                                       this.Insert (IFace.Clipboard);
+                               else if (IFace.Keyboard.Ctrl && !selectionIsEmpty)
+                                       IFace.Clipboard = this.SelectedText;
+                               break;
+                       case Key.Left:
+                               if (IFace.Keyboard.Shift) {
+                                       if (selectionIsEmpty)
+                                               SelBegin = new Point(CurrentColumn, CurrentLine);
+                                       if (IFace.Keyboard.Ctrl)
+                                               GotoWordStart ();
+                                       else if (!MoveLeft ())
+                                               return;
+                                       SelRelease = CurrentPosition;
+                                       break;
+                               }
+                               SelRelease = -1;
+                               if (IFace.Keyboard.Ctrl)
+                                       GotoWordStart ();
+                               else
+                                       MoveLeft();
+                               break;
+                       case Key.Right:
+                               if (IFace.Keyboard.Shift) {
+                                       if (selectionIsEmpty)
+                                               SelBegin = CurrentPosition;
+                                       if (IFace.Keyboard.Ctrl)
+                                               GotoWordEnd ();
+                                       else if (!MoveRight ())
+                                               return;
+                                       SelRelease = CurrentPosition;
+                                       break;
+                               }
+                               SelRelease = -1;
+                               if (IFace.Keyboard.Ctrl)
+                                       GotoWordEnd ();
+                               else
+                                       MoveRight ();
+                               break;
+                       case Key.Up:
+                               if (IFace.Keyboard.Shift) {
+                                       if (selectionIsEmpty)
+                                               SelBegin = CurrentPosition;
+                                       CurrentLine--;
+                                       SelRelease = CurrentPosition;
+                                       break;
+                               }
+                               SelRelease = -1;
+                               CurrentLine--;
+                               break;
+                       case Key.Down:
+                               if (IFace.Keyboard.Shift) {
+                                       if (selectionIsEmpty)
+                                               SelBegin = CurrentPosition;
+                                       CurrentLine++;
+                                       SelRelease = CurrentPosition;
+                                       break;
+                               }
+                               SelRelease = -1;
+                               CurrentLine++;                          
+                               break;
+                       case Key.Menu:
+                               break;
+                       case Key.Num_Lock:
+                               break;
+                       case Key.Page_Down:                             
+                               break;
+                       case Key.Page_Up:
+                               break;
+                       case Key.Tab:
+                               this.Insert ("\t");
+                               break;
+                       default:
+                               break;
+                       }
+
+                       RegisterForGraphicUpdate();
+               }
+               public override void onKeyPress (object sender, KeyPressEventArgs e)
+               {
+                       base.onKeyPress (sender, e);
+
+                       this.Insert (e.KeyChar.ToString());
+
+                       SelRelease = -1;
+                       SelBegin = new Point(CurrentColumn, SelBegin.Y);
+
+                       RegisterForGraphicUpdate();
+               }
+        #endregion
+       } 
+}
diff --git a/Crow/src/GraphicObjects/TextRun.cs b/Crow/src/GraphicObjects/TextRun.cs
new file mode 100644 (file)
index 0000000..297ffe9
--- /dev/null
@@ -0,0 +1,309 @@
+//
+// TextRun.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Diagnostics;
+using Cairo;
+using System.Text.RegularExpressions;
+using System.Xml.Serialization;
+using System.ComponentModel;
+
+namespace Crow
+{
+       [DesignIgnore]
+       public class TextRun : GraphicObject
+       {
+               #region CTOR
+               protected TextRun () : base(){}
+               public TextRun (Interface iface) : base (iface){}
+               #endregion
+
+               //TODO:change protected to private
+
+               #region private and protected fields
+               protected string _text = "label";
+               Alignment _textAlignment = Alignment.Left;
+               bool horizontalStretch = false;
+               bool verticalStretch = false;
+               bool _multiline;
+               bool wordWrap;
+               protected Rectangle rText;
+               protected float widthRatio = 1f;
+               protected float heightRatio = 1f;
+               protected FontExtents fe;
+               protected TextExtents te;
+               #endregion
+
+
+               
+               [DefaultValue (Alignment.Left)]
+               public Alignment TextAlignment {
+                       get { return _textAlignment; }
+                       set { _textAlignment = value; }
+               }
+               
+               [DefaultValue (false)]
+               public virtual bool HorizontalStretch {
+                       get { return horizontalStretch; }
+                       set {
+                               if (horizontalStretch == value)
+                                       return;
+                               horizontalStretch = value;
+                               RegisterForRedraw ();
+                               NotifyValueChanged ("HorizontalStretch", horizontalStretch);
+                       }
+               }
+               
+               [DefaultValue (false)]
+               public virtual bool VerticalStretch {
+                       get { return verticalStretch; }
+                       set {
+                               if (verticalStretch == value)
+                                       return;
+                               verticalStretch = value;
+                               RegisterForRedraw ();
+                               NotifyValueChanged ("VerticalStretch", verticalStretch);
+                       }
+               }
+               
+               [DefaultValue ("label")]
+               public string Text {
+                       get {
+                               return lines == null ?
+                                       _text : lines.Aggregate ((i, j) => i + Interface.LineBreak + j);
+                       }
+                       set {
+                               if (_text == value)
+                                       return;
+
+                               RegisterForGraphicUpdate ();
+
+                               _text = value;
+
+                               if (string.IsNullOrEmpty (_text))
+                                       _text = "";
+
+                               lines = getLines;
+                       }
+               }
+               
+               [DefaultValue (false)]
+               public bool Multiline {
+                       get { return _multiline; }
+                       set {
+                               _multiline = value;
+                               RegisterForGraphicUpdate ();
+                       }
+               }
+               
+               [DefaultValue (false)]
+               public bool WordWrap {
+                       get {
+                               return wordWrap;
+                       }
+                       set {
+                               if (wordWrap == value)
+                                       return;
+                               wordWrap = value;
+                               RegisterForGraphicUpdate ();
+                       }
+               }
+
+               List<string> lines;
+               List<string> getLines {
+                       get {
+                               return _multiline ?
+                                       Regex.Split (_text, "\r\n|\r|\n").ToList () :
+                                       new List<string> (new string [] { _text });
+                       }
+               }
+
+               #region GraphicObject overrides
+               protected override int measureRawSize (LayoutingType lt)
+               {
+                       if (lines == null)
+                               lines = getLines;
+
+                       using (ImageSurface img = new ImageSurface (Format.Argb32, 10, 10)) {
+                               using (Context gr = new Context (img)) {
+                                       //Cairo.FontFace cf = gr.GetContextFontFace ();
+
+                                       gr.SelectFontFace (Font.Name, Font.Slant, Font.Wheight);
+                                       gr.SetFontSize (Font.Size);
+
+
+                                       fe = gr.FontExtents;
+                                       te = new TextExtents ();
+
+                                       if (lt == LayoutingType.Height) {
+                                               int lc = lines.Count;
+                                               //ensure minimal height = text line height
+                                               if (lc == 0)
+                                                       lc = 1;
+
+                                               return (int)(fe.Height * lc) + Margin * 2;
+                                       }
+
+                                       foreach (string s in lines) {
+                                               string l = s.Replace("\t", new String (' ', Interface.TabSize));
+                                               TextExtents tmp = gr.TextExtents (l);
+                                               if (tmp.XAdvance > te.XAdvance)
+                                                       te = tmp;
+                                       }
+                                       return (int)Math.Ceiling (te.XAdvance) + Margin * 2;
+                               }
+                       }
+               }
+               protected override void onDraw (Context gr)
+               {
+                       base.onDraw (gr);
+
+                       gr.SelectFontFace (Font.Name, Font.Slant, Font.Wheight);
+                       gr.SetFontSize (Font.Size);
+                       gr.FontOptions = Interface.FontRenderingOptions;
+                       gr.Antialias = Interface.Antialias;
+
+                       rText = new Rectangle (new Size (
+                               measureRawSize (LayoutingType.Width), measureRawSize (LayoutingType.Height)));
+                       rText.Width -= 2 * Margin;
+                       rText.Height -= 2 * Margin;
+
+                       widthRatio = 1f;
+                       heightRatio = 1f;
+
+                       Rectangle cb = ClientRectangle;
+
+                       //ignore text alignment if size to content = true
+                       //or if text size is larger than client bounds
+                       if (Width < 0 || Height < 0 || rText.Width > cb.Width) {
+                               rText.X = cb.X;
+                               rText.Y = cb.Y;
+                       } else {
+                               if (horizontalStretch) {
+                                       widthRatio = (float)cb.Width / rText.Width;
+                                       if (!verticalStretch)
+                                               heightRatio = widthRatio;
+                               }
+                               if (verticalStretch) {
+                                       heightRatio = (float)cb.Height / rText.Height;
+                                       if (!horizontalStretch)
+                                               widthRatio = heightRatio;
+                               }
+
+                               rText.Width = (int)(widthRatio * cb.Width);
+                               rText.Height = (int)(heightRatio * cb.Height);
+
+                               switch (TextAlignment) {
+                               case Alignment.TopLeft:     //ok
+                                       rText.X = cb.X;
+                                       rText.Y = cb.Y;
+                                       break;
+                               case Alignment.Top:   //ok                                              
+                                       rText.Y = cb.Y;
+                                       rText.X = cb.X + cb.Width / 2 - rText.Width / 2;
+                                       break;
+                               case Alignment.TopRight:    //ok
+                                       rText.Y = cb.Y;
+                                       rText.X = cb.Right - rText.Width;
+                                       break;
+                               case Alignment.Left://ok
+                                       rText.X = cb.X;
+                                       rText.Y = cb.Y + cb.Height / 2 - rText.Height / 2;
+                                       break;
+                               case Alignment.Right://ok
+                                       rText.X = cb.X + cb.Width - rText.Width;
+                                       rText.Y = cb.Y + cb.Height / 2 - rText.Height / 2;
+                                       break;
+                               case Alignment.Bottom://ok
+                                       rText.X = cb.Width / 2 - rText.Width / 2;
+                                       rText.Y = cb.Height - rText.Height;
+                                       break;
+                               case Alignment.BottomLeft://ok
+                                       rText.X = cb.X;
+                                       rText.Y = cb.Bottom - rText.Height;
+                                       break;
+                               case Alignment.BottomRight://ok
+                                       rText.Y = cb.Bottom - rText.Height;
+                                       rText.X = cb.Right - rText.Width;
+                                       break;
+                               case Alignment.Center://ok
+                                       rText.X = cb.X + cb.Width / 2 - rText.Width / 2;
+                                       rText.Y = cb.Y + cb.Height / 2 - rText.Height / 2;
+                                       break;
+                               }
+                       }
+
+                       gr.FontMatrix = new Matrix (widthRatio * Font.Size, 0, 0, heightRatio * Font.Size, 0, 0);
+
+
+                       int curLineCount = 0;
+                       for (int i = 0; i < lines.Count; i++) {
+                               string l = lines [i].Replace ("\t", new String (' ', Interface.TabSize));
+                               List<string> wl = new List<string> ();
+                               int lineLength = (int)gr.TextExtents (l).XAdvance;
+
+                               if (wordWrap && lineLength > cb.Width) {
+                                       string tmpLine = "";
+                                       int curChar = 0;
+                                       while (curChar < l.Length) {
+                                               tmpLine += l [curChar];
+                                               if ((int)gr.TextExtents (tmpLine).XAdvance > cb.Width) {
+                                                       tmpLine = tmpLine.Remove (tmpLine.Length - 1);
+                                                       wl.Add (tmpLine);
+                                                       tmpLine = "";
+                                                       continue;
+                                               }
+                                               curChar++;
+                                       }
+                                       wl.Add (tmpLine);
+                               } else
+                                       wl.Add (l);
+
+                               foreach (string ll in wl) {
+                                       lineLength = (int)gr.TextExtents (ll).XAdvance;
+
+
+                                       if (string.IsNullOrWhiteSpace (ll)) {
+                                               curLineCount++;
+                                               continue;
+                                       }
+
+                                       Foreground.SetAsSource (gr);
+                                       gr.MoveTo (rText.X, rText.Y + fe.Ascent + fe.Height * curLineCount);
+
+                                       gr.ShowText (ll);
+                                       gr.Fill ();
+
+                                       curLineCount++;
+                               }
+                       }
+               }
+               #endregion
+       }
+}
diff --git a/Crow/src/GraphicObjects/TreeView.cs b/Crow/src/GraphicObjects/TreeView.cs
new file mode 100644 (file)
index 0000000..5a5e714
--- /dev/null
@@ -0,0 +1,108 @@
+//
+// TreeView.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.Xml.Serialization;
+using System.Diagnostics;
+using System.ComponentModel;
+
+namespace Crow
+{
+       //treeview expect expandable child (or not)
+       //if their are expandable, some functions and events are added
+       public class TreeView : TemplatedGroup
+       {
+               GraphicObject selectedItemContainer = null;
+               bool isRoot;
+
+               #region CTOR
+               protected TreeView() : base(){}
+               public TreeView (Interface iface) : base(iface)
+               {
+               }
+               #endregion
+
+               [DefaultValue(false)]
+               public virtual bool IsRoot {
+                       get { return isRoot; }
+                       set {
+                               if (isRoot == value)
+                                       return;
+                               isRoot = value;
+                               NotifyValueChanged ("IsRoot", isRoot);
+                       }
+               }
+               [XmlIgnore]public override object SelectedItem {
+                       get {
+                               return selectedItemContainer == null ?
+                                       "" : selectedItemContainer.DataSource;
+                       }
+               }
+
+               internal override void itemClick (object sender, MouseButtonEventArgs e)
+               {
+                       GraphicObject tmp = sender as GraphicObject;
+                       if (!tmp.HasFocus)
+                               return;
+                       /*if (selectedItemContainer != null) {
+                               selectedItemContainer.Foreground = Color.Transparent;
+                               selectedItemContainer.Background = Color.Transparent;
+                       }*/
+                       selectedItemContainer = tmp;
+                       //selectedItemContainer.Foreground = SelectionForeground;
+                       //selectedItemContainer.Background = SelectionBackground;
+                       NotifyValueChanged ("SelectedItem", SelectedItem);
+                       raiseSelectedItemChanged ();
+               }
+
+               void onExpandAll_MouseClick (object sender, MouseButtonEventArgs e)
+               {
+                       ExpandAll ();
+               }
+
+               public void ExpandAll(){
+                       foreach (Group grp in items.Children) {
+                               foreach (GraphicObject go in grp.Children) {
+                                       Expandable exp = go as Expandable;
+                                       if (exp == null)
+                                               continue;
+                                       TreeView subTV = exp.FindByName ("List") as TreeView;
+                                       if (subTV == null)
+                                               continue;
+                                       EventHandler handler = null;
+                                       handler = delegate(object sender, EventArgs e) {
+                                               TreeView tv = sender as TreeView;
+                                               tv.Loaded -= handler;
+                                               tv.ExpandAll ();
+                                       };
+                                       subTV.Loaded += handler;
+                                       exp.IsExpanded = true;
+                               }
+                       }
+               }
+       }
+}
+
diff --git a/Crow/src/GraphicObjects/Trend.cs b/Crow/src/GraphicObjects/Trend.cs
new file mode 100644 (file)
index 0000000..a2e0c83
--- /dev/null
@@ -0,0 +1,189 @@
+//
+// Trend.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.Collections.Generic;
+using System.Xml.Serialization;
+using System.ComponentModel;
+using Cairo;
+
+namespace Crow
+{
+       public class Trend : GraphicObject
+       {
+               #region private fields
+               double minValue, maxValue, lowThreshold, highThreshold;
+               Fill lowThresholdFill, highThresholdFill;
+               int nbValues;
+               List<double> values = new List<double>();
+               #endregion
+
+
+
+               public virtual void AddValue(double _value)
+               {
+                       values.Add (_value);
+                       while (values.Count > nbValues)
+                               values.RemoveAt (0);
+                       RegisterForRedraw ();
+               }
+               #region CTOR
+               protected Trend () : base()
+               {
+               }
+               #endregion
+               [XmlIgnore]public virtual int NewValue {
+                       set {
+                               AddValue (value);
+                       }
+               }
+               [DefaultValue(400)]
+               public virtual int NbValues {
+                       get { return nbValues; }
+                       set {
+                               if (nbValues == value)
+                                       return;
+
+                               nbValues = value;
+                               NotifyValueChanged ("NbValues", minValue);
+                               RegisterForRedraw ();
+                       }
+               }
+               [DefaultValue(0.0)]
+               public virtual double Minimum {
+                       get { return minValue; }
+                       set {
+                               if (minValue == value)
+                                       return;
+
+                               minValue = value;
+                               NotifyValueChanged ("Minimum", minValue);
+                               RegisterForRedraw ();
+                       }
+               }
+               [DefaultValue(100.0)]
+               public virtual double Maximum
+               {
+                       get { return maxValue; }
+                       set {
+                               if (maxValue == value)
+                                       return;
+
+                               maxValue = value;
+                               NotifyValueChanged ("Maximum", maxValue);
+                               RegisterForRedraw ();
+                       }
+               }
+               [DefaultValue(1.0)]
+               public virtual double LowThreshold {
+                       get { return lowThreshold; }
+                       set {
+                               if (lowThreshold == value)
+                                       return;
+                               lowThreshold = value;
+                               NotifyValueChanged ("LowThreshold", lowThreshold);
+                               RegisterForGraphicUpdate ();
+                       }
+               }
+               [DefaultValue(80.0)]
+               public virtual double HighThreshold {
+                       get { return highThreshold; }
+                       set {
+                               if (highThreshold == value)
+                                       return;
+                               highThreshold = value;
+                               NotifyValueChanged ("HighThreshold", highThreshold);
+                               RegisterForGraphicUpdate ();
+                       }
+               }
+               [DefaultValue("DarkRed")]
+               public virtual Fill LowThresholdFill {
+                       get { return lowThresholdFill; }
+                       set {
+                               if (lowThresholdFill == value)
+                                       return;
+                               lowThresholdFill = value;
+                               NotifyValueChanged ("LowThresholdFill", lowThresholdFill);
+                               RegisterForRedraw ();
+                       }
+               }
+               [DefaultValue("DarkGreen")]
+               public virtual Fill HighThresholdFill {
+                       get { return highThresholdFill; }
+                       set {
+                               if (highThresholdFill == value)
+                                       return;
+                               highThresholdFill = value;
+                               NotifyValueChanged ("HighThresholdFill", highThresholdFill);
+                               RegisterForRedraw ();
+                       }
+               }
+               protected override void onDraw (Context gr)
+               {
+                       base.onDraw (gr);
+
+                       if (values.Count == 0)
+                               return;
+                       Rectangle r = ClientRectangle;
+
+                       int i = values.Count -1;
+
+                       double ptrX = (double)r.Right;
+                       double scaleY = (double)r.Height / (Maximum - Minimum);
+                       double stepX = (double)r.Width / (double)(nbValues-1);
+
+                       gr.LineWidth = 1.0;
+                       gr.SetDash (new double[]{ 1.0 },0.0);
+
+
+
+                       LowThresholdFill.SetAsSource (gr);
+                       gr.MoveTo (r.Left, r.Bottom - LowThreshold * scaleY);
+                       gr.LineTo (r.Right, r.Bottom - LowThreshold * scaleY);
+//                     gr.Rectangle (r.Left, r.Bottom - LowThreshold * scaleY, r.Width, LowThreshold * scaleY);
+                       gr.Stroke();
+
+                       HighThresholdFill.SetAsSource (gr);
+                       gr.MoveTo (r.Left, (Maximum - HighThreshold) * scaleY);
+                       gr.LineTo (r.Right, (Maximum - HighThreshold) * scaleY);
+//                     gr.Rectangle (r.Left, r.Top, r.Width, (Maximum - HighThreshold) * scaleY);
+                       gr.Stroke();
+
+                       gr.MoveTo (ptrX, values [i] * scaleY);
+
+                       Foreground.SetAsSource (gr);
+                       gr.SetDash (new double[]{ }, 0.0);
+
+                       while (i >= 0) {
+                                       gr.LineTo (ptrX, r.Bottom - values [i] * scaleY);
+                               ptrX -= stepX;
+                               i--;
+                       }
+                       gr.Stroke ();
+               }
+       }
+}
+
diff --git a/Crow/src/GraphicObjects/VerticalStack.cs b/Crow/src/GraphicObjects/VerticalStack.cs
new file mode 100644 (file)
index 0000000..cf0a251
--- /dev/null
@@ -0,0 +1,54 @@
+//
+// VerticalStack.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace Crow
+{
+       /// <summary>
+       /// group control stacking its children vertically
+       /// </summary>
+    public class VerticalStack : GenericStack
+    {
+               #region CTOR
+               protected VerticalStack() : base(){}
+               public VerticalStack(Interface iface) : base(iface)
+        {
+        }
+               #endregion
+
+        [XmlIgnore]
+        public override Orientation Orientation
+        {
+            get { return Orientation.Vertical; }            
+        }
+
+
+    }
+}
diff --git a/Crow/src/GraphicObjects/Window.cs b/Crow/src/GraphicObjects/Window.cs
new file mode 100644 (file)
index 0000000..051ecbd
--- /dev/null
@@ -0,0 +1,466 @@
+//
+// Window.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.Xml.Serialization;
+using System.ComponentModel;
+using System.Diagnostics;
+
+namespace Crow
+{
+       public class Window : TemplatedContainer
+       {
+               public enum Direction
+               {
+                       None,
+                       N,
+                       S,
+                       E,
+                       W,
+                       NW,
+                       NE,
+                       SW,
+                       SE,
+               }
+
+               string _icon;
+               bool resizable;
+               bool movable;
+               bool modal;
+               protected bool hoverBorder = false;
+               bool alwaysOnTop = false;
+               Fill titleBarBackground = Color.SteelBlue;
+               Fill titleBarForeground = Color.White;
+
+               Rectangle savedBounds;
+               bool _minimized = false;
+
+               Direction currentDirection = Direction.None;
+
+               #region Events
+               public event EventHandler Closing;
+               public event EventHandler Maximized;
+               public event EventHandler Unmaximized;
+               public event EventHandler Minimize;
+               #endregion
+
+               #region CTOR
+               protected Window() : base(){}
+               public Window (Interface iface) : base(iface){}
+               #endregion
+
+               #region TemplatedContainer overrides
+               protected override void loadTemplate(GraphicObject template = null)
+               {
+                       base.loadTemplate (template);
+
+                       NotifyValueChanged ("ShowNormal", false);
+                       NotifyValueChanged ("ShowMinimize", true);
+                       NotifyValueChanged ("ShowMaximize", true);
+               }
+               #endregion
+
+               #region public properties
+               [DefaultValue("#Crow.Images.Icons.crow.png")]
+               public string Icon {
+                       get { return _icon; } 
+                       set {
+                               if (_icon == value)
+                                       return;
+                               _icon = value;
+                               NotifyValueChanged ("Icon", _icon);
+                       }
+               } 
+               /// <summary>
+               /// Background of the title bar if any.
+               /// </summary>
+               [DefaultValue("vgradient|0:Onyx|1:SteelBlue")]
+               public virtual Fill TitleBarBackground {
+                       get { return titleBarBackground; }
+                       set {
+                               if (titleBarBackground == value)
+                                       return;
+                               titleBarBackground = value;
+                               NotifyValueChanged ("TitleBarBackground", titleBarBackground);
+                               RegisterForRedraw ();
+                       }
+               }
+               /// <summary>
+               /// Foreground of the title bar, usualy used for the window caption color.
+               /// </summary>
+               [DefaultValue("White")]
+               public virtual Fill TitleBarForeground {
+                       get { return titleBarForeground; }
+                       set {
+                               if (titleBarForeground == value)
+                                       return;
+                               titleBarForeground = value;
+                               NotifyValueChanged ("TitleBarForeground", titleBarForeground);
+                               RegisterForRedraw ();
+                       }
+               }
+               [DefaultValue(true)]
+               public bool Resizable {
+                       get {
+                               return resizable;
+                       }
+                       set {
+                               if (resizable == value)
+                                       return;
+                               resizable = value;
+                               NotifyValueChanged ("Resizable", resizable);
+                       }
+               }
+               [DefaultValue(true)]
+               public bool Movable {
+                       get {
+                               return movable;
+                       }
+                       set {
+                               if (movable == value)
+                                       return;
+                               movable = value;
+                               NotifyValueChanged ("Movable", movable);
+                       }
+               }
+               [DefaultValue(false)]
+               public bool Modal {
+                       get {
+                               return modal;
+                       }
+                       set {
+                               if (modal == value)
+                                       return;
+                               modal = value;
+                               NotifyValueChanged ("Modal", modal);
+                       }
+               }
+               [DefaultValue(false)]
+               public bool IsMinimized {
+                       get { return _minimized; }
+                       set{
+                               if (value == IsMinimized)
+                                       return;
+
+                               _minimized = value;
+                               _contentContainer.Visible = !_minimized;
+
+                               NotifyValueChanged ("IsMinimized", _minimized);
+                       }
+               }
+               [XmlIgnore]public bool IsMaximized {
+                       get { return Width == Measure.Stretched & Height == Measure.Stretched & !_minimized; }
+               }
+               [XmlIgnore]public bool IsNormal {
+                       get { return !(IsMaximized|_minimized); }
+               }
+               [DefaultValue(false)]
+               public bool AlwaysOnTop {
+                       get {
+                               return modal ? true : alwaysOnTop;
+                       }
+                       set {
+                               if (alwaysOnTop == value)
+                                       return;
+                               
+                               alwaysOnTop = value;
+
+                               if (AlwaysOnTop && Parent != null)
+                                       IFace.PutOnTop (this);
+
+                               NotifyValueChanged ("AlwaysOnTop", AlwaysOnTop);
+                       }
+               }
+//             [DefaultValue(WindowState.Normal)]
+//             public virtual WindowState State {
+//                     get { return _state; }
+//                     set {
+//                             if (_state == value)
+//                                     return;
+//                             _state = value;
+//                             NotifyValueChanged ("State", _state);
+//                             NotifyValueChanged ("IsNormal", IsNormal);
+//                             NotifyValueChanged ("IsMaximized", IsMaximized);
+//                             NotifyValueChanged ("IsMinimized", IsMinimized);
+//                             NotifyValueChanged ("IsNotMinimized", IsNotMinimized);
+//                     }
+//             } 
+               #endregion
+
+               /// <summary>
+               /// Moves the and resize with the same function entry point, the direction give the kind of move or resize
+               /// </summary>
+               /// <param name="XDelta">mouse delta on the X axis</param>
+               /// <param name="YDelta">mouse delta on the Y axis</param>
+               /// <param name="currentDirection">Current Direction of the operation, none for moving, other value for resizing in the given direction</param>
+               public void MoveAndResize (int XDelta, int YDelta, Direction currentDirection = (Direction)0) {
+                       int currentLeft = this.Left;
+                       int currentTop = this.Top;
+                       int currentWidth, currentHeight;
+
+                       if (currentLeft == 0) {
+                               currentLeft = this.Slot.Left;
+                               this.Left = currentLeft;
+                       }
+                       if (currentTop == 0) {
+                               currentTop = this.Slot.Top;
+                               this.Top = currentTop;
+                       }
+                       if (this.Width.IsFixed)
+                               currentWidth = this.Width;
+                       else
+                               currentWidth = this.Slot.Width;
+
+                       if (this.Height.IsFixed)
+                               currentHeight = this.Height;
+                       else
+                               currentHeight = this.Slot.Height;
+
+                       switch (currentDirection) {
+                       case Direction.None:
+                               this.Left = currentLeft + XDelta;                               
+                               this.Top = currentTop + YDelta;
+                               break;
+                       case Direction.N:
+                               this.Height = currentHeight - YDelta;
+                               if (this.Height == currentHeight - YDelta)
+                                       this.Top = currentTop + YDelta;
+                               break;
+                       case Direction.S:
+                               this.Height = currentHeight + YDelta;
+                               break;
+                       case Direction.W:
+                               this.Width = currentWidth - XDelta;
+                               if (this.Width == currentWidth - XDelta)
+                                       this.Left = currentLeft + XDelta;
+                               break;
+                       case Direction.E:
+                               this.Width = currentWidth + XDelta;
+                               break;
+                       case Direction.NW:
+                               this.Height = currentHeight - YDelta;
+                               if (this.Height == currentHeight - YDelta)
+                                       this.Top = currentTop + YDelta;
+                               this.Width = currentWidth - XDelta;
+                               if (this.Width == currentWidth - XDelta)
+                                       this.Left = currentLeft + XDelta;
+                               break;
+                       case Direction.NE:
+                               this.Height = currentHeight - YDelta;
+                               if (this.Height == currentHeight - YDelta)
+                                       this.Top = currentTop + YDelta;
+                               this.Width = currentWidth + XDelta;
+                               break;
+                       case Direction.SW:
+                               this.Width = currentWidth - XDelta;
+                               if (this.Width == currentWidth - XDelta)
+                                       this.Left = currentLeft + XDelta;
+                               this.Height = currentHeight + YDelta;
+                               break;
+                       case Direction.SE:
+                               this.Height = currentHeight + YDelta;
+                               this.Width = currentWidth + XDelta;
+                               break;
+                       }                       
+               }
+
+               #region GraphicObject Overrides
+               public override void onMouseMove (object sender, MouseMoveEventArgs e)
+               {
+                       base.onMouseMove (sender, e);
+
+                       Interface otkgw = IFace;
+
+                       if (!hoverBorder) {
+                               currentDirection = Direction.None;
+                               IFace.MouseCursor = XCursor.Default;
+                               return;
+                       }
+
+                       if (this.HasFocus && movable) {
+                               if (e.Mouse.IsButtonDown (MouseButton.Left)) {
+                                       MoveAndResize (e.XDelta, e.YDelta, currentDirection);
+                                       return;
+                               }
+                       }
+                       if (Resizable) {
+                               Direction lastDir = currentDirection;
+
+                               if (Math.Abs (e.Position.Y - this.Slot.Y) < Interface.BorderThreshold) {
+                                       if (Math.Abs (e.Position.X - this.Slot.X) < Interface.BorderThreshold)
+                                               currentDirection = Direction.NW;
+                                       else if (Math.Abs (e.Position.X - this.Slot.Right) < Interface.BorderThreshold)
+                                               currentDirection = Direction.NE;
+                                       else
+                                               currentDirection = Direction.N;
+                               } else if (Math.Abs (e.Position.Y - this.Slot.Bottom) < Interface.BorderThreshold) {
+                                       if (Math.Abs (e.Position.X - this.Slot.X) < Interface.BorderThreshold)
+                                               currentDirection = Direction.SW;
+                                       else if (Math.Abs (e.Position.X - this.Slot.Right) < Interface.BorderThreshold)
+                                               currentDirection = Direction.SE;
+                                       else
+                                               currentDirection = Direction.S;
+                               } else if (Math.Abs (e.Position.X - this.Slot.X) < Interface.BorderThreshold)
+                                       currentDirection = Direction.W;
+                               else if (Math.Abs (e.Position.X - this.Slot.Right) < Interface.BorderThreshold)
+                                       currentDirection = Direction.E;
+                               else
+                                       currentDirection = Direction.None;
+
+                               if (currentDirection != lastDir) {
+                                       switch (currentDirection) {
+                                       case Direction.None:
+                                               otkgw.MouseCursor = XCursor.Default;
+                                               break;
+                                       case Direction.N:
+                                               otkgw.MouseCursor = XCursor.V;
+                                               break;
+                                       case Direction.S:
+                                               otkgw.MouseCursor = XCursor.V;
+                                               break;
+                                       case Direction.E:
+                                               otkgw.MouseCursor = XCursor.H;
+                                               break;
+                                       case Direction.W:
+                                               otkgw.MouseCursor = XCursor.H;
+                                               break;
+                                       case Direction.NW:
+                                               otkgw.MouseCursor = XCursor.NW;
+                                               break;
+                                       case Direction.NE:
+                                               otkgw.MouseCursor = XCursor.NE;
+                                               break;
+                                       case Direction.SW:
+                                               otkgw.MouseCursor = XCursor.SW;
+                                               break;
+                                       case Direction.SE:
+                                               otkgw.MouseCursor = XCursor.SE;
+                                               break;
+                                       }
+                               }                               
+                       }                               
+               }
+               public override void onMouseDown (object sender, MouseButtonEventArgs e)
+               {
+                       base.onMouseDown (sender, e);
+               }
+               public override bool MouseIsIn (Point m)
+               {
+                       return modal ? true : base.MouseIsIn (m);
+               }
+               #endregion
+
+               protected void onMaximized (object sender, EventArgs e){
+                       lock (IFace.LayoutMutex) {
+                               if (!IsMinimized)
+                                       savedBounds = this.LastPaintedSlot;
+                               this.Left = this.Top = 0;
+                               this.RegisterForLayouting (LayoutingType.Positioning);
+                               this.Width = this.Height = Measure.Stretched;
+                               IsMinimized = false;
+                               Resizable = false;
+                               NotifyValueChanged ("ShowNormal", true);
+                               NotifyValueChanged ("ShowMinimize", true);
+                               NotifyValueChanged ("ShowMaximize", false);
+                       }
+
+                       Maximized.Raise (sender, e);
+               }
+               protected void onUnmaximized (object sender, EventArgs e){
+                       lock (IFace.LayoutMutex) {
+                               this.Left = savedBounds.Left;
+                               this.Top = savedBounds.Top;
+                               this.Width = savedBounds.Width;
+                               this.Height = savedBounds.Height;
+                               IsMinimized = false;
+                               Resizable = true;
+                               NotifyValueChanged ("ShowNormal", false);
+                               NotifyValueChanged ("ShowMinimize", true);
+                               NotifyValueChanged ("ShowMaximize", true);
+                       }
+
+                       Unmaximized.Raise (sender, e);
+               }
+               protected void onMinimized (object sender, EventArgs e){
+                       lock (IFace.LayoutMutex) {
+                               if (IsNormal)
+                                       savedBounds = this.LastPaintedSlot;
+                               Width = 200;
+                               Height = 20;
+                               Resizable = false;
+                               IsMinimized = true;
+                               NotifyValueChanged ("ShowNormal", true);
+                               NotifyValueChanged ("ShowMinimize", false);
+                               NotifyValueChanged ("ShowMaximize", true);
+                       }
+
+                       Minimize.Raise (sender, e);
+               }
+               protected virtual void onBorderMouseLeave (object sender, MouseMoveEventArgs e)
+               {
+                       hoverBorder = false;
+                       currentDirection = Direction.None;
+                       IFace.MouseCursor = XCursor.Default;
+               }
+               protected virtual void onBorderMouseEnter (object sender, MouseMoveEventArgs e)
+               {
+                       hoverBorder = true;
+               }
+
+
+               protected void butQuitPress (object sender, MouseButtonEventArgs e)
+               {
+                       IFace.MouseCursor = XCursor.Default;
+                       close ();
+               }
+
+               protected virtual void close(){
+                       Closing.Raise (this, null);
+                       if (Parent is Interface)
+                               (Parent as Interface).DeleteWidget (this);
+                       else {
+                               GraphicObject p = Parent as GraphicObject;
+                               if (p is Group) {
+                                       lock (IFace.UpdateMutex) {
+                                               RegisterClip (p.ScreenCoordinates (p.LastPaintedSlot));
+                                               (p as Group).DeleteChild (this);
+                                       }
+                                       //(Parent as Group).RegisterForRedraw ();
+                               } else if (Parent is PrivateContainer)
+                                       (Parent as Container).Child = null;
+                       }
+               }
+
+               public static Window Show (Interface iface, string imlPath, bool modal = false){
+                       lock (iface.UpdateMutex) {
+                               Window w = iface.AddWidget (imlPath) as Window;
+                               w.Modal = modal;
+                               return w;
+                       }
+               }
+       }
+}
+
diff --git a/Crow/src/GraphicObjects/Wrapper.cs b/Crow/src/GraphicObjects/Wrapper.cs
new file mode 100644 (file)
index 0000000..a7f5f73
--- /dev/null
@@ -0,0 +1,251 @@
+//
+// Wrapper.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+
+namespace Crow
+{
+       /// <summary>
+       /// group control that arrange its children in a direction and jump to
+       /// the next line or row when no room is left
+       /// </summary>
+       public class Wrapper : GenericStack
+       {
+               #region CTOR
+               protected Wrapper() : base(){}
+               public Wrapper (Interface iface) : base(iface){}
+               #endregion
+
+               #region Group Overrides
+               public override void ChildrenLayoutingConstraints (ref LayoutingType layoutType)
+               {
+                       layoutType &= (~LayoutingType.Positioning);
+               }
+               public override void ComputeChildrenPositions()
+               {
+                       int dx = 0;
+                       int dy = 0;
+
+                       if (Orientation == Orientation.Vertical) {
+                               int tallestChild = 0;
+                               foreach (GraphicObject c in Children) {
+                                       if (!c.Visible)
+                                               continue;
+                                       if (dx + c.Slot.Width > ClientRectangle.Width) {
+                                               dx = 0;
+                                               dy += tallestChild + Spacing;
+                                               c.Slot.X = dx;
+                                               c.Slot.Y = dy;
+                                               tallestChild = c.Slot.Height;
+                                       } else {
+                                               if (tallestChild < c.Slot.Height)
+                                                       tallestChild = c.Slot.Height;
+                                               c.Slot.X = dx;
+                                               c.Slot.Y = dy;
+                                       }
+                                       dx += c.Slot.Width + Spacing;
+                               }
+                       } else {
+                               int largestChild = 0;
+                               foreach (GraphicObject c in Children) {
+                                       if (!c.Visible)
+                                               continue;
+                                       if (dy + c.Slot.Height > ClientRectangle.Height) {
+                                               dy = 0;
+                                               dx += largestChild + Spacing;
+                                               c.Slot.X = dx;
+                                               c.Slot.Y = dy;
+                                               largestChild = c.Slot.Width;
+                                       } else {
+                                               if (largestChild < c.Slot.Width)
+                                                       largestChild = c.Slot.Width;
+                                               c.Slot.X = dx;
+                                               c.Slot.Y = dy;
+                                       }
+                                       dy += c.Slot.Height + Spacing;
+                               }
+                       }
+                       IsDirty = true;
+               }
+               public override void OnChildLayoutChanges (object sender, LayoutingEventArgs arg)
+               {
+                       //children can't stretch in a wrapper
+                       GraphicObject go = sender as GraphicObject;
+                       //System.Diagnostics.Debug.WriteLine ("wrapper child layout change: " + go.LastSlots.ToString() + " => " + go.Slot.ToString());
+                       switch (arg.LayoutType) {
+                       case LayoutingType.Width:
+                               if (Orientation == Orientation.Horizontal && go.Width.Units == Unit.Percent){
+                                       go.Width = Measure.Fit;
+                                       return;
+                               }
+                               this.RegisterForLayouting (LayoutingType.Width);
+                               break;
+                       case LayoutingType.Height:
+                               if (Orientation == Orientation.Vertical && go.Height.IsRelativeToParent) {
+                                       go.Height = Measure.Fit;
+                                       return;
+                               }
+                               this.RegisterForLayouting (LayoutingType.Height);
+                               break;
+                       default:
+                               return;
+                       }
+                       this.RegisterForLayouting (LayoutingType.ArrangeChildren);
+               }
+               #endregion
+
+               #region GraphicObject Overrides
+               protected override int measureRawSize (LayoutingType lt)
+               {
+                       int tmp = 0;
+                       //Wrapper can't fit in the opposite direction of the wrapper, this func is called only if Fit
+                       if (lt == LayoutingType.Width) {
+                               if (Orientation == Orientation.Vertical) {
+                                       Width = Measure.Stretched;
+                                       return -1;
+                               } else if (RegisteredLayoutings.HasFlag (LayoutingType.Height))
+                                       return -1;
+                               else {
+                                       int dy = 0;
+                                       int largestChild = 0;
+
+                                       childrenRWLock.EnterReadLock();
+
+                                       foreach (GraphicObject c in Children) {
+                                               if (!c.Visible)
+                                                       continue;
+                                               if (c.Height.IsRelativeToParent &&
+                                                   c.RegisteredLayoutings.HasFlag (LayoutingType.Height)) {
+                                                       childrenRWLock.ExitReadLock();
+                                                       return -1;
+                                               }
+                                               if (dy + c.Slot.Height > ClientRectangle.Height) {
+                                                       dy = 0;
+                                                       tmp += largestChild + Spacing;
+                                                       largestChild = c.Slot.Width;
+                                               } else if (largestChild < c.Slot.Width)
+                                                       largestChild = c.Slot.Width;
+
+                                               dy += c.Slot.Height + Spacing;
+                                       }
+
+                                       childrenRWLock.ExitReadLock ();
+
+                                       if (dy == 0)
+                                               tmp -= Spacing;
+                                       return tmp + largestChild + 2 * Margin;
+                               }
+                       } else if (Orientation == Orientation.Horizontal) {
+                               Height = Measure.Stretched;
+                               return -1;
+                       } else if (RegisteredLayoutings.HasFlag (LayoutingType.Width))
+                               return -1;
+                       else {
+                               int dx = 0;
+                               int tallestChild = 0;
+
+                               childrenRWLock.EnterReadLock();
+
+                               foreach (GraphicObject c in Children) {
+                                       if (!c.Visible)
+                                               continue;
+                                       if (c.Width.IsRelativeToParent &&
+                                           c.RegisteredLayoutings.HasFlag (LayoutingType.Width)) {
+                                               childrenRWLock.ExitReadLock();
+                                               return -1;
+                                       }
+                                       if (dx + c.Slot.Width > ClientRectangle.Width) {
+                                               dx = 0;
+                                               tmp += tallestChild + Spacing;
+                                               tallestChild = c.Slot.Height;
+                                       } else if (tallestChild < c.Slot.Height)
+                                               tallestChild = c.Slot.Height;
+
+                                       dx += c.Slot.Width + Spacing;
+                               }
+
+                               childrenRWLock.ExitReadLock();
+
+                               if (dx == 0)
+                                       tmp -= Spacing;
+                               return tmp + tallestChild + 2 * Margin;
+                       }
+               }
+
+               public override bool UpdateLayout (LayoutingType layoutType)
+               {
+                       RegisteredLayoutings &= (~layoutType);
+
+                       if (layoutType == LayoutingType.ArrangeChildren) {
+                               if ((RegisteredLayoutings & LayoutingType.Sizing) != 0)
+                                       return false;
+
+                               ComputeChildrenPositions ();
+
+                               //if no layouting remains in queue for item, registre for redraw
+                               if (RegisteredLayoutings == LayoutingType.None && IsDirty)
+                                       IFace.EnqueueForRepaint (this);
+
+                               return true;
+                       }
+
+                       return base.UpdateLayout(layoutType);
+               }
+               public override void OnLayoutChanges (LayoutingType layoutType)
+               {
+                       #if DEBUG_LAYOUTING
+                       IFace.currentLQI.Slot = LastSlots;
+                       IFace.currentLQI.Slot = Slot;
+                       #endif
+                       switch (layoutType) {
+                       case LayoutingType.Width:
+                               foreach (GraphicObject c in Children) {
+                                       if (c.Width.IsRelativeToParent)
+                                               c.RegisterForLayouting (LayoutingType.Width);
+                               }
+                               if (Height == Measure.Fit)
+                                       RegisterForLayouting (LayoutingType.Height);
+                               RegisterForLayouting (LayoutingType.X);
+                               break;
+                       case LayoutingType.Height:
+                               foreach (GraphicObject c in Children) {
+                                       if (c.Height.IsRelativeToParent)
+                                               c.RegisterForLayouting (LayoutingType.Height);
+                               }
+                               if (Width == Measure.Fit)
+                                       RegisterForLayouting (LayoutingType.Width);
+                               RegisterForLayouting (LayoutingType.Y);
+                               break;
+                       default:
+                               return;
+                       }
+                       RegisterForLayouting (LayoutingType.ArrangeChildren);
+                       raiseLayoutChanged (new LayoutingEventArgs (layoutType));
+               }
+               #endregion
+       }
+}
+
diff --git a/Crow/src/GraphicObjects/XmlIgnoreAttribute.cs b/Crow/src/GraphicObjects/XmlIgnoreAttribute.cs
new file mode 100644 (file)
index 0000000..29e5bf6
--- /dev/null
@@ -0,0 +1,34 @@
+//
+// Expandable.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+
+namespace Crow
+{
+    public class XmlIgnoreAttribute : Attribute
+    {
+    }
+}
\ No newline at end of file
diff --git a/Crow/src/IListChanged.cs b/Crow/src/IListChanged.cs
new file mode 100644 (file)
index 0000000..b2b2337
--- /dev/null
@@ -0,0 +1,43 @@
+//
+// IListChanged.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp_bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+using System;
+
+namespace Crow
+{
+       public class ListChangedEventArg : EventArgs {
+               public int Index;
+               public object Element;
+               public ListChangedEventArg (int index, object element) {
+                       Index = index;
+                       Element = element;
+               }
+       }
+       public interface IObservableList {
+               event EventHandler<ListChangedEventArg> ListAdd;
+               event EventHandler<ListChangedEventArg> ListRemove;             
+       }
+}
+
diff --git a/Crow/src/IML/BindingDefinition.cs b/Crow/src/IML/BindingDefinition.cs
new file mode 100644 (file)
index 0000000..075b80b
--- /dev/null
@@ -0,0 +1,90 @@
+//
+// BindingDefinition.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+
+namespace Crow.IML
+{
+       /// <summary>
+       /// store binding source and target addresses and member names
+       /// </summary>
+       public class BindingDefinition
+       {
+               public NodeAddress SourceNA = null;
+               public string SourceMember = "";
+               public NodeAddress TargetNA = null;
+               public string TargetMember = "";
+               public string TargetName = "";
+               public bool TwoWay = false;
+
+               #region CTOR
+               public BindingDefinition (NodeAddress _sourceNA, string _sourceMember){
+                       SourceNA = _sourceNA;
+                       SourceMember = _sourceMember;
+               }
+               public BindingDefinition (NodeAddress _sourceNA, string _sourceMember, NodeAddress _targetNA, string _targetMember, string _targetName = "", bool _twoWay = false)
+               {
+                       SourceNA = _sourceNA;
+                       SourceMember = _sourceMember;
+                       TargetNA = _targetNA;
+                       TargetMember = _targetMember;
+                       TargetName = _targetName;
+                       TwoWay = _twoWay;
+               }
+               #endregion
+
+               public bool IsDataSourceBinding { get { return TargetNA == null; }}
+               public bool IsTemplateBinding { get { return IsDataSourceBinding ? false : TargetNA.Count == 0; }}
+               public bool HasUnresolvedTargetName { get { return !string.IsNullOrEmpty(TargetName); }}
+               public MemberAddress SourceMemberAddress { get { return new MemberAddress (SourceNA, SourceMember);}}
+               public MemberAddress TargetMemberAddress { get { return new MemberAddress (TargetNA, TargetMember);}}
+
+               /// <summary>
+               /// replace the target node address with corresponding named node address, and clear the target name once resolved
+               /// </summary>
+               /// <param name="newTargetNA">Named Node</param>
+               public void ResolveTargetName(NodeAddress newTargetNA){
+                       TargetNA = newTargetNA;
+                       TargetName = "";
+               }
+
+               public override string ToString ()
+               {
+                       string tmp = string.Format ("Source:{0}.{1}", SourceNA, SourceMember);
+                       if (TwoWay)
+                               tmp += " <=> ";
+                       else
+                               tmp += " <=  ";
+                                       
+                       if (string.IsNullOrEmpty (TargetName))
+                               tmp += string.Format ("Target:{0}.{1}]", TargetNA, TargetMember);
+                       else
+                               tmp += string.Format ("Target:{0}.{1}.{2}]", TargetNA, TargetName, TargetMember);
+                       return tmp;
+               }
+       }
+}
+
diff --git a/Crow/src/IML/BindingMember.cs b/Crow/src/IML/BindingMember.cs
new file mode 100644 (file)
index 0000000..47cba5f
--- /dev/null
@@ -0,0 +1,191 @@
+//
+// BindingMember.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.Reflection.Emit;
+
+namespace Crow.IML
+{
+       /// <summary>
+       /// Binding expression parser.
+       /// 
+       /// Valid tokens in binding expression:
+       /// - '../' => 1 level up in graphic tree
+       /// - './' or '/' => template root level
+       /// - '.Name1.Name2' current level properties
+       /// - 'name.prop' named descendant in graphic tree, search with 'FindByName' method of GraphicObject
+       /// </summary>
+       public class BindingMember
+       {
+               /// <summary>
+               /// true if expression was enclosed in '
+               /// </summary>
+               public bool IsStringConstant = false;
+               /// <summary>
+               /// Nb level to go up, '-1' for template root
+               /// </summary>
+               public int LevelsUp;
+               /// <summary>
+               /// Remaining string after '/' split, splitted on '.'
+               /// </summary>
+               public string[] Tokens;
+
+               /// <summary>
+               /// Target the template's root node, expression was in the form './name[.name[...]]' or '/name[.name[...]]'
+               /// </summary>
+               public bool IsTemplateBinding { get { return LevelsUp < 0; }}
+
+               /// <summary>
+               /// No level change and expression was '.name'
+               /// </summary>
+               /// <value><c>true</c> if this instance is current node property; otherwise, <c>false</c>.</value>
+               public bool IsCurrentNodeProperty {
+                       get {
+                               return LevelsUp == 0 && ( Tokens.Length == 2 && string.IsNullOrEmpty(Tokens[0]));
+                       }
+               }
+               /// <summary>
+               /// no level change, and only a single name in Tokens[], that's dataSource member if property binding
+               /// </summary>
+               public bool IsSingleName { get { return LevelsUp == 0 && Tokens.Length == 1; }}
+
+               #region CTOR
+               /// <summary>
+               /// Initializes a new instance of BindingMember.
+               /// </summary>
+               public BindingMember (){}
+               /// <summary>
+               /// Initializes a new instance of BindingMember by parsing the string passed as argument
+               /// </summary>
+               /// <param name="expression">binding expression</param>
+               public BindingMember (string expression){
+                       if (string.IsNullOrEmpty (expression))
+                               return;
+
+                       string[] splitedExp = expression.Trim().Split ('/');
+
+                       int ptr = 0;
+                       if (splitedExp.Length == 1) {
+                               if (splitedExp [0].StartsWith ("\'")) {
+                                       if (!splitedExp [0].EndsWith ("\'"))
+                                               throw new Exception (string.Format
+                                                       ("IML:malformed string constant in binding expression: {0}", splitedExp [0]));
+                                       Tokens = new string[] { splitedExp [0].Substring (1, splitedExp [0].Length - 2) };
+                                       IsStringConstant = true;
+                                       return;
+                               }
+                       } else if (string.IsNullOrEmpty (splitedExp [0])) {
+                               ptr++;
+                       } else {
+                                if (splitedExp [0] == ".") {//template root
+                                       LevelsUp = -1;
+                                       ptr++;
+                               } else {
+                                       while (splitedExp [ptr] == "..")
+                                               ptr++;
+                                       LevelsUp = ptr;
+                               }
+                       }
+                       if (ptr != splitedExp.Length - 1)
+                               throw new Exception ("invalid expresion: " + expression);
+                       Tokens = splitedExp [ptr].Split ('.');
+               }
+               #endregion
+
+               /// <summary>
+               /// Emits the MSIL instructions to get the target of the binding expression
+               /// </summary>
+               /// <param name="il">current MSIL generator</param>
+               /// <param name="cancel">cancel branching in MSIL if something go wrong</param>
+               public void emitGetTarget(ILGenerator il, System.Reflection.Emit.Label cancel){
+
+                       if (IsTemplateBinding) {
+                               System.Reflection.Emit.Label nextLogicParent = il.DefineLabel ();
+                               il.MarkLabel (nextLogicParent);
+                               il.Emit (OpCodes.Callvirt, CompilerServices.miGetLogicalParent);
+                               il.Emit (OpCodes.Dup);
+                               il.Emit (OpCodes.Brfalse, cancel);
+                               il.Emit (OpCodes.Isinst, typeof(TemplatedControl));
+                               il.Emit (OpCodes.Dup);
+                               il.Emit (OpCodes.Brfalse, nextLogicParent);
+                       } else if (LevelsUp > 0) {//go upward in logical tree
+                               il.Emit (OpCodes.Ldc_I4, LevelsUp);//push arg 2 of goUpLevels
+                               il.Emit (OpCodes.Call, CompilerServices.miGoUpLevels);
+                               //test if null
+                               il.Emit (OpCodes.Dup);
+                               il.Emit (OpCodes.Brfalse, cancel);
+                       }
+
+                       if (!string.IsNullOrEmpty (Tokens [0])) {//find by name
+                               il.Emit (OpCodes.Ldstr, Tokens [0]);
+                               il.Emit (OpCodes.Callvirt, CompilerServices.miFindByName);
+                               il.Emit (OpCodes.Dup);
+                               il.Emit (OpCodes.Brfalse, cancel);
+                       }
+
+                       for (int i = 1; i < Tokens.Length -1; i++) {
+                               System.Reflection.Emit.Label miOK = il.DefineLabel ();
+                               il.Emit (OpCodes.Dup);//duplicate instance
+                               il.Emit (OpCodes.Ldstr, Tokens [i]);//load member name
+                               il.Emit (OpCodes.Call, CompilerServices.miGetMembIinfoWithRefx);
+                               il.Emit (OpCodes.Dup);
+                               il.Emit (OpCodes.Brtrue, miOK);
+                               il.Emit (OpCodes.Pop);//pop dup instance
+                               il.Emit (OpCodes.Br, cancel);
+                               il.MarkLabel (miOK);
+                               il.Emit (OpCodes.Call, CompilerServices.miGetValWithRefx);
+                               il.Emit (OpCodes.Dup);
+                               il.Emit (OpCodes.Brfalse, cancel);
+                       }
+               }
+               /// <summary>
+               /// Emit the MSIL instructions to get the target property of the binding expression
+               /// </summary>
+               /// <param name="il">current MSIL generator</param>
+               /// <param name="cancel">cancel branching in MSIL if something go wrong</param>
+               public void emitGetProperty(ILGenerator il, System.Reflection.Emit.Label cancel) {
+                       System.Reflection.Emit.Label miOK = il.DefineLabel ();
+                       il.Emit (OpCodes.Dup);//duplicate instance
+                       il.Emit (OpCodes.Ldstr, Tokens [Tokens.Length -1]);//load member name
+                       il.Emit (OpCodes.Call, CompilerServices.miGetMembIinfoWithRefx);
+                       il.Emit (OpCodes.Dup);
+                       il.Emit (OpCodes.Brtrue, miOK);
+                       il.Emit (OpCodes.Pop);//pop dup instance
+                       il.Emit (OpCodes.Br, cancel);
+                       il.MarkLabel (miOK);
+                       il.Emit (OpCodes.Call, CompilerServices.miGetValWithRefx);
+               }
+               /// <summary>
+               /// Emit the MSIL instructions to set the target property of the binding expression
+               /// </summary>
+               /// <param name="il">current MSIL generator</param>
+               public void emitSetProperty(ILGenerator il) {
+                       il.Emit (OpCodes.Ldstr, Tokens [Tokens.Length -1]);//load member name
+                       il.Emit (OpCodes.Call, CompilerServices.miSetValWithRefx);
+               }
+       }
+}
+
diff --git a/Crow/src/IML/EventBinding.cs b/Crow/src/IML/EventBinding.cs
new file mode 100644 (file)
index 0000000..41e0c96
--- /dev/null
@@ -0,0 +1,45 @@
+//
+// EventBinding.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.Reflection;
+
+namespace Crow.IML
+{
+       public class EventBinding : BindingDefinition
+       {
+               public EventInfo SourceEvent;
+
+               #region CTOR
+               public EventBinding (NodeAddress _sourceNA, EventInfo _sourceEvt, NodeAddress _targetNA, string _targetMember, string _targetName = "")
+                       : base (_sourceNA, _sourceEvt.Name, _targetNA, _targetMember, _targetName)
+               {
+                       SourceEvent = _sourceEvt;
+               }
+               #endregion
+       }
+}
+
diff --git a/Crow/src/IML/IMLContext.cs b/Crow/src/IML/IMLContext.cs
new file mode 100644 (file)
index 0000000..6042e6d
--- /dev/null
@@ -0,0 +1,230 @@
+//
+// Context.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.Collections.Generic;
+using System.Reflection;
+using System.Reflection.Emit;
+using System.Xml;
+
+namespace Crow.IML
+{
+       public class DataSourceBinding {
+               public bool TwoWay;
+               public MemberAddress Source;
+               public string DataSourceMember;
+       }
+       /// <summary>
+       /// Context while parsing IML, this will store what's needed only while parsing and not during instancing
+       /// </summary>
+       public class IMLContext
+       {
+               public XmlReader reader = null;
+               public int curLine = 0;
+               public Type RootType = null;
+
+               public DynamicMethod dm = null;
+               public ILGenerator il = null;
+               //public SubNodeType curSubNodeType;
+               public NodeStack nodesStack = new NodeStack ();
+
+               /// <summary> store addresses of named node for name resolution at end of parsing </summary>
+               public Dictionary<string, List<NodeAddress>> Names  = new Dictionary<string, List<NodeAddress>>();
+               /// <summary> Store non datasource binding (in tree and template) by origine and orig member </summary>
+               public Dictionary<NodeAddress, Dictionary<string, List<MemberAddress>>> Bindings =
+                       new Dictionary<NodeAddress, Dictionary<string, List<MemberAddress>>>();
+               /// <summary> Store binding with name in target, will be resolved at end of parsing </summary>
+               public List<BindingDefinition> UnresolvedTargets = new List<BindingDefinition>();
+
+
+               public IMLContext (Type rootType)
+               {
+                       RootType = rootType;
+                       dm = new DynamicMethod ("dyn_instantiator",
+                               CompilerServices.TObject, new Type [] { typeof (Instantiator), typeof (Interface) }, true);
+                       il = dm.GetILGenerator (256);
+
+                       il.DeclareLocal (typeof (GraphicObject));
+                       il.Emit (OpCodes.Nop);
+                       //set local GraphicObject to root object
+                       ConstructorInfo ci = rootType.GetConstructor (
+                                       BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public, 
+                                       null, Type.EmptyTypes, null);
+                       if (ci == null)
+                               throw new Exception ("No default parameterless constructor found in " + rootType.Name);                 
+                       il.Emit (OpCodes.Newobj, ci);
+                       il.Emit (OpCodes.Stloc_0);
+                       CompilerServices.emitSetCurInterface (il);
+               }
+
+               public NodeAddress CurrentNodeAddress {
+                       get {
+                               Node[] n = nodesStack.ToArray ();
+                               Array.Reverse (n);
+                               return new NodeAddress(n);
+                       }
+               }
+               public Type CurrentNodeType {
+                       get { return nodesStack.Peek().CrowType; }
+               }
+               public void StorePropertyBinding(NodeAddress origNA, string origMember, NodeAddress destNA, string destMember){
+                       Dictionary<string, List<MemberAddress>> nodeBindings = null;
+                       if (Bindings.ContainsKey (origNA))
+                               nodeBindings = Bindings [origNA];
+                       else {
+                               nodeBindings = new Dictionary<string, List<MemberAddress>> ();
+                               Bindings [origNA] = nodeBindings;
+                       }
+
+                       if (!nodeBindings.ContainsKey (origMember))
+                               nodeBindings [origMember] = new List<MemberAddress> ();
+                       nodeBindings [origMember].Add (new MemberAddress (destNA, destMember));
+               }
+               public void StorePropertyBinding(BindingDefinition bindDef){
+                       if (bindDef.HasUnresolvedTargetName) {
+                               UnresolvedTargets.Add (bindDef);
+                               return;
+                       }
+                       StorePropertyBinding (bindDef.TargetNA, bindDef.TargetMember, bindDef.SourceNA, bindDef.SourceMember);
+                       if (bindDef.TwoWay)
+                               StorePropertyBinding (bindDef.SourceNA, bindDef.SourceMember, bindDef.TargetNA, bindDef.TargetMember);
+               }
+               public void StoreCurrentName(string name){
+                       if (!Names.ContainsKey(name))
+                               Names[name] = new List<NodeAddress>();
+                       Names[name].Add(CurrentNodeAddress);
+               }
+               public void ResolveNamedTargets(){//TODO:methodinfo fetching is redundant with early parsing
+                       foreach (BindingDefinition bd in UnresolvedTargets) {
+                               if (bd.HasUnresolvedTargetName) {
+                                       try {
+                                               ResolveName (bd);       
+                                       } catch (Exception ex) {
+                                               System.Diagnostics.Debug.WriteLine (ex.ToString ());
+                                               continue;
+                                       }
+                               }
+
+                               if (bd is EventBinding) {
+                                       emitHandlerMethodAddition (bd as EventBinding);
+                                       continue;
+                               }
+
+                               MemberInfo miSource = bd.SourceMemberAddress.member;
+                               if (miSource == null)
+                                       throw new Exception ("Source member '" + bd.SourceMember + "' not found");
+                               StorePropertyBinding (bd);
+                       }
+               }
+               public void ResolveName (BindingDefinition bd){
+
+                       if (!Names.ContainsKey (bd.TargetName))
+                               throw new Exception ("Target Name '" + bd.TargetName + "' not found");
+
+                       NodeAddress resolvedNA = null;
+                       foreach (NodeAddress na in Names[bd.TargetName]) {
+                               bool naMatch = true;
+                               for (int i = 0; i < bd.TargetNA.Count; i++) {
+                                       if (bd.TargetNA [i] != na [i]) {
+                                               naMatch = false;
+                                               break;
+                                       }
+                               }
+                               if (naMatch) {
+                                       resolvedNA = na;
+                                       break;
+                               }
+                       }
+
+                       if (resolvedNA == null)
+                               throw new Exception ("Target Name '" + bd.TargetName + "' not found");
+
+                       bd.ResolveTargetName (resolvedNA);
+               }
+
+               /// <summary>
+               /// Emits cached delegate handler addition in the context of instantiator (ctx)
+               /// </summary>
+               public void emitCachedDelegateHandlerAddition(int index, EventInfo evt, NodeAddress address = null){
+                       il.Emit(OpCodes.Ldloc_0);//load ref to current graphic object
+                       CompilerServices.emitGetInstance (il, address);
+                       il.Emit(OpCodes.Ldarg_0);//load ref to this instanciator onto the stack
+                       il.Emit(OpCodes.Ldfld, CompilerServices.fiCachedDel);
+                       il.Emit(OpCodes.Ldc_I4, index);//load delegate index
+                       il.Emit(OpCodes.Callvirt, CompilerServices.miGetDelegateListItem);
+                       il.Emit(OpCodes.Call, evt.AddMethod);//call add event
+               }
+               /// <summary>
+               /// Emits the handler method addition, done at end of parsing, Loc_0 is root node instance
+               /// </summary>
+               /// <param name="bd">Bd.</param>
+               /// <param name="evt">passed as arg to prevent refetching it for the 3rd time</param>
+               public void emitHandlerMethodAddition(EventBinding bd){
+
+                       //fetch source instance with address for handler addition (as 1st arg of handler.add)
+                       il.Emit (OpCodes.Ldloc_0);//push root
+                       CompilerServices.emitGetInstance (il, bd.SourceNA);
+
+                       il.Emit (OpCodes.Ldloc_0);
+                       CompilerServices.emitGetInstance (il, bd.TargetNA);
+
+                       string[] membs = bd.TargetMember.Split ('.');
+                       for (int i = 0; i < membs.Length - 1; i++) {
+                               il.Emit (OpCodes.Dup);
+                               il.Emit (OpCodes.Ldstr, membs[i]);
+                               il.Emit (OpCodes.Call, CompilerServices.miGetMembIinfoWithRefx);
+                               il.Emit (OpCodes.Call, CompilerServices.miGetValWithRefx);
+                       }
+
+                       //load handlerType of sourceEvent to create handler delegate (1st arg)
+                       il.Emit (OpCodes.Ldtoken, bd.SourceEvent.EventHandlerType);
+                       il.Emit (OpCodes.Call, CompilerServices.miGetTypeFromHandle);
+                       //load methodInfo (3rd arg)
+                       il.Emit (OpCodes.Ldstr, membs[membs.Length-1]);
+                       il.Emit (OpCodes.Call, CompilerServices.miCreateDel);
+                       il.Emit (OpCodes.Call, bd.SourceEvent.AddMethod);//call add event
+               }
+//             public void emitHandlerMethodAddition(EventBinding bd){
+//                     //fetch source instance with address for handler addition (as 1st arg of handler.add)
+//                     il.Emit (OpCodes.Ldloc_0);//push root
+//                     CompilerServices.emitGetInstance (il, bd.SourceNA);
+//
+//                     //load handlerType of sourceEvent to create handler delegate (1st arg)
+//                     il.Emit (OpCodes.Ldtoken, bd.SourceEvent.EventHandlerType);
+//                     il.Emit (OpCodes.Call, CompilerServices.miGetTypeFromHandle);
+//                     //load target the where the method is defined (2nd arg)
+//                     il.Emit (OpCodes.Ldloc_0);
+//                     CompilerServices.emitGetInstance (il, bd.TargetNA);
+//                     //load methodInfo (3rd arg)
+//                     il.Emit (OpCodes.Ldstr, bd.TargetMember);
+//
+//                     il.Emit (OpCodes.Callvirt, CompilerServices.miCreateDel);
+//
+//                     il.Emit (OpCodes.Callvirt, bd.SourceEvent.AddMethod);//call add event
+//             }
+//
+       }
+}
\ No newline at end of file
diff --git a/Crow/src/IML/MemberAddress.cs b/Crow/src/IML/MemberAddress.cs
new file mode 100644 (file)
index 0000000..f27a8b8
--- /dev/null
@@ -0,0 +1,116 @@
+//
+// MemberAddress.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.Linq;
+using System.Reflection;
+
+namespace Crow.IML
+{
+       /// <summary>
+       /// Address member of a node
+       /// </summary>
+       public struct MemberAddress
+       {
+               public string memberName;
+               public MemberInfo member;
+               public NodeAddress Address;
+
+               public PropertyInfo Property { get { return member as PropertyInfo; }}
+               public bool IsTemplateBinding { get { return Address == null ? false : Address.Count == 0; }}
+//             public string Name {
+//                     get { return memberName; } 
+//                     set { memberName = value; }
+//             }
+
+               public MemberAddress (NodeAddress _address, string _member, bool findMember = true)
+               {
+                       Address = _address;
+                       memberName = _member;
+                       member = null;
+
+                       if (Address == null)
+                               return;
+                       if (Address.Count == 0)
+                               return;
+
+                       if (!findMember)
+                               return;
+                       if (!tryFindMember ())
+                               throw new Exception ("Member Not Found: " + memberName);
+               }
+               public MemberAddress (NodeAddress _address, MemberInfo _member)
+               {
+                       Address = _address;
+                       member = _member;
+                       memberName = "";
+
+                       if (member != null)
+                               memberName = member.Name;
+               }
+
+               #region Equality Compare
+               public override bool Equals (object obj)
+               {
+                       return obj is MemberAddress && this == (MemberAddress)obj;
+               }
+               public override int GetHashCode ()
+               {
+                       return Address.GetHashCode () ^ member.GetHashCode ();
+               }
+               public static bool operator == (MemberAddress x, MemberAddress y)
+               {
+                       return x.Address == y.Address && x.memberName == y.memberName;
+               }
+               public static bool operator != (MemberAddress x, MemberAddress y)
+               {
+                       return !(x == y);
+               }
+               #endregion
+
+               bool tryFindMember ()
+               {
+                       if (member != null)
+                               throw new Exception ("member already found");
+                       if (Address == null)
+                               return false;
+                       if (Address.Count == 0)
+                               return false;
+                       Type t = Address.LastOrDefault ().CrowType;
+                       member = t.GetMember (memberName, BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance).FirstOrDefault ();
+
+                       #region search for extensions methods if member not found in type
+                       if (member == null && !string.IsNullOrEmpty (memberName)) {
+                               Assembly a = Assembly.GetExecutingAssembly ();
+                               string mn = memberName;
+                               member = CompilerServices.GetExtensionMethods (a, t).Where (em => em.Name == mn).FirstOrDefault ();
+                       }
+                       #endregion
+
+                       return member != null;
+               }
+       }
+}
diff --git a/Crow/src/IML/Node.cs b/Crow/src/IML/Node.cs
new file mode 100644 (file)
index 0000000..2ca90e8
--- /dev/null
@@ -0,0 +1,101 @@
+//
+// Node.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.Reflection;
+using System.Reflection.Emit;
+using System.Collections.Generic;
+
+namespace Crow.IML
+{
+       /// <summary>
+       /// IML Node are defined with a type and the index in the parent,
+       /// </summary>
+       public struct Node
+       {
+               #region CTOR
+               public Node (Type crowType, int _index = 0)
+               {
+                       CrowType = crowType;
+                       Index = _index;
+               }
+               #endregion
+
+               /// <summary> Current node type</summary>
+               public Type CrowType;
+               /// <summary> Index in parent, -1 for template</summary>
+               public int Index;
+
+               /// <summary>
+               /// retrieve the child addition method depending on the type of this node
+               /// </summary>
+               /// <returns>The child addition method</returns>
+               /// <param name="childIdx">child index or, template root node has index == -1</param>
+               public MethodInfo GetAddMethod(int childIdx){
+                       if (typeof (Group).IsAssignableFrom (CrowType))
+                               return CompilerServices.miAddChild;
+                       if (typeof (Container).IsAssignableFrom (CrowType))
+                               return CompilerServices.miSetChild;
+                       if (typeof (TemplatedContainer).IsAssignableFrom (CrowType))
+                               return childIdx < 0 ? CompilerServices.miLoadTmp : CompilerServices.piContent.GetSetMethod();
+                       if (typeof (TemplatedGroup).IsAssignableFrom (CrowType))
+                               return childIdx < 0 ? CompilerServices.miLoadTmp : CompilerServices.miAddItem;
+                       if (typeof (TemplatedControl).IsAssignableFrom (CrowType))
+                               return CompilerServices.miLoadTmp;
+                       return null;
+               }
+
+               #region Equality Compare
+               public override bool Equals (object obj)
+               {
+                       if (obj == null) 
+                               return false;                   
+                       Node n = (Node)obj;
+                       return CrowType == n.CrowType && Index == n.Index;
+               }
+               public override int GetHashCode ()
+               {
+                       return CrowType.GetHashCode () ^ Index.GetHashCode ();
+               }
+               #endregion
+
+               public bool HasTemplate {
+                       get { return typeof (TemplatedControl).IsAssignableFrom (CrowType);}
+               }
+               public bool IsTemplatedGroup {
+                       get { return typeof (TemplatedGroup).IsAssignableFrom (CrowType);}
+               }
+
+               public static implicit operator string (Node sn)
+               {
+                       return sn.ToString ();
+               }
+               public override string ToString ()
+               {
+                       return string.Format ("{0}.{1}", CrowType.FullName, Index);
+               }
+       }
+}
diff --git a/Crow/src/IML/NodeAddress.cs b/Crow/src/IML/NodeAddress.cs
new file mode 100644 (file)
index 0000000..450a9d2
--- /dev/null
@@ -0,0 +1,148 @@
+//
+// NodeAddress.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection;
+using System.Reflection.Emit;
+
+namespace Crow.IML
+{
+       /// <summary>
+       /// Node address is a list of nodes from root to leaf defining a unique node
+       /// </summary>
+       public class NodeAddress : List<Node>
+       {
+               #region CTOR
+               public NodeAddress (Node[] nodes) : base(nodes) {}
+               #endregion
+
+               public Type NodeType { get { return Count == 0 ? null : this[this.Count -1].CrowType; }}
+
+               /// <summary>
+               /// Gets the node adress from binding expression starting from this node
+               /// and return in expression remaining part
+               /// </summary>
+               public NodeAddress ResolveExpression (ref string expression){
+                       int ptr = this.Count - 1;
+                       string[] splitedExp = expression.Split ('/');
+
+                       if (splitedExp.Length < 2)//dataSource binding
+                               return null;
+
+                       if (!string.IsNullOrEmpty (splitedExp [0])) {//else bind on current node
+                               //return new NodeAddress (this.Take(ptr+1).ToArray());
+                               if (splitedExp [0] == ".") {//search template root
+                                       ptr--;
+                                       while (ptr >= 0) {
+                                               if (typeof(TemplatedControl).IsAssignableFrom (this [ptr].CrowType))
+                                                       break;
+                                               ptr--;
+                                       }
+                               } else if (splitedExp [0] == "..") { //search starting at current node
+                                       int levelUp = splitedExp.Length - 1;
+                                       if (levelUp > ptr + 1)
+                                               throw new Exception ("Binding error: try to bind outside IML source");
+                                       ptr -= levelUp;
+                               }
+                       }
+                       expression = splitedExp [splitedExp.Length - 1];
+                       //TODO:change Template special address identified with Nodecount = 0 to something not using array count to 0,
+                       //here linq is working without limits checking in compile option
+                       //but defining a 0 capacity array with limits cheking enabled, cause 'out of memory' error
+                       return new NodeAddress (this.Take(ptr+1).ToArray());//[ptr+1];
+                       //Array.Copy (sourceAddr.ToArray (), targetNode, ptr + 1);
+                       //return new NodeAddress (targetNode);
+               }
+               /// <summary>
+               /// get BindingDefinition from binding expression
+               /// </summary>
+               public BindingDefinition GetBindingDef(string sourceMember, string expression){
+                       BindingDefinition bindingDef = new BindingDefinition(this, sourceMember);
+                       if (string.IsNullOrEmpty (expression)) {
+                               return bindingDef;
+                       } else {
+                               if (expression.StartsWith ("²")) {
+                                       bindingDef.TwoWay = true;
+                                       expression = expression.Substring (1);
+                               }
+
+                               string exp = expression;
+                               bindingDef.TargetNA = this.ResolveExpression (ref exp);
+
+                               string [] bindTrg = exp.Split ('.');
+
+                               if (bindTrg.Length == 0)
+                                       throw new Exception ("invalid binding expression: " + expression);
+                               if (bindTrg.Length == 1)
+                                       bindingDef.TargetMember = bindTrg [0];
+                               else {
+                                       if (!string.IsNullOrEmpty(bindTrg[0]))//searchByName
+                                               bindingDef.TargetName = bindTrg[0];
+
+                                       bindingDef.TargetMember = exp.Substring (bindTrg[0].Length + 1);
+                               }
+                       }
+
+                       return bindingDef;
+               }
+
+               #region Object overrides
+               public override bool Equals (object obj)
+               {
+                       if (obj == null) 
+                               return false;
+                       
+                       NodeAddress na = (NodeAddress)obj;
+                       return this.SequenceEqual (na);
+               }
+               public override int GetHashCode ()
+               {
+                       unchecked {
+                               int hash = 19;
+                               foreach (Node n in this)
+                                       hash = hash * 31 + (n == null ? 0 : n.GetHashCode ());  
+                               return hash;
+                       }
+               }
+               public override string ToString ()
+               {
+                       string tmp = "";
+                       foreach (Node n in this)
+                               tmp += string.Format ("{0};", n.Index);                 
+                       return tmp;
+               }
+               #endregion
+       }
+
+       public class NamedNodeAddress : NodeAddress {
+               public string Name;
+               public NamedNodeAddress(string name, Node[] nodes) : base(nodes){
+                       Name = name;
+               }
+       }
+}
diff --git a/Crow/src/IML/NodeStack.cs b/Crow/src/IML/NodeStack.cs
new file mode 100644 (file)
index 0000000..80e9156
--- /dev/null
@@ -0,0 +1,50 @@
+//
+// NodeStack.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.Collections.Generic;
+
+namespace Crow.IML
+{
+       public class NodeStack : Stack<Node>
+       {
+               public NodeStack () : base()
+               {
+               }
+               public void IncrementCurrentNodeIndex(){
+                       Node n = this.Pop();
+                       this.Push (new Node (n.CrowType, n.Index + 1));
+               }
+               public void DecrementCurrentNodeIndex(){
+                       Node n = this.Pop();
+                       this.Push (new Node (n.CrowType, n.Index - 1));
+               }
+               public void ResetCurrentNodeIndex(){                    
+                       this.Push (new Node (this.Pop().CrowType));
+               }
+       }
+}
+
diff --git a/Crow/src/IMLAttributes.cs b/Crow/src/IMLAttributes.cs
new file mode 100644 (file)
index 0000000..929fd4f
--- /dev/null
@@ -0,0 +1,44 @@
+//
+// IMLAttributes.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp_bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+using System;
+
+namespace Crow
+{
+       public class DesignIgnore : Attribute
+       {               
+       }
+
+       public class DesignCategory : Attribute
+       {
+               public string Name { get; set; }
+
+               public DesignCategory (string name)
+               {
+                       Name = name;
+               }
+       }
+}
+
diff --git a/Crow/src/Input/ButtonState.cs b/Crow/src/Input/ButtonState.cs
new file mode 100644 (file)
index 0000000..17849ca
--- /dev/null
@@ -0,0 +1,45 @@
+ #region License
+ //
+ // The Open Toolkit Library License
+ //
+ // Copyright (c) 2006 - 2010 the Open Toolkit library.
+ //
+ // Permission is hereby granted, free of charge, to any person obtaining a copy
+ // of this software and associated documentation files (the "Software"), to deal
+ // in the Software without restriction, including without limitation the rights to
+ // use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ // the Software, and to permit persons to whom the Software is furnished to do
+ // so, subject to the following conditions:
+ //
+ // The above copyright notice and this permission notice shall be included in all
+ // copies or substantial portions of the Software.
+ //
+ // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ // OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ // WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ // OTHER DEALINGS IN THE SOFTWARE.
+ //
+ #endregion
+
+namespace Crow
+{
+    /// <summary>
+    /// Enumerates possible mouse button states.
+    /// </summary>
+    public enum ButtonState
+    {
+       /// <summary>
+       /// Indicates that a mouse button is released.
+       /// </summary>
+       Released = 0,
+
+       /// <summary>
+       /// Indicates that a mouse button is pressed.
+       /// </summary>
+       Pressed = 1
+    }
+}
diff --git a/Crow/src/Input/Buttons.cs b/Crow/src/Input/Buttons.cs
new file mode 100644 (file)
index 0000000..ebf3bc4
--- /dev/null
@@ -0,0 +1,166 @@
+//
+// GamePadButton.cs
+//
+// Author:
+//       robert <${AuthorEmail}>
+//
+// Copyright (c) 2012 robert
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+using System;
+
+namespace Crow
+{
+    /// <summary>
+    /// Enumerates available buttons for a <c>GamePad</c> device.
+    /// </summary>
+    [Flags]
+    public enum Buttons
+    {
+       /// <summary>
+       /// DPad up direction button
+       /// </summary>
+       DPadUp = 1 << 0,
+
+       /// <summary>
+       /// DPad down direction button
+       /// </summary>
+       DPadDown = 1 << 1,
+
+       /// <summary>
+       /// DPad left direction button
+       /// </summary>
+       DPadLeft = 1 << 2,
+
+       /// <summary>
+       /// DPad right direction button
+       /// </summary>
+       DPadRight = 1 << 3,
+
+       /// <summary>
+       /// Start button
+       /// </summary>
+       Start = 1 << 4,
+
+       /// <summary>
+       /// Back button
+       /// </summary>
+       Back = 1 << 5,
+
+       /// <summary>
+       /// Left stick button
+       /// </summary>
+       LeftStick = 1 << 6,
+
+       /// <summary>
+       /// Right stick button
+       /// </summary>
+       RightStick = 1 << 7,
+
+       /// <summary>
+       /// Left shoulder button
+       /// </summary>
+       LeftShoulder = 1 << 8,
+
+       /// <summary>
+       /// Right shoulder button
+       /// </summary>
+       RightShoulder = 1 << 9,
+
+       /// <summary>
+       /// Home button
+       /// </summary>
+       Home = 1 << 11,
+
+       /// <summary>
+       /// Home button
+       /// </summary>
+       BigButton = Home,
+
+       /// <summary>
+       /// A button
+       /// </summary>
+       A = 1 << 12,
+
+       /// <summary>
+       /// B button
+       /// </summary>
+       B = 1 << 13,
+
+       /// <summary>
+       /// X button
+       /// </summary>
+       X = 1 << 14,
+
+       /// <summary>
+       /// Y button
+       /// </summary>
+       Y = 1 << 15,
+
+       /// <summary>
+       /// Left thumbstick left direction button
+       /// </summary>
+       LeftThumbstickLeft = 1 << 21,
+
+       /// <summary>
+       /// Right trigger button
+       /// </summary>
+       RightTrigger = 1 << 22,
+
+       /// <summary>
+       /// Left trigger button
+       /// </summary>
+       LeftTrigger = 1 << 23,
+
+       /// <summary>
+       /// Right thumbstick up direction button
+       /// </summary>
+       RightThumbstickUp = 1 << 24,
+
+       /// <summary>
+       /// Right thumbstick down direction button
+       /// </summary>
+       RightThumbstickDown = 1 << 25,
+
+       /// <summary>
+       /// Right stick right direction button
+       /// </summary>
+       RightThumbstickRight = 1 << 26,
+
+       /// <summary>
+       /// Right stick left direction button
+       /// </summary>
+       RightThumbstickLeft = 1 << 27,
+
+       /// <summary>
+       /// Left stick up direction button
+       /// </summary>
+       LeftThumbstickUp = 1 << 28,
+
+       /// <summary>
+       /// Left stick down direction button
+       /// </summary>
+       LeftThumbstickDown = 1 << 29,
+
+       /// <summary>
+       /// Left stick right direction button
+       /// </summary>
+       LeftThumbstickRight = 1 << 30,
+    }
+}
diff --git a/Crow/src/Input/Key.cs b/Crow/src/Input/Key.cs
new file mode 100644 (file)
index 0000000..ee2cfb6
--- /dev/null
@@ -0,0 +1,2442 @@
+ #region License
+ //
+ // The Open Toolkit Library License
+ //
+ // Copyright (c) 2006 - 2009 the Open Toolkit library.
+ //
+ // Permission is hereby granted, free of charge, to any person obtaining a copy
+ // of this software and associated documentation files (the "Software"), to deal
+ // in the Software without restriction, including without limitation the rights to
+ // use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ // the Software, and to permit persons to whom the Software is furnished to do
+ // so, subject to the following conditions:
+ //
+ // The above copyright notice and this permission notice shall be included in all
+ // copies or substantial portions of the Software.
+ //
+ // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ // OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ // WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ // OTHER DEALINGS IN THE SOFTWARE.
+ //
+ #endregion
+
+namespace Crow
+{
+    /// <summary>
+    /// The available keyboard keys.
+    /// </summary>
+    public enum Key : int
+    {
+               NoSymbol                                                = 0x000000,
+               VoidSymbol                                              = 0xffffff,
+               BackSpace                                               = 0xff08,
+               Tab                                                             = 0xff09,
+               Linefeed                                                = 0xff0a,
+               Clear                                                   = 0xff0b,
+               Return                                                  = 0xff0d,
+               Pause                                                   = 0xff13,
+               Scroll_Lock                                             = 0xff14,
+               Sys_Req                                                 = 0xff15,
+               Escape                                                  = 0xff1b,
+               Delete                                                  = 0xffff,
+               Multi_key                                               = 0xff20,
+               Codeinput                                               = 0xff37,
+               SingleCandidate                                 = 0xff3c,
+               MultipleCandidate                               = 0xff3d,
+               PreviousCandidate                               = 0xff3e,
+               Kanji                                                   = 0xff21,
+               Muhenkan                                                = 0xff22,
+               Henkan_Mode                                             = 0xff23,
+               Henkan                                                  = 0xff23,
+               Romaji                                                  = 0xff24,
+               Hiragana                                                = 0xff25,
+               Katakana                                                = 0xff26,
+               Hiragana_Katakana                               = 0xff27,
+               Zenkaku                                                 = 0xff28,
+               Hankaku                                                 = 0xff29,
+               Zenkaku_Hankaku                                 = 0xff2a,
+               Touroku                                                 = 0xff2b,
+               Massyo                                                  = 0xff2c,
+               Kana_Lock                                               = 0xff2d,
+               Kana_Shift                                              = 0xff2e,
+               Eisu_Shift                                              = 0xff2f,
+               Eisu_toggle                                             = 0xff30,
+               Kanji_Bangou                                    = 0xff37,
+               Zen_Koho                                                = 0xff3d,
+               Mae_Koho                                                = 0xff3e,
+               Home                                                    = 0xff50,
+               Left                                                    = 0xff51,
+               Up                                                              = 0xff52,
+               Right                                                   = 0xff53,
+               Down                                                    = 0xff54,
+               Prior                                                   = 0xff55,
+               Page_Up                                                 = 0xff55,
+               Next                                                    = 0xff56,
+               Page_Down                                               = 0xff56,
+               End                                                             = 0xff57,
+               Begin                                                   = 0xff58,
+               Select                                                  = 0xff60,
+               Print                                                   = 0xff61,
+               Execute                                                 = 0xff62,
+               Insert                                                  = 0xff63,
+               Undo                                                    = 0xff65,
+               Redo                                                    = 0xff66,
+               Menu                                                    = 0xff67,
+               Find                                                    = 0xff68,
+               Cancel                                                  = 0xff69,
+               Help                                                    = 0xff6a,
+               Break                                                   = 0xff6b,
+               Mode_switch                                             = 0xff7e,
+               script_switch                                   = 0xff7e,
+               Num_Lock                                                = 0xff7f,
+               KP_Space                                                = 0xff80,
+               KP_Tab                                                  = 0xff89,
+               KP_Enter                                                = 0xff8d,
+               KP_F1                                                   = 0xff91,
+               KP_F2                                                   = 0xff92,
+               KP_F3                                                   = 0xff93,
+               KP_F4                                                   = 0xff94,
+               KP_Home                                                 = 0xff95,
+               KP_Left                                                 = 0xff96,
+               KP_Up                                                   = 0xff97,
+               KP_Right                                                = 0xff98,
+               KP_Down                                                 = 0xff99,
+               KP_Prior                                                = 0xff9a,
+               KP_Page_Up                                              = 0xff9a,
+               KP_Next                                                 = 0xff9b,
+               KP_Page_Down                                    = 0xff9b,
+               KP_End                                                  = 0xff9c,
+               KP_Begin                                                = 0xff9d,
+               KP_Insert                                               = 0xff9e,
+               KP_Delete                                               = 0xff9f,
+               KP_Equal                                                = 0xffbd,
+               KP_Multiply                                             = 0xffaa,
+               KP_Add                                                  = 0xffab,
+               KP_Separator                                    = 0xffac,
+               KP_Subtract                                             = 0xffad,
+               KP_Decimal                                              = 0xffae,
+               KP_Divide                                               = 0xffaf,
+               KP_0                                                    = 0xffb0,
+               KP_1                                                    = 0xffb1,
+               KP_2                                                    = 0xffb2,
+               KP_3                                                    = 0xffb3,
+               KP_4                                                    = 0xffb4,
+               KP_5                                                    = 0xffb5,
+               KP_6                                                    = 0xffb6,
+               KP_7                                                    = 0xffb7,
+               KP_8                                                    = 0xffb8,
+               KP_9                                                    = 0xffb9,
+               F1                                                              = 0xffbe,
+               F2                                                              = 0xffbf,
+               F3                                                              = 0xffc0,
+               F4                                                              = 0xffc1,
+               F5                                                              = 0xffc2,
+               F6                                                              = 0xffc3,
+               F7                                                              = 0xffc4,
+               F8                                                              = 0xffc5,
+               F9                                                              = 0xffc6,
+               F10                                                             = 0xffc7,
+               F11                                                             = 0xffc8,
+               L1                                                              = 0xffc8,
+               F12                                                             = 0xffc9,
+               L2                                                              = 0xffc9,
+               F13                                                             = 0xffca,
+               L3                                                              = 0xffca,
+               F14                                                             = 0xffcb,
+               L4                                                              = 0xffcb,
+               F15                                                             = 0xffcc,
+               L5                                                              = 0xffcc,
+               F16                                                             = 0xffcd,
+               L6                                                              = 0xffcd,
+               F17                                                             = 0xffce,
+               L7                                                              = 0xffce,
+               F18                                                             = 0xffcf,
+               L8                                                              = 0xffcf,
+               F19                                                             = 0xffd0,
+               L9                                                              = 0xffd0,
+               F20                                                             = 0xffd1,
+               L10                                                             = 0xffd1,
+               F21                                                             = 0xffd2,
+               R1                                                              = 0xffd2,
+               F22                                                             = 0xffd3,
+               R2                                                              = 0xffd3,
+               F23                                                             = 0xffd4,
+               R3                                                              = 0xffd4,
+               F24                                                             = 0xffd5,
+               R4                                                              = 0xffd5,
+               F25                                                             = 0xffd6,
+               R5                                                              = 0xffd6,
+               F26                                                             = 0xffd7,
+               R6                                                              = 0xffd7,
+               F27                                                             = 0xffd8,
+               R7                                                              = 0xffd8,
+               F28                                                             = 0xffd9,
+               R8                                                              = 0xffd9,
+               F29                                                             = 0xffda,
+               R9                                                              = 0xffda,
+               F30                                                             = 0xffdb,
+               R10                                                             = 0xffdb,
+               F31                                                             = 0xffdc,
+               R11                                                             = 0xffdc,
+               F32                                                             = 0xffdd,
+               R12                                                             = 0xffdd,
+               F33                                                             = 0xffde,
+               R13                                                             = 0xffde,
+               F34                                                             = 0xffdf,
+               R14                                                             = 0xffdf,
+               F35                                                             = 0xffe0,
+               R15                                                             = 0xffe0,
+               Shift_L                                                 = 0xffe1,
+               Shift_R                                                 = 0xffe2,
+               Control_L                                               = 0xffe3,
+               Control_R                                               = 0xffe4,
+               Caps_Lock                                               = 0xffe5,
+               Shift_Lock                                              = 0xffe6,
+               Meta_L                                                  = 0xffe7,
+               Meta_R                                                  = 0xffe8,
+               Alt_L                                                   = 0xffe9,
+               Alt_R                                                   = 0xffea,
+               Super_L                                                 = 0xffeb,
+               Super_R                                                 = 0xffec,
+               Hyper_L                                                 = 0xffed,
+               Hyper_R                                                 = 0xffee,
+               ISO_Lock                                                = 0xfe01,
+               ISO_Level2_Latch                                = 0xfe02,
+               ISO_Level3_Shift                                = 0xfe03,
+               ISO_Level3_Latch                                = 0xfe04,
+               ISO_Level3_Lock                                 = 0xfe05,
+               ISO_Level5_Shift                                = 0xfe11,
+               ISO_Level5_Latch                                = 0xfe12,
+               ISO_Level5_Lock                                 = 0xfe13,
+               ISO_Group_Shift                                 = 0xff7e,
+               ISO_Group_Latch                                 = 0xfe06,
+               ISO_Group_Lock                                  = 0xfe07,
+               ISO_Next_Group                                  = 0xfe08,
+               ISO_Next_Group_Lock                             = 0xfe09,
+               ISO_Prev_Group                                  = 0xfe0a,
+               ISO_Prev_Group_Lock                             = 0xfe0b,
+               ISO_First_Group                                 = 0xfe0c,
+               ISO_First_Group_Lock                    = 0xfe0d,
+               ISO_Last_Group                                  = 0xfe0e,
+               ISO_Last_Group_Lock                             = 0xfe0f,
+               ISO_Left_Tab                                    = 0xfe20,
+               ISO_Move_Line_Up                                = 0xfe21,
+               ISO_Move_Line_Down                              = 0xfe22,
+               ISO_Partial_Line_Up                             = 0xfe23,
+               ISO_Partial_Line_Down                   = 0xfe24,
+               ISO_Partial_Space_Left                  = 0xfe25,
+               ISO_Partial_Space_Right                 = 0xfe26,
+               ISO_Set_Margin_Left                             = 0xfe27,
+               ISO_Set_Margin_Right                    = 0xfe28,
+               ISO_Release_Margin_Left                 = 0xfe29,
+               ISO_Release_Margin_Right                = 0xfe2a,
+               ISO_Release_Both_Margins                = 0xfe2b,
+               ISO_Fast_Cursor_Left                    = 0xfe2c,
+               ISO_Fast_Cursor_Right                   = 0xfe2d,
+               ISO_Fast_Cursor_Up                              = 0xfe2e,
+               ISO_Fast_Cursor_Down                    = 0xfe2f,
+               ISO_Continuous_Underline                = 0xfe30,
+               ISO_Discontinuous_Underline             = 0xfe31,
+               ISO_Emphasize                                   = 0xfe32,
+               ISO_Center_Object                               = 0xfe33,
+               ISO_Enter                                               = 0xfe34,
+               dead_grave                                              = 0xfe50,
+               dead_acute                                              = 0xfe51,
+               dead_circumflex                                 = 0xfe52,
+               dead_tilde                                              = 0xfe53,
+               dead_perispomeni                                = 0xfe53,
+               dead_macron                                             = 0xfe54,
+               dead_breve                                              = 0xfe55,
+               dead_abovedot                                   = 0xfe56,
+               dead_diaeresis                                  = 0xfe57,
+               dead_abovering                                  = 0xfe58,
+               dead_doubleacute                                = 0xfe59,
+               dead_caron                                              = 0xfe5a,
+               dead_cedilla                                    = 0xfe5b,
+               dead_ogonek                                             = 0xfe5c,
+               dead_iota                                               = 0xfe5d,
+               dead_voiced_sound                               = 0xfe5e,
+               dead_semivoiced_sound                   = 0xfe5f,
+               dead_belowdot                                   = 0xfe60,
+               dead_hook                                               = 0xfe61,
+               dead_horn                                               = 0xfe62,
+               dead_stroke                                             = 0xfe63,
+               dead_abovecomma                                 = 0xfe64,
+               dead_psili                                              = 0xfe64,
+               dead_abovereversedcomma                 = 0xfe65,
+               dead_dasia                                              = 0xfe65,
+               dead_doublegrave                                = 0xfe66,
+               dead_belowring                                  = 0xfe67,
+               dead_belowmacron                                = 0xfe68,
+               dead_belowcircumflex                    = 0xfe69,
+               dead_belowtilde                                 = 0xfe6a,
+               dead_belowbreve                                 = 0xfe6b,
+               dead_belowdiaeresis                             = 0xfe6c,
+               dead_invertedbreve                              = 0xfe6d,
+               dead_belowcomma                                 = 0xfe6e,
+               dead_currency                                   = 0xfe6f,
+               dead_lowline                                    = 0xfe90,
+               dead_aboveverticalline                  = 0xfe91,
+               dead_belowverticalline                  = 0xfe92,
+               dead_longsolidusoverlay                 = 0xfe93,
+               dead_a                                                  = 0xfe80,
+               dead_A                                                  = 0xfe81,
+               dead_e                                                  = 0xfe82,
+               dead_E                                                  = 0xfe83,
+               dead_i                                                  = 0xfe84,
+               dead_I                                                  = 0xfe85,
+               dead_o                                                  = 0xfe86,
+               dead_O                                                  = 0xfe87,
+               dead_u                                                  = 0xfe88,
+               dead_U                                                  = 0xfe89,
+               dead_small_schwa                                = 0xfe8a,
+               dead_capital_schwa                              = 0xfe8b,
+               dead_greek                                              = 0xfe8c,
+               First_Virtual_Screen                    = 0xfed0,
+               Prev_Virtual_Screen                             = 0xfed1,
+               Next_Virtual_Screen                             = 0xfed2,
+               Last_Virtual_Screen                             = 0xfed4,
+               Terminate_Server                                = 0xfed5,
+               AccessX_Enable                                  = 0xfe70,
+               AccessX_Feedback_Enable                 = 0xfe71,
+               RepeatKeys_Enable                               = 0xfe72,
+               SlowKeys_Enable                                 = 0xfe73,
+               BounceKeys_Enable                               = 0xfe74,
+               StickyKeys_Enable                               = 0xfe75,
+               MouseKeys_Enable                                = 0xfe76,
+               MouseKeys_Accel_Enable                  = 0xfe77,
+               Overlay1_Enable                                 = 0xfe78,
+               Overlay2_Enable                                 = 0xfe79,
+               AudibleBell_Enable                              = 0xfe7a,
+               Pointer_Left                                    = 0xfee0,
+               Pointer_Right                                   = 0xfee1,
+               Pointer_Up                                              = 0xfee2,
+               Pointer_Down                                    = 0xfee3,
+               Pointer_UpLeft                                  = 0xfee4,
+               Pointer_UpRight                                 = 0xfee5,
+               Pointer_DownLeft                                = 0xfee6,
+               Pointer_DownRight                               = 0xfee7,
+               Pointer_Button_Dflt                             = 0xfee8,
+               Pointer_Button1                                 = 0xfee9,
+               Pointer_Button2                                 = 0xfeea,
+               Pointer_Button3                                 = 0xfeeb,
+               Pointer_Button4                                 = 0xfeec,
+               Pointer_Button5                                 = 0xfeed,
+               Pointer_DblClick_Dflt                   = 0xfeee,
+               Pointer_DblClick1                               = 0xfeef,
+               Pointer_DblClick2                               = 0xfef0,
+               Pointer_DblClick3                               = 0xfef1,
+               Pointer_DblClick4                               = 0xfef2,
+               Pointer_DblClick5                               = 0xfef3,
+               Pointer_Drag_Dflt                               = 0xfef4,
+               Pointer_Drag1                                   = 0xfef5,
+               Pointer_Drag2                                   = 0xfef6,
+               Pointer_Drag3                                   = 0xfef7,
+               Pointer_Drag4                                   = 0xfef8,
+               Pointer_Drag5                                   = 0xfefd,
+               Pointer_EnableKeys                              = 0xfef9,
+               Pointer_Accelerate                              = 0xfefa,
+               Pointer_DfltBtnNext                             = 0xfefb,
+               Pointer_DfltBtnPrev                             = 0xfefc,
+               ch                                                              = 0xfea0,
+               Ch                                                              = 0xfea1,
+               CH                                                              = 0xfea2,
+               c_h                                                             = 0xfea3,
+               C_h                                                             = 0xfea4,
+               C_H                                                             = 0xfea5,
+               key_3270_Duplicate                              = 0xfd01,
+               key_3270_FieldMark                              = 0xfd02,
+               key_3270_Right2                                 = 0xfd03,
+               key_3270_Left2                                  = 0xfd04,
+               key_3270_BackTab                                = 0xfd05,
+               key_3270_EraseEOF                               = 0xfd06,
+               key_3270_EraseInput                             = 0xfd07,
+               key_3270_Reset                                  = 0xfd08,
+               key_3270_Quit                                   = 0xfd09,
+               key_3270_PA1                                    = 0xfd0a,
+               key_3270_PA2                                    = 0xfd0b,
+               key_3270_PA3                                    = 0xfd0c,
+               key_3270_Test                                   = 0xfd0d,
+               key_3270_Attn                                   = 0xfd0e,
+               key_3270_CursorBlink                    = 0xfd0f,
+               key_3270_AltCursor                              = 0xfd10,
+               key_3270_KeyClick                               = 0xfd11,
+               key_3270_Jump                                   = 0xfd12,
+               key_3270_Ident                                  = 0xfd13,
+               key_3270_Rule                                   = 0xfd14,
+               key_3270_Copy                                   = 0xfd15,
+               key_3270_Play                                   = 0xfd16,
+               key_3270_Setup                                  = 0xfd17,
+               key_3270_Record                                 = 0xfd18,
+               key_3270_ChangeScreen                   = 0xfd19,
+               key_3270_DeleteWord                             = 0xfd1a,
+               key_3270_ExSelect                               = 0xfd1b,
+               key_3270_CursorSelect                   = 0xfd1c,
+               key_3270_PrintScreen                    = 0xfd1d,
+               key_3270_Enter                                  = 0xfd1e,
+               space                                                   = 0x0020,
+               exclam                                                  = 0x0021,
+               quotedbl                                                = 0x0022,
+               numbersign                                              = 0x0023,
+               dollar                                                  = 0x0024,
+               percent                                                 = 0x0025,
+               ampersand                                               = 0x0026,
+               apostrophe                                              = 0x0027,
+               quoteright                                              = 0x0027,
+               parenleft                                               = 0x0028,
+               parenright                                              = 0x0029,
+               asterisk                                                = 0x002a,
+               plus                                                    = 0x002b,
+               comma                                                   = 0x002c,
+               minus                                                   = 0x002d,
+               period                                                  = 0x002e,
+               slash                                                   = 0x002f,
+               key_0                                                   = 0x0030,
+               key_1                                                   = 0x0031,
+               key_2                                                   = 0x0032,
+               key_3                                                   = 0x0033,
+               key_4                                                   = 0x0034,
+               key_5                                                   = 0x0035,
+               key_6                                                   = 0x0036,
+               key_7                                                   = 0x0037,
+               key_8                                                   = 0x0038,
+               key_9                                                   = 0x0039,
+               colon                                                   = 0x003a,
+               semicolon                                               = 0x003b,
+               less                                                    = 0x003c,
+               equal                                                   = 0x003d,
+               greater                                                 = 0x003e,
+               question                                                = 0x003f,
+               at                                                              = 0x0040,
+               A                                                               = 0x0041,
+               B                                                               = 0x0042,
+               C                                                               = 0x0043,
+               D                                                               = 0x0044,
+               E                                                               = 0x0045,
+               F                                                               = 0x0046,
+               G                                                               = 0x0047,
+               H                                                               = 0x0048,
+               I                                                               = 0x0049,
+               J                                                               = 0x004a,
+               K                                                               = 0x004b,
+               L                                                               = 0x004c,
+               M                                                               = 0x004d,
+               N                                                               = 0x004e,
+               O                                                               = 0x004f,
+               P                                                               = 0x0050,
+               Q                                                               = 0x0051,
+               R                                                               = 0x0052,
+               S                                                               = 0x0053,
+               T                                                               = 0x0054,
+               U                                                               = 0x0055,
+               V                                                               = 0x0056,
+               W                                                               = 0x0057,
+               X                                                               = 0x0058,
+               Y                                                               = 0x0059,
+               Z                                                               = 0x005a,
+               bracketleft                                             = 0x005b,
+               backslash                                               = 0x005c,
+               bracketright                                    = 0x005d,
+               asciicircum                                             = 0x005e,
+               underscore                                              = 0x005f,
+               grave                                                   = 0x0060,
+               quoteleft                                               = 0x0060,
+               a                                                               = 0x0061,
+               b                                                               = 0x0062,
+               c                                                               = 0x0063,
+               d                                                               = 0x0064,
+               e                                                               = 0x0065,
+               f                                                               = 0x0066,
+               g                                                               = 0x0067,
+               h                                                               = 0x0068,
+               i                                                               = 0x0069,
+               j                                                               = 0x006a,
+               k                                                               = 0x006b,
+               l                                                               = 0x006c,
+               m                                                               = 0x006d,
+               n                                                               = 0x006e,
+               o                                                               = 0x006f,
+               p                                                               = 0x0070,
+               q                                                               = 0x0071,
+               r                                                               = 0x0072,
+               s                                                               = 0x0073,
+               t                                                               = 0x0074,
+               u                                                               = 0x0075,
+               v                                                               = 0x0076,
+               w                                                               = 0x0077,
+               x                                                               = 0x0078,
+               y                                                               = 0x0079,
+               z                                                               = 0x007a,
+               braceleft                                               = 0x007b,
+               bar                                                             = 0x007c,
+               braceright                                              = 0x007d,
+               asciitilde                                              = 0x007e,
+               nobreakspace                                    = 0x00a0,
+               exclamdown                                              = 0x00a1,
+               cent                                                    = 0x00a2,
+               sterling                                                = 0x00a3,
+               currency                                                = 0x00a4,
+               yen                                                             = 0x00a5,
+               brokenbar                                               = 0x00a6,
+               section                                                 = 0x00a7,
+               diaeresis                                               = 0x00a8,
+               copyright                                               = 0x00a9,
+               ordfeminine                                             = 0x00aa,
+               guillemotleft                                   = 0x00ab,
+               notsign                                                 = 0x00ac,
+               hyphen                                                  = 0x00ad,
+               registered                                              = 0x00ae,
+               macron                                                  = 0x00af,
+               degree                                                  = 0x00b0,
+               plusminus                                               = 0x00b1,
+               twosuperior                                             = 0x00b2,
+               threesuperior                                   = 0x00b3,
+               acute                                                   = 0x00b4,
+               mu                                                              = 0x00b5,
+               paragraph                                               = 0x00b6,
+               periodcentered                                  = 0x00b7,
+               cedilla                                                 = 0x00b8,
+               onesuperior                                             = 0x00b9,
+               masculine                                               = 0x00ba,
+               guillemotright                                  = 0x00bb,
+               onequarter                                              = 0x00bc,
+               onehalf                                                 = 0x00bd,
+               threequarters                                   = 0x00be,
+               questiondown                                    = 0x00bf,
+               Agrave                                                  = 0x00c0,
+               Aacute                                                  = 0x00c1,
+               Acircumflex                                             = 0x00c2,
+               Atilde                                                  = 0x00c3,
+               Adiaeresis                                              = 0x00c4,
+               Aring                                                   = 0x00c5,
+               AE                                                              = 0x00c6,
+               Ccedilla                                                = 0x00c7,
+               Egrave                                                  = 0x00c8,
+               Eacute                                                  = 0x00c9,
+               Ecircumflex                                             = 0x00ca,
+               Ediaeresis                                              = 0x00cb,
+               Igrave                                                  = 0x00cc,
+               Iacute                                                  = 0x00cd,
+               Icircumflex                                             = 0x00ce,
+               Idiaeresis                                              = 0x00cf,
+               ETH                                                             = 0x00d0,
+               Eth                                                             = 0x00d0,
+               Ntilde                                                  = 0x00d1,
+               Ograve                                                  = 0x00d2,
+               Oacute                                                  = 0x00d3,
+               Ocircumflex                                             = 0x00d4,
+               Otilde                                                  = 0x00d5,
+               Odiaeresis                                              = 0x00d6,
+               multiply                                                = 0x00d7,
+               Oslash                                                  = 0x00d8,
+               Ooblique                                                = 0x00d8,
+               Ugrave                                                  = 0x00d9,
+               Uacute                                                  = 0x00da,
+               Ucircumflex                                             = 0x00db,
+               Udiaeresis                                              = 0x00dc,
+               Yacute                                                  = 0x00dd,
+               THORN                                                   = 0x00de,
+               Thorn                                                   = 0x00de,
+               ssharp                                                  = 0x00df,
+               agrave                                                  = 0x00e0,
+               aacute                                                  = 0x00e1,
+               acircumflex                                             = 0x00e2,
+               atilde                                                  = 0x00e3,
+               adiaeresis                                              = 0x00e4,
+               aring                                                   = 0x00e5,
+               ae                                                              = 0x00e6,
+               ccedilla                                                = 0x00e7,
+               egrave                                                  = 0x00e8,
+               eacute                                                  = 0x00e9,
+               ecircumflex                                             = 0x00ea,
+               ediaeresis                                              = 0x00eb,
+               igrave                                                  = 0x00ec,
+               iacute                                                  = 0x00ed,
+               icircumflex                                             = 0x00ee,
+               idiaeresis                                              = 0x00ef,
+               eth                                                             = 0x00f0,
+               ntilde                                                  = 0x00f1,
+               ograve                                                  = 0x00f2,
+               oacute                                                  = 0x00f3,
+               ocircumflex                                             = 0x00f4,
+               otilde                                                  = 0x00f5,
+               odiaeresis                                              = 0x00f6,
+               division                                                = 0x00f7,
+               oslash                                                  = 0x00f8,
+               ooblique                                                = 0x00f8,
+               ugrave                                                  = 0x00f9,
+               uacute                                                  = 0x00fa,
+               ucircumflex                                             = 0x00fb,
+               udiaeresis                                              = 0x00fc,
+               yacute                                                  = 0x00fd,
+               thorn                                                   = 0x00fe,
+               ydiaeresis                                              = 0x00ff,
+               Aogonek                                                 = 0x01a1,
+               breve                                                   = 0x01a2,
+               Lstroke                                                 = 0x01a3,
+               Lcaron                                                  = 0x01a5,
+               Sacute                                                  = 0x01a6,
+               Scaron                                                  = 0x01a9,
+               Scedilla                                                = 0x01aa,
+               Tcaron                                                  = 0x01ab,
+               Zacute                                                  = 0x01ac,
+               Zcaron                                                  = 0x01ae,
+               Zabovedot                                               = 0x01af,
+               aogonek                                                 = 0x01b1,
+               ogonek                                                  = 0x01b2,
+               lstroke                                                 = 0x01b3,
+               lcaron                                                  = 0x01b5,
+               sacute                                                  = 0x01b6,
+               caron                                                   = 0x01b7,
+               scaron                                                  = 0x01b9,
+               scedilla                                                = 0x01ba,
+               tcaron                                                  = 0x01bb,
+               zacute                                                  = 0x01bc,
+               doubleacute                                             = 0x01bd,
+               zcaron                                                  = 0x01be,
+               zabovedot                                               = 0x01bf,
+               Racute                                                  = 0x01c0,
+               Abreve                                                  = 0x01c3,
+               Lacute                                                  = 0x01c5,
+               Cacute                                                  = 0x01c6,
+               Ccaron                                                  = 0x01c8,
+               Eogonek                                                 = 0x01ca,
+               Ecaron                                                  = 0x01cc,
+               Dcaron                                                  = 0x01cf,
+               Dstroke                                                 = 0x01d0,
+               Nacute                                                  = 0x01d1,
+               Ncaron                                                  = 0x01d2,
+               Odoubleacute                                    = 0x01d5,
+               Rcaron                                                  = 0x01d8,
+               Uring                                                   = 0x01d9,
+               Udoubleacute                                    = 0x01db,
+               Tcedilla                                                = 0x01de,
+               racute                                                  = 0x01e0,
+               abreve                                                  = 0x01e3,
+               lacute                                                  = 0x01e5,
+               cacute                                                  = 0x01e6,
+               ccaron                                                  = 0x01e8,
+               eogonek                                                 = 0x01ea,
+               ecaron                                                  = 0x01ec,
+               dcaron                                                  = 0x01ef,
+               dstroke                                                 = 0x01f0,
+               nacute                                                  = 0x01f1,
+               ncaron                                                  = 0x01f2,
+               odoubleacute                                    = 0x01f5,
+               rcaron                                                  = 0x01f8,
+               uring                                                   = 0x01f9,
+               udoubleacute                                    = 0x01fb,
+               tcedilla                                                = 0x01fe,
+               abovedot                                                = 0x01ff,
+               Hstroke                                                 = 0x02a1,
+               Hcircumflex                                             = 0x02a6,
+               Iabovedot                                               = 0x02a9,
+               Gbreve                                                  = 0x02ab,
+               Jcircumflex                                             = 0x02ac,
+               hstroke                                                 = 0x02b1,
+               hcircumflex                                             = 0x02b6,
+               idotless                                                = 0x02b9,
+               gbreve                                                  = 0x02bb,
+               jcircumflex                                             = 0x02bc,
+               Cabovedot                                               = 0x02c5,
+               Ccircumflex                                             = 0x02c6,
+               Gabovedot                                               = 0x02d5,
+               Gcircumflex                                             = 0x02d8,
+               Ubreve                                                  = 0x02dd,
+               Scircumflex                                             = 0x02de,
+               cabovedot                                               = 0x02e5,
+               ccircumflex                                             = 0x02e6,
+               gabovedot                                               = 0x02f5,
+               gcircumflex                                             = 0x02f8,
+               ubreve                                                  = 0x02fd,
+               scircumflex                                             = 0x02fe,
+               kra                                                             = 0x03a2,
+               kappa                                                   = 0x03a2,
+               Rcedilla                                                = 0x03a3,
+               Itilde                                                  = 0x03a5,
+               Lcedilla                                                = 0x03a6,
+               Emacron                                                 = 0x03aa,
+               Gcedilla                                                = 0x03ab,
+               Tslash                                                  = 0x03ac,
+               rcedilla                                                = 0x03b3,
+               itilde                                                  = 0x03b5,
+               lcedilla                                                = 0x03b6,
+               emacron                                                 = 0x03ba,
+               gcedilla                                                = 0x03bb,
+               tslash                                                  = 0x03bc,
+               ENG                                                             = 0x03bd,
+               eng                                                             = 0x03bf,
+               Amacron                                                 = 0x03c0,
+               Iogonek                                                 = 0x03c7,
+               Eabovedot                                               = 0x03cc,
+               Imacron                                                 = 0x03cf,
+               Ncedilla                                                = 0x03d1,
+               Omacron                                                 = 0x03d2,
+               Kcedilla                                                = 0x03d3,
+               Uogonek                                                 = 0x03d9,
+               Utilde                                                  = 0x03dd,
+               Umacron                                                 = 0x03de,
+               amacron                                                 = 0x03e0,
+               iogonek                                                 = 0x03e7,
+               eabovedot                                               = 0x03ec,
+               imacron                                                 = 0x03ef,
+               ncedilla                                                = 0x03f1,
+               omacron                                                 = 0x03f2,
+               kcedilla                                                = 0x03f3,
+               uogonek                                                 = 0x03f9,
+               utilde                                                  = 0x03fd,
+               umacron                                                 = 0x03fe,
+               Wcircumflex                                             = 0x1000174,
+               wcircumflex                                             = 0x1000175,
+               Ycircumflex                                             = 0x1000176,
+               ycircumflex                                             = 0x1000177,
+               Babovedot                                               = 0x1001e02,
+               babovedot                                               = 0x1001e03,
+               Dabovedot                                               = 0x1001e0a,
+               dabovedot                                               = 0x1001e0b,
+               Fabovedot                                               = 0x1001e1e,
+               fabovedot                                               = 0x1001e1f,
+               Mabovedot                                               = 0x1001e40,
+               mabovedot                                               = 0x1001e41,
+               Pabovedot                                               = 0x1001e56,
+               pabovedot                                               = 0x1001e57,
+               Sabovedot                                               = 0x1001e60,
+               sabovedot                                               = 0x1001e61,
+               Tabovedot                                               = 0x1001e6a,
+               tabovedot                                               = 0x1001e6b,
+               Wgrave                                                  = 0x1001e80,
+               wgrave                                                  = 0x1001e81,
+               Wacute                                                  = 0x1001e82,
+               wacute                                                  = 0x1001e83,
+               Wdiaeresis                                              = 0x1001e84,
+               wdiaeresis                                              = 0x1001e85,
+               Ygrave                                                  = 0x1001ef2,
+               ygrave                                                  = 0x1001ef3,
+               OE                                                              = 0x13bc,
+               oe                                                              = 0x13bd,
+               Ydiaeresis                                              = 0x13be,
+               overline                                                = 0x047e,
+               kana_fullstop                                   = 0x04a1,
+               kana_openingbracket                             = 0x04a2,
+               kana_closingbracket                             = 0x04a3,
+               kana_comma                                              = 0x04a4,
+               kana_conjunctive                                = 0x04a5,
+               kana_middledot                                  = 0x04a5,
+               kana_WO                                                 = 0x04a6,
+               kana_a                                                  = 0x04a7,
+               kana_i                                                  = 0x04a8,
+               kana_u                                                  = 0x04a9,
+               kana_e                                                  = 0x04aa,
+               kana_o                                                  = 0x04ab,
+               kana_ya                                                 = 0x04ac,
+               kana_yu                                                 = 0x04ad,
+               kana_yo                                                 = 0x04ae,
+               kana_tsu                                                = 0x04af,
+               kana_tu                                                 = 0x04af,
+               prolongedsound                                  = 0x04b0,
+               kana_A                                                  = 0x04b1,
+               kana_I                                                  = 0x04b2,
+               kana_U                                                  = 0x04b3,
+               kana_E                                                  = 0x04b4,
+               kana_O                                                  = 0x04b5,
+               kana_KA                                                 = 0x04b6,
+               kana_KI                                                 = 0x04b7,
+               kana_KU                                                 = 0x04b8,
+               kana_KE                                                 = 0x04b9,
+               kana_KO                                                 = 0x04ba,
+               kana_SA                                                 = 0x04bb,
+               kana_SHI                                                = 0x04bc,
+               kana_SU                                                 = 0x04bd,
+               kana_SE                                                 = 0x04be,
+               kana_SO                                                 = 0x04bf,
+               kana_TA                                                 = 0x04c0,
+               kana_CHI                                                = 0x04c1,
+               kana_TI                                                 = 0x04c1,
+               kana_TSU                                                = 0x04c2,
+               kana_TU                                                 = 0x04c2,
+               kana_TE                                                 = 0x04c3,
+               kana_TO                                                 = 0x04c4,
+               kana_NA                                                 = 0x04c5,
+               kana_NI                                                 = 0x04c6,
+               kana_NU                                                 = 0x04c7,
+               kana_NE                                                 = 0x04c8,
+               kana_NO                                                 = 0x04c9,
+               kana_HA                                                 = 0x04ca,
+               kana_HI                                                 = 0x04cb,
+               kana_FU                                                 = 0x04cc,
+               kana_HU                                                 = 0x04cc,
+               kana_HE                                                 = 0x04cd,
+               kana_HO                                                 = 0x04ce,
+               kana_MA                                                 = 0x04cf,
+               kana_MI                                                 = 0x04d0,
+               kana_MU                                                 = 0x04d1,
+               kana_ME                                                 = 0x04d2,
+               kana_MO                                                 = 0x04d3,
+               kana_YA                                                 = 0x04d4,
+               kana_YU                                                 = 0x04d5,
+               kana_YO                                                 = 0x04d6,
+               kana_RA                                                 = 0x04d7,
+               kana_RI                                                 = 0x04d8,
+               kana_RU                                                 = 0x04d9,
+               kana_RE                                                 = 0x04da,
+               kana_RO                                                 = 0x04db,
+               kana_WA                                                 = 0x04dc,
+               kana_N                                                  = 0x04dd,
+               voicedsound                                             = 0x04de,
+               semivoicedsound                                 = 0x04df,
+               kana_switch                                             = 0xff7e,
+               Farsi_0                                                 = 0x10006f0,
+               Farsi_1                                                 = 0x10006f1,
+               Farsi_2                                                 = 0x10006f2,
+               Farsi_3                                                 = 0x10006f3,
+               Farsi_4                                                 = 0x10006f4,
+               Farsi_5                                                 = 0x10006f5,
+               Farsi_6                                                 = 0x10006f6,
+               Farsi_7                                                 = 0x10006f7,
+               Farsi_8                                                 = 0x10006f8,
+               Farsi_9                                                 = 0x10006f9,
+               Arabic_percent                                  = 0x100066a,
+               Arabic_superscript_alef                 = 0x1000670,
+               Arabic_tteh                                             = 0x1000679,
+               Arabic_peh                                              = 0x100067e,
+               Arabic_tcheh                                    = 0x1000686,
+               Arabic_ddal                                             = 0x1000688,
+               Arabic_rreh                                             = 0x1000691,
+               Arabic_comma                                    = 0x05ac,
+               Arabic_fullstop                                 = 0x10006d4,
+               Arabic_0                                                = 0x1000660,
+               Arabic_1                                                = 0x1000661,
+               Arabic_2                                                = 0x1000662,
+               Arabic_3                                                = 0x1000663,
+               Arabic_4                                                = 0x1000664,
+               Arabic_5                                                = 0x1000665,
+               Arabic_6                                                = 0x1000666,
+               Arabic_7                                                = 0x1000667,
+               Arabic_8                                                = 0x1000668,
+               Arabic_9                                                = 0x1000669,
+               Arabic_semicolon                                = 0x05bb,
+               Arabic_question_mark                    = 0x05bf,
+               Arabic_hamza                                    = 0x05c1,
+               Arabic_maddaonalef                              = 0x05c2,
+               Arabic_hamzaonalef                              = 0x05c3,
+               Arabic_hamzaonwaw                               = 0x05c4,
+               Arabic_hamzaunderalef                   = 0x05c5,
+               Arabic_hamzaonyeh                               = 0x05c6,
+               Arabic_alef                                             = 0x05c7,
+               Arabic_beh                                              = 0x05c8,
+               Arabic_tehmarbuta                               = 0x05c9,
+               Arabic_teh                                              = 0x05ca,
+               Arabic_theh                                             = 0x05cb,
+               Arabic_jeem                                             = 0x05cc,
+               Arabic_hah                                              = 0x05cd,
+               Arabic_khah                                             = 0x05ce,
+               Arabic_dal                                              = 0x05cf,
+               Arabic_thal                                             = 0x05d0,
+               Arabic_ra                                               = 0x05d1,
+               Arabic_zain                                             = 0x05d2,
+               Arabic_seen                                             = 0x05d3,
+               Arabic_sheen                                    = 0x05d4,
+               Arabic_sad                                              = 0x05d5,
+               Arabic_dad                                              = 0x05d6,
+               Arabic_tah                                              = 0x05d7,
+               Arabic_zah                                              = 0x05d8,
+               Arabic_ain                                              = 0x05d9,
+               Arabic_ghain                                    = 0x05da,
+               Arabic_tatweel                                  = 0x05e0,
+               Arabic_feh                                              = 0x05e1,
+               Arabic_qaf                                              = 0x05e2,
+               Arabic_kaf                                              = 0x05e3,
+               Arabic_lam                                              = 0x05e4,
+               Arabic_meem                                             = 0x05e5,
+               Arabic_noon                                             = 0x05e6,
+               Arabic_ha                                               = 0x05e7,
+               Arabic_heh                                              = 0x05e7,
+               Arabic_waw                                              = 0x05e8,
+               Arabic_alefmaksura                              = 0x05e9,
+               Arabic_yeh                                              = 0x05ea,
+               Arabic_fathatan                                 = 0x05eb,
+               Arabic_dammatan                                 = 0x05ec,
+               Arabic_kasratan                                 = 0x05ed,
+               Arabic_fatha                                    = 0x05ee,
+               Arabic_damma                                    = 0x05ef,
+               Arabic_kasra                                    = 0x05f0,
+               Arabic_shadda                                   = 0x05f1,
+               Arabic_sukun                                    = 0x05f2,
+               Arabic_madda_above                              = 0x1000653,
+               Arabic_hamza_above                              = 0x1000654,
+               Arabic_hamza_below                              = 0x1000655,
+               Arabic_jeh                                              = 0x1000698,
+               Arabic_veh                                              = 0x10006a4,
+               Arabic_keheh                                    = 0x10006a9,
+               Arabic_gaf                                              = 0x10006af,
+               Arabic_noon_ghunna                              = 0x10006ba,
+               Arabic_heh_doachashmee                  = 0x10006be,
+               Farsi_yeh                                               = 0x10006cc,
+               Arabic_farsi_yeh                                = 0x10006cc,
+               Arabic_yeh_baree                                = 0x10006d2,
+               Arabic_heh_goal                                 = 0x10006c1,
+               Arabic_switch                                   = 0xff7e,
+               Cyrillic_GHE_bar                                = 0x1000492,
+               Cyrillic_ghe_bar                                = 0x1000493,
+               Cyrillic_ZHE_descender                  = 0x1000496,
+               Cyrillic_zhe_descender                  = 0x1000497,
+               Cyrillic_KA_descender                   = 0x100049a,
+               Cyrillic_ka_descender                   = 0x100049b,
+               Cyrillic_KA_vertstroke                  = 0x100049c,
+               Cyrillic_ka_vertstroke                  = 0x100049d,
+               Cyrillic_EN_descender                   = 0x10004a2,
+               Cyrillic_en_descender                   = 0x10004a3,
+               Cyrillic_U_straight                             = 0x10004ae,
+               Cyrillic_u_straight                             = 0x10004af,
+               Cyrillic_U_straight_bar                 = 0x10004b0,
+               Cyrillic_u_straight_bar                 = 0x10004b1,
+               Cyrillic_HA_descender                   = 0x10004b2,
+               Cyrillic_ha_descender                   = 0x10004b3,
+               Cyrillic_CHE_descender                  = 0x10004b6,
+               Cyrillic_che_descender                  = 0x10004b7,
+               Cyrillic_CHE_vertstroke                 = 0x10004b8,
+               Cyrillic_che_vertstroke                 = 0x10004b9,
+               Cyrillic_SHHA                                   = 0x10004ba,
+               Cyrillic_shha                                   = 0x10004bb,
+               Cyrillic_SCHWA                                  = 0x10004d8,
+               Cyrillic_schwa                                  = 0x10004d9,
+               Cyrillic_I_macron                               = 0x10004e2,
+               Cyrillic_i_macron                               = 0x10004e3,
+               Cyrillic_O_bar                                  = 0x10004e8,
+               Cyrillic_o_bar                                  = 0x10004e9,
+               Cyrillic_U_macron                               = 0x10004ee,
+               Cyrillic_u_macron                               = 0x10004ef,
+               Serbian_dje                                             = 0x06a1,
+               Macedonia_gje                                   = 0x06a2,
+               Cyrillic_io                                             = 0x06a3,
+               Ukrainian_ie                                    = 0x06a4,
+               Ukranian_je                                             = 0x06a4,
+               Macedonia_dse                                   = 0x06a5,
+               Ukrainian_i                                             = 0x06a6,
+               Ukranian_i                                              = 0x06a6,
+               Ukrainian_yi                                    = 0x06a7,
+               Ukranian_yi                                             = 0x06a7,
+               Cyrillic_je                                             = 0x06a8,
+               Serbian_je                                              = 0x06a8,
+               Cyrillic_lje                                    = 0x06a9,
+               Serbian_lje                                             = 0x06a9,
+               Cyrillic_nje                                    = 0x06aa,
+               Serbian_nje                                             = 0x06aa,
+               Serbian_tshe                                    = 0x06ab,
+               Macedonia_kje                                   = 0x06ac,
+               Ukrainian_ghe_with_upturn               = 0x06ad,
+               Byelorussian_shortu                             = 0x06ae,
+               Cyrillic_dzhe                                   = 0x06af,
+               Serbian_dze                                             = 0x06af,
+               numerosign                                              = 0x06b0,
+               Serbian_DJE                                             = 0x06b1,
+               Macedonia_GJE                                   = 0x06b2,
+               Cyrillic_IO                                             = 0x06b3,
+               Ukrainian_IE                                    = 0x06b4,
+               Ukranian_JE                                             = 0x06b4,
+               Macedonia_DSE                                   = 0x06b5,
+               Ukrainian_I                                             = 0x06b6,
+               Ukranian_I                                              = 0x06b6,
+               Ukrainian_YI                                    = 0x06b7,
+               Ukranian_YI                                             = 0x06b7,
+               Cyrillic_JE                                             = 0x06b8,
+               Serbian_JE                                              = 0x06b8,
+               Cyrillic_LJE                                    = 0x06b9,
+               Serbian_LJE                                             = 0x06b9,
+               Cyrillic_NJE                                    = 0x06ba,
+               Serbian_NJE                                             = 0x06ba,
+               Serbian_TSHE                                    = 0x06bb,
+               Macedonia_KJE                                   = 0x06bc,
+               Ukrainian_GHE_WITH_UPTURN               = 0x06bd,
+               Byelorussian_SHORTU                             = 0x06be,
+               Cyrillic_DZHE                                   = 0x06bf,
+               Serbian_DZE                                             = 0x06bf,
+               Cyrillic_yu                                             = 0x06c0,
+               Cyrillic_a                                              = 0x06c1,
+               Cyrillic_be                                             = 0x06c2,
+               Cyrillic_tse                                    = 0x06c3,
+               Cyrillic_de                                             = 0x06c4,
+               Cyrillic_ie                                             = 0x06c5,
+               Cyrillic_ef                                             = 0x06c6,
+               Cyrillic_ghe                                    = 0x06c7,
+               Cyrillic_ha                                             = 0x06c8,
+               Cyrillic_i                                              = 0x06c9,
+               Cyrillic_shorti                                 = 0x06ca,
+               Cyrillic_ka                                             = 0x06cb,
+               Cyrillic_el                                             = 0x06cc,
+               Cyrillic_em                                             = 0x06cd,
+               Cyrillic_en                                             = 0x06ce,
+               Cyrillic_o                                              = 0x06cf,
+               Cyrillic_pe                                             = 0x06d0,
+               Cyrillic_ya                                             = 0x06d1,
+               Cyrillic_er                                             = 0x06d2,
+               Cyrillic_es                                             = 0x06d3,
+               Cyrillic_te                                             = 0x06d4,
+               Cyrillic_u                                              = 0x06d5,
+               Cyrillic_zhe                                    = 0x06d6,
+               Cyrillic_ve                                             = 0x06d7,
+               Cyrillic_softsign                               = 0x06d8,
+               Cyrillic_yeru                                   = 0x06d9,
+               Cyrillic_ze                                             = 0x06da,
+               Cyrillic_sha                                    = 0x06db,
+               Cyrillic_e                                              = 0x06dc,
+               Cyrillic_shcha                                  = 0x06dd,
+               Cyrillic_che                                    = 0x06de,
+               Cyrillic_hardsign                               = 0x06df,
+               Cyrillic_YU                                             = 0x06e0,
+               Cyrillic_A                                              = 0x06e1,
+               Cyrillic_BE                                             = 0x06e2,
+               Cyrillic_TSE                                    = 0x06e3,
+               Cyrillic_DE                                             = 0x06e4,
+               Cyrillic_IE                                             = 0x06e5,
+               Cyrillic_EF                                             = 0x06e6,
+               Cyrillic_GHE                                    = 0x06e7,
+               Cyrillic_HA                                             = 0x06e8,
+               Cyrillic_I                                              = 0x06e9,
+               Cyrillic_SHORTI                                 = 0x06ea,
+               Cyrillic_KA                                             = 0x06eb,
+               Cyrillic_EL                                             = 0x06ec,
+               Cyrillic_EM                                             = 0x06ed,
+               Cyrillic_EN                                             = 0x06ee,
+               Cyrillic_O                                              = 0x06ef,
+               Cyrillic_PE                                             = 0x06f0,
+               Cyrillic_YA                                             = 0x06f1,
+               Cyrillic_ER                                             = 0x06f2,
+               Cyrillic_ES                                             = 0x06f3,
+               Cyrillic_TE                                             = 0x06f4,
+               Cyrillic_U                                              = 0x06f5,
+               Cyrillic_ZHE                                    = 0x06f6,
+               Cyrillic_VE                                             = 0x06f7,
+               Cyrillic_SOFTSIGN                               = 0x06f8,
+               Cyrillic_YERU                                   = 0x06f9,
+               Cyrillic_ZE                                             = 0x06fa,
+               Cyrillic_SHA                                    = 0x06fb,
+               Cyrillic_E                                              = 0x06fc,
+               Cyrillic_SHCHA                                  = 0x06fd,
+               Cyrillic_CHE                                    = 0x06fe,
+               Cyrillic_HARDSIGN                               = 0x06ff,
+               Greek_ALPHAaccent                               = 0x07a1,
+               Greek_EPSILONaccent                             = 0x07a2,
+               Greek_ETAaccent                                 = 0x07a3,
+               Greek_IOTAaccent                                = 0x07a4,
+               Greek_IOTAdieresis                              = 0x07a5,
+               Greek_IOTAdiaeresis                             = 0x07a5,
+               Greek_OMICRONaccent                             = 0x07a7,
+               Greek_UPSILONaccent                             = 0x07a8,
+               Greek_UPSILONdieresis                   = 0x07a9,
+               Greek_OMEGAaccent                               = 0x07ab,
+               Greek_accentdieresis                    = 0x07ae,
+               Greek_horizbar                                  = 0x07af,
+               Greek_alphaaccent                               = 0x07b1,
+               Greek_epsilonaccent                             = 0x07b2,
+               Greek_etaaccent                                 = 0x07b3,
+               Greek_iotaaccent                                = 0x07b4,
+               Greek_iotadieresis                              = 0x07b5,
+               Greek_iotaaccentdieresis                = 0x07b6,
+               Greek_omicronaccent                             = 0x07b7,
+               Greek_upsilonaccent                             = 0x07b8,
+               Greek_upsilondieresis                   = 0x07b9,
+               Greek_upsilonaccentdieresis             = 0x07ba,
+               Greek_omegaaccent                               = 0x07bb,
+               Greek_ALPHA                                             = 0x07c1,
+               Greek_BETA                                              = 0x07c2,
+               Greek_GAMMA                                             = 0x07c3,
+               Greek_DELTA                                             = 0x07c4,
+               Greek_EPSILON                                   = 0x07c5,
+               Greek_ZETA                                              = 0x07c6,
+               Greek_ETA                                               = 0x07c7,
+               Greek_THETA                                             = 0x07c8,
+               Greek_IOTA                                              = 0x07c9,
+               Greek_KAPPA                                             = 0x07ca,
+               Greek_LAMDA                                             = 0x07cb,
+               Greek_LAMBDA                                    = 0x07cb,
+               Greek_MU                                                = 0x07cc,
+               Greek_NU                                                = 0x07cd,
+               Greek_XI                                                = 0x07ce,
+               Greek_OMICRON                                   = 0x07cf,
+               Greek_PI                                                = 0x07d0,
+               Greek_RHO                                               = 0x07d1,
+               Greek_SIGMA                                             = 0x07d2,
+               Greek_TAU                                               = 0x07d4,
+               Greek_UPSILON                                   = 0x07d5,
+               Greek_PHI                                               = 0x07d6,
+               Greek_CHI                                               = 0x07d7,
+               Greek_PSI                                               = 0x07d8,
+               Greek_OMEGA                                             = 0x07d9,
+               Greek_alpha                                             = 0x07e1,
+               Greek_beta                                              = 0x07e2,
+               Greek_gamma                                             = 0x07e3,
+               Greek_delta                                             = 0x07e4,
+               Greek_epsilon                                   = 0x07e5,
+               Greek_zeta                                              = 0x07e6,
+               Greek_eta                                               = 0x07e7,
+               Greek_theta                                             = 0x07e8,
+               Greek_iota                                              = 0x07e9,
+               Greek_kappa                                             = 0x07ea,
+               Greek_lamda                                             = 0x07eb,
+               Greek_lambda                                    = 0x07eb,
+               Greek_mu                                                = 0x07ec,
+               Greek_nu                                                = 0x07ed,
+               Greek_xi                                                = 0x07ee,
+               Greek_omicron                                   = 0x07ef,
+               Greek_pi                                                = 0x07f0,
+               Greek_rho                                               = 0x07f1,
+               Greek_sigma                                             = 0x07f2,
+               Greek_finalsmallsigma                   = 0x07f3,
+               Greek_tau                                               = 0x07f4,
+               Greek_upsilon                                   = 0x07f5,
+               Greek_phi                                               = 0x07f6,
+               Greek_chi                                               = 0x07f7,
+               Greek_psi                                               = 0x07f8,
+               Greek_omega                                             = 0x07f9,
+               Greek_switch                                    = 0xff7e,
+               leftradical                                             = 0x08a1,
+               topleftradical                                  = 0x08a2,
+               horizconnector                                  = 0x08a3,
+               topintegral                                             = 0x08a4,
+               botintegral                                             = 0x08a5,
+               vertconnector                                   = 0x08a6,
+               topleftsqbracket                                = 0x08a7,
+               botleftsqbracket                                = 0x08a8,
+               toprightsqbracket                               = 0x08a9,
+               botrightsqbracket                               = 0x08aa,
+               topleftparens                                   = 0x08ab,
+               botleftparens                                   = 0x08ac,
+               toprightparens                                  = 0x08ad,
+               botrightparens                                  = 0x08ae,
+               leftmiddlecurlybrace                    = 0x08af,
+               rightmiddlecurlybrace                   = 0x08b0,
+               topleftsummation                                = 0x08b1,
+               botleftsummation                                = 0x08b2,
+               topvertsummationconnector               = 0x08b3,
+               botvertsummationconnector               = 0x08b4,
+               toprightsummation                               = 0x08b5,
+               botrightsummation                               = 0x08b6,
+               rightmiddlesummation                    = 0x08b7,
+               lessthanequal                                   = 0x08bc,
+               notequal                                                = 0x08bd,
+               greaterthanequal                                = 0x08be,
+               integral                                                = 0x08bf,
+               therefore                                               = 0x08c0,
+               variation                                               = 0x08c1,
+               infinity                                                = 0x08c2,
+               nabla                                                   = 0x08c5,
+               approximate                                             = 0x08c8,
+               similarequal                                    = 0x08c9,
+               ifonlyif                                                = 0x08cd,
+               implies                                                 = 0x08ce,
+               identical                                               = 0x08cf,
+               radical                                                 = 0x08d6,
+               includedin                                              = 0x08da,
+               includes                                                = 0x08db,
+               intersection                                    = 0x08dc,
+               union                                                   = 0x08dd,
+               logicaland                                              = 0x08de,
+               logicalor                                               = 0x08df,
+               partialderivative                               = 0x08ef,
+               function                                                = 0x08f6,
+               leftarrow                                               = 0x08fb,
+               uparrow                                                 = 0x08fc,
+               rightarrow                                              = 0x08fd,
+               downarrow                                               = 0x08fe,
+               blank                                                   = 0x09df,
+               soliddiamond                                    = 0x09e0,
+               checkerboard                                    = 0x09e1,
+               ht                                                              = 0x09e2,
+               ff                                                              = 0x09e3,
+               cr                                                              = 0x09e4,
+               lf                                                              = 0x09e5,
+               nl                                                              = 0x09e8,
+               vt                                                              = 0x09e9,
+               lowrightcorner                                  = 0x09ea,
+               uprightcorner                                   = 0x09eb,
+               upleftcorner                                    = 0x09ec,
+               lowleftcorner                                   = 0x09ed,
+               crossinglines                                   = 0x09ee,
+               horizlinescan1                                  = 0x09ef,
+               horizlinescan3                                  = 0x09f0,
+               horizlinescan5                                  = 0x09f1,
+               horizlinescan7                                  = 0x09f2,
+               horizlinescan9                                  = 0x09f3,
+               leftt                                                   = 0x09f4,
+               rightt                                                  = 0x09f5,
+               bott                                                    = 0x09f6,
+               topt                                                    = 0x09f7,
+               vertbar                                                 = 0x09f8,
+               emspace                                                 = 0x0aa1,
+               enspace                                                 = 0x0aa2,
+               em3space                                                = 0x0aa3,
+               em4space                                                = 0x0aa4,
+               digitspace                                              = 0x0aa5,
+               punctspace                                              = 0x0aa6,
+               thinspace                                               = 0x0aa7,
+               hairspace                                               = 0x0aa8,
+               emdash                                                  = 0x0aa9,
+               endash                                                  = 0x0aaa,
+               signifblank                                             = 0x0aac,
+               ellipsis                                                = 0x0aae,
+               doubbaselinedot                                 = 0x0aaf,
+               onethird                                                = 0x0ab0,
+               twothirds                                               = 0x0ab1,
+               onefifth                                                = 0x0ab2,
+               twofifths                                               = 0x0ab3,
+               threefifths                                             = 0x0ab4,
+               fourfifths                                              = 0x0ab5,
+               onesixth                                                = 0x0ab6,
+               fivesixths                                              = 0x0ab7,
+               careof                                                  = 0x0ab8,
+               figdash                                                 = 0x0abb,
+               leftanglebracket                                = 0x0abc,
+               decimalpoint                                    = 0x0abd,
+               rightanglebracket                               = 0x0abe,
+               marker                                                  = 0x0abf,
+               oneeighth                                               = 0x0ac3,
+               threeeighths                                    = 0x0ac4,
+               fiveeighths                                             = 0x0ac5,
+               seveneighths                                    = 0x0ac6,
+               trademark                                               = 0x0ac9,
+               signaturemark                                   = 0x0aca,
+               trademarkincircle                               = 0x0acb,
+               leftopentriangle                                = 0x0acc,
+               rightopentriangle                               = 0x0acd,
+               emopencircle                                    = 0x0ace,
+               emopenrectangle                                 = 0x0acf,
+               leftsinglequotemark                             = 0x0ad0,
+               rightsinglequotemark                    = 0x0ad1,
+               leftdoublequotemark                             = 0x0ad2,
+               rightdoublequotemark                    = 0x0ad3,
+               prescription                                    = 0x0ad4,
+               permille                                                = 0x0ad5,
+               minutes                                                 = 0x0ad6,
+               seconds                                                 = 0x0ad7,
+               latincross                                              = 0x0ad9,
+               hexagram                                                = 0x0ada,
+               filledrectbullet                                = 0x0adb,
+               filledlefttribullet                             = 0x0adc,
+               filledrighttribullet                    = 0x0add,
+               emfilledcircle                                  = 0x0ade,
+               emfilledrect                                    = 0x0adf,
+               enopencircbullet                                = 0x0ae0,
+               enopensquarebullet                              = 0x0ae1,
+               openrectbullet                                  = 0x0ae2,
+               opentribulletup                                 = 0x0ae3,
+               opentribulletdown                               = 0x0ae4,
+               openstar                                                = 0x0ae5,
+               enfilledcircbullet                              = 0x0ae6,
+               enfilledsqbullet                                = 0x0ae7,
+               filledtribulletup                               = 0x0ae8,
+               filledtribulletdown                             = 0x0ae9,
+               leftpointer                                             = 0x0aea,
+               rightpointer                                    = 0x0aeb,
+               club                                                    = 0x0aec,
+               diamond                                                 = 0x0aed,
+               heart                                                   = 0x0aee,
+               maltesecross                                    = 0x0af0,
+               dagger                                                  = 0x0af1,
+               doubledagger                                    = 0x0af2,
+               checkmark                                               = 0x0af3,
+               ballotcross                                             = 0x0af4,
+               musicalsharp                                    = 0x0af5,
+               musicalflat                                             = 0x0af6,
+               malesymbol                                              = 0x0af7,
+               femalesymbol                                    = 0x0af8,
+               telephone                                               = 0x0af9,
+               telephonerecorder                               = 0x0afa,
+               phonographcopyright                             = 0x0afb,
+               caret                                                   = 0x0afc,
+               singlelowquotemark                              = 0x0afd,
+               doublelowquotemark                              = 0x0afe,
+               cursor                                                  = 0x0aff,
+               leftcaret                                               = 0x0ba3,
+               rightcaret                                              = 0x0ba6,
+               downcaret                                               = 0x0ba8,
+               upcaret                                                 = 0x0ba9,
+               overbar                                                 = 0x0bc0,
+               downtack                                                = 0x0bc2,
+               upshoe                                                  = 0x0bc3,
+               downstile                                               = 0x0bc4,
+               underbar                                                = 0x0bc6,
+               jot                                                             = 0x0bca,
+               quad                                                    = 0x0bcc,
+               uptack                                                  = 0x0bce,
+               circle                                                  = 0x0bcf,
+               upstile                                                 = 0x0bd3,
+               downshoe                                                = 0x0bd6,
+               rightshoe                                               = 0x0bd8,
+               leftshoe                                                = 0x0bda,
+               lefttack                                                = 0x0bdc,
+               righttack                                               = 0x0bfc,
+               hebrew_doublelowline                    = 0x0cdf,
+               hebrew_aleph                                    = 0x0ce0,
+               hebrew_bet                                              = 0x0ce1,
+               hebrew_beth                                             = 0x0ce1,
+               hebrew_gimel                                    = 0x0ce2,
+               hebrew_gimmel                                   = 0x0ce2,
+               hebrew_dalet                                    = 0x0ce3,
+               hebrew_daleth                                   = 0x0ce3,
+               hebrew_he                                               = 0x0ce4,
+               hebrew_waw                                              = 0x0ce5,
+               hebrew_zain                                             = 0x0ce6,
+               hebrew_zayin                                    = 0x0ce6,
+               hebrew_chet                                             = 0x0ce7,
+               hebrew_het                                              = 0x0ce7,
+               hebrew_tet                                              = 0x0ce8,
+               hebrew_teth                                             = 0x0ce8,
+               hebrew_yod                                              = 0x0ce9,
+               hebrew_finalkaph                                = 0x0cea,
+               hebrew_kaph                                             = 0x0ceb,
+               hebrew_lamed                                    = 0x0cec,
+               hebrew_finalmem                                 = 0x0ced,
+               hebrew_mem                                              = 0x0cee,
+               hebrew_finalnun                                 = 0x0cef,
+               hebrew_nun                                              = 0x0cf0,
+               hebrew_samech                                   = 0x0cf1,
+               hebrew_samekh                                   = 0x0cf1,
+               hebrew_ayin                                             = 0x0cf2,
+               hebrew_finalpe                                  = 0x0cf3,
+               hebrew_pe                                               = 0x0cf4,
+               hebrew_finalzade                                = 0x0cf5,
+               hebrew_finalzadi                                = 0x0cf5,
+               hebrew_zade                                             = 0x0cf6,
+               hebrew_zadi                                             = 0x0cf6,
+               hebrew_qoph                                             = 0x0cf7,
+               hebrew_kuf                                              = 0x0cf7,
+               hebrew_resh                                             = 0x0cf8,
+               hebrew_shin                                             = 0x0cf9,
+               hebrew_taw                                              = 0x0cfa,
+               hebrew_taf                                              = 0x0cfa,
+               Hebrew_switch                                   = 0xff7e,
+               Thai_kokai                                              = 0x0da1,
+               Thai_khokhai                                    = 0x0da2,
+               Thai_khokhuat                                   = 0x0da3,
+               Thai_khokhwai                                   = 0x0da4,
+               Thai_khokhon                                    = 0x0da5,
+               Thai_khorakhang                                 = 0x0da6,
+               Thai_ngongu                                             = 0x0da7,
+               Thai_chochan                                    = 0x0da8,
+               Thai_choching                                   = 0x0da9,
+               Thai_chochang                                   = 0x0daa,
+               Thai_soso                                               = 0x0dab,
+               Thai_chochoe                                    = 0x0dac,
+               Thai_yoying                                             = 0x0dad,
+               Thai_dochada                                    = 0x0dae,
+               Thai_topatak                                    = 0x0daf,
+               Thai_thothan                                    = 0x0db0,
+               Thai_thonangmontho                              = 0x0db1,
+               Thai_thophuthao                                 = 0x0db2,
+               Thai_nonen                                              = 0x0db3,
+               Thai_dodek                                              = 0x0db4,
+               Thai_totao                                              = 0x0db5,
+               Thai_thothung                                   = 0x0db6,
+               Thai_thothahan                                  = 0x0db7,
+               Thai_thothong                                   = 0x0db8,
+               Thai_nonu                                               = 0x0db9,
+               Thai_bobaimai                                   = 0x0dba,
+               Thai_popla                                              = 0x0dbb,
+               Thai_phophung                                   = 0x0dbc,
+               Thai_fofa                                               = 0x0dbd,
+               Thai_phophan                                    = 0x0dbe,
+               Thai_fofan                                              = 0x0dbf,
+               Thai_phosamphao                                 = 0x0dc0,
+               Thai_moma                                               = 0x0dc1,
+               Thai_yoyak                                              = 0x0dc2,
+               Thai_rorua                                              = 0x0dc3,
+               Thai_ru                                                 = 0x0dc4,
+               Thai_loling                                             = 0x0dc5,
+               Thai_lu                                                 = 0x0dc6,
+               Thai_wowaen                                             = 0x0dc7,
+               Thai_sosala                                             = 0x0dc8,
+               Thai_sorusi                                             = 0x0dc9,
+               Thai_sosua                                              = 0x0dca,
+               Thai_hohip                                              = 0x0dcb,
+               Thai_lochula                                    = 0x0dcc,
+               Thai_oang                                               = 0x0dcd,
+               Thai_honokhuk                                   = 0x0dce,
+               Thai_paiyannoi                                  = 0x0dcf,
+               Thai_saraa                                              = 0x0dd0,
+               Thai_maihanakat                                 = 0x0dd1,
+               Thai_saraaa                                             = 0x0dd2,
+               Thai_saraam                                             = 0x0dd3,
+               Thai_sarai                                              = 0x0dd4,
+               Thai_saraii                                             = 0x0dd5,
+               Thai_saraue                                             = 0x0dd6,
+               Thai_sarauee                                    = 0x0dd7,
+               Thai_sarau                                              = 0x0dd8,
+               Thai_sarauu                                             = 0x0dd9,
+               Thai_phinthu                                    = 0x0dda,
+               Thai_maihanakat_maitho                  = 0x0dde,
+               Thai_baht                                               = 0x0ddf,
+               Thai_sarae                                              = 0x0de0,
+               Thai_saraae                                             = 0x0de1,
+               Thai_sarao                                              = 0x0de2,
+               Thai_saraaimaimuan                              = 0x0de3,
+               Thai_saraaimaimalai                             = 0x0de4,
+               Thai_lakkhangyao                                = 0x0de5,
+               Thai_maiyamok                                   = 0x0de6,
+               Thai_maitaikhu                                  = 0x0de7,
+               Thai_maiek                                              = 0x0de8,
+               Thai_maitho                                             = 0x0de9,
+               Thai_maitri                                             = 0x0dea,
+               Thai_maichattawa                                = 0x0deb,
+               Thai_thanthakhat                                = 0x0dec,
+               Thai_nikhahit                                   = 0x0ded,
+               Thai_leksun                                             = 0x0df0,
+               Thai_leknung                                    = 0x0df1,
+               Thai_leksong                                    = 0x0df2,
+               Thai_leksam                                             = 0x0df3,
+               Thai_leksi                                              = 0x0df4,
+               Thai_lekha                                              = 0x0df5,
+               Thai_lekhok                                             = 0x0df6,
+               Thai_lekchet                                    = 0x0df7,
+               Thai_lekpaet                                    = 0x0df8,
+               Thai_lekkao                                             = 0x0df9,
+               Hangul                                                  = 0xff31,
+               Hangul_Start                                    = 0xff32,
+               Hangul_End                                              = 0xff33,
+               Hangul_Hanja                                    = 0xff34,
+               Hangul_Jamo                                             = 0xff35,
+               Hangul_Romaja                                   = 0xff36,
+               Hangul_Codeinput                                = 0xff37,
+               Hangul_Jeonja                                   = 0xff38,
+               Hangul_Banja                                    = 0xff39,
+               Hangul_PreHanja                                 = 0xff3a,
+               Hangul_PostHanja                                = 0xff3b,
+               Hangul_SingleCandidate                  = 0xff3c,
+               Hangul_MultipleCandidate                = 0xff3d,
+               Hangul_PreviousCandidate                = 0xff3e,
+               Hangul_Special                                  = 0xff3f,
+               Hangul_switch                                   = 0xff7e,
+               Hangul_Kiyeog                                   = 0x0ea1,
+               Hangul_SsangKiyeog                              = 0x0ea2,
+               Hangul_KiyeogSios                               = 0x0ea3,
+               Hangul_Nieun                                    = 0x0ea4,
+               Hangul_NieunJieuj                               = 0x0ea5,
+               Hangul_NieunHieuh                               = 0x0ea6,
+               Hangul_Dikeud                                   = 0x0ea7,
+               Hangul_SsangDikeud                              = 0x0ea8,
+               Hangul_Rieul                                    = 0x0ea9,
+               Hangul_RieulKiyeog                              = 0x0eaa,
+               Hangul_RieulMieum                               = 0x0eab,
+               Hangul_RieulPieub                               = 0x0eac,
+               Hangul_RieulSios                                = 0x0ead,
+               Hangul_RieulTieut                               = 0x0eae,
+               Hangul_RieulPhieuf                              = 0x0eaf,
+               Hangul_RieulHieuh                               = 0x0eb0,
+               Hangul_Mieum                                    = 0x0eb1,
+               Hangul_Pieub                                    = 0x0eb2,
+               Hangul_SsangPieub                               = 0x0eb3,
+               Hangul_PieubSios                                = 0x0eb4,
+               Hangul_Sios                                             = 0x0eb5,
+               Hangul_SsangSios                                = 0x0eb6,
+               Hangul_Ieung                                    = 0x0eb7,
+               Hangul_Jieuj                                    = 0x0eb8,
+               Hangul_SsangJieuj                               = 0x0eb9,
+               Hangul_Cieuc                                    = 0x0eba,
+               Hangul_Khieuq                                   = 0x0ebb,
+               Hangul_Tieut                                    = 0x0ebc,
+               Hangul_Phieuf                                   = 0x0ebd,
+               Hangul_Hieuh                                    = 0x0ebe,
+               Hangul_A                                                = 0x0ebf,
+               Hangul_AE                                               = 0x0ec0,
+               Hangul_YA                                               = 0x0ec1,
+               Hangul_YAE                                              = 0x0ec2,
+               Hangul_EO                                               = 0x0ec3,
+               Hangul_E                                                = 0x0ec4,
+               Hangul_YEO                                              = 0x0ec5,
+               Hangul_YE                                               = 0x0ec6,
+               Hangul_O                                                = 0x0ec7,
+               Hangul_WA                                               = 0x0ec8,
+               Hangul_WAE                                              = 0x0ec9,
+               Hangul_OE                                               = 0x0eca,
+               Hangul_YO                                               = 0x0ecb,
+               Hangul_U                                                = 0x0ecc,
+               Hangul_WEO                                              = 0x0ecd,
+               Hangul_WE                                               = 0x0ece,
+               Hangul_WI                                               = 0x0ecf,
+               Hangul_YU                                               = 0x0ed0,
+               Hangul_EU                                               = 0x0ed1,
+               Hangul_YI                                               = 0x0ed2,
+               Hangul_I                                                = 0x0ed3,
+               Hangul_J_Kiyeog                                 = 0x0ed4,
+               Hangul_J_SsangKiyeog                    = 0x0ed5,
+               Hangul_J_KiyeogSios                             = 0x0ed6,
+               Hangul_J_Nieun                                  = 0x0ed7,
+               Hangul_J_NieunJieuj                             = 0x0ed8,
+               Hangul_J_NieunHieuh                             = 0x0ed9,
+               Hangul_J_Dikeud                                 = 0x0eda,
+               Hangul_J_Rieul                                  = 0x0edb,
+               Hangul_J_RieulKiyeog                    = 0x0edc,
+               Hangul_J_RieulMieum                             = 0x0edd,
+               Hangul_J_RieulPieub                             = 0x0ede,
+               Hangul_J_RieulSios                              = 0x0edf,
+               Hangul_J_RieulTieut                             = 0x0ee0,
+               Hangul_J_RieulPhieuf                    = 0x0ee1,
+               Hangul_J_RieulHieuh                             = 0x0ee2,
+               Hangul_J_Mieum                                  = 0x0ee3,
+               Hangul_J_Pieub                                  = 0x0ee4,
+               Hangul_J_PieubSios                              = 0x0ee5,
+               Hangul_J_Sios                                   = 0x0ee6,
+               Hangul_J_SsangSios                              = 0x0ee7,
+               Hangul_J_Ieung                                  = 0x0ee8,
+               Hangul_J_Jieuj                                  = 0x0ee9,
+               Hangul_J_Cieuc                                  = 0x0eea,
+               Hangul_J_Khieuq                                 = 0x0eeb,
+               Hangul_J_Tieut                                  = 0x0eec,
+               Hangul_J_Phieuf                                 = 0x0eed,
+               Hangul_J_Hieuh                                  = 0x0eee,
+               Hangul_RieulYeorinHieuh                 = 0x0eef,
+               Hangul_SunkyeongeumMieum                = 0x0ef0,
+               Hangul_SunkyeongeumPieub                = 0x0ef1,
+               Hangul_PanSios                                  = 0x0ef2,
+               Hangul_KkogjiDalrinIeung                = 0x0ef3,
+               Hangul_SunkyeongeumPhieuf               = 0x0ef4,
+               Hangul_YeorinHieuh                              = 0x0ef5,
+               Hangul_AraeA                                    = 0x0ef6,
+               Hangul_AraeAE                                   = 0x0ef7,
+               Hangul_J_PanSios                                = 0x0ef8,
+               Hangul_J_KkogjiDalrinIeung              = 0x0ef9,
+               Hangul_J_YeorinHieuh                    = 0x0efa,
+               Korean_Won                                              = 0x0eff,
+               Armenian_ligature_ew                    = 0x1000587,
+               Armenian_full_stop                              = 0x1000589,
+               Armenian_verjaket                               = 0x1000589,
+               Armenian_separation_mark                = 0x100055d,
+               Armenian_but                                    = 0x100055d,
+               Armenian_hyphen                                 = 0x100058a,
+               Armenian_yentamna                               = 0x100058a,
+               Armenian_exclam                                 = 0x100055c,
+               Armenian_amanak                                 = 0x100055c,
+               Armenian_accent                                 = 0x100055b,
+               Armenian_shesht                                 = 0x100055b,
+               Armenian_question                               = 0x100055e,
+               Armenian_paruyk                                 = 0x100055e,
+               Armenian_AYB                                    = 0x1000531,
+               Armenian_ayb                                    = 0x1000561,
+               Armenian_BEN                                    = 0x1000532,
+               Armenian_ben                                    = 0x1000562,
+               Armenian_GIM                                    = 0x1000533,
+               Armenian_gim                                    = 0x1000563,
+               Armenian_DA                                             = 0x1000534,
+               Armenian_da                                             = 0x1000564,
+               Armenian_YECH                                   = 0x1000535,
+               Armenian_yech                                   = 0x1000565,
+               Armenian_ZA                                             = 0x1000536,
+               Armenian_za                                             = 0x1000566,
+               Armenian_E                                              = 0x1000537,
+               Armenian_e                                              = 0x1000567,
+               Armenian_AT                                             = 0x1000538,
+               Armenian_at                                             = 0x1000568,
+               Armenian_TO                                             = 0x1000539,
+               Armenian_to                                             = 0x1000569,
+               Armenian_ZHE                                    = 0x100053a,
+               Armenian_zhe                                    = 0x100056a,
+               Armenian_INI                                    = 0x100053b,
+               Armenian_ini                                    = 0x100056b,
+               Armenian_LYUN                                   = 0x100053c,
+               Armenian_lyun                                   = 0x100056c,
+               Armenian_KHE                                    = 0x100053d,
+               Armenian_khe                                    = 0x100056d,
+               Armenian_TSA                                    = 0x100053e,
+               Armenian_tsa                                    = 0x100056e,
+               Armenian_KEN                                    = 0x100053f,
+               Armenian_ken                                    = 0x100056f,
+               Armenian_HO                                             = 0x1000540,
+               Armenian_ho                                             = 0x1000570,
+               Armenian_DZA                                    = 0x1000541,
+               Armenian_dza                                    = 0x1000571,
+               Armenian_GHAT                                   = 0x1000542,
+               Armenian_ghat                                   = 0x1000572,
+               Armenian_TCHE                                   = 0x1000543,
+               Armenian_tche                                   = 0x1000573,
+               Armenian_MEN                                    = 0x1000544,
+               Armenian_men                                    = 0x1000574,
+               Armenian_HI                                             = 0x1000545,
+               Armenian_hi                                             = 0x1000575,
+               Armenian_NU                                             = 0x1000546,
+               Armenian_nu                                             = 0x1000576,
+               Armenian_SHA                                    = 0x1000547,
+               Armenian_sha                                    = 0x1000577,
+               Armenian_VO                                             = 0x1000548,
+               Armenian_vo                                             = 0x1000578,
+               Armenian_CHA                                    = 0x1000549,
+               Armenian_cha                                    = 0x1000579,
+               Armenian_PE                                             = 0x100054a,
+               Armenian_pe                                             = 0x100057a,
+               Armenian_JE                                             = 0x100054b,
+               Armenian_je                                             = 0x100057b,
+               Armenian_RA                                             = 0x100054c,
+               Armenian_ra                                             = 0x100057c,
+               Armenian_SE                                             = 0x100054d,
+               Armenian_se                                             = 0x100057d,
+               Armenian_VEV                                    = 0x100054e,
+               Armenian_vev                                    = 0x100057e,
+               Armenian_TYUN                                   = 0x100054f,
+               Armenian_tyun                                   = 0x100057f,
+               Armenian_RE                                             = 0x1000550,
+               Armenian_re                                             = 0x1000580,
+               Armenian_TSO                                    = 0x1000551,
+               Armenian_tso                                    = 0x1000581,
+               Armenian_VYUN                                   = 0x1000552,
+               Armenian_vyun                                   = 0x1000582,
+               Armenian_PYUR                                   = 0x1000553,
+               Armenian_pyur                                   = 0x1000583,
+               Armenian_KE                                             = 0x1000554,
+               Armenian_ke                                             = 0x1000584,
+               Armenian_O                                              = 0x1000555,
+               Armenian_o                                              = 0x1000585,
+               Armenian_FE                                             = 0x1000556,
+               Armenian_fe                                             = 0x1000586,
+               Armenian_apostrophe                             = 0x100055a,
+               Georgian_an                                             = 0x10010d0,
+               Georgian_ban                                    = 0x10010d1,
+               Georgian_gan                                    = 0x10010d2,
+               Georgian_don                                    = 0x10010d3,
+               Georgian_en                                             = 0x10010d4,
+               Georgian_vin                                    = 0x10010d5,
+               Georgian_zen                                    = 0x10010d6,
+               Georgian_tan                                    = 0x10010d7,
+               Georgian_in                                             = 0x10010d8,
+               Georgian_kan                                    = 0x10010d9,
+               Georgian_las                                    = 0x10010da,
+               Georgian_man                                    = 0x10010db,
+               Georgian_nar                                    = 0x10010dc,
+               Georgian_on                                             = 0x10010dd,
+               Georgian_par                                    = 0x10010de,
+               Georgian_zhar                                   = 0x10010df,
+               Georgian_rae                                    = 0x10010e0,
+               Georgian_san                                    = 0x10010e1,
+               Georgian_tar                                    = 0x10010e2,
+               Georgian_un                                             = 0x10010e3,
+               Georgian_phar                                   = 0x10010e4,
+               Georgian_khar                                   = 0x10010e5,
+               Georgian_ghan                                   = 0x10010e6,
+               Georgian_qar                                    = 0x10010e7,
+               Georgian_shin                                   = 0x10010e8,
+               Georgian_chin                                   = 0x10010e9,
+               Georgian_can                                    = 0x10010ea,
+               Georgian_jil                                    = 0x10010eb,
+               Georgian_cil                                    = 0x10010ec,
+               Georgian_char                                   = 0x10010ed,
+               Georgian_xan                                    = 0x10010ee,
+               Georgian_jhan                                   = 0x10010ef,
+               Georgian_hae                                    = 0x10010f0,
+               Georgian_he                                             = 0x10010f1,
+               Georgian_hie                                    = 0x10010f2,
+               Georgian_we                                             = 0x10010f3,
+               Georgian_har                                    = 0x10010f4,
+               Georgian_hoe                                    = 0x10010f5,
+               Georgian_fi                                             = 0x10010f6,
+               Xabovedot                                               = 0x1001e8a,
+               Ibreve                                                  = 0x100012c,
+               Zstroke                                                 = 0x10001b5,
+               Gcaron                                                  = 0x10001e6,
+               Ocaron                                                  = 0x10001d1,
+               Obarred                                                 = 0x100019f,
+               xabovedot                                               = 0x1001e8b,
+               ibreve                                                  = 0x100012d,
+               zstroke                                                 = 0x10001b6,
+               gcaron                                                  = 0x10001e7,
+               ocaron                                                  = 0x10001d2,
+               obarred                                                 = 0x1000275,
+               SCHWA                                                   = 0x100018f,
+               schwa                                                   = 0x1000259,
+               EZH                                                             = 0x10001b7,
+               ezh                                                             = 0x1000292,
+               Lbelowdot                                               = 0x1001e36,
+               lbelowdot                                               = 0x1001e37,
+               Abelowdot                                               = 0x1001ea0,
+               abelowdot                                               = 0x1001ea1,
+               Ahook                                                   = 0x1001ea2,
+               ahook                                                   = 0x1001ea3,
+               Acircumflexacute                                = 0x1001ea4,
+               acircumflexacute                                = 0x1001ea5,
+               Acircumflexgrave                                = 0x1001ea6,
+               acircumflexgrave                                = 0x1001ea7,
+               Acircumflexhook                                 = 0x1001ea8,
+               acircumflexhook                                 = 0x1001ea9,
+               Acircumflextilde                                = 0x1001eaa,
+               acircumflextilde                                = 0x1001eab,
+               Acircumflexbelowdot                             = 0x1001eac,
+               acircumflexbelowdot                             = 0x1001ead,
+               Abreveacute                                             = 0x1001eae,
+               abreveacute                                             = 0x1001eaf,
+               Abrevegrave                                             = 0x1001eb0,
+               abrevegrave                                             = 0x1001eb1,
+               Abrevehook                                              = 0x1001eb2,
+               abrevehook                                              = 0x1001eb3,
+               Abrevetilde                                             = 0x1001eb4,
+               abrevetilde                                             = 0x1001eb5,
+               Abrevebelowdot                                  = 0x1001eb6,
+               abrevebelowdot                                  = 0x1001eb7,
+               Ebelowdot                                               = 0x1001eb8,
+               ebelowdot                                               = 0x1001eb9,
+               Ehook                                                   = 0x1001eba,
+               ehook                                                   = 0x1001ebb,
+               Etilde                                                  = 0x1001ebc,
+               etilde                                                  = 0x1001ebd,
+               Ecircumflexacute                                = 0x1001ebe,
+               ecircumflexacute                                = 0x1001ebf,
+               Ecircumflexgrave                                = 0x1001ec0,
+               ecircumflexgrave                                = 0x1001ec1,
+               Ecircumflexhook                                 = 0x1001ec2,
+               ecircumflexhook                                 = 0x1001ec3,
+               Ecircumflextilde                                = 0x1001ec4,
+               ecircumflextilde                                = 0x1001ec5,
+               Ecircumflexbelowdot                             = 0x1001ec6,
+               ecircumflexbelowdot                             = 0x1001ec7,
+               Ihook                                                   = 0x1001ec8,
+               ihook                                                   = 0x1001ec9,
+               Ibelowdot                                               = 0x1001eca,
+               ibelowdot                                               = 0x1001ecb,
+               Obelowdot                                               = 0x1001ecc,
+               obelowdot                                               = 0x1001ecd,
+               Ohook                                                   = 0x1001ece,
+               ohook                                                   = 0x1001ecf,
+               Ocircumflexacute                                = 0x1001ed0,
+               ocircumflexacute                                = 0x1001ed1,
+               Ocircumflexgrave                                = 0x1001ed2,
+               ocircumflexgrave                                = 0x1001ed3,
+               Ocircumflexhook                                 = 0x1001ed4,
+               ocircumflexhook                                 = 0x1001ed5,
+               Ocircumflextilde                                = 0x1001ed6,
+               ocircumflextilde                                = 0x1001ed7,
+               Ocircumflexbelowdot                             = 0x1001ed8,
+               ocircumflexbelowdot                             = 0x1001ed9,
+               Ohornacute                                              = 0x1001eda,
+               ohornacute                                              = 0x1001edb,
+               Ohorngrave                                              = 0x1001edc,
+               ohorngrave                                              = 0x1001edd,
+               Ohornhook                                               = 0x1001ede,
+               ohornhook                                               = 0x1001edf,
+               Ohorntilde                                              = 0x1001ee0,
+               ohorntilde                                              = 0x1001ee1,
+               Ohornbelowdot                                   = 0x1001ee2,
+               ohornbelowdot                                   = 0x1001ee3,
+               Ubelowdot                                               = 0x1001ee4,
+               ubelowdot                                               = 0x1001ee5,
+               Uhook                                                   = 0x1001ee6,
+               uhook                                                   = 0x1001ee7,
+               Uhornacute                                              = 0x1001ee8,
+               uhornacute                                              = 0x1001ee9,
+               Uhorngrave                                              = 0x1001eea,
+               uhorngrave                                              = 0x1001eeb,
+               Uhornhook                                               = 0x1001eec,
+               uhornhook                                               = 0x1001eed,
+               Uhorntilde                                              = 0x1001eee,
+               uhorntilde                                              = 0x1001eef,
+               Uhornbelowdot                                   = 0x1001ef0,
+               uhornbelowdot                                   = 0x1001ef1,
+               Ybelowdot                                               = 0x1001ef4,
+               ybelowdot                                               = 0x1001ef5,
+               Yhook                                                   = 0x1001ef6,
+               yhook                                                   = 0x1001ef7,
+               Ytilde                                                  = 0x1001ef8,
+               ytilde                                                  = 0x1001ef9,
+               Ohorn                                                   = 0x10001a0,
+               ohorn                                                   = 0x10001a1,
+               Uhorn                                                   = 0x10001af,
+               uhorn                                                   = 0x10001b0,
+               EcuSign                                                 = 0x10020a0,
+               ColonSign                                               = 0x10020a1,
+               CruzeiroSign                                    = 0x10020a2,
+               FFrancSign                                              = 0x10020a3,
+               LiraSign                                                = 0x10020a4,
+               MillSign                                                = 0x10020a5,
+               NairaSign                                               = 0x10020a6,
+               PesetaSign                                              = 0x10020a7,
+               RupeeSign                                               = 0x10020a8,
+               WonSign                                                 = 0x10020a9,
+               NewSheqelSign                                   = 0x10020aa,
+               DongSign                                                = 0x10020ab,
+               EuroSign                                                = 0x20ac,
+               zerosuperior                                    = 0x1002070,
+               foursuperior                                    = 0x1002074,
+               fivesuperior                                    = 0x1002075,
+               sixsuperior                                             = 0x1002076,
+               sevensuperior                                   = 0x1002077,
+               eightsuperior                                   = 0x1002078,
+               ninesuperior                                    = 0x1002079,
+               zerosubscript                                   = 0x1002080,
+               onesubscript                                    = 0x1002081,
+               twosubscript                                    = 0x1002082,
+               threesubscript                                  = 0x1002083,
+               foursubscript                                   = 0x1002084,
+               fivesubscript                                   = 0x1002085,
+               sixsubscript                                    = 0x1002086,
+               sevensubscript                                  = 0x1002087,
+               eightsubscript                                  = 0x1002088,
+               ninesubscript                                   = 0x1002089,
+               partdifferential                                = 0x1002202,
+               emptyset                                                = 0x1002205,
+               elementof                                               = 0x1002208,
+               notelementof                                    = 0x1002209,
+               containsas                                              = 0x100220B,
+               squareroot                                              = 0x100221A,
+               cuberoot                                                = 0x100221B,
+               fourthroot                                              = 0x100221C,
+               dintegral                                               = 0x100222C,
+               tintegral                                               = 0x100222D,
+               because                                                 = 0x1002235,
+               approxeq                                                = 0x1002248,
+               notapproxeq                                             = 0x1002247,
+               notidentical                                    = 0x1002262,
+               stricteq                                                = 0x1002263,
+               braille_dot_1                                   = 0xfff1,
+               braille_dot_2                                   = 0xfff2,
+               braille_dot_3                                   = 0xfff3,
+               braille_dot_4                                   = 0xfff4,
+               braille_dot_5                                   = 0xfff5,
+               braille_dot_6                                   = 0xfff6,
+               braille_dot_7                                   = 0xfff7,
+               braille_dot_8                                   = 0xfff8,
+               braille_dot_9                                   = 0xfff9,
+               braille_dot_10                                  = 0xfffa,
+               braille_blank                                   = 0x1002800,
+               braille_dots_1                                  = 0x1002801,
+               braille_dots_2                                  = 0x1002802,
+               braille_dots_12                                 = 0x1002803,
+               braille_dots_3                                  = 0x1002804,
+               braille_dots_13                                 = 0x1002805,
+               braille_dots_23                                 = 0x1002806,
+               braille_dots_123                                = 0x1002807,
+               braille_dots_4                                  = 0x1002808,
+               braille_dots_14                                 = 0x1002809,
+               braille_dots_24                                 = 0x100280a,
+               braille_dots_124                                = 0x100280b,
+               braille_dots_34                                 = 0x100280c,
+               braille_dots_134                                = 0x100280d,
+               braille_dots_234                                = 0x100280e,
+               braille_dots_1234                               = 0x100280f,
+               braille_dots_5                                  = 0x1002810,
+               braille_dots_15                                 = 0x1002811,
+               braille_dots_25                                 = 0x1002812,
+               braille_dots_125                                = 0x1002813,
+               braille_dots_35                                 = 0x1002814,
+               braille_dots_135                                = 0x1002815,
+               braille_dots_235                                = 0x1002816,
+               braille_dots_1235                               = 0x1002817,
+               braille_dots_45                                 = 0x1002818,
+               braille_dots_145                                = 0x1002819,
+               braille_dots_245                                = 0x100281a,
+               braille_dots_1245                               = 0x100281b,
+               braille_dots_345                                = 0x100281c,
+               braille_dots_1345                               = 0x100281d,
+               braille_dots_2345                               = 0x100281e,
+               braille_dots_12345                              = 0x100281f,
+               braille_dots_6                                  = 0x1002820,
+               braille_dots_16                                 = 0x1002821,
+               braille_dots_26                                 = 0x1002822,
+               braille_dots_126                                = 0x1002823,
+               braille_dots_36                                 = 0x1002824,
+               braille_dots_136                                = 0x1002825,
+               braille_dots_236                                = 0x1002826,
+               braille_dots_1236                               = 0x1002827,
+               braille_dots_46                                 = 0x1002828,
+               braille_dots_146                                = 0x1002829,
+               braille_dots_246                                = 0x100282a,
+               braille_dots_1246                               = 0x100282b,
+               braille_dots_346                                = 0x100282c,
+               braille_dots_1346                               = 0x100282d,
+               braille_dots_2346                               = 0x100282e,
+               braille_dots_12346                              = 0x100282f,
+               braille_dots_56                                 = 0x1002830,
+               braille_dots_156                                = 0x1002831,
+               braille_dots_256                                = 0x1002832,
+               braille_dots_1256                               = 0x1002833,
+               braille_dots_356                                = 0x1002834,
+               braille_dots_1356                               = 0x1002835,
+               braille_dots_2356                               = 0x1002836,
+               braille_dots_12356                              = 0x1002837,
+               braille_dots_456                                = 0x1002838,
+               braille_dots_1456                               = 0x1002839,
+               braille_dots_2456                               = 0x100283a,
+               braille_dots_12456                              = 0x100283b,
+               braille_dots_3456                               = 0x100283c,
+               braille_dots_13456                              = 0x100283d,
+               braille_dots_23456                              = 0x100283e,
+               braille_dots_123456                             = 0x100283f,
+               braille_dots_7                                  = 0x1002840,
+               braille_dots_17                                 = 0x1002841,
+               braille_dots_27                                 = 0x1002842,
+               braille_dots_127                                = 0x1002843,
+               braille_dots_37                                 = 0x1002844,
+               braille_dots_137                                = 0x1002845,
+               braille_dots_237                                = 0x1002846,
+               braille_dots_1237                               = 0x1002847,
+               braille_dots_47                                 = 0x1002848,
+               braille_dots_147                                = 0x1002849,
+               braille_dots_247                                = 0x100284a,
+               braille_dots_1247                               = 0x100284b,
+               braille_dots_347                                = 0x100284c,
+               braille_dots_1347                               = 0x100284d,
+               braille_dots_2347                               = 0x100284e,
+               braille_dots_12347                              = 0x100284f,
+               braille_dots_57                                 = 0x1002850,
+               braille_dots_157                                = 0x1002851,
+               braille_dots_257                                = 0x1002852,
+               braille_dots_1257                               = 0x1002853,
+               braille_dots_357                                = 0x1002854,
+               braille_dots_1357                               = 0x1002855,
+               braille_dots_2357                               = 0x1002856,
+               braille_dots_12357                              = 0x1002857,
+               braille_dots_457                                = 0x1002858,
+               braille_dots_1457                               = 0x1002859,
+               braille_dots_2457                               = 0x100285a,
+               braille_dots_12457                              = 0x100285b,
+               braille_dots_3457                               = 0x100285c,
+               braille_dots_13457                              = 0x100285d,
+               braille_dots_23457                              = 0x100285e,
+               braille_dots_123457                             = 0x100285f,
+               braille_dots_67                                 = 0x1002860,
+               braille_dots_167                                = 0x1002861,
+               braille_dots_267                                = 0x1002862,
+               braille_dots_1267                               = 0x1002863,
+               braille_dots_367                                = 0x1002864,
+               braille_dots_1367                               = 0x1002865,
+               braille_dots_2367                               = 0x1002866,
+               braille_dots_12367                              = 0x1002867,
+               braille_dots_467                                = 0x1002868,
+               braille_dots_1467                               = 0x1002869,
+               braille_dots_2467                               = 0x100286a,
+               braille_dots_12467                              = 0x100286b,
+               braille_dots_3467                               = 0x100286c,
+               braille_dots_13467                              = 0x100286d,
+               braille_dots_23467                              = 0x100286e,
+               braille_dots_123467                             = 0x100286f,
+               braille_dots_567                                = 0x1002870,
+               braille_dots_1567                               = 0x1002871,
+               braille_dots_2567                               = 0x1002872,
+               braille_dots_12567                              = 0x1002873,
+               braille_dots_3567                               = 0x1002874,
+               braille_dots_13567                              = 0x1002875,
+               braille_dots_23567                              = 0x1002876,
+               braille_dots_123567                             = 0x1002877,
+               braille_dots_4567                               = 0x1002878,
+               braille_dots_14567                              = 0x1002879,
+               braille_dots_24567                              = 0x100287a,
+               braille_dots_124567                             = 0x100287b,
+               braille_dots_34567                              = 0x100287c,
+               braille_dots_134567                             = 0x100287d,
+               braille_dots_234567                             = 0x100287e,
+               braille_dots_1234567                    = 0x100287f,
+               braille_dots_8                                  = 0x1002880,
+               braille_dots_18                                 = 0x1002881,
+               braille_dots_28                                 = 0x1002882,
+               braille_dots_128                                = 0x1002883,
+               braille_dots_38                                 = 0x1002884,
+               braille_dots_138                                = 0x1002885,
+               braille_dots_238                                = 0x1002886,
+               braille_dots_1238                               = 0x1002887,
+               braille_dots_48                                 = 0x1002888,
+               braille_dots_148                                = 0x1002889,
+               braille_dots_248                                = 0x100288a,
+               braille_dots_1248                               = 0x100288b,
+               braille_dots_348                                = 0x100288c,
+               braille_dots_1348                               = 0x100288d,
+               braille_dots_2348                               = 0x100288e,
+               braille_dots_12348                              = 0x100288f,
+               braille_dots_58                                 = 0x1002890,
+               braille_dots_158                                = 0x1002891,
+               braille_dots_258                                = 0x1002892,
+               braille_dots_1258                               = 0x1002893,
+               braille_dots_358                                = 0x1002894,
+               braille_dots_1358                               = 0x1002895,
+               braille_dots_2358                               = 0x1002896,
+               braille_dots_12358                              = 0x1002897,
+               braille_dots_458                                = 0x1002898,
+               braille_dots_1458                               = 0x1002899,
+               braille_dots_2458                               = 0x100289a,
+               braille_dots_12458                              = 0x100289b,
+               braille_dots_3458                               = 0x100289c,
+               braille_dots_13458                              = 0x100289d,
+               braille_dots_23458                              = 0x100289e,
+               braille_dots_123458                             = 0x100289f,
+               braille_dots_68                                 = 0x10028a0,
+               braille_dots_168                                = 0x10028a1,
+               braille_dots_268                                = 0x10028a2,
+               braille_dots_1268                               = 0x10028a3,
+               braille_dots_368                                = 0x10028a4,
+               braille_dots_1368                               = 0x10028a5,
+               braille_dots_2368                               = 0x10028a6,
+               braille_dots_12368                              = 0x10028a7,
+               braille_dots_468                                = 0x10028a8,
+               braille_dots_1468                               = 0x10028a9,
+               braille_dots_2468                               = 0x10028aa,
+               braille_dots_12468                              = 0x10028ab,
+               braille_dots_3468                               = 0x10028ac,
+               braille_dots_13468                              = 0x10028ad,
+               braille_dots_23468                              = 0x10028ae,
+               braille_dots_123468                             = 0x10028af,
+               braille_dots_568                                = 0x10028b0,
+               braille_dots_1568                               = 0x10028b1,
+               braille_dots_2568                               = 0x10028b2,
+               braille_dots_12568                              = 0x10028b3,
+               braille_dots_3568                               = 0x10028b4,
+               braille_dots_13568                              = 0x10028b5,
+               braille_dots_23568                              = 0x10028b6,
+               braille_dots_123568                             = 0x10028b7,
+               braille_dots_4568                               = 0x10028b8,
+               braille_dots_14568                              = 0x10028b9,
+               braille_dots_24568                              = 0x10028ba,
+               braille_dots_124568                             = 0x10028bb,
+               braille_dots_34568                              = 0x10028bc,
+               braille_dots_134568                             = 0x10028bd,
+               braille_dots_234568                             = 0x10028be,
+               braille_dots_1234568                    = 0x10028bf,
+               braille_dots_78                                 = 0x10028c0,
+               braille_dots_178                                = 0x10028c1,
+               braille_dots_278                                = 0x10028c2,
+               braille_dots_1278                               = 0x10028c3,
+               braille_dots_378                                = 0x10028c4,
+               braille_dots_1378                               = 0x10028c5,
+               braille_dots_2378                               = 0x10028c6,
+               braille_dots_12378                              = 0x10028c7,
+               braille_dots_478                                = 0x10028c8,
+               braille_dots_1478                               = 0x10028c9,
+               braille_dots_2478                               = 0x10028ca,
+               braille_dots_12478                              = 0x10028cb,
+               braille_dots_3478                               = 0x10028cc,
+               braille_dots_13478                              = 0x10028cd,
+               braille_dots_23478                              = 0x10028ce,
+               braille_dots_123478                             = 0x10028cf,
+               braille_dots_578                                = 0x10028d0,
+               braille_dots_1578                               = 0x10028d1,
+               braille_dots_2578                               = 0x10028d2,
+               braille_dots_12578                              = 0x10028d3,
+               braille_dots_3578                               = 0x10028d4,
+               braille_dots_13578                              = 0x10028d5,
+               braille_dots_23578                              = 0x10028d6,
+               braille_dots_123578                             = 0x10028d7,
+               braille_dots_4578                               = 0x10028d8,
+               braille_dots_14578                              = 0x10028d9,
+               braille_dots_24578                              = 0x10028da,
+               braille_dots_124578                             = 0x10028db,
+               braille_dots_34578                              = 0x10028dc,
+               braille_dots_134578                             = 0x10028dd,
+               braille_dots_234578                             = 0x10028de,
+               braille_dots_1234578                    = 0x10028df,
+               braille_dots_678                                = 0x10028e0,
+               braille_dots_1678                               = 0x10028e1,
+               braille_dots_2678                               = 0x10028e2,
+               braille_dots_12678                              = 0x10028e3,
+               braille_dots_3678                               = 0x10028e4,
+               braille_dots_13678                              = 0x10028e5,
+               braille_dots_23678                              = 0x10028e6,
+               braille_dots_123678                             = 0x10028e7,
+               braille_dots_4678                               = 0x10028e8,
+               braille_dots_14678                              = 0x10028e9,
+               braille_dots_24678                              = 0x10028ea,
+               braille_dots_124678                             = 0x10028eb,
+               braille_dots_34678                              = 0x10028ec,
+               braille_dots_134678                             = 0x10028ed,
+               braille_dots_234678                             = 0x10028ee,
+               braille_dots_1234678                    = 0x10028ef,
+               braille_dots_5678                               = 0x10028f0,
+               braille_dots_15678                              = 0x10028f1,
+               braille_dots_25678                              = 0x10028f2,
+               braille_dots_125678                             = 0x10028f3,
+               braille_dots_35678                              = 0x10028f4,
+               braille_dots_135678                             = 0x10028f5,
+               braille_dots_235678                             = 0x10028f6,
+               braille_dots_1235678                    = 0x10028f7,
+               braille_dots_45678                              = 0x10028f8,
+               braille_dots_145678                             = 0x10028f9,
+               braille_dots_245678                             = 0x10028fa,
+               braille_dots_1245678                    = 0x10028fb,
+               braille_dots_345678                             = 0x10028fc,
+               braille_dots_1345678                    = 0x10028fd,
+               braille_dots_2345678                    = 0x10028fe,
+               braille_dots_12345678                   = 0x10028ff,
+               Sinh_ng                                                 = 0x1000d82,
+               Sinh_h2                                                 = 0x1000d83,
+               Sinh_a                                                  = 0x1000d85,
+               Sinh_aa                                                 = 0x1000d86,
+               Sinh_ae                                                 = 0x1000d87,
+               Sinh_aee                                                = 0x1000d88,
+               Sinh_i                                                  = 0x1000d89,
+               Sinh_ii                                                 = 0x1000d8a,
+               Sinh_u                                                  = 0x1000d8b,
+               Sinh_uu                                                 = 0x1000d8c,
+               Sinh_ri                                                 = 0x1000d8d,
+               Sinh_rii                                                = 0x1000d8e,
+               Sinh_lu                                                 = 0x1000d8f,
+               Sinh_luu                                                = 0x1000d90,
+               Sinh_e                                                  = 0x1000d91,
+               Sinh_ee                                                 = 0x1000d92,
+               Sinh_ai                                                 = 0x1000d93,
+               Sinh_o                                                  = 0x1000d94,
+               Sinh_oo                                                 = 0x1000d95,
+               Sinh_au                                                 = 0x1000d96,
+               Sinh_ka                                                 = 0x1000d9a,
+               Sinh_kha                                                = 0x1000d9b,
+               Sinh_ga                                                 = 0x1000d9c,
+               Sinh_gha                                                = 0x1000d9d,
+               Sinh_ng2                                                = 0x1000d9e,
+               Sinh_nga                                                = 0x1000d9f,
+               Sinh_ca                                                 = 0x1000da0,
+               Sinh_cha                                                = 0x1000da1,
+               Sinh_ja                                                 = 0x1000da2,
+               Sinh_jha                                                = 0x1000da3,
+               Sinh_nya                                                = 0x1000da4,
+               Sinh_jnya                                               = 0x1000da5,
+               Sinh_nja                                                = 0x1000da6,
+               Sinh_tta                                                = 0x1000da7,
+               Sinh_ttha                                               = 0x1000da8,
+               Sinh_dda                                                = 0x1000da9,
+               Sinh_ddha                                               = 0x1000daa,
+               Sinh_nna                                                = 0x1000dab,
+               Sinh_ndda                                               = 0x1000dac,
+               Sinh_tha                                                = 0x1000dad,
+               Sinh_thha                                               = 0x1000dae,
+               Sinh_dha                                                = 0x1000daf,
+               Sinh_dhha                                               = 0x1000db0,
+               Sinh_na                                                 = 0x1000db1,
+               Sinh_ndha                                               = 0x1000db3,
+               Sinh_pa                                                 = 0x1000db4,
+               Sinh_pha                                                = 0x1000db5,
+               Sinh_ba                                                 = 0x1000db6,
+               Sinh_bha                                                = 0x1000db7,
+               Sinh_ma                                                 = 0x1000db8,
+               Sinh_mba                                                = 0x1000db9,
+               Sinh_ya                                                 = 0x1000dba,
+               Sinh_ra                                                 = 0x1000dbb,
+               Sinh_la                                                 = 0x1000dbd,
+               Sinh_va                                                 = 0x1000dc0,
+               Sinh_sha                                                = 0x1000dc1,
+               Sinh_ssha                                               = 0x1000dc2,
+               Sinh_sa                                                 = 0x1000dc3,
+               Sinh_ha                                                 = 0x1000dc4,
+               Sinh_lla                                                = 0x1000dc5,
+               Sinh_fa                                                 = 0x1000dc6,
+               Sinh_al                                                 = 0x1000dca,
+               Sinh_aa2                                                = 0x1000dcf,
+               Sinh_ae2                                                = 0x1000dd0,
+               Sinh_aee2                                               = 0x1000dd1,
+               Sinh_i2                                                 = 0x1000dd2,
+               Sinh_ii2                                                = 0x1000dd3,
+               Sinh_u2                                                 = 0x1000dd4,
+               Sinh_uu2                                                = 0x1000dd6,
+               Sinh_ru2                                                = 0x1000dd8,
+               Sinh_e2                                                 = 0x1000dd9,
+               Sinh_ee2                                                = 0x1000dda,
+               Sinh_ai2                                                = 0x1000ddb,
+               Sinh_o2                                                 = 0x1000ddc,
+               Sinh_oo2                                                = 0x1000ddd,
+               Sinh_au2                                                = 0x1000dde,
+               Sinh_lu2                                                = 0x1000ddf,
+               Sinh_ruu2                                               = 0x1000df2,
+               Sinh_luu2                                               = 0x1000df3,
+               Sinh_kunddaliya                                 = 0x1000df4,
+               XF86ModeLock                                    = 0x1008FF01,
+               XF86MonBrightnessUp                             = 0x1008FF02,
+               XF86MonBrightnessDown                   = 0x1008FF03,
+               XF86KbdLightOnOff                               = 0x1008FF04,
+               XF86KbdBrightnessUp                             = 0x1008FF05,
+               XF86KbdBrightnessDown                   = 0x1008FF06,
+               XF86Standby                                             = 0x1008FF10,
+               XF86AudioLowerVolume                    = 0x1008FF11,
+               XF86AudioMute                                   = 0x1008FF12,
+               XF86AudioRaiseVolume                    = 0x1008FF13,
+               XF86AudioPlay                                   = 0x1008FF14,
+               XF86AudioStop                                   = 0x1008FF15,
+               XF86AudioPrev                                   = 0x1008FF16,
+               XF86AudioNext                                   = 0x1008FF17,
+               XF86HomePage                                    = 0x1008FF18,
+               XF86Mail                                                = 0x1008FF19,
+               XF86Start                                               = 0x1008FF1A,
+               XF86Search                                              = 0x1008FF1B,
+               XF86AudioRecord                                 = 0x1008FF1C,
+               XF86Calculator                                  = 0x1008FF1D,
+               XF86Memo                                                = 0x1008FF1E,
+               XF86ToDoList                                    = 0x1008FF1F,
+               XF86Calendar                                    = 0x1008FF20,
+               XF86PowerDown                                   = 0x1008FF21,
+               XF86ContrastAdjust                              = 0x1008FF22,
+               XF86RockerUp                                    = 0x1008FF23,
+               XF86RockerDown                                  = 0x1008FF24,
+               XF86RockerEnter                                 = 0x1008FF25,
+               XF86Back                                                = 0x1008FF26,
+               XF86Forward                                             = 0x1008FF27,
+               XF86Stop                                                = 0x1008FF28,
+               XF86Refresh                                             = 0x1008FF29,
+               XF86PowerOff                                    = 0x1008FF2A,
+               XF86WakeUp                                              = 0x1008FF2B,
+               XF86Eject                                               = 0x1008FF2C,
+               XF86ScreenSaver                                 = 0x1008FF2D,
+               XF86WWW                                                 = 0x1008FF2E,
+               XF86Sleep                                               = 0x1008FF2F,
+               XF86Favorites                                   = 0x1008FF30,
+               XF86AudioPause                                  = 0x1008FF31,
+               XF86AudioMedia                                  = 0x1008FF32,
+               XF86MyComputer                                  = 0x1008FF33,
+               XF86VendorHome                                  = 0x1008FF34,
+               XF86LightBulb                                   = 0x1008FF35,
+               XF86Shop                                                = 0x1008FF36,
+               XF86History                                             = 0x1008FF37,
+               XF86OpenURL                                             = 0x1008FF38,
+               XF86AddFavorite                                 = 0x1008FF39,
+               XF86HotLinks                                    = 0x1008FF3A,
+               XF86BrightnessAdjust                    = 0x1008FF3B,
+               XF86Finance                                             = 0x1008FF3C,
+               XF86Community                                   = 0x1008FF3D,
+               XF86AudioRewind                                 = 0x1008FF3E,
+               XF86BackForward                                 = 0x1008FF3F,
+               XF86Launch0                                             = 0x1008FF40,
+               XF86Launch1                                             = 0x1008FF41,
+               XF86Launch2                                             = 0x1008FF42,
+               XF86Launch3                                             = 0x1008FF43,
+               XF86Launch4                                             = 0x1008FF44,
+               XF86Launch5                                             = 0x1008FF45,
+               XF86Launch6                                             = 0x1008FF46,
+               XF86Launch7                                             = 0x1008FF47,
+               XF86Launch8                                             = 0x1008FF48,
+               XF86Launch9                                             = 0x1008FF49,
+               XF86LaunchA                                             = 0x1008FF4A,
+               XF86LaunchB                                             = 0x1008FF4B,
+               XF86LaunchC                                             = 0x1008FF4C,
+               XF86LaunchD                                             = 0x1008FF4D,
+               XF86LaunchE                                             = 0x1008FF4E,
+               XF86LaunchF                                             = 0x1008FF4F,
+               XF86ApplicationLeft                             = 0x1008FF50,
+               XF86ApplicationRight                    = 0x1008FF51,
+               XF86Book                                                = 0x1008FF52,
+               XF86CD                                                  = 0x1008FF53,
+               XF86Calculater                                  = 0x1008FF54,
+               XF86Clear                                               = 0x1008FF55,
+               XF86Close                                               = 0x1008FF56,
+               XF86Copy                                                = 0x1008FF57,
+               XF86Cut                                                 = 0x1008FF58,
+               XF86Display                                             = 0x1008FF59,
+               XF86DOS                                                 = 0x1008FF5A,
+               XF86Documents                                   = 0x1008FF5B,
+               XF86Excel                                               = 0x1008FF5C,
+               XF86Explorer                                    = 0x1008FF5D,
+               XF86Game                                                = 0x1008FF5E,
+               XF86Go                                                  = 0x1008FF5F,
+               XF86iTouch                                              = 0x1008FF60,
+               XF86LogOff                                              = 0x1008FF61,
+               XF86Market                                              = 0x1008FF62,
+               XF86Meeting                                             = 0x1008FF63,
+               XF86MenuKB                                              = 0x1008FF65,
+               XF86MenuPB                                              = 0x1008FF66,
+               XF86MySites                                             = 0x1008FF67,
+               XF86New                                                 = 0x1008FF68,
+               XF86News                                                = 0x1008FF69,
+               XF86OfficeHome                                  = 0x1008FF6A,
+               XF86Open                                                = 0x1008FF6B,
+               XF86Option                                              = 0x1008FF6C,
+               XF86Paste                                               = 0x1008FF6D,
+               XF86Phone                                               = 0x1008FF6E,
+               XF86Q                                                   = 0x1008FF70,
+               XF86Reply                                               = 0x1008FF72,
+               XF86Reload                                              = 0x1008FF73,
+               XF86RotateWindows                               = 0x1008FF74,
+               XF86RotationPB                                  = 0x1008FF75,
+               XF86RotationKB                                  = 0x1008FF76,
+               XF86Save                                                = 0x1008FF77,
+               XF86ScrollUp                                    = 0x1008FF78,
+               XF86ScrollDown                                  = 0x1008FF79,
+               XF86ScrollClick                                 = 0x1008FF7A,
+               XF86Send                                                = 0x1008FF7B,
+               XF86Spell                                               = 0x1008FF7C,
+               XF86SplitScreen                                 = 0x1008FF7D,
+               XF86Support                                             = 0x1008FF7E,
+               XF86TaskPane                                    = 0x1008FF7F,
+               XF86Terminal                                    = 0x1008FF80,
+               XF86Tools                                               = 0x1008FF81,
+               XF86Travel                                              = 0x1008FF82,
+               XF86UserPB                                              = 0x1008FF84,
+               XF86User1KB                                             = 0x1008FF85,
+               XF86User2KB                                             = 0x1008FF86,
+               XF86Video                                               = 0x1008FF87,
+               XF86WheelButton                                 = 0x1008FF88,
+               XF86Word                                                = 0x1008FF89,
+               XF86Xfer                                                = 0x1008FF8A,
+               XF86ZoomIn                                              = 0x1008FF8B,
+               XF86ZoomOut                                             = 0x1008FF8C,
+               XF86Away                                                = 0x1008FF8D,
+               XF86Messenger                                   = 0x1008FF8E,
+               XF86WebCam                                              = 0x1008FF8F,
+               XF86MailForward                                 = 0x1008FF90,
+               XF86Pictures                                    = 0x1008FF91,
+               XF86Music                                               = 0x1008FF92,
+               XF86Battery                                             = 0x1008FF93,
+               XF86Bluetooth                                   = 0x1008FF94,
+               XF86WLAN                                                = 0x1008FF95,
+               XF86UWB                                                 = 0x1008FF96,
+               XF86AudioForward                                = 0x1008FF97,
+               XF86AudioRepeat                                 = 0x1008FF98,
+               XF86AudioRandomPlay                             = 0x1008FF99,
+               XF86Subtitle                                    = 0x1008FF9A,
+               XF86AudioCycleTrack                             = 0x1008FF9B,
+               XF86CycleAngle                                  = 0x1008FF9C,
+               XF86FrameBack                                   = 0x1008FF9D,
+               XF86FrameForward                                = 0x1008FF9E,
+               XF86Time                                                = 0x1008FF9F,
+               XF86Select                                              = 0x1008FFA0,
+               XF86View                                                = 0x1008FFA1,
+               XF86TopMenu                                             = 0x1008FFA2,
+               XF86Red                                                 = 0x1008FFA3,
+               XF86Green                                               = 0x1008FFA4,
+               XF86Yellow                                              = 0x1008FFA5,
+               XF86Blue                                                = 0x1008FFA6,
+               XF86Suspend                                             = 0x1008FFA7,
+               XF86Hibernate                                   = 0x1008FFA8,
+               XF86TouchpadToggle                              = 0x1008FFA9,
+               XF86TouchpadOn                                  = 0x1008FFB0,
+               XF86TouchpadOff                                 = 0x1008FFB1,
+               XF86AudioMicMute                                = 0x1008FFB2,
+               XF86Keyboard                                    = 0x1008FFB3,
+               XF86WWAN                                                = 0x1008FFB4,
+               XF86RFKill                                              = 0x1008FFB5,
+               XF86AudioPreset                                 = 0x1008FFB6,
+               XF86Switch_VT_1                                 = 0x1008FE01,
+               XF86Switch_VT_2                                 = 0x1008FE02,
+               XF86Switch_VT_3                                 = 0x1008FE03,
+               XF86Switch_VT_4                                 = 0x1008FE04,
+               XF86Switch_VT_5                                 = 0x1008FE05,
+               XF86Switch_VT_6                                 = 0x1008FE06,
+               XF86Switch_VT_7                                 = 0x1008FE07,
+               XF86Switch_VT_8                                 = 0x1008FE08,
+               XF86Switch_VT_9                                 = 0x1008FE09,
+               XF86Switch_VT_10                                = 0x1008FE0A,
+               XF86Switch_VT_11                                = 0x1008FE0B,
+               XF86Switch_VT_12                                = 0x1008FE0C,
+               XF86Ungrab                                              = 0x1008FE20,
+               XF86ClearGrab                                   = 0x1008FE21,
+               XF86Next_VMode                                  = 0x1008FE22,
+               XF86Prev_VMode                                  = 0x1008FE23,
+               XF86LogWindowTree                               = 0x1008FE24,
+               XF86LogGrabInfo                                 = 0x1008FE25,
+               SunFA_Grave                                             = 0x1005FF00,
+               SunFA_Circum                                    = 0x1005FF01,
+               SunFA_Tilde                                             = 0x1005FF02,
+               SunFA_Acute                                             = 0x1005FF03,
+               SunFA_Diaeresis                                 = 0x1005FF04,
+               SunFA_Cedilla                                   = 0x1005FF05,
+               SunF36                                                  = 0x1005FF10,
+               SunF37                                                  = 0x1005FF11,
+               SunSys_Req                                              = 0x1005FF60,
+               SunPrint_Screen                                 = 0x0000FF61,
+               SunCompose                                              = 0x0000FF20,
+               SunAltGraph                                             = 0x0000FF7E,
+               SunPageUp                                               = 0x0000FF55,
+               SunPageDown                                             = 0x0000FF56,
+               SunUndo                                                 = 0x0000FF65,
+               SunAgain                                                = 0x0000FF66,
+               SunFind                                                 = 0x0000FF68,
+               SunStop                                                 = 0x0000FF69,
+               SunProps                                                = 0x1005FF70,
+               SunFront                                                = 0x1005FF71,
+               SunCopy                                                 = 0x1005FF72,
+               SunOpen                                                 = 0x1005FF73,
+               SunPaste                                                = 0x1005FF74,
+               SunCut                                                  = 0x1005FF75,
+               SunPowerSwitch                                  = 0x1005FF76,
+               SunAudioLowerVolume                             = 0x1005FF77,
+               SunAudioMute                                    = 0x1005FF78,
+               SunAudioRaiseVolume                             = 0x1005FF79,
+               SunVideoDegauss                                 = 0x1005FF7A,
+               SunVideoLowerBrightness                 = 0x1005FF7B,
+               SunVideoRaiseBrightness                 = 0x1005FF7C,
+               SunPowerSwitchShift                             = 0x1005FF7D,
+               Dring_accent                                    = 0x1000FEB0,
+               Dcircumflex_accent                              = 0x1000FE5E,
+               Dcedilla_accent                                 = 0x1000FE2C,
+               Dacute_accent                                   = 0x1000FE27,
+               Dgrave_accent                                   = 0x1000FE60,
+               Dtilde                                                  = 0x1000FE7E,
+               Ddiaeresis                                              = 0x1000FE22,
+               DRemove                                                 = 0x1000FF00,
+               hpClearLine                                             = 0x1000FF6F,
+               hpInsertLine                                    = 0x1000FF70,
+               hpDeleteLine                                    = 0x1000FF71,
+               hpInsertChar                                    = 0x1000FF72,
+               hpDeleteChar                                    = 0x1000FF73,
+               hpBackTab                                               = 0x1000FF74,
+               hpKP_BackTab                                    = 0x1000FF75,
+               hpModelock1                                             = 0x1000FF48,
+               hpModelock2                                             = 0x1000FF49,
+               hpReset                                                 = 0x1000FF6C,
+               hpSystem                                                = 0x1000FF6D,
+               hpUser                                                  = 0x1000FF6E,
+               hpmute_acute                                    = 0x100000A8,
+               hpmute_grave                                    = 0x100000A9,
+               hpmute_asciicircum                              = 0x100000AA,
+               hpmute_diaeresis                                = 0x100000AB,
+               hpmute_asciitilde                               = 0x100000AC,
+               hplira                                                  = 0x100000AF,
+               hpguilder                                               = 0x100000BE,
+               hpYdiaeresis                                    = 0x100000EE,
+               hpIO                                                    = 0x100000EE,
+               hplongminus                                             = 0x100000F6,
+               hpblock                                                 = 0x100000FC,
+               osfCopy                                                 = 0x1004FF02,
+               osfCut                                                  = 0x1004FF03,
+               osfPaste                                                = 0x1004FF04,
+               osfBackTab                                              = 0x1004FF07,
+               osfBackSpace                                    = 0x1004FF08,
+               osfClear                                                = 0x1004FF0B,
+               osfEscape                                               = 0x1004FF1B,
+               osfAddMode                                              = 0x1004FF31,
+               osfPrimaryPaste                                 = 0x1004FF32,
+               osfQuickPaste                                   = 0x1004FF33,
+               osfPageLeft                                             = 0x1004FF40,
+               osfPageUp                                               = 0x1004FF41,
+               osfPageDown                                             = 0x1004FF42,
+               osfPageRight                                    = 0x1004FF43,
+               osfActivate                                             = 0x1004FF44,
+               osfMenuBar                                              = 0x1004FF45,
+               osfLeft                                                 = 0x1004FF51,
+               osfUp                                                   = 0x1004FF52,
+               osfRight                                                = 0x1004FF53,
+               osfDown                                                 = 0x1004FF54,
+               osfEndLine                                              = 0x1004FF57,
+               osfBeginLine                                    = 0x1004FF58,
+               osfEndData                                              = 0x1004FF59,
+               osfBeginData                                    = 0x1004FF5A,
+               osfPrevMenu                                             = 0x1004FF5B,
+               osfNextMenu                                             = 0x1004FF5C,
+               osfPrevField                                    = 0x1004FF5D,
+               osfNextField                                    = 0x1004FF5E,
+               osfSelect                                               = 0x1004FF60,
+               osfInsert                                               = 0x1004FF63,
+               osfUndo                                                 = 0x1004FF65,
+               osfMenu                                                 = 0x1004FF67,
+               osfCancel                                               = 0x1004FF69,
+               osfHelp                                                 = 0x1004FF6A,
+               osfSelectAll                                    = 0x1004FF71,
+               osfDeselectAll                                  = 0x1004FF72,
+               osfReselect                                             = 0x1004FF73,
+               osfExtend                                               = 0x1004FF74,
+               osfRestore                                              = 0x1004FF78,
+               osfDelete                                               = 0x1004FFFF,
+               Reset                                                   = 0x1000FF6C,
+               System                                                  = 0x1000FF6D,
+               User                                                    = 0x1000FF6E,
+               ClearLine                                               = 0x1000FF6F,
+               InsertLine                                              = 0x1000FF70,
+               DeleteLine                                              = 0x1000FF71,
+               InsertChar                                              = 0x1000FF72,
+               DeleteChar                                              = 0x1000FF73,
+               BackTab                                                 = 0x1000FF74,
+               KP_BackTab                                              = 0x1000FF75,
+               Ext16bit_L                                              = 0x1000FF76,
+               Ext16bit_R                                              = 0x1000FF77,
+               mute_acute                                              = 0x100000a8,
+               mute_grave                                              = 0x100000a9,
+               mute_asciicircum                                = 0x100000aa,
+               mute_diaeresis                                  = 0x100000ab,
+               mute_asciitilde                                 = 0x100000ac,
+               lira                                                    = 0x100000af,
+               guilder                                                 = 0x100000be,
+               IO                                                              = 0x100000ee,
+               longminus                                               = 0x100000f6,
+               block                                                   = 0x100000fc,
+    }
+}
\ No newline at end of file
diff --git a/Crow/src/Input/KeyEventArgs.cs b/Crow/src/Input/KeyEventArgs.cs
new file mode 100644 (file)
index 0000000..510e68a
--- /dev/null
@@ -0,0 +1,64 @@
+#region License
+//
+// The Open Toolkit Library License
+//
+// Copyright (c) 2006 - 2009 the Open Toolkit library.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights to
+// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+// the Software, and to permit persons to whom the Software is furnished to do
+// so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in all
+// copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+// OTHER DEALINGS IN THE SOFTWARE.
+//
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace Crow
+{
+    public class KeyEventArgs : EventArgs
+    {
+               int keyCode;
+               Key key;
+               bool repeat;    
+
+               public KeyEventArgs(Key _key, bool _repeat)
+               {
+                       key = _key;
+                       repeat = _repeat;
+               }
+               public KeyEventArgs(KeyEventArgs args)
+               {
+                   Key = args.Key;
+               }
+               public Key Key
+               {
+                   get { return key; }
+                   internal set { key = value; }
+               }
+               public uint ScanCode
+               {
+                   get { return (uint)Key; }
+               }
+               public bool IsRepeat
+               {
+                   get { return repeat; }
+                   internal set { repeat = value; }
+               }
+    }
+}
diff --git a/Crow/src/Input/KeyPressEventArgs.cs b/Crow/src/Input/KeyPressEventArgs.cs
new file mode 100644 (file)
index 0000000..7399061
--- /dev/null
@@ -0,0 +1,58 @@
+// #region License
+// //
+// // The Open Toolkit Library License
+// //
+// // Copyright (c) 2006 - 2009 the Open Toolkit library.
+// //
+// // Permission is hereby granted, free of charge, to any person obtaining a copy
+// // of this software and associated documentation files (the "Software"), to deal
+// // in the Software without restriction, including without limitation the rights to 
+// // use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+// // the Software, and to permit persons to whom the Software is furnished to do
+// // so, subject to the following conditions:
+// //
+// // The above copyright notice and this permission notice shall be included in all
+// // copies or substantial portions of the Software.
+// //
+// // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+// // OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+// // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+// // WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+// // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+// // OTHER DEALINGS IN THE SOFTWARE.
+// //
+// #endregion
+
+using System;
+
+namespace Crow
+{
+    /// <summary>
+    /// Defines the event arguments for KeyPress events. Instances of this class are cached:
+    /// KeyPressEventArgs should only be used inside the relevant event, unless manually cloned.
+    /// </summary>
+    public class KeyPressEventArgs : EventArgs
+    {
+        char key_char;
+        
+        /// <summary>
+        /// Constructs a new instance.
+        /// </summary>
+        /// <param name="keyChar">The ASCII character that was typed.</param>
+        public KeyPressEventArgs(char keyChar)
+        {
+            KeyChar = keyChar;
+        }
+
+        /// <summary>
+        /// Gets a <see cref="System.Char"/> that defines the ASCII character that was typed.
+        /// </summary>
+        public char KeyChar
+        {
+            get { return key_char; }
+            internal set { key_char = value; }
+        }
+    }
+}
diff --git a/Crow/src/Input/MouseButton.cs b/Crow/src/Input/MouseButton.cs
new file mode 100644 (file)
index 0000000..92be477
--- /dev/null
@@ -0,0 +1,92 @@
+ #region License
+ //
+ // The Open Toolkit Library License
+ //
+ // Copyright (c) 2006 - 2009 the Open Toolkit library.
+ //
+ // Permission is hereby granted, free of charge, to any person obtaining a copy
+ // of this software and associated documentation files (the "Software"), to deal
+ // in the Software without restriction, including without limitation the rights to
+ // use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ // the Software, and to permit persons to whom the Software is furnished to do
+ // so, subject to the following conditions:
+ //
+ // The above copyright notice and this permission notice shall be included in all
+ // copies or substantial portions of the Software.
+ //
+ // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ // OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ // WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ // OTHER DEALINGS IN THE SOFTWARE.
+ //
+ #endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace Crow
+{
+    /// <summary>
+    /// Enumerates all possible mouse buttons.
+    /// </summary>
+    public enum MouseButton
+    {
+       /// <summary>
+       /// The left mouse button.
+       /// </summary>
+       Left = 0,
+       /// <summary>
+       /// The middle mouse button.
+       /// </summary>
+       Middle,
+       /// <summary>
+       /// The right mouse button.
+       /// </summary>
+       Right,
+       /// <summary>
+       /// The first extra mouse button.
+       /// </summary>
+       Button1,
+       /// <summary>
+       /// The second extra mouse button.
+       /// </summary>
+       Button2,
+       /// <summary>
+       /// The third extra mouse button.
+       /// </summary>
+       Button3,
+       /// <summary>
+       /// The fourth extra mouse button.
+       /// </summary>
+       Button4,
+       /// <summary>
+       /// The fifth extra mouse button.
+       /// </summary>
+       Button5,
+       /// <summary>
+       /// The sixth extra mouse button.
+       /// </summary>
+       Button6,
+       /// <summary>
+       /// The seventh extra mouse button.
+       /// </summary>
+       Button7,
+       /// <summary>
+       /// The eigth extra mouse button.
+       /// </summary>
+       Button8,
+       /// <summary>
+       /// The ninth extra mouse button.
+       /// </summary>
+       Button9,
+       /// <summary>
+       /// Indicates the last available mouse button.
+       /// </summary>
+       LastButton
+    }
+}
diff --git a/Crow/src/Input/MouseEventArgs.cs b/Crow/src/Input/MouseEventArgs.cs
new file mode 100644 (file)
index 0000000..6874109
--- /dev/null
@@ -0,0 +1,372 @@
+#region License
+//
+// MouseEventArgs.cs
+//
+// Author:
+//       Stefanos A. <stapostol@gmail.com>
+//
+// Copyright (c) 2006-2014 Stefanos Apostolopoulos
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+//
+#endregion
+
+using System;
+
+namespace Crow
+{
+    /// <summary>
+    /// Defines the event data for <see cref="MouseDevice"/> events.
+    /// </summary>
+    /// <remarks>
+    /// <para>
+    /// Do not cache instances of this type outside their event handler.
+    /// If necessary, you can clone an instance using the
+    /// <see cref="MouseEventArgs(MouseEventArgs)"/> constructor.
+    /// </para>
+    /// </remarks>
+    public class MouseEventArgs : EventArgs
+    {
+       #region Fields
+
+       MouseState state;
+
+       #endregion
+
+       #region Constructors
+
+       /// <summary>
+       /// Constructs a new instance.
+       /// </summary>
+       public MouseEventArgs()
+       {
+           state.SetIsConnected(true);
+       }
+
+       /// <summary>
+       /// Constructs a new instance.
+       /// </summary>
+       /// <param name="x">The X position.</param>
+       /// <param name="y">The Y position.</param>
+       public MouseEventArgs(int x, int y)
+           : this()
+       {
+           state.X = x;
+           state.Y = y;
+       }
+
+       /// <summary>
+       /// Constructs a new instance.
+       /// </summary>
+       /// <param name="args">The <see cref="MouseEventArgs"/> instance to clone.</param>
+       public MouseEventArgs(MouseEventArgs args)
+           : this(args.X, args.Y)
+       {
+       }
+
+       #endregion
+
+       #region Protected Members
+
+       internal void SetButton(MouseButton button, ButtonState state)
+       {
+           if (button < 0 || button > MouseButton.LastButton)
+               throw new ArgumentOutOfRangeException();
+
+           switch (state)
+           {
+               case ButtonState.Pressed:
+                   this.state.EnableBit((int)button);
+                   break;
+
+               case ButtonState.Released:
+                   this.state.DisableBit((int)button);
+                   break;
+           }
+       }
+
+       internal ButtonState GetButton(MouseButton button)
+       {
+           if (button < 0 || button > MouseButton.LastButton)
+               throw new ArgumentOutOfRangeException();
+
+           return
+               state.ReadBit((int)button) ?
+               ButtonState.Pressed : ButtonState.Released;
+       }
+
+       #endregion
+
+       #region Public Members
+
+       /// <summary>
+       /// Gets the X position of the mouse for the event.
+       /// </summary>
+       public int X { get { return state.X; } internal set { state.X = value; } }
+
+       /// <summary>
+       /// Gets the Y position of the mouse for the event.
+       /// </summary>
+       public int Y { get { return state.Y; } internal set { state.Y = value; } }
+
+       /// <summary>
+       /// Gets a <see cref="System.Drawing.Point"/> representing the location of the mouse for the event.
+       /// </summary>
+       public Point Position
+       {
+           get { return new Point(state.X, state.Y); }
+           set
+           {
+               X = value.X;
+               Y = value.Y;
+           }
+       }
+
+       /// <summary>
+       /// Gets the current <see cref="OpenTK.Input.MouseState"/>.
+       /// </summary>
+       public MouseState Mouse
+       {
+           get { return state; }
+           set { state = value; }
+       }
+
+       #endregion
+    }
+
+    /// <summary>
+    /// Defines the event data for <see cref="MouseDevice.Move"/> events.
+    /// </summary>
+    /// <remarks>
+    /// <para>
+    /// Do not cache instances of this type outside their event handler.
+    /// If necessary, you can clone an instance using the
+    /// <see cref="MouseMoveEventArgs(MouseMoveEventArgs)"/> constructor.
+    /// </para>
+    /// </remarks>
+    public class MouseMoveEventArgs : MouseEventArgs
+    {
+       #region Fields
+
+       int x_delta, y_delta;
+
+       #endregion
+
+       #region Constructors
+
+       /// <summary>
+       /// Constructs a new <see cref="MouseMoveEventArgs"/> instance.
+       /// </summary>
+       public MouseMoveEventArgs() { }
+
+       /// <summary>
+       /// Constructs a new <see cref="MouseMoveEventArgs"/> instance.
+       /// </summary>
+       /// <param name="x">The X position.</param>
+       /// <param name="y">The Y position.</param>
+       /// <param name="xDelta">The change in X position produced by this event.</param>
+       /// <param name="yDelta">The change in Y position produced by this event.</param>
+       public MouseMoveEventArgs(int x, int y, int xDelta, int yDelta)
+           : base(x, y)
+       {
+           XDelta = xDelta;
+           YDelta = yDelta;
+       }
+
+       /// <summary>
+       /// Constructs a new <see cref="MouseMoveEventArgs"/> instance.
+       /// </summary>
+       /// <param name="args">The <see cref="MouseMoveEventArgs"/> instance to clone.</param>
+       public MouseMoveEventArgs(MouseMoveEventArgs args)
+           : this(args.X, args.Y, args.XDelta, args.YDelta)
+       {
+       }
+
+       #endregion
+
+       #region Public Members
+
+       /// <summary>
+       /// Gets the change in X position produced by this event.
+       /// </summary>
+       public int XDelta { get { return x_delta; } internal set { x_delta = value; } }
+
+       /// <summary>
+       /// Gets the change in Y position produced by this event.
+       /// </summary>
+       public int YDelta { get { return y_delta; } internal set { y_delta = value; } }
+
+       #endregion
+    }
+
+    /// <summary>
+    /// Defines the event data for <see cref="MouseDevice.ButtonDown"/> and <see cref="MouseDevice.ButtonUp"/> events.
+    /// </summary>
+    /// <remarks>
+    /// <para>
+    /// Do not cache instances of this type outside their event handler.
+    /// If necessary, you can clone an instance using the
+    /// <see cref="MouseButtonEventArgs(MouseButtonEventArgs)"/> constructor.
+    /// </para>
+    /// </remarks>
+    public class MouseButtonEventArgs : MouseEventArgs
+    {
+       #region Fields
+
+       MouseButton button;
+
+       #endregion
+
+       #region Constructors
+
+       /// <summary>
+       /// Constructs a new <see cref="MouseButtonEventArgs"/> instance.
+       /// </summary>
+       public MouseButtonEventArgs() { }
+
+       /// <summary>
+       /// Constructs a new <see cref="MouseButtonEventArgs"/> instance.
+       /// </summary>
+       /// <param name="x">The X position.</param>
+       /// <param name="y">The Y position.</param>
+       /// <param name="button">The mouse button for the event.</param>
+       /// <param name="pressed">The current state of the button.</param>
+       public MouseButtonEventArgs(int x, int y, MouseButton button, bool pressed)
+           : base(x, y)
+       {
+           this.button = button;
+           this.IsPressed = pressed;
+       }
+
+       public MouseButtonEventArgs(MouseButton button)
+               : base()
+       {
+               this.button = button;
+       }
+
+       /// <summary>
+       /// Constructs a new <see cref="MouseButtonEventArgs"/> instance.
+       /// </summary>
+       /// <param name="args">The <see cref="MouseButtonEventArgs"/> instance to clone.</param>
+       public MouseButtonEventArgs(MouseButtonEventArgs args)
+           : this(args.X, args.Y, args.Button, args.IsPressed)
+       {
+       }
+
+       #endregion
+
+       #region Public Members
+
+       /// <summary>
+       /// Gets the <see cref="MouseButton"/> that triggered this event.
+       /// </summary>
+       public MouseButton Button { get { return button; } internal set { button = value; } }
+
+       /// <summary>
+       /// Gets a System.Boolean representing the state of the mouse button for the event.
+       /// </summary>
+       public bool IsPressed
+       {
+           get { return GetButton(Button) == ButtonState.Pressed; }
+           internal set { SetButton(Button, value ? ButtonState.Pressed : ButtonState.Released); }
+       }
+
+       #endregion
+    }
+
+    /// <summary>
+    /// Defines the event data for <see cref="MouseDevice.WheelChanged"/> events.
+    /// </summary>
+    /// <remarks>
+    /// <para>
+    /// Do not cache instances of this type outside their event handler.
+    /// If necessary, you can clone an instance using the
+    /// <see cref="MouseWheelEventArgs(MouseWheelEventArgs)"/> constructor.
+    /// </para>
+    /// </remarks>
+    public class MouseWheelEventArgs : MouseEventArgs
+    {
+       #region Fields
+
+       float delta;
+
+       #endregion
+
+       #region Constructors
+
+       /// <summary>
+       /// Constructs a new <see cref="MouseWheelEventArgs"/> instance.
+       /// </summary>
+       public MouseWheelEventArgs() { }
+
+       /// <summary>
+       /// Constructs a new <see cref="MouseWheelEventArgs"/> instance.
+       /// </summary>
+       /// <param name="x">The X position.</param>
+       /// <param name="y">The Y position.</param>
+       /// <param name="value">The value of the wheel.</param>
+       /// <param name="delta">The change in value of the wheel for this event.</param>
+       public MouseWheelEventArgs(int x, int y, int value, int delta)
+           : base(x, y)
+       {
+           Mouse.SetScrollAbsolute(Mouse.Scroll.X, value);
+           this.delta = delta;
+       }
+
+       /// <summary>
+       /// Constructs a new <see cref="MouseWheelEventArgs"/> instance.
+       /// </summary>
+       /// <param name="args">The <see cref="MouseWheelEventArgs"/> instance to clone.</param>
+       public MouseWheelEventArgs(MouseWheelEventArgs args)
+           : this(args.X, args.Y, args.Value, args.Delta)
+       {
+       }
+
+       #endregion
+
+       #region Public Members
+
+       /// <summary>
+       /// Gets the value of the wheel in integer units.
+       /// To support high-precision mice, it is recommended to use <see cref="ValuePrecise"/> instead.
+       /// </summary>
+       public int Value { get { return (int)Math.Round(Mouse.Scroll.Y, MidpointRounding.AwayFromZero); } }
+
+       /// <summary>
+       /// Gets the change in value of the wheel for this event in integer units.
+       /// To support high-precision mice, it is recommended to use <see cref="DeltaPrecise"/> instead.
+       /// </summary>
+       public int Delta { get { return (int)Math.Round(delta, MidpointRounding.AwayFromZero); } }
+
+       /// <summary>
+       /// Gets the precise value of the wheel in floating-point units.
+       /// </summary>
+       public float ValuePrecise
+       {
+           get { return Mouse.Scroll.Y; }
+       }
+
+       /// <summary>
+       /// Gets the precise change in value of the wheel for this event in floating-point units.
+       /// </summary>
+       public float DeltaPrecise { get { return delta; } internal set { delta = value; } }
+
+       #endregion
+    }
+}
diff --git a/Crow/src/Input/MouseScroll.cs b/Crow/src/Input/MouseScroll.cs
new file mode 100644 (file)
index 0000000..a04e9d6
--- /dev/null
@@ -0,0 +1,118 @@
+#region License
+//
+// MouseWheel.cs
+//
+// Author:
+//       Stefanos A. <stapostol@gmail.com>
+//
+// Copyright (c) 2006-2014 Stefanos Apostolopoulos
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+//
+#endregion
+
+using System;
+
+namespace Crow
+{
+    /// <summary>
+    /// Represents the state of a mouse wheel.
+    /// </summary>
+    public struct MouseScroll : IEquatable<MouseScroll>
+    {
+       #region Public Members
+
+       /// <summary>
+       /// Gets the absolute horizontal offset of the wheel,
+       /// or 0 if no horizontal scroll wheel exists.
+       /// </summary>
+       /// <value>The x.</value>
+       public float X { get; internal set; }
+
+       /// <summary>
+       /// Gets the absolute vertical offset of the wheel,
+       /// or 0 if no vertical scroll wheel exists.
+       /// </summary>
+       /// <value>The y.</value>
+       public float Y { get; internal set; }
+
+       /// <param name="left">A <see cref="MouseScroll"/> instance to test for equality.</param>
+       /// <param name="right">A <see cref="MouseScroll"/> instance to test for equality.</param>
+       public static bool operator ==(MouseScroll left, MouseScroll right)
+       {
+           return left.Equals(right);
+       }
+
+       /// <param name="left">A <see cref="MouseScroll"/> instance to test for inequality.</param>
+       /// <param name="right">A <see cref="MouseScroll"/> instance to test for inequality.</param>
+       public static bool operator !=(MouseScroll left, MouseScroll right)
+       {
+           return !left.Equals(right);
+       }
+
+       /// <summary>
+       /// Returns a <see cref="System.String"/> that represents the current <see cref="OpenTK.Input.MouseScroll"/>.
+       /// </summary>
+       /// <returns>A <see cref="System.String"/> that represents the current <see cref="OpenTK.Input.MouseScroll"/>.</returns>
+       public override string ToString()
+       {
+           return string.Format("[X={0:0.00}, Y={1:0.00}]", X, Y);
+       }
+
+       /// <summary>
+       /// Serves as a hash function for a <see cref="OpenTK.Input.MouseScroll"/> object.
+       /// </summary>
+       /// <returns>A hash code for this instance that is suitable for use in hashing algorithms and data structures such as a
+       /// hash table.</returns>
+       public override int GetHashCode()
+       {
+           return X.GetHashCode() ^ Y.GetHashCode();
+       }
+
+       /// <summary>
+       /// Determines whether the specified <see cref="System.Object"/> is equal to the current <see cref="OpenTK.Input.MouseScroll"/>.
+       /// </summary>
+       /// <param name="obj">The <see cref="System.Object"/> to compare with the current <see cref="OpenTK.Input.MouseScroll"/>.</param>
+       /// <returns><c>true</c> if the specified <see cref="System.Object"/> is equal to the current
+       /// <see cref="OpenTK.Input.MouseScroll"/>; otherwise, <c>false</c>.</returns>
+       public override bool Equals(object obj)
+       {
+           return
+               obj is MouseScroll &&
+               Equals((MouseScroll)obj);
+       }
+
+       #endregion
+
+       #region IEquatable Members
+
+       /// <summary>
+       /// Determines whether the specified <see cref="OpenTK.Input.MouseScroll"/> is equal to the current <see cref="OpenTK.Input.MouseScroll"/>.
+       /// </summary>
+       /// <param name="other">The <see cref="OpenTK.Input.MouseScroll"/> to compare with the current <see cref="OpenTK.Input.MouseScroll"/>.</param>
+       /// <returns><c>true</c> if the specified <see cref="OpenTK.Input.MouseScroll"/> is equal to the current
+       /// <see cref="OpenTK.Input.MouseScroll"/>; otherwise, <c>false</c>.</returns>
+       public bool Equals(MouseScroll other)
+       {
+           return X == other.X && Y == other.Y;
+       }
+
+       #endregion
+    }
+}
diff --git a/Crow/src/Input/MouseState.cs b/Crow/src/Input/MouseState.cs
new file mode 100644 (file)
index 0000000..f6db21e
--- /dev/null
@@ -0,0 +1,362 @@
+ #region License
+ //
+ // The Open Toolkit Library License
+ //
+ // Copyright (c) 2006 - 2009 the Open Toolkit library.
+ //
+ // Permission is hereby granted, free of charge, to any person obtaining a copy
+ // of this software and associated documentation files (the "Software"), to deal
+ // in the Software without restriction, including without limitation the rights to
+ // use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ // the Software, and to permit persons to whom the Software is furnished to do
+ // so, subject to the following conditions:
+ //
+ // The above copyright notice and this permission notice shall be included in all
+ // copies or substantial portions of the Software.
+ //
+ // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ // OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ // WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ // OTHER DEALINGS IN THE SOFTWARE.
+ //
+ #endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace Crow
+{
+    /// <summary>
+    /// Encapsulates the state of a mouse device.
+    /// </summary>
+    public struct MouseState : IEquatable<MouseState>
+    {
+       #region Fields
+
+       public const int MaxButtons = 16; // we are storing in an ushort
+       Point position;
+       MouseScroll scroll;
+       ushort buttons;
+       bool is_connected;
+
+       #endregion
+
+
+
+       #region Public Members
+
+       /// <summary>
+       /// Gets a <see cref="System.Boolean"/> indicating whether the specified
+       /// <see cref="OpenTK.Input.MouseButton"/> is pressed.
+       /// </summary>
+       /// <param name="button">The <see cref="OpenTK.Input.MouseButton"/> to check.</param>
+       /// <returns>True if key is pressed; false otherwise.</returns>
+       public bool this[MouseButton button]
+       {
+           get { return IsButtonDown(button); }
+           internal set
+           {
+               if (value)
+                   EnableBit((int)button);
+               else
+                   DisableBit((int)button);
+           }
+       }
+
+       /// <summary>
+       /// Gets a <see cref="System.Boolean"/> indicating whether this button is down.
+       /// </summary>
+       /// <param name="button">The <see cref="OpenTK.Input.MouseButton"/> to check.</param>
+       public bool IsButtonDown(MouseButton button)
+       {
+           return ReadBit((int)button);
+       }
+
+       /// <summary>
+       /// Gets a <see cref="System.Boolean"/> indicating whether this button is up.
+       /// </summary>
+       /// <param name="button">The <see cref="OpenTK.Input.MouseButton"/> to check.</param>
+       public bool IsButtonUp(MouseButton button)
+       {
+           return !ReadBit((int)button);
+       }
+
+       /// <summary>
+       /// Gets the absolute wheel position in integer units.
+       /// To support high-precision mice, it is recommended to use <see cref="WheelPrecise"/> instead.
+       /// </summary>
+       public int Wheel
+       {
+           get { return (int)Math.Round(scroll.Y, MidpointRounding.AwayFromZero); }
+       }
+
+       /// <summary>
+       /// Gets the absolute wheel position in floating-point units.
+       /// </summary>
+       public float WheelPrecise
+       {
+           get { return scroll.Y; }
+       }
+
+       /// <summary>
+       /// Gets a <see cref="OpenTK.Input.MouseScroll"/> instance,
+       /// representing the current state of the mouse scroll wheel.
+       /// </summary>
+       public MouseScroll Scroll
+       {
+           get { return scroll; }
+       }
+
+       /// <summary>
+       /// Gets an integer representing the absolute x position of the pointer, in window pixel coordinates.
+       /// </summary>
+       public int X
+       {
+               get { return position.X; }
+           set { position.X = value; }
+       }
+
+       /// <summary>
+       /// Gets an integer representing the absolute y position of the pointer, in window pixel coordinates.
+       /// </summary>
+       public int Y
+       {
+               get { return position.Y; }
+           set { position.Y = value; }
+       }
+
+       /// <summary>
+       /// Gets a <see cref="System.Boolean"/> indicating whether the left mouse button is pressed.
+       /// This property is intended for XNA compatibility.
+       /// </summary>
+       public ButtonState LeftButton
+       {
+           get { return IsButtonDown(MouseButton.Left) ? ButtonState.Pressed : ButtonState.Released; }
+       }
+
+       /// <summary>
+       /// Gets a <see cref="System.Boolean"/> indicating whether the middle mouse button is pressed.
+       /// This property is intended for XNA compatibility.
+       /// </summary>
+       public ButtonState MiddleButton
+       {
+           get { return IsButtonDown(MouseButton.Middle) ? ButtonState.Pressed : ButtonState.Released; }
+       }
+
+       /// <summary>
+       /// Gets a <see cref="System.Boolean"/> indicating whether the right mouse button is pressed.
+       /// This property is intended for XNA compatibility.
+       /// </summary>
+       public ButtonState RightButton
+       {
+           get { return IsButtonDown(MouseButton.Right) ? ButtonState.Pressed : ButtonState.Released; }
+       }
+
+       /// <summary>
+       /// Gets a <see cref="System.Boolean"/> indicating whether the first extra mouse button is pressed.
+       /// This property is intended for XNA compatibility.
+       /// </summary>
+       public ButtonState XButton1
+       {
+           get { return IsButtonDown(MouseButton.Button1) ? ButtonState.Pressed : ButtonState.Released; }
+       }
+
+       /// <summary>
+       /// Gets a <see cref="System.Boolean"/> indicating whether the second extra mouse button is pressed.
+       /// This property is intended for XNA compatibility.
+       /// </summary>
+       public ButtonState XButton2
+       {
+           get { return IsButtonDown(MouseButton.Button2) ? ButtonState.Pressed : ButtonState.Released; }
+       }
+
+       /// <summary>
+       /// Gets the absolute wheel position in integer units. This property is intended for XNA compatibility.
+       /// To support high-precision mice, it is recommended to use <see cref="WheelPrecise"/> instead.
+       /// </summary>
+       public int ScrollWheelValue
+       {
+           get { return Wheel; }
+       }
+
+       /// <summary>
+       /// Gets a value indicating whether this instance is connected.
+       /// </summary>
+       /// <value><c>true</c> if this instance is connected; otherwise, <c>false</c>.</value>
+       public bool IsConnected
+       {
+           get { return is_connected; }
+           internal set { is_connected = value; }
+       }
+
+       /// <summary>
+       /// Checks whether two <see cref="MouseState" /> instances are equal.
+       /// </summary>
+       /// <param name="left">
+       /// A <see cref="MouseState"/> instance.
+       /// </param>
+       /// <param name="right">
+       /// A <see cref="MouseState"/> instance.
+       /// </param>
+       /// <returns>
+       /// True if both left is equal to right; false otherwise.
+       /// </returns>
+       public static bool operator ==(MouseState left, MouseState right)
+       {
+           return left.Equals(right);
+       }
+
+       /// <summary>
+       /// Checks whether two <see cref="MouseState" /> instances are not equal.
+       /// </summary>
+       /// <param name="left">
+       /// A <see cref="MouseState"/> instance.
+       /// </param>
+       /// <param name="right">
+       /// A <see cref="MouseState"/> instance.
+       /// </param>
+       /// <returns>
+       /// True if both left is not equal to right; false otherwise.
+       /// </returns>
+       public static bool operator !=(MouseState left, MouseState right)
+       {
+           return !left.Equals(right);
+       }
+
+       /// <summary>
+       /// Compares to an object instance for equality.
+       /// </summary>
+       /// <param name="obj">
+       /// The <see cref="System.Object"/> to compare to.
+       /// </param>
+       /// <returns>
+       /// True if this instance is equal to obj; false otherwise.
+       /// </returns>
+       public override bool Equals(object obj)
+       {
+           if (obj is MouseState)
+           {
+               return this == (MouseState)obj;
+           }
+           else
+           {
+               return false;
+           }
+       }
+
+       /// <summary>
+       /// Generates a hashcode for the current instance.
+       /// </summary>
+       /// <returns>
+       /// A <see cref="System.Int32"/> represting the hashcode for this instance.
+       /// </returns>
+       public override int GetHashCode()
+       {
+           return buttons.GetHashCode() ^ X.GetHashCode() ^ Y.GetHashCode() ^ scroll.GetHashCode();
+       }
+
+       /// <summary>
+       /// Returns a <see cref="System.String"/> that represents the current <see cref="OpenTK.Input.MouseState"/>.
+       /// </summary>
+       /// <returns>A <see cref="System.String"/> that represents the current <see cref="OpenTK.Input.MouseState"/>.</returns>
+       public override string ToString()
+       {
+           string b = Convert.ToString(buttons, 2).PadLeft(10, '0');
+           return String.Format("[X={0}, Y={1}, Scroll={2}, Buttons={3}, IsConnected={4}]",
+               X, Y, Scroll, b, IsConnected);
+       }
+
+       #endregion
+
+       #region Internal Members
+
+       internal Point Position
+       {
+           get { return position; }
+           set { position = value; }
+       }
+
+       internal bool ReadBit(int offset)
+       {
+           ValidateOffset(offset);
+           return (buttons & (1 << offset)) != 0;
+       }
+
+       public void EnableBit(int offset)
+       {
+           ValidateOffset(offset);
+           buttons |= unchecked((ushort)(1 << offset));
+       }
+
+       public void DisableBit(int offset)
+       {
+           ValidateOffset(offset);
+           buttons &= unchecked((ushort)(~(1 << offset)));
+       }
+
+       internal void MergeBits(MouseState other)
+       {
+           buttons |= other.buttons;
+           SetScrollRelative(other.scroll.X, other.scroll.Y);
+           X += other.X;
+           Y += other.Y;
+           IsConnected |= other.IsConnected;
+       }
+
+       internal void SetIsConnected(bool value)
+       {
+           IsConnected = value;
+       }
+
+       #region Internal Members
+
+       internal void SetScrollAbsolute(float x, float y)
+       {
+           scroll.X = x;
+           scroll.Y = y;
+       }
+
+       internal void SetScrollRelative(float x, float y)
+       {
+           scroll.X += x;
+           scroll.Y += y;
+       }
+
+       #endregion
+
+       #endregion
+
+       #region Private Members
+
+       static void ValidateOffset(int offset)
+       {
+           if (offset < 0 || offset >= 16)
+               throw new ArgumentOutOfRangeException("offset");
+       }
+
+       #endregion
+
+       #region IEquatable<MouseState> Members
+
+       /// <summary>
+       /// Compares two MouseState instances.
+       /// </summary>
+       /// <param name="other">The instance to compare two.</param>
+       /// <returns>True, if both instances are equal; false otherwise.</returns>
+       public bool Equals(MouseState other)
+       {
+           return
+               buttons == other.buttons &&
+               X == other.X &&
+               Y == other.Y &&
+               Scroll == other.Scroll;
+       }
+
+       #endregion
+    }
+}
diff --git a/Crow/src/Instantiator.cs b/Crow/src/Instantiator.cs
new file mode 100644 (file)
index 0000000..c59043b
--- /dev/null
@@ -0,0 +1,1199 @@
+//
+// Instantiator.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.Threading;
+using System.IO;
+using System.Text;
+using System.Diagnostics;
+using System.Xml;
+using System.Reflection.Emit;
+using System.Reflection;
+using System.Collections.Generic;
+using System.Linq;
+using Crow.IML;
+
+namespace Crow.IML
+{
+       public class InstantiatorException : Exception {
+               public string Path;
+               public InstantiatorException (string path, Exception innerException)
+                       : base ("ITor error:" + path, innerException){
+                       Path = path;
+               }
+       }
+       public delegate object InstanciatorInvoker(Interface iface);
+
+       /// <summary>
+       /// Reflexion being very slow, the settings of the starting values for widgets are set by a dynamic method.
+       /// This method is created on the first instacing and is recalled for further widget instancing.
+       /// 
+       /// It includes:
+       ///     - XML values setting
+       ///     - Default values (appearing as attribute in C#)  loading
+       ///     - Styling
+       /// 
+       /// Instantiators are shared amongs interfaces. Their are stored with their path as key, and inlined template
+       /// and itemtemplate are stored with a generated uuid
+       /// </summary>
+       public class Instantiator
+       {
+               #region Dynamic Method ID generation
+               static long curId = 0;
+               internal static long NewId {
+                       get { return curId++; }
+               }
+               #endregion
+
+               public Type RootType;
+               InstanciatorInvoker loader;
+               protected Interface iface;
+
+               internal string sourcePath;
+
+               #if DESIGN_MODE
+               public static int NextInstantiatorID = 0;
+               public int currentInstantiatorID = 0;
+               int currentDesignID = 0;
+               internal string NextDesignID { get { return string.Format ("{0}_{1}",currentInstantiatorID, currentDesignID++); }}
+               #endif
+
+               #region CTOR
+               /// <summary>
+               /// Initializes a new instance of the Instantiator class.
+               /// </summary>
+               public Instantiator (Interface _iface, string path) : this (_iface, _iface.GetStreamFromPath(path), path) {
+                       
+               }
+               /// <summary>
+               /// Initializes a new instance of the Instantiator class.
+               /// </summary>
+               public Instantiator (Interface _iface, Stream stream, string srcPath = null)
+               {
+                       #if DESIGN_MODE
+                       currentInstantiatorID = NextInstantiatorID++;
+                       #endif
+                       iface = _iface;
+                       sourcePath = srcPath;
+                       #if DEBUG_LOAD
+                       Stopwatch loadingTime = new Stopwatch ();
+                       loadingTime.Start ();
+                       #endif
+                       try {
+                               using (XmlReader itr = XmlReader.Create (stream)) {
+                                       parseIML (itr);
+                               }
+                               stream.Dispose ();
+                       } catch (Exception ex) {
+                               throw new InstantiatorException(sourcePath, ex);
+                       } finally {
+                               #if DEBUG_LOAD
+                               loadingTime.Stop ();
+                               Debug.WriteLine ("IML Instantiator creation '{2}' : {0} ticks, {1} ms",
+                               loadingTime.ElapsedTicks, loadingTime.ElapsedMilliseconds, sourcePath);
+                               #endif
+                       }
+               }
+               /// <summary>
+               /// Initializes a new instance of the Instantiator class with an already openned xml reader
+               /// positionned on the start tag inside the itemTemplate
+               /// </summary>
+               public Instantiator (Interface _iface, XmlReader itr){
+                       #if DESIGN_MODE
+                       currentInstantiatorID = NextInstantiatorID++;
+                       #endif
+                       iface = _iface;
+                       parseIML (itr);
+               }
+               //TODO:check if still used
+               public Instantiator (Interface _iface, Type _root, InstanciatorInvoker _loader)
+               {
+                       #if DESIGN_MODE
+                       currentInstantiatorID = NextInstantiatorID++;
+                       #endif
+                       iface = _iface;
+                       RootType = _root;
+                       loader = _loader;
+               }
+               /// <summary>
+               /// Create a new instantiator from IML fragment provided directely as a string
+               /// </summary>
+               /// <returns>A new instantiator</returns>
+               /// <param name="fragment">IML string</param>
+               public static Instantiator CreateFromImlFragment (Interface _iface, string fragment)
+               {
+                       using (Stream s = new MemoryStream (Encoding.UTF8.GetBytes (fragment))) {
+                               return new Instantiator (_iface, s);
+                       }
+               }
+               #endregion
+
+               /// <summary>
+               /// Creates a new instance of the GraphicObject compiled in the instantiator
+               /// and bind it the an interface
+               /// </summary>
+               /// <returns>The new graphic object instance</returns>
+               /// <param name="iface">The interface to bind to</param>
+               public GraphicObject CreateInstance(){
+                       return loader (iface) as GraphicObject;
+               }
+               /// <summary>
+               /// Creates a new instance of T compiled in the instantiator
+               /// and bind it the an interface
+               /// </summary>
+               /// <returns>The new T instance</returns>
+               /// <param name="iface">The interface to bind to</param>
+               public T CreateInstance<T>(){
+                       return (T)loader (iface);
+               }
+               List<DynamicMethod> dsValueChangedDynMeths = new List<DynamicMethod>();
+               List<Delegate> cachedDelegates = new List<Delegate>();
+               /// <summary>
+               /// store indices of template delegate to be handled by root parentChanged event
+               /// </summary>
+               List<int> templateCachedDelegateIndices = new List<int>();
+               /// <summary>
+               /// Store template bindings in the instantiator
+               /// </summary>
+               Delegate templateBinding;
+
+               #region IML parsing
+               /// <summary>
+               /// Parses IML and build a dynamic method that will be used to instantiate one or multiple occurences of the IML file or fragment
+               /// </summary>
+               void parseIML (XmlReader reader) {
+                       IMLContext ctx = new IMLContext (findRootType (reader));
+
+                       ctx.nodesStack.Push (new Node (ctx.RootType));
+                       emitLoader (reader, ctx);
+                       ctx.nodesStack.Pop ();
+
+                       foreach (int idx in templateCachedDelegateIndices)
+                               ctx.emitCachedDelegateHandlerAddition(idx, CompilerServices.eiLogicalParentChanged);
+
+                       ctx.ResolveNamedTargets ();
+
+                       emitBindingDelegates (ctx);
+
+            ctx.il.Emit (OpCodes.Ldloc_0);//load root obj to return
+                       ctx.il.Emit(OpCodes.Ret);
+
+                       reader.Read ();//close tag
+                       RootType = ctx.RootType;
+                       loader = (InstanciatorInvoker)ctx.dm.CreateDelegate (typeof (InstanciatorInvoker), this);
+               }
+               /// <summary>
+               /// read first node to set GraphicObject class for loading
+               /// and let reader position on that node
+               /// </summary>
+               Type findRootType (XmlReader reader)
+               {
+                       string root = "Object";
+                       while (reader.NodeType != XmlNodeType.Element)
+                               reader.Read ();
+                       root = reader.Name;
+                       Type t = tryGetGOType (root);
+                       if (t == null)
+                               throw new Exception ("IML parsing error: undefined root type (" + root + ")");
+                       return t;
+               }
+               /// <summary>
+               /// main parsing entry point
+               /// </summary>
+               void emitLoader (XmlReader reader, IMLContext ctx)
+               {
+                       int curLine = ctx.curLine;
+
+                       #if DESIGN_MODE
+                       IXmlLineInfo li = (IXmlLineInfo)reader;
+                       ctx.curLine += li.LineNumber - 1;
+                       #endif
+
+                       string tmpXml = reader.ReadOuterXml ();
+
+                       if (ctx.nodesStack.Peek().HasTemplate)
+                               emitTemplateLoad (ctx, tmpXml);
+
+                       emitGOLoad (ctx, tmpXml);
+
+                       ctx.curLine = curLine;
+                       //emitCheckAndBindValueChanged (ctx);
+               }
+               /// <summary>
+               /// Parses the item template tag.
+               /// </summary>
+               /// <returns>the string triplet dataType, itemTmpID read as attribute of this tag</returns>
+               /// <param name="reader">current xml text reader</param>
+               /// <param name="itemTemplatePath">file containing the templates if its a dedicated one</param>
+               string[] parseItemTemplateTag (XmlReader reader, string itemTemplatePath = "") {
+                       string dataType = "default", datas = "", path = "", dataTest = "TypeOf";
+                       while (reader.MoveToNextAttribute ()) {
+                               if (reader.Name == "DataType")
+                                       dataType = reader.Value;
+                               else if (reader.Name == "Data")
+                                       datas = reader.Value;
+                               else if (reader.Name == "Path")
+                                       path = reader.Value;
+                               else if (reader.Name == "DataTest")
+                                       dataTest = reader.Value;
+                       }
+                       reader.MoveToElement ();
+
+                       string itemTmpID = itemTemplatePath;
+
+                       if (string.IsNullOrEmpty (path)) {
+                               itemTmpID += Guid.NewGuid ().ToString ();
+                               iface.Instantiators [itemTmpID] =
+                                       new ItemTemplate (iface, new MemoryStream (Encoding.UTF8.GetBytes (reader.ReadInnerXml ())), dataTest, dataType, datas);
+
+                       } else {
+                               if (!reader.IsEmptyElement)
+                                       throw new Exception ("ItemTemplate with Path attribute set may not include sub nodes");
+                               itemTmpID += path+dataType+datas;
+                               if (!iface.Instantiators.ContainsKey (itemTmpID))
+                                       iface.Instantiators [itemTmpID] =
+                                               new ItemTemplate (iface, path, dataTest, dataType, datas);
+                       }
+                       return new string [] { dataType, itemTmpID, datas, dataTest };
+               }
+               /// <summary>
+               /// process template and item template definition prior to
+               /// other attributes or childs processing
+               /// </summary>
+               /// <param name="ctx">Loading Context</param>
+               /// <param name="tmpXml">xml fragment</param>
+               void emitTemplateLoad (IMLContext ctx, string tmpXml) {
+                       //if its a template, first read template elements
+                       using (XmlTextReader reader = new XmlTextReader (tmpXml, XmlNodeType.Element, null)) {
+                               List<string[]> itemTemplateIds = new List<string[]> ();
+                               bool inlineTemplate = false;
+
+                               reader.Read ();
+                               string templatePath = reader.GetAttribute ("Template");
+                               string itemTemplatePath = reader.GetAttribute ("ItemTemplate");
+
+                               int depth = reader.Depth + 1;
+                               while (reader.Read ()) {
+                                       if (!reader.IsStartElement () || reader.Depth > depth)
+                                               continue;
+                                       if (reader.Name == "Template") {
+                                               inlineTemplate = true;
+                                               #if DESIGN_MODE
+                                               ctx.il.Emit (OpCodes.Ldloc_0);
+                                               ctx.il.Emit (OpCodes.Ldc_I4_1);
+                                               ctx.il.Emit (OpCodes.Stfld, typeof(TemplatedControl).GetField("design_inlineTemplate"));
+                                               #endif
+                                               reader.Read ();
+                                               readChildren (reader, ctx, -1);
+                                       } else if (reader.Name == "ItemTemplate")
+                                               itemTemplateIds.Add (parseItemTemplateTag (reader));                                    
+                               }
+
+                               if (!inlineTemplate) {//load from path or default template
+                                       ctx.il.Emit (OpCodes.Ldloc_0);//Load  current templatedControl ref
+                                       if (string.IsNullOrEmpty (templatePath)) {
+                                               ctx.il.Emit (OpCodes.Ldnull);//default template loading
+                                       } else {
+                                               ctx.il.Emit (OpCodes.Ldarg_1);//load currentInterface
+                                               ctx.il.Emit (OpCodes.Ldstr, templatePath); //Load template path string
+                                               ctx.il.Emit (OpCodes.Callvirt,//call Interface.Load(path)
+                                                       CompilerServices.miIFaceLoad);
+                                       }
+                                       ctx.il.Emit (OpCodes.Callvirt, CompilerServices.miLoadTmp);//load template
+                               }
+                               if (itemTemplateIds.Count == 0) {
+                                       //try to load ItemTemplate(s) from ItemTemplate attribute of TemplatedGroup
+                                       if (!string.IsNullOrEmpty (itemTemplatePath)) {
+                                               //check if it is already loaded in cache as a single itemTemplate instantiator
+                                               if (iface.Instantiators.ContainsKey (itemTemplatePath)) {
+                                                       itemTemplateIds.Add (new string [] { "default", itemTemplatePath, "" });
+                                               } else {
+                                                       using (Stream stream = iface.GetStreamFromPath (itemTemplatePath)) {
+                                                               //itemtemplate files may have multiple root nodes
+                                                               XmlReaderSettings itrSettings = new XmlReaderSettings { ConformanceLevel = ConformanceLevel.Fragment };
+                                                               using (XmlReader itr = XmlReader.Create (stream, itrSettings)) {                                                                        
+                                                                       while (itr.Read ()) {
+                                                                               if (!itr.IsStartElement ())
+                                                                                       continue;
+                                                                               if (itr.NodeType == XmlNodeType.Element) {
+                                                                                       if (itr.Name != "ItemTemplate") {
+                                                                                               //the file contains a single template to use as default
+                                                                                               iface.Instantiators [itemTemplatePath] =
+                                                                                                       new ItemTemplate (iface, itr);
+                                                                                               itemTemplateIds.Add (new string [] { "default", itemTemplatePath, "", "TypeOf" });
+                                                                                               break;//we should be at the end of the file
+                                                                                       }
+                                                                                       itemTemplateIds.Add (parseItemTemplateTag (itr, itemTemplatePath));
+                                                                               }
+                                                                       }
+                                                               }
+                                                       }
+                                               }
+                                       }
+                               }
+                               if (!ctx.nodesStack.Peek ().IsTemplatedGroup)
+                                       return;
+                               //add the default item template if no default is defined
+                               if (!itemTemplateIds.Any(ids=>ids[0] == "default"))
+                                       itemTemplateIds.Add (new string [] { "default", "#Crow.DefaultItem.template", "", "TypeOf"});
+                               //get item templates 
+                               foreach (string [] iTempId in itemTemplateIds) {
+                                       ctx.il.Emit (OpCodes.Ldloc_0);//load TempControl ref
+                                       ctx.il.Emit (OpCodes.Ldfld, CompilerServices.fldItemTemplates);//load ItemTemplates dic field
+
+                                       //prepare argument to add itemTemplate to templated group dic of ItemTemplates
+                                       ctx.il.Emit (OpCodes.Ldstr, iTempId [0]);//load key
+                                       //load itemTemplate
+                                       ctx.il.Emit (OpCodes.Ldarg_1);//load currentInterface
+                                       ctx.il.Emit (OpCodes.Ldstr, iTempId [1]);//load path
+                                       ctx.il.Emit (OpCodes.Callvirt, CompilerServices.miGetITemp);
+                                       ctx.il.Emit (OpCodes.Callvirt, CompilerServices.miAddITemp);
+
+                                       if (!string.IsNullOrEmpty (iTempId [2])) {
+                                               //expand delegate creation
+                                               ctx.il.Emit (OpCodes.Ldloc_0);//load TempControl ref
+                                               ctx.il.Emit (OpCodes.Ldfld, CompilerServices.fldItemTemplates);
+                                               ctx.il.Emit (OpCodes.Ldstr, iTempId [0]);//load key
+                                               ctx.il.Emit (OpCodes.Callvirt, CompilerServices.miGetITempFromDic);
+                                               ctx.il.Emit (OpCodes.Ldloc_0);//load root of treeView
+                                               ctx.il.Emit (OpCodes.Callvirt, CompilerServices.miCreateExpDel);
+                                       }
+                               }
+                       }
+               }
+
+               #if DESIGN_MODE
+               void emitSetDesignAttribute (IMLContext ctx, string name, string value){
+                       //store member value in iml
+                       ctx.il.Emit (OpCodes.Ldloc_0);
+                       ctx.il.Emit (OpCodes.Ldfld, typeof(GraphicObject).GetField("design_iml_values"));
+                       ctx.il.Emit (OpCodes.Ldstr, name);
+                       if (string.IsNullOrEmpty (value))
+                               ctx.il.Emit (OpCodes.Ldnull);
+                       else
+                               ctx.il.Emit (OpCodes.Ldstr, value);
+                       ctx.il.Emit (OpCodes.Call, CompilerServices.miDicStrStrAdd);
+               }
+               #endif
+
+               /// <summary>
+               /// process styling, attributes and children loading.
+               /// </summary>
+               /// <param name="ctx">parsing context</param>
+               /// <param name="tmpXml">xml fragment</param>
+               void emitGOLoad (IMLContext ctx, string tmpXml) {
+                       using (XmlTextReader reader = new XmlTextReader (tmpXml, XmlNodeType.Element, null)) {
+                               reader.Read ();
+
+                               #if DESIGN_MODE
+                               IXmlLineInfo li = (IXmlLineInfo)reader;
+                               ctx.il.Emit (OpCodes.Ldloc_0);
+                               ctx.il.Emit (OpCodes.Ldstr, this.NextDesignID);
+                               ctx.il.Emit (OpCodes.Stfld, typeof(GraphicObject).GetField("design_id"));
+                               ctx.il.Emit (OpCodes.Ldloc_0);
+                               ctx.il.Emit (OpCodes.Ldc_I4, ctx.curLine + li.LineNumber);
+                               ctx.il.Emit (OpCodes.Stfld, typeof(GraphicObject).GetField("design_line"));
+                               ctx.il.Emit (OpCodes.Ldloc_0);
+                               ctx.il.Emit (OpCodes.Ldc_I4, li.LinePosition);
+                               ctx.il.Emit (OpCodes.Stfld, typeof(GraphicObject).GetField("design_column"));
+                               if (!string.IsNullOrEmpty (sourcePath)) {
+                                       ctx.il.Emit (OpCodes.Ldloc_0);
+                                       ctx.il.Emit (OpCodes.Ldstr, sourcePath);
+                                       ctx.il.Emit (OpCodes.Stfld, typeof(GraphicObject).GetField("design_imlPath"));
+                               }
+                               #endif
+
+                               #region Styling and default values loading
+                               //first check for Style attribute then trigger default value loading
+                               if (reader.HasAttributes) {
+                                       string style = reader.GetAttribute ("Style");
+                                       if (!string.IsNullOrEmpty (style)){
+                                               CompilerServices.EmitSetValue (ctx.il, CompilerServices.piStyle, style);
+                                               #if DESIGN_MODE
+                                               emitSetDesignAttribute (ctx, "Style", style);
+                                               #endif
+                                       }
+                               }
+                ctx.il.Emit (OpCodes.Ldloc_0);
+                ctx.il.Emit (OpCodes.Callvirt, CompilerServices.miLoadDefaultVals);
+                #endregion
+
+
+                               #region Attributes reading
+                               if (reader.HasAttributes) {
+
+                                       while (reader.MoveToNextAttribute ()) {
+                                               if (reader.Name == "Style")
+                                                       continue;
+
+                                               #if DESIGN_MODE
+                                               emitSetDesignAttribute (ctx, reader.Name, reader.Value);
+                                               #endif
+
+                                               MemberInfo mi = ctx.CurrentNodeType.GetMember (reader.Name).FirstOrDefault ();
+                                               if (mi == null)
+                                                       throw new Exception ("Member '" + reader.Name + "' not found in " + ctx.CurrentNodeType.Name);
+
+                                               if (mi.MemberType == MemberTypes.Event) {
+                                                       foreach (string exp in CompilerServices.splitOnSemiColumnOutsideAccolades(reader.Value)) {
+                                                               string trimed = exp.Trim();
+                                                               if (trimed.StartsWith ("{", StringComparison.OrdinalIgnoreCase))
+                                                                       compileAndStoreDynHandler (ctx, mi as EventInfo, trimed.Substring (1, trimed.Length - 2));
+                                                               else
+                                                                       emitHandlerBinding (ctx, mi as EventInfo, trimed);
+                                                       }
+
+                                                       continue;
+                                               }
+                                               PropertyInfo pi = mi as PropertyInfo;
+                                               if (pi == null)
+                                                       throw new Exception ("Member '" + reader.Name + "' is not a property in " + ctx.CurrentNodeType.Name);
+
+                                               if (pi.Name == "Name")
+                                                       ctx.StoreCurrentName (reader.Value);
+
+                                               if (reader.Value.StartsWith ("{", StringComparison.OrdinalIgnoreCase))
+                                                       readPropertyBinding (ctx, reader.Name, reader.Value.Substring (1, reader.Value.Length - 2));
+                                               else
+                                                       CompilerServices.EmitSetValue (ctx.il, pi, reader.Value);
+
+                                       }
+                                       reader.MoveToElement ();
+                               }
+                               #endregion
+
+                               readChildren (reader, ctx);
+
+                               ctx.nodesStack.ResetCurrentNodeIndex ();
+                       }
+               }
+               /// <summary>
+               /// Parse child node an generate corresponding msil
+               /// </summary>
+               void readChildren (XmlReader reader, IMLContext ctx, int startingIdx = 0)
+               {
+                       bool endTagReached = false;
+                       int nodeIdx = startingIdx;
+                       while (reader.Read ()) {
+                               switch (reader.NodeType) {
+                               case XmlNodeType.EndElement:
+                                       endTagReached = true;
+                                       break;
+                               case XmlNodeType.Element:
+                                       //skip Templates
+                                       if (reader.Name == "Template" ||
+                                           reader.Name == "ItemTemplate") {
+                                               reader.Skip ();
+                                               continue;
+                                       }
+
+                                       //push 2x current instance on stack for parenting and reseting loc0 to parent
+                                       //loc_0 will be used for child
+                                       ctx.il.Emit (OpCodes.Ldloc_0);
+                                       ctx.il.Emit (OpCodes.Ldloc_0);
+
+                                       Type t = tryGetGOType (reader.Name);
+                                       if (t == null)
+                                               throw new Exception (reader.Name + " type not found");
+                                       ConstructorInfo ci = t.GetConstructor (
+                                                                    BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public,  
+                                               null, Type.EmptyTypes, null);
+                                       if (ci == null)
+                                               throw new Exception ("No default parameterless constructor found in " + t.Name);                                        
+                                       ctx.il.Emit (OpCodes.Newobj, ci);
+                                       ctx.il.Emit (OpCodes.Stloc_0);//child is now loc_0
+                                       CompilerServices.emitSetCurInterface (ctx.il);
+
+                                       ctx.nodesStack.Push (new Node (t, nodeIdx));
+                                       emitLoader (reader, ctx);
+                                       ctx.nodesStack.Pop ();
+
+                                       ctx.il.Emit (OpCodes.Ldloc_0);//load child on stack for parenting
+                                       ctx.il.Emit (OpCodes.Callvirt, ctx.nodesStack.Peek().GetAddMethod(nodeIdx));
+                                       ctx.il.Emit (OpCodes.Stloc_0); //reset local to current go
+
+                                       nodeIdx++;
+
+                                       break;
+                               }
+                               if (endTagReached)
+                                       break;
+                       }
+               }
+               #endregion
+
+               void readPropertyBinding (IMLContext ctx, string sourceMember, string expression)
+               {
+                       NodeAddress sourceNA = ctx.CurrentNodeAddress;
+                       BindingDefinition bindingDef = sourceNA.GetBindingDef (sourceMember, expression);
+
+                       #if DEBUG_BINDING
+                       Debug.WriteLine("Property Binding: " + bindingDef.ToString());
+                       #endif
+
+                       if (bindingDef.IsDataSourceBinding)//bind on data source
+                               emitDataSourceBindings (ctx, bindingDef);
+                       else
+                               ctx.StorePropertyBinding (bindingDef);
+               }
+
+               #region Emit Helper
+               void dataSourceChangedEmitHelper(object dscSource, object dataSource, int dynMethIdx){
+                       if (dataSource is IValueChange)
+                               (dataSource as IValueChange).ValueChanged +=
+                                       (EventHandler<ValueChangeEventArgs>)dsValueChangedDynMeths [dynMethIdx].CreateDelegate (typeof(EventHandler<ValueChangeEventArgs>), dscSource);
+               }
+               /// <summary> Emits remove old data source event handler./summary>
+               void emitRemoveOldDataSourceHandler(ILGenerator il, string eventName, string delegateName, bool DSSide = true){
+                       System.Reflection.Emit.Label cancel = il.DefineLabel ();
+
+                       il.Emit (OpCodes.Ldarg_2);//load old parent
+                       il.Emit (OpCodes.Ldfld, CompilerServices.fiDSCOldDS);
+                       il.Emit (OpCodes.Brfalse, cancel);//old parent is null
+
+                       //remove handler
+                       if (DSSide){//event is defined in the dataSource instance
+                               il.Emit (OpCodes.Ldarg_2);//1st arg load old datasource
+                               il.Emit (OpCodes.Ldfld, CompilerServices.fiDSCOldDS);
+                       }else//the event is in the source
+                               il.Emit (OpCodes.Ldarg_1);//1st arg load old datasource
+                       il.Emit (OpCodes.Ldstr, eventName);//2nd arg event name
+                       il.Emit (OpCodes.Ldstr, delegateName);//3d arg: delegate name
+                       il.Emit (OpCodes.Call, CompilerServices.miRemEvtHdlByName);
+                       il.MarkLabel(cancel);
+               }
+               #endregion
+
+               #region Event Bindings
+               /// <summary>
+               /// Compile events expression in IML attributes, and store the result in the instanciator
+               /// Those handlers will be bound when instatiing
+               /// </summary>
+               void compileAndStoreDynHandler (IMLContext ctx, EventInfo sourceEvent, string expression)
+               {
+                       //store event handler dynamic method in instanciator
+                       int dmIdx = cachedDelegates.Count;
+                       cachedDelegates.Add (CompilerServices.compileDynEventHandler (sourceEvent, expression, ctx.CurrentNodeAddress));
+                       ctx.emitCachedDelegateHandlerAddition(dmIdx, sourceEvent);
+               }
+               /// <summary> Emits handler method bindings </summary>
+               void emitHandlerBinding (IMLContext ctx, EventInfo sourceEvent, string expression){
+                       NodeAddress currentNode = ctx.CurrentNodeAddress;
+                       BindingDefinition bindingDef = currentNode.GetBindingDef (sourceEvent.Name, expression);
+
+                       #if DEBUG_BINDING
+                       Debug.WriteLine("Event Binding: " + bindingDef.ToString());
+                       #endif
+
+                       if (bindingDef.IsTemplateBinding | bindingDef.IsDataSourceBinding) {
+                               //we need to bind datasource method to source event
+                               DynamicMethod dm = new DynamicMethod ("dyn_dsORtmpChangedForHandler" + NewId,
+                                                          typeof(void),
+                                                          CompilerServices.argsBoundDSChange, true);
+
+                               ILGenerator il = dm.GetILGenerator (256);
+                               System.Reflection.Emit.Label cancel = il.DefineLabel ();
+
+                               il.DeclareLocal (typeof(MethodInfo));//used to cancel binding if method doesn't exist
+
+                               il.Emit (OpCodes.Nop);
+
+                               emitRemoveOldDataSourceHandler (il, sourceEvent.Name, bindingDef.TargetMember, false);
+
+
+                               //fetch method in datasource and test if it exist
+                               il.Emit (OpCodes.Ldarg_2);//load new datasource
+                               il.Emit (OpCodes.Ldfld, CompilerServices.fiDSCNewDS);
+                               il.Emit (OpCodes.Brfalse, cancel);//cancel if new datasource is null
+                               il.Emit (OpCodes.Ldarg_2);//load new datasource
+                               il.Emit (OpCodes.Ldfld, CompilerServices.fiDSCNewDS);
+                               il.Emit (OpCodes.Ldstr, bindingDef.TargetMember);//load handler method name
+                               il.Emit (OpCodes.Call, CompilerServices.miGetMethInfoWithRefx);
+                               il.Emit (OpCodes.Stloc_0);//save MethodInfo                                          
+                il.Emit (OpCodes.Ldloc_0);//push mi for test if null
+                il.Emit (OpCodes.Brfalse, cancel);//cancel if null
+
+                il.Emit (OpCodes.Ldarg_1);//load datasource change source where the event is as 1st arg of handler.add
+                if (bindingDef.IsTemplateBinding)//fetch source instance with address
+                    CompilerServices.emitGetInstance (il, bindingDef.SourceNA);
+
+                //load handlerType of sourceEvent to create delegate (1st arg)
+                il.Emit (OpCodes.Ldtoken, sourceEvent.EventHandlerType);
+                il.Emit (OpCodes.Call, CompilerServices.miGetTypeFromHandle);
+                il.Emit (OpCodes.Ldarg_2);//load new datasource where the method is defined
+                il.Emit (OpCodes.Ldfld, CompilerServices.fiDSCNewDS);
+                il.Emit (OpCodes.Ldloc_0);//load methodInfo (3rd arg)
+
+                il.Emit (OpCodes.Call, CompilerServices.miCreateBoundDel);
+                il.Emit (OpCodes.Call, sourceEvent.AddMethod);//call add event
+                                          
+                System.Reflection.Emit.Label finish = il.DefineLabel ();
+                il.Emit (OpCodes.Br, finish);
+                il.MarkLabel (cancel);
+                               #if DEBUG_BINDING
+                               il.EmitWriteLine (string.Format ("Handler method '{0}' for '{1}' NOT FOUND in new dataSource", bindingDef.TargetMember, sourceEvent.Name));
+                               #endif
+                               il.MarkLabel (finish);
+                               #if DEBUG_BINDING
+                               il.EmitWriteLine (string.Format ("Handler method '{0}' for '{1}' FOUND in new dataSource", bindingDef.TargetMember, sourceEvent.Name));
+                               #endif
+                                              
+                               il.Emit (OpCodes.Ret);
+
+                               //store dschange delegate in instatiator instance for access while instancing graphic object
+                               int delDSIndex = cachedDelegates.Count;
+                               cachedDelegates.Add (dm.CreateDelegate (CompilerServices.ehTypeDSChange, this));
+
+                               if (bindingDef.IsDataSourceBinding)
+                                       ctx.emitCachedDelegateHandlerAddition (delDSIndex, CompilerServices.eiDSChange);
+                               else //template handler binding, will be added to root parentChanged
+                                       templateCachedDelegateIndices.Add (delDSIndex);
+                       } else {//normal in tree handler binding, store until tree is complete (end of parse)
+                               ctx.UnresolvedTargets.Add (new EventBinding (
+                                       bindingDef.SourceNA, sourceEvent,
+                                       bindingDef.TargetNA, bindingDef.TargetMember, bindingDef.TargetName));
+                       }
+               }
+               #endregion
+
+               #region Property Bindings
+               /// <summary>
+               /// Create and store in the instanciator the ValueChanged delegates
+               /// those delegates uses grtree functions to set destination value so they don't
+               /// need to be bound to destination instance as in the ancient system.
+               /// </summary>
+               void emitBindingDelegates(IMLContext ctx){
+                       foreach (KeyValuePair<NodeAddress,Dictionary<string, List<MemberAddress>>> bindings in ctx.Bindings ) {
+                               if (bindings.Key.Count == 0)//template binding
+                                       emitTemplateBindings (ctx, bindings.Value);
+                               else
+                                       emitPropertyBindings (ctx,  bindings.Key, bindings.Value);
+                       }
+               }
+               void emitPropertyBindings(IMLContext ctx, NodeAddress origine, Dictionary<string, List<MemberAddress>> bindings){
+                       Type origineNodeType = origine.NodeType;
+
+                       //value changed dyn method
+                       DynamicMethod dm = new DynamicMethod ("dyn_valueChanged" + NewId,
+                               typeof (void), CompilerServices.argsValueChange, true);
+                       ILGenerator il = dm.GetILGenerator (256);
+
+                       System.Reflection.Emit.Label endMethod = il.DefineLabel ();
+
+                       il.DeclareLocal (CompilerServices.TObject);
+
+                       il.Emit (OpCodes.Nop);
+
+                       int i = 0;
+                       foreach (KeyValuePair<string, List<MemberAddress>> bindingCase in bindings ) {
+
+                               System.Reflection.Emit.Label nextTest = il.DefineLabel ();
+
+                               #region member name test
+                               //load source member name
+                               il.Emit (OpCodes.Ldarg_1);
+                               il.Emit (OpCodes.Ldfld, CompilerServices.fiVCMbName);
+
+                               il.Emit (OpCodes.Ldstr, bindingCase.Key);//load name to test
+                               il.Emit (OpCodes.Ldc_I4_4);//StringComparison.Ordinal
+                               il.Emit (OpCodes.Call, CompilerServices.stringEquals);
+                               il.Emit (OpCodes.Brfalse, nextTest);//if not equal, jump to next case
+                               #endregion
+
+                               #region destination member affectations
+                               PropertyInfo piOrig = origineNodeType.GetProperty (bindingCase.Key);
+                               Type origineType = null;
+                               if (piOrig != null)
+                                       origineType = piOrig.PropertyType;
+                               foreach (MemberAddress ma in bindingCase.Value) {
+                                       //first we have to load destination instance onto the stack, it is access
+                                       //with graphic tree functions deducted from nodes topology
+                                       il.Emit (OpCodes.Ldarg_0);//load source instance of ValueChanged event
+
+                                       NodeAddress destination = ma.Address;
+
+                                       if (destination.Count == 0){//template reverse binding
+                                               //fetch destination instance (which is the template root)
+                                               for (int j = 0; j < origine.Count ; j++)
+                                                       il.Emit(OpCodes.Callvirt, CompilerServices.miGetLogicalParent);
+                                       }else
+                                               CompilerServices.emitGetInstance (il, origine, destination);
+
+                                       if (origineType != null && destination.Count > 0){//else, prop less binding or reverse template bind, no init requiered
+                                               //for initialisation dynmeth, push destination instance loc_0 is root node in ctx
+                                               ctx.il.Emit(OpCodes.Ldloc_0);
+                                               CompilerServices.emitGetInstance (ctx.il, destination);
+
+                                               //init dynmeth: load actual value from origine
+                                               ctx.il.Emit (OpCodes.Ldloc_0);
+                                               CompilerServices.emitGetInstance (ctx.il, origine);
+                                               ctx.il.Emit (OpCodes.Callvirt, origineNodeType.GetProperty (bindingCase.Key).GetGetMethod());
+                                       }
+                                       //load new value
+                                       il.Emit (OpCodes.Ldarg_1);
+                                       il.Emit (OpCodes.Ldfld, CompilerServices.fiVCNewValue);
+
+                                       if (origineType == null)//property less binding, no init
+                                               CompilerServices.emitConvert (il, ma.Property.PropertyType);
+                                       else if (destination.Count > 0) {
+                                               if (origineType.IsValueType)
+                                                       ctx.il.Emit(OpCodes.Box, origineType);
+
+                                               CompilerServices.emitConvert (ctx.il, origineType, ma.Property.PropertyType);
+                                               CompilerServices.emitConvert (il, origineType, ma.Property.PropertyType);
+
+                                               ctx.il.Emit (OpCodes.Callvirt, ma.Property.GetSetMethod());//set init value
+                                       } else {// reverse templateBinding
+                                               il.Emit (OpCodes.Ldstr, ma.memberName);//arg 3 of setValueWithReflexion
+                                               il.Emit (OpCodes.Call, CompilerServices.miSetValWithRefx);
+                                               continue;
+                                       }
+                                       il.Emit (OpCodes.Callvirt, ma.Property.GetSetMethod());//set value on value changes
+                               }
+                               #endregion
+                               il.Emit (OpCodes.Br, endMethod);
+                               il.MarkLabel (nextTest);
+
+                               i++;
+                       }
+
+                       il.MarkLabel (endMethod);
+                       il.Emit (OpCodes.Ret);
+
+                       //store and emit Add in ctx
+                       int dmIdx = cachedDelegates.Count;
+                       cachedDelegates.Add (dm.CreateDelegate (typeof(EventHandler<ValueChangeEventArgs>)));
+                       ctx.emitCachedDelegateHandlerAddition (dmIdx, CompilerServices.eiValueChange, origine);
+
+                       #if DEBUG_BINDING
+                       Debug.WriteLine("\tCrow property binding: " + dm.Name);
+                       #endif
+
+               }
+               void emitTemplateBindings(IMLContext ctx, Dictionary<string, List<MemberAddress>> bindings){
+                       //value changed dyn method
+                       DynamicMethod dm = new DynamicMethod ("dyn_tmpValueChanged",
+                               typeof (void), CompilerServices.argsValueChange, true);
+                       ILGenerator il = dm.GetILGenerator (256);
+
+                       //create parentchanged dyn meth in parallel to have only one loop over bindings
+                       DynamicMethod dmPC = new DynamicMethod ("dyn_InitAndLogicalParentChanged",
+                               typeof (void),
+                               CompilerServices.argsBoundDSChange, true);
+                       ILGenerator ilPC = dmPC.GetILGenerator (256);
+
+                       il.Emit (OpCodes.Nop);
+                       ilPC.Emit (OpCodes.Nop);
+
+                       System.Reflection.Emit.Label endMethod = il.DefineLabel ();
+
+                       il.DeclareLocal (CompilerServices.TObject);
+                       ilPC.DeclareLocal (CompilerServices.TObject);//used for checking propery less bindings
+                       ilPC.DeclareLocal (typeof(MemberInfo));//used for checking propery less bindings
+
+                       System.Reflection.Emit.Label cancel = ilPC.DefineLabel ();
+
+                       #region Unregister previous parent event handler
+                       //unregister previous parent handler if not null
+                       ilPC.Emit (OpCodes.Ldarg_2);//load old parent
+                       ilPC.Emit (OpCodes.Ldfld, CompilerServices.fiDSCOldDS);
+                       ilPC.Emit (OpCodes.Brfalse, cancel);//old parent is null
+
+                       ilPC.Emit (OpCodes.Ldarg_2);//load old parent
+                       ilPC.Emit (OpCodes.Ldfld, CompilerServices.fiDSCOldDS);
+                       //Load cached delegate
+                       ilPC.Emit(OpCodes.Ldarg_0);//load ref to this instanciator onto the stack
+                       ilPC.Emit(OpCodes.Ldfld, CompilerServices.fiTemplateBinding);
+
+                       //add template bindings dynValueChanged delegate to new parent event
+                       ilPC.Emit(OpCodes.Callvirt, CompilerServices.eiValueChange.RemoveMethod);//call remove event
+                       #endregion
+
+                       ilPC.MarkLabel(cancel);
+
+                       #region check if new parent is null
+                       cancel = ilPC.DefineLabel ();
+                       ilPC.Emit (OpCodes.Ldarg_2);//load datasource change arg
+                       ilPC.Emit (OpCodes.Ldfld, CompilerServices.fiDSCNewDS);
+                       ilPC.Emit (OpCodes.Brfalse, cancel);//new ds is null
+                       #endregion
+
+                       int i = 0;
+                       foreach (KeyValuePair<string, List<MemberAddress>> bindingCase in bindings ) {
+
+                               System.Reflection.Emit.Label nextTest = il.DefineLabel ();
+
+                               #region member name test
+                               //load source member name
+                               il.Emit (OpCodes.Ldarg_1);
+                               il.Emit (OpCodes.Ldfld, CompilerServices.fiVCMbName);
+
+                               il.Emit (OpCodes.Ldstr, bindingCase.Key);//load name to test
+                               il.Emit (OpCodes.Ldc_I4_4);//StringComparison.Ordinal
+                               il.Emit (OpCodes.Call, CompilerServices.stringEquals);
+                               il.Emit (OpCodes.Brfalse, nextTest);//if not equal, jump to next case
+                               #endregion
+
+                               #region destination member affectations
+
+                               foreach (MemberAddress ma in bindingCase.Value) {
+                                       if (ma.Address.Count == 0){
+                                               Debug.WriteLine("\t\tBUG: reverse template binding in normal template binding");
+                                               continue;//template binding
+                                       }
+                                       //first we try to get memberInfo of new parent, if it doesn't exist, it's a propery less binding
+                                       ilPC.Emit (OpCodes.Ldarg_2);//load new parent onto the stack for handler addition
+                                       ilPC.Emit (OpCodes.Ldfld, CompilerServices.fiDSCNewDS);
+                                       ilPC.Emit (OpCodes.Stloc_0);//save new parent
+                                       //get parent type
+                                       ilPC.Emit (OpCodes.Ldloc_0);//push parent instance
+                                       ilPC.Emit (OpCodes.Ldstr, bindingCase.Key);//load member name
+                                       ilPC.Emit (OpCodes.Call, CompilerServices.miGetMembIinfoWithRefx);
+                                       ilPC.Emit (OpCodes.Stloc_1);//save memberInfo
+                                       ilPC.Emit (OpCodes.Ldloc_1);//push mi for test if null
+                                       System.Reflection.Emit.Label propLessReturn = ilPC.DefineLabel ();
+                                       ilPC.Emit (OpCodes.Brfalse, propLessReturn);
+
+
+                                       //first we have to load destination instance onto the stack, it is access
+                                       //with graphic tree functions deducted from nodes topology
+                                       il.Emit (OpCodes.Ldarg_0);//load source instance of ValueChanged event
+                                       CompilerServices.emitGetChild (il, typeof(TemplatedControl), -1);
+                                       CompilerServices.emitGetInstance (il, ma.Address);
+
+                                       ilPC.Emit (OpCodes.Ldarg_2);//load destination instance to set actual value of member
+                                       ilPC.Emit (OpCodes.Ldfld, CompilerServices.fiDSCNewDS);
+                                       CompilerServices.emitGetChild (ilPC, typeof(TemplatedControl), -1);
+                                       CompilerServices.emitGetInstance (ilPC, ma.Address);
+
+                                       //load new value
+                                       il.Emit (OpCodes.Ldarg_1);
+                                       il.Emit (OpCodes.Ldfld, CompilerServices.fiVCNewValue);
+
+                                       //for the parent changed dyn meth we need to fetch actual value for initialisation thrue reflexion
+                                       ilPC.Emit (OpCodes.Ldloc_0);//push root instance of instanciator as parentChanged source
+                                       ilPC.Emit (OpCodes.Ldloc_1);//push mi for value fetching
+                                       ilPC.Emit (OpCodes.Call, CompilerServices.miGetValWithRefx);
+
+                                       CompilerServices.emitConvert (il, ma.Property.PropertyType);
+                                       CompilerServices.emitConvert (ilPC, ma.Property.PropertyType);
+
+                                       il.Emit (OpCodes.Callvirt, ma.Property.GetSetMethod());
+                                       ilPC.Emit (OpCodes.Callvirt, ma.Property.GetSetMethod());
+
+                                       ilPC.MarkLabel(propLessReturn);
+                               }
+                               #endregion
+                               il.Emit (OpCodes.Br, endMethod);
+                               il.MarkLabel (nextTest);
+
+                               i++;
+                       }
+                       //il.Emit (OpCodes.Pop);
+                       il.MarkLabel (endMethod);
+                       il.Emit (OpCodes.Ret);
+
+                       //store template bindings in instanciator
+                       templateBinding = dm.CreateDelegate (typeof(EventHandler<ValueChangeEventArgs>));
+
+                       #region emit LogicalParentChanged method
+
+                       //load new parent onto the stack for handler addition
+                       ilPC.Emit (OpCodes.Ldarg_2);
+                       ilPC.Emit (OpCodes.Ldfld, CompilerServices.fiDSCNewDS);
+
+                       //Load cached delegate
+                       ilPC.Emit(OpCodes.Ldarg_0);//load ref to this instanciator onto the stack
+                       ilPC.Emit(OpCodes.Ldfld, CompilerServices.fiTemplateBinding);
+
+                       //add template bindings dynValueChanged delegate to new parent event
+                       ilPC.Emit(OpCodes.Call, CompilerServices.eiValueChange.AddMethod);//call add event
+
+                       ilPC.MarkLabel (cancel);
+                       ilPC.Emit (OpCodes.Ret);
+
+                       //store dschange delegate in instatiator instance for access while instancing graphic object
+                       int delDSIndex = cachedDelegates.Count;
+                       cachedDelegates.Add(dmPC.CreateDelegate (CompilerServices.ehTypeDSChange, this));
+                       #endregion
+
+                       ctx.emitCachedDelegateHandlerAddition(delDSIndex, CompilerServices.eiLogicalParentChanged);
+               }
+               /// <summary>
+               /// create the valuechanged handler, the datasourcechanged handler and emit event handling
+               /// </summary>
+               void emitDataSourceBindings(IMLContext ctx, BindingDefinition bindingDef){
+                       DynamicMethod dm = null;
+                       ILGenerator il = null;
+                       int dmVC = 0;
+                       PropertyInfo piSource = ctx.CurrentNodeType.GetProperty(bindingDef.SourceMember);
+                       //if no dataSource member name is provided, valuechange is not handle and datasource change
+                       //will be used as origine value
+                       string delName = "dyn_DSvalueChanged" + NewId;
+                       if (!string.IsNullOrEmpty(bindingDef.TargetMember)){
+                               #region create valuechanged method
+                               dm = new DynamicMethod (delName,
+                                       typeof (void),
+                                       CompilerServices.argsBoundValueChange, true);
+
+                               il = dm.GetILGenerator (256);
+
+                               System.Reflection.Emit.Label endMethod = il.DefineLabel ();
+
+                               il.DeclareLocal (CompilerServices.TObject);
+
+                               il.Emit (OpCodes.Nop);
+
+                               //load value changed member name onto the stack
+                               il.Emit (OpCodes.Ldarg_2);
+                               il.Emit (OpCodes.Ldfld, CompilerServices.fiVCMbName);
+
+                               //test if it's the expected one
+                               il.Emit (OpCodes.Ldstr, bindingDef.TargetMember);
+                               il.Emit (OpCodes.Ldc_I4_4);//StringComparison.Ordinal
+                               il.Emit (OpCodes.Call, CompilerServices.stringEquals);
+                               il.Emit (OpCodes.Brfalse, endMethod);
+                               //set destination member with valueChanged new value
+                               //load destination ref
+                               il.Emit (OpCodes.Ldarg_0);
+                               //load new value onto the stack
+                               il.Emit (OpCodes.Ldarg_2);
+                               il.Emit (OpCodes.Ldfld, CompilerServices.fiVCNewValue);
+
+                               //by default, source value type is deducted from target member type to allow
+                               //memberless binding, if targetMember exists, it will be used to determine target
+                               //value type for conversion
+
+                               CompilerServices.emitConvert (il, piSource.PropertyType);
+
+                               if (!piSource.CanWrite)
+                                       throw new Exception ("Source member of bindind is read only:" + piSource.ToString());
+
+                               il.Emit (OpCodes.Callvirt, piSource.GetSetMethod ());
+
+                               il.MarkLabel (endMethod);
+                               il.Emit (OpCodes.Ret);
+
+                               //vc dyn meth is stored in a cached list, it will be bound to datasource only
+                               //when datasource of source graphic object changed
+                               dmVC = dsValueChangedDynMeths.Count;
+                               dsValueChangedDynMeths.Add (dm);
+                               #endregion
+                       }
+
+                       #region emit dataSourceChanged event handler
+                       //now we create the datasource changed method that will init the destination member with
+                       //the actual value of the origin member of the datasource and then will bind the value changed
+                       //dyn methode.
+                       //dm is bound to the instanciator instance to have access to cached dyn meth and delegates
+                       dm = new DynamicMethod ("dyn_dschanged" + NewId,
+                               typeof (void),
+                               CompilerServices.argsBoundDSChange, true);
+
+                       il = dm.GetILGenerator (256);
+
+                       il.DeclareLocal (CompilerServices.TObject);//used for checking propery less bindings
+                       il.DeclareLocal (typeof(MemberInfo));//used for checking propery less bindings
+                       System.Reflection.Emit.Label cancel = il.DefineLabel ();
+                       System.Reflection.Emit.Label newDSIsNull = il.DefineLabel ();
+                       System.Reflection.Emit.Label cancelInit = il.DefineLabel ();
+
+                       il.Emit (OpCodes.Nop);
+
+                       emitRemoveOldDataSourceHandler(il, "ValueChanged", delName, true);
+
+                       if (!string.IsNullOrEmpty(bindingDef.TargetMember)){
+                               if (bindingDef.TwoWay){
+//                                     System.Reflection.Emit.Label cancelRemove = il.DefineLabel ();
+//                                     //remove handler if not null
+//                                     il.Emit (OpCodes.Ldarg_2);//load old parent
+//                                     il.Emit (OpCodes.Ldfld, CompilerServices.fiDSCOldDS);
+//                                     il.Emit (OpCodes.Brfalse, cancelRemove);//old parent is null
+
+                                       //remove handler
+                                       emitRemoveOldDataSourceHandler(il, "ValueChanged", delName, false);
+
+//                                     il.Emit (OpCodes.Ldarg_1);//3d arg: instance bound to delegate (the source)
+//                                     il.Emit (OpCodes.Ldstr, "ValueChanged");//2nd arg event name
+//                                     il.Emit (OpCodes.Ldarg_2);//1st arg load old datasource
+//                                     il.Emit (OpCodes.Ldfld, CompilerServices.fiDSCOldDS);
+//                                     il.Emit (OpCodes.Call, CompilerServices.miRemEvtHdlByTarget);
+//                                     il.MarkLabel(cancelRemove);
+                               }
+                               il.Emit (OpCodes.Ldarg_2);//load datasource change arg
+                               il.Emit (OpCodes.Ldfld, CompilerServices.fiDSCNewDS);
+                               il.Emit (OpCodes.Brfalse, newDSIsNull);//new ds is null
+                       }
+
+                       #region fetch initial Value
+                       if (!string.IsNullOrEmpty(bindingDef.TargetMember)){
+                               il.Emit (OpCodes.Ldarg_2);//load new datasource
+                               il.Emit (OpCodes.Ldfld, CompilerServices.fiDSCNewDS);
+                               il.Emit (OpCodes.Ldstr, bindingDef.TargetMember);//load member name
+                               il.Emit (OpCodes.Call, CompilerServices.miGetMembIinfoWithRefx);
+                               il.Emit (OpCodes.Stloc_1);//save memberInfo
+                               il.Emit (OpCodes.Ldloc_1);//push mi for test if null
+                               il.Emit (OpCodes.Brfalse, cancelInit);//propertyLessBinding
+                       }
+
+                       il.Emit (OpCodes.Ldarg_1);//load source of dataSourceChanged which is the dest instance
+                       il.Emit (OpCodes.Ldarg_2);//load new datasource
+                       il.Emit (OpCodes.Ldfld, CompilerServices.fiDSCNewDS);
+                       if (!string.IsNullOrEmpty(bindingDef.TargetMember)){
+                               il.Emit (OpCodes.Ldloc_1);//push mi for value fetching
+                               il.Emit (OpCodes.Call, CompilerServices.miGetValWithRefx);
+                       }
+                       CompilerServices.emitConvert (il, piSource.PropertyType);
+                       il.Emit (OpCodes.Callvirt, piSource.GetSetMethod ());
+                       #endregion
+
+                       if (!string.IsNullOrEmpty(bindingDef.TargetMember)){
+                               il.MarkLabel(cancelInit);
+                               //check if new dataSource implement IValueChange
+                               il.Emit (OpCodes.Ldarg_2);//load new datasource
+                               il.Emit (OpCodes.Ldfld, CompilerServices.fiDSCNewDS);
+                               il.Emit (OpCodes.Isinst, typeof(IValueChange));
+                               il.Emit (OpCodes.Brfalse, cancel);
+
+                               il.Emit(OpCodes.Ldarg_0);//load ref to this instanciator onto the stack
+                               il.Emit (OpCodes.Ldarg_1);//load datasource change source
+                               il.Emit (OpCodes.Ldarg_2);//load new datasource
+                               il.Emit (OpCodes.Ldfld, CompilerServices.fiDSCNewDS);
+                               il.Emit(OpCodes.Ldc_I4, dmVC);//load index of dynmathod
+                               il.Emit (OpCodes.Call, CompilerServices.miDSChangeEmitHelper);
+
+                               il.MarkLabel (cancel);
+
+                               if (bindingDef.TwoWay){
+                                       il.Emit (OpCodes.Ldarg_1);//arg1: dataSourceChange source, the origine of the binding
+                                       il.Emit (OpCodes.Ldstr, bindingDef.SourceMember);//arg2: orig member
+                                       il.Emit (OpCodes.Ldarg_2);//arg3: new datasource
+                                       il.Emit (OpCodes.Ldfld, CompilerServices.fiDSCNewDS);
+                                       il.Emit (OpCodes.Ldstr, bindingDef.TargetMember);//arg4: dest member
+                                       il.Emit (OpCodes.Call, CompilerServices.miDSReverseBinding);
+                               }
+
+                       }
+                       il.MarkLabel (newDSIsNull);
+                       il.Emit (OpCodes.Ret);
+
+                       //store dschange delegate in instatiator instance for access while instancing graphic object
+                       int delDSIndex = cachedDelegates.Count;
+                       cachedDelegates.Add(dm.CreateDelegate (CompilerServices.ehTypeDSChange, this));
+                       #endregion
+
+                       ctx.emitCachedDelegateHandlerAddition(delDSIndex, CompilerServices.eiDSChange);
+
+                       #if DEBUG_BINDING
+                       Debug.WriteLine("\tDataSource ValueChanged: " + delName);
+                       Debug.WriteLine("\tDataSource Changed: " + dm.Name);
+                       #endif
+               }
+               /// <summary>
+               /// Two way binding for datasource, graphicObj=>dataSource link, datasource value has priority
+               /// and will be set as init for source property (in emitDataSourceBindings func)
+               /// </summary>
+               /// <param name="orig">Graphic object instance, source of binding</param>
+               /// <param name="origMember">Origin member name</param>
+               /// <param name="dest">datasource instance, target of the binding</param>
+               /// <param name="destMember">Destination member name</param>
+               static void dataSourceReverseBinding(IValueChange orig, string origMember, object dest, string destMember){
+                       Type tOrig = orig.GetType ();
+                       Type tDest = dest.GetType ();
+                       PropertyInfo piOrig = tOrig.GetProperty (origMember);
+                       PropertyInfo piDest = tDest.GetProperty (destMember);
+
+                       if (piDest == null) {
+                               Debug.WriteLine ("Member '{0}' not found in new DataSource '{1}' of '{2}'", destMember, dest, orig);
+                               return;
+                       }
+                       #if DEBUG_BINDING
+                       Debug.WriteLine ("DS Reverse binding: Member '{0}' found in new DS '{1}' of '{2}'", destMember, dest, orig);
+                       #endif
+
+                       #region ValueChanged emit
+                       DynamicMethod dm = new DynamicMethod ("dyn_valueChanged" + NewId,
+                               typeof (void), CompilerServices.argsBoundValueChange, true);
+                       ILGenerator il = dm.GetILGenerator (256);
+
+                       System.Reflection.Emit.Label endMethod = il.DefineLabel ();
+
+                       il.DeclareLocal (CompilerServices.TObject);
+                       il.Emit (OpCodes.Nop);
+
+                       //load value changed member name onto the stack
+                       il.Emit (OpCodes.Ldarg_2);
+                       il.Emit (OpCodes.Ldfld, CompilerServices.fiVCMbName);
+
+                       //test if it's the expected one
+                       il.Emit (OpCodes.Ldstr, origMember);
+                       il.Emit (OpCodes.Ldc_I4_4);//StringComparison.Ordinal
+                       il.Emit (OpCodes.Call, CompilerServices.stringEquals);
+                       il.Emit (OpCodes.Brfalse, endMethod);
+                       //set destination member with valueChanged new value
+                       //load destination ref
+                       il.Emit (OpCodes.Ldarg_0);
+                       //load new value onto the stack
+                       il.Emit (OpCodes.Ldarg_2);
+                       il.Emit (OpCodes.Ldfld, CompilerServices.fiVCNewValue);
+
+                       CompilerServices.emitConvert (il, piOrig.PropertyType, piDest.PropertyType);
+
+                       il.Emit (OpCodes.Callvirt, piDest.GetSetMethod ());
+
+                       il.MarkLabel (endMethod);
+                       il.Emit (OpCodes.Ret);
+                       #endregion
+
+                       orig.ValueChanged += (EventHandler<ValueChangeEventArgs>)dm.CreateDelegate (typeof(EventHandler<ValueChangeEventArgs>), dest);
+               }
+               #endregion
+
+               /// <summary>
+               /// search for graphic object type in crow assembly, if not found,
+               /// search for type independently of namespace in all the loaded assemblies
+               /// </summary>
+               /// <remarks>
+               /// </remarks>
+               /// <returns>the corresponding type object</returns>
+               /// <param name="typeName">graphic object type name without its namespace</param>
+               Type tryGetGOType (string typeName){
+                       Type t = Type.GetType ("Crow." + typeName);
+                       if (t != null)
+                               return t;                       
+                       foreach (Assembly a in AppDomain.CurrentDomain.GetAssemblies()) {
+                               if (a.IsDynamic)
+                                       continue;
+                               foreach (Type expT in a.GetExportedTypes ()) {
+                                       if (expT.Name == typeName)
+                                               return expT;
+                               }
+                       }
+                       return null;
+               }
+       }
+}
+
diff --git a/Crow/src/Interface.cs b/Crow/src/Interface.cs
new file mode 100644 (file)
index 0000000..e4bbcf6
--- /dev/null
@@ -0,0 +1,1370 @@
+//
+// Interface.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.IO;
+using System.Linq;
+using System.Reflection;
+using System.Threading;
+using System.Xml;
+using System.Xml.Serialization;
+using Cairo;
+using System.Globalization;
+using Crow.IML;
+using System.Runtime.InteropServices;
+
+
+
+namespace Crow
+{
+       /// <summary>
+       /// The Interface Class is the root of crow graphic trees. It is thread safe allowing
+       /// application to run multiple interfaces in different threads.
+       /// It provides the Dirty bitmap and zone of the interface to be drawn on screen.
+       /// </summary>
+       /// <remarks>
+       /// The Interface contains :
+       ///     - rendering and layouting queues and logic.
+       ///     - helpers to load XML interfaces files directely bound to this interface
+       ///     - global static constants and variables of CROW
+       ///     - Keyboard and Mouse logic
+       ///     - the resulting bitmap of the interface
+       /// 
+       /// the master branch and the nuget package includes an OpenTK renderer which allows
+       /// the creation of multiple threaded interfaces.
+       /// 
+       /// If you intend to create another renderer (GDK, vulkan, etc) the minimal step is to
+       /// put an interface instance as member of your root object and call (optionally in another thread) the update function
+       /// at regular interval. Then you have to call
+       /// mouse, keyboard and resize functions of the interface when those events occurs in the host app.
+       /// 
+       /// The resulting surface (a byte array in the OpenTK renderer) is made available and protected with the
+       /// RenderMutex of the interface.
+       /// </remarks>
+       public class Interface : ILayoutable, IDisposable ,IValueChange
+       {
+               #region IValueChange implementation
+               public event EventHandler<ValueChangeEventArgs> ValueChanged;
+               public virtual void NotifyValueChanged(string MemberName, object _value)
+               {
+                       //Debug.WriteLine ("Value changed: {0}->{1} = {2}", this, MemberName, _value);
+                       ValueChanged.Raise(this, new ValueChangeEventArgs(MemberName, _value));
+               }
+               #endregion
+
+               internal IBackend backend;
+
+               #region CTOR
+               static Interface(){
+                       /*if (Type.GetType ("Mono.Runtime") == null) {
+                               throw new Exception (@"C.R.O.W. run only on Mono, download latest version at: http://www.mono-project.com/download/stable/");
+                       }*/
+
+                       CrowConfigRoot =
+                               System.IO.Path.Combine(
+                                       Environment.GetFolderPath(Environment.SpecialFolder.UserProfile),
+                                       ".config");
+                       CrowConfigRoot = System.IO.Path.Combine (CrowConfigRoot, "crow");
+                       if (!Directory.Exists (CrowConfigRoot))
+                               Directory.CreateDirectory (CrowConfigRoot);
+
+                       //ensure all assemblies are loaded, because IML could contains classes not instanciated in source
+                       foreach (string af in Directory.GetFiles (AppDomain.CurrentDomain.BaseDirectory, "*.dll")){
+                               try {
+                                       Assembly.LoadFrom (af); 
+                               } catch (Exception ex) {
+                                       Console.WriteLine ("{0} not loaded as assembly.", af);
+                               }
+                       }
+
+                       FontRenderingOptions = new FontOptions ();
+                       FontRenderingOptions.Antialias = Antialias.Subpixel;
+                       FontRenderingOptions.HintMetrics = HintMetrics.On;
+                       FontRenderingOptions.HintStyle = HintStyle.Full;
+                       FontRenderingOptions.SubpixelOrder = SubpixelOrder.Default;
+               }
+
+               public Interface(int width=800, int height=600){
+
+                       clientRectangle = new Rectangle (0, 0, width, height);
+
+                       Init ();
+
+                       InitBackend ();
+               }
+               #endregion
+
+               protected bool running;
+               protected virtual void InitBackend () {
+                       backend = new Crow.XCB.XCBBackend ();
+                       //backend = new Crow.XLib.XLibBackend ();
+                       backend.Init (this);
+
+                       Keyboard.KeyDown += Keyboard_KeyDown;
+                       Keyboard.KeyUp += Keyboard_KeyUp;
+                       Keyboard.KeyPress += Keyboard_KeyPress;
+
+                       initTooltip ();
+                       initContextMenus ();
+
+                       running = true;
+
+                       Thread t = new Thread (interfaceThread);
+                       t.IsBackground = true;
+                       t.Start ();
+               }
+               public void Run () {
+                       while (running) {
+                               ProcessEvents ();
+                               Thread.Sleep(1);
+                       }
+               }
+               void Keyboard_KeyPress (object sender, KeyPressEventArgs e)
+               {
+                       if (_focusedWidget != null)
+                               _focusedWidget.onKeyPress (this, e);
+               }
+
+               void Keyboard_KeyUp (object sender, KeyEventArgs e)
+               {
+                       if (_focusedWidget != null)
+                               _focusedWidget.onKeyUp (this, e);
+//                     if (keyboardRepeatThread != null) {
+//                             keyboardRepeatOn = false;
+//                             keyboardRepeatThread.Abort();
+//                             keyboardRepeatThread.Join ();
+//                     }
+               }
+               void Keyboard_KeyDown (object sender, KeyEventArgs e)
+               {
+                       //Keyboard.SetKeyState((Crow.Key)Key,true);
+                       lastKeyDownEvt = e;
+                       lastKeyDownEvt.IsRepeat = true;
+
+                       if (_focusedWidget != null)
+                               _focusedWidget.onKeyDown (this, e);
+
+                       //                      keyboardRepeatThread = new Thread (keyboardRepeatThreadFunc);
+                       //                      keyboardRepeatThread.IsBackground = true;
+                       //                      keyboardRepeatThread.Start ();
+               }
+
+               void interfaceThread()
+               {                       
+                       while (running) {
+                               Update ();
+                               Thread.Sleep (20);
+                       }
+               }
+
+               #region IDisposable Support
+               private bool disposedValue = false; // To detect redundant calls
+
+               protected virtual void Dispose(bool disposing)
+               {
+                       if (!disposedValue)
+                       {
+                               if (disposing)
+                               {
+                                       // TODO: dispose managed state (managed objects).
+                               }
+
+                               backend.CleanUp ();
+
+
+                               disposedValue = true;
+                       }
+               }
+
+               // TODO: override a finalizer only if Dispose(bool disposing) above has code to free unmanaged resources.
+               ~Interface() {
+                       // Do not change this code. Put cleanup code in Dispose(bool disposing) above.
+                       Dispose(false);
+               }
+
+               // This code added to correctly implement the disposable pattern.
+               public void Dispose()
+               {
+                       Dispose(true);
+                       GC.SuppressFinalize(this);
+               }
+               #endregion
+
+               public void ProcessEvents() {
+                       backend.ProcessEvents ();
+               }
+               public void Init () {
+                       CultureInfo.DefaultThreadCurrentCulture = System.Globalization.CultureInfo.InvariantCulture;
+
+                       CurrentInterface = this;
+                       //loadCursors ();
+                       loadStyling ();
+                       findAvailableTemplates ();
+
+                       #if MEASURE_TIME
+                       PerfMeasures.Add (updateMeasure);
+                       PerfMeasures.Add (drawingMeasure);
+                       PerfMeasures.Add (layoutingMeasure);
+                       PerfMeasures.Add (clippingMeasure);
+                       #endif
+               }
+
+               #region Static and constants
+               /// <summary>
+               /// Crow configuration root path
+               /// </summary>
+               public static string CrowConfigRoot;
+               /// <summary>If true, mouse focus is given when mouse is over control</summary>
+               public static bool FocusOnHover = false;
+               /// <summary> Threshold to catch borders for sizing </summary>
+               public static int BorderThreshold = 5;
+               /// <summary> delay before tooltip appear </summary>
+               public static int ToolTipDelay = 500;
+               /// <summary>Double click threshold in milisecond</summary>
+               public static int DoubleClick = 250;//max duration between two mouse_down evt for a dbl clk in milisec.
+               /// <summary> Time to wait in millisecond before starting repeat loop</summary>
+               public static int DeviceRepeatDelay = 700;
+               /// <summary> Time interval in millisecond between device event repeat</summary>
+               public static int DeviceRepeatInterval = 40;
+               public static float WheelIncrement = 1;
+               /// <summary>Tabulation size in Text controls</summary>
+               public static int TabSize = 4;
+               public static string LineBreak = "\n";
+               /// <summary> Allow rendering of interface in development environment </summary>
+               public static bool DesignerMode = false;
+               /// <summary> Disable caching for a widget if this threshold is reached </summary>
+               public const int MaxCacheSize = 2048;
+               /// <summary> Above this count, the layouting is discard from the current
+               /// update cycle and requeued for the next</summary>
+               public const int MaxLayoutingTries = 3;
+               /// <summary> Above this count, the layouting is discard for the widget and it
+               /// will not be rendered on screen </summary>
+               public const int MaxDiscardCount = 5;
+               /// <summary> Global font rendering settings for Cairo </summary>
+               public static FontOptions FontRenderingOptions;
+               /// <summary> Global font rendering settings for Cairo </summary>
+               public static Antialias Antialias = Antialias.Subpixel;
+
+               /// <summary>
+               /// Each control need a ref to the root interface containing it, if not set in GraphicObject.currentInterface,
+               /// the ref of this one will be stored in GraphicObject.currentInterface
+               /// </summary>
+               protected static Interface CurrentInterface;
+               internal Stopwatch clickTimer = new Stopwatch();
+               GraphicObject armedClickSender = null;
+               MouseButtonEventArgs armedClickEvtArgs = null;
+//             internal GraphicObject EligibleForDoubleClick {
+//                     get { return eligibleForDoubleClick; }
+//                     set {
+//                             eligibleForDoubleClick = value;
+//                             clickTimer.Restart ();
+//                     }
+//             }
+               internal void armeClick (GraphicObject sender, MouseButtonEventArgs e){
+                       armedClickSender = sender;
+                       armedClickEvtArgs = e;
+                       clickTimer.Restart ();
+               }
+               #endregion
+
+               #region Events
+               public event EventHandler<MouseCursorChangedEventArgs> MouseCursorChanged;
+               public event EventHandler Quit;
+
+               public event EventHandler<MouseWheelEventArgs> MouseWheelChanged;
+               public event EventHandler<MouseButtonEventArgs> MouseButtonUp;
+               public event EventHandler<MouseButtonEventArgs> MouseButtonDown;
+               public event EventHandler<MouseButtonEventArgs> MouseClick;
+               public event EventHandler<MouseMoveEventArgs> MouseMove;
+               /*public event EventHandler<KeyEventArgs> KeyboardKeyDown;
+               public event EventHandler<KeyEventArgs> KeyboardKeyUp;*/
+               #endregion
+
+               /// <summary>Main Cairo surface</summary>
+               public Surface surf;
+
+               #region Public Fields
+               /// <summary>Graphic Tree of this interface</summary>
+               public List<GraphicObject> GraphicTree = new List<GraphicObject>();
+               /// <summary>Interface's resulting bitmap</summary>
+               public byte[] bmp;
+               /// <summary>resulting bitmap limited to last redrawn part</summary>
+               public byte[] dirtyBmp;
+               /// <summary>True when host has to repaint Interface</summary>
+               public bool IsDirty = false;
+               /// <summary>Coordinate of the dirty bmp on the original bmp</summary>
+               public Rectangle DirtyRect;
+               /// <summary>Locked for each layouting operation</summary>
+               public object LayoutMutex = new object();
+               /// <summary>Sync mutex between host and Crow for rendering operations (bmp, dirtyBmp,...)</summary>
+               public object RenderMutex = new object();
+               /// <summary>Global lock of the update cycle</summary>
+               public object UpdateMutex = new object();
+               /// <summary>Global lock of the clipping queue</summary>
+               public object ClippingMutex = new object();
+               //TODO:share resource instances
+               /// <summary>
+               /// Store loaded resources instances shared among controls to reduce memory footprint
+               /// </summary>
+               public Dictionary<string,object> Ressources = new Dictionary<string, object>();
+               /// <summary>The Main layouting queue.</summary>
+               public Queue<LayoutingQueueItem> LayoutingQueue = new Queue<LayoutingQueueItem> ();
+               /// <summary>Store discarded lqi between two updates</summary>
+               public Queue<LayoutingQueueItem> DiscardQueue;
+               /// <summary>Main drawing queue, holding layouted controls</summary>
+               public Queue<GraphicObject> ClippingQueue = new Queue<GraphicObject>();
+               public string Clipboard;//TODO:use object instead for complex copy paste
+               /// <summary>each IML and fragments (such as inline Templates) are compiled as a Dynamic Method stored here
+               /// on the first instance creation of a IML item.
+               /// </summary>
+               public Dictionary<String, Instantiator> Instantiators = new Dictionary<string, Instantiator>();
+               public List<CrowThread> CrowThreads = new List<CrowThread>();//used to monitor thread finished
+
+               public DragDropEventArgs DragAndDropOperation = null;
+               public Surface DragImage = null;
+               public int DragImageWidth, DragImageHeight, DragImageX, DragImageY;
+               public void ClearDragImage () {
+                       lock (UpdateMutex) {                            
+                               clipping.UnionRectangle(new Rectangle (DragImageX, DragImageY, DragImageWidth, DragImageHeight));                               
+                               DragImage.Dispose();
+                               DragImage = null;
+                       }                       
+               }
+               #endregion
+
+               #region Private Fields
+               /// <summary>Client rectangle in the host context</summary>
+               protected Rectangle clientRectangle;
+               /// <summary>Clipping rectangles on the root context</summary>
+               Region clipping = new Region();
+               /// <summary>Main Cairo context</summary>
+               Context ctx;
+               #endregion
+
+               #region Default values and Style loading
+               /// Default values of properties from GraphicObjects are retrieve from XML Attributes.
+               /// The reflexion process used to retrieve those values being very slow, it is compiled in MSIL
+               /// and injected as a dynamic method referenced in the DefaultValuesLoader Dictionnary.
+               /// The compilation is done on the first object instancing, and is also done for custom widgets
+               public delegate void LoaderInvoker(object instance);
+               /// <summary>Store one loader per StyleKey</summary>
+               public Dictionary<String, LoaderInvoker> DefaultValuesLoader = new Dictionary<string, LoaderInvoker>();
+               /// <summary>Store dictionnary of member/value per StyleKey</summary>
+               public Dictionary<string, Style> Styling;
+               /// <summary> parse all styling data's during application startup and build global Styling Dictionary </summary>
+               protected virtual void loadStyling() {
+                       Styling = new Dictionary<string, Style> ();
+
+                       //fetch styling info in this order, if member styling is alreadey referenced in previous
+                       //assembly, it's ignored.
+                       loadStylingFromAssembly (Assembly.GetEntryAssembly ());
+                       loadStylingFromAssembly (Assembly.GetExecutingAssembly ());
+               }
+               /// <summary> Search for .style resources in assembly </summary>
+               void loadStylingFromAssembly (Assembly assembly) {
+                       if (assembly == null)
+                               return;
+                       foreach (string s in assembly
+                               .GetManifestResourceNames ()
+                               .Where (r => r.EndsWith (".style", StringComparison.OrdinalIgnoreCase))) {
+                               using (Stream stream = assembly.GetManifestResourceStream (s)) {
+                                       new StyleReader (this.Styling, stream, s);
+                               }
+
+                       }
+               }
+               void loadCursors(){
+                       //Load cursors
+                       XCursor.Cross = XCursorFile.Load(this, "#Crow.Images.Icons.Cursors.cross").Cursors[0];
+                       XCursor.Default = XCursorFile.Load(this, "#Crow.Images.Icons.Cursors.arrow").Cursors[0];
+                       XCursor.NW = XCursorFile.Load(this, "#Crow.Images.Icons.Cursors.top_left_corner").Cursors[0];
+                       XCursor.NE = XCursorFile.Load(this, "#Crow.Images.Icons.Cursors.top_right_corner").Cursors[0];
+                       XCursor.SW = XCursorFile.Load(this, "#Crow.Images.Icons.Cursors.bottom_left_corner").Cursors[0];
+                       XCursor.SE = XCursorFile.Load(this, "#Crow.Images.Icons.Cursors.bottom_right_corner").Cursors[0];
+                       XCursor.H = XCursorFile.Load(this, "#Crow.Images.Icons.Cursors.sb_h_double_arrow").Cursors[0];
+                       XCursor.V = XCursorFile.Load(this, "#Crow.Images.Icons.Cursors.sb_v_double_arrow").Cursors[0];
+                       XCursor.Text = XCursorFile.Load(this, "#Crow.Images.Icons.Cursors.ibeam").Cursors[0];
+               }
+               #endregion
+
+               #region Templates
+               /// <summary>Store one default templates resource ID per class.
+               /// Resource ID must be 'fullClassName.template' (not case sensitive)
+               /// Those found in application assembly have priority to the default Crow's one
+               /// </summary>
+               public Dictionary<string, string> DefaultTemplates;
+               /// <summary>Finds available default templates at startup</summary>
+               void findAvailableTemplates(){
+                       DefaultTemplates = new Dictionary<string, string>();
+                       searchTemplatesOnDisk ("./");
+                       string defTemplatePath = System.IO.Path.Combine (CrowConfigRoot, "defaultTemplates");
+                       searchTemplatesOnDisk (defTemplatePath);
+                       searchTemplatesIn (Assembly.GetEntryAssembly ());
+                       searchTemplatesIn (Assembly.GetExecutingAssembly ());
+               }
+               void searchTemplatesOnDisk (string templatePath){
+                       if (!Directory.Exists (templatePath))
+                               return;
+                       foreach (string f in Directory.GetFiles(templatePath, "*.template",SearchOption.AllDirectories)) {
+                               string clsName = System.IO.Path.GetFileNameWithoutExtension(f);
+                               if (DefaultTemplates.ContainsKey (clsName))
+                                       continue;
+                               DefaultTemplates [clsName] = f;
+                       }
+               }
+               void searchTemplatesIn(Assembly assembly){
+                       if (assembly == null)
+                               return;
+                       foreach (string resId in assembly
+                               .GetManifestResourceNames ()
+                               .Where (r => r.EndsWith (".template", StringComparison.OrdinalIgnoreCase))) {
+                               string clsName = resId.Substring (0, resId.Length - 9);
+                               if (DefaultTemplates.ContainsKey (clsName))
+                                       continue;
+                               DefaultTemplates[clsName] = "#" + resId;
+                       }
+               }
+               #endregion
+
+               #region Load/Save
+               /// <summary>Open file or find a resource from path string</summary>
+               /// <returns>A file or resource stream</returns>
+               /// <param name="path">This could be a normal file path, or an embedded ressource ID
+               /// Resource ID's must be prefixed with '#' character</param>
+               public virtual Stream GetStreamFromPath (string path)
+               {
+                       Stream stream = null;
+
+                       if (path.StartsWith ("#")) {
+                               string resId = path.Substring (1);
+                               //try/catch added to prevent nunit error
+                               try {                                   
+                                       stream = System.Reflection.Assembly.GetEntryAssembly ().GetManifestResourceStream (resId);
+                               } catch{}
+                               if (stream == null)//try to find ressource in Crow assembly
+                                       stream = System.Reflection.Assembly.GetExecutingAssembly ().GetManifestResourceStream (resId);
+                               if (stream == null)
+                                       throw new Exception ("Resource not found: " + path);
+                       } else {
+                               if (!File.Exists (path))
+                                       throw new FileNotFoundException ("File not found: ", path);
+                               stream = new FileStream (path, FileMode.Open, FileAccess.Read);
+                       }
+                       return stream;
+               }
+               public static Stream StaticGetStreamFromPath (string path)
+               {
+                       Stream stream = null;
+
+                       if (path.StartsWith ("#")) {
+                               string resId = path.Substring (1);
+                               //try/catch added to prevent nunit error
+                               try {
+                                       stream = System.Reflection.Assembly.GetEntryAssembly ().GetManifestResourceStream (resId);
+                               } catch{}
+                               if (stream == null)//try to find ressource in Crow assembly
+                                       stream = System.Reflection.Assembly.GetExecutingAssembly ().GetManifestResourceStream (resId);
+                if (stream == null)                
+                    throw new Exception("Resource not found: " + path);
+
+                       } else {
+                               if (!File.Exists (path))
+                                       throw new FileNotFoundException ("File not found: ", path);
+                               stream = new FileStream (path, FileMode.Open, FileAccess.Read);
+                       }
+                       return stream;
+               }
+               /// <summary>
+               /// Add the content of the IML fragment to the graphic tree of this interface
+               /// </summary>
+               /// <returns>return the new instance for convenience, may be ignored</returns>
+               /// <param name="imlFragment">a valid IML string</param>
+               public GraphicObject LoadIMLFragment (string imlFragment) {
+                       lock (UpdateMutex) {
+                               GraphicObject tmp = CreateITorFromIMLFragment (imlFragment).CreateInstance();
+                               AddWidget (tmp);
+                               return tmp;
+                       }
+               }
+               /// <summary>
+               /// Create an instantiator bound to this interface from the IML fragment
+               /// </summary>
+               /// <returns>return the new instantiator</returns>
+               /// <param name="imlFragment">a valid IML string</param>
+               public Instantiator CreateITorFromIMLFragment (string imlFragment) {                    
+                       return Instantiator.CreateFromImlFragment (this, imlFragment);
+               }
+               /// <summary>
+               /// Create an instance of a GraphicObject and add it to the GraphicTree of this Interface
+               /// </summary>
+               /// <returns>new instance of graphic object created</returns>
+               /// <param name="path">path of the iml file to load</param>
+               public GraphicObject AddWidget (string path)
+               {
+                       lock (UpdateMutex) {
+                               GraphicObject tmp = Load (path);
+                               AddWidget (tmp);
+                               return tmp;
+                       }
+               }
+               /// <summary>
+               /// Create an instance of a GraphicObject linked to this interface but not added to the GraphicTree
+               /// </summary>
+               /// <returns>new instance of graphic object created</returns>
+               /// <param name="path">path of the iml file to load</param>
+               public virtual GraphicObject Load (string path)
+               {
+                       try {
+                               return GetInstantiator (path).CreateInstance ();
+                       } catch (Exception ex) {
+                               throw new Exception ("Error loading <" + path + ">:", ex);
+                       }
+               }
+               /// <summary>
+               /// Fetch instantiator from cache or create it.
+               /// </summary>
+               /// <returns>new Instantiator</returns>
+               /// <param name="path">path of the iml file to load</param>
+               public Instantiator GetInstantiator(string path){
+                       if (!Instantiators.ContainsKey(path))
+                               Instantiators [path] = new Instantiator(this, path);
+                       return Instantiators [path];
+               }
+               /// <summary>Item templates are derived from instantiator, this function
+               /// try to fetch the requested one in the cache or create it.
+               /// They have additional properties for recursivity and
+               /// custom display per item type</summary>
+               public virtual ItemTemplate GetItemTemplate(string path){
+                       if (!Instantiators.ContainsKey(path))
+                               Instantiators [path] = new ItemTemplate(this, path);
+                       return Instantiators [path] as ItemTemplate;
+               }
+               #endregion
+
+               #region focus
+               GraphicObject _activeWidget;    //button is pressed on widget
+               GraphicObject _hoverWidget;             //mouse is over
+               GraphicObject _focusedWidget;   //has keyboard (or other perif) focus
+
+               /// <summary>Widget is focused and button is down or another perif action is occuring
+               /// , it can not lose focus while Active</summary>
+               public GraphicObject ActiveWidget
+               {
+                       get { return _activeWidget; }
+                       set
+                       {
+                               if (_activeWidget == value)
+                                       return;
+
+                               if (_activeWidget != null)
+                                       _activeWidget.IsActive = false;
+
+                               _activeWidget = value;
+
+                               #if DEBUG_FOCUS
+                               NotifyValueChanged("ActiveWidget", _activeWidget);
+                               #endif
+
+                               if (_activeWidget != null)
+                               {
+                                       _activeWidget.IsActive = true;
+                                       #if DEBUG_FOCUS
+                                       NotifyValueChanged("ActiveWidget", _activeWidget);
+                                       Debug.WriteLine("Active => " + _activeWidget.ToString());
+                               }else
+                                       Debug.WriteLine("Active => null");
+                                       #else
+                               }
+                                       #endif
+                       }
+               }
+               /// <summary>Pointer is over the widget</summary>
+               public virtual GraphicObject HoverWidget
+               {
+                       get { return _hoverWidget; }
+                       set {
+                               if (_hoverWidget == value)
+                                       return;
+
+                               //if (_hoverWidget != null)
+                               //      _hoverWidget.IsHover = false;
+
+                               _hoverWidget = value;
+
+                               #if DEBUG_FOCUS
+                               NotifyValueChanged("HoverWidget", _hoverWidget);
+                               #endif
+                               /*
+                               if (_hoverWidget != null)
+                               {
+                                       _hoverWidget.IsHover = true;
+                                       #if DEBUG_FOCUS
+                                       Debug.WriteLine("Hover => " + _hoverWidget.ToString());
+                                       }else
+                                       Debug.WriteLine("Hover => null");
+                                       #else
+                               }
+                                       #endif
+                                       */
+                       }
+               }
+               /// <summary>Widget has the keyboard or mouse focus</summary>
+               public GraphicObject FocusedWidget {
+                       get { return _focusedWidget; }
+                       set {
+                               if (_focusedWidget == value)
+                                       return;
+                               if (_focusedWidget != null)
+                                       _focusedWidget.HasFocus = false;
+                               _focusedWidget = value;
+                               #if DEBUG_FOCUS
+                               NotifyValueChanged("FocusedWidget", _focusedWidget);
+                               #endif
+                               if (_focusedWidget != null)
+                                       _focusedWidget.HasFocus = true;
+                       }
+               }
+               #endregion
+
+               #region UPDATE Loops
+               /// <summary>Enqueue Graphic object for Repaint, DrawingQueue is locked because
+               /// GraphObj's property Set methods could trigger an update from another thread
+               /// Once in that queue, that means that the layouting of obj and childs have succeed,
+               /// the next step when dequeued will be clipping registration</summary>
+               public void EnqueueForRepaint(GraphicObject g)
+               {                       
+                       lock (ClippingMutex) {
+                               if (g.IsQueueForClipping)
+                                       return;
+                               #if DEBUG_LOG
+                               DebugLog.AddEvent(DbgEvtType.GOEnqueueForRepaint, g);
+                               #endif  
+                               ClippingQueue.Enqueue (g);
+                               g.IsQueueForClipping = true;
+                       }
+               }
+               /// <summary>Main Update loop, executed in this interface thread, protected by the UpdateMutex
+               /// Steps:
+               ///     - execute device Repeat events
+               ///     - Layouting
+               ///     - Clipping
+               ///     - Drawing
+               /// Result: the Interface bitmap is drawn in memory (byte[] bmp) and a dirtyRect and bitmap are available
+               /// </summary>
+               public void Update(){
+                       if (armedClickSender != null && clickTimer.ElapsedMilliseconds >= Interface.DoubleClick) {
+                               armedClickSender.onMouseClick (armedClickSender, armedClickEvtArgs);                            
+                               armedClickSender = null;
+                       }
+
+                       if (mouseRepeatCount > 0) {
+                               int mc = mouseRepeatCount;
+                               mouseRepeatCount -= mc;
+                               if (_focusedWidget != null) {
+                                       mouseRepeatTriggeredAtLeastOnce = true;
+                                       for (int i = 0; i < mc; i++) {
+                                               _focusedWidget.onMouseDown (this, new BubblingMouseButtonEventArg(Mouse.X, Mouse.Y, MouseButton.Left, true));
+                                       }
+                               }
+                       }
+
+                       CrowThread[] tmpThreads;
+                       lock (CrowThreads) {
+                               tmpThreads = new CrowThread[CrowThreads.Count];
+                               Array.Copy (CrowThreads.ToArray (), tmpThreads, CrowThreads.Count);
+                       }
+                       for (int i = 0; i < tmpThreads.Length; i++)
+                               tmpThreads [i].CheckState ();
+
+                       if (!Monitor.TryEnter (UpdateMutex))
+                               return;
+
+                       #if MEASURE_TIME
+                       updateMeasure.StartCycle();
+                       #endif
+
+                       /*#if DEBUG_LOG
+                       DebugLog.AddEvent (DbgEvtType.IFaceUpdate);
+                       #endif*/
+
+                       processLayouting ();
+
+                       clippingRegistration ();
+
+                       processDrawing ();
+
+                       #if MEASURE_TIME
+                       updateMeasure.StopCycle();
+                       #endif
+
+                       Monitor.Exit (UpdateMutex);
+               }
+               /// <summary>Layouting loop, this is the first step of the udpate and process registered
+               /// Layouting queue items. Failing LQI's are requeued in this cycle until MaxTry is reached which
+               /// trigger an enqueue for the next Update Cycle</summary>
+               protected virtual void processLayouting(){
+                       #if MEASURE_TIME
+                       layoutingMeasure.StartCycle();
+                       #endif
+                       if (Monitor.TryEnter (LayoutMutex)) {
+                               #if DEBUG_LOG
+                               if (LayoutingQueue.Count > 0)
+                                       DebugLog.AddEvent (DbgEvtType.IFaceStartLayouting);
+                               #endif
+                               DiscardQueue = new Queue<LayoutingQueueItem> ();
+                               //Debug.WriteLine ("======= Layouting queue start =======");
+                               LayoutingQueueItem lqi;
+                               while (LayoutingQueue.Count > 0) {
+                                       lqi = LayoutingQueue.Dequeue ();
+                                       lqi.ProcessLayouting ();
+                               }
+                               LayoutingQueue = DiscardQueue;
+                               Monitor.Exit (LayoutMutex);
+                               DiscardQueue = null;
+                       }
+                       /*#if DEBUG_LOG
+                       DebugLog.AddEvent (DbgEvtType.IFaceStartLayouting);
+                       #endif*/
+                       #if MEASURE_TIME
+                       layoutingMeasure.StopCycle();
+                       #endif
+               }
+               /// <summary>Degueue Widget to clip from DrawingQueue and register the last painted slot and the new one
+               /// Clipping rectangles are added at each level of the tree from leef to root, that's the way for the painting
+               /// operation to known if it should go down in the tree for further graphic updates and repaints</summary>
+               void clippingRegistration(){
+                       #if MEASURE_TIME
+                       clippingMeasure.StartCycle();
+                       #endif
+                       #if DEBUG_LOG
+                       if (ClippingQueue.Count > 0)
+                               DebugLog.AddEvent (DbgEvtType.IFaceStartClipping);
+                       #endif
+                       GraphicObject g = null;
+                       while (ClippingQueue.Count > 0) {
+                               lock (ClippingMutex) {
+                                       g = ClippingQueue.Dequeue ();
+                                       g.IsQueueForClipping = false;
+                               }
+                               g.ClippingRegistration ();
+                       }
+                       /*#if DEBUG_LOG
+                       DebugLog.AddEvent (DbgEvtType.IFaceEndClipping);
+                       #endif*/
+                       #if MEASURE_TIME
+                       clippingMeasure.StopCycle();
+                       #endif
+               }
+               /// <summary>Clipping Rectangles drive the drawing process. For compositing, each object under a clip rectangle should be
+               /// repainted. If it contains also clip rectangles, its cache will be update, or if not cached a full redraw will take place</summary>
+               void processDrawing(){
+                       #if MEASURE_TIME
+                       drawingMeasure.StartCycle();
+                       #endif
+                       #if DEBUG_LOG
+                       if (!clipping.IsEmpty)
+                               DebugLog.AddEvent (DbgEvtType.IFaceStartDrawing);
+                       #endif
+                       if (DragImage != null)
+                               clipping.UnionRectangle(new Rectangle (DragImageX, DragImageY, DragImageWidth, DragImageHeight));
+                       //using (surf = new ImageSurface (bmp, Format.Argb32, ClientRectangle.Width, ClientRectangle.Height, ClientRectangle.Width * 4)) {
+                       using (ctx = new Context (surf)){
+                               if (!clipping.IsEmpty) {
+                                       IsDirty = true;
+
+                                       for (int i = 0; i < clipping.NumRectangles; i++)
+                                               ctx.Rectangle(clipping.GetRectangle(i));
+                                       
+                                       ctx.ClipPreserve();
+                                       ctx.Operator = Operator.Clear;
+                                       ctx.Fill();
+                                       ctx.Operator = Operator.Over;
+
+                                       for (int i = GraphicTree.Count -1; i >= 0 ; i--){
+                                               GraphicObject p = GraphicTree[i];
+                                               if (!p.Visible)
+                                                       continue;
+                                               if (clipping.Contains (p.Slot) == RegionOverlap.Out)
+                                                       continue;
+
+                                               ctx.Save ();
+                                               p.Paint (ref ctx);
+                                               ctx.Restore ();
+                                       }
+
+                                       if (DragAndDropOperation != null) {
+                                               if (DragImage != null) {
+                                                       DirtyRect += new Rectangle (DragImageX, DragImageY, DragImageWidth, DragImageHeight);
+                                                       DragImageX = Mouse.X - DragImageWidth / 2;
+                                                       DragImageY = Mouse.Y - DragImageHeight / 2;
+                                                       ctx.Save ();
+                                                       ctx.ResetClip ();
+                                                       ctx.SetSourceSurface (DragImage, DragImageX, DragImageY);
+                                                       ctx.PaintWithAlpha (0.8);
+                                                       ctx.Restore ();
+                                                       DirtyRect += new Rectangle (DragImageX, DragImageY, DragImageWidth, DragImageHeight);
+                                                       IsDirty = true;
+                                                       //Console.WriteLine ("dragimage drawn: {0},{1}", DragImageX, DragImageY);
+                                               }
+                                       }
+
+                                       #if DEBUG_CLIP_RECTANGLE
+                                       ctx.LineWidth = 1;
+                                       ctx.SetSourceColor(Color.Magenta.AdjustAlpha (0.5));
+                                       for (int i = 0; i < clipping.NumRectangles; i++)
+                                               ctx.Rectangle(clipping.GetRectangle(i));
+                                       ctx.Stroke ();
+                                       #endif
+
+                                       clipping.Dispose ();
+                                       clipping = new Region ();
+                                       //}
+                                       //surf.WriteToPng (@"/mnt/data/test.png");
+
+                                       backend?.Flush ();
+                               }
+                       }
+                       /*#if DEBUG_LOG
+                       DebugLog.AddEvent (DbgEvtType.IFaceEndDrawing);
+                       #endif*/
+                       #if MEASURE_TIME
+                       drawingMeasure.StopCycle();
+                       #endif
+               }
+               #endregion
+
+               #region GraphicTree handling
+               /// <summary>Add widget to the Graphic tree of this interface and register it for layouting</summary>
+               public GraphicObject AddWidget(GraphicObject g)
+               {
+                       g.Parent = this;
+                       int ptr = 0;
+                       Window newW = g as Window;
+                       if (newW != null) {
+                               while (ptr < GraphicTree.Count) {
+                                       Window w = GraphicTree [ptr] as Window;
+                                       if (w == null)
+                                               break;
+                                       if (newW.AlwaysOnTop || !w.AlwaysOnTop)
+                                               break;
+                                       
+                                       ptr++;
+                               }
+                       }
+
+                       lock (UpdateMutex)
+                               GraphicTree.Insert (ptr, g);
+
+                       g.RegisteredLayoutings = LayoutingType.None;
+                       g.RegisterForLayouting (LayoutingType.Sizing | LayoutingType.ArrangeChildren);
+
+                       return g;
+               }
+               /// <summary>Set visible state of widget to false and delete if from the graphic tree</summary>
+               public void DeleteWidget(GraphicObject g)
+               {
+                       lock (UpdateMutex) {
+                               RegisterClip (g.ScreenCoordinates (g.LastPaintedSlot));
+                               GraphicTree.Remove (g);
+                               g.Parent = null;
+                               g.Dispose ();
+                       }
+               }
+               /// <summary>Set visible state of widget to false and remove if from the graphic tree</summary>
+               public void RemoveWidget(GraphicObject g)
+               {
+//                     if (g.Contains(HoverWidget)) {
+//                             while (HoverWidget != g.focusParent) {
+//                                     HoverWidget.onMouseLeave (HoverWidget, null);
+//                                     HoverWidget = HoverWidget.focusParent;
+//                             }
+//                     }
+                       lock (UpdateMutex) {
+                               RegisterClip (g.ScreenCoordinates (g.LastPaintedSlot));
+                               GraphicTree.Remove (g);
+                               g.Parent = null;
+                       }
+               }
+               /// <summary> Remove all Graphic objects from top container </summary>
+               public void ClearInterface()
+               {
+                       lock (UpdateMutex) {
+                               while (GraphicTree.Count > 0) {
+                                       //TODO:parent is not reset to null because object will be added
+                                       //to ObjectToRedraw list, and without parent, it fails
+                                       GraphicObject g = GraphicTree [0];
+                                       RegisterClip (g.ScreenCoordinates (g.LastPaintedSlot));
+                                       GraphicTree.RemoveAt (0);
+                                       g.Dispose ();
+                               }
+                       }
+                       #if DEBUG_LAYOUTING
+                       LQIsTries = new List<LQIList>();
+                       curLQIsTries = new LQIList();
+                       LQIs = new List<LQIList>();
+                       curLQIs = new LQIList();
+                       #endif
+               }
+               /// <summary> Put widget on top of other root widgets</summary>
+               public void PutOnTop(GraphicObject g, bool isOverlay = false)
+               {
+                       int ptr = 0;
+                       Window newW = g as Window;
+                       if (newW != null) {
+                               while (ptr < GraphicTree.Count) {
+                                       Window w = GraphicTree [ptr] as Window;
+                                       if (w != null) {
+                                               if (newW.AlwaysOnTop || !w.AlwaysOnTop)
+                                                       break;
+                                       }
+                                       ptr++;
+                               }
+                       }
+                       if (GraphicTree.IndexOf(g) > ptr)
+                       {
+                               lock (UpdateMutex) {
+                                       GraphicTree.Remove (g);
+                                       GraphicTree.Insert (ptr, g);
+                               }
+                               EnqueueForRepaint (g);
+                       }
+               }
+
+               /// <summary>Search a Graphic object in the tree named 'nameToFind'</summary>
+               public GraphicObject FindByName (string nameToFind)
+               {
+                       foreach (GraphicObject w in GraphicTree) {
+                               GraphicObject r = w.FindByName (nameToFind);
+                               if (r != null)
+                                       return r;
+                       }
+                       return null;
+               }
+               #endregion
+
+               /// <summary>
+               /// Resize the interface. This function should be called by the host
+               /// when window resize event occurs. 
+               /// </summary>
+               /// <param name="bounds">bounding box of the interface</param>
+               public virtual void ProcessResize(Rectangle bounds){
+                       lock (UpdateMutex) {
+                               clientRectangle = bounds;
+
+                               /*surf.Dispose ();
+                               surf = new Cairo.XlibSurface (xHandle, xwinHnd, xDefaultVisual, clientRectangle.Width, clientRectangle.Height);*/
+                               if (surf is XlibSurface)
+                                       (surf as XlibSurface).SetSize (clientRectangle.Width, clientRectangle.Height);
+                               else if (surf is XcbSurface)
+                                       (surf as XcbSurface).SetSize (clientRectangle.Width, clientRectangle.Height);
+
+
+                               foreach (GraphicObject g in GraphicTree)
+                                       g.RegisterForLayouting (LayoutingType.All);
+
+                               RegisterClip (clientRectangle);
+                       }
+               }
+
+               #region Mouse and Keyboard Handling
+               XCursor cursor = XCursor.Default;
+
+               public MouseState Mouse;
+               public IKeyboard Keyboard;
+
+               public XCursor MouseCursor {
+                       set {
+                               if (value == cursor)
+                                       return;
+                               cursor = value;
+                               MouseCursorChanged.Raise (this,new MouseCursorChangedEventArgs(cursor));
+                       }
+               }
+               /// <summary>Processes mouse move events from the root container, this function
+               /// should be called by the host on mouse move event to forward events to crow interfaces</summary>
+               /// <returns>true if mouse is in the interface</returns>
+               public virtual bool ProcessMouseMove(int x, int y)
+               {
+                       /*if (armedClickSender != null) {
+                               //armedClickSender.onMouseClick (armedClickSender, armedClickEvtArgs);
+                               armedClickSender = null;
+                       }*/
+                       int deltaX = x - Mouse.X;
+                       int deltaY = y - Mouse.Y;
+                       Mouse.X = x;
+                       Mouse.Y = y;
+                       MouseMoveEventArgs e = new MouseMoveEventArgs (x, y, deltaX, deltaY);
+                       e.Mouse = Mouse;
+
+                       if (ActiveWidget != null && DragAndDropOperation == null) {
+                               //TODO, ensure object is still in the graphic tree
+                               //send move evt even if mouse move outside bounds
+                               ActiveWidget.onMouseMove (this, e);
+                               return true;
+                       }
+
+                       if (DragAndDropOperation != null)//drag source cant have hover event, so move has to be handle here
+                               DragAndDropOperation.DragSource.onMouseMove (this, e);                  
+
+                       if (HoverWidget != null) {
+                               resetTooltip ();
+                               //check topmost graphicobject first
+                               GraphicObject tmp = HoverWidget;
+                               GraphicObject topc = null;
+                               while (tmp is GraphicObject) {
+                                       topc = tmp;
+                                       tmp = tmp.focusParent;
+                               }
+                               int idxhw = GraphicTree.IndexOf (topc);
+                               if (idxhw != 0) {
+                                       int i = 0;
+                                       while (i < idxhw) {
+                                               if (!GraphicTree [i].isPopup) {
+                                                       if (GraphicTree [i].MouseIsIn (e.Position)) {
+                                                               while (HoverWidget != null) {
+                                                                       HoverWidget.onMouseLeave (HoverWidget, e);
+                                                                       HoverWidget = HoverWidget.focusParent;
+                                                               }
+
+                                                               GraphicTree [i].checkHoverWidget (e);
+                                                               HoverWidget.onMouseMove (this, e);
+                                                               return true;
+                                                       }
+                                               }
+                                               i++;
+                                       }
+                               }
+
+                               if (HoverWidget.MouseIsIn (e.Position)) {
+                                       HoverWidget.checkHoverWidget (e);
+                                       HoverWidget.onMouseMove (this, e);
+                                       return true;
+                               } else {
+                                       HoverWidget.onMouseLeave (HoverWidget, e);
+                                       //seek upward from last focused graph obj's
+                                       while (HoverWidget.focusParent != null) {
+                                               HoverWidget = HoverWidget.focusParent;
+                                               if (HoverWidget.MouseIsIn (e.Position)) {
+                                                       HoverWidget.checkHoverWidget (e);
+                                                       HoverWidget.onMouseMove (this, e);
+                                                       return true;
+                                               } else
+                                                       HoverWidget.onMouseLeave (HoverWidget, e);
+                                       }
+                               }
+                       }
+
+                       //top level graphic obj's parsing
+                       lock (GraphicTree) {
+                               for (int i = 0; i < GraphicTree.Count; i++) {
+                                       GraphicObject g = GraphicTree [i];
+                                       if (g.MouseIsIn (e.Position)) {
+                                               g.checkHoverWidget (e);
+                                               if (g is Window)
+                                                       PutOnTop (g);
+                                               HoverWidget.onMouseMove (this, e);
+                                               return true;
+                                       }
+                               }
+                       }
+                       HoverWidget = null;
+                       return false;
+               }
+               /// <summary>
+               /// Forward the mouse up event from the host to the crow interface
+               /// </summary>
+               /// <returns>return true, if interface handled the event, false otherwise.</returns>
+               /// <param name="button">Button index</param>
+               public bool ProcessMouseButtonUp(int button)
+               {
+                       Mouse.DisableBit (button);
+                       MouseButtonEventArgs e = new MouseButtonEventArgs ((Crow.MouseButton)button) { Mouse = Mouse };
+                       if (_activeWidget == null)
+                               return false;
+
+                       if (mouseRepeatThread != null) {
+                               mouseRepeatOn = false;
+                               mouseRepeatThread.Cancel();
+                       }
+                       if (!mouseRepeatTriggeredAtLeastOnce) {
+                               if (_activeWidget.MouseIsIn (e.Position))
+                                       armeClick (_activeWidget, e);                           
+                       }
+                       mouseRepeatTriggeredAtLeastOnce = false;
+                       _activeWidget.onMouseUp (_activeWidget, e);
+
+//                     GraphicObject lastActive = _activeWidget;
+                       ActiveWidget = null;
+//                     if (!lastActive.MouseIsIn (Mouse.Position)) {
+//                             ProcessMouseMove (Mouse.X, Mouse.Y);
+//                     }
+                       return true;
+               }
+               /// <summary>
+               /// Forward the mouse down event from the host to the crow interface
+               /// </summary>
+               /// <returns>return true, if interface handled the event, false otherwise.</returns>
+               /// <param name="button">Button index</param>
+               public bool ProcessMouseButtonDown(int button)
+               {
+                       Mouse.EnableBit (button);
+                       MouseButtonEventArgs e = new MouseButtonEventArgs ((Crow.MouseButton)button) { Mouse = Mouse };
+
+                       if (HoverWidget == null)
+                               return false;
+
+                       GraphicObject hoverFocused = HoverWidget;
+                       while (!hoverFocused.Focusable) {
+                               hoverFocused = hoverFocused.focusParent;
+                               if (hoverFocused == null) {
+                                       hoverFocused = HoverWidget;
+                                       break;
+                               }
+                       }
+                       if (hoverFocused == armedClickSender) {
+                               if (clickTimer.ElapsedMilliseconds < Interface.DoubleClick) {
+                                       armedClickSender.onMouseDoubleClick (armedClickSender, e);
+                                       armedClickSender = null;
+                                       return true;
+                               }
+                                       
+                       }
+                       if (armedClickSender!=null)
+                               armedClickSender.onMouseClick (armedClickSender, armedClickEvtArgs);                            
+                       armedClickSender = null;
+
+                       HoverWidget.onMouseDown(HoverWidget,new BubblingMouseButtonEventArg(e));
+
+                       if (FocusedWidget == null)
+                               return true;
+
+                       ActiveWidget = FocusedWidget;
+
+                       if (!FocusedWidget.MouseRepeat)
+                               return true;
+                       mouseRepeatThread = new CrowThread (FocusedWidget, mouseRepeatThreadFunc);                      
+                       mouseRepeatThread.Start ();
+                       return true;
+               }
+               /// <summary>
+               /// Forward the mouse wheel event from the host to the crow interface
+               /// </summary>
+               /// <returns>return true, if interface handled the event, false otherwise.</returns>
+               /// <param name="button">Button index</param>
+               public bool ProcessMouseWheelChanged(float delta)
+               {
+                       Mouse.SetScrollRelative (0, delta);
+                       MouseWheelEventArgs e = new MouseWheelEventArgs () { Mouse = Mouse, DeltaPrecise = delta };
+
+                       if (HoverWidget == null)
+                               return false;
+                       HoverWidget.onMouseWheel (this, e);
+                       return true;
+               }
+
+               public bool IsKeyDown (Key key) {
+                       return false;
+               }
+               #endregion
+
+               #region Tooltip handling
+               Stopwatch tooltipTimer = new Stopwatch();
+               GraphicObject ToolTipContainer = null;
+               volatile bool tooltipVisible = false;
+
+               protected void initTooltip () {
+                       ToolTipContainer = Load  ("#Crow.Tooltip.template");
+                       Thread t = new Thread (toolTipThreadFunc);
+                       t.IsBackground = true;
+                       t.Start ();
+               }
+               void toolTipThreadFunc ()
+               {
+                       while(true) {
+                               if (tooltipTimer.ElapsedMilliseconds > ToolTipDelay) {
+                                       if (!tooltipVisible) {
+                                               GraphicObject g = _hoverWidget;
+                                               while (g != null) {
+                                                       if (!string.IsNullOrEmpty (g.Tooltip)) {
+                                                               AddWidget (ToolTipContainer);
+                                                               ToolTipContainer.DataSource = g;
+                                                               ToolTipContainer.Top = Mouse.Y + 10;
+                                                               ToolTipContainer.Left = Mouse.X + 10;
+                                                               tooltipVisible = true;
+                                                               break;
+                                                       }
+                                                       g = g.LogicalParent as GraphicObject;
+                                               }
+                                       }
+                               }
+                               Thread.Sleep (200);     
+                       }
+
+               }
+               void resetTooltip () {
+                       if (tooltipVisible) {
+                               //ToolTipContainer.DataSource = null;
+                               RemoveWidget (ToolTipContainer);
+                               tooltipVisible = false;
+                       }
+                       tooltipTimer.Restart ();
+               }
+               #endregion
+
+               #region Contextual menu
+               MenuItem ctxMenuContainer;
+               protected void initContextMenus (){
+                       ctxMenuContainer = Load  ("#Crow.ContextMenu.template") as MenuItem;
+                       ctxMenuContainer.LayoutChanged += CtxMenuContainer_LayoutChanged;
+               }
+
+               void CtxMenuContainer_LayoutChanged (object sender, LayoutingEventArgs e)
+               {
+                       Rectangle r = ctxMenuContainer.ScreenCoordinates (ctxMenuContainer.Slot);
+                       if (e.LayoutType == LayoutingType.Width || e.LayoutType == LayoutingType.X) {
+                               if (r.Right > this.clientRectangle.Right)
+                                       ctxMenuContainer.Left = this.clientRectangle.Right - ctxMenuContainer.Slot.Width;
+                       }else if (e.LayoutType == LayoutingType.Width || e.LayoutType == LayoutingType.Y) {
+                               if (r.Bottom > this.clientRectangle.Bottom)
+                                       ctxMenuContainer.Top = this.clientRectangle.Bottom - ctxMenuContainer.Slot.Height;
+                       }
+                       
+               }
+
+               public void ShowContextMenu (GraphicObject go) {
+
+                       lock (UpdateMutex) {
+                               if (ctxMenuContainer.Parent == null)
+                                       this.AddWidget (ctxMenuContainer);
+                               else
+                                       ctxMenuContainer.IsOpened = true;
+
+                               ctxMenuContainer.isPopup = true;
+                               ctxMenuContainer.LogicalParent = go;
+                               ctxMenuContainer.DataSource = go;
+
+                               PutOnTop (ctxMenuContainer, true);
+                       }
+                       ctxMenuContainer.Left = Mouse.X - 5;
+                       ctxMenuContainer.Top = Mouse.Y - 5;
+
+                       HoverWidget = ctxMenuContainer;
+                       ctxMenuContainer.onMouseEnter (ctxMenuContainer, new MouseMoveEventArgs (Mouse.X, Mouse.Y, 0, 0));
+               }
+               #endregion
+
+               #region Device Repeat Events
+               volatile bool mouseRepeatOn, keyboardRepeatOn, mouseRepeatTriggeredAtLeastOnce = false;
+               volatile int mouseRepeatCount, keyboardRepeatCount;
+               CrowThread mouseRepeatThread, keyboardRepeatThread;
+               KeyEventArgs lastKeyDownEvt;
+               void mouseRepeatThreadFunc()
+               {
+                       mouseRepeatOn = true;
+                       mouseRepeatTriggeredAtLeastOnce = false;
+                       Thread.Sleep (Interface.DeviceRepeatDelay);
+                       while (mouseRepeatOn&!mouseRepeatThread.cancelRequested) {
+                               mouseRepeatCount++;
+                               Thread.Sleep (Interface.DeviceRepeatInterval);
+                       }
+                       mouseRepeatCount = 0;
+               }
+               void keyboardRepeatThreadFunc()
+               {
+                       keyboardRepeatOn = true;
+                       Thread.Sleep (Interface.DeviceRepeatDelay);
+                       while (keyboardRepeatOn) {
+                               keyboardRepeatCount++;
+                               Thread.Sleep (Interface.DeviceRepeatInterval);
+                       }
+                       keyboardRepeatCount = 0;
+               }
+               #endregion
+
+               #region ILayoutable implementation
+               public virtual bool PointIsIn(ref Point m)
+               {
+                       return true;
+               }
+               public void RegisterClip(Rectangle r){
+                       clipping.UnionRectangle (r);
+               }
+               public bool ArrangeChildren { get { return false; }}
+               public int LayoutingTries {
+                       get { throw new NotImplementedException (); }
+                       set { throw new NotImplementedException (); }
+               }
+               public LayoutingType RegisteredLayoutings {
+                       get { return LayoutingType.None; }
+                       set { throw new NotImplementedException (); }
+               }
+               public void RegisterForLayouting (LayoutingType layoutType) { throw new NotImplementedException (); }
+               public bool UpdateLayout (LayoutingType layoutType) { throw new NotImplementedException (); }
+               public Rectangle ContextCoordinates (Rectangle r) { return r;}
+               public Rectangle ScreenCoordinates (Rectangle r) { return r; }
+
+               public ILayoutable Parent {
+                       get { return null; }
+                       set { throw new NotImplementedException (); }
+               }
+               public ILayoutable LogicalParent {
+                       get { return null; }
+                       set { throw new NotImplementedException (); }
+               }
+
+               public Rectangle ClientRectangle {
+                       get { return clientRectangle; }
+               }
+               public Interface HostContainer {
+                       get { return this; }
+               }
+               public Rectangle getSlot () { return ClientRectangle; }
+               #endregion
+
+               #if MEASURE_TIME
+               public PerformanceMeasure clippingMeasure = new PerformanceMeasure("Clipping", 1);
+               public PerformanceMeasure layoutingMeasure = new PerformanceMeasure("Layouting", 1);
+               public PerformanceMeasure updateMeasure = new PerformanceMeasure("Update", 1);
+               public PerformanceMeasure drawingMeasure = new PerformanceMeasure("Drawing", 1);
+               public List<PerformanceMeasure> PerfMeasures = new List<PerformanceMeasure>();
+               #endif
+               #if DEBUG_LAYOUTING
+               public List<LQIList> LQIsTries = new List<LQIList>();
+               public LQIList curLQIsTries = new LQIList();
+               public List<LQIList> LQIs = new List<LQIList>();
+               public LQIList curLQIs = new LQIList();
+               //              public static LayoutingQueueItem[] MultipleRunsLQIs {
+               //                      get { return curUpdateLQIs.Where(l=>l.LayoutingTries>2 || l.DiscardCount > 0).ToArray(); }
+               //              }
+               public LayoutingQueueItem currentLQI;
+               #else
+               public List<LQIList> LQIs = null;//still create the var for CrowIDE
+               #endif
+       }
+}
+
diff --git a/Crow/src/ItemTemplate.cs b/Crow/src/ItemTemplate.cs
new file mode 100644 (file)
index 0000000..fc89371
--- /dev/null
@@ -0,0 +1,301 @@
+//
+// ItemTemplate.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.IO;
+using System.Reflection;
+using System.Reflection.Emit;
+using System.Threading;
+using System.Xml.Serialization;
+using System.Xml;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Linq;
+using Crow.IML;
+
+namespace Crow
+{
+       /// <summary> Test func on data, return yes if there's children </summary>
+       public delegate bool BooleanTestOnInstance(object instance);
+
+       /// <summary>
+       /// Derived from Instantiator with sub data fetching facilities for hierarchical data access.
+       /// 
+       /// ItemTemplate stores the dynamic method for instantiating the control tree defined in a valid IML file.
+       /// 
+       /// </summary>
+       public class ItemTemplate : Instantiator {
+               #if DESIGN_MODE
+               public void getIML (System.Xml.XmlDocument doc, System.Xml.XmlNode parentElem){         
+                       if (sourcePath == "#Crow.DefaultItem.template")
+                               return;
+                       
+                       XmlElement xe = doc.CreateElement("ItemTemplate");
+                       XmlAttribute xa = null;
+
+                       if (string.IsNullOrEmpty (sourcePath)) {
+                               //inline item template
+                               using (GraphicObject go = this.CreateInstance())
+                                       go.getIML (doc, xe);
+                       } else {
+                               xa = doc.CreateAttribute ("Path");
+                               xa.Value = sourcePath;
+                               xe.Attributes.Append (xa);
+                       }
+
+                       if (strDataType != "default") {
+                               xa = doc.CreateAttribute ("DataType");
+                               xa.Value = strDataType;
+                               xe.Attributes.Append (xa);
+
+                               if (dataTest != "TypeOf"){
+                                       xa = doc.CreateAttribute ("DataTest");
+                                       xa.Value = dataTest;
+                                       xe.Attributes.Append (xa);
+                               }
+                       }
+
+                       if (!string.IsNullOrEmpty(fetchMethodName)){
+                               xa = doc.CreateAttribute ("Data");
+                               xa.Value = fetchMethodName;
+                               xe.Attributes.Append (xa);
+                       }
+                               
+                       parentElem.AppendChild (xe);
+
+                               
+               }
+               #endif
+
+               public EventHandler Expand;
+               public BooleanTestOnInstance HasSubItems;
+               string strDataType;
+               string fetchMethodName;
+               string dataTest;
+
+               #region CTOR
+               /// <summary>
+               /// Initializes a new instance of the <see cref="Crow.ItemTemplate"/> class by parsing the file passed as argument.
+               /// </summary>
+               /// <param name="path">IML file to parse</param>
+               /// <param name="_dataType">type this item will be choosen for, or member of the data item</param>
+               /// <param name="_fetchDataMethod">for hierarchical data, method to call for children fetching</param>
+               public ItemTemplate(Interface _iface, string path, string _dataTest = "TypeOf", string _dataType = "default", string _fetchDataMethod = null)
+                       : base(_iface, path) {
+                       strDataType = _dataType;
+                       fetchMethodName = _fetchDataMethod;
+                       dataTest = _dataTest;
+
+               }
+               /// <summary>
+               /// Initializes a new instance of the <see cref="Crow.ItemTemplate"/> class by parsing the IML fragment passed as arg.
+               /// </summary>
+               /// <param name="path">IML fragment to parse</param>
+               /// <param name="_dataType">type this item will be choosen for, or member of the data item</param>
+               /// <param name="_fetchDataMethod">for hierarchical data, method to call for children fetching</param>
+               public ItemTemplate (Interface _iface, Stream ImlFragment, string _dataTest, string _dataType, string _fetchDataMethod)
+                       :base(_iface, ImlFragment)
+               {
+                       strDataType = _dataType;
+                       fetchMethodName = _fetchDataMethod;
+                       dataTest = _dataTest;
+               }
+               /// <summary>
+               /// Initializes a new instance of the <see cref="Crow.ItemTemplate"/> class using the opened XmlReader in args.
+               /// </summary>
+               /// <param name="path">XML reader positionned before or at the root node</param>
+               /// <param name="_dataType">type this item will be choosen for, or member of the data item</param>
+               /// <param name="_fetchDataMethod">for hierarchical data, method to call for children fetching</param>
+               public ItemTemplate (Interface _iface, XmlReader reader, string _dataTest = "TypeOf" , string _dataType = null, string _fetchDataMethod = null)
+                       :base(_iface, reader)
+               {
+                       strDataType = _dataType;
+                       fetchMethodName = _fetchDataMethod;
+                       dataTest = _dataTest;
+               }
+               #endregion
+
+               /// <summary>
+               /// Creates the expand delegate.
+               /// </summary>
+               /// <param name="host">Host.</param>
+               public void CreateExpandDelegate (TemplatedGroup host){
+                       Type dataType = null;
+                       //if (host.DataTest == "TypeOf"){
+                               dataType = CompilerServices.tryGetType(strDataType);
+//                             if (dataType == null) {
+//                                     Debug.WriteLine ("ItemTemplate error: DataType not found: {0}.", strDataType);
+//                                     return;
+//                             }
+//                     }
+                       Type tmpGrpType = typeof(TemplatedGroup);
+                       Type evtType = typeof(EventHandler);
+
+                       //PropertyInfo piData = tmpGrpType.GetProperty ("Data");
+
+                       MethodInfo evtInvoke = evtType.GetMethod ("Invoke");
+                       ParameterInfo [] evtParams = evtInvoke.GetParameters ();
+                       Type handlerArgsType = evtParams [1].ParameterType;
+
+                       Type [] args = { CompilerServices.TObject, CompilerServices.TObject, handlerArgsType };
+
+                       #region Expand dyn meth
+                       //DM is bound to templatedGroup root (arg0)
+                       //arg1 is the sender of the expand event
+                       DynamicMethod dm = new DynamicMethod ("dyn_expand_" + fetchMethodName,
+                               typeof (void), args,typeof(TemplatedGroup), true);
+
+                       System.Reflection.Emit.Label gotoEnd;
+                       System.Reflection.Emit.Label ifDataIsNull;
+                       System.Reflection.Emit.Label gotoItemsContainerNotFound;
+
+                       ILGenerator il = dm.GetILGenerator (256);
+                       il.DeclareLocal(typeof(GraphicObject));
+
+                       gotoEnd = il.DefineLabel ();
+                       ifDataIsNull = il.DefineLabel ();
+                       gotoItemsContainerNotFound = il.DefineLabel ();
+
+                       il.Emit (OpCodes.Ldarg_1);//load sender of expand event
+                       il.Emit(OpCodes.Ldstr, "ItemsContainer");//load name to find
+                       il.Emit (OpCodes.Callvirt, CompilerServices.miFindByName);
+                       il.Emit (OpCodes.Stloc_0);//save items container as loc0
+
+                       //ensure ItemsContainer is not null
+                       il.Emit (OpCodes.Ldloc_0);
+                       il.Emit (OpCodes.Brfalse, gotoItemsContainerNotFound);
+
+                       //check that node is not already expanded
+                       il.Emit (OpCodes.Ldarg_0);//push root TemplatedGroup into the stack
+                       il.Emit (OpCodes.Ldarg_1);
+                       il.Emit (OpCodes.Call, CompilerServices.miIsAlreadyExpanded);
+                       il.Emit (OpCodes.Brtrue, gotoEnd);
+//                     il.Emit (OpCodes.Ldloc_0);
+//                     il.Emit (OpCodes.Callvirt, piData.GetGetMethod ());
+//                     il.Emit (OpCodes.Brfalse, ifDataIsNull);
+//                     il.Emit (OpCodes.Br, gotoEnd);
+
+//                     il.MarkLabel(ifDataIsNull);
+
+                       //copy the ref of ItemTemplates list TODO: maybe find another way to share it among the nodes?
+//                     FieldInfo fiTemplates = tmpGrpType.GetField("ItemTemplates");
+//                     il.Emit (OpCodes.Ldloc_0);
+//                     il.Emit (OpCodes.Ldarg_0);
+//                     il.Emit (OpCodes.Ldfld, fiTemplates);
+//                     il.Emit (OpCodes.Stfld, fiTemplates);
+
+                       //call 'fetchMethodName' from the dataSource to build the sub nodes list
+                       //il.Emit (OpCodes.Ldarg_0);//load root templatedGroop
+
+                       il.Emit (OpCodes.Ldarg_0);//push root TemplatedGroup into the stack
+                       il.Emit (OpCodes.Ldarg_1);//load sender node of expand
+                       il.Emit (OpCodes.Callvirt, CompilerServices.miGetDataSource);//get the dataSource of the sender
+
+
+
+                       if (fetchMethodName != "self") {//special keyword self allows the use of recurent list<<<
+                               if (dataType == null) {
+                                       //dataTest was not = TypeOF, so we have to get the type of data
+                                       //dynamically and fetch
+
+                                       il.Emit (OpCodes.Ldstr, fetchMethodName);
+                                       il.Emit (OpCodes.Call, CompilerServices.miGetDataTypeAndFetch);
+                               }else
+                                       emitGetSubData(il, dataType);                   
+                       }
+                       //set 'return' from the fetch method as 'data' of the list
+                       //il.Emit (OpCodes.Callvirt, piData.GetSetMethod ());
+                       il.Emit (OpCodes.Ldloc_0);//load second arg of loadPage, the sender node
+                       il.Emit (OpCodes.Ldstr, dataTest);//load 3rd arg, dataTest kind on subitems
+                       il.Emit (OpCodes.Callvirt, CompilerServices.miLoadPage);
+                       il.Emit (OpCodes.Br, gotoEnd);
+
+                       il.MarkLabel(gotoItemsContainerNotFound);
+                       il.EmitWriteLine("ItemsContainer not found in ItemTemplate for " + host.ToString());
+
+
+                       il.MarkLabel(gotoEnd);
+                       il.Emit (OpCodes.Ret);
+
+                       Expand = (EventHandler)dm.CreateDelegate (evtType, host);
+                       #endregion
+
+                       #region Items counting dyn method
+                       //dm is unbound, arg0 is instance of Item container to expand
+                       dm = new DynamicMethod ("dyn_count_" + fetchMethodName,
+                               typeof (bool), new Type[] {CompilerServices.TObject}, true);
+                       il = dm.GetILGenerator (256);
+
+                       //get the dataSource of the arg0
+                       il.Emit (OpCodes.Ldarg_0);
+                       il.Emit (OpCodes.Callvirt, CompilerServices.miGetDataSource);
+
+                       if (fetchMethodName != "self") {//special keyword self allows the use of recurent list<<<
+                               if (dataType == null) {
+                                       //dataTest was not = TypeOF, so we have to get the type of data
+                                       //dynamically and fetch
+
+                                       il.Emit (OpCodes.Ldstr, fetchMethodName);
+                                       il.Emit (OpCodes.Call, CompilerServices.miGetDataTypeAndFetch);
+                               }else
+                                       emitGetSubData(il, dataType);                   
+                       }
+                       
+                       il.Emit (OpCodes.Callvirt, CompilerServices.miGetColCount);
+                       il.Emit (OpCodes.Ldc_I4_0);
+                       il.Emit (OpCodes.Cgt);
+                       il.Emit (OpCodes.Ret);
+                       HasSubItems = (BooleanTestOnInstance)dm.CreateDelegate (typeof(BooleanTestOnInstance));
+                       #endregion
+               }
+               //data is on the stack
+               void emitGetSubData(ILGenerator il, Type dataType){
+                       MethodInfo miGetDatas = dataType.GetMethod (fetchMethodName, new Type[] {});
+                       if (miGetDatas == null)
+                               miGetDatas = CompilerServices.SearchExtMethod (dataType, fetchMethodName);
+
+                       if (miGetDatas == null) {//in last resort, search among properties
+                               PropertyInfo piDatas = dataType.GetProperty (fetchMethodName);
+                               if (piDatas == null) {
+                                       FieldInfo fiDatas = dataType.GetField (fetchMethodName);
+                                       if (fiDatas == null)//and among fields
+                                               throw new Exception ("Fetch data member not found in ItemTemplate: " + fetchMethodName);
+                                       il.Emit (OpCodes.Ldfld, fiDatas);
+                                       return;
+                               }
+                               miGetDatas = piDatas.GetGetMethod ();
+                               if (miGetDatas == null)
+                                       throw new Exception ("Read only property for fetching data in ItemTemplate: " + fetchMethodName);
+                       }
+
+                       il.Emit (OpCodes.Callvirt, miGetDatas);
+               }
+
+       
+       
+       }
+}
+
diff --git a/Crow/src/LayoutingEventArgs.cs b/Crow/src/LayoutingEventArgs.cs
new file mode 100644 (file)
index 0000000..9254aec
--- /dev/null
@@ -0,0 +1,41 @@
+//
+// LayoutingEventArgs.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+
+namespace Crow
+{
+       public class LayoutingEventArgs: EventArgs
+       {
+               public LayoutingType  LayoutType;
+
+               public LayoutingEventArgs (LayoutingType  _layoutType) : base()
+               {
+                       LayoutType = _layoutType;
+               }
+       }
+}
+
diff --git a/Crow/src/LayoutingQueueItem.cs b/Crow/src/LayoutingQueueItem.cs
new file mode 100644 (file)
index 0000000..a905f25
--- /dev/null
@@ -0,0 +1,190 @@
+//
+// LayoutingQueueItem.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.Diagnostics;
+using System.Collections.Generic;
+using System.Linq;
+
+namespace Crow
+{
+       [Flags]
+       public enum LayoutingType : byte
+       {
+               None = 0x00,
+               X = 0x01,
+               Y = 0x02,
+               Positioning = 0x03,
+               Width = 0x04,
+               Height = 0x08,
+               Sizing = 0x0C,
+               ArrangeChildren = 0x10,
+               All = 0xFF
+       }
+
+       /// <summary>
+       /// Element class of the LayoutingQueue
+       /// </summary>
+       public struct LayoutingQueueItem
+       {
+               /// <summary> Instance of widget to be layouted</summary>
+               public ILayoutable Layoutable;
+               /// <summary> Bitfield containing the element of the layout to performs (x|y|width|height)</summary>
+               public LayoutingType LayoutType;
+               /// <summary> Unsuccessfull UpdateLayout and requeueing count </summary>
+               public int LayoutingTries, DiscardCount;
+
+               #if DEBUG_LOG
+               public enum Result : byte {
+                       Unknown,
+                       Register,
+                       Success,
+                       Requeued,
+                       Discarded,
+                       Deleted,
+               }
+               public Result result;
+               public GraphicObject graphicObject {
+                       get { return Layoutable as GraphicObject; }
+               }
+               public string Name {
+                       get { return graphicObject.Name; }
+               }
+               public string FullName {
+                       get { return graphicObject.ToString(); }
+               }
+               public Measure Width {
+                       get { return graphicObject.Width; }
+               }
+               public Measure Height {
+                       get { return graphicObject.Height; }
+               }
+               public Rectangle Slot, NewSlot;
+               #endif
+
+               #region CTOR
+               public LayoutingQueueItem (LayoutingType _layoutType, ILayoutable _graphicObject)
+               {                       
+                       LayoutType = _layoutType;
+                       Layoutable = _graphicObject;
+                       Layoutable.RegisteredLayoutings |= LayoutType;
+                       LayoutingTries = 0;
+                       DiscardCount = 0;
+                       #if DEBUG_LOG
+                       Slot = Rectangle.Empty;
+                       NewSlot = Rectangle.Empty;
+                       result = Result.Register;
+                       DebugLog.AddEvent (DbgEvtType.GORegisterLayouting, this);
+                       #endif
+               }
+               #endregion
+
+
+               public void ProcessLayouting()
+               {
+                       GraphicObject go = Layoutable as GraphicObject;
+//                     if (go == null) {
+//                             Debug.WriteLine ("ERROR: processLayouting on something else than a graphic object: " + this.ToString ());
+//                             return;
+//                     }
+
+                       go.parentRWLock.EnterReadLock ();
+
+                       if (go.Parent == null) {//TODO:improve this
+                               //cancel layouting for object without parent, maybe some were in queue when
+                               //removed from a listbox
+                               #if DEBUG_LOG
+                               DebugLog.AddEvent (DbgEvtType.GOProcessLayoutingWithNoParent, this);
+                               #endif
+                               go.parentRWLock.ExitReadLock ();
+                               return;
+                       }
+                       #if DEBUG_LOG
+                       DbgEvent dbgEvt = DebugLog.AddEvent (DbgEvtType.GOProcessLayouting, this);
+                       #endif
+                       LayoutingTries++;
+                       if (!Layoutable.UpdateLayout (LayoutType)) {
+                               #if DEBUG_LOG
+                               dbgEvt.end = DebugLog.chrono.ElapsedTicks;
+                               #endif
+                               if (LayoutingTries < Interface.MaxLayoutingTries) {
+                                       Layoutable.RegisteredLayoutings |= LayoutType;
+                                       (Layoutable as GraphicObject).IFace.LayoutingQueue.Enqueue (this);
+                                       #if DEBUG_LOG
+                                       result = Result.Requeued;
+                                       #endif
+                               } else if (DiscardCount < Interface.MaxDiscardCount) {
+                                       #if DEBUG_LOG
+                                       result = Result.Discarded;
+                                       #endif
+                                       LayoutingTries = 0;
+                                       DiscardCount++;
+                                       Layoutable.RegisteredLayoutings |= LayoutType;
+                                       (Layoutable as GraphicObject).IFace.DiscardQueue.Enqueue (this);
+                               }
+                               #if DEBUG_LOG
+                               else {
+                                       result = Result.Deleted;
+                               }
+                               #endif
+                       }
+                       #if DEBUG_LOG
+                       else{
+                               result = Result.Success;
+                       }
+                       dbgEvt.data = this;
+                       #endif
+                       go.parentRWLock.ExitReadLock ();
+               }
+
+               public static implicit operator GraphicObject(LayoutingQueueItem queueItem)
+               {
+                       return queueItem.Layoutable as GraphicObject;
+               }
+               public static implicit operator LayoutingType(LayoutingQueueItem lqi)
+               {
+                       return lqi.LayoutType;
+               }
+               public override string ToString ()
+               {
+                       #if DEBUG_LAYOUTING
+                       return string.Format ("{2};{3} {1}->{0}", LayoutType,Layoutable.ToString(),
+                               LayoutingTries,DiscardCount);
+                       #else
+                       return string.Format ("{2};{3} {1}->{0}", LayoutType,Layoutable.ToString(),
+                               LayoutingTries, DiscardCount);
+                       #endif
+               }
+       }
+       public class LQIList : List<LayoutingQueueItem>{
+//             #if DEBUG_LAYOUTING
+//             public List<LayoutingQueueItem> GetRootLQIs(){
+//                     return this.Where (lqi => lqi.wasTriggeredBy == null).ToList ();
+//             }
+//             #endif
+       }
+}
+
diff --git a/Crow/src/Measure.cs b/Crow/src/Measure.cs
new file mode 100644 (file)
index 0000000..c40c670
--- /dev/null
@@ -0,0 +1,140 @@
+//
+// Measure.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+
+namespace Crow
+{
+       /// <summary>
+       /// Measurement unit
+       /// </summary>
+       public enum Unit {Undefined, Pixel, Percent, Inherit }
+       /// <summary>
+       /// Measure class allow proportional sizes as well as stretched and fit on content.
+       /// </summary>
+       public struct Measure
+       {
+               /// <summary>
+               /// Integer value of the measure
+               /// </summary>
+               public int Value;
+               /// <summary>
+               /// Measurement unit
+               /// </summary>
+               public Unit Units;
+
+               /// <summary>
+               /// Fit on content, this special measure is defined as a fixed integer set to -1 pixel
+               /// </summary>
+               public static Measure Fit = new Measure(-1,Unit.Percent);
+               /// <summary>
+               /// Stretched into parent client area. This special measure is defined as a proportional cote
+               /// set to 100 Percents
+               /// </summary>
+               public static Measure Stretched = new Measure(100, Unit.Percent);
+               public static Measure Inherit = new Measure (0, Unit.Inherit);
+               #region CTOR
+               public Measure (int _value, Unit _units = Unit.Pixel)
+               {
+                       Value = _value;
+                       Units = _units;
+               }
+               #endregion
+
+               /// <summary>
+               /// True is size is fixed in pixels, this means not proportional, stretched nor fit.
+               /// </summary>
+               public bool IsFixed { get { return Units == Unit.Pixel; }}
+               public bool IsFit { get { return Value == -1 && Units == Unit.Percent; }}
+               public bool IsRelativeToParent { get { return Value >= 0 && Units == Unit.Percent; }}
+               #region Operators
+               public static implicit operator int(Measure m){
+                       return m.Value;
+               }
+               public static implicit operator Measure(int i){
+                       return new Measure(i);
+               }
+               public static implicit operator string(Measure m){
+                       return m.ToString();
+               }
+               public static implicit operator Measure(string s){
+                       return Measure.Parse(s);
+               }
+
+               public static bool operator ==(Measure m1, Measure m2){
+                       return m1.Value == m2.Value && m1.Units == m2.Units;
+               }
+               public static bool operator !=(Measure m1, Measure m2){
+                       return !(m1.Value == m2.Value && m1.Units == m2.Units);
+               }
+               #endregion
+
+               #region Object overrides
+               public override int GetHashCode ()
+               {
+                       return Value.GetHashCode ();
+               }
+               public override bool Equals (object obj)
+               {
+                       return (obj == null || obj.GetType() != typeof(Measure)) ?
+                               false :
+                               this == (Measure)obj;
+               }
+               public override string ToString ()
+               {
+                       return Units == Unit.Inherit ? "Inherit" :
+                               Value == -1 ? "Fit" :
+                               Units == Unit.Percent ? Value == 100 ? "Stretched" :
+                               Value.ToString () + "%" : Value.ToString ();
+               }
+               #endregion
+
+               public static Measure Parse(string s){
+                       if (string.IsNullOrEmpty (s))
+                               return default(Measure);
+
+                       string st = s.Trim ();
+                       int tmp = 0;
+
+                       if (string.Equals ("Inherit", st, StringComparison.Ordinal))
+                               return Measure.Inherit;
+                       else if (string.Equals ("Fit", st, StringComparison.Ordinal))
+                               return Measure.Fit;
+                       else if (string.Equals ("Stretched", s, StringComparison.Ordinal))
+                               return Measure.Stretched;                       
+                       else {
+                               if (st.EndsWith ("%", StringComparison.Ordinal)) {
+                                       if (int.TryParse (s.Substring(0, st.Length - 1), out tmp))
+                                               return new Measure (tmp, Unit.Percent);
+                               }else if (int.TryParse (s, out tmp))
+                                       return new Measure (tmp);
+                       }
+
+                       throw new Exception ("Error parsing Measure.");
+               }
+
+       }
+}
diff --git a/Crow/src/Mono.Cairo/Antialias.cs b/Crow/src/Mono.Cairo/Antialias.cs
new file mode 100644 (file)
index 0000000..30c71c0
--- /dev/null
@@ -0,0 +1,43 @@
+//
+// Mono.Cairo.Antialias.cs
+//
+// Authors:
+//   Duncan Mak (duncan@ximian.com)
+//   Hisham Mardam Bey (hisham.mardambey@gmail.com)
+//
+// (C) Ximian, Inc. 2003
+// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+namespace Cairo
+{
+       
+       public enum Antialias
+       {
+               Default,
+               None,
+               Grey,
+               Subpixel,
+       }
+}
diff --git a/Crow/src/Mono.Cairo/Cairo.cs b/Crow/src/Mono.Cairo/Cairo.cs
new file mode 100644 (file)
index 0000000..c0a5f2a
--- /dev/null
@@ -0,0 +1,53 @@
+//
+// Cairo.cs - a simplistic binding of the Cairo API to C#.
+//
+// Authors: Duncan Mak (duncan@ximian.com)
+//          Hisham Mardam Bey (hisham.mardambey@gmail.com)
+//          John Luke (john.luke@gmail.com)
+//          Alp Toker (alp@atoker.com)
+//
+// (C) Ximian, Inc. 2003
+// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
+// Copyright (C) 2005 John Luke
+// Copyright (C) 2006 Alp Toker
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Cairo
+{
+       public static class CairoAPI {
+               static public int Version {
+                       get {
+                               return Cairo.NativeMethods.cairo_version ();
+                       }
+               }
+
+               static public string VersionString {
+                       get {
+                               IntPtr x = Cairo.NativeMethods.cairo_version_string ();
+                               return Marshal.PtrToStringAnsi (x);
+                       }
+               }
+       }
+}
diff --git a/Crow/src/Mono.Cairo/CairoDebug.cs b/Crow/src/Mono.Cairo/CairoDebug.cs
new file mode 100644 (file)
index 0000000..d694bbb
--- /dev/null
@@ -0,0 +1,82 @@
+//
+// CairoDebug.cs
+//
+// Author:
+//   Michael Hutchinson (mhutch@xamarin.com)
+//
+// Copyright (C) 2013 Xamarin Inc. (http://www.xamarin.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+namespace Cairo {
+
+       static class CairoDebug
+       {
+               static System.Collections.Generic.Dictionary<IntPtr,string> traces;
+
+               public static readonly bool Enabled;
+
+               static CairoDebug ()
+               {
+                       var dbg = Environment.GetEnvironmentVariable ("MONO_CAIRO_DEBUG_DISPOSE");
+                       if (dbg == null)
+                               return;
+                       Enabled = true;
+                       traces = new System.Collections.Generic.Dictionary<IntPtr,string> ();
+               }
+
+               public static void OnAllocated (IntPtr obj)
+               {
+                       if (!Enabled)
+                               throw new InvalidOperationException ();
+
+                       traces[obj] = Environment.StackTrace;
+               }
+
+               public static void OnDisposed<T> (IntPtr obj, bool disposing)
+               {
+                       if (disposing && !Enabled)
+                               throw new InvalidOperationException ();
+
+                       if (Environment.HasShutdownStarted)
+                               return;
+
+                       if (!disposing) {
+                               Console.Error.WriteLine ("{0} is leaking, programmer is missing a call to Dispose", typeof(T).FullName);
+                               if (Enabled) {
+                                       string val;
+                                       if (traces.TryGetValue (obj, out val)) {
+                                               Console.Error.WriteLine ("Allocated from:");
+                                               Console.Error.WriteLine (val);
+                                       }
+                               } else {
+                                       Console.Error.WriteLine ("Set MONO_CAIRO_DEBUG_DISPOSE to track allocation traces");
+                               }
+                       }
+
+                       if (Enabled)
+                               traces.Remove (obj);
+               }
+       }
+
+}
diff --git a/Crow/src/Mono.Cairo/Content.cs b/Crow/src/Mono.Cairo/Content.cs
new file mode 100644 (file)
index 0000000..a45370f
--- /dev/null
@@ -0,0 +1,43 @@
+//
+// Mono.Cairo.Content.cs
+//
+// Authors:
+//   Duncan Mak (duncan@ximian.com)
+//   Hisham Mardam Bey (hisham.mardambey@gmail.com)
+//
+// (C) Ximian, Inc. 2003
+// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+namespace Cairo
+{
+       //[Flags]
+       
+       public enum Content
+       {
+               Color = 0x1000,
+               Alpha = 0x2000,
+               ColorAlpha = 0x3000,
+       }
+}
diff --git a/Crow/src/Mono.Cairo/Context.cs b/Crow/src/Mono.Cairo/Context.cs
new file mode 100644 (file)
index 0000000..d428b42
--- /dev/null
@@ -0,0 +1,896 @@
+//
+// Mono.Cairo.Context.cs
+//
+// Author:
+//   Duncan Mak (duncan@ximian.com)
+//   Miguel de Icaza (miguel@novell.com)
+//   Hisham Mardam Bey (hisham.mardambey@gmail.com)
+//   Alp Toker (alp@atoker.com)
+//
+// (C) Ximian Inc, 2003.
+// (C) Novell Inc, 2003.
+//
+// This is an OO wrapper API for the Cairo API.
+//
+// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Runtime.InteropServices;
+using System.Text;
+using Color = Crow.Color;
+
+namespace Cairo {      
+
+       [Obsolete ("Renamed Cairo.Context per suggestion from cairo binding guidelines.")]
+       public class Graphics : Context {
+               public Graphics (IntPtr state) : base (state) {}
+               public Graphics (Surface surface) : base (surface) {}
+       }
+
+       public class Context : IDisposable
+       {
+               IntPtr handle = IntPtr.Zero;
+
+               static int native_glyph_size, c_compiler_long_size;
+
+               static Context ()
+               {
+                       //
+                       // This is used to determine what kind of structure
+                       // we should use to marshal Glyphs, as the public
+                       // definition in Cairo uses `long', which can be
+                       // 32 bits or 64 bits depending on the platform.
+                       //
+                       // We assume that sizeof(long) == sizeof(void*)
+                       // except in the case of Win64 where sizeof(long)
+                       // is 32 bits
+                       //
+                       int ptr_size = Marshal.SizeOf (typeof (IntPtr));
+
+                       /*PlatformID platform = Environment.OSVersion.Platform;
+            RuntimeInformation.IsOSPlatform(OSPlatform.Linux); 
+            RuntimeInformation.OSArchitecture.HasFlag(Architecture.);
+                       if (platform == PlatformID.Win32NT ||
+                           platform == PlatformID.Win32S ||
+                           platform == PlatformID.Win32Windows ||
+                           platform == PlatformID.WinCE ||
+                           ptr_size == 4){
+                               c_compiler_long_size = 4;
+                               native_glyph_size = Marshal.SizeOf (typeof (NativeGlyph_4byte_longs));
+                       } else {*/
+                               c_compiler_long_size = 8;
+                               native_glyph_size = Marshal.SizeOf (typeof (Glyph));
+                       //}
+               }
+
+               public Context (Surface surface) : this (NativeMethods.cairo_create (surface.Handle), true)
+               {
+               }
+
+
+               public Context (IntPtr handle, bool owner)
+               {
+                       this.handle = handle;
+                       if (!owner)
+                               NativeMethods.cairo_reference (handle);
+                       if (CairoDebug.Enabled)
+                               CairoDebug.OnAllocated (handle);
+               }
+
+               [Obsolete]
+               public Context (IntPtr state) : this (state, true)
+               {
+               }
+
+               ~Context ()
+               {
+                       Dispose (false);
+               }
+
+               public void Dispose ()
+               {
+                       Dispose (true);
+                       GC.SuppressFinalize (this);
+               }
+
+               protected virtual void Dispose (bool disposing)
+               {
+                       if (!disposing || CairoDebug.Enabled)
+                               CairoDebug.OnDisposed<Context> (handle, disposing);
+
+                       if (!disposing|| handle == IntPtr.Zero)
+                               return;
+
+                       NativeMethods.cairo_destroy (handle);
+                       handle = IntPtr.Zero;
+
+               }
+
+               public void Save ()
+               {
+                       NativeMethods.cairo_save (handle);
+               }
+
+               public void Restore ()
+               {
+                       NativeMethods.cairo_restore (handle);
+               }
+
+               public Antialias Antialias {
+                       get { return NativeMethods.cairo_get_antialias (handle); }
+                       set { NativeMethods.cairo_set_antialias (handle, value); }
+               }
+
+               public Cairo.Status Status {
+                       get {
+                               return NativeMethods.cairo_status (handle);
+                       }
+               }
+
+               public IntPtr Handle {
+                       get {
+                               return handle;
+                       }
+               }
+
+               public Operator Operator {
+                       set {
+                               NativeMethods.cairo_set_operator (handle, value);
+                       }
+
+                       get {
+                               return NativeMethods.cairo_get_operator (handle);
+                       }
+               }
+
+               public double Tolerance {
+                       get {
+                               return NativeMethods.cairo_get_tolerance (handle);
+                       }
+
+                       set {
+                               NativeMethods.cairo_set_tolerance (handle, value);
+                       }
+               }
+
+               public Cairo.FillRule FillRule {
+                       set {
+                               NativeMethods.cairo_set_fill_rule (handle, value);
+                       }
+
+                       get {
+                               return NativeMethods.cairo_get_fill_rule (handle);
+                       }
+               }
+
+               public double LineWidth {
+                       set {
+                               NativeMethods.cairo_set_line_width (handle, value);
+                       }
+
+                       get {
+                               return NativeMethods.cairo_get_line_width (handle);
+                       }
+               }
+
+               public Cairo.LineCap LineCap {
+                       set {
+                               NativeMethods.cairo_set_line_cap (handle, value);
+                       }
+
+                       get {
+                               return NativeMethods.cairo_get_line_cap (handle);
+                       }
+               }
+
+               public Cairo.LineJoin LineJoin {
+                       set {
+                               NativeMethods.cairo_set_line_join (handle, value);
+                       }
+
+                       get {
+                               return NativeMethods.cairo_get_line_join (handle);
+                       }
+               }
+
+               public void SetDash (double [] dashes, double offset)
+               {
+                       NativeMethods.cairo_set_dash (handle, dashes, dashes.Length, offset);
+               }
+
+               [Obsolete("Use GetSource/SetSource")]
+               public Pattern Pattern {
+                       set {
+                               SetSource (value);
+                       }
+                       get {
+                               return GetSource ();
+                       }
+               }
+
+               //This is obsolete because it wasn't obvious it needed to be disposed
+               [Obsolete("Use GetSource/SetSource")]
+               public Pattern Source {
+                       set {
+                               SetSource (value);
+                       }
+                       get {
+                               return GetSource ();
+                       }
+               }
+
+               public void SetSource (Pattern source)
+               {
+                       NativeMethods.cairo_set_source (handle, source.Handle);
+               }
+
+               public Pattern GetSource ()
+               {
+                       var ptr = NativeMethods.cairo_get_source (handle);
+                       return Cairo.Pattern.Lookup (ptr, false);
+               }
+
+               public double MiterLimit {
+                       set {
+                               NativeMethods.cairo_set_miter_limit (handle, value);
+                       }
+
+                       get {
+                               return NativeMethods.cairo_get_miter_limit (handle);
+                       }
+               }
+
+               public PointD CurrentPoint {
+                       get {
+                               double x, y;
+                               NativeMethods.cairo_get_current_point (handle, out x, out y);
+                               return new PointD (x, y);
+                       }
+               }
+
+               public bool HasCurrentPoint {
+                       get {
+                               return NativeMethods.cairo_has_current_point (handle);
+                       }
+               }
+
+               [Obsolete ("Use GetTarget/SetTarget")]
+               public Cairo.Surface Target {
+                       set {
+                               if (handle != IntPtr.Zero)
+                                       NativeMethods.cairo_destroy (handle);
+
+                               handle = NativeMethods.cairo_create (value.Handle);
+                       }
+
+                       get {
+                               return GetTarget ();
+                       }
+               }
+
+               public Surface GetTarget ()
+               {
+                       return Surface.Lookup (NativeMethods.cairo_get_target (handle), false);
+               }
+
+               public void SetTarget (Surface target)
+               {
+                       if (handle != IntPtr.Zero)
+                               NativeMethods.cairo_destroy (handle);
+                       handle = NativeMethods.cairo_create (target.Handle);
+               }
+
+               [Obsolete("Use GetScaledFont/SetScaledFont")]
+               public ScaledFont ScaledFont {
+                       set {
+                               SetScaledFont (value);
+                       }
+
+                       get {
+                               return GetScaledFont ();
+                       }
+               }
+
+               public ScaledFont GetScaledFont ()
+               {
+                       return new ScaledFont (NativeMethods.cairo_get_scaled_font (handle), false);
+               }
+
+               public void SetScaledFont (ScaledFont font)
+               {
+                       NativeMethods.cairo_set_scaled_font (handle, font.Handle);
+               }
+
+               public uint ReferenceCount {
+                       get { return NativeMethods.cairo_get_reference_count (handle); }
+               }
+
+               public void SetSourceColor (Color color)
+               {
+                       NativeMethods.cairo_set_source_rgba (handle, color.R, color.G, color.B, color.A);
+               }
+
+               public void SetSourceRGB (double r, double g, double b)
+               {
+                       NativeMethods.cairo_set_source_rgb (handle, r, g, b);
+               }
+
+               public void SetSourceRGBA (double r, double g, double b, double a)
+               {
+                       NativeMethods.cairo_set_source_rgba (handle, r, g, b, a);
+               }
+
+               //[Obsolete ("Use SetSource method (with double parameters)")]
+               public void SetSourceSurface (Surface source, int x, int y)
+               {
+                       NativeMethods.cairo_set_source_surface (handle, source.Handle, x, y);
+               }
+
+               public void SetSource (Surface source, double x, double y)
+               {
+                       NativeMethods.cairo_set_source_surface (handle, source.Handle, x, y);
+               }
+
+               public void SetSource (Surface source)
+               {
+                       NativeMethods.cairo_set_source_surface (handle, source.Handle, 0, 0);
+               }
+
+#region Path methods
+
+               public void NewPath ()
+               {
+                       NativeMethods.cairo_new_path (handle);
+               }
+
+               public void NewSubPath ()
+               {
+                       NativeMethods.cairo_new_sub_path (handle);
+               }
+
+               public void MoveTo (PointD p)
+               {
+                       MoveTo (p.X, p.Y);
+               }
+
+               public void MoveTo (double x, double y)
+               {
+                       NativeMethods.cairo_move_to (handle, x, y);
+               }
+
+               public void LineTo (PointD p)
+               {
+                       LineTo (p.X, p.Y);
+               }
+
+               public void LineTo (double x, double y)
+               {
+                       NativeMethods.cairo_line_to (handle, x, y);
+               }
+
+               public void CurveTo (PointD p1, PointD p2, PointD p3)
+               {
+                       CurveTo (p1.X, p1.Y, p2.X, p2.Y, p3.X, p3.Y);
+               }
+
+               public void CurveTo (double x1, double y1, double x2, double y2, double x3, double y3)
+               {
+                       NativeMethods.cairo_curve_to (handle, x1, y1, x2, y2, x3, y3);
+               }
+
+               public void RelMoveTo (Distance d)
+               {
+                       RelMoveTo (d.Dx, d.Dy);
+               }
+
+               public void RelMoveTo (double dx, double dy)
+               {
+                       NativeMethods.cairo_rel_move_to (handle, dx, dy);
+               }
+
+               public void RelLineTo (Distance d)
+               {
+                       RelLineTo (d.Dx, d.Dy);
+               }
+
+               public void RelLineTo (double dx, double dy)
+               {
+                       NativeMethods.cairo_rel_line_to (handle, dx, dy);
+               }
+
+               public void RelCurveTo (Distance d1, Distance d2, Distance d3)
+               {
+                       RelCurveTo (d1.Dx, d1.Dy, d2.Dx, d2.Dy, d3.Dx, d3.Dy);
+               }
+
+               public void RelCurveTo (double dx1, double dy1, double dx2, double dy2, double dx3, double dy3)
+               {
+                       NativeMethods.cairo_rel_curve_to (handle, dx1, dy1, dx2, dy2, dx3, dy3);
+               }
+
+               public void Arc (double xc, double yc, double radius, double angle1, double angle2)
+               {
+                       NativeMethods.cairo_arc (handle, xc, yc, radius, angle1, angle2);
+               }
+
+               public void ArcNegative (double xc, double yc, double radius, double angle1, double angle2)
+               {
+                       NativeMethods.cairo_arc_negative (handle, xc, yc, radius, angle1, angle2);
+               }
+
+               public void Rectangle (Crow.Rectangle rectangle)
+               {
+                       Rectangle (rectangle.X, rectangle.Y, rectangle.Width, rectangle.Height);
+               }
+
+               public void Rectangle (PointD p, double width, double height)
+               {
+                       Rectangle (p.X, p.Y, width, height);
+               }
+
+               public void Rectangle (double x, double y, double width, double height)
+               {
+                       NativeMethods.cairo_rectangle (handle, x, y, width, height);
+               }
+
+               public void ClosePath ()
+               {
+                       NativeMethods.cairo_close_path (handle);
+               }
+
+               public Path CopyPath ()
+               {
+                       return new Path (NativeMethods.cairo_copy_path (handle));
+               }
+
+               public Path CopyPathFlat ()
+               {
+                       return new Path (NativeMethods.cairo_copy_path_flat (handle));
+               }
+
+               public void AppendPath (Path path)
+               {
+                       NativeMethods.cairo_append_path (handle, path.Handle);
+               }
+
+#endregion
+
+#region Painting Methods
+               public void Paint ()
+               {
+                       NativeMethods.cairo_paint (handle);
+               }
+
+               public void PaintWithAlpha (double alpha)
+               {
+                       NativeMethods.cairo_paint_with_alpha (handle, alpha);
+               }
+
+               public void Mask (Pattern pattern)
+               {
+                       NativeMethods.cairo_mask (handle, pattern.Handle);
+               }
+
+               public void MaskSurface (Surface surface, double surface_x, double surface_y)
+               {
+                       NativeMethods.cairo_mask_surface (handle, surface.Handle, surface_x, surface_y);
+               }
+
+               public void Stroke ()
+               {
+                       NativeMethods.cairo_stroke (handle);
+               }
+
+               public void StrokePreserve ()
+               {
+                       NativeMethods.cairo_stroke_preserve (handle);
+               }
+
+               public Crow.Rectangle StrokeExtents ()
+               {
+                       double x1, y1, x2, y2;
+                       NativeMethods.cairo_stroke_extents (handle, out x1, out y1, out x2, out y2);
+                       return new Crow.Rectangle ((int)x1, (int)y1, (int)(x2 - x1), (int)(y2 - y1));
+               }
+
+               public void Fill ()
+               {
+                       NativeMethods.cairo_fill (handle);
+               }
+
+               public Crow.Rectangle FillExtents ()
+               {
+                       double x1, y1, x2, y2;
+                       NativeMethods.cairo_fill_extents (handle, out x1, out y1, out x2, out y2);
+                       return new Crow.Rectangle ((int)x1, (int)y1, (int)(x2 - x1), (int)(y2 - y1));
+               }
+
+               public void FillPreserve ()
+               {
+                       NativeMethods.cairo_fill_preserve (handle);
+               }
+
+#endregion
+
+               public void Clip ()
+               {
+                       NativeMethods.cairo_clip (handle);
+               }
+
+               public void ClipPreserve ()
+               {
+                       NativeMethods.cairo_clip_preserve (handle);
+               }
+
+               public void ResetClip ()
+               {
+                       NativeMethods.cairo_reset_clip (handle);
+               }
+
+               public bool InClip (double x, double y)
+               {
+                       return NativeMethods.cairo_in_clip (handle, x, y);
+               }
+               public RectangleList GetClipRectangles (){
+                       return (RectangleList)Marshal.PtrToStructure (NativeMethods.cairo_copy_clip_rectangle_list (handle), typeof(RectangleList));
+               }
+               public void ClipExtendRectangle (){
+                       double x1, y1, x2, y2;
+                       NativeMethods.cairo_clip_extents (handle, out x1, out y1, out x2, out y2);
+                       NativeMethods.cairo_rectangle (handle, x1, y1, x2 - x1, y2 - y1); 
+               }
+               public bool InStroke (double x, double y)
+               {
+                       return NativeMethods.cairo_in_stroke (handle, x, y);
+               }
+
+               public bool InFill (double x, double y)
+               {
+                       return NativeMethods.cairo_in_fill (handle, x, y);
+               }
+
+               public Pattern PopGroup ()
+               {
+                       return Pattern.Lookup (NativeMethods.cairo_pop_group (handle), true);
+               }
+
+               public void PopGroupToSource ()
+               {
+                       NativeMethods.cairo_pop_group_to_source (handle);
+               }
+
+               public void PushGroup ()
+               {
+                       NativeMethods.cairo_push_group (handle);
+               }
+
+               public void PushGroup (Content content)
+               {
+                       NativeMethods.cairo_push_group_with_content (handle, content);
+               }
+
+               [Obsolete ("Use GetGroupTarget()")]
+               public Surface GroupTarget {
+                       get {
+                               return GetGroupTarget ();
+                       }
+               }
+
+               public Surface GetGroupTarget ()
+               {
+                       IntPtr surface = NativeMethods.cairo_get_group_target (handle);
+                       return Surface.Lookup (surface, false);
+               }
+
+               public void Rotate (double angle)
+               {
+                       NativeMethods.cairo_rotate (handle, angle);
+               }
+
+               public void Scale (double sx, double sy)
+               {
+                       NativeMethods.cairo_scale (handle, sx, sy);
+               }
+
+               public void Translate (double tx, double ty)
+               {
+                       NativeMethods.cairo_translate (handle, tx, ty);
+               }
+
+               public void Transform (Matrix m)
+               {
+                       NativeMethods.cairo_transform (handle, m);
+               }
+
+               [Obsolete("Use UserToDevice instead")]
+               public void TransformPoint (ref double x, ref double y)
+               {
+                       NativeMethods.cairo_user_to_device (handle, ref x, ref y);
+               }
+
+               [Obsolete("Use UserToDeviceDistance instead")]
+               public void TransformDistance (ref double dx, ref double dy)
+               {
+                       NativeMethods.cairo_user_to_device_distance (handle, ref dx, ref dy);
+               }
+
+               [Obsolete("Use InverseTransformPoint instead")]
+               public void InverseTransformPoint (ref double x, ref double y)
+               {
+                       NativeMethods.cairo_device_to_user (handle, ref x, ref y);
+               }
+
+               [Obsolete("Use DeviceToUserDistance instead")]
+               public void InverseTransformDistance (ref double dx, ref double dy)
+               {
+                       NativeMethods.cairo_device_to_user_distance (handle, ref dx, ref dy);
+               }
+
+               public void UserToDevice (ref double x, ref double y)
+               {
+                       NativeMethods.cairo_user_to_device (handle, ref x, ref y);
+               }
+
+               public void UserToDeviceDistance (ref double dx, ref double dy)
+               {
+                       NativeMethods.cairo_user_to_device_distance (handle, ref dx, ref dy);
+               }
+
+               public void DeviceToUser (ref double x, ref double y)
+               {
+                       NativeMethods.cairo_device_to_user (handle, ref x, ref y);
+               }
+
+               public void DeviceToUserDistance (ref double dx, ref double dy)
+               {
+                       NativeMethods.cairo_device_to_user_distance (handle, ref dx, ref dy);
+               }
+
+               public Matrix Matrix {
+                       set {
+                               NativeMethods.cairo_set_matrix (handle, value);
+                       }
+
+                       get {
+                               Matrix m = new Matrix();
+                               NativeMethods.cairo_get_matrix (handle, m);
+                               return m;
+                       }
+               }
+
+               public void SetFontSize (double scale)
+               {
+                       NativeMethods.cairo_set_font_size (handle, scale);
+               }
+
+               public void IdentityMatrix ()
+               {
+                       NativeMethods.cairo_identity_matrix (handle);
+               }
+
+               [Obsolete ("Use SetFontSize() instead.")]
+               public void FontSetSize (double scale)
+               {
+                       SetFontSize (scale);
+               }
+
+               [Obsolete ("Use SetFontSize() instead.")]
+               public double FontSize {
+                       set { SetFontSize (value); }
+               }
+
+               public Matrix FontMatrix {
+                       get {
+                               Matrix m;
+                               NativeMethods.cairo_get_font_matrix (handle, out m);
+                               return m;
+                       }
+                       set { NativeMethods.cairo_set_font_matrix (handle, value); }
+               }
+
+               public FontOptions FontOptions {
+                       get {
+                               FontOptions options = new FontOptions ();
+                               NativeMethods.cairo_get_font_options (handle, options.Handle);
+                               return options;
+                       }
+                       set { NativeMethods.cairo_set_font_options (handle, value.Handle); }
+               }
+
+               [StructLayout(LayoutKind.Sequential)]
+               internal struct NativeGlyph_4byte_longs {
+                       public int index;
+                       public double x;
+                       public double y;
+
+                       public NativeGlyph_4byte_longs (Glyph source)
+                       {
+                               index = (int) source.index;
+                               x = source.x;
+                               y = source.y;
+                       }
+               }
+
+               static internal IntPtr FromGlyphToUnManagedMemory(Glyph [] glyphs)
+               {
+                       IntPtr dest = Marshal.AllocHGlobal (native_glyph_size * glyphs.Length);
+                       long pos = dest.ToInt64();
+
+                       if (c_compiler_long_size == 8){
+                               foreach (Glyph g in glyphs){
+                                       Marshal.StructureToPtr (g, (IntPtr)pos, false);
+                                       pos += native_glyph_size;
+                               }
+                       } else {
+                               foreach (Glyph g in glyphs){
+                                       NativeGlyph_4byte_longs n = new NativeGlyph_4byte_longs (g);
+
+                                       Marshal.StructureToPtr (n, (IntPtr)pos, false);
+                                       pos += native_glyph_size;
+                               }
+                       }
+
+                       return dest;
+               }
+
+               public void ShowGlyphs (Glyph[] glyphs)
+               {
+                       IntPtr ptr;
+
+                       ptr = FromGlyphToUnManagedMemory (glyphs);
+
+                       NativeMethods.cairo_show_glyphs (handle, ptr, glyphs.Length);
+
+                       Marshal.FreeHGlobal (ptr);
+               }
+
+               [Obsolete("The matrix argument was never used, use ShowGlyphs(Glyphs []) instead")]
+               public void ShowGlyphs (Matrix matrix, Glyph[] glyphs)
+               {
+                       ShowGlyphs (glyphs);
+               }
+
+               [Obsolete("The matrix argument was never used, use GlyphPath(Glyphs []) instead")]
+               public void GlyphPath (Matrix matrix, Glyph[] glyphs)
+               {
+                       GlyphPath (glyphs);
+               }
+
+               public void GlyphPath (Glyph[] glyphs)
+               {
+                       IntPtr ptr;
+
+                       ptr = FromGlyphToUnManagedMemory (glyphs);
+
+                       NativeMethods.cairo_glyph_path (handle, ptr, glyphs.Length);
+
+                       Marshal.FreeHGlobal (ptr);
+
+               }
+
+               public FontExtents FontExtents {
+                       get {
+                               FontExtents f_extents;
+                               NativeMethods.cairo_font_extents (handle, out f_extents);
+                               return f_extents;
+                       }
+               }
+
+               public void CopyPage ()
+               {
+                       NativeMethods.cairo_copy_page (handle);
+               }
+
+               [Obsolete ("Use SelectFontFace() instead.")]
+               public void FontFace (string family, FontSlant slant, FontWeight weight)
+               {
+                       SelectFontFace (family, slant, weight);
+               }
+
+               [Obsolete("Use GetFontFace/SetFontFace")]
+               public FontFace ContextFontFace {
+                       get {
+                               return GetContextFontFace ();
+                       }
+                       set {
+                               SetContextFontFace (value);
+                       }
+               }
+
+               public FontFace GetContextFontFace ()
+               {
+                       return Cairo.FontFace.Lookup (NativeMethods.cairo_get_font_face (handle), false);
+               }
+
+               public void SetContextFontFace (FontFace value)
+               {
+                       NativeMethods.cairo_set_font_face (handle, value == null ? IntPtr.Zero : value.Handle);
+               }
+
+               public void SelectFontFace (string family, FontSlant slant, FontWeight weight)
+               {
+                       NativeMethods.cairo_select_font_face (handle, family, slant, weight);
+               }
+
+               public void ShowPage ()
+               {
+                       NativeMethods.cairo_show_page (handle);
+               }
+
+               private static byte[] TerminateUtf8(byte[] utf8)
+               {
+                       if (utf8.Length > 0 && utf8[utf8.Length - 1] == 0)
+                               return utf8;
+                       var termedArray = new byte[utf8.Length + 1];
+                       Array.Copy(utf8, termedArray, utf8.Length);
+                       termedArray[utf8.Length] = 0;
+                       return termedArray;
+               }
+
+               private static byte[] TerminateUtf8(string s)
+               {
+                       // compute the byte count including the trailing \0
+                       var byteCount = Encoding.UTF8.GetMaxByteCount(s.Length + 1);
+                       var bytes = new byte[byteCount];
+                       Encoding.UTF8.GetBytes(s, 0, s.Length, bytes, 0);
+                       return bytes;
+               }
+
+               public void ShowText(string str)
+               {
+                       NativeMethods.cairo_show_text (handle, str);
+               }
+
+
+               public void TextPath(string str)
+               {
+                       NativeMethods.cairo_text_path (handle, TerminateUtf8(str));
+               }
+
+               public void TextPath(byte[] utf8)
+               {
+                       NativeMethods.cairo_text_path (handle, TerminateUtf8(utf8));
+               }
+
+               public TextExtents TextExtents(string s)
+               {
+                       TextExtents extents;
+                       NativeMethods.cairo_text_extents (handle, s, out extents);
+                       return extents;
+               }
+
+
+               public TextExtents GlyphExtents (Glyph[] glyphs)
+               {
+                       IntPtr ptr = FromGlyphToUnManagedMemory (glyphs);
+
+                       TextExtents extents;
+
+                       NativeMethods.cairo_glyph_extents (handle, ptr, glyphs.Length, out extents);
+
+                       Marshal.FreeHGlobal (ptr);
+
+                       return extents;
+               }
+       }
+}
diff --git a/Crow/src/Mono.Cairo/DRMDevice.cs b/Crow/src/Mono.Cairo/DRMDevice.cs
new file mode 100644 (file)
index 0000000..a03195f
--- /dev/null
@@ -0,0 +1,53 @@
+//
+// Mono.Cairo.Device.cs
+//
+// Authors:
+//                     JP Bruyère (jp_bruyere@hotmail.com)
+//
+// This is an OO wrapper API for the Cairo API
+//
+// Copyright (C) 2016 JP Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+using System;
+
+namespace Cairo
+{
+       public class DRMDevice : Device
+       {
+               public DRMDevice () : base (NativeMethods.cairo_drm_device_default (), true)
+               {
+               }
+               public DRMDevice (int fd) : base (NativeMethods.cairo_drm_device_get_for_fd (fd), true)
+               {
+               }
+               public DRMDevice (IntPtr udev_device) : base (NativeMethods.cairo_drm_device_get (udev_device), true)
+               {
+               }
+
+               public int FileDescriptor {
+                       get { return NativeMethods.cairo_drm_device_get_fd (Handle); }
+               }
+
+               public void DeviceThrottle () { NativeMethods.cairo_drm_device_throttle (Handle);}
+       }
+}
+
diff --git a/Crow/src/Mono.Cairo/DRMSurface.cs b/Crow/src/Mono.Cairo/DRMSurface.cs
new file mode 100644 (file)
index 0000000..248541c
--- /dev/null
@@ -0,0 +1,53 @@
+//
+// Mono.Cairo.GLSurface.cs
+//
+// Authors:
+//                     JP Bruyère (jp_bruyere@hotmail.com)
+//
+// This is an OO wrapper API for the Cairo API
+//
+// Copyright (C) 2016 JP Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+namespace Cairo {
+
+       public class DRMSurface : Surface
+       {
+               
+               public DRMSurface (IntPtr ptr, bool own) : base (ptr, own)
+               {}
+
+               public DRMSurface (DRMDevice device, Format format, int width, int height)
+                       : base (NativeMethods.cairo_drm_surface_create (device.Handle, format, width, height), true)
+               {}
+
+               public DRMSurface (DRMDevice device, uint name, Format format, int width, int height, int stride)
+                       : base (NativeMethods.cairo_drm_surface_create_for_name (device.Handle, name, format, width, height, stride), true)
+               {}
+
+               public DRMSurface (DRMDevice device, IntPtr imageSurface)
+                       : base (NativeMethods.cairo_drm_surface_create_from_cacheable_image (device.Handle, imageSurface), true)
+               {}
+       }
+}
diff --git a/Crow/src/Mono.Cairo/Device.cs b/Crow/src/Mono.Cairo/Device.cs
new file mode 100644 (file)
index 0000000..a5452f9
--- /dev/null
@@ -0,0 +1,101 @@
+//
+// Mono.Cairo.Device.cs
+//
+// Authors:
+//                     JP Bruyère (jp_bruyere@hotmail.com)
+//
+// This is an OO wrapper API for the Cairo API
+//
+// Copyright (C) 2016 JP Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+using System;
+
+namespace Cairo
+{
+       public class Device : IDisposable
+       {
+               IntPtr handle = IntPtr.Zero;
+
+               protected Device()
+               {
+               }
+
+               protected Device (IntPtr ptr) : this (ptr, true)
+               {
+               }
+
+               protected Device (IntPtr handle, bool owner)
+               {
+                       this.handle = handle;
+                       if (!owner)
+                               NativeMethods.cairo_device_reference (handle);
+                       if (CairoDebug.Enabled)
+                               CairoDebug.OnAllocated (handle);
+               }
+
+               ~Device ()
+               {
+                       Dispose (false);
+               }
+
+               public IntPtr Handle {
+                       get {
+                               return handle;
+                       }
+               }
+               public string Status {
+                       get {
+                return ""; //System.Runtime.InteropServices.Marshal.PtrToStringAuto(NativeMethods.cairo_status_to_string (NativeMethods.cairo_device_status (handle)));
+                       }
+               }
+               public void SetThreadAware (bool value){
+                       NativeMethods.cairo_gl_device_set_thread_aware (handle, value ? 1 : 0);
+               }
+               public Status Acquire()
+               {
+                       return NativeMethods.cairo_device_acquire (handle);
+               }
+               public void Release()
+               {
+                       NativeMethods.cairo_device_release (handle);
+               }
+
+               public void Dispose ()
+               {
+                       Dispose (true);
+                       GC.SuppressFinalize (this);
+               }
+
+               protected virtual void Dispose (bool disposing)
+               {
+                       if (!disposing || CairoDebug.Enabled)
+                               CairoDebug.OnDisposed<Device> (handle, disposing);
+
+                       if (!disposing || handle == IntPtr.Zero)
+                               return;
+
+                       NativeMethods.cairo_device_destroy (handle);
+                       handle = IntPtr.Zero;
+               }
+       }
+}
+
diff --git a/Crow/src/Mono.Cairo/DirectFBSurface.cs b/Crow/src/Mono.Cairo/DirectFBSurface.cs
new file mode 100644 (file)
index 0000000..afa57b7
--- /dev/null
@@ -0,0 +1,43 @@
+//
+// Mono.Cairo.DirectFBSurface.cs
+//
+// Authors:
+//    Alp Toker
+//
+// (C) Alp Toker, 2006.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+namespace Cairo {
+       public class DirectFBSurface : Surface
+       {
+               internal DirectFBSurface (IntPtr handle, bool owns) : base (handle, owns)
+               {
+               }
+
+               public DirectFBSurface (IntPtr dfb, IntPtr dfb_surface)
+                       : base (NativeMethods.cairo_directfb_surface_create (dfb, dfb_surface), true)
+               {
+               }
+       }
+}
diff --git a/Crow/src/Mono.Cairo/Distance.cs b/Crow/src/Mono.Cairo/Distance.cs
new file mode 100644 (file)
index 0000000..7cba372
--- /dev/null
@@ -0,0 +1,58 @@
+//
+// Mono.Cairo.Context.cs
+//
+// Author:
+//   Duncan Mak (duncan@ximian.com)
+//   Miguel de Icaza (miguel@novell.com)
+//   Hisham Mardam Bey (hisham.mardambey@gmail.com)
+//   Alp Toker (alp@atoker.com)
+//
+// (C) Ximian Inc, 2003.
+// (C) Novell Inc, 2003.
+//
+// This is an OO wrapper API for the Cairo API.
+//
+// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+namespace Cairo {
+
+       public struct Distance
+       {
+               public Distance (double dx, double dy)
+               {
+                       this.dx = dx;
+                       this.dy = dy;
+               }
+
+               double dx, dy;
+               public double Dx {
+                       get { return dx; }
+                       set { dx = value; }
+               }
+
+               public double Dy {
+                       get { return dy; }
+                       set { dy = value; }
+               }
+       }
+}
diff --git a/Crow/src/Mono.Cairo/EGLDevice.cs b/Crow/src/Mono.Cairo/EGLDevice.cs
new file mode 100644 (file)
index 0000000..45c988a
--- /dev/null
@@ -0,0 +1,41 @@
+//
+// Mono.Cairo.Device.cs
+//
+// Authors:
+//                     JP Bruyère (jp_bruyere@hotmail.com)
+//
+// This is an OO wrapper API for the Cairo API
+//
+// Copyright (C) 2016 JP Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+using System;
+
+namespace Cairo
+{
+       public class EGLDevice : Device
+       {
+               public EGLDevice (IntPtr dpy, IntPtr gl_ctx) : base (NativeMethods.cairo_egl_device_create (dpy, gl_ctx), true)
+               {
+               }
+       }
+}
+
diff --git a/Crow/src/Mono.Cairo/Extend.cs b/Crow/src/Mono.Cairo/Extend.cs
new file mode 100644 (file)
index 0000000..1135c2f
--- /dev/null
@@ -0,0 +1,45 @@
+//
+// Mono.Cairo.Extend.cs
+//
+// Authors:
+//   Duncan Mak (duncan@ximian.com)
+//   Hisham Mardam Bey (hisham.mardambey@gmail.com)
+//   John Luke (john.luke@gmail.com)
+//
+// (C) Ximian, Inc. 2003
+// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
+// Copyright (C) 2005 John Luke
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+namespace Cairo
+{
+       
+       public enum Extend
+       {
+               None,
+               Repeat,
+               Reflect,
+               Pad,
+       }
+}
diff --git a/Crow/src/Mono.Cairo/FillRule.cs b/Crow/src/Mono.Cairo/FillRule.cs
new file mode 100644 (file)
index 0000000..24cbfba
--- /dev/null
@@ -0,0 +1,41 @@
+//
+// Mono.Cairo.FillRule.cs
+//
+// Authors:
+//   Duncan Mak (duncan@ximian.com)
+//   Hisham Mardam Bey (hisham.mardambey@gmail.com)
+//
+// (C) Ximian, Inc. 2003
+// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+namespace Cairo
+{
+       
+       public enum FillRule
+       {
+               Winding,
+               EvenOdd
+       }
+}
diff --git a/Crow/src/Mono.Cairo/Filter.cs b/Crow/src/Mono.Cairo/Filter.cs
new file mode 100644 (file)
index 0000000..2355fbb
--- /dev/null
@@ -0,0 +1,45 @@
+//
+// Mono.Cairo.Filter.cs
+//
+// Authors:
+//   Duncan Mak (duncan@ximian.com)
+//   Hisham Mardam Bey (hisham.mardambey@gmail.com)
+//
+// (C) Ximian, Inc. 2003
+// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+namespace Cairo
+{
+       
+       public enum Filter
+       {
+               Fast,
+               Good,
+               Best,
+               Nearest,
+               Bilinear,
+               Gaussian,
+       }
+}
diff --git a/Crow/src/Mono.Cairo/FontExtents.cs b/Crow/src/Mono.Cairo/FontExtents.cs
new file mode 100644 (file)
index 0000000..76c7e65
--- /dev/null
@@ -0,0 +1,104 @@
+//
+// Mono.Cairo.FontExtents.cs
+//
+// Authors: Duncan Mak (duncan@ximian.com)
+//          Hisham Mardam Bey (hisham.mardambey@gmail.com)
+//
+// (C) Ximian, Inc. 2003
+//
+// This is a simplistic binding of the Cairo API to C#. All functions
+// in cairo.h are transcribed into their C# equivelants
+//
+// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Cairo
+{
+       [StructLayout (LayoutKind.Sequential)]
+       public struct FontExtents
+       {
+               double ascent;
+               double descent;
+               double height;
+               double maxXAdvance;
+               double maxYAdvance;
+               
+               public double Ascent {
+                       get { return ascent; }
+                       set { ascent = value; }
+               }
+               
+               public double Descent {
+                       get { return descent; }
+                       set { descent = value; }
+               }
+               
+               public double Height {
+                       get { return height; }
+                       set { height = value; }
+               }
+               
+               public double MaxXAdvance {
+                       get { return maxXAdvance; }
+                       set { maxXAdvance = value; }
+               }
+               
+               public double MaxYAdvance {
+                       get { return maxYAdvance; }
+                       set { maxYAdvance = value; }
+               }
+
+               public FontExtents (double ascent, double descent, double height, double maxXAdvance, double maxYAdvance)
+               {
+                       this.ascent = ascent;
+                       this.descent = descent;
+                       this.height = height;
+                       this.maxXAdvance = maxXAdvance;
+                       this.maxYAdvance = maxYAdvance;
+               }
+
+               public override bool Equals (object obj)
+               {
+                       if (obj is FontExtents)
+                               return this == (FontExtents) obj;
+                       return false;
+               }
+
+               public override int GetHashCode ()
+               {
+                       return (int) Ascent ^ (int) Descent ^ (int) Height ^ (int) MaxXAdvance ^ (int) MaxYAdvance;
+               }
+
+               public static bool operator == (FontExtents extents, FontExtents other)
+               {
+                       return extents.Ascent == other.Ascent && extents.Descent == other.Descent && extents.Height == other.Height && extents.MaxXAdvance == other.MaxXAdvance && extents.MaxYAdvance == other.MaxYAdvance;
+               }
+
+               public static bool operator != (FontExtents extents, FontExtents other)
+               {
+                       return !(extents == other);
+               }
+       }
+}
diff --git a/Crow/src/Mono.Cairo/FontFace.cs b/Crow/src/Mono.Cairo/FontFace.cs
new file mode 100644 (file)
index 0000000..19d8163
--- /dev/null
@@ -0,0 +1,108 @@
+//
+// Mono.Cairo.FontFace.cs
+//
+// Author:
+//   Alp Toker (alp@atoker.com)
+//   Miguel de Icaza (miguel@novell.com)
+//
+// (C) Ximian Inc, 2003.
+//
+// This is an OO wrapper API for the Cairo API.
+//
+// Copyright (C) 2004, 2007 Novell, Inc (http://www.novell.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+using System;
+
+namespace Cairo
+{
+       public class FontFace : IDisposable
+       {
+               IntPtr handle;
+
+               internal static FontFace Lookup (IntPtr handle, bool owner)
+               {
+                       if (handle == IntPtr.Zero)
+                               return null;
+                       return new FontFace (handle, owner);
+               }
+
+               ~FontFace ()
+               {
+                       Dispose (false);
+               }
+
+               public void Dispose ()
+               {
+                       Dispose (true);
+                       GC.SuppressFinalize (this);
+               }
+
+               protected virtual void Dispose (bool disposing)
+               {
+                       if (!disposing || CairoDebug.Enabled)
+                               CairoDebug.OnDisposed<FontFace> (handle, disposing);
+
+                       if (!disposing|| handle == IntPtr.Zero)
+                               return;
+
+                       NativeMethods.cairo_font_face_destroy (handle);
+                       handle = IntPtr.Zero;
+               }
+
+               [Obsolete]
+               public FontFace (IntPtr handle) : this (handle, true)
+               {
+               }
+
+               public FontFace (IntPtr handle, bool owned)
+               {
+                       this.handle = handle;
+                       if (!owned)
+                               NativeMethods.cairo_font_face_reference (handle);
+                       if (CairoDebug.Enabled)
+                               CairoDebug.OnAllocated (handle);
+               }
+
+               public IntPtr Handle {
+                       get {
+                               return handle;
+                       }
+               }
+
+               public Status Status {
+                       get {
+                               return NativeMethods.cairo_font_face_status (handle);
+                       }
+               }
+               
+               public FontType FontType {
+                       get {
+                               return NativeMethods.cairo_font_face_get_type (handle);
+                       }
+               }
+
+               public uint ReferenceCount {
+                       get { return NativeMethods.cairo_font_face_get_reference_count (handle); }
+               }
+       }
+}
+
diff --git a/Crow/src/Mono.Cairo/FontOptions.cs b/Crow/src/Mono.Cairo/FontOptions.cs
new file mode 100644 (file)
index 0000000..5269d54
--- /dev/null
@@ -0,0 +1,143 @@
+//
+// Mono.Cairo.FontOptions.cs
+//
+// Author:
+//   John Luke (john.luke@gmail.com)
+//
+// (C) John Luke 2005.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+namespace Cairo
+{
+       public class FontOptions : IDisposable
+       {
+               IntPtr handle;
+
+               public FontOptions () : this (NativeMethods.cairo_font_options_create ())
+               {
+               }
+
+               ~FontOptions ()
+               {
+                       Dispose (false);
+               }
+
+               internal FontOptions (IntPtr handle)
+               {
+                       this.handle = handle;
+                       if (CairoDebug.Enabled)
+                               CairoDebug.OnAllocated (handle);
+               }
+
+               public FontOptions Copy ()
+               {
+                       return new FontOptions (NativeMethods.cairo_font_options_copy (handle));
+               }
+
+               [Obsolete ("Use Dispose()")]
+               public void Destroy ()
+               {
+                       Dispose ();
+               }
+
+               public void Dispose ()
+               {
+                       Dispose (true);
+                       GC.SuppressFinalize (this);
+               }
+
+               protected virtual void Dispose (bool disposing)
+               {
+                       if (!disposing || CairoDebug.Enabled)
+                               CairoDebug.OnDisposed<FontOptions> (handle, disposing);
+
+                       if (!disposing|| handle == IntPtr.Zero)
+                               return;
+
+                       NativeMethods.cairo_font_options_destroy (handle);
+                       handle = IntPtr.Zero;
+               }
+
+               public static bool operator == (FontOptions options, FontOptions other)
+               {
+                       return Equals (options, other);
+               }
+
+               public static bool operator != (FontOptions options, FontOptions other)
+               {
+                       return !(options == other);
+               }
+
+               public override bool Equals (object other)
+               {
+                       return Equals (other as FontOptions);
+               }
+
+               bool Equals (FontOptions options)
+               {
+                       return options != null && NativeMethods.cairo_font_options_equal (Handle, options.Handle);
+               }
+
+               public IntPtr Handle {
+                       get { return handle; }
+               }
+
+               public override int GetHashCode ()
+               {
+                       return (int) NativeMethods.cairo_font_options_hash (handle);
+               }
+               
+               public void Merge (FontOptions other)
+               {
+                       if (other == null)
+                               throw new ArgumentNullException ("other");
+                       NativeMethods.cairo_font_options_merge (handle, other.Handle);
+               }
+
+               public Antialias Antialias {
+                       get { return NativeMethods.cairo_font_options_get_antialias (handle); }
+                       set { NativeMethods.cairo_font_options_set_antialias (handle, value); }
+               }
+
+               public HintMetrics HintMetrics {
+                       get { return NativeMethods.cairo_font_options_get_hint_metrics (handle);}
+                       set { NativeMethods.cairo_font_options_set_hint_metrics (handle, value); }
+               }
+
+               public HintStyle HintStyle {
+                       get { return NativeMethods.cairo_font_options_get_hint_style (handle);}
+                       set { NativeMethods.cairo_font_options_set_hint_style (handle, value); }
+               }
+
+               public Status Status {
+                       get { return NativeMethods.cairo_font_options_status (handle); }
+               }
+
+               public SubpixelOrder SubpixelOrder {
+                       get { return NativeMethods.cairo_font_options_get_subpixel_order (handle);}
+                       set { NativeMethods.cairo_font_options_set_subpixel_order (handle, value); }
+               }
+       }
+}
+
diff --git a/Crow/src/Mono.Cairo/FontSlant.cs b/Crow/src/Mono.Cairo/FontSlant.cs
new file mode 100644 (file)
index 0000000..b7a5684
--- /dev/null
@@ -0,0 +1,42 @@
+//
+// Mono.Cairo.FontSlant.cs
+//
+// Authors:
+//   Duncan Mak (duncan@ximian.com)
+//   Hisham Mardam Bey (hisham.mardambey@gmail.com)
+//
+// (C) Ximian, Inc. 2003
+// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+namespace Cairo
+{
+       
+       public enum FontSlant
+       {
+               Normal,
+               Italic,
+               Oblique
+       }
+}
diff --git a/Crow/src/Mono.Cairo/FontType.cs b/Crow/src/Mono.Cairo/FontType.cs
new file mode 100644 (file)
index 0000000..e9fd263
--- /dev/null
@@ -0,0 +1,41 @@
+//
+// Mono.Cairo.FontType.cs
+//
+// Authors:
+//    John Luke
+//
+// (C) John Luke, 2006.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+namespace Cairo {
+
+       
+       public enum FontType
+       {
+               Toy,
+               FreeType,
+               Win32,
+               Atsui,
+       }
+}
diff --git a/Crow/src/Mono.Cairo/FontWeight.cs b/Crow/src/Mono.Cairo/FontWeight.cs
new file mode 100644 (file)
index 0000000..5b78109
--- /dev/null
@@ -0,0 +1,41 @@
+//
+// Mono.Cairo.FontWeight.cs
+//
+// Authors:
+//   Duncan Mak (duncan@ximian.com)
+//   Hisham Mardam Bey (hisham.mardambey@gmail.com)
+//
+// (C) Ximian, Inc. 2003
+// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+namespace Cairo
+{
+       
+       public enum FontWeight
+       {
+               Normal,
+               Bold,
+       }
+}
diff --git a/Crow/src/Mono.Cairo/Format.cs b/Crow/src/Mono.Cairo/Format.cs
new file mode 100644 (file)
index 0000000..96e9a0f
--- /dev/null
@@ -0,0 +1,48 @@
+//
+// Mono.Cairo.Format.cs
+//
+// Authors: Duncan Mak (duncan@ximian.com)
+//          Hisham Mardam Bey (hisham.mardambey@gmail.com)
+//
+// (C) Ximian, Inc. 2003
+// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+namespace Cairo
+{
+       
+       public enum Format
+       {
+               Argb32  = 0,
+               Rgb24   = 1,
+               A8      = 2,
+               A1      = 3,
+               Rgb16565 = 4,
+
+               //[Obsolete ("Use Argb32")]
+               ARGB32 = Argb32,
+               //[Obsolete ("Use Rgb24")]
+               RGB24   = Rgb24,
+       }
+}
diff --git a/Crow/src/Mono.Cairo/GLSurface.cs b/Crow/src/Mono.Cairo/GLSurface.cs
new file mode 100644 (file)
index 0000000..9486c9c
--- /dev/null
@@ -0,0 +1,61 @@
+//
+// Mono.Cairo.GLSurface.cs
+//
+// Authors:
+//                     JP Bruyère (jp_bruyere@hotmail.com)
+//
+// This is an OO wrapper API for the Cairo API
+//
+// Copyright (C) 2016 JP Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+namespace Cairo {
+
+       public class GLSurface : Surface
+       {
+               
+               public GLSurface (IntPtr ptr, bool own) : base (ptr, own)
+               {}
+
+               public GLSurface (Device device, Cairo.Content content, uint tex, int width, int height)
+                       : base (NativeMethods.cairo_gl_surface_create_for_texture (device.Handle, (uint)content, tex, width, height), true)
+               {}
+
+               public GLSurface (EGLDevice device, IntPtr eglSurf, int width, int height)
+                       : base (NativeMethods.cairo_gl_surface_create_for_egl (device.Handle, eglSurf, width, height), true)
+               {}
+
+               public GLSurface (GLXDevice device, IntPtr window, int width, int height)
+                       : base (NativeMethods.cairo_gl_surface_create_for_window (device.Handle, window, width, height),true)
+               {}
+
+               public GLSurface (WGLDevice device, IntPtr hdc, int width, int height)
+                       : base (NativeMethods.cairo_gl_surface_create_for_dc (device.Handle, hdc, width, height), true)
+               {}
+
+               public void SwapBuffers(){
+                       NativeMethods.cairo_gl_surface_swapbuffers (this.Handle);
+               }
+       }
+}
diff --git a/Crow/src/Mono.Cairo/GLXDevice.cs b/Crow/src/Mono.Cairo/GLXDevice.cs
new file mode 100644 (file)
index 0000000..189872a
--- /dev/null
@@ -0,0 +1,49 @@
+//
+// Mono.Cairo.Device.cs
+//
+// Authors:
+//                     JP Bruyère (jp_bruyere@hotmail.com)
+//
+// This is an OO wrapper API for the Cairo API
+//
+// Copyright (C) 2016 JP Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+using System;
+
+namespace Cairo
+{
+       public class GLXDevice : Device
+       {
+               public GLXDevice (IntPtr dpy, IntPtr gl_ctx) : base (NativeMethods.cairo_glx_device_create (dpy, gl_ctx), true)
+               {
+               }
+
+               public IntPtr Display {
+                       get { return NativeMethods.cairo_glx_device_get_display (Handle); }
+               }
+
+               public IntPtr Context {
+                       get { return NativeMethods.cairo_glx_device_get_context (Handle); }
+               }
+       }
+}
+
diff --git a/Crow/src/Mono.Cairo/GlitzSurface.cs b/Crow/src/Mono.Cairo/GlitzSurface.cs
new file mode 100644 (file)
index 0000000..6da1ac6
--- /dev/null
@@ -0,0 +1,43 @@
+//
+// Mono.Cairo.GlitzSurface.cs
+//
+// Authors:
+//    Alp Toker
+//
+// (C) Alp Toker, 2006.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+namespace Cairo {
+       public class GlitzSurface : Surface
+       {
+               internal GlitzSurface (IntPtr handle, bool owns) : base (handle, owns)
+               {
+               }
+
+               public GlitzSurface (IntPtr glitz_surface)
+                       : base (NativeMethods.cairo_glitz_surface_create (glitz_surface), true)
+               {
+               }
+       }
+}
diff --git a/Crow/src/Mono.Cairo/Glyph.cs b/Crow/src/Mono.Cairo/Glyph.cs
new file mode 100644 (file)
index 0000000..ec9c2ff
--- /dev/null
@@ -0,0 +1,96 @@
+//
+// Mono.Cairo.Glyph.cs
+//
+// Authors: Duncan Mak (duncan@ximian.com)
+//          Hisham Mardam Bey (hisham.mardambey@gmail.com)
+//
+// (C) Ximian, Inc. 2003
+// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Cairo
+{
+       [StructLayout(LayoutKind.Sequential)]
+       public struct Glyph
+       {
+               internal long index;
+               internal double x;
+               internal double y;
+               
+               public Glyph (long index, double x, double y)
+               {
+                       this.index = index;
+                       this.x = x;
+                       this.y = y;
+               }
+               
+               public long Index {
+                       get { return index; }
+                       set { index = value; }
+               }
+               
+               public double X {
+                       get { return x; }
+                       set { x = value; }
+               }
+               
+               public double Y {
+                       get { return y; }
+                       set { y = value; }
+               }
+
+               public override bool Equals (object obj)
+               {
+                       if (obj is Glyph)
+                               return this == (Glyph)obj;
+                       return false;
+               }
+
+               public override int GetHashCode ()
+               {
+                       return (int) Index ^ (int) X ^ (int) Y;
+               }
+
+               internal static IntPtr GlyphsToIntPtr (Glyph[] glyphs)
+               {
+                       int size = Marshal.SizeOf (glyphs[0]);
+                       IntPtr dest = Marshal.AllocHGlobal (size * glyphs.Length);
+                       long pos = dest.ToInt64 ();
+                       for (int i = 0; i < glyphs.Length; i++, pos += size)
+                               Marshal.StructureToPtr (glyphs[i], (IntPtr) pos, false);
+                       return dest;
+               }
+
+               public static bool operator == (Glyph glyph, Glyph other)
+               {
+                       return glyph.Index == other.Index && glyph.X == other.X && glyph.Y == other.Y;
+               }
+
+               public static bool operator != (Glyph glyph, Glyph other)
+               {
+                       return !(glyph == other);
+               }
+       }
+}
diff --git a/Crow/src/Mono.Cairo/Gradient.cs b/Crow/src/Mono.Cairo/Gradient.cs
new file mode 100644 (file)
index 0000000..c7bc53c
--- /dev/null
@@ -0,0 +1,66 @@
+//
+// Mono.Cairo.Gradient.cs
+//
+// Author: Jordi Mas (jordi@ximian.com)
+//         Hisham Mardam Bey (hisham.mardambey@gmail.com)
+// (C) Ximian Inc, 2004.
+//
+// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using Color = Crow.Color;
+namespace Cairo {
+
+       public class Gradient : Pattern
+       {
+               protected Gradient (IntPtr handle, bool owned) : base (handle, owned)
+               {
+               }
+
+               [Obsolete]
+               protected Gradient ()
+               {
+               }
+
+               public int ColorStopCount {
+                       get {
+                               int cnt;
+                               NativeMethods.cairo_pattern_get_color_stop_count (Handle, out cnt);
+                               return cnt;
+                       }
+               }
+
+               public Status AddColorStop (double offset, Color c)
+               {
+                       NativeMethods.cairo_pattern_add_color_stop_rgba (Handle, offset, c.R, c.G, c.B, c.A);
+                       return Status;
+               }
+
+               public Status AddColorStopRgb (double offset, Color c)
+               {
+                       NativeMethods.cairo_pattern_add_color_stop_rgb (Handle, offset, c.R, c.G, c.B);
+                       return Status;
+               }
+       }
+}
+
diff --git a/Crow/src/Mono.Cairo/HintMetrics.cs b/Crow/src/Mono.Cairo/HintMetrics.cs
new file mode 100644 (file)
index 0000000..3bf01d2
--- /dev/null
@@ -0,0 +1,41 @@
+//
+// Mono.Cairo.HintMetrics.cs
+//
+// Authors: Duncan Mak (duncan@ximian.com)
+//          Hisham Mardam Bey (hisham.mardambey@gmail.com)
+//
+// (C) Ximian, Inc. 2003
+// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+namespace Cairo
+{
+       
+       public enum HintMetrics
+       {
+               Default,
+               Off,
+               On,
+       }
+}
diff --git a/Crow/src/Mono.Cairo/HintStyle.cs b/Crow/src/Mono.Cairo/HintStyle.cs
new file mode 100644 (file)
index 0000000..b8cca97
--- /dev/null
@@ -0,0 +1,43 @@
+//
+// Mono.Cairo.HintStyle.cs
+//
+// Authors: Duncan Mak (duncan@ximian.com)
+//          Hisham Mardam Bey (hisham.mardambey@gmail.com)
+//
+// (C) Ximian, Inc. 2003
+// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+namespace Cairo
+{
+       
+       public enum HintStyle
+       {
+               Default,
+               None,
+               Slight,
+               Medium,
+               Full,
+       }
+}
diff --git a/Crow/src/Mono.Cairo/ImageSurface.cs b/Crow/src/Mono.Cairo/ImageSurface.cs
new file mode 100644 (file)
index 0000000..98143fe
--- /dev/null
@@ -0,0 +1,104 @@
+//
+// Mono.Cairo.ImageSurface.cs
+//
+// Authors:
+//    Duncan Mak
+//    Miguel de Icaza.
+//
+// (C) Ximian Inc, 2003.
+// (C) Novell, Inc. 2003.
+//
+// This is an OO wrapper API for the Cairo API
+//
+// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Cairo {
+
+       public class ImageSurface : Surface
+       {
+               internal ImageSurface (IntPtr handle, bool owns) : base (handle, owns)
+               {
+               }
+
+               public ImageSurface (Format format, int width, int height)
+                       : base (NativeMethods.cairo_image_surface_create (format, width, height), true)
+               {
+               }
+
+               [Obsolete ("Use ImageSurface (byte[] data, Cairo.Format format, int width, int height, int stride)")]
+               public ImageSurface (ref byte[] data, Cairo.Format format, int width, int height, int stride)
+                       : this (data, format, width, height, stride)
+               {
+               }
+
+               public ImageSurface (byte[] data, Format format, int width, int height, int stride)
+                       : base (NativeMethods.cairo_image_surface_create_for_data (data, format, width, height, stride), true)
+               {
+               }
+
+               public ImageSurface (IntPtr data, Format format, int width, int height, int stride)
+                       : base (NativeMethods.cairo_image_surface_create_for_data (data, format, width, height, stride), true)
+               {
+               }
+
+               public ImageSurface (string filename)
+                       : base (NativeMethods.cairo_image_surface_create_from_png (filename), true)
+               {
+               }
+
+               public int Width {
+                       get { return NativeMethods.cairo_image_surface_get_width (Handle); }
+               }
+
+               public int Height {
+                       get { return NativeMethods.cairo_image_surface_get_height (Handle); }
+               }
+
+               public byte[] Data {
+                       get {
+                               IntPtr ptr = NativeMethods.cairo_image_surface_get_data (Handle);
+                               int length = Height * Stride;
+                               byte[] data = new byte[length];
+                               Marshal.Copy (ptr, data, 0, length);
+                               return data;
+                       }
+               }
+
+               public IntPtr DataPtr {
+                       get {
+                               return NativeMethods.cairo_image_surface_get_data (Handle);
+                       }
+               }
+
+               public Format Format {
+                       get { return NativeMethods.cairo_image_surface_get_format (Handle); }
+               }
+
+               public int Stride {
+                       get { return NativeMethods.cairo_image_surface_get_stride (Handle); }
+               }
+       }
+}
diff --git a/Crow/src/Mono.Cairo/LineCap.cs b/Crow/src/Mono.Cairo/LineCap.cs
new file mode 100644 (file)
index 0000000..46938c2
--- /dev/null
@@ -0,0 +1,41 @@
+//
+// Mono.Cairo.LineCap.cs
+//
+// Authors: Duncan Mak (duncan@ximian.com)
+//          Hisham Mardam Bey (hisham.mardambey@gmail.com)
+//
+// (C) Ximian, Inc. 2003
+// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+namespace Cairo
+{
+       
+       public enum LineCap
+       {
+               Butt,
+               Round,
+               Square,
+       }
+}
diff --git a/Crow/src/Mono.Cairo/LineJoin.cs b/Crow/src/Mono.Cairo/LineJoin.cs
new file mode 100644 (file)
index 0000000..b5c241b
--- /dev/null
@@ -0,0 +1,42 @@
+//
+// Mono.Cairo.LineJoin.cs
+//
+// Authors: Duncan Mak (duncan@ximian.com)
+//          Hisham Mardam Bey (hisham.mardambey@gmail.com)
+//
+// (C) Ximian, Inc. 2003
+// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+namespace Cairo
+{
+       
+       public enum LineJoin
+       {
+               Miter,
+               Round,
+               Bevel
+       }
+}
+
diff --git a/Crow/src/Mono.Cairo/LinearGradient.cs b/Crow/src/Mono.Cairo/LinearGradient.cs
new file mode 100644 (file)
index 0000000..85fdea8
--- /dev/null
@@ -0,0 +1,59 @@
+//
+// Mono.Cairo.LinearGradient.cs
+//
+// Author: Jordi Mas (jordi@ximian.com)
+//         Hisham Mardam Bey (hisham.mardambey@gmail.com)
+// (C) Ximian Inc, 2004.
+//
+// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+namespace Cairo {
+
+       public class LinearGradient : Gradient
+       {
+               internal LinearGradient (IntPtr handle, bool owned) : base (handle, owned)
+               {
+               }
+
+               public LinearGradient (double x0, double y0, double x1, double y1)
+                       : base (NativeMethods.cairo_pattern_create_linear (x0, y0, x1, y1), true)
+               {
+               }
+
+               public PointD[] LinearPoints {
+                       get {
+                               double x0, y0, x1, y1;
+                               PointD[] points = new PointD [2];
+
+                               NativeMethods.cairo_pattern_get_linear_points (Handle, out x0, out y0, out x1, out y1);
+
+                               points[0] = new PointD (x0, y0);
+                               points[1] = new PointD (x1, y1);
+                               return points;
+                       }
+               }
+       }
+}
+
diff --git a/Crow/src/Mono.Cairo/Matrix.cs b/Crow/src/Mono.Cairo/Matrix.cs
new file mode 100644 (file)
index 0000000..12f0cb9
--- /dev/null
@@ -0,0 +1,193 @@
+//
+// Mono.Cairo.Matrix.cs
+//
+// Author: Duncan Mak
+//         Hisham Mardam Bey (hisham.mardambey@gmail.com)
+//         Idan Gazit (idan@fastmail.fm)
+//
+// (C) Ximian Inc, 2003 - 2005.
+//
+// This is an OO wrapper API for the Cairo API
+//
+// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Cairo {
+
+       [StructLayout(LayoutKind.Sequential)]
+       public class Matrix //: ICloneable
+       {
+               public double Xx;
+               public double Yx;
+               public double Xy;
+               public double Yy;
+               public double X0;
+               public double Y0;
+
+               public Matrix (double xx, double yx, double xy, double yy,
+                               double x0, double y0)
+               {
+                       this.Xx = xx; this.Yx = yx; this.Xy = xy;
+                       this.Yy = yy; this.X0 = x0; this.Y0 = y0;
+               }
+
+               public Matrix ()
+               {
+                       this.InitIdentity ();
+               }
+
+               public bool IsIdentity ()
+               {
+                       return (this == new Matrix ());
+               }
+
+               public void InitIdentity ()
+               {
+                       // this.Init(1,0,0,1,0,0);
+                       NativeMethods.cairo_matrix_init_identity (this);
+               }
+
+               public void Init (double xx, double yx, double xy, double yy,
+                                 double x0, double y0)
+               {
+                       this.Xx = xx; this.Yx = yx; this.Xy = xy;
+                       this.Yy = yy; this.X0 = x0; this.Y0 = y0;
+               }
+
+               public void InitTranslate (double tx, double ty)
+               {
+                       //this.Init (1, 0, 0, 1, tx, ty);
+                       NativeMethods.cairo_matrix_init_translate (this, tx, ty);
+               }
+
+               public void Translate (double tx, double ty)
+               {
+                       NativeMethods.cairo_matrix_translate (this, tx, ty);
+               }
+
+               public void InitScale (double sx, double sy)
+               {
+                       //this.Init (sx, 0, 0, sy, 0, 0);
+                       NativeMethods.cairo_matrix_init_scale (this, sx, sy);
+               }
+
+               public void Scale (double sx, double sy)
+               {
+                       NativeMethods.cairo_matrix_scale (this, sx, sy);
+               }
+
+               public void InitRotate (double radians)
+               {
+                       /*
+                       double s, c;
+                       s = Math.Sin (radians);
+                       c = Math.Cos (radians);
+                       this.Init (c, s, -s, c, 0, 0);
+                       */
+                       NativeMethods.cairo_matrix_init_rotate (this, radians);
+               }
+
+               public void Rotate (double radians)
+               {
+                       NativeMethods.cairo_matrix_rotate (this, radians);
+               }
+
+               public Cairo.Status Invert ()
+               {
+                       return NativeMethods.cairo_matrix_invert (this);
+               }
+
+               public void Multiply (Matrix b)
+               {
+                       Matrix a = (Matrix) this.Clone ();
+                       NativeMethods.cairo_matrix_multiply (this, a, b);
+               }
+
+               public static Matrix Multiply (Matrix a, Matrix b) {
+                       Matrix result = new Matrix ();
+                       NativeMethods.cairo_matrix_multiply (result, a, b);
+                       return result;
+               }
+
+
+               public void TransformDistance (ref double dx, ref double dy)
+               {
+                       NativeMethods.cairo_matrix_transform_distance (this, ref dx, ref dy);
+               }
+
+               public void TransformPoint (ref double x, ref double y)
+               {
+                       NativeMethods.cairo_matrix_transform_point (this, ref x, ref y);
+               }
+
+               public override String ToString ()
+               {
+                       String s = String.Format ("xx:{0:##0.0#} yx:{1:##0.0#} xy:{2:##0.0#} yy:{3:##0.0#} x0:{4:##0.0#} y0:{5:##0.0#}",
+                               this.Xx, this.Yx, this.Xy, this.Yy, this.X0, this.Y0);
+                       return s;
+               }
+
+               public static bool operator == (Matrix lhs, Matrix rhs)
+               {
+                       return (lhs.Xx == rhs.Xx &&
+                               lhs.Xy == rhs.Xy &&
+                               lhs.Yx == rhs.Yx &&
+                               lhs.Yy == rhs.Yy &&
+                               lhs.X0 == rhs.X0 &&
+                               lhs.Y0 == rhs.Y0 );
+               }
+
+               public static bool operator != (Matrix lhs, Matrix rhs)
+               {
+                       return !(lhs==rhs);
+               }
+
+
+
+               public override bool Equals(object o)
+               {
+                       if (! (o is Matrix))
+                               return false;
+                       else
+                               return (this == (Matrix) o);
+               }
+
+               public override int GetHashCode()
+               {
+                       return  (int)this.Xx ^ (int)this.Xx>>32 ^
+                               (int)this.Xy ^ (int)this.Xy>>32 ^
+                               (int)this.Yx ^ (int)this.Yx>>32 ^
+                               (int)this.Yy ^ (int)this.Yy>>32 ^
+                               (int)this.X0 ^ (int)this.X0>>32 ^
+                               (int)this.Y0 ^ (int)this.Y0>>32;
+               }
+
+               public object Clone()
+               {
+                       return this.MemberwiseClone ();
+               }
+
+       }
+}
diff --git a/Crow/src/Mono.Cairo/MeshPattern.cs b/Crow/src/Mono.Cairo/MeshPattern.cs
new file mode 100644 (file)
index 0000000..b14c709
--- /dev/null
@@ -0,0 +1,98 @@
+//
+// Mono.Cairo.Pattern.cs
+//
+// Author: Jordi Mas (jordi@ximian.com)
+//         Hisham Mardam Bey (hisham.mardambey@gmail.com)
+// (C) Ximian Inc, 2004.
+//
+// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+namespace Cairo {
+
+       public class MeshPattern : Pattern
+       {
+               internal MeshPattern (IntPtr handle, bool owned) : base (handle, owned)
+               {
+               }
+
+               public MeshPattern ()
+                       : base (NativeMethods.cairo_pattern_create_mesh(), true)
+               {
+               }
+
+               //no idea why this is here, the base one is identical, but we can't remove it now
+               public new Extend Extend {
+                       set { NativeMethods.cairo_pattern_set_extend (Handle, value); }
+                       get { return NativeMethods.cairo_pattern_get_extend (Handle); }
+               }
+
+               public Filter Filter {
+                       set { NativeMethods.cairo_pattern_set_filter (Handle, value); }
+                       get { return NativeMethods.cairo_pattern_get_filter (Handle); }
+               }
+
+               public void BeginPatch(){
+                       NativeMethods.cairo_mesh_pattern_begin_patch (Handle);
+               }
+               public void EndPatch(){
+                       NativeMethods.cairo_mesh_pattern_end_patch (Handle);
+               }
+               public void MoveTo(double x, double y){
+                       NativeMethods.cairo_mesh_pattern_move_to (Handle, x, y);
+               }
+               public void LineTo(double x, double y){
+                       NativeMethods.cairo_mesh_pattern_line_to (Handle, x, y);
+               }
+               public void CurveTo(double x1, double y1, double x2, double y2, double x3, double y3)
+               {
+                       NativeMethods.cairo_mesh_pattern_curve_to (Handle, x1, y1, x2, y2, x3, y3);
+               }
+               public void SetControlPoint(uint point_num, double x, double y){
+                       NativeMethods.cairo_mesh_pattern_set_control_point (Handle, point_num, x, y);
+               }
+               public void SetCornerColorRGB(uint corner_num, double r, double g, double b){
+                       NativeMethods.cairo_mesh_pattern_set_corner_color_rgb (Handle, corner_num, r, g, b);
+               }
+               public void SetCornerColorRGBA(uint corner_num, double r, double g, double b, double a){
+                       NativeMethods.cairo_mesh_pattern_set_corner_color_rgba (Handle, corner_num, r, g, b, a);
+               }
+               public uint PatchCount {
+                       get {
+                               uint count = 0;
+                               NativeMethods.cairo_mesh_pattern_get_patch_count(Handle, out count);
+                               return count;
+                       }       
+               }
+               public Path GetPath(uint patch_num){
+                       return new Path(NativeMethods.cairo_mesh_pattern_get_path(Handle, patch_num));
+               }
+               public void GetControlPoint(){
+               }
+               public void GetCornerColorRGBA(){
+                       
+               }
+       }
+}
+
diff --git a/Crow/src/Mono.Cairo/NativeMethods-internal.cs b/Crow/src/Mono.Cairo/NativeMethods-internal.cs
new file mode 100644 (file)
index 0000000..6e6d507
--- /dev/null
@@ -0,0 +1,1026 @@
+//
+// Cairo.cs - a simplistic binding of the Cairo API to C#.
+//
+// Authors: Duncan Mak (duncan@ximian.com)
+//          Hisham Mardam Bey (hisham.mardambey@gmail.com)
+//          John Luke (john.luke@gmail.com)
+//          Alp Toker (alp@atoker.com)
+//
+// (C) Ximian, Inc. 2003
+// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
+// Copyright (C) 2005 John Luke
+// Copyright (C) 2006 Alp Toker
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Runtime.InteropServices;
+using System.Runtime.CompilerServices;
+
+namespace Cairo
+{
+       // sort the functions like in the following page so it is easier to find what is missing
+       // http://cairographics.org/manual/index-all.html
+
+       public static class NativeMethods
+       {
+               #if MONOTOUCH
+               const string cairo = "__Internal";
+               #else
+               const string cairo = "libcairo-2.dll";
+               #endif
+
+               //[MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               //public static extern void cairo_append_path (IntPtr cr, Path path);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_arc (IntPtr cr, double xc, double yc, double radius, double angle1, double angle2);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_arc_negative (IntPtr cr, double xc, double yc, double radius, double angle1, double angle2);
+
+               //              [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               //              public static extern IntPtr cairo_atsui_font_face_create_for_atsu_font_id (IntPtr font_id);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_clip (IntPtr cr);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_clip_preserve (IntPtr cr);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_clip_extents (IntPtr cr, out double x1, out double y1, out double x2, out double y2);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_close_path (IntPtr cr);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_copy_page (IntPtr cr);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_copy_path (IntPtr cr);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_copy_path_flat (IntPtr cr);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_append_path (IntPtr cr, IntPtr path);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_create (IntPtr target);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_curve_to (IntPtr cr, double x1, double y1, double x2, double y2, double x3, double y3);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_debug_reset_static_data ();
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_destroy (IntPtr cr);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_device_to_user (IntPtr cr, ref double x, ref double y);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_device_to_user_distance (IntPtr cr, ref double dx, ref double dy);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_fill (IntPtr cr);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_fill_extents (IntPtr cr, out double x1, out double y1, out double x2, out double y2);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_fill_preserve (IntPtr cr);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_font_extents (IntPtr cr, out FontExtents extents);
+
+               #region FontFace
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_font_face_destroy (IntPtr font_face);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern FontType cairo_font_face_get_type (IntPtr font_face);
+
+               //[MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               //public static extern void cairo_font_face_get_user_data (IntPtr font_face);
+
+               //[MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               //public static extern void cairo_font_face_set_user_data (IntPtr font_face);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_font_face_reference (IntPtr font_face);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern Status cairo_font_face_status (IntPtr font_face);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern uint cairo_font_face_get_reference_count (IntPtr surface);
+               #endregion
+
+               #region FontOptions
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_font_options_copy (IntPtr original);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_font_options_create ();
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_font_options_destroy (IntPtr options);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern bool cairo_font_options_equal (IntPtr options, IntPtr other);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern Antialias cairo_font_options_get_antialias (IntPtr options);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern HintMetrics cairo_font_options_get_hint_metrics (IntPtr options);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern HintStyle cairo_font_options_get_hint_style (IntPtr options);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern SubpixelOrder cairo_font_options_get_subpixel_order (IntPtr options);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern long cairo_font_options_hash (IntPtr options);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_font_options_merge (IntPtr options, IntPtr other);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_font_options_set_antialias (IntPtr options, Antialias aa);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_font_options_set_hint_metrics (IntPtr options, HintMetrics metrics);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_font_options_set_hint_style (IntPtr options, HintStyle style);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_font_options_set_subpixel_order (IntPtr options, SubpixelOrder order);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern Status cairo_font_options_status (IntPtr options);
+               #endregion
+
+               #region Freetype / FontConfig
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_ft_font_face_create_for_ft_face (IntPtr face, int load_flags);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_ft_font_face_create_for_pattern (IntPtr fc_pattern);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_ft_font_options_substitute (FontOptions options, IntPtr pattern);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_ft_scaled_font_lock_face (IntPtr scaled_font);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_ft_scaled_font_unlock_face (IntPtr scaled_font);
+               #endregion
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern Antialias cairo_get_antialias (IntPtr cr);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_get_current_point (IntPtr cr, out double x, out double y);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern FillRule cairo_get_fill_rule (IntPtr cr);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_get_font_face (IntPtr cr);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_get_font_matrix (IntPtr cr, out Matrix matrix);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_get_font_options (IntPtr cr, IntPtr options);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_get_group_target (IntPtr cr);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern LineCap cairo_get_line_cap (IntPtr cr);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern LineJoin cairo_get_line_join (IntPtr cr);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern double cairo_get_line_width (IntPtr cr);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_get_matrix (IntPtr cr, Matrix matrix);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern double cairo_get_miter_limit (IntPtr cr);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern Operator cairo_get_operator (IntPtr cr);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern uint cairo_get_reference_count (IntPtr surface);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_get_source (IntPtr cr);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_get_target (IntPtr cr);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern double cairo_get_tolerance (IntPtr cr);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_glitz_surface_create (IntPtr surface);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_glyph_extents (IntPtr cr, IntPtr glyphs, int num_glyphs, out TextExtents extents);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_glyph_path (IntPtr cr, IntPtr glyphs, int num_glyphs);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               [return: MarshalAs (UnmanagedType.U1)]
+               public static extern bool cairo_has_current_point (IntPtr cr);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_identity_matrix (IntPtr cr);
+
+               #region Image Surface
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_image_surface_create (Cairo.Format format, int width, int height);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               public static extern IntPtr cairo_image_surface_create_for_data (byte[] data, Cairo.Format format, int width, int height, int stride);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_image_surface_create_for_data (IntPtr data, Cairo.Format format, int width, int height, int stride);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_image_surface_create_from_png  (string filename);
+
+               //[MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               //public static extern IntPtr cairo_image_surface_create_from_png_stream  (string filename);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_image_surface_get_data (IntPtr surface);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern Format cairo_image_surface_get_format (IntPtr surface);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern int cairo_image_surface_get_height (IntPtr surface);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern int cairo_image_surface_get_stride (IntPtr surface);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern int cairo_image_surface_get_width  (IntPtr surface);
+               #endregion
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               [return: MarshalAs (UnmanagedType.U1)]
+               public static extern bool cairo_in_clip (IntPtr cr, double x, double y);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               [return: MarshalAs (UnmanagedType.U1)]
+               public static extern bool cairo_in_fill (IntPtr cr, double x, double y);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               [return: MarshalAs (UnmanagedType.U1)]
+               public static extern bool cairo_in_stroke (IntPtr cr, double x, double y);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_line_to (IntPtr cr, double x, double y);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_mask (IntPtr cr, IntPtr pattern);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_mask_surface (IntPtr cr, IntPtr surface, double x, double y);
+
+               #region Matrix
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_matrix_init (Matrix matrix, double xx, double yx, double xy, double yy, double x0, double y0);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_matrix_init_identity (Matrix matrix);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_matrix_init_rotate (Matrix matrix, double radians);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_matrix_init_scale (Matrix matrix, double sx, double sy);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_matrix_init_translate (Matrix matrix, double tx, double ty);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern Status cairo_matrix_invert (Matrix matrix);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_matrix_multiply (Matrix result, Matrix a, Matrix b);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_matrix_scale (Matrix matrix, double sx, double sy);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_matrix_rotate (Matrix matrix, double radians);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_matrix_transform_distance (Matrix matrix, ref double dx, ref double dy);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_matrix_transform_point (Matrix matrix, ref double x, ref double y);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_matrix_translate (Matrix matrix, double tx, double ty);
+               #endregion
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_move_to (IntPtr cr, double x, double y);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_new_path (IntPtr cr);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_new_sub_path (IntPtr cr);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_paint (IntPtr cr);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_paint_with_alpha (IntPtr cr, double alpha);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_path_destroy (IntPtr path);
+
+               #region Pattern
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_pattern_add_color_stop_rgb (IntPtr pattern, double offset, double red, double green, double blue);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_pattern_add_color_stop_rgba (IntPtr pattern, double offset, double red, double green, double blue, double alpha);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern Status cairo_pattern_get_color_stop_count (IntPtr pattern, out int count);
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern Status cairo_pattern_get_color_stop_rgba (IntPtr pattern, int index, out double offset, out double red, out double green, out double blue, out double alpha);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_pattern_create_for_surface (IntPtr surface);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern Status cairo_pattern_get_surface (IntPtr pattern, out IntPtr surface);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_pattern_create_linear (double x0, double y0, double x1, double y1);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern Status cairo_pattern_get_linear_points (IntPtr pattern, out double x0, out double y0, out double x1, out double y1);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_pattern_create_radial (double cx0, double cy0, double radius0, double cx1, double cy1, double radius1);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern Status cairo_pattern_get_radial_circles (IntPtr pattern, out double x0, out double y0, out double r0, out double x1, out double y1, out double r1);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_pattern_create_rgb (double r, double g, double b);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_pattern_create_rgba (double r, double g, double b, double a);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern Status cairo_pattern_get_rgba (IntPtr pattern, out double red, out double green, out double blue, out double alpha);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_pattern_destroy (IntPtr pattern);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern Extend cairo_pattern_get_extend (IntPtr pattern);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern Filter cairo_pattern_get_filter (IntPtr pattern);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_pattern_get_matrix (IntPtr pattern, Matrix matrix);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern PatternType cairo_pattern_get_type (IntPtr pattern);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_pattern_reference (IntPtr pattern);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_pattern_set_extend (IntPtr pattern, Extend extend);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_pattern_set_filter (IntPtr pattern, Filter filter);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_pattern_set_matrix (IntPtr pattern, Matrix matrix);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern Status cairo_pattern_status (IntPtr pattern);
+               #endregion
+
+               #region PdfSurface
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_pdf_surface_create (string filename, double width, double height);
+
+               //[MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               //public static extern IntPtr cairo_pdf_surface_create_for_stream (string filename, double width, double height);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_pdf_surface_set_size (IntPtr surface, double x, double y);
+               #endregion
+
+               #region PostscriptSurface
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_ps_surface_create (string filename, double width, double height);
+
+               //[MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               //public static extern IntPtr cairo_ps_surface_create_for_stream (string filename, double width, double height);
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_ps_surface_dsc_begin_page_setup (IntPtr surface);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_ps_surface_dsc_begin_setup (IntPtr surface);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_ps_surface_dsc_comment (IntPtr surface, string comment);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_ps_surface_set_size (IntPtr surface, double x, double y);
+               #endregion
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_pop_group (IntPtr cr);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_pop_group_to_source (IntPtr cr);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_push_group (IntPtr cr);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_push_group_with_content (IntPtr cr, Content content);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_quartz_surface_create (IntPtr context, bool flipped, int width, int height);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_rectangle (IntPtr cr, double x, double y, double width, double height);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_reference (IntPtr cr);
+
+               #region Regions
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern bool cairo_region_contains_point (IntPtr region, int x, int y);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern RegionOverlap cairo_region_contains_rectangle (IntPtr region, ref Crow.Rectangle rectangle);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_region_copy (IntPtr original);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_region_create ();
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_region_create_rectangle (ref Crow.Rectangle rect);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_region_create_rectangles (IntPtr rects, int count);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_region_destroy (IntPtr region);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern bool cairo_region_equal (IntPtr a, IntPtr b);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_region_get_extents (IntPtr region, out Crow.Rectangle extents);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_region_get_rectangle (IntPtr region, int nth, out Crow.Rectangle rectangle);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern Status cairo_region_intersect (IntPtr dst, IntPtr other);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern Status cairo_region_intersect_rectangle (IntPtr dst, ref Crow.Rectangle rectangle);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern bool cairo_region_is_empty (IntPtr region);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern int cairo_region_num_rectangles (IntPtr region);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_region_reference (IntPtr region);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern Status cairo_region_status (IntPtr region);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern Status cairo_region_subtract (IntPtr dst, IntPtr other);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern Status cairo_region_subtract_rectangle (IntPtr dst, ref Crow.Rectangle rectangle);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_region_translate (IntPtr region, int dx, int dy);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern Status cairo_region_union (IntPtr dst, IntPtr other);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern Status cairo_region_union_rectangle (IntPtr dst, ref Crow.Rectangle rectangle);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern Status cairo_region_xor (IntPtr dst, IntPtr other);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern Status cairo_region_xor_rectangle (IntPtr dst, ref Crow.Rectangle rectangle);
+               #endregion
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_rel_curve_to (IntPtr cr, double dx1, double dy1, double dx2, double dy2, double dx3, double dy3);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_rel_line_to (IntPtr cr, double dx, double dy);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_rel_move_to (IntPtr cr, double dx, double dy);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_reset_clip (IntPtr cr);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_restore (IntPtr cr);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_rotate (IntPtr cr, double angle);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_save (IntPtr cr);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_scale (IntPtr cr, double sx, double sy);
+
+               #region ScaledFont
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_scaled_font_create (IntPtr fontFace, Matrix matrix, Matrix ctm, IntPtr options);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_scaled_font_destroy (IntPtr scaled_font);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_scaled_font_extents (IntPtr scaled_font, out FontExtents extents);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_scaled_font_get_ctm (IntPtr scaled_font, out Matrix matrix);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_scaled_font_get_font_face (IntPtr scaled_font);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_scaled_font_get_font_matrix (IntPtr scaled_font, out Matrix matrix);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_scaled_font_get_font_options (IntPtr scaled_font);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern FontType cairo_scaled_font_get_type (IntPtr scaled_font);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_scaled_font_glyph_extents (IntPtr scaled_font, IntPtr glyphs, int num_glyphs, out TextExtents extents);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_scaled_font_reference (IntPtr scaled_font);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern Status cairo_scaled_font_status (IntPtr scaled_font);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_set_scaled_font (IntPtr cr, IntPtr scaled_font);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_get_scaled_font (IntPtr cr);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               public static extern void cairo_scaled_font_text_extents (IntPtr scaled_font, byte[] utf8, out TextExtents extents);
+               #endregion
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_select_font_face (IntPtr cr, string family, FontSlant slant, FontWeight weight);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_set_antialias (IntPtr cr, Antialias antialias);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               public static extern void cairo_set_dash (IntPtr cr, double [] dashes, int ndash, double offset);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_get_dash (IntPtr cr, IntPtr dashes, out double offset);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern int cairo_get_dash_count (IntPtr cr);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_set_fill_rule (IntPtr cr, Cairo.FillRule fill_rule);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_set_font_face (IntPtr cr, IntPtr fontFace);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               public static extern void cairo_set_font_matrix (IntPtr cr, Matrix matrix);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_set_font_options (IntPtr cr, IntPtr options);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_set_font_size (IntPtr cr, double size);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_set_line_cap (IntPtr cr, LineCap line_cap);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_set_line_join (IntPtr cr, LineJoin line_join);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_set_line_width (IntPtr cr, double width);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_set_matrix (IntPtr cr, Matrix matrix);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_set_miter_limit (IntPtr cr, double limit);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_set_operator (IntPtr cr, Cairo.Operator op);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_set_source (IntPtr cr, IntPtr pattern);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_set_source_rgb (IntPtr cr, double red, double green, double blue);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_set_source_rgba (IntPtr cr, double red, double green, double blue, double alpha);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_set_source_surface (IntPtr cr, IntPtr surface, double x, double y);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_set_tolerance (IntPtr cr, double tolerance);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_show_glyphs (IntPtr ct, IntPtr glyphs, int num_glyphs);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_show_page (IntPtr cr);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_show_text (IntPtr cr, string str);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern Status cairo_status (IntPtr cr);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_status_to_string (Status status);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_stroke (IntPtr cr);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_stroke_extents (IntPtr cr, out double x1, out double y1, out double x2, out double y2);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_stroke_preserve (IntPtr cr);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_rectangle_list_destroy (IntPtr rectangle_list);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_copy_clip_rectangle_list (IntPtr cr);
+
+               #region Surface
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_surface_create_similar (IntPtr surface, Cairo.Content content, int width, int height);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_surface_destroy (IntPtr surface);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_surface_finish (IntPtr surface);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_surface_flush (IntPtr surface);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern Content cairo_surface_get_content (IntPtr surface);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_surface_get_device_offset (IntPtr surface, out double x, out double y);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_surface_get_font_options (IntPtr surface, IntPtr FontOptions);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern uint cairo_surface_get_reference_count (IntPtr surface);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern SurfaceType cairo_surface_get_type (IntPtr surface);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_surface_mark_dirty (IntPtr surface);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_surface_mark_dirty_rectangle (IntPtr surface, int x, int y, int width, int height);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_surface_reference (IntPtr surface);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_surface_set_device_offset (IntPtr surface, double x, double y);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_surface_set_fallback_resolution (IntPtr surface, double x, double y);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern Status cairo_surface_status (IntPtr surface);
+               #endregion
+
+               #region SVG surface
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_surface_write_to_png (IntPtr surface, string filename);
+
+               //[MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               //public static extern void cairo_surface_write_to_png_stream (IntPtr surface, WriteFunc writeFunc);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_svg_surface_create (string fileName, double width, double height);
+
+               //[MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               //public static extern IntPtr cairo_svg_surface_create_for_stream (double width, double height);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_svg_surface_restrict_to_version (IntPtr surface, SvgVersion version);
+               #endregion
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_text_extents (IntPtr cr, string txt, out TextExtents extents);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               public static extern void cairo_text_path (IntPtr ct, byte[] utf8);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_transform (IntPtr cr, Matrix matrix);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_translate (IntPtr cr, double tx, double ty);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_user_to_device (IntPtr cr, ref double x, ref double y);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_user_to_device_distance (IntPtr cr, ref double dx, ref double dy);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern int cairo_version ();
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_version_string ();
+
+               #region DirectFBSurface
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_directfb_surface_create (IntPtr dfb, IntPtr surface);
+               #endregion
+
+               #region win32 fonts
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_win32_font_face_create_for_logfontw (IntPtr logfontw);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_win32_scaled_font_done_font (IntPtr scaled_font);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern double cairo_win32_scaled_font_get_metrics_factor (IntPtr scaled_font);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern Status cairo_win32_scaled_font_select_font (IntPtr scaled_font, IntPtr hdc);
+               #endregion
+
+               #region win32 surface
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_win32_surface_create (IntPtr hdc);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_win32_surface_create_with_ddb (IntPtr hdc, Format format, int width, int height);
+               #endregion
+
+               #region XcbSurface
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_xcb_surface_create (IntPtr connection, uint drawable, IntPtr visual, int width, int height);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_xcb_surface_create_for_bitmap (IntPtr connection, uint bitmap, IntPtr screen, int width, int height);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_xcb_surface_set_size (IntPtr surface, int width, int height);
+               #endregion
+
+               #region XlibSurface
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_xlib_surface_create (IntPtr display, IntPtr drawable, IntPtr visual, int width, int height);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_xlib_surface_create_for_bitmap (IntPtr display, IntPtr bitmap, IntPtr screen, int width, int height);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern int cairo_xlib_surface_get_depth (IntPtr surface);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_xlib_surface_get_display (IntPtr surface);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_xlib_surface_get_drawable (IntPtr surface);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern int cairo_xlib_surface_get_height (IntPtr surface);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_xlib_surface_get_screen (IntPtr surface);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_xlib_surface_get_visual (IntPtr surface);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern int cairo_xlib_surface_get_width (IntPtr surface);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_xlib_surface_set_drawable (IntPtr surface, IntPtr drawable, int width, int height);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_xlib_surface_set_size (IntPtr surface, int width, int height);
+               #endregion
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_gl_device_set_thread_aware(IntPtr device, int value);
+
+               #region GLSurface
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_gl_surface_create (IntPtr device, uint content, int width, int height);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_gl_surface_create_for_texture (IntPtr device, uint content, uint tex, int width, int height);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_gl_surface_set_size (IntPtr surface, int width, int height);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern int cairo_gl_surface_get_width (IntPtr surface);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern int cairo_gl_surface_get_height (IntPtr surface);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_gl_surface_swapbuffers (IntPtr surf);
+               #endregion
+
+               #region GLX Functions
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_glx_device_create (IntPtr dpy, IntPtr gl_ctx);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_glx_device_get_display (IntPtr device);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_glx_device_get_context (IntPtr device);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_gl_surface_create_for_window (IntPtr device, IntPtr window, int width, int height);
+               #endregion
+
+               #region WGL Fucntions
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_wgl_device_create (IntPtr hglrc);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_wgl_device_get_context (IntPtr device);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_gl_surface_create_for_dc (IntPtr device, IntPtr hdc, int width, int height);
+               #endregion
+
+               #region EGL Functions
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_egl_device_create (IntPtr dpy, IntPtr gl_ctx);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_gl_surface_create_for_egl (IntPtr device, IntPtr eglSurface, int width, int height);
+               #endregion
+
+               #region DRM Functions
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_drm_device_get (IntPtr udev_device);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_drm_device_get_for_fd (int fd);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_drm_device_default ();
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern int cairo_drm_device_get_fd (IntPtr cairo_device);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern  void cairo_drm_device_throttle (IntPtr cairo_device);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_drm_surface_create (IntPtr cairo_device, Format format,       int width, int height);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_drm_surface_create_for_name (IntPtr cairo_device, uint name, Format format,   int width, int height, int stride);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_drm_surface_create_from_cacheable_image (IntPtr cairo_device, IntPtr imageSurface);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern Status cairo_drm_surface_enable_scan_out (IntPtr drmSurface);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_drm_surface_get_handle (IntPtr drmSurface);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_drm_surface_get_name (IntPtr drmSurface);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern Format cairo_drm_surface_get_format (IntPtr drmSurface);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern int cairo_drm_surface_get_width (IntPtr drmSurface);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern int cairo_drm_surface_get_height (IntPtr drmSurface);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern int cairo_drm_surface_get_stride (IntPtr drmSurface);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_drm_surface_map_to_image (IntPtr drmSurface);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void       cairo_drm_surface_unmap (IntPtr drmSurface,     IntPtr imageSurface);
+               #endregion
+
+               #region Device
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern Status cairo_device_acquire(IntPtr device);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_device_destroy (IntPtr device);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_device_reference (IntPtr device);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_device_release(IntPtr device);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern Status cairo_device_status(IntPtr device);
+               #endregion
+
+
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void crow_cairo_region_clear(IntPtr ctx, IntPtr reg);
+
+       }
+}
\ No newline at end of file
diff --git a/Crow/src/Mono.Cairo/NativeMethods.cs b/Crow/src/Mono.Cairo/NativeMethods.cs
new file mode 100644 (file)
index 0000000..1bcdaa6
--- /dev/null
@@ -0,0 +1,1065 @@
+//
+// Cairo.cs - a simplistic binding of the Cairo API to C#.
+//
+// Authors: Duncan Mak (duncan@ximian.com)
+//          Hisham Mardam Bey (hisham.mardambey@gmail.com)
+//          John Luke (john.luke@gmail.com)
+//          Alp Toker (alp@atoker.com)
+//
+// (C) Ximian, Inc. 2003
+// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
+// Copyright (C) 2005 John Luke
+// Copyright (C) 2006 Alp Toker
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Cairo
+{
+       // sort the functions like in the following page so it is easier to find what is missing
+       // http://cairographics.org/manual/index-all.html
+
+       internal static class NativeMethods
+       {
+#if MONOTOUCH
+               const string cairo = "__Internal";
+#else
+    const string cairo = "cairo";
+#endif
+
+        //[DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+        //internal static extern void cairo_append_path (IntPtr cr, Path path);
+
+        [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_arc (IntPtr cr, double xc, double yc, double radius, double angle1, double angle2);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_arc_negative (IntPtr cr, double xc, double yc, double radius, double angle1, double angle2);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_atsui_font_face_create_for_atsu_font_id (IntPtr font_id);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_clip (IntPtr cr);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_clip_preserve (IntPtr cr);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_clip_extents (IntPtr cr, out double x1, out double y1, out double x2, out double y2);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_close_path (IntPtr cr);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_copy_page (IntPtr cr);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_copy_path (IntPtr cr);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_copy_path_flat (IntPtr cr);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_append_path (IntPtr cr, IntPtr path);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_create (IntPtr target);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_curve_to (IntPtr cr, double x1, double y1, double x2, double y2, double x3, double y3);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_debug_reset_static_data ();
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_destroy (IntPtr cr);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_device_to_user (IntPtr cr, ref double x, ref double y);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_device_to_user_distance (IntPtr cr, ref double dx, ref double dy);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_fill (IntPtr cr);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_fill_extents (IntPtr cr, out double x1, out double y1, out double x2, out double y2);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_fill_preserve (IntPtr cr);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_font_extents (IntPtr cr, out FontExtents extents);
+
+               #region FontFace
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_font_face_destroy (IntPtr font_face);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern FontType cairo_font_face_get_type (IntPtr font_face);
+
+               //[DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               //internal static extern void cairo_font_face_get_user_data (IntPtr font_face);
+
+               //[DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               //internal static extern void cairo_font_face_set_user_data (IntPtr font_face);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_font_face_reference (IntPtr font_face);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern Status cairo_font_face_status (IntPtr font_face);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern uint cairo_font_face_get_reference_count (IntPtr surface);
+               #endregion
+
+               #region FontOptions
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_font_options_copy (IntPtr original);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_font_options_create ();
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_font_options_destroy (IntPtr options);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               [return: MarshalAs (UnmanagedType.U1)]
+               internal static extern bool cairo_font_options_equal (IntPtr options, IntPtr other);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern Antialias cairo_font_options_get_antialias (IntPtr options);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern HintMetrics cairo_font_options_get_hint_metrics (IntPtr options);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern HintStyle cairo_font_options_get_hint_style (IntPtr options);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern SubpixelOrder cairo_font_options_get_subpixel_order (IntPtr options);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern long cairo_font_options_hash (IntPtr options);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_font_options_merge (IntPtr options, IntPtr other);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_font_options_set_antialias (IntPtr options, Antialias aa);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_font_options_set_hint_metrics (IntPtr options, HintMetrics metrics);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_font_options_set_hint_style (IntPtr options, HintStyle style);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_font_options_set_subpixel_order (IntPtr options, SubpixelOrder order);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern Status cairo_font_options_status (IntPtr options);
+               #endregion
+
+               #region Freetype / FontConfig
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_ft_font_face_create_for_ft_face (IntPtr face, int load_flags);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_ft_font_face_create_for_pattern (IntPtr fc_pattern);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_ft_font_options_substitute (FontOptions options, IntPtr pattern);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_ft_scaled_font_lock_face (IntPtr scaled_font);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_ft_scaled_font_unlock_face (IntPtr scaled_font);
+               #endregion
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern Antialias cairo_get_antialias (IntPtr cr);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_get_current_point (IntPtr cr, out double x, out double y);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern FillRule cairo_get_fill_rule (IntPtr cr);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_get_font_face (IntPtr cr);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_get_font_matrix (IntPtr cr, out Matrix matrix);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_get_font_options (IntPtr cr, IntPtr options);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_get_group_target (IntPtr cr);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern LineCap cairo_get_line_cap (IntPtr cr);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern LineJoin cairo_get_line_join (IntPtr cr);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern double cairo_get_line_width (IntPtr cr);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_get_matrix (IntPtr cr, Matrix matrix);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern double cairo_get_miter_limit (IntPtr cr);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern Operator cairo_get_operator (IntPtr cr);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern uint cairo_get_reference_count (IntPtr surface);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_get_source (IntPtr cr);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_get_target (IntPtr cr);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern double cairo_get_tolerance (IntPtr cr);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_glitz_surface_create (IntPtr surface);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_glyph_extents (IntPtr cr, IntPtr glyphs, int num_glyphs, out TextExtents extents);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_glyph_path (IntPtr cr, IntPtr glyphs, int num_glyphs);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               [return: MarshalAs (UnmanagedType.U1)]
+               internal static extern bool cairo_has_current_point (IntPtr cr);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_identity_matrix (IntPtr cr);
+
+               #region Image Surface
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_image_surface_create (Cairo.Format format, int width, int height);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_image_surface_create_for_data (byte[] data, Cairo.Format format, int width, int height, int stride);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_image_surface_create_for_data (IntPtr data, Cairo.Format format, int width, int height, int stride);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_image_surface_create_from_png  (string filename);
+
+               //[DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               //internal static extern IntPtr cairo_image_surface_create_from_png_stream  (string filename);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_image_surface_get_data (IntPtr surface);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern Format cairo_image_surface_get_format (IntPtr surface);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern int cairo_image_surface_get_height (IntPtr surface);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern int cairo_image_surface_get_stride (IntPtr surface);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern int cairo_image_surface_get_width  (IntPtr surface);
+               #endregion
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               [return: MarshalAs (UnmanagedType.U1)]
+               internal static extern bool cairo_in_clip (IntPtr cr, double x, double y);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               [return: MarshalAs (UnmanagedType.U1)]
+               internal static extern bool cairo_in_fill (IntPtr cr, double x, double y);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               [return: MarshalAs (UnmanagedType.U1)]
+               internal static extern bool cairo_in_stroke (IntPtr cr, double x, double y);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_line_to (IntPtr cr, double x, double y);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_mask (IntPtr cr, IntPtr pattern);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_mask_surface (IntPtr cr, IntPtr surface, double x, double y);
+
+               #region Matrix
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_matrix_init (Matrix matrix, double xx, double yx, double xy, double yy, double x0, double y0);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_matrix_init_identity (Matrix matrix);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_matrix_init_rotate (Matrix matrix, double radians);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_matrix_init_scale (Matrix matrix, double sx, double sy);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_matrix_init_translate (Matrix matrix, double tx, double ty);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern Status cairo_matrix_invert (Matrix matrix);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_matrix_multiply (Matrix result, Matrix a, Matrix b);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_matrix_scale (Matrix matrix, double sx, double sy);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_matrix_rotate (Matrix matrix, double radians);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_matrix_transform_distance (Matrix matrix, ref double dx, ref double dy);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_matrix_transform_point (Matrix matrix, ref double x, ref double y);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_matrix_translate (Matrix matrix, double tx, double ty);
+               #endregion
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_move_to (IntPtr cr, double x, double y);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_new_path (IntPtr cr);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_new_sub_path (IntPtr cr);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_paint (IntPtr cr);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_paint_with_alpha (IntPtr cr, double alpha);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_path_destroy (IntPtr path);
+
+               #region Pattern
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_pattern_add_color_stop_rgb (IntPtr pattern, double offset, double red, double green, double blue);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_pattern_add_color_stop_rgba (IntPtr pattern, double offset, double red, double green, double blue, double alpha);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern Status cairo_pattern_get_color_stop_count (IntPtr pattern, out int count);
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern Status cairo_pattern_get_color_stop_rgba (IntPtr pattern, int index, out double offset, out double red, out double green, out double blue, out double alpha);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_pattern_create_for_surface (IntPtr surface);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern Status cairo_pattern_get_surface (IntPtr pattern, out IntPtr surface);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_pattern_create_linear (double x0, double y0, double x1, double y1);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern Status cairo_pattern_get_linear_points (IntPtr pattern, out double x0, out double y0, out double x1, out double y1);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_pattern_create_radial (double cx0, double cy0, double radius0, double cx1, double cy1, double radius1);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern Status cairo_pattern_get_radial_circles (IntPtr pattern, out double x0, out double y0, out double r0, out double x1, out double y1, out double r1);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_pattern_create_rgb (double r, double g, double b);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_pattern_create_rgba (double r, double g, double b, double a);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern Status cairo_pattern_get_rgba (IntPtr pattern, out double red, out double green, out double blue, out double alpha);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_pattern_destroy (IntPtr pattern);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern Extend cairo_pattern_get_extend (IntPtr pattern);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern Filter cairo_pattern_get_filter (IntPtr pattern);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_pattern_get_matrix (IntPtr pattern, Matrix matrix);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern PatternType cairo_pattern_get_type (IntPtr pattern);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_pattern_reference (IntPtr pattern);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_pattern_set_extend (IntPtr pattern, Extend extend);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_pattern_set_filter (IntPtr pattern, Filter filter);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_pattern_set_matrix (IntPtr pattern, Matrix matrix);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern Status cairo_pattern_status (IntPtr pattern);
+
+               //mesh pattern
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_pattern_create_mesh ();
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_mesh_pattern_begin_patch (IntPtr pattern);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_mesh_pattern_end_patch (IntPtr pattern);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_mesh_pattern_move_to (IntPtr pattern, double x, double y);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_mesh_pattern_line_to (IntPtr pattern, double x, double y);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_mesh_pattern_curve_to (IntPtr pattern, double x1, double y1,
+                       double x2, double y2, double x3, double y3);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_mesh_pattern_set_control_point (IntPtr pattern, uint point_num, double x, double y);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_mesh_pattern_set_corner_color_rgb (IntPtr pattern, uint corner_num,
+                       double r, double g, double b);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_mesh_pattern_set_corner_color_rgba (IntPtr pattern, uint corner_num,
+                       double r, double g, double b, double a);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern Status cairo_mesh_pattern_get_patch_count (IntPtr pattern, out uint count);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_mesh_pattern_get_path (IntPtr pattern, uint patch_num);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern Status cairo_mesh_pattern_get_control_point (IntPtr pattern,
+                       uint patch_num, uint point_num, out double x, out double y);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern Status cairo_mesh_pattern_get_corner_color_rgba (IntPtr pattern,
+                       uint patch_num, uint point_num, out double r, out double g, out double b, out double a);
+               #endregion
+
+               #region PdfSurface
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_pdf_surface_create (string filename, double width, double height);
+
+               //[DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               //internal static extern IntPtr cairo_pdf_surface_create_for_stream (string filename, double width, double height);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_pdf_surface_set_size (IntPtr surface, double x, double y);
+               #endregion
+
+               #region PostscriptSurface
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_ps_surface_create (string filename, double width, double height);
+
+               //[DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               //internal static extern IntPtr cairo_ps_surface_create_for_stream (string filename, double width, double height);
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_ps_surface_dsc_begin_page_setup (IntPtr surface);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_ps_surface_dsc_begin_setup (IntPtr surface);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_ps_surface_dsc_comment (IntPtr surface, string comment);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_ps_surface_set_size (IntPtr surface, double x, double y);
+               #endregion
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_pop_group (IntPtr cr);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_pop_group_to_source (IntPtr cr);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_push_group (IntPtr cr);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_push_group_with_content (IntPtr cr, Content content);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_quartz_surface_create (IntPtr context, bool flipped, int width, int height);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_rectangle (IntPtr cr, double x, double y, double width, double height);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_reference (IntPtr cr);
+
+               #region Regions
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern bool cairo_region_contains_point (IntPtr region, int x, int y);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern RegionOverlap cairo_region_contains_rectangle (IntPtr region, ref Crow.Rectangle rectangle);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_region_copy (IntPtr original);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_region_create ();
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_region_create_rectangle (ref Crow.Rectangle rect);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_region_create_rectangles (IntPtr rects, int count);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_region_destroy (IntPtr region);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern bool cairo_region_equal (IntPtr a, IntPtr b);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_region_get_extents (IntPtr region, out Crow.Rectangle extents);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_region_get_rectangle (IntPtr region, int nth, out Crow.Rectangle rectangle);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern Status cairo_region_intersect (IntPtr dst, IntPtr other);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern Status cairo_region_intersect_rectangle (IntPtr dst, ref Crow.Rectangle rectangle);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern bool cairo_region_is_empty (IntPtr region);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern int cairo_region_num_rectangles (IntPtr region);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_region_reference (IntPtr region);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern Status cairo_region_status (IntPtr region);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern Status cairo_region_subtract (IntPtr dst, IntPtr other);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern Status cairo_region_subtract_rectangle (IntPtr dst, ref Crow.Rectangle rectangle);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_region_translate (IntPtr region, int dx, int dy);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern Status cairo_region_union (IntPtr dst, IntPtr other);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern Status cairo_region_union_rectangle (IntPtr dst, ref Crow.Rectangle rectangle);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern Status cairo_region_xor (IntPtr dst, IntPtr other);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern Status cairo_region_xor_rectangle (IntPtr dst, ref Crow.Rectangle rectangle);
+               #endregion
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_rel_curve_to (IntPtr cr, double dx1, double dy1, double dx2, double dy2, double dx3, double dy3);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_rel_line_to (IntPtr cr, double dx, double dy);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_rel_move_to (IntPtr cr, double dx, double dy);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_reset_clip (IntPtr cr);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_restore (IntPtr cr);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_rotate (IntPtr cr, double angle);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_save (IntPtr cr);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_scale (IntPtr cr, double sx, double sy);
+
+               #region ScaledFont
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_scaled_font_create (IntPtr fontFace, Matrix matrix, Matrix ctm, IntPtr options);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_scaled_font_destroy (IntPtr scaled_font);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_scaled_font_extents (IntPtr scaled_font, out FontExtents extents);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_scaled_font_get_ctm (IntPtr scaled_font, out Matrix matrix);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_scaled_font_get_font_face (IntPtr scaled_font);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_scaled_font_get_font_matrix (IntPtr scaled_font, out Matrix matrix);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_scaled_font_get_font_options (IntPtr scaled_font);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern FontType cairo_scaled_font_get_type (IntPtr scaled_font);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_scaled_font_glyph_extents (IntPtr scaled_font, IntPtr glyphs, int num_glyphs, out TextExtents extents);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_scaled_font_reference (IntPtr scaled_font);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern Status cairo_scaled_font_status (IntPtr scaled_font);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_set_scaled_font (IntPtr cr, IntPtr scaled_font);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_get_scaled_font (IntPtr cr);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_scaled_font_text_extents (IntPtr scaled_font, byte[] utf8, out TextExtents extents);
+               #endregion
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_select_font_face (IntPtr cr, string family, FontSlant slant, FontWeight weight);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_set_antialias (IntPtr cr, Antialias antialias);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_set_dash (IntPtr cr, double [] dashes, int ndash, double offset);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_get_dash (IntPtr cr, IntPtr dashes, out double offset);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern int cairo_get_dash_count (IntPtr cr);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_set_fill_rule (IntPtr cr, Cairo.FillRule fill_rule);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_set_font_face (IntPtr cr, IntPtr fontFace);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_set_font_matrix (IntPtr cr, Matrix matrix);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_set_font_options (IntPtr cr, IntPtr options);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_set_font_size (IntPtr cr, double size);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_set_line_cap (IntPtr cr, LineCap line_cap);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_set_line_join (IntPtr cr, LineJoin line_join);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_set_line_width (IntPtr cr, double width);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_set_matrix (IntPtr cr, Matrix matrix);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_set_miter_limit (IntPtr cr, double limit);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_set_operator (IntPtr cr, Cairo.Operator op);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_set_source (IntPtr cr, IntPtr pattern);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_set_source_rgb (IntPtr cr, double red, double green, double blue);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_set_source_rgba (IntPtr cr, double red, double green, double blue, double alpha);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_set_source_surface (IntPtr cr, IntPtr surface, double x, double y);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_set_tolerance (IntPtr cr, double tolerance);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_show_glyphs (IntPtr ct, IntPtr glyphs, int num_glyphs);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_show_page (IntPtr cr);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_show_text (IntPtr cr, string text);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern Status cairo_status (IntPtr cr);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_status_to_string (Status status);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_stroke (IntPtr cr);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_stroke_extents (IntPtr cr, out double x1, out double y1, out double x2, out double y2);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_stroke_preserve (IntPtr cr);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_rectangle_list_destroy (IntPtr rectangle_list);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_copy_clip_rectangle_list (IntPtr cr);
+
+               #region Surface
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_surface_create_similar (IntPtr surface, Cairo.Content content, int width, int height);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_surface_destroy (IntPtr surface);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_surface_finish (IntPtr surface);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_surface_flush (IntPtr surface);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern Content cairo_surface_get_content (IntPtr surface);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_surface_get_device_offset (IntPtr surface, out double x, out double y);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_surface_get_font_options (IntPtr surface, IntPtr FontOptions);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern uint cairo_surface_get_reference_count (IntPtr surface);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern SurfaceType cairo_surface_get_type (IntPtr surface);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_surface_mark_dirty (IntPtr surface);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_surface_mark_dirty_rectangle (IntPtr surface, int x, int y, int width, int height);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_surface_reference (IntPtr surface);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_surface_set_device_offset (IntPtr surface, double x, double y);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_surface_set_fallback_resolution (IntPtr surface, double x, double y);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern Status cairo_surface_status (IntPtr surface);
+               #endregion
+
+               #region SVG surface
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_surface_write_to_png (IntPtr surface, string filename);
+
+               //[DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               //internal static extern void cairo_surface_write_to_png_stream (IntPtr surface, WriteFunc writeFunc);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_svg_surface_create (string fileName, double width, double height);
+
+               //[DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               //internal static extern IntPtr cairo_svg_surface_create_for_stream (double width, double height);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_svg_surface_restrict_to_version (IntPtr surface, SvgVersion version);
+               #endregion
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_text_extents (IntPtr cr, string text, out TextExtents extents);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_text_path (IntPtr ct, byte[] utf8);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_transform (IntPtr cr, Matrix matrix);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_translate (IntPtr cr, double tx, double ty);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_user_to_device (IntPtr cr, ref double x, ref double y);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_user_to_device_distance (IntPtr cr, ref double dx, ref double dy);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern int cairo_version ();
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_version_string ();
+
+               #region DirectFBSurface
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_directfb_surface_create (IntPtr dfb, IntPtr surface);
+               #endregion
+
+               #region win32 fonts
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_win32_font_face_create_for_logfontw (IntPtr logfontw);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_win32_scaled_font_done_font (IntPtr scaled_font);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern double cairo_win32_scaled_font_get_metrics_factor (IntPtr scaled_font);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern Status cairo_win32_scaled_font_select_font (IntPtr scaled_font, IntPtr hdc);
+               #endregion
+
+               #region win32 surface
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_win32_surface_create (IntPtr hdc);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_win32_surface_create_with_ddb (IntPtr hdc, Format format, int width, int height);
+               #endregion
+
+               #region XcbSurface
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_xcb_surface_create (IntPtr connection, uint drawable, IntPtr visual, int width, int height);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_xcb_surface_create_for_bitmap (IntPtr connection, uint bitmap, IntPtr screen, int width, int height);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_xcb_surface_set_size (IntPtr surface, int width, int height);
+               #endregion
+
+               #region XlibSurface
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_xlib_surface_create (IntPtr display, IntPtr drawable, IntPtr visual, int width, int height);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_xlib_surface_create_for_bitmap (IntPtr display, IntPtr bitmap, IntPtr screen, int width, int height);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern int cairo_xlib_surface_get_depth (IntPtr surface);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_xlib_surface_get_display (IntPtr surface);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_xlib_surface_get_drawable (IntPtr surface);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern int cairo_xlib_surface_get_height (IntPtr surface);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_xlib_surface_get_screen (IntPtr surface);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_xlib_surface_get_visual (IntPtr surface);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern int cairo_xlib_surface_get_width (IntPtr surface);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_xlib_surface_set_drawable (IntPtr surface, IntPtr drawable, int width, int height);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_xlib_surface_set_size (IntPtr surface, int width, int height);
+               #endregion
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_gl_device_set_thread_aware(IntPtr device, int value);
+
+               #region GLSurface
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_gl_surface_create (IntPtr device, uint content, int width, int height);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_gl_surface_create_for_texture (IntPtr device, uint content, uint tex, int width, int height);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_gl_surface_set_size (IntPtr surface, int width, int height);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern int cairo_gl_surface_get_width (IntPtr surface);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern int cairo_gl_surface_get_height (IntPtr surface);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_gl_surface_swapbuffers (IntPtr surf);
+               #endregion
+
+               #region GLX Functions
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_glx_device_create (IntPtr dpy, IntPtr gl_ctx);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_glx_device_get_display (IntPtr device);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_glx_device_get_context (IntPtr device);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_gl_surface_create_for_window (IntPtr device, IntPtr window, int width, int height);
+               #endregion
+
+               #region WGL Fucntions
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_wgl_device_create (IntPtr hglrc);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_wgl_device_get_context (IntPtr device);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_gl_surface_create_for_dc (IntPtr device, IntPtr hdc, int width, int height);
+               #endregion
+
+               #region EGL Functions
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_egl_device_create (IntPtr dpy, IntPtr gl_ctx);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_gl_surface_create_for_egl (IntPtr device, IntPtr eglSurface, int width, int height);
+               #endregion
+
+               #region DRM Functions
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_drm_device_get (IntPtr udev_device);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_drm_device_get_for_fd (int fd);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_drm_device_default ();
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern int cairo_drm_device_get_fd (IntPtr cairo_device);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern  void cairo_drm_device_throttle (IntPtr cairo_device);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_drm_surface_create (IntPtr cairo_device, Format format,     int width, int height);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_drm_surface_create_for_name (IntPtr cairo_device, uint name, Format format, int width, int height, int stride);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_drm_surface_create_from_cacheable_image (IntPtr cairo_device, IntPtr imageSurface);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern Status cairo_drm_surface_enable_scan_out (IntPtr drmSurface);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_drm_surface_get_handle (IntPtr drmSurface);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_drm_surface_get_name (IntPtr drmSurface);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern Format cairo_drm_surface_get_format (IntPtr drmSurface);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern int cairo_drm_surface_get_width (IntPtr drmSurface);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern int cairo_drm_surface_get_height (IntPtr drmSurface);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern int cairo_drm_surface_get_stride (IntPtr drmSurface);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_drm_surface_map_to_image (IntPtr drmSurface);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void     cairo_drm_surface_unmap (IntPtr drmSurface,     IntPtr imageSurface);
+               #endregion
+
+               #region Device
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern Status cairo_device_acquire(IntPtr device);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_device_destroy (IntPtr device);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_device_reference (IntPtr device);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_device_release(IntPtr device);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern Status cairo_device_status(IntPtr device);
+               #endregion
+       }
+}
\ No newline at end of file
diff --git a/Crow/src/Mono.Cairo/Operator.cs b/Crow/src/Mono.Cairo/Operator.cs
new file mode 100644 (file)
index 0000000..f233a25
--- /dev/null
@@ -0,0 +1,62 @@
+//
+// Mono.Cairo.Operator.cs
+//
+// Authors: Duncan Mak (duncan@ximian.com)
+//          Hisham Mardam Bey (hisham.mardambey@gmail.com)
+//          John Luke (john.luke@gmail.com)
+//
+// (C) Ximian, Inc. 2003
+// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
+// Copyright (C) 2005 John Luke
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+namespace Cairo
+{
+       
+       public enum Operator
+       {
+               Clear,
+               Source,
+               Over,
+               In,
+               Out,
+               Atop,
+
+               Dest,
+               DestOver,
+               DestIn,
+               DestOut,
+               DestAtop,
+               
+               Xor,
+               Add,
+               Saturate,
+               Multiply,
+               Screen,
+               Overlay,
+               Darken,
+               Lighten,
+
+       }
+}
diff --git a/Crow/src/Mono.Cairo/PSSurface.cs b/Crow/src/Mono.Cairo/PSSurface.cs
new file mode 100644 (file)
index 0000000..9d6b73b
--- /dev/null
@@ -0,0 +1,64 @@
+//
+// Mono.Cairo.PostscriptSurface.cs
+//
+// Authors:
+//    John Luke
+//
+// (C) John Luke, 2006.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+namespace Cairo {
+
+       public class PSSurface : Surface
+       {
+               internal PSSurface (IntPtr handle, bool owns) : base (handle, owns)
+               {
+               }
+
+               public PSSurface (string filename, double width, double height)
+                       : base (NativeMethods.cairo_ps_surface_create (filename, width, height), true)
+               {
+               }
+
+               public void BeginPageSetup ()
+               {
+                       NativeMethods.cairo_ps_surface_dsc_begin_page_setup (Handle);
+               }
+
+               public void BeginSetup ()
+               {
+                       NativeMethods.cairo_ps_surface_dsc_begin_setup (Handle);
+               }
+
+               public void DscComment (string comment)
+               {
+                       NativeMethods.cairo_ps_surface_dsc_comment (Handle, comment);
+               }
+
+               public void SetSize (double width, double height)
+               {
+                       NativeMethods.cairo_ps_surface_set_size (Handle, width, height);
+               }
+       }
+}
diff --git a/Crow/src/Mono.Cairo/Path.cs b/Crow/src/Mono.Cairo/Path.cs
new file mode 100644 (file)
index 0000000..184c606
--- /dev/null
@@ -0,0 +1,73 @@
+//
+// Mono.Cairo.Context.cs
+//
+// Author:
+//   Miguel de Icaza (miguel@novell.com)
+//
+// This is an OO wrapper API for the Cairo API.
+//
+// Copyright 2007 Novell, Inc (http://www.novell.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Runtime.InteropServices;
+using Cairo;
+
+namespace Cairo {
+
+       public class Path : IDisposable
+       {
+               IntPtr handle = IntPtr.Zero;
+
+               internal Path (IntPtr handle)
+               {
+                       this.handle = handle;
+                       if (CairoDebug.Enabled)
+                               CairoDebug.OnAllocated (handle);
+               }
+
+               ~Path ()
+               {
+                       Dispose (false);
+               }
+
+               public IntPtr Handle { get { return handle; } }
+
+               public void Dispose ()
+               {
+                       Dispose (true);
+                       GC.SuppressFinalize (this);
+               }
+
+               protected virtual void Dispose (bool disposing)
+               {
+                       if (!disposing || CairoDebug.Enabled)
+                               CairoDebug.OnDisposed<Path> (handle, disposing);
+
+                       if (!disposing|| handle == IntPtr.Zero)
+                               return;
+
+                       NativeMethods.cairo_path_destroy (handle);
+                       handle = IntPtr.Zero;
+               }
+       }
+}
diff --git a/Crow/src/Mono.Cairo/Pattern.cs b/Crow/src/Mono.Cairo/Pattern.cs
new file mode 100644 (file)
index 0000000..bc0a962
--- /dev/null
@@ -0,0 +1,155 @@
+//
+// Mono.Cairo.Pattern.cs
+//
+// Author: Jordi Mas (jordi@ximian.com)
+//         Hisham Mardam Bey (hisham.mardambey@gmail.com)
+// (C) Ximian Inc, 2004.
+//
+// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Collections;
+
+namespace Cairo {
+   
+       public class Pattern : IDisposable
+       {
+               [Obsolete]
+               protected IntPtr pattern = IntPtr.Zero;
+
+               public static Pattern Lookup (IntPtr pattern, bool owner)
+               {
+                       if (pattern == IntPtr.Zero)
+                               return null;
+                       
+                       PatternType pt = NativeMethods.cairo_pattern_get_type (pattern);
+                       switch (pt) {
+                       case PatternType.Solid:
+                               return new SolidPattern (pattern, owner);
+                       case PatternType.Surface:
+                               return new SurfacePattern (pattern, owner);
+                       case PatternType.Linear:
+                               return new LinearGradient (pattern, owner);
+                       case PatternType.Radial:
+                               return new RadialGradient (pattern, owner);
+                       default:
+                               return new Pattern (pattern, owner);
+                       }
+               }
+
+               [Obsolete]
+               protected Pattern ()
+               {
+               }
+               
+               internal Pattern (IntPtr handle, bool owned)
+               {
+                       Handle = handle;
+                       if (!owned)
+                               NativeMethods.cairo_pattern_reference (handle);
+                       if (CairoDebug.Enabled)
+                               CairoDebug.OnAllocated (handle);
+               }
+
+               ~Pattern ()
+               {
+                       Dispose (false);
+               }
+               
+               [Obsolete ("Use the SurfacePattern constructor")]
+               public Pattern (Surface surface)
+                       : this ( NativeMethods.cairo_pattern_create_for_surface (surface.Handle), true)
+               {
+               }
+               
+               [Obsolete]
+               protected void Reference ()
+               {
+                       NativeMethods.cairo_pattern_reference (pattern);
+               }
+
+               public void Dispose ()
+               {
+                       Dispose (true);
+                       GC.SuppressFinalize (this);
+               }
+
+               protected virtual void Dispose (bool disposing)
+               {
+                       if (!disposing || CairoDebug.Enabled)
+                               CairoDebug.OnDisposed<Pattern> (Handle, disposing);
+
+                       if (!disposing|| Handle == IntPtr.Zero)
+                               return;
+
+                       NativeMethods.cairo_pattern_destroy (Handle);
+                       Handle = IntPtr.Zero;
+               }
+
+               [Obsolete ("Use Dispose()")]
+               public void Destroy ()
+               {
+                       Dispose ();
+               }
+
+               public Status Status
+               {
+                       get { return NativeMethods.cairo_pattern_status (Handle); }
+               }
+
+               public Extend Extend
+               {
+                       get { return NativeMethods.cairo_pattern_get_extend (Handle); }
+                       set { NativeMethods.cairo_pattern_set_extend (Handle, value); }
+               }
+
+               public Matrix Matrix {
+                       set {
+                               NativeMethods.cairo_pattern_set_matrix (Handle, value);
+                       }
+
+                       get {
+                               Matrix m = new Matrix ();
+                               NativeMethods.cairo_pattern_get_matrix (Handle, m);
+                               return m;
+                       }
+               }
+
+#pragma warning disable 612
+               public IntPtr Handle {
+                       get { return pattern; }
+                       private set { pattern = value; }
+               }
+#pragma warning restore 612
+
+               [Obsolete]
+               public IntPtr Pointer {
+                       get { return pattern; }
+               }
+
+               public PatternType PatternType {
+                       get { return NativeMethods.cairo_pattern_get_type (Handle); }
+               }
+       }
+}
+
diff --git a/Crow/src/Mono.Cairo/PatternType.cs b/Crow/src/Mono.Cairo/PatternType.cs
new file mode 100644 (file)
index 0000000..f9b9523
--- /dev/null
@@ -0,0 +1,44 @@
+//
+// Mono.Cairo.PatternType.cs
+//
+// Authors:
+//    John Luke
+//
+// (C) John Luke, 2006.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+namespace Cairo {
+
+       
+       public enum PatternType
+       {
+               Solid,
+               Surface,
+               Linear,
+               Radial,
+               Mesh,
+               RasterSource
+       }
+}
+
diff --git a/Crow/src/Mono.Cairo/PdfSurface.cs b/Crow/src/Mono.Cairo/PdfSurface.cs
new file mode 100644 (file)
index 0000000..c980f24
--- /dev/null
@@ -0,0 +1,50 @@
+//
+// Mono.Cairo.PdfSurface.cs
+//
+// Authors:
+//    John Luke
+//
+// (C) John Luke, 2006.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+namespace Cairo {
+
+       public class PdfSurface : Surface
+       {
+               internal PdfSurface (IntPtr handle, bool owns) : base (handle, owns)
+               {
+               }
+
+               public PdfSurface (string filename, double width, double height)
+                       : base (NativeMethods.cairo_pdf_surface_create (filename, width, height), true)
+               {
+               }
+
+               public void SetSize (double width, double height)
+               {
+                       NativeMethods.cairo_pdf_surface_set_size (Handle, width, height);
+               }
+       }
+}
+
diff --git a/Crow/src/Mono.Cairo/Point.cs b/Crow/src/Mono.Cairo/Point.cs
new file mode 100644 (file)
index 0000000..e72ca6c
--- /dev/null
@@ -0,0 +1,57 @@
+//
+// Mono.Cairo.Context.cs
+//
+// Author:
+//   Duncan Mak (duncan@ximian.com)
+//   Miguel de Icaza (miguel@novell.com)
+//   Hisham Mardam Bey (hisham.mardambey@gmail.com)
+//   Alp Toker (alp@atoker.com)
+//
+// (C) Ximian Inc, 2003.
+// (C) Novell Inc, 2003.
+//
+// This is an OO wrapper API for the Cairo API.
+//
+// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+namespace Cairo {
+       public struct Point
+       {
+               public Point (int x, int y)
+               {
+                       this.x = x;
+                       this.y = y;
+               }
+
+               int x, y;
+               public int X {
+                       get { return x; }
+                       set { x = value; }
+               }
+
+               public int Y {
+                       get { return y; }
+                       set { y = value; }
+               }
+       }
+}
diff --git a/Crow/src/Mono.Cairo/PointD.cs b/Crow/src/Mono.Cairo/PointD.cs
new file mode 100644 (file)
index 0000000..c2e3587
--- /dev/null
@@ -0,0 +1,58 @@
+//
+// Mono.Cairo.Context.cs
+//
+// Author:
+//   Duncan Mak (duncan@ximian.com)
+//   Miguel de Icaza (miguel@novell.com)
+//   Hisham Mardam Bey (hisham.mardambey@gmail.com)
+//   Alp Toker (alp@atoker.com)
+//
+// (C) Ximian Inc, 2003.
+// (C) Novell Inc, 2003.
+//
+// This is an OO wrapper API for the Cairo API.
+//
+// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+namespace Cairo {
+
+       public struct PointD
+       {
+               public PointD (double x, double y)
+               {
+                       this.x = x;
+                       this.y = y;
+               }
+
+               double x, y;
+               public double X {
+                       get { return x; }
+                       set { x = value; }
+               }
+
+               public double Y {
+                       get { return y; }
+                       set { y = value; }
+               }
+       }
+}
diff --git a/Crow/src/Mono.Cairo/RadialGradient.cs b/Crow/src/Mono.Cairo/RadialGradient.cs
new file mode 100644 (file)
index 0000000..6422e00
--- /dev/null
@@ -0,0 +1,46 @@
+//
+// Mono.Cairo.Pattern.cs
+//
+// Author: Jordi Mas (jordi@ximian.com)
+//         Hisham Mardam Bey (hisham.mardambey@gmail.com)
+// (C) Ximian Inc, 2004.
+//
+// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+namespace Cairo {
+
+       public class RadialGradient : Gradient
+       {
+               internal RadialGradient (IntPtr handle, bool owned) : base (handle, owned)
+               {
+               }
+
+               public RadialGradient (double cx0, double cy0, double radius0, double cx1, double cy1, double radius1)
+                       : base (NativeMethods.cairo_pattern_create_radial (cx0, cy0, radius0, cx1, cy1, radius1), true)
+               {
+               }
+       }
+}
+
diff --git a/Crow/src/Mono.Cairo/Region.cs b/Crow/src/Mono.Cairo/Region.cs
new file mode 100644 (file)
index 0000000..4a82842
--- /dev/null
@@ -0,0 +1,196 @@
+// Copyright (C) 2011 Novell, Inc (http://www.novell.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Cairo
+{
+       [StructLayout(LayoutKind.Sequential)]
+       public struct RectangleList {
+               public Status Status;
+               public IntPtr Rectangles;
+               public int NumRectangles;
+       }
+
+       public enum RegionOverlap {
+               In,
+               Out,
+               Part,
+       }
+
+       public class Region : IDisposable {
+
+               IntPtr handle;
+               public IntPtr Handle {
+                       get { return handle; }
+               }
+
+               [Obsolete]
+               public Region (IntPtr handle) : this (handle, false) {}
+
+               public Region (IntPtr handle, bool owned)
+               {
+                       this.handle = handle;
+                       if (!owned)
+                               NativeMethods.cairo_region_reference (handle);
+                       if (CairoDebug.Enabled)
+                               CairoDebug.OnAllocated (handle);
+               }
+
+               public Region () : this (NativeMethods.cairo_region_create () , true)
+               {
+               }
+
+               public Region (Crow.Rectangle rect)
+               {
+                       handle = NativeMethods.cairo_region_create_rectangle (ref rect);
+               }
+
+               public Region (RectangleList rects)
+               {
+                       handle = NativeMethods.cairo_region_create_rectangles (rects.Rectangles, rects.NumRectangles);
+               }
+
+               public Region Copy ()
+               {
+                       return new Region (NativeMethods.cairo_region_copy (Handle), true);
+               }
+
+               #region IDisposable
+               ~Region ()
+               {
+                       Dispose (false);
+               }
+
+               public void Dispose ()
+               {
+                       Dispose (true);
+                       GC.SuppressFinalize (this);
+               }
+
+               protected virtual void Dispose (bool disposing)
+               {
+                       if (!disposing || CairoDebug.Enabled)
+                               CairoDebug.OnDisposed<Region> (handle, disposing);
+
+                       if (!disposing|| handle == IntPtr.Zero)
+                               return;
+
+                       NativeMethods.cairo_region_destroy (Handle);
+                       handle = IntPtr.Zero;
+               }
+               #endregion
+
+               public override bool Equals (object obj)
+               {
+                       return (obj is Region) && NativeMethods.cairo_region_equal (Handle, (obj as Region).Handle);
+               }
+
+               public override int GetHashCode ()
+               {
+                       return Handle.GetHashCode ();
+               }
+
+               public Status Status {
+                       get { return NativeMethods.cairo_region_status (Handle); }
+               }
+
+               public Crow.Rectangle Extents {
+                       get {
+                               Crow.Rectangle result;
+                               NativeMethods.cairo_region_get_extents (Handle, out result);
+                               return result;
+                       }
+               }
+
+               public int NumRectangles {
+                       get { return NativeMethods.cairo_region_num_rectangles (Handle); }
+               }
+
+               public Crow.Rectangle GetRectangle (int nth)
+               {
+                       Crow.Rectangle val;
+                       NativeMethods.cairo_region_get_rectangle (Handle, nth, out val);
+                       return val;
+               }
+
+               public bool IsEmpty {
+                       get { return NativeMethods.cairo_region_is_empty (Handle); }
+               }
+
+               public RegionOverlap Contains (Crow.Rectangle rectangle)
+               {
+                       return NativeMethods.cairo_region_contains_rectangle (Handle, ref rectangle);
+               }
+
+               public bool Contains (int x, int y)
+               {
+                       return NativeMethods.cairo_region_contains_point (Handle, x, y);
+               }
+
+               public void Translate (int dx, int dy)
+               {
+                       NativeMethods.cairo_region_translate (Handle, dx, dy);
+               }
+
+               public Status Subtract (Region other)
+               {
+                       return NativeMethods.cairo_region_subtract (Handle, other.Handle);
+               }
+
+               public Status SubtractRectangle (Crow.Rectangle rectangle)
+               {
+                       return NativeMethods.cairo_region_subtract_rectangle (Handle, ref rectangle);
+               }
+
+               public Status Intersect (Region other)
+               {
+                       return NativeMethods.cairo_region_intersect (Handle, other.Handle);
+               }
+
+               public Status IntersectRectangle (Crow.Rectangle rectangle)
+               {
+                       return NativeMethods.cairo_region_intersect_rectangle (Handle, ref rectangle);
+               }
+
+               public Status Union (Region other)
+               {
+                       return NativeMethods.cairo_region_union (Handle, other.Handle);
+               }
+
+               public Status UnionRectangle (Crow.Rectangle rectangle)
+               {
+                       return NativeMethods.cairo_region_union_rectangle (Handle, ref rectangle);
+               }
+
+               public Status Xor (Region other)
+               {
+                       return NativeMethods.cairo_region_xor (Handle, other.Handle);
+               }
+
+               public Status XorRectangle (Crow.Rectangle rectangle)
+               {
+                       return NativeMethods.cairo_region_xor_rectangle (Handle, ref rectangle);
+               }
+       }
+}
diff --git a/Crow/src/Mono.Cairo/ScaledFont.cs b/Crow/src/Mono.Cairo/ScaledFont.cs
new file mode 100644 (file)
index 0000000..9371946
--- /dev/null
@@ -0,0 +1,123 @@
+//
+// Mono.Cairo.ScaledFont.cs
+//
+// (c) 2008 Jordi Mas i Hernandez (jordimash@gmail.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Cairo {
+   
+       public class ScaledFont : IDisposable
+       {
+               protected IntPtr handle = IntPtr.Zero;
+
+               internal ScaledFont (IntPtr handle, bool owner)
+               {
+                       this.handle = handle;
+                       if (!owner)
+                               NativeMethods.cairo_scaled_font_reference (handle);
+                       if (CairoDebug.Enabled)
+                               CairoDebug.OnAllocated (handle);
+               }
+
+               public ScaledFont (FontFace fontFace, Matrix matrix, Matrix ctm, FontOptions options)
+                       : this (NativeMethods.cairo_scaled_font_create (fontFace.Handle, matrix, ctm, options.Handle), true)
+               {
+               }
+
+               ~ScaledFont ()
+               {
+                       Dispose (false);
+               }
+
+               public IntPtr Handle {
+                       get {
+                               return handle;
+                       }
+               }
+
+               public FontExtents FontExtents {
+                       get {
+                               FontExtents extents;
+                               NativeMethods.cairo_scaled_font_extents (handle, out extents);
+                               return extents;
+                       }
+               }
+
+               public Matrix FontMatrix {
+                       get {
+                               Matrix m;
+                               NativeMethods.cairo_scaled_font_get_font_matrix (handle, out m);
+                               return m;
+                       }
+               }
+
+               public FontType FontType {
+                       get {
+                               return NativeMethods.cairo_scaled_font_get_type (handle);
+                       }
+               }
+
+               public TextExtents GlyphExtents (Glyph[] glyphs)
+               {
+                       IntPtr ptr = Context.FromGlyphToUnManagedMemory (glyphs);
+                       TextExtents extents;
+
+                       NativeMethods.cairo_scaled_font_glyph_extents (handle, ptr, glyphs.Length, out extents);
+
+                       Marshal.FreeHGlobal (ptr);
+                       return extents;
+               }
+       
+               public Status Status
+               {
+                       get { return NativeMethods.cairo_scaled_font_status (handle); }
+               }
+
+               public void Dispose ()
+               {
+                       Dispose (true);
+                       GC.SuppressFinalize (this);
+               }
+
+               protected virtual void Dispose (bool disposing)
+               {
+                       if (!disposing || CairoDebug.Enabled)
+                               CairoDebug.OnDisposed<ScaledFont> (handle, disposing);
+
+                       if (!disposing|| handle == IntPtr.Zero)
+                               return;
+
+                       NativeMethods.cairo_scaled_font_destroy (handle);
+                       handle = IntPtr.Zero;
+               }
+
+               [Obsolete]
+               protected void Reference ()
+               {
+                       NativeMethods.cairo_scaled_font_reference (handle);
+               }
+       }
+}
+
diff --git a/Crow/src/Mono.Cairo/SolidPattern.cs b/Crow/src/Mono.Cairo/SolidPattern.cs
new file mode 100644 (file)
index 0000000..37864e5
--- /dev/null
@@ -0,0 +1,72 @@
+//
+// Mono.Cairo.Pattern.cs
+//
+// Author: Jordi Mas (jordi@ximian.com)
+//         Hisham Mardam Bey (hisham.mardambey@gmail.com)
+// (C) Ximian Inc, 2004.
+//
+// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using Color = Crow.Color;
+namespace Cairo {
+
+       public class SolidPattern : Pattern
+       {
+               internal SolidPattern (IntPtr handle, bool owned) : base (handle, owned)
+               {
+               }
+
+               public SolidPattern (Color color)
+                       : base (NativeMethods.cairo_pattern_create_rgba (color.R, color.G, color.B, color.A), true)
+               {
+               }
+
+               public SolidPattern (double r, double g, double b)
+                       : base (NativeMethods.cairo_pattern_create_rgb (r, g, b), true)
+               {
+               }
+
+               public SolidPattern (double r, double g, double b, double a)
+                       : base (NativeMethods.cairo_pattern_create_rgba (r, g, b, a), true)
+               {
+               }
+
+               public SolidPattern (Color color, bool solid)
+                       : base (solid
+                                       ? NativeMethods.cairo_pattern_create_rgb (color.R, color.G, color.B)
+                                       : NativeMethods.cairo_pattern_create_rgba (color.R, color.G, color.B, color.A),
+                               true)
+               {
+               }
+
+               public Color Color {
+                       get {
+                               double red, green, blue, alpha;
+                               NativeMethods.cairo_pattern_get_rgba  (Handle, out red, out green, out blue, out alpha);
+                               return new Color (red, green, blue, alpha);
+                       }
+               }
+       }
+}
+
diff --git a/Crow/src/Mono.Cairo/Status.cs b/Crow/src/Mono.Cairo/Status.cs
new file mode 100644 (file)
index 0000000..54b2fec
--- /dev/null
@@ -0,0 +1,64 @@
+//
+// Mono.Cairo.Status.cs
+//
+// Authors:
+//   Duncan Mak (duncan@ximian.com)
+//   Hisham Mardam Bey (hisham.mardambey@gmail.com)
+//   John Luke (john.luke@gmail.com)
+//   Alp Toker (alp@atoker.com)
+//
+// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
+// Copyright (C) 2005 John Luke
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+namespace Cairo
+{
+       
+       public enum Status
+       {
+               Success = 0,
+               NoMemory,
+               InvalidRestore,
+               InvalidPopGroup,
+               NoCurrentPoint,
+               InvalidMatrix,
+               InvalidStatus,
+               NullPointer,
+               InvalidString,
+               InvalidPathData,
+               ReadError,
+               WriteError,
+               SurfaceFinished,
+               SurfaceTypeMismatch,
+               PatternTypeMismatch,
+               InvalidContent,
+               InvalidFormat,
+               InvalidVisual,
+               FileNotFound,
+               InvalidDash,
+               InvalidDscComment,
+               InvalidIndex,
+               ClipNotRepresentable,
+       }
+}
diff --git a/Crow/src/Mono.Cairo/SubpixelOrder.cs b/Crow/src/Mono.Cairo/SubpixelOrder.cs
new file mode 100644 (file)
index 0000000..3c3a336
--- /dev/null
@@ -0,0 +1,42 @@
+//
+// Mono.Cairo.Cairo.cs
+//
+// Authors:
+//   John Luke (john.luke@gmail.com)
+//
+// Copyright (C) John Luke 2005
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+namespace Cairo
+{
+       
+       public enum SubpixelOrder
+       {
+               Default,
+               Rgb,
+               Bgr,
+               Vrgb,
+               Vbgr,
+       }
+}
diff --git a/Crow/src/Mono.Cairo/Surface.cs b/Crow/src/Mono.Cairo/Surface.cs
new file mode 100644 (file)
index 0000000..14f4a2b
--- /dev/null
@@ -0,0 +1,233 @@
+//
+// Mono.Cairo.Surface.cs
+//
+// Authors:
+//    Duncan Mak
+//    Miguel de Icaza.
+//    Alp Toker
+//
+// (C) Ximian Inc, 2003.
+// (C) Novell, Inc. 2003.
+//
+// This is an OO wrapper API for the Cairo API
+//
+// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Collections;
+
+namespace Cairo {
+
+       public class Surface : IDisposable
+       {
+               IntPtr handle = IntPtr.Zero;
+
+               [Obsolete]
+               protected Surface()
+               {
+               }
+
+               [Obsolete]
+               protected Surface (IntPtr ptr) : this (ptr, true)
+               {
+               }
+
+               protected Surface (IntPtr handle, bool owner)
+               {
+                       this.handle = handle;
+                       if (!owner)
+                               NativeMethods.cairo_surface_reference (handle);
+                       if (CairoDebug.Enabled)
+                               CairoDebug.OnAllocated (handle);
+               }
+
+               public static Surface Lookup (IntPtr surface, bool owned)
+               {
+                       SurfaceType st = NativeMethods.cairo_surface_get_type (surface);
+                       switch (st) {
+                       case SurfaceType.Image:
+                               return new ImageSurface (surface, owned);
+                       case SurfaceType.Xlib:
+                               return new XlibSurface (surface, owned);
+                       case SurfaceType.Xcb:
+                               return new XcbSurface (surface, owned);
+                       case SurfaceType.Glitz:
+                               return new GlitzSurface (surface, owned);
+                       case SurfaceType.Win32:
+                               return new Win32Surface (surface, owned);
+                       case SurfaceType.Pdf:
+                               return new PdfSurface (surface, owned);
+                       case SurfaceType.PS:
+                               return new PSSurface (surface, owned);
+                       case SurfaceType.DirectFB:
+                               return new DirectFBSurface (surface, owned);
+                       case SurfaceType.Svg:
+                               return new SvgSurface (surface, owned);
+                       case SurfaceType.GL:
+                               return new GLSurface (surface, owned);
+                       default:
+                               return new Surface (surface, owned);
+                       }
+               }
+
+               [Obsolete ("Use an ImageSurface constructor instead.")]
+               public static Cairo.Surface CreateForImage (
+                       ref byte[] data, Cairo.Format format, int width, int height, int stride)
+               {
+                       IntPtr p = NativeMethods.cairo_image_surface_create_for_data (
+                               data, format, width, height, stride);
+
+                       return new Cairo.Surface (p, true);
+               }
+
+               [Obsolete ("Use an ImageSurface constructor instead.")]
+               public static Cairo.Surface CreateForImage (
+                       Cairo.Format format, int width, int height)
+               {
+                       IntPtr p = NativeMethods.cairo_image_surface_create (
+                               format, width, height);
+
+                       return new Cairo.Surface (p, true);
+               }
+
+
+               public Cairo.Surface CreateSimilar (
+                       Cairo.Content content, int width, int height)
+               {
+                       IntPtr p = NativeMethods.cairo_surface_create_similar (
+                               this.Handle, content, width, height);
+
+                       return Surface.Lookup(p, true);
+               }
+
+               ~Surface ()
+               {
+                       Dispose (false);
+               }
+
+               //[Obsolete ("Use Context.SetSource() followed by Context.Paint()")]
+               public void Show (Context gr, double x, double y)
+               {
+                       NativeMethods.cairo_set_source_surface (gr.Handle, handle, x, y);
+                       NativeMethods.cairo_paint (gr.Handle);
+               }
+
+               public void Dispose ()
+               {
+                       Dispose (true);
+                       GC.SuppressFinalize (this);
+               }
+
+               protected virtual void Dispose (bool disposing)
+               {
+                       if (!disposing || CairoDebug.Enabled)
+                               CairoDebug.OnDisposed<Surface> (handle, disposing);
+
+                       if (!disposing|| handle == IntPtr.Zero)
+                               return;
+
+                       NativeMethods.cairo_surface_destroy (handle);
+                       handle = IntPtr.Zero;
+               }
+               public virtual void SetSize (int width, int height) {                   
+               }
+
+               public Status Finish ()
+               {
+                       NativeMethods.cairo_surface_finish (handle);
+                       return Status;
+               }
+
+               public void Flush ()
+               {
+                       NativeMethods.cairo_surface_flush (handle);
+               }
+
+               public void MarkDirty ()
+               {
+                       NativeMethods.cairo_surface_mark_dirty (Handle);
+               }
+
+               public void MarkDirty (Crow.Rectangle rectangle)
+               {
+                       NativeMethods.cairo_surface_mark_dirty_rectangle (Handle, rectangle.X, rectangle.Y, rectangle.Width, rectangle.Height);
+               }
+
+               public IntPtr Handle {
+                       get {
+                               return handle;
+                       }
+               }
+
+               public PointD DeviceOffset {
+                       get {
+                               double x, y;
+                               NativeMethods.cairo_surface_get_device_offset (handle, out x, out y);
+                               return new PointD (x, y);
+                       }
+
+                       set {
+                               NativeMethods.cairo_surface_set_device_offset (handle, value.X, value.Y);
+                       }
+               }
+
+               [Obsolete ("Use Dispose()")]
+               public void Destroy()
+               {
+                       Dispose ();
+               }
+
+               public void SetFallbackResolution (double x, double y)
+               {
+                       NativeMethods.cairo_surface_set_fallback_resolution (handle, x, y);
+               }
+
+               public void WriteToPng (string filename)
+               {
+                       NativeMethods.cairo_surface_write_to_png (handle, filename);
+               }
+
+               [Obsolete ("Use Handle instead.")]
+               public IntPtr Pointer {
+                       get {
+                               return handle;
+                       }
+               }
+
+               public Status Status {
+                       get { return NativeMethods.cairo_surface_status (handle); }
+               }
+
+               public Content Content {
+                       get { return NativeMethods.cairo_surface_get_content (handle); }
+               }
+
+               public SurfaceType SurfaceType {
+                       get { return NativeMethods.cairo_surface_get_type (handle); }
+               }
+
+               public uint ReferenceCount {
+                       get { return NativeMethods.cairo_surface_get_reference_count (handle); }
+               }
+       }
+}
diff --git a/Crow/src/Mono.Cairo/SurfacePattern.cs b/Crow/src/Mono.Cairo/SurfacePattern.cs
new file mode 100644 (file)
index 0000000..4422b11
--- /dev/null
@@ -0,0 +1,57 @@
+//
+// Mono.Cairo.Pattern.cs
+//
+// Author: Jordi Mas (jordi@ximian.com)
+//         Hisham Mardam Bey (hisham.mardambey@gmail.com)
+// (C) Ximian Inc, 2004.
+//
+// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+namespace Cairo {
+
+       public class SurfacePattern : Pattern
+       {
+               internal SurfacePattern (IntPtr handle, bool owned) : base (handle, owned)
+               {
+               }
+
+               public SurfacePattern (Surface surface)
+                       : base (NativeMethods.cairo_pattern_create_for_surface (surface.Handle), true)
+               {
+               }
+
+               //no idea why this is here, the base one is identical, but we can't remove it now
+               public new Extend Extend {
+                       set { NativeMethods.cairo_pattern_set_extend (Handle, value); }
+                       get { return NativeMethods.cairo_pattern_get_extend (Handle); }
+               }
+
+               public Filter Filter {
+                       set { NativeMethods.cairo_pattern_set_filter (Handle, value); }
+                       get { return NativeMethods.cairo_pattern_get_filter (Handle); }
+               }
+       }
+}
+
diff --git a/Crow/src/Mono.Cairo/SurfaceType.cs b/Crow/src/Mono.Cairo/SurfaceType.cs
new file mode 100644 (file)
index 0000000..b0b659c
--- /dev/null
@@ -0,0 +1,61 @@
+//
+// Mono.Cairo.SurfaceType.cs
+//
+// Authors:
+//    John Luke
+//
+// (C) John Luke, 2006.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+namespace Cairo {
+
+       
+       public enum SurfaceType
+       {
+               Image,
+               Pdf,
+               PS,
+               Xlib,
+               Xcb,
+               Glitz,
+               Quartz,
+               Win32,
+               BeOS,
+               DirectFB,
+               Svg,
+               OS2,
+               Win32Printing,
+               QuartzImage,
+               Script,
+               Qt,
+               Recording,
+               VG,
+               GL,
+               Drm,
+               Tee,
+               Xml,
+               Skia,
+               SubSurface
+       }
+}
diff --git a/Crow/src/Mono.Cairo/SvgSurface.cs b/Crow/src/Mono.Cairo/SvgSurface.cs
new file mode 100644 (file)
index 0000000..4182950
--- /dev/null
@@ -0,0 +1,50 @@
+//
+// Mono.Cairo.SvgSurface.cs
+//
+// Authors:
+//    John Luke
+//
+// (C) John Luke, 2006.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+namespace Cairo {
+
+       public class SvgSurface : Surface
+       {
+               internal SvgSurface (IntPtr handle, bool owns) : base (handle, owns)
+               {
+               }
+
+               public SvgSurface (string filename, double width, double height)
+                       : base (NativeMethods.cairo_svg_surface_create (filename, width, height), true)
+               {
+               }
+
+               public void RestrictToVersion (SvgVersion version)
+               {
+                       NativeMethods.cairo_svg_surface_restrict_to_version (Handle, version);
+               }
+       }
+}
+
diff --git a/Crow/src/Mono.Cairo/SvgVersion.cs b/Crow/src/Mono.Cairo/SvgVersion.cs
new file mode 100644 (file)
index 0000000..7f0f462
--- /dev/null
@@ -0,0 +1,41 @@
+//
+// Mono.Cairo.SvgVersion.cs
+//
+// Authors:
+//    John Luke
+//
+// (C) John Luke, 2006.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+namespace Cairo {
+
+       
+       public enum SvgVersion
+       {
+               // FIXME: yuck
+               OnePointOne = 0,
+               OnePointTwo,
+       }
+}
+
diff --git a/Crow/src/Mono.Cairo/TextExtents.cs b/Crow/src/Mono.Cairo/TextExtents.cs
new file mode 100644 (file)
index 0000000..f9cd560
--- /dev/null
@@ -0,0 +1,98 @@
+//
+// Mono.Cairo.TextExtents.cs
+//
+// Authors:
+//   Duncan Mak (duncan@ximian.com)
+//   Hisham Mardam Bey (hisham.mardambey@gmail.com)
+//
+// (C) Ximian, Inc. 2003
+// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Cairo
+{
+       [StructLayout (LayoutKind.Sequential)]
+       public struct TextExtents
+       {
+               double xbearing;
+               double ybearing;
+               double width;
+               double height;
+               double xadvance;
+               double yadvance;
+               
+               public double XBearing {
+                       get { return xbearing; }
+                       set { xbearing = value; }
+               }
+               
+               public double YBearing {
+                       get { return ybearing; }
+                       set { ybearing = value; }
+               }
+               
+               public double Width {
+                       get { return width; }
+                       set { width = value; }
+               }
+               
+               public double Height {
+                       get { return height; }
+                       set { height = value; }
+               }
+               
+               public double XAdvance {
+                       get { return xadvance; }
+                       set { xadvance = value; }
+               }
+               
+               public double YAdvance {
+                       get { return yadvance; }
+                       set { yadvance = value; }
+               }
+
+               public override bool Equals (object obj)
+               {
+                       if (obj is TextExtents)
+                               return this == (TextExtents)obj;
+                       return false;
+               }
+
+               public override int GetHashCode ()
+               {
+                       return (int)XBearing ^ (int)YBearing ^ (int)Width ^ (int)Height ^ (int)XAdvance ^ (int)YAdvance;
+               }
+
+               public static bool operator == (TextExtents extents, TextExtents other)
+               {
+                       return extents.XBearing == other.XBearing && extents.YBearing == other.YBearing && extents.Width == other.Width && extents.Height == other.Height && extents.XAdvance == other.XAdvance && extents.YAdvance == other.YAdvance;
+               }
+
+               public static bool operator != (TextExtents extents, TextExtents other)
+               {
+                       return !(extents == other);
+               }
+       }
+}
diff --git a/Crow/src/Mono.Cairo/WGLDevice.cs b/Crow/src/Mono.Cairo/WGLDevice.cs
new file mode 100644 (file)
index 0000000..03f7e3a
--- /dev/null
@@ -0,0 +1,45 @@
+//
+// Mono.Cairo.Device.cs
+//
+// Authors:
+//                     JP Bruyère (jp_bruyere@hotmail.com)
+//
+// This is an OO wrapper API for the Cairo API
+//
+// Copyright (C) 2016 JP Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+using System;
+
+namespace Cairo
+{
+       public class WGLDevice : Device
+       {
+               public WGLDevice (IntPtr hglrc) : base (NativeMethods.cairo_wgl_device_create (hglrc), true)
+               {
+               }
+
+               public IntPtr Context {
+                       get { return NativeMethods.cairo_wgl_device_get_context (Handle); }
+               }
+       }
+}
+
diff --git a/Crow/src/Mono.Cairo/Win32Surface.cs b/Crow/src/Mono.Cairo/Win32Surface.cs
new file mode 100644 (file)
index 0000000..dd24428
--- /dev/null
@@ -0,0 +1,44 @@
+//
+// Mono.Cairo.Win32Surface.cs
+//
+// Authors:
+//    John Luke
+//
+// (C) John Luke, 2006.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+namespace Cairo {
+       
+       public class Win32Surface : Surface
+       {
+               internal Win32Surface (IntPtr handle, bool owns) : base (handle, owns)
+               {
+               }
+               
+               public Win32Surface (IntPtr hdc)
+                       : base (NativeMethods.cairo_win32_surface_create (hdc), true)
+               {
+               }
+       }
+}
diff --git a/Crow/src/Mono.Cairo/XcbSurface.cs b/Crow/src/Mono.Cairo/XcbSurface.cs
new file mode 100644 (file)
index 0000000..340b0fa
--- /dev/null
@@ -0,0 +1,53 @@
+//
+// Mono.Cairo.XcbSurface.cs
+//
+// Authors:
+//    Alp Toker
+//
+// (C) Alp Toker, 2006.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+namespace Cairo {
+       public class XcbSurface : Surface
+       {
+               internal XcbSurface (IntPtr handle, bool owns) : base (handle, owns)
+               {
+               }
+
+               public XcbSurface (IntPtr connection, uint drawable, IntPtr visual, int width, int height)
+                       : base (NativeMethods.cairo_xcb_surface_create (connection, drawable, visual, width, height), true)
+               {
+               }
+
+               public static XcbSurface FromBitmap (IntPtr connection, uint bitmap, IntPtr screen, int width, int height)
+               {
+                       IntPtr ptr = NativeMethods.cairo_xcb_surface_create_for_bitmap (connection, bitmap, screen, width, height);
+                       return new XcbSurface (ptr, true);
+               }
+               public override void SetSize (int width, int height)
+               {                       
+                       NativeMethods.cairo_xcb_surface_set_size (Handle, width, height);
+               }
+       }
+}
diff --git a/Crow/src/Mono.Cairo/XlibSurface.cs b/Crow/src/Mono.Cairo/XlibSurface.cs
new file mode 100644 (file)
index 0000000..c0003a4
--- /dev/null
@@ -0,0 +1,95 @@
+//
+// Mono.Cairo.XlibSurface.cs
+//
+// Authors:
+//    Duncan Mak
+//    Miguel de Icaza.
+//
+// (C) Ximian Inc, 2003.
+// (C) Novell, Inc. 2003.
+//
+// This is an OO wrapper API for the Cairo API
+//
+// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+namespace Cairo {
+
+       public class XlibSurface : Surface
+       {
+               public XlibSurface (IntPtr display, IntPtr drawable, IntPtr visual, int width, int height)
+                       : base (NativeMethods.cairo_xlib_surface_create (display, drawable, visual, width, height), true)
+               {
+               }
+
+               public XlibSurface (IntPtr ptr, bool own) : base (ptr, own)
+               {
+               }
+
+               public static XlibSurface FromBitmap (IntPtr display, IntPtr bitmap, IntPtr screen, int width, int height)
+               {
+                       IntPtr ptr = NativeMethods.cairo_xlib_surface_create_for_bitmap (display, bitmap, screen, width, height);
+                       return new XlibSurface(ptr, true);
+               }
+
+               public void SetDrawable (IntPtr drawable, int width, int height)
+               {
+                       NativeMethods.cairo_xlib_surface_set_drawable (Handle, drawable, width, height);
+               }
+
+               public void SetSize (int width, int height)
+               {
+                       NativeMethods.cairo_xlib_surface_set_size (Handle, width, height);
+               }
+
+               public int Depth {
+                       get { return NativeMethods.cairo_xlib_surface_get_depth (Handle); }
+               }
+               
+               public IntPtr Display {
+                       get { return NativeMethods.cairo_xlib_surface_get_display (Handle); }
+               }
+
+               public IntPtr Drawable {
+                       get { return NativeMethods.cairo_xlib_surface_get_drawable (Handle); }
+               }
+
+               public int Height {
+                       get { return NativeMethods.cairo_xlib_surface_get_height (Handle); }
+               }
+
+               public IntPtr Screen {
+                       get { return NativeMethods.cairo_xlib_surface_get_screen (Handle); }
+               }
+
+               public IntPtr Visual {
+                       get { return NativeMethods.cairo_xlib_surface_get_visual (Handle); }
+               }
+
+               public int Width {
+                       get { return NativeMethods.cairo_xlib_surface_get_width (Handle); }
+               }
+
+       }
+}
diff --git a/Crow/src/MouseCursorChangedEventArgs.cs b/Crow/src/MouseCursorChangedEventArgs.cs
new file mode 100644 (file)
index 0000000..9c63c11
--- /dev/null
@@ -0,0 +1,39 @@
+//
+// MouseCursorChangedEventArgs.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+
+namespace Crow
+{
+       public class MouseCursorChangedEventArgs : EventArgs
+       {
+               public XCursor NewCursor;
+               public MouseCursorChangedEventArgs (XCursor newCursor) : base()
+               {
+                       NewCursor = newCursor;
+               }
+       }
+}
diff --git a/Crow/src/ObservableList.cs b/Crow/src/ObservableList.cs
new file mode 100644 (file)
index 0000000..96bfccc
--- /dev/null
@@ -0,0 +1,47 @@
+//
+// IListChanged.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp_bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+using System;
+using System.Collections.Generic;
+
+namespace Crow
+{      
+       public class ObservableList<T> : List<T> , IObservableList {
+               public event EventHandler<ListChangedEventArg> ListAdd;
+               public event EventHandler<ListChangedEventArg> ListRemove;              
+
+               public void AddElement (T elem) {
+                       this.Add(elem);
+                       ListAdd.Raise (this, new ListChangedEventArg (this.Count - 1, elem));
+               }
+               public void RemoveElement (T elem) {
+                       System.Diagnostics.Debug.WriteLine ("remove elem:" + elem);
+                       int idx = this.IndexOf (elem);
+                       this.RemoveAt (idx);
+                       ListRemove.Raise (this, new ListChangedEventArg (idx, elem));
+               }
+       }
+}
+
diff --git a/Crow/src/ParsingException.cs b/Crow/src/ParsingException.cs
new file mode 100644 (file)
index 0000000..1b59698
--- /dev/null
@@ -0,0 +1,30 @@
+using System;
+
+namespace Crow.Coding
+{
+       public class ParserException : Exception
+       {
+               public int Line;
+               public int Column;
+               public string Source;
+               public ParserException(int line, int column, string txt, string source = null)
+                       : base(txt)
+               {
+                       Line = line;
+                       Column = column;
+                       Source = source;
+               }
+               public ParserException(int line, int column, string txt, Exception innerException, string source = null)
+                       : base(txt, innerException)
+               {
+                       Line = line;
+                       Column = column;
+                       Source = source;
+               }
+               public override string ToString ()
+               {
+                       return string.Format("{3}:({0},{1}): {2}", Line, Column, Message, Source);
+               }
+       }
+}
+
diff --git a/Crow/src/PerformanceMeasure.cs b/Crow/src/PerformanceMeasure.cs
new file mode 100644 (file)
index 0000000..3c978e8
--- /dev/null
@@ -0,0 +1,95 @@
+//
+// PerformanceMeasure.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.Diagnostics;
+
+namespace Crow
+{
+       public class PerformanceMeasure : IValueChange {
+               #region IValueChange implementation
+               public event EventHandler<ValueChangeEventArgs> ValueChanged;
+               public virtual void NotifyValueChanged(string MemberName, object _value)
+               {
+                       if (ValueChanged != null)                               
+                               ValueChanged.Invoke(this, new ValueChangeEventArgs(MemberName, _value));
+               }
+               #endregion
+
+               public Stopwatch timer = new Stopwatch ();
+               public string Name;
+               public long current, minimum, maximum, total, cptMeasures;
+               public long cancelLimit;
+
+               public PerformanceMeasure(string name = "unamed", long _cancelLimit = 0){
+                       Name = name;
+                       cancelLimit = _cancelLimit;
+                       ResetStats ();
+               }
+
+               public void StartCycle(){
+                       timer.Restart();
+               }
+               public void StopCycle(){
+                       timer.Stop();
+                       computeStats ();
+               }
+               public void NotifyChanges(){
+                       lock(this){
+                               if (cptMeasures == 0)
+                                       return;
+                               NotifyValueChanged("minimum", minimum);
+                               NotifyValueChanged("maximum", maximum);
+                               NotifyValueChanged("current", current);
+                               //                      NotifyValueChanged("total", total);
+                               //                      NotifyValueChanged("cptMeasures", cptMeasures);
+                               NotifyValueChanged("mean", total / cptMeasures);
+                       }
+               }
+
+               void computeStats(){                    
+                       current = timer.ElapsedTicks;
+                       if (current < cancelLimit)
+                               return;
+                       cptMeasures++;
+                       total += timer.ElapsedTicks;
+                       if (timer.ElapsedTicks < minimum)
+                               minimum = timer.ElapsedTicks;
+                       if (timer.ElapsedTicks > maximum)
+                               maximum = timer.ElapsedTicks;                   
+               }
+               void ResetStats(){
+                       Debug.WriteLine("reset measure cpt:{0}",cptMeasures);
+                       cptMeasures = total = current = maximum = 0;
+                       minimum = long.MaxValue;
+               }
+               void onResetClick(object sender, MouseButtonEventArgs e){
+                       lock(this)
+                               ResetStats();
+               }
+       }
+}
+
diff --git a/Crow/src/Picture.cs b/Crow/src/Picture.cs
new file mode 100644 (file)
index 0000000..f2f4526
--- /dev/null
@@ -0,0 +1,152 @@
+//
+// Picture.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.IO;
+using Cairo;
+using System.Collections.Generic;
+
+namespace Crow
+{
+       /// <summary>
+       /// store data and dimensions for resource sharing
+       /// </summary>
+       internal class sharedPicture {
+               //TODO: restructure this whith clever conceptual classes
+               public object Data;
+               public Size Dims;
+               public sharedPicture (object _data, Size _dims){
+                       Data = _data;
+                       Dims = _dims;
+               }
+       }
+       /// <summary>
+       /// virtual class for loading and drawing picture in the interface
+       /// 
+       /// Every loaded resources are stored in a dictonary with their path as key and shared
+       /// among interface elements
+       /// </summary>
+       public abstract class Picture : Fill
+       {
+               /// <summary>
+               /// share a single store for picture resources among usage in different controls
+               /// </summary>
+               internal static Dictionary<string, sharedPicture> sharedResources = new Dictionary<string, sharedPicture>();
+
+               /// <summary>
+               /// path of the picture
+               /// </summary>
+               public string Path;
+               /// <summary>
+               /// unscaled dimensions fetched on loading
+               /// </summary>
+               public Size Dimensions;
+               /// <summary>
+               /// if true and image has to be scalled, it will be scaled in both direction
+               /// equaly
+               /// </summary>
+               public bool KeepProportions = false;
+               /// <summary>
+               /// allow or not the picture to be scalled on request by the painter
+               /// </summary>
+               public bool Scaled = true;
+
+               #region CTOR
+               /// <summary>
+               /// Initializes a new instance of Picture.
+               /// </summary>
+               public Picture ()
+               {
+               }
+               /// <summary>
+               /// Initializes a new instance of Picture by loading the image pointed by the path argument
+               /// </summary>
+               /// <param name="path">image path, may be embedded</param>
+               public Picture (string path)
+               {
+                       Path = path;
+               }
+               #endregion
+
+               #region Image Loading
+               /// <summary>
+               /// load the image for rendering from the stream given as argument
+               /// </summary>
+               /// <param name="stream">picture stream</param>
+               //public abstract void Load(Interface iface, string path);
+               #endregion
+
+               /// <summary>
+               /// abstract method to paint the image in the rectangle given in arguments according
+               /// to the Scale and keepProportion parameters.
+               /// </summary>
+               /// <param name="gr">drawing Backend context</param>
+               /// <param name="rect">bounds of the target surface to paint</param>
+               /// <param name="subPart">used for svg only</param>
+               public abstract void Paint(Context ctx, Rectangle rect, string subPart = "");
+
+               #region Operators
+               public static implicit operator Picture(string path)
+               {
+                       if (string.IsNullOrEmpty (path))
+                               return null;
+                       
+                       Picture _pic = null;
+
+                       if (path.EndsWith (".svg", true, System.Globalization.CultureInfo.InvariantCulture)) 
+                               _pic = new SvgPicture (path);
+                       else 
+                               _pic = new BmpPicture (path);
+
+                       return _pic;
+               }
+               public static implicit operator string(Picture _pic)
+               {
+                       return _pic == null ? null : _pic.Path;
+               }
+               #endregion
+
+               public static object Parse(string path)
+               {
+                       if (string.IsNullOrEmpty (path))
+                               return null;
+                       
+                       Picture _pic = null;
+
+                       if (path.EndsWith (".svg", true, System.Globalization.CultureInfo.InvariantCulture)) 
+                               _pic = new SvgPicture (path);
+                       else 
+                               _pic = new BmpPicture (path);
+
+                       return _pic;
+               }
+               public override string ToString ()
+               {
+                       return Path;
+               }
+       }
+}
+
diff --git a/Crow/src/Point.cs b/Crow/src/Point.cs
new file mode 100644 (file)
index 0000000..08dd443
--- /dev/null
@@ -0,0 +1,180 @@
+//
+// Point.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace Crow
+{
+    public struct Point
+    {
+        int _x;
+        int _y;
+
+        public int X
+        {
+            get { return _x; }
+            set { _x = value; }
+        }
+        public int Y
+        {
+            get { return _y; }
+            set { _y = value; }
+        }
+        public Point(int x, int y)
+        {
+            _x = x;
+            _y = y;
+        }
+
+               public int Length {
+                       get { return (int)Math.Sqrt (Math.Pow (_x, 2) + Math.Pow (_y, 2)); }
+               }
+               public double LengthD {
+                       get { return Math.Sqrt (Math.Pow (_x, 2) + Math.Pow (_y, 2)); }
+               }
+        public static implicit operator Cairo.Point(Point p)
+        {
+            return new Cairo.Point(p.X, p.Y);
+        }
+        public static implicit operator Cairo.PointD(Point p)
+        {
+            return new Cairo.PointD(p.X, p.Y);
+        }
+        public static implicit operator Point(int i)
+        {
+            return new Point(i, i);
+        }
+        public static Point operator /(Point p, int d)
+        {
+            return new Point(p.X / d, p.Y / d);
+        }
+        public static Point operator *(Point p, int d)
+        {
+            return new Point(p.X * d, p.Y * d);
+        }
+        public static Point operator /(Point p, double d)
+        {
+            return new Point((int)(p.X / d), (int)(p.Y / d));
+        }
+        public static Point operator *(Point p, double d)
+        {
+            return new Point((int)(p.X * d), (int)(p.Y * d));
+        }
+        public static Point operator +(Point p1, Point p2)
+        {
+            return new Point(p1.X + p2.X, p1.Y + p2.Y);
+        }
+               public static Point operator +(Point p, int i)
+               {
+                       return new Point(p.X + i, p.Y + i);
+               }
+        public static Point operator -(Point p1, Point p2)
+        {
+            return new Point(p1.X - p2.X, p1.Y - p2.Y);
+        }
+        public static bool operator >=(Point p1, Point p2)
+        {
+            return p1.X >= p2.X && p1.Y >= p2.Y ? true : false;
+        }
+        public static bool operator <=(Point p1, Point p2)
+        {
+            return p1.X <= p2.X && p1.Y <= p2.Y ? true : false;
+        }
+        public static bool operator ==(Point s, int i)
+        {
+            if (s.X == i && s.Y == i)
+                return true;
+            else
+                return false;
+        }
+        public static bool operator !=(Point s, int i)
+        {
+            if (s.X == i && s.Y == i)
+                return false;
+            else
+                return true;
+        }
+        public static bool operator >(Point s, int i)
+        {
+            if (s.X > i && s.Y > i)
+                return true;
+            else
+                return false;
+        }
+        public static bool operator <(Point s, int i)
+        {
+            if (s.X < i && s.Y < i)
+                return true;
+            else
+                return false;
+        }
+        public static bool operator ==(Point s1, Point s2)
+        {
+            if (s1.X == s2.X  && s1.Y == s2.Y)
+                return true;
+            else
+                return false;
+        }
+        public static bool operator !=(Point s1, Point s2)
+        {
+            if (s1.X == s2.X && s1.Y == s2.Y)
+                return false;
+            else
+                return true;
+        }
+
+        public override string ToString()
+        {
+                       return string.Format("({0},{1})", X, Y);
+        }
+
+        public override bool Equals(object obj)
+        {
+            return base.Equals(obj);
+        }
+        public override int GetHashCode()
+        {
+            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/Crow/src/Rectangle.cs b/Crow/src/Rectangle.cs
new file mode 100644 (file)
index 0000000..b593415
--- /dev/null
@@ -0,0 +1,247 @@
+//
+// Rectangle.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml.Serialization;
+using System.Runtime.InteropServices;
+
+namespace Crow
+{
+       [StructLayout(LayoutKind.Sequential)]
+       public struct Rectangle
+    {
+               internal static Type TRectangle = typeof(Rectangle);
+
+               public int X;
+               public int Y;
+               public int Width;
+               public int Height;
+
+               #region ctor
+               public Rectangle(Point p, Size s): this (p.X, p.Y, s.Width, s.Height)
+               {
+               }
+               public Rectangle(Size s) : this (0, 0, s.Width, s.Height)
+        {
+        }
+        public Rectangle(int x, int y, int width, int height)
+        {
+                       X = x;
+                       Y = y;
+                       Width = width;
+                       Height = height;
+        }
+               #endregion
+
+               #region PROPERTIES
+               [XmlIgnore]public int Left{
+            get { return X; }
+            set { X = value; }
+        }
+               [XmlIgnore]public int Top{
+            get { return Y; }
+            set { Y = value; }
+        }
+               [XmlIgnore]public int Right{
+            get { return X + Width; }
+        }
+               [XmlIgnore]public int Bottom{
+            get { return Y + Height; }
+        }
+               [XmlIgnore]public Size Size{
+            get { return new Size(Width, Height); }
+            set
+            {
+                Width = value.Width;
+                Height = value.Height;
+            }
+        }
+               [XmlIgnore]public Point Position{
+                       get { return new Point(X, Y); }
+                       set
+                       {
+                               X = value.X;
+                               Y = value.Y;
+                       }
+               }
+               [XmlIgnore]public Point TopLeft{
+            set
+            {
+                X = value.X;
+                Y = value.Y;
+            }
+            get { return new Point(X, Y); }
+        }
+               [XmlIgnore]public Point TopRight{
+            get { return new Point(Right, Y); }
+        }
+               [XmlIgnore]public Point BottomLeft{
+            get { return new Point(X, Bottom); }
+        }
+               [XmlIgnore]public Point BottomRight{
+            get { return new Point(Right, Bottom); }
+        }
+               [XmlIgnore]public Point Center
+        {
+            get { return new Point(Left + Width / 2, Top + Height / 2); }
+        }
+               #endregion
+
+               #region FUNCTIONS
+        public void Inflate(int xDelta, int yDelta)
+        {
+            this.X -= xDelta;
+            this.Width += 2 * xDelta;
+            this.Y -= yDelta;
+            this.Height += 2 * yDelta;
+        }
+               public void Inflate(int delta)
+               {
+                       Inflate (delta, delta);
+               }
+               public Rectangle Inflated (int delta) {
+                       return Inflated (delta,delta);
+               }
+               public Rectangle Inflated (int deltaX, int deltaY) {
+                       Rectangle r = this;
+                       r.Inflate (deltaX, deltaY);
+                       return r;
+               }
+        public bool ContainsOrIsEqual(Point p)
+        {
+            return (p.X >= X && p.X <= X + Width && p.Y >= Y && p.Y <= Y + Height) ?
+                true : false;
+        }
+        public bool ContainsOrIsEqual(Rectangle r)
+        {
+            return r.TopLeft >= this.TopLeft && r.BottomRight <= this.BottomRight ? true : false;
+        }
+        public bool Intersect(Rectangle r)
+        {
+            int maxLeft = Math.Max(this.Left, r.Left);
+            int minRight = Math.Min(this.Right, r.Right);
+            int maxTop = Math.Max(this.Top, r.Top);
+            int minBottom = Math.Min(this.Bottom, r.Bottom);
+
+                       return (maxLeft < minRight) && (maxTop < minBottom) ?
+                               true : false;
+        }
+        public Rectangle Intersection(Rectangle r)
+        {
+            Rectangle result = new Rectangle();
+            
+            if (r.Left >= this.Left)
+                result.Left = r.Left;
+            else
+                result.TopLeft = this.TopLeft;
+
+            if (r.Right >= this.Right)
+                result.Width = this.Right - result.Left;
+            else
+                result.Width = r.Right - result.Left;
+
+            if (r.Top >= this.Top)
+                result.Top = r.Top;
+            else
+                result.Top = this.Top;
+
+            if (r.Bottom >= this.Bottom)
+                result.Height = this.Bottom - result.Top;
+            else
+                result.Height = r.Bottom - result.Top;
+
+            return result;
+        }
+               #endregion
+
+        #region operators
+        public static Rectangle operator +(Rectangle r1, Rectangle r2)
+        {
+            int x = Math.Min(r1.X, r2.X);
+            int y = Math.Min(r1.Y, r2.Y);
+            int x2 = Math.Max(r1.Right, r2.Right);
+            int y2 = Math.Max(r1.Bottom, r2.Bottom);
+            return new Rectangle(x, y, x2 - x, y2 - y);
+        }
+               public static Rectangle operator +(Rectangle r, Point p)
+               {
+                       return new Rectangle(r.X + p.X, r.Y + p.Y, r.Width, r.Height);
+               }
+               public static Rectangle operator -(Rectangle r, Point p)
+               {
+                       return new Rectangle(r.X - p.X, r.Y - p.Y, r.Width, r.Height);
+               }
+               public static bool operator ==(Rectangle r1, Rectangle r2)
+        {
+            return r1.TopLeft == r2.TopLeft && r1.Size == r2.Size ? true : false;
+        }
+        public static bool operator !=(Rectangle r1, Rectangle r2)
+        {
+            return r1.TopLeft == r2.TopLeft && r1.Size == r2.Size ? false : true;
+        }
+        #endregion        
+
+               public static readonly Rectangle Zero = new Rectangle(0, 0, 0, 0);
+        public static Rectangle Empty
+        {
+            get { return Zero; }
+        }
+        public override string ToString()
+        {
+            return string.Format("{0},{1},{2},{3}", X, Y, Width, Height);
+        }
+        public static Rectangle Parse(string s)
+        {
+            string[] d = s.Split(new char[] { ',' });
+            return new Rectangle(
+                int.Parse(d[0]),
+                int.Parse(d[1]),
+                int.Parse(d[2]),
+                int.Parse(d[3]));
+        }
+               public override int GetHashCode ()
+               {
+                       unchecked // Overflow is fine, just wrap
+                       {
+                               int hash = 17;
+                               // Suitable nullity checks etc, of course :)
+                               hash = hash * 23 + X.GetHashCode();
+                               hash = hash * 23 + Y.GetHashCode();
+                               hash = hash * 23 + Width.GetHashCode();
+                               hash = hash * 23 + Height.GetHashCode();
+                               return hash;
+                       }
+               }
+               public override bool Equals (object obj)
+               {
+                       return (obj == null || obj.GetType() != TRectangle) ?
+                               false :
+                               this == (Rectangle)obj;
+               }
+    }
+}
diff --git a/Crow/src/ReflexionExtensions.cs b/Crow/src/ReflexionExtensions.cs
new file mode 100644 (file)
index 0000000..8c0b4f2
--- /dev/null
@@ -0,0 +1,62 @@
+//
+// ReflexionExtensions.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.Reflection;
+
+namespace Crow
+{
+       public static class ReflexionExtensions
+       {
+               public static string GetIcon(this MemberInfo mi)
+               {
+                       switch (mi.MemberType) {
+                       case MemberTypes.Constructor:
+                               return "ctor";
+                       case MemberTypes.Event:
+                               return "event";
+                       case MemberTypes.Field:
+                               return "field";
+                       case MemberTypes.Method:
+                               return "method";
+                       case MemberTypes.Property:
+                               return "property";
+                       case MemberTypes.TypeInfo:
+                               break;
+                       case MemberTypes.Custom:
+                               break;
+                       case MemberTypes.NestedType:
+                               break;
+                       case MemberTypes.All:
+                               break;
+                       default:
+                               return "pubfld";
+                       }
+                       return "notset";
+               }
+       }
+}
+
diff --git a/Crow/src/ScrollingEventArgs.cs b/Crow/src/ScrollingEventArgs.cs
new file mode 100644 (file)
index 0000000..3ff4206
--- /dev/null
@@ -0,0 +1,41 @@
+//
+// ScrollingEventArgs.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+
+namespace Crow
+{
+       public class ScrollingEventArgs: EventArgs
+       {
+               public Orientation  Direction;
+
+               public ScrollingEventArgs (Orientation  _direction) : base()
+               {
+                       Direction = _direction;
+               }
+       }
+}
+
diff --git a/Crow/src/SelectionChangeEventArgs.cs b/Crow/src/SelectionChangeEventArgs.cs
new file mode 100644 (file)
index 0000000..988a697
--- /dev/null
@@ -0,0 +1,42 @@
+//
+// SelectionChangeEventArgs.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+
+namespace Crow
+{
+       public class SelectionChangeEventArgs: EventArgs
+       {               
+               public object NewValue;
+
+
+               public SelectionChangeEventArgs (object _newValue) : base()
+               {
+                       NewValue = _newValue;
+               }
+       }
+}
+
diff --git a/Crow/src/Size.cs b/Crow/src/Size.cs
new file mode 100644 (file)
index 0000000..891c1fb
--- /dev/null
@@ -0,0 +1,206 @@
+//
+// Size.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace Crow
+{
+    public struct Size
+    {
+               internal static Type TSize = typeof(Size);
+        public static Size Zero
+        { get { return new Size(0, 0); } }
+
+        int _width;
+        int _height;
+
+        public Size(int width, int height)
+        {
+            _width = width;
+            _height = height;
+        }
+               public Size(int size)
+               {
+                       _width = size;
+                       _height = size;
+               }
+        public int Width
+        {
+            get { return _width; }
+            set { _width = value; }
+        }
+        public int Height
+        {
+            get { return _height; }
+            set { _height = value; }
+        }
+
+               #region operators
+               public static implicit operator Rectangle(Size s)
+               {
+                       return new Rectangle (s);
+               }
+        public static implicit operator Size(int i)
+        {
+            return new Size(i, i);
+        }
+               public static implicit operator string(Size s)
+               {
+                       return s.ToString ();
+               }
+               public static implicit operator Size(string s)
+               {
+                       return string.IsNullOrEmpty (s) ? Size.Zero : Parse (s);
+               }
+               public static bool operator ==(Size s1, Size s2)
+        {
+            if (s1.Width == s2.Width && s1.Height == s2.Height)
+                return true;
+            else
+                return false;
+        }
+        public static bool operator !=(Size s1, Size s2)
+        {
+            if (s1.Width == s2.Width && s1.Height == s2.Height)
+                return false;
+            else
+                return true;
+        }
+        public static bool operator >(Size s1, Size s2)
+        {
+            if (s1.Width > s2.Width && s1.Height > s2.Height)
+                return true;
+            else
+                return false;
+        }
+        public static bool operator >=(Size s1, Size s2)
+        {
+            if (s1.Width >= s2.Width && s1.Height >= s2.Height)
+                return true;
+            else
+                return false;
+        }
+        public static bool operator <(Size s1, Size s2)
+        {
+            if (s1.Width < s2.Width)
+                if (s1.Height <= s2.Height)
+                    return true;
+                else
+                    return false;
+            else if (s1.Width == s2.Width && s1.Height < s2.Height)
+                return true;
+
+            return false;
+        }
+               public static bool operator <(Size s, int i)
+               {
+                       return s.Width < i && s.Height < i ? true : false;
+               }
+               public static bool operator <=(Size s, int i)
+               {
+                       return s.Width <= i && s.Height <= i ? true : false;
+               }
+               public static bool operator >(Size s, int i)
+               {
+                       return s.Width > i && s.Height > i ? true : false;
+               }
+               public static bool operator >=(Size s, int i)
+               {
+                       return s.Width >= i && s.Height >= i ? true : false;
+               }
+               public static bool operator <=(Size s1, Size s2)
+        {
+            if (s1.Width <= s2.Width && s1.Height <= s2.Height)
+                return true;
+            else
+                return false;
+        }
+        public static bool operator ==(Size s, int i)
+        {
+            if (s.Width == i && s.Height == i)
+                return true;
+            else
+                return false;
+        }
+        public static bool operator !=(Size s, int i)
+        {
+            if (s.Width == i && s.Height == i)
+                return false;
+            else
+                return true;
+               }
+               public static Size operator +(Size s1, Size s2)
+               {
+                       return new Size(s1.Width + s2.Width, s1.Height + s2.Height);
+               }
+        public static Size operator +(Size s, int i)
+        {
+            return new Size(s.Width + i, s.Height + i);
+        }
+               public static Size operator *(Size s, int i)
+               {
+                       return new Size(s.Width * i, s.Height * i);
+               }
+               public static Size operator /(Size s, int i)
+               {
+                       return new Size(s.Width / i, s.Height / i);
+               }
+               #endregion
+
+               public override int GetHashCode ()
+               {
+                       unchecked // Overflow is fine, just wrap
+                       {
+                               int hash = 17;
+                               // Suitable nullity checks etc, of course :)
+                               hash = hash * 23 + _width.GetHashCode();
+                               hash = hash * 23 + _height.GetHashCode();
+                               return hash;
+                       }
+               }
+               public override bool Equals (object obj)
+               {
+                       return (obj == null || obj.GetType() != TSize) ?
+                               false :
+                               this == (Size)obj;
+               }
+               public override string ToString()
+               {
+                       return string.Format("{0},{1}", Width, Height);
+               }
+               public static Size Parse(string s)
+               {
+                       string[] d = s.Split(new char[] { ',' });
+                       return d.Length == 1 ? new Size(int.Parse(d[0])) : new Size(
+                               int.Parse(d[0]),
+                               int.Parse(d[1]));
+               }
+       }
+
+}
diff --git a/Crow/src/SolidColor.cs b/Crow/src/SolidColor.cs
new file mode 100644 (file)
index 0000000..d6423d3
--- /dev/null
@@ -0,0 +1,129 @@
+//
+// SolidColor.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Xml.Serialization;
+using System.Reflection;
+using System.Diagnostics;
+using Cairo;
+
+
+
+namespace Crow
+{
+       public class SolidColor : Fill
+    {
+               public Color color = Color.Transparent;
+               #region CTOR
+               public SolidColor(Color c)
+               {
+                       color = c;
+               }
+               #endregion
+
+               #region implemented abstract members of Fill
+
+               public override void SetAsSource (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 is SolidColor ? right is SolidColor ? true : false :
+                               left.color == right.color ? true : false;
+               }
+               public static bool operator !=(SolidColor left, SolidColor right)
+               {
+                       return left is SolidColor ? right is SolidColor ? false : true :
+                               left.color == right.color ? false : true;
+
+               }
+               public override int GetHashCode ()
+               {
+                       return color.GetHashCode();
+               }
+               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/Crow/src/Style.cs b/Crow/src/Style.cs
new file mode 100644 (file)
index 0000000..58f09f3
--- /dev/null
@@ -0,0 +1,59 @@
+//
+// Style.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.Collections.Generic;
+
+namespace Crow
+{
+       public struct FileLocation {
+               public string FilePath;
+               public int Line;
+               public int Column;
+
+               public FileLocation(string filePath, int line, int column){
+                       FilePath = filePath;
+                       Line = line;
+                       Column = column;
+               }
+               public override string ToString ()
+               {
+                       return string.Format ("{0} ({1},{2})", FilePath, Line, Column);
+               }
+       }
+       public class Style : Dictionary<string, object>
+       {
+               #if DESIGN_MODE
+               public Dictionary<string, FileLocation> Locations = new Dictionary<string, FileLocation>();
+               #endif
+               //public Dictionary<string, Style> SubStyles;//TODO:implement substyles for all tags inside a style
+               public Style () : base()
+               {
+               }
+
+       }
+}
+
diff --git a/Crow/src/StyleReader.cs b/Crow/src/StyleReader.cs
new file mode 100644 (file)
index 0000000..c50083e
--- /dev/null
@@ -0,0 +1,186 @@
+//
+// StyleReader.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Reflection;
+using System.Text.RegularExpressions;
+using Crow.Coding;
+
+namespace Crow
+{
+       /// <summary>
+       /// Parser for style files.
+       /// </summary>
+       //TODO: style key shared by different class may use only first encouneter class setter, which can cause bug.
+       public class StyleReader : StreamReader
+       {
+               enum States { init, classNames, members, value, endOfStatement }
+
+               States curState = States.init;
+
+               int column = 1;
+               int line = 1;
+
+               #region Character ValidityCheck
+               static Regex rxValidChar = new Regex(@"\p{Lu}|\p{Ll}|\p{Lt}|\p{Lm}|\p{Lo}|\p{Nl}|\p{Mn}|\p{Mc}|\p{Nd}|\p{Pc}|\p{Cf}");
+               static Regex rxNameStartChar = new Regex(@"_|\p{Lu}|\p{Ll}|\p{Lt}|\p{Lm}|\p{Lo}");                                                                                                                      
+               static Regex rxNameChar = new Regex(@"\p{Lu}|\p{Ll}|\p{Lt}|\p{Lm}|\p{Lo}|\p{Nl}|\p{Mn}|\p{Mc}|\p{Nd}|\p{Pc}|\p{Cf}");
+               static Regex rxDecimal = new Regex(@"[0-9]+");
+               static Regex rxHexadecimal = new Regex(@"[0-9a-fA-F]+");
+
+               public bool nextCharIsValidCharStartName
+               {
+                       get { return rxNameStartChar.IsMatch(new string(new char[]{PeekChar()})); }
+               }
+               public bool nextCharIsValidCharName
+               {
+                       get { return rxNameChar.IsMatch(new string(new char[]{PeekChar()})); }
+               }
+               #endregion
+
+               char ReadChar () {
+                       column++;
+                       return (Char)Read();
+               }
+               char PeekChar () {
+                       return (Char)Peek();
+               }
+               void SkipWhiteSpaceAndLineBreak (){
+                       while (!EndOfStream){                           
+                               if (!PeekChar ().IsWhiteSpaceOrNewLine ())
+                                       break;
+                               if (ReadChar () == '\n') {
+                                       line++;
+                                       column = 0;
+                               }
+                       }
+               }
+
+               public StyleReader (Dictionary<string, Style> styling, Stream stream, string resId)
+                       : base(stream)
+               {                       
+                       string styleKey = resId.Substring (0, resId.Length - 6);
+                       string token = "";
+                       List<string> targetsClasses = new List<string> ();
+                       string currentProperty = "";
+
+                       while (!EndOfStream) {
+                               SkipWhiteSpaceAndLineBreak ();
+                               if (EndOfStream)
+                                       break;
+
+                               switch (Peek()) {
+                               case '/':
+                                       ReadChar ();
+                                       if (PeekChar () != '/')
+                                               throw new ParserException (line, column, "Unexpected char '/'", resId);
+                                       ReadLine ();
+                                       break;
+                               case ',':
+                                       ReadChar ();
+                                       if (!(curState == States.init || curState == States.classNames) || string.IsNullOrEmpty (token))
+                                               throw new ParserException (line, column, "Unexpected char ','", resId);
+                                       targetsClasses.Add (token);
+                                       token = "";
+                                       curState = States.classNames;
+                                       break;
+                               case '{':
+                                       ReadChar ();
+                                       if (!(curState == States.init || curState == States.classNames) || string.IsNullOrEmpty (token))
+                                               throw new ParserException (line, column, "Unexpected char '{'", resId);
+                                       targetsClasses.Add (token);
+                                       token = "";
+                                       curState = States.members;
+                                       break;
+                               case '}':
+                                       ReadChar ();
+                                       if (curState != States.members)
+                                               throw new ParserException (line, column, "Unexpected char '}'", resId);
+                                       curState = States.classNames;
+                                       targetsClasses.Clear ();
+                                       break;
+                               case '=':
+                                       ReadChar ();
+                                       if (!(curState == States.init || curState == States.members))
+                                               throw new ParserException (line, column, "Unexpected char '='", resId);
+                                       currentProperty = token;
+                                       token = "";
+                                       curState = States.value;
+                                       break;
+                               case '"':
+                                       if (curState != States.value)
+                                               throw new ParserException (line, column, "Unexpected char '\"'", resId);                                        
+                                       ReadChar ();
+
+                                       while (!EndOfStream) {
+                                               char c = PeekChar();
+                                               if (c == '\"') {
+                                                       ReadChar ();
+                                                       break;
+                                               }
+                                               token += ReadChar();
+                                               if (c == '\\' && !EndOfStream)
+                                                       token += ReadChar();                                            
+                                       }
+                                       curState = States.endOfStatement;
+                                       break;
+                               case ';':
+                                       if (curState != States.endOfStatement)
+                                               throw new ParserException (line, column, "Unexpected end of statement", resId);                                 
+                                       ReadChar ();
+                                       foreach (string tc in targetsClasses) {
+                                               if (!styling.ContainsKey (tc))
+                                                       styling [tc] = new Style ();
+                                               else if (styling [tc].ContainsKey (currentProperty))
+                                                       continue;
+                                               styling [tc] [currentProperty] = token;
+                                               #if DESIGN_MODE
+                                               styling [tc].Locations[currentProperty] = new FileLocation(resId, line,column);
+                                               #endif
+                                               //System.Diagnostics.Debug.WriteLine ("Style: {3} : {0}.{1} = {2}", tc, currentProperty, token, resId);
+                                       }
+                                       token = "";
+                                       curState = States.members;
+                                       break;
+                               default:
+                                       if (curState == States.value)
+                                               throw new ParserException (line, column, "expecting value enclosed in '\"'", resId);
+                                       if (curState == States.endOfStatement)
+                                               throw new ParserException (line, column, "expecting end of statement", resId);
+
+                                       if (nextCharIsValidCharStartName) {
+                                               token += ReadChar();
+                                               while (nextCharIsValidCharName)
+                                                       token += ReadChar();
+                                       }
+                                       break;
+                               }
+                       }
+               }
+       }
+}
diff --git a/Crow/src/SvgPicture.cs b/Crow/src/SvgPicture.cs
new file mode 100644 (file)
index 0000000..dee6c8e
--- /dev/null
@@ -0,0 +1,152 @@
+//
+// SvgPicture.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.IO;
+using Cairo;
+
+namespace Crow
+{
+       /// <summary>
+       /// Derived from FILL for loading and drawing SVG images in the interface
+       /// </summary>
+       public class SvgPicture : Picture
+       {
+               Rsvg.Handle hSVG;
+
+               #region CTOR
+               /// <summary>
+               /// Initializes a new instance of SvgPicture.
+               /// </summary>
+               public SvgPicture ()
+               {}
+               /// <summary>
+               /// Initializes a new instance of SvgPicture by loading the SVG file pointed by the path argument
+               /// </summary>
+               /// <param name="path">image path, may be embedded</param>
+               public SvgPicture (string path) : base(path)
+               {
+                       Load ();
+               }
+               #endregion
+
+               void Load ()
+               {                       
+                       if (sharedResources.ContainsKey (Path)) {
+                               sharedPicture sp = sharedResources [Path];
+                               hSVG = (Rsvg.Handle)sp.Data;
+                               Dimensions = sp.Dims;
+                               return;
+                       }
+                       using (Stream stream = Interface.StaticGetStreamFromPath (Path)) {
+                               using (MemoryStream ms = new MemoryStream ()) {
+                                       stream.CopyTo (ms);
+
+                                       hSVG = new Rsvg.Handle (ms.ToArray ());
+                                       Dimensions = new Size (hSVG.Dimensions.Width, hSVG.Dimensions.Height);
+                               }
+                       }
+                       sharedResources [Path] = new sharedPicture (hSVG, Dimensions);
+               }
+
+               public void LoadSvgFragment (string fragment) {                 
+                       hSVG = new Rsvg.Handle (System.Text.Encoding.Unicode.GetBytes(fragment));
+                       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 (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
+
+               /// <summary>
+               /// paint the image in the rectangle given in arguments according
+               /// to the Scale and keepProportion parameters.
+               /// </summary>
+               /// <param name="gr">drawing Backend context</param>
+               /// <param name="rect">bounds of the target surface to paint</param>
+               /// <param name="subPart">limit rendering to svg part named 'subPart'</param>
+               public override void Paint (Context gr, Rectangle rect, string subPart = "")
+               {
+                       if (hSVG == null)
+                               return;
+                       float widthRatio = 1f;
+                       float heightRatio = 1f;
+
+                       if (Scaled) {
+                               widthRatio = (float)rect.Width / Dimensions.Width;
+                               heightRatio = (float)rect.Height / Dimensions.Height;
+                       }
+                       if (KeepProportions) {
+                               if (widthRatio < heightRatio)
+                                       heightRatio = widthRatio;
+                               else
+                                       widthRatio = heightRatio;
+                       }
+                               
+                       gr.Save ();
+
+                       gr.Translate (rect.Left,rect.Top);
+                       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 ();                  
+               }
+       }
+}
+
diff --git a/Crow/src/TextChangeEventArgs.cs b/Crow/src/TextChangeEventArgs.cs
new file mode 100644 (file)
index 0000000..33ca405
--- /dev/null
@@ -0,0 +1,41 @@
+//
+// TextChangeEventArgs.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+
+namespace Crow
+{
+       public class TextChangeEventArgs: EventArgs
+       {
+               public String Text;
+
+               public TextChangeEventArgs (string _newValue) : base()
+               {
+                       Text = _newValue;
+               }
+       }
+}
+
diff --git a/Crow/src/ValueChangeEventArgs.cs b/Crow/src/ValueChangeEventArgs.cs
new file mode 100644 (file)
index 0000000..e8293de
--- /dev/null
@@ -0,0 +1,44 @@
+//
+// ValueChangeEventArgs.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+
+namespace Crow
+{
+       public class ValueChangeEventArgs: EventArgs
+       {
+               public string MemberName;
+               public object NewValue;
+
+
+               public ValueChangeEventArgs (string _memberName, object _newValue) : base()
+               {
+                       MemberName = _memberName;
+                       NewValue = _newValue;
+               }
+       }
+}
+
diff --git a/Crow/src/XCursor.cs b/Crow/src/XCursor.cs
new file mode 100644 (file)
index 0000000..1cca510
--- /dev/null
@@ -0,0 +1,151 @@
+//
+// XCursor.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.IO;
+using System.Diagnostics;
+using System.Collections.Generic;
+
+namespace Crow
+{
+       public class XCursorFile
+       {
+               const uint XC_TYPE_IMG = 0xfffd0002;
+
+               class toc
+               {
+                       public uint type;
+                       public uint subtype;
+                       public uint pos;
+
+                       public toc(BinaryReader sr)
+                       {
+                               type = sr.ReadUInt32();
+                               subtype = sr.ReadUInt32();
+                               pos = sr.ReadUInt32();
+                       }
+               }
+
+               public List<XCursor> Cursors = new List<XCursor>();
+
+
+               static XCursorFile loadFromStream(Stream s)
+               {
+                       List<toc> tocList = new List<toc> ();
+                       XCursorFile tmp = new XCursorFile ();
+
+                       using (BinaryReader sr = new BinaryReader (s)) {
+                               byte[] data;
+                               //magic: CARD32 ’Xcur’ (0x58, 0x63, 0x75, 0x72)
+                               if (new string (sr.ReadChars (4)) != "Xcur") {
+                                       Debug.WriteLine ("XCursor Load error: Wrong magic");
+                                       return null;
+                               }
+                               //header: CARD32 bytes in this header
+                               uint headerLength = sr.ReadUInt32 ();
+                               //version: CARD32 file version number
+                               uint version = sr.ReadUInt32 ();
+                               //ntoc: CARD32 number of toc entries
+                               uint nbToc = sr.ReadUInt32 ();
+                               //toc: LISTofTOC table of contents
+                               for (uint i = 0; i < nbToc; i++) {
+                                       tocList.Add (new toc (sr));
+                               }
+
+                               foreach (toc t in tocList) {
+                                       if (t.type != XC_TYPE_IMG)
+                                               continue;
+
+                                       sr.BaseStream.Seek (t.pos, SeekOrigin.Begin);
+                                       tmp.Cursors.Add(imageLoad (sr));                                                
+                               }
+                       }
+                       return tmp;
+               }
+
+               public static XCursorFile Load(Interface iface, string path)
+               {
+                       return loadFromStream (iface.GetStreamFromPath (path));
+               }
+
+               static XCursor imageLoad(BinaryReader sr)
+               {
+                       XCursor tmp = new XCursor();
+                       //                      header: 36 Image headers are 36 bytes
+                       uint header = sr.ReadUInt32();
+                       //                      type: 0xfffd0002 Image type is 0xfffd0002
+                       uint type = sr.ReadUInt32();
+                       //                      subtype: CARD32 Image subtype is the nominal size
+                       uint subtype = sr.ReadUInt32();
+                       //                      version: 1
+                       uint version = sr.ReadUInt32();
+                       //                      width: CARD32 Must be less than or equal to 0x7fff
+                       tmp.Width = sr.ReadUInt32();
+                       //                      height: CARD32 Must be less than or equal to 0x7fff
+                       tmp.Height = sr.ReadUInt32();
+                       //                      xhot: CARD32 Must be less than or equal to width
+                       tmp.Xhot = sr.ReadUInt32();
+                       //                      yhot: CARD32 Must be less than or equal to height
+                       tmp.Yhot = sr.ReadUInt32();
+                       //                      delay: CARD32 Delay between animation frames in milliseconds
+                       tmp.Delay = sr.ReadUInt32();
+                       //                      pixels: LISTofCARD32 Packed ARGB format pixels
+                       tmp.data = sr.ReadBytes((int)(tmp.Width * tmp.Height * 4));
+                       return tmp;
+               }
+       }
+       public class XCursor
+       {
+               public static XCursor Default;
+               public static XCursor Cross;
+               public static XCursor Arrow;
+               public static XCursor Text;
+               public static XCursor SW;
+               public static XCursor SE;
+               public static XCursor NW;
+               public static XCursor NE;
+               public static XCursor N;
+               public static XCursor S;
+               public static XCursor V;
+               public static XCursor H;
+
+               public uint Width;
+               public uint Height;
+               public uint Xhot;
+               public uint Yhot;
+               public uint Delay;
+               public byte[] data;
+
+               public XCursor ()
+               {
+               }
+//             public static implicit operator MouseCursor(XCursor xc)
+//             {
+//                     return new MouseCursor((int)xc.Xhot, (int)xc.Yhot, (int)xc.Width, (int)xc.Height,xc.data);
+//             }
+       }
+}
+
diff --git a/Crow/src/backends/IBackend.cs b/Crow/src/backends/IBackend.cs
new file mode 100644 (file)
index 0000000..2555d56
--- /dev/null
@@ -0,0 +1,38 @@
+//
+// IBackend.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp_bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+using System;
+
+namespace Crow
+{
+       public interface IBackend
+       {
+               void Init(Interface iFace);
+               void CleanUp();
+               void Flush();
+               void ProcessEvents();
+       }
+}
+
diff --git a/Crow/src/backends/IKeyboard.cs b/Crow/src/backends/IKeyboard.cs
new file mode 100644 (file)
index 0000000..d04655e
--- /dev/null
@@ -0,0 +1,47 @@
+//
+// IKeyboard.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp_bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+using System;
+
+namespace Crow
+{
+       public interface IKeyboard
+       {
+               event EventHandler<KeyEventArgs> KeyDown;
+               event EventHandler<KeyEventArgs> KeyUp;
+               event EventHandler<KeyPressEventArgs> KeyPress;
+
+
+               void HandleEvent (uint Keycode, bool pressed);
+
+               bool IsDown (Key key);
+               bool Shift { get; }
+               bool Ctrl { get; }
+               bool Alt { get; }
+
+               void Destroy ();
+       }
+}
+
diff --git a/Crow/src/backends/xcb/XCBBackend.cs b/Crow/src/backends/xcb/XCBBackend.cs
new file mode 100644 (file)
index 0000000..4d0a2a8
--- /dev/null
@@ -0,0 +1,490 @@
+//
+// XLibBackend.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp_bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+using System;
+using System.Diagnostics;
+using System.Runtime.InteropServices;
+using System.Text;
+
+
+
+namespace Crow.XCB
+{      
+       using xcb_window_t = System.UInt32;
+       using xcb_pixmap_t = System.UInt32;
+       using xcb_cursor_t = System.UInt32;
+       using xcb_font_t = System.UInt32;
+       using xcb_colormap_t = System.UInt32;
+       using xcb_atom_t = System.UInt32;
+       using xcb_drawable_t = System.UInt32;
+       using xcb_visualid_t = System.UInt32;
+       using xcb_keysym_t = System.UInt32;
+       using xcb_keycode_t = System.Byte;
+       using xcb_timestamp_t = System.UInt32;
+
+       using xcb_void_cookie_t = System.UInt32;
+
+       public class XCBBackend : IBackend
+       {
+               const byte XCB_COPY_FROM_PARENT = 0;
+
+
+               enum xcb_window_class_t : ushort {
+                       COPY_FROM_PARENT = 0,
+                       INPUT_OUTPUT = 1,
+                       INPUT_ONLY = 2
+               }
+
+               enum xcb_button_t : byte {
+                       Left = 1,
+                       Middle,
+                       Right,
+                       WheelUp,
+                       WheelDown,
+                       But6,
+                       But7,
+                       But8,
+                       But9,
+                       But10,
+               }
+
+               [Flags]
+               enum xcb_event_mask_t : uint {
+                       NO_EVENT = 0,
+                       KEY_PRESS = 1,
+                       KEY_RELEASE = 2,
+                       BUTTON_PRESS = 4,
+                       BUTTON_RELEASE = 8,
+                       ENTER_WINDOW = 16,
+                       LEAVE_WINDOW = 32,
+                       POINTER_MOTION = 64,
+                       POINTER_MOTION_HINT = 128,
+                       BUTTON_1_MOTION = 256,
+                       BUTTON_2_MOTION = 512,
+                       BUTTON_3_MOTION = 1024,
+                       BUTTON_4_MOTION = 2048,
+                       BUTTON_5_MOTION = 4096,
+                       BUTTON_MOTION = 8192,
+                       KEYMAP_STATE = 16384,
+                       EXPOSURE = 32768,
+                       VISIBILITY_CHANGE = 65536,
+                       STRUCTURE_NOTIFY = 131072,
+                       RESIZE_REDIRECT = 262144,
+                       SUBSTRUCTURE_NOTIFY = 524288,
+                       SUBSTRUCTURE_REDIRECT = 1048576,
+                       FOCUS_CHANGE = 2097152,
+                       PROPERTY_CHANGE = 4194304,
+                       COLOR_MAP_CHANGE = 8388608,
+                       OWNER_GRAB_BUTTON = 16777216
+               }
+
+               enum xcb_event_type : byte {
+                       KEY_PRESS = 2,
+                       KEY_RELEASE,
+                       BUTTON_PRESS,
+                       BUTTON_RELEASE,
+                       MOTION_NOTIFY,
+                       ENTER_NOTIFY,
+                       LEAVE_NOTIFY,
+                       FOCUS_IN,
+                       FOCUS_OUT,
+                       KEYMAP_NOTIFY,
+                       EXPOSE,
+                       GRAPHICS_EXPOSURE,
+                       NO_EXPOSURE,
+                       VISIBILITY_NOTIFY,
+                       CREATE_NOTIFY,
+                       DESTROY_NOTIFY,
+                       UNMAP_NOTIFY,
+                       MAP_NOTIFY,
+                       MAP_REQUEST,
+                       REPARENT_NOTIFY,
+                       CONFIGURE_NOTIFY,
+                       CONFIGURE_REQUEST,
+                       GRAVITY_NOTIFY,
+                       RESIZE_REQUEST,
+                       CIRCULATE_NOTIFY,
+                       CIRCULATE_REQUEST,
+                       PROPERTY_NOTIFY,
+                       SELECTION_CLEAR,
+                       SELECTION_REQUEST,
+                       SELECTION_NOTIFY,
+                       COLORMAP_NOTIFY,
+                       CLIENT_MESSAGE,
+                       MAPPING_NOTIFY,
+                       GE_GENERIC,
+               }
+               [Flags]
+               enum xcb_cw_t : uint {
+                       BACK_PIXMAP = 1,
+                       BACK_PIXEL = 2,
+                       BORDER_PIXMAP = 4,
+                       BORDER_PIXEL = 8,
+                       BIT_GRAVITY = 16,
+                       WIN_GRAVITY = 32,
+                       BACKING_STORE = 64,
+                       BACKING_PLANES = 128,
+                       BACKING_PIXEL = 256,
+                       OVERRIDE_REDIRECT = 512,
+                       SAVE_UNDER = 1024,
+                       EVENT_MASK = 2048,
+                       DONT_PROPAGATE = 4096,
+                       COLORMAP = 8192,
+                       CURSOR = 16384
+               }
+
+               [StructLayout(LayoutKind.Sequential)]
+               struct xcb_generic_event_t{
+                       public xcb_event_type response_type;  /**< Type of the response */
+                       public byte pad0;           /**< Padding */
+                       public UInt16 sequence;       /**< Sequence number */
+                       [MarshalAs(UnmanagedType.ByValArray, SizeConst = 7)]
+                       UInt32[] pad;
+                       public UInt32 full_sequence;  /**< full sequence */
+               }
+
+               [StructLayout(LayoutKind.Explicit, Size = 32)]
+               struct xcb_event_t{
+                       [FieldOffsetAttribute(0)]
+                       public xcb_event_type response_type;
+
+                       [FieldOffsetAttribute(1)]
+                       public byte detail;
+                       [FieldOffsetAttribute(1)]
+                       public xcb_keycode_t keycode;
+                       [FieldOffsetAttribute(1)]
+                       public xcb_button_t button;
+
+                       [FieldOffsetAttribute(2)]
+                       public UInt16 sequence;
+                       [FieldOffsetAttribute(4)]
+                       public xcb_timestamp_t time;
+                       [FieldOffsetAttribute(8)]
+                       public xcb_window_t root;
+
+                       //expose event fields
+                       [FieldOffsetAttribute(4)]
+                       public xcb_window_t window;
+                       [FieldOffsetAttribute(8)]
+                       public UInt16 x;
+                       [FieldOffsetAttribute(10)]
+                       public UInt16 y;
+                       [FieldOffsetAttribute(12)]
+                       public UInt16 width;
+                       [FieldOffsetAttribute(14)]
+                       public UInt16 height;
+                       [FieldOffsetAttribute(14)]
+                       public UInt16 count;
+                       /// 
+
+                       [FieldOffsetAttribute(12)]
+                       public xcb_window_t evt;
+                       [FieldOffsetAttribute(16)]
+                       public xcb_window_t child;
+                       [FieldOffsetAttribute(20)]
+                       public UInt16 root_x;
+                       [FieldOffsetAttribute(22)]
+                       public UInt16 root_y;
+                       [FieldOffsetAttribute(24)]
+                       public UInt16 event_x;
+                       [FieldOffsetAttribute(26)]
+                       public UInt16 event_y;
+                       [FieldOffsetAttribute(28)]
+                       public UInt16 state;
+                       [FieldOffsetAttribute(30)]
+                       public byte same_screen;
+
+                       [FieldOffsetAttribute(31)]
+                       public byte same_screen_focus;
+               }
+
+               [StructLayout(LayoutKind.Sequential)]
+               struct xcb_key_press_event_t {
+                       public xcb_event_type response_type;
+                       public xcb_keycode_t detail;
+                       public UInt16 sequence;
+                       public xcb_timestamp_t time;
+                       public xcb_window_t root;
+                       public xcb_window_t evt;
+                       public xcb_window_t child;
+                       public UInt16 root_x;
+                       public UInt16 root_y;
+                       public UInt16 event_x;
+                       public UInt16 event_y;
+                       public UInt16 state;
+                       public byte same_screen;
+                       byte pad0;
+               }
+               [StructLayout(LayoutKind.Sequential)]
+               struct xcb_button_press_event_t {
+                       public xcb_event_type response_type;
+                       public xcb_button_t detail;
+                       public UInt16 sequence;
+                       public xcb_timestamp_t time;
+                       public xcb_window_t root;
+                       public xcb_window_t evt;
+                       public xcb_window_t child;
+                       public UInt16 root_x;
+                       public UInt16 root_y;
+                       public UInt16 event_x;
+                       public UInt16 event_y;
+                       public UInt16 state;
+                       public byte same_screen;
+                       byte pad0;
+               }
+
+               [StructLayout(LayoutKind.Sequential)]
+               struct xcb_motion_notify_event_t {
+                       public xcb_event_type response_type;
+                       public byte detail;
+                       public UInt16 sequence;
+                       public xcb_timestamp_t time;
+                       public xcb_window_t root;
+                       public xcb_window_t evt;
+                       public xcb_window_t child;
+                       public UInt16 root_x;
+                       public UInt16 root_y;
+                       public UInt16 event_x;
+                       public UInt16 event_y;
+                       public UInt16 state;
+                       public byte same_screen;
+                       byte pad0;
+               }
+               [StructLayout(LayoutKind.Sequential)]
+               struct xcb_iterator_t {
+                       public IntPtr data;
+                       public int rem;
+                       public int index;
+               }
+
+               [StructLayout(LayoutKind.Sequential)]
+               struct xcb_screen_t {
+                       public xcb_window_t root;
+                       public xcb_colormap_t default_colormap;
+                       public UInt32 white_pixel;
+                       public UInt32 black_pixel;
+                       public UInt32 current_input_masks;
+                       public UInt16 width_in_pixels;
+                       public UInt16 height_in_pixels;
+                       public UInt16 width_in_millimeters;
+                       public UInt16 height_in_millimeters;
+                       public UInt16 min_installed_maps;
+                       public UInt16 max_installed_maps;
+                       public xcb_visualid_t root_visual;
+                       public byte backing_stores;
+                       public byte save_unders;
+                       public byte root_depth;
+                       public byte allowed_depths_len;
+               }
+
+               [StructLayout(LayoutKind.Sequential)]
+               struct xcb_visualtype_t {
+                       public xcb_visualid_t visual_id;
+                       public byte _class;
+                       public byte  bits_per_rgb_value;
+                       public UInt16 colormap_entries;
+                       public UInt32 red_mask;
+                       public UInt32 green_mask;
+                       public UInt32 blue_mask;
+                       [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
+                       byte[] pad;
+               }
+
+               [StructLayout(LayoutKind.Sequential)]
+               struct xcb_generic_reply_t{
+                       public byte response_type;  /**< Type of the response */
+                       byte pad0;           /**< Padding */
+                       public UInt16 sequence;       /**< Sequence number */
+                       public UInt32 length;         /**< Length of the response */
+               }
+
+
+
+               #region pinvoke XCB
+               [DllImportAttribute("xcb")]
+               static extern IntPtr xcb_connect(string displayName, IntPtr screenNum);
+               [DllImportAttribute("xcb")]
+               static extern IntPtr xcb_get_setup(IntPtr connection);           
+               [DllImportAttribute("xcb")]
+               static extern IntPtr xcb_flush(IntPtr connection);
+               [DllImportAttribute("xcb")]
+               static extern UInt32 xcb_generate_id(IntPtr connection);
+
+               [DllImportAttribute("xcb")]
+               static extern xcb_iterator_t xcb_setup_roots_iterator(IntPtr setup);
+               [DllImportAttribute("xcb")]
+               static extern xcb_iterator_t xcb_screen_allowed_depths_iterator(IntPtr scr);
+               [DllImportAttribute("xcb")]
+               static extern xcb_iterator_t xcb_depth_visuals_iterator(IntPtr depth);
+
+               [DllImportAttribute("xcb")]
+               static extern void xcb_screen_next(ref xcb_iterator_t scr_iterator);
+               [DllImportAttribute("xcb")]
+               static extern void xcb_depth_next(ref xcb_iterator_t depth_iterator);
+               [DllImportAttribute("xcb")]
+               static extern void xcb_visualtype_next(ref xcb_iterator_t depth_visual_iterator);
+
+               [DllImportAttribute("xcb")]
+               static extern xcb_void_cookie_t xcb_create_window(IntPtr connection, byte depth, xcb_window_t win, UInt32 parent,
+                       Int16 x, Int16 y, UInt16 width, UInt16 height, UInt16 border,
+                       xcb_window_class_t _class, xcb_visualid_t visual, xcb_cw_t mask, IntPtr valueList);
+               [DllImportAttribute("xcb")]
+               static extern xcb_void_cookie_t xcb_map_window(IntPtr conn, xcb_window_t window);
+               [DllImportAttribute("xcb")]
+               static extern void xcb_disconnect(IntPtr connection);
+
+               [DllImportAttribute("xcb")]
+               static extern IntPtr xcb_poll_for_event(IntPtr connection);
+
+
+               #endregion
+
+               Interface iFace;
+
+               IntPtr conn;
+
+
+               #region IBackend implementation
+               public void Init (Interface _iFace)
+               {
+                       iFace = _iFace;
+
+                       conn = xcb_connect (null, IntPtr.Zero);
+
+
+                       iFace.Keyboard = new  XKB.XCBKeyboard (conn);
+
+                       xcb_iterator_t scr_it = xcb_setup_roots_iterator (xcb_get_setup (conn));
+                       IntPtr screen = scr_it.data;
+
+                       xcb_screen_t scr = (xcb_screen_t)Marshal.PtrToStructure (screen, typeof(xcb_screen_t));
+
+                       xcb_window_t win = xcb_generate_id (conn);
+
+                       xcb_cw_t mask = xcb_cw_t.BACK_PIXEL | xcb_cw_t.EVENT_MASK;
+                       uint[] values = {
+                               scr.black_pixel,
+                               (uint)(
+                                       xcb_event_mask_t.EXPOSURE |
+                                       xcb_event_mask_t.POINTER_MOTION |
+                                       xcb_event_mask_t.BUTTON_PRESS |
+                                       xcb_event_mask_t.BUTTON_RELEASE |
+                                       xcb_event_mask_t.KEY_PRESS |
+                                       xcb_event_mask_t.KEY_RELEASE
+                               )
+                       };
+
+                       IntPtr intPtr = IntPtr.Zero;
+
+                       unsafe 
+                       {
+                               fixed(uint* pValues = values)
+                               intPtr = new IntPtr((void *) pValues);
+                               xcb_create_window (conn, XCB_COPY_FROM_PARENT, win, scr.root, 0,0,(ushort)iFace.ClientRectangle.Width, (ushort)iFace.ClientRectangle.Height,0,
+                                       xcb_window_class_t.INPUT_OUTPUT, scr.root_visual, mask, intPtr);
+                       }
+
+
+                       xcb_map_window (conn, win);
+
+                       xcb_flush (conn);
+
+
+                       IntPtr visual = findVisual (scr_it, scr.root_visual);   
+
+
+                       iFace.surf = new Cairo.XcbSurface (conn, win, visual, iFace.ClientRectangle.Width, iFace.ClientRectangle.Height);
+               }
+
+               public void CleanUp ()
+               {
+                       iFace.Keyboard.Destroy ();
+
+                       xcb_disconnect (conn);  
+               }
+               public void Flush () {
+                       xcb_flush (conn);
+               }
+
+               public void ProcessEvents ()
+               {
+                       IntPtr evtPtr = xcb_poll_for_event (conn);
+                       if (evtPtr == IntPtr.Zero)
+                               return;
+                       xcb_event_t evt = (xcb_event_t)Marshal.PtrToStructure (evtPtr, typeof(xcb_event_t));
+
+                       switch (evt.response_type) {
+                       case xcb_event_type.EXPOSE:
+                               if (evt.width > 0)
+                                       iFace.ProcessResize (new Rectangle (0, 0, evt.width, evt.height));
+                               break;
+                       case xcb_event_type.MOTION_NOTIFY:
+                               iFace.ProcessMouseMove (evt.event_x, evt.event_y);
+                               break;
+                       case xcb_event_type.BUTTON_PRESS:
+                               if (evt.button == xcb_button_t.WheelUp)
+                                       iFace.ProcessMouseWheelChanged (Interface.WheelIncrement);
+                               else if(evt.button == xcb_button_t.WheelDown)
+                                       iFace.ProcessMouseWheelChanged (-Interface.WheelIncrement);
+                               else
+                                       iFace.ProcessMouseButtonDown (evt.detail - 1);                          
+                               break;
+                       case xcb_event_type.BUTTON_RELEASE:
+                               if (evt.button == xcb_button_t.WheelUp || evt.button == xcb_button_t.WheelDown)
+                                       break;
+                               iFace.ProcessMouseButtonUp (evt.detail - 1);
+                               break;
+                       case xcb_event_type.KEY_PRESS:
+                               iFace.Keyboard.HandleEvent (evt.keycode, true);
+                               break;
+                       case xcb_event_type.KEY_RELEASE:
+                               iFace.Keyboard.HandleEvent (evt.keycode, false);
+                               break;
+                       default:
+                               Console.WriteLine ("unknown event");
+                               break;
+                       }
+               }
+
+               #endregion
+
+               static IntPtr findVisual (xcb_iterator_t scr_it, xcb_visualid_t visualId){
+                       for (; scr_it.rem > 0; xcb_screen_next (ref scr_it)) {
+                               xcb_iterator_t depth_it = xcb_screen_allowed_depths_iterator (scr_it.data);
+                               for (; depth_it.rem > 0; xcb_depth_next (ref depth_it)) {
+                                       xcb_iterator_t visual_it = xcb_depth_visuals_iterator (depth_it.data);
+                                       for (; visual_it.rem > 0; xcb_visualtype_next (ref visual_it)) {
+                                               xcb_visualtype_t visual = (xcb_visualtype_t)Marshal.PtrToStructure (visual_it.data, typeof(xcb_visualtype_t));
+                                               if (visualId == visual.visual_id)
+                                                       return visual_it.data;
+                                       }
+                               }
+                       }
+                       return IntPtr.Zero;
+               }
+
+       }
+}
+
diff --git a/Crow/src/backends/xcb/XCBKeyboard.cs b/Crow/src/backends/xcb/XCBKeyboard.cs
new file mode 100644 (file)
index 0000000..c7484f5
--- /dev/null
@@ -0,0 +1,2608 @@
+//
+// XCBKeyboard.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp_bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+using System;
+using System.Runtime.InteropServices;
+
+namespace Crow.XKB
+{
+       using xkb_keycode_t = System.UInt32;
+       using xkb_mod_index_t = System.UInt32;
+
+       public class XCBKeyboard : IKeyboard
+       {
+               enum xkb_keysym : uint {
+                       NoSymbol                                                = 0x000000,
+                       VoidSymbol                                              = 0xffffff,
+                       BackSpace                                               = 0xff08,
+                       Tab                                                             = 0xff09,
+                       Linefeed                                                = 0xff0a,
+                       Clear                                                   = 0xff0b,
+                       Return                                                  = 0xff0d,
+                       Pause                                                   = 0xff13,
+                       Scroll_Lock                                             = 0xff14,
+                       Sys_Req                                                 = 0xff15,
+                       Escape                                                  = 0xff1b,
+                       Delete                                                  = 0xffff,
+                       Multi_key                                               = 0xff20,
+                       Codeinput                                               = 0xff37,
+                       SingleCandidate                                 = 0xff3c,
+                       MultipleCandidate                               = 0xff3d,
+                       PreviousCandidate                               = 0xff3e,
+                       Kanji                                                   = 0xff21,
+                       Muhenkan                                                = 0xff22,
+                       Henkan_Mode                                             = 0xff23,
+                       Henkan                                                  = 0xff23,
+                       Romaji                                                  = 0xff24,
+                       Hiragana                                                = 0xff25,
+                       Katakana                                                = 0xff26,
+                       Hiragana_Katakana                               = 0xff27,
+                       Zenkaku                                                 = 0xff28,
+                       Hankaku                                                 = 0xff29,
+                       Zenkaku_Hankaku                                 = 0xff2a,
+                       Touroku                                                 = 0xff2b,
+                       Massyo                                                  = 0xff2c,
+                       Kana_Lock                                               = 0xff2d,
+                       Kana_Shift                                              = 0xff2e,
+                       Eisu_Shift                                              = 0xff2f,
+                       Eisu_toggle                                             = 0xff30,
+                       Kanji_Bangou                                    = 0xff37,
+                       Zen_Koho                                                = 0xff3d,
+                       Mae_Koho                                                = 0xff3e,
+                       Home                                                    = 0xff50,
+                       Left                                                    = 0xff51,
+                       Up                                                              = 0xff52,
+                       Right                                                   = 0xff53,
+                       Down                                                    = 0xff54,
+                       Prior                                                   = 0xff55,
+                       Page_Up                                                 = 0xff55,
+                       Next                                                    = 0xff56,
+                       Page_Down                                               = 0xff56,
+                       End                                                             = 0xff57,
+                       Begin                                                   = 0xff58,
+                       Select                                                  = 0xff60,
+                       Print                                                   = 0xff61,
+                       Execute                                                 = 0xff62,
+                       Insert                                                  = 0xff63,
+                       Undo                                                    = 0xff65,
+                       Redo                                                    = 0xff66,
+                       Menu                                                    = 0xff67,
+                       Find                                                    = 0xff68,
+                       Cancel                                                  = 0xff69,
+                       Help                                                    = 0xff6a,
+                       Break                                                   = 0xff6b,
+                       Mode_switch                                             = 0xff7e,
+                       script_switch                                   = 0xff7e,
+                       Num_Lock                                                = 0xff7f,
+                       KP_Space                                                = 0xff80,
+                       KP_Tab                                                  = 0xff89,
+                       KP_Enter                                                = 0xff8d,
+                       KP_F1                                                   = 0xff91,
+                       KP_F2                                                   = 0xff92,
+                       KP_F3                                                   = 0xff93,
+                       KP_F4                                                   = 0xff94,
+                       KP_Home                                                 = 0xff95,
+                       KP_Left                                                 = 0xff96,
+                       KP_Up                                                   = 0xff97,
+                       KP_Right                                                = 0xff98,
+                       KP_Down                                                 = 0xff99,
+                       KP_Prior                                                = 0xff9a,
+                       KP_Page_Up                                              = 0xff9a,
+                       KP_Next                                                 = 0xff9b,
+                       KP_Page_Down                                    = 0xff9b,
+                       KP_End                                                  = 0xff9c,
+                       KP_Begin                                                = 0xff9d,
+                       KP_Insert                                               = 0xff9e,
+                       KP_Delete                                               = 0xff9f,
+                       KP_Equal                                                = 0xffbd,
+                       KP_Multiply                                             = 0xffaa,
+                       KP_Add                                                  = 0xffab,
+                       KP_Separator                                    = 0xffac,
+                       KP_Subtract                                             = 0xffad,
+                       KP_Decimal                                              = 0xffae,
+                       KP_Divide                                               = 0xffaf,
+                       KP_0                                                    = 0xffb0,
+                       KP_1                                                    = 0xffb1,
+                       KP_2                                                    = 0xffb2,
+                       KP_3                                                    = 0xffb3,
+                       KP_4                                                    = 0xffb4,
+                       KP_5                                                    = 0xffb5,
+                       KP_6                                                    = 0xffb6,
+                       KP_7                                                    = 0xffb7,
+                       KP_8                                                    = 0xffb8,
+                       KP_9                                                    = 0xffb9,
+                       F1                                                              = 0xffbe,
+                       F2                                                              = 0xffbf,
+                       F3                                                              = 0xffc0,
+                       F4                                                              = 0xffc1,
+                       F5                                                              = 0xffc2,
+                       F6                                                              = 0xffc3,
+                       F7                                                              = 0xffc4,
+                       F8                                                              = 0xffc5,
+                       F9                                                              = 0xffc6,
+                       F10                                                             = 0xffc7,
+                       F11                                                             = 0xffc8,
+                       L1                                                              = 0xffc8,
+                       F12                                                             = 0xffc9,
+                       L2                                                              = 0xffc9,
+                       F13                                                             = 0xffca,
+                       L3                                                              = 0xffca,
+                       F14                                                             = 0xffcb,
+                       L4                                                              = 0xffcb,
+                       F15                                                             = 0xffcc,
+                       L5                                                              = 0xffcc,
+                       F16                                                             = 0xffcd,
+                       L6                                                              = 0xffcd,
+                       F17                                                             = 0xffce,
+                       L7                                                              = 0xffce,
+                       F18                                                             = 0xffcf,
+                       L8                                                              = 0xffcf,
+                       F19                                                             = 0xffd0,
+                       L9                                                              = 0xffd0,
+                       F20                                                             = 0xffd1,
+                       L10                                                             = 0xffd1,
+                       F21                                                             = 0xffd2,
+                       R1                                                              = 0xffd2,
+                       F22                                                             = 0xffd3,
+                       R2                                                              = 0xffd3,
+                       F23                                                             = 0xffd4,
+                       R3                                                              = 0xffd4,
+                       F24                                                             = 0xffd5,
+                       R4                                                              = 0xffd5,
+                       F25                                                             = 0xffd6,
+                       R5                                                              = 0xffd6,
+                       F26                                                             = 0xffd7,
+                       R6                                                              = 0xffd7,
+                       F27                                                             = 0xffd8,
+                       R7                                                              = 0xffd8,
+                       F28                                                             = 0xffd9,
+                       R8                                                              = 0xffd9,
+                       F29                                                             = 0xffda,
+                       R9                                                              = 0xffda,
+                       F30                                                             = 0xffdb,
+                       R10                                                             = 0xffdb,
+                       F31                                                             = 0xffdc,
+                       R11                                                             = 0xffdc,
+                       F32                                                             = 0xffdd,
+                       R12                                                             = 0xffdd,
+                       F33                                                             = 0xffde,
+                       R13                                                             = 0xffde,
+                       F34                                                             = 0xffdf,
+                       R14                                                             = 0xffdf,
+                       F35                                                             = 0xffe0,
+                       R15                                                             = 0xffe0,
+                       Shift_L                                                 = 0xffe1,
+                       Shift_R                                                 = 0xffe2,
+                       Control_L                                               = 0xffe3,
+                       Control_R                                               = 0xffe4,
+                       Caps_Lock                                               = 0xffe5,
+                       Shift_Lock                                              = 0xffe6,
+                       Meta_L                                                  = 0xffe7,
+                       Meta_R                                                  = 0xffe8,
+                       Alt_L                                                   = 0xffe9,
+                       Alt_R                                                   = 0xffea,
+                       Super_L                                                 = 0xffeb,
+                       Super_R                                                 = 0xffec,
+                       Hyper_L                                                 = 0xffed,
+                       Hyper_R                                                 = 0xffee,
+                       ISO_Lock                                                = 0xfe01,
+                       ISO_Level2_Latch                                = 0xfe02,
+                       ISO_Level3_Shift                                = 0xfe03,
+                       ISO_Level3_Latch                                = 0xfe04,
+                       ISO_Level3_Lock                                 = 0xfe05,
+                       ISO_Level5_Shift                                = 0xfe11,
+                       ISO_Level5_Latch                                = 0xfe12,
+                       ISO_Level5_Lock                                 = 0xfe13,
+                       ISO_Group_Shift                                 = 0xff7e,
+                       ISO_Group_Latch                                 = 0xfe06,
+                       ISO_Group_Lock                                  = 0xfe07,
+                       ISO_Next_Group                                  = 0xfe08,
+                       ISO_Next_Group_Lock                             = 0xfe09,
+                       ISO_Prev_Group                                  = 0xfe0a,
+                       ISO_Prev_Group_Lock                             = 0xfe0b,
+                       ISO_First_Group                                 = 0xfe0c,
+                       ISO_First_Group_Lock                    = 0xfe0d,
+                       ISO_Last_Group                                  = 0xfe0e,
+                       ISO_Last_Group_Lock                             = 0xfe0f,
+                       ISO_Left_Tab                                    = 0xfe20,
+                       ISO_Move_Line_Up                                = 0xfe21,
+                       ISO_Move_Line_Down                              = 0xfe22,
+                       ISO_Partial_Line_Up                             = 0xfe23,
+                       ISO_Partial_Line_Down                   = 0xfe24,
+                       ISO_Partial_Space_Left                  = 0xfe25,
+                       ISO_Partial_Space_Right                 = 0xfe26,
+                       ISO_Set_Margin_Left                             = 0xfe27,
+                       ISO_Set_Margin_Right                    = 0xfe28,
+                       ISO_Release_Margin_Left                 = 0xfe29,
+                       ISO_Release_Margin_Right                = 0xfe2a,
+                       ISO_Release_Both_Margins                = 0xfe2b,
+                       ISO_Fast_Cursor_Left                    = 0xfe2c,
+                       ISO_Fast_Cursor_Right                   = 0xfe2d,
+                       ISO_Fast_Cursor_Up                              = 0xfe2e,
+                       ISO_Fast_Cursor_Down                    = 0xfe2f,
+                       ISO_Continuous_Underline                = 0xfe30,
+                       ISO_Discontinuous_Underline             = 0xfe31,
+                       ISO_Emphasize                                   = 0xfe32,
+                       ISO_Center_Object                               = 0xfe33,
+                       ISO_Enter                                               = 0xfe34,
+                       dead_grave                                              = 0xfe50,
+                       dead_acute                                              = 0xfe51,
+                       dead_circumflex                                 = 0xfe52,
+                       dead_tilde                                              = 0xfe53,
+                       dead_perispomeni                                = 0xfe53,
+                       dead_macron                                             = 0xfe54,
+                       dead_breve                                              = 0xfe55,
+                       dead_abovedot                                   = 0xfe56,
+                       dead_diaeresis                                  = 0xfe57,
+                       dead_abovering                                  = 0xfe58,
+                       dead_doubleacute                                = 0xfe59,
+                       dead_caron                                              = 0xfe5a,
+                       dead_cedilla                                    = 0xfe5b,
+                       dead_ogonek                                             = 0xfe5c,
+                       dead_iota                                               = 0xfe5d,
+                       dead_voiced_sound                               = 0xfe5e,
+                       dead_semivoiced_sound                   = 0xfe5f,
+                       dead_belowdot                                   = 0xfe60,
+                       dead_hook                                               = 0xfe61,
+                       dead_horn                                               = 0xfe62,
+                       dead_stroke                                             = 0xfe63,
+                       dead_abovecomma                                 = 0xfe64,
+                       dead_psili                                              = 0xfe64,
+                       dead_abovereversedcomma                 = 0xfe65,
+                       dead_dasia                                              = 0xfe65,
+                       dead_doublegrave                                = 0xfe66,
+                       dead_belowring                                  = 0xfe67,
+                       dead_belowmacron                                = 0xfe68,
+                       dead_belowcircumflex                    = 0xfe69,
+                       dead_belowtilde                                 = 0xfe6a,
+                       dead_belowbreve                                 = 0xfe6b,
+                       dead_belowdiaeresis                             = 0xfe6c,
+                       dead_invertedbreve                              = 0xfe6d,
+                       dead_belowcomma                                 = 0xfe6e,
+                       dead_currency                                   = 0xfe6f,
+                       dead_lowline                                    = 0xfe90,
+                       dead_aboveverticalline                  = 0xfe91,
+                       dead_belowverticalline                  = 0xfe92,
+                       dead_longsolidusoverlay                 = 0xfe93,
+                       dead_a                                                  = 0xfe80,
+                       dead_A                                                  = 0xfe81,
+                       dead_e                                                  = 0xfe82,
+                       dead_E                                                  = 0xfe83,
+                       dead_i                                                  = 0xfe84,
+                       dead_I                                                  = 0xfe85,
+                       dead_o                                                  = 0xfe86,
+                       dead_O                                                  = 0xfe87,
+                       dead_u                                                  = 0xfe88,
+                       dead_U                                                  = 0xfe89,
+                       dead_small_schwa                                = 0xfe8a,
+                       dead_capital_schwa                              = 0xfe8b,
+                       dead_greek                                              = 0xfe8c,
+                       First_Virtual_Screen                    = 0xfed0,
+                       Prev_Virtual_Screen                             = 0xfed1,
+                       Next_Virtual_Screen                             = 0xfed2,
+                       Last_Virtual_Screen                             = 0xfed4,
+                       Terminate_Server                                = 0xfed5,
+                       AccessX_Enable                                  = 0xfe70,
+                       AccessX_Feedback_Enable                 = 0xfe71,
+                       RepeatKeys_Enable                               = 0xfe72,
+                       SlowKeys_Enable                                 = 0xfe73,
+                       BounceKeys_Enable                               = 0xfe74,
+                       StickyKeys_Enable                               = 0xfe75,
+                       MouseKeys_Enable                                = 0xfe76,
+                       MouseKeys_Accel_Enable                  = 0xfe77,
+                       Overlay1_Enable                                 = 0xfe78,
+                       Overlay2_Enable                                 = 0xfe79,
+                       AudibleBell_Enable                              = 0xfe7a,
+                       Pointer_Left                                    = 0xfee0,
+                       Pointer_Right                                   = 0xfee1,
+                       Pointer_Up                                              = 0xfee2,
+                       Pointer_Down                                    = 0xfee3,
+                       Pointer_UpLeft                                  = 0xfee4,
+                       Pointer_UpRight                                 = 0xfee5,
+                       Pointer_DownLeft                                = 0xfee6,
+                       Pointer_DownRight                               = 0xfee7,
+                       Pointer_Button_Dflt                             = 0xfee8,
+                       Pointer_Button1                                 = 0xfee9,
+                       Pointer_Button2                                 = 0xfeea,
+                       Pointer_Button3                                 = 0xfeeb,
+                       Pointer_Button4                                 = 0xfeec,
+                       Pointer_Button5                                 = 0xfeed,
+                       Pointer_DblClick_Dflt                   = 0xfeee,
+                       Pointer_DblClick1                               = 0xfeef,
+                       Pointer_DblClick2                               = 0xfef0,
+                       Pointer_DblClick3                               = 0xfef1,
+                       Pointer_DblClick4                               = 0xfef2,
+                       Pointer_DblClick5                               = 0xfef3,
+                       Pointer_Drag_Dflt                               = 0xfef4,
+                       Pointer_Drag1                                   = 0xfef5,
+                       Pointer_Drag2                                   = 0xfef6,
+                       Pointer_Drag3                                   = 0xfef7,
+                       Pointer_Drag4                                   = 0xfef8,
+                       Pointer_Drag5                                   = 0xfefd,
+                       Pointer_EnableKeys                              = 0xfef9,
+                       Pointer_Accelerate                              = 0xfefa,
+                       Pointer_DfltBtnNext                             = 0xfefb,
+                       Pointer_DfltBtnPrev                             = 0xfefc,
+                       ch                                                              = 0xfea0,
+                       Ch                                                              = 0xfea1,
+                       CH                                                              = 0xfea2,
+                       c_h                                                             = 0xfea3,
+                       C_h                                                             = 0xfea4,
+                       C_H                                                             = 0xfea5,
+                       key_3270_Duplicate                              = 0xfd01,
+                       key_3270_FieldMark                              = 0xfd02,
+                       key_3270_Right2                                 = 0xfd03,
+                       key_3270_Left2                                  = 0xfd04,
+                       key_3270_BackTab                                = 0xfd05,
+                       key_3270_EraseEOF                               = 0xfd06,
+                       key_3270_EraseInput                             = 0xfd07,
+                       key_3270_Reset                                  = 0xfd08,
+                       key_3270_Quit                                   = 0xfd09,
+                       key_3270_PA1                                    = 0xfd0a,
+                       key_3270_PA2                                    = 0xfd0b,
+                       key_3270_PA3                                    = 0xfd0c,
+                       key_3270_Test                                   = 0xfd0d,
+                       key_3270_Attn                                   = 0xfd0e,
+                       key_3270_CursorBlink                    = 0xfd0f,
+                       key_3270_AltCursor                              = 0xfd10,
+                       key_3270_KeyClick                               = 0xfd11,
+                       key_3270_Jump                                   = 0xfd12,
+                       key_3270_Ident                                  = 0xfd13,
+                       key_3270_Rule                                   = 0xfd14,
+                       key_3270_Copy                                   = 0xfd15,
+                       key_3270_Play                                   = 0xfd16,
+                       key_3270_Setup                                  = 0xfd17,
+                       key_3270_Record                                 = 0xfd18,
+                       key_3270_ChangeScreen                   = 0xfd19,
+                       key_3270_DeleteWord                             = 0xfd1a,
+                       key_3270_ExSelect                               = 0xfd1b,
+                       key_3270_CursorSelect                   = 0xfd1c,
+                       key_3270_PrintScreen                    = 0xfd1d,
+                       key_3270_Enter                                  = 0xfd1e,
+                       space                                                   = 0x0020,
+                       exclam                                                  = 0x0021,
+                       quotedbl                                                = 0x0022,
+                       numbersign                                              = 0x0023,
+                       dollar                                                  = 0x0024,
+                       percent                                                 = 0x0025,
+                       ampersand                                               = 0x0026,
+                       apostrophe                                              = 0x0027,
+                       quoteright                                              = 0x0027,
+                       parenleft                                               = 0x0028,
+                       parenright                                              = 0x0029,
+                       asterisk                                                = 0x002a,
+                       plus                                                    = 0x002b,
+                       comma                                                   = 0x002c,
+                       minus                                                   = 0x002d,
+                       period                                                  = 0x002e,
+                       slash                                                   = 0x002f,
+                       key_0                                                   = 0x0030,
+                       key_1                                                   = 0x0031,
+                       key_2                                                   = 0x0032,
+                       key_3                                                   = 0x0033,
+                       key_4                                                   = 0x0034,
+                       key_5                                                   = 0x0035,
+                       key_6                                                   = 0x0036,
+                       key_7                                                   = 0x0037,
+                       key_8                                                   = 0x0038,
+                       key_9                                                   = 0x0039,
+                       colon                                                   = 0x003a,
+                       semicolon                                               = 0x003b,
+                       less                                                    = 0x003c,
+                       equal                                                   = 0x003d,
+                       greater                                                 = 0x003e,
+                       question                                                = 0x003f,
+                       at                                                              = 0x0040,
+                       A                                                               = 0x0041,
+                       B                                                               = 0x0042,
+                       C                                                               = 0x0043,
+                       D                                                               = 0x0044,
+                       E                                                               = 0x0045,
+                       F                                                               = 0x0046,
+                       G                                                               = 0x0047,
+                       H                                                               = 0x0048,
+                       I                                                               = 0x0049,
+                       J                                                               = 0x004a,
+                       K                                                               = 0x004b,
+                       L                                                               = 0x004c,
+                       M                                                               = 0x004d,
+                       N                                                               = 0x004e,
+                       O                                                               = 0x004f,
+                       P                                                               = 0x0050,
+                       Q                                                               = 0x0051,
+                       R                                                               = 0x0052,
+                       S                                                               = 0x0053,
+                       T                                                               = 0x0054,
+                       U                                                               = 0x0055,
+                       V                                                               = 0x0056,
+                       W                                                               = 0x0057,
+                       X                                                               = 0x0058,
+                       Y                                                               = 0x0059,
+                       Z                                                               = 0x005a,
+                       bracketleft                                             = 0x005b,
+                       backslash                                               = 0x005c,
+                       bracketright                                    = 0x005d,
+                       asciicircum                                             = 0x005e,
+                       underscore                                              = 0x005f,
+                       grave                                                   = 0x0060,
+                       quoteleft                                               = 0x0060,
+                       a                                                               = 0x0061,
+                       b                                                               = 0x0062,
+                       c                                                               = 0x0063,
+                       d                                                               = 0x0064,
+                       e                                                               = 0x0065,
+                       f                                                               = 0x0066,
+                       g                                                               = 0x0067,
+                       h                                                               = 0x0068,
+                       i                                                               = 0x0069,
+                       j                                                               = 0x006a,
+                       k                                                               = 0x006b,
+                       l                                                               = 0x006c,
+                       m                                                               = 0x006d,
+                       n                                                               = 0x006e,
+                       o                                                               = 0x006f,
+                       p                                                               = 0x0070,
+                       q                                                               = 0x0071,
+                       r                                                               = 0x0072,
+                       s                                                               = 0x0073,
+                       t                                                               = 0x0074,
+                       u                                                               = 0x0075,
+                       v                                                               = 0x0076,
+                       w                                                               = 0x0077,
+                       x                                                               = 0x0078,
+                       y                                                               = 0x0079,
+                       z                                                               = 0x007a,
+                       braceleft                                               = 0x007b,
+                       bar                                                             = 0x007c,
+                       braceright                                              = 0x007d,
+                       asciitilde                                              = 0x007e,
+                       nobreakspace                                    = 0x00a0,
+                       exclamdown                                              = 0x00a1,
+                       cent                                                    = 0x00a2,
+                       sterling                                                = 0x00a3,
+                       currency                                                = 0x00a4,
+                       yen                                                             = 0x00a5,
+                       brokenbar                                               = 0x00a6,
+                       section                                                 = 0x00a7,
+                       diaeresis                                               = 0x00a8,
+                       copyright                                               = 0x00a9,
+                       ordfeminine                                             = 0x00aa,
+                       guillemotleft                                   = 0x00ab,
+                       notsign                                                 = 0x00ac,
+                       hyphen                                                  = 0x00ad,
+                       registered                                              = 0x00ae,
+                       macron                                                  = 0x00af,
+                       degree                                                  = 0x00b0,
+                       plusminus                                               = 0x00b1,
+                       twosuperior                                             = 0x00b2,
+                       threesuperior                                   = 0x00b3,
+                       acute                                                   = 0x00b4,
+                       mu                                                              = 0x00b5,
+                       paragraph                                               = 0x00b6,
+                       periodcentered                                  = 0x00b7,
+                       cedilla                                                 = 0x00b8,
+                       onesuperior                                             = 0x00b9,
+                       masculine                                               = 0x00ba,
+                       guillemotright                                  = 0x00bb,
+                       onequarter                                              = 0x00bc,
+                       onehalf                                                 = 0x00bd,
+                       threequarters                                   = 0x00be,
+                       questiondown                                    = 0x00bf,
+                       Agrave                                                  = 0x00c0,
+                       Aacute                                                  = 0x00c1,
+                       Acircumflex                                             = 0x00c2,
+                       Atilde                                                  = 0x00c3,
+                       Adiaeresis                                              = 0x00c4,
+                       Aring                                                   = 0x00c5,
+                       AE                                                              = 0x00c6,
+                       Ccedilla                                                = 0x00c7,
+                       Egrave                                                  = 0x00c8,
+                       Eacute                                                  = 0x00c9,
+                       Ecircumflex                                             = 0x00ca,
+                       Ediaeresis                                              = 0x00cb,
+                       Igrave                                                  = 0x00cc,
+                       Iacute                                                  = 0x00cd,
+                       Icircumflex                                             = 0x00ce,
+                       Idiaeresis                                              = 0x00cf,
+                       ETH                                                             = 0x00d0,
+                       Eth                                                             = 0x00d0,
+                       Ntilde                                                  = 0x00d1,
+                       Ograve                                                  = 0x00d2,
+                       Oacute                                                  = 0x00d3,
+                       Ocircumflex                                             = 0x00d4,
+                       Otilde                                                  = 0x00d5,
+                       Odiaeresis                                              = 0x00d6,
+                       multiply                                                = 0x00d7,
+                       Oslash                                                  = 0x00d8,
+                       Ooblique                                                = 0x00d8,
+                       Ugrave                                                  = 0x00d9,
+                       Uacute                                                  = 0x00da,
+                       Ucircumflex                                             = 0x00db,
+                       Udiaeresis                                              = 0x00dc,
+                       Yacute                                                  = 0x00dd,
+                       THORN                                                   = 0x00de,
+                       Thorn                                                   = 0x00de,
+                       ssharp                                                  = 0x00df,
+                       agrave                                                  = 0x00e0,
+                       aacute                                                  = 0x00e1,
+                       acircumflex                                             = 0x00e2,
+                       atilde                                                  = 0x00e3,
+                       adiaeresis                                              = 0x00e4,
+                       aring                                                   = 0x00e5,
+                       ae                                                              = 0x00e6,
+                       ccedilla                                                = 0x00e7,
+                       egrave                                                  = 0x00e8,
+                       eacute                                                  = 0x00e9,
+                       ecircumflex                                             = 0x00ea,
+                       ediaeresis                                              = 0x00eb,
+                       igrave                                                  = 0x00ec,
+                       iacute                                                  = 0x00ed,
+                       icircumflex                                             = 0x00ee,
+                       idiaeresis                                              = 0x00ef,
+                       eth                                                             = 0x00f0,
+                       ntilde                                                  = 0x00f1,
+                       ograve                                                  = 0x00f2,
+                       oacute                                                  = 0x00f3,
+                       ocircumflex                                             = 0x00f4,
+                       otilde                                                  = 0x00f5,
+                       odiaeresis                                              = 0x00f6,
+                       division                                                = 0x00f7,
+                       oslash                                                  = 0x00f8,
+                       ooblique                                                = 0x00f8,
+                       ugrave                                                  = 0x00f9,
+                       uacute                                                  = 0x00fa,
+                       ucircumflex                                             = 0x00fb,
+                       udiaeresis                                              = 0x00fc,
+                       yacute                                                  = 0x00fd,
+                       thorn                                                   = 0x00fe,
+                       ydiaeresis                                              = 0x00ff,
+                       Aogonek                                                 = 0x01a1,
+                       breve                                                   = 0x01a2,
+                       Lstroke                                                 = 0x01a3,
+                       Lcaron                                                  = 0x01a5,
+                       Sacute                                                  = 0x01a6,
+                       Scaron                                                  = 0x01a9,
+                       Scedilla                                                = 0x01aa,
+                       Tcaron                                                  = 0x01ab,
+                       Zacute                                                  = 0x01ac,
+                       Zcaron                                                  = 0x01ae,
+                       Zabovedot                                               = 0x01af,
+                       aogonek                                                 = 0x01b1,
+                       ogonek                                                  = 0x01b2,
+                       lstroke                                                 = 0x01b3,
+                       lcaron                                                  = 0x01b5,
+                       sacute                                                  = 0x01b6,
+                       caron                                                   = 0x01b7,
+                       scaron                                                  = 0x01b9,
+                       scedilla                                                = 0x01ba,
+                       tcaron                                                  = 0x01bb,
+                       zacute                                                  = 0x01bc,
+                       doubleacute                                             = 0x01bd,
+                       zcaron                                                  = 0x01be,
+                       zabovedot                                               = 0x01bf,
+                       Racute                                                  = 0x01c0,
+                       Abreve                                                  = 0x01c3,
+                       Lacute                                                  = 0x01c5,
+                       Cacute                                                  = 0x01c6,
+                       Ccaron                                                  = 0x01c8,
+                       Eogonek                                                 = 0x01ca,
+                       Ecaron                                                  = 0x01cc,
+                       Dcaron                                                  = 0x01cf,
+                       Dstroke                                                 = 0x01d0,
+                       Nacute                                                  = 0x01d1,
+                       Ncaron                                                  = 0x01d2,
+                       Odoubleacute                                    = 0x01d5,
+                       Rcaron                                                  = 0x01d8,
+                       Uring                                                   = 0x01d9,
+                       Udoubleacute                                    = 0x01db,
+                       Tcedilla                                                = 0x01de,
+                       racute                                                  = 0x01e0,
+                       abreve                                                  = 0x01e3,
+                       lacute                                                  = 0x01e5,
+                       cacute                                                  = 0x01e6,
+                       ccaron                                                  = 0x01e8,
+                       eogonek                                                 = 0x01ea,
+                       ecaron                                                  = 0x01ec,
+                       dcaron                                                  = 0x01ef,
+                       dstroke                                                 = 0x01f0,
+                       nacute                                                  = 0x01f1,
+                       ncaron                                                  = 0x01f2,
+                       odoubleacute                                    = 0x01f5,
+                       rcaron                                                  = 0x01f8,
+                       uring                                                   = 0x01f9,
+                       udoubleacute                                    = 0x01fb,
+                       tcedilla                                                = 0x01fe,
+                       abovedot                                                = 0x01ff,
+                       Hstroke                                                 = 0x02a1,
+                       Hcircumflex                                             = 0x02a6,
+                       Iabovedot                                               = 0x02a9,
+                       Gbreve                                                  = 0x02ab,
+                       Jcircumflex                                             = 0x02ac,
+                       hstroke                                                 = 0x02b1,
+                       hcircumflex                                             = 0x02b6,
+                       idotless                                                = 0x02b9,
+                       gbreve                                                  = 0x02bb,
+                       jcircumflex                                             = 0x02bc,
+                       Cabovedot                                               = 0x02c5,
+                       Ccircumflex                                             = 0x02c6,
+                       Gabovedot                                               = 0x02d5,
+                       Gcircumflex                                             = 0x02d8,
+                       Ubreve                                                  = 0x02dd,
+                       Scircumflex                                             = 0x02de,
+                       cabovedot                                               = 0x02e5,
+                       ccircumflex                                             = 0x02e6,
+                       gabovedot                                               = 0x02f5,
+                       gcircumflex                                             = 0x02f8,
+                       ubreve                                                  = 0x02fd,
+                       scircumflex                                             = 0x02fe,
+                       kra                                                             = 0x03a2,
+                       kappa                                                   = 0x03a2,
+                       Rcedilla                                                = 0x03a3,
+                       Itilde                                                  = 0x03a5,
+                       Lcedilla                                                = 0x03a6,
+                       Emacron                                                 = 0x03aa,
+                       Gcedilla                                                = 0x03ab,
+                       Tslash                                                  = 0x03ac,
+                       rcedilla                                                = 0x03b3,
+                       itilde                                                  = 0x03b5,
+                       lcedilla                                                = 0x03b6,
+                       emacron                                                 = 0x03ba,
+                       gcedilla                                                = 0x03bb,
+                       tslash                                                  = 0x03bc,
+                       ENG                                                             = 0x03bd,
+                       eng                                                             = 0x03bf,
+                       Amacron                                                 = 0x03c0,
+                       Iogonek                                                 = 0x03c7,
+                       Eabovedot                                               = 0x03cc,
+                       Imacron                                                 = 0x03cf,
+                       Ncedilla                                                = 0x03d1,
+                       Omacron                                                 = 0x03d2,
+                       Kcedilla                                                = 0x03d3,
+                       Uogonek                                                 = 0x03d9,
+                       Utilde                                                  = 0x03dd,
+                       Umacron                                                 = 0x03de,
+                       amacron                                                 = 0x03e0,
+                       iogonek                                                 = 0x03e7,
+                       eabovedot                                               = 0x03ec,
+                       imacron                                                 = 0x03ef,
+                       ncedilla                                                = 0x03f1,
+                       omacron                                                 = 0x03f2,
+                       kcedilla                                                = 0x03f3,
+                       uogonek                                                 = 0x03f9,
+                       utilde                                                  = 0x03fd,
+                       umacron                                                 = 0x03fe,
+                       Wcircumflex                                             = 0x1000174,
+                       wcircumflex                                             = 0x1000175,
+                       Ycircumflex                                             = 0x1000176,
+                       ycircumflex                                             = 0x1000177,
+                       Babovedot                                               = 0x1001e02,
+                       babovedot                                               = 0x1001e03,
+                       Dabovedot                                               = 0x1001e0a,
+                       dabovedot                                               = 0x1001e0b,
+                       Fabovedot                                               = 0x1001e1e,
+                       fabovedot                                               = 0x1001e1f,
+                       Mabovedot                                               = 0x1001e40,
+                       mabovedot                                               = 0x1001e41,
+                       Pabovedot                                               = 0x1001e56,
+                       pabovedot                                               = 0x1001e57,
+                       Sabovedot                                               = 0x1001e60,
+                       sabovedot                                               = 0x1001e61,
+                       Tabovedot                                               = 0x1001e6a,
+                       tabovedot                                               = 0x1001e6b,
+                       Wgrave                                                  = 0x1001e80,
+                       wgrave                                                  = 0x1001e81,
+                       Wacute                                                  = 0x1001e82,
+                       wacute                                                  = 0x1001e83,
+                       Wdiaeresis                                              = 0x1001e84,
+                       wdiaeresis                                              = 0x1001e85,
+                       Ygrave                                                  = 0x1001ef2,
+                       ygrave                                                  = 0x1001ef3,
+                       OE                                                              = 0x13bc,
+                       oe                                                              = 0x13bd,
+                       Ydiaeresis                                              = 0x13be,
+                       overline                                                = 0x047e,
+                       kana_fullstop                                   = 0x04a1,
+                       kana_openingbracket                             = 0x04a2,
+                       kana_closingbracket                             = 0x04a3,
+                       kana_comma                                              = 0x04a4,
+                       kana_conjunctive                                = 0x04a5,
+                       kana_middledot                                  = 0x04a5,
+                       kana_WO                                                 = 0x04a6,
+                       kana_a                                                  = 0x04a7,
+                       kana_i                                                  = 0x04a8,
+                       kana_u                                                  = 0x04a9,
+                       kana_e                                                  = 0x04aa,
+                       kana_o                                                  = 0x04ab,
+                       kana_ya                                                 = 0x04ac,
+                       kana_yu                                                 = 0x04ad,
+                       kana_yo                                                 = 0x04ae,
+                       kana_tsu                                                = 0x04af,
+                       kana_tu                                                 = 0x04af,
+                       prolongedsound                                  = 0x04b0,
+                       kana_A                                                  = 0x04b1,
+                       kana_I                                                  = 0x04b2,
+                       kana_U                                                  = 0x04b3,
+                       kana_E                                                  = 0x04b4,
+                       kana_O                                                  = 0x04b5,
+                       kana_KA                                                 = 0x04b6,
+                       kana_KI                                                 = 0x04b7,
+                       kana_KU                                                 = 0x04b8,
+                       kana_KE                                                 = 0x04b9,
+                       kana_KO                                                 = 0x04ba,
+                       kana_SA                                                 = 0x04bb,
+                       kana_SHI                                                = 0x04bc,
+                       kana_SU                                                 = 0x04bd,
+                       kana_SE                                                 = 0x04be,
+                       kana_SO                                                 = 0x04bf,
+                       kana_TA                                                 = 0x04c0,
+                       kana_CHI                                                = 0x04c1,
+                       kana_TI                                                 = 0x04c1,
+                       kana_TSU                                                = 0x04c2,
+                       kana_TU                                                 = 0x04c2,
+                       kana_TE                                                 = 0x04c3,
+                       kana_TO                                                 = 0x04c4,
+                       kana_NA                                                 = 0x04c5,
+                       kana_NI                                                 = 0x04c6,
+                       kana_NU                                                 = 0x04c7,
+                       kana_NE                                                 = 0x04c8,
+                       kana_NO                                                 = 0x04c9,
+                       kana_HA                                                 = 0x04ca,
+                       kana_HI                                                 = 0x04cb,
+                       kana_FU                                                 = 0x04cc,
+                       kana_HU                                                 = 0x04cc,
+                       kana_HE                                                 = 0x04cd,
+                       kana_HO                                                 = 0x04ce,
+                       kana_MA                                                 = 0x04cf,
+                       kana_MI                                                 = 0x04d0,
+                       kana_MU                                                 = 0x04d1,
+                       kana_ME                                                 = 0x04d2,
+                       kana_MO                                                 = 0x04d3,
+                       kana_YA                                                 = 0x04d4,
+                       kana_YU                                                 = 0x04d5,
+                       kana_YO                                                 = 0x04d6,
+                       kana_RA                                                 = 0x04d7,
+                       kana_RI                                                 = 0x04d8,
+                       kana_RU                                                 = 0x04d9,
+                       kana_RE                                                 = 0x04da,
+                       kana_RO                                                 = 0x04db,
+                       kana_WA                                                 = 0x04dc,
+                       kana_N                                                  = 0x04dd,
+                       voicedsound                                             = 0x04de,
+                       semivoicedsound                                 = 0x04df,
+                       kana_switch                                             = 0xff7e,
+                       Farsi_0                                                 = 0x10006f0,
+                       Farsi_1                                                 = 0x10006f1,
+                       Farsi_2                                                 = 0x10006f2,
+                       Farsi_3                                                 = 0x10006f3,
+                       Farsi_4                                                 = 0x10006f4,
+                       Farsi_5                                                 = 0x10006f5,
+                       Farsi_6                                                 = 0x10006f6,
+                       Farsi_7                                                 = 0x10006f7,
+                       Farsi_8                                                 = 0x10006f8,
+                       Farsi_9                                                 = 0x10006f9,
+                       Arabic_percent                                  = 0x100066a,
+                       Arabic_superscript_alef                 = 0x1000670,
+                       Arabic_tteh                                             = 0x1000679,
+                       Arabic_peh                                              = 0x100067e,
+                       Arabic_tcheh                                    = 0x1000686,
+                       Arabic_ddal                                             = 0x1000688,
+                       Arabic_rreh                                             = 0x1000691,
+                       Arabic_comma                                    = 0x05ac,
+                       Arabic_fullstop                                 = 0x10006d4,
+                       Arabic_0                                                = 0x1000660,
+                       Arabic_1                                                = 0x1000661,
+                       Arabic_2                                                = 0x1000662,
+                       Arabic_3                                                = 0x1000663,
+                       Arabic_4                                                = 0x1000664,
+                       Arabic_5                                                = 0x1000665,
+                       Arabic_6                                                = 0x1000666,
+                       Arabic_7                                                = 0x1000667,
+                       Arabic_8                                                = 0x1000668,
+                       Arabic_9                                                = 0x1000669,
+                       Arabic_semicolon                                = 0x05bb,
+                       Arabic_question_mark                    = 0x05bf,
+                       Arabic_hamza                                    = 0x05c1,
+                       Arabic_maddaonalef                              = 0x05c2,
+                       Arabic_hamzaonalef                              = 0x05c3,
+                       Arabic_hamzaonwaw                               = 0x05c4,
+                       Arabic_hamzaunderalef                   = 0x05c5,
+                       Arabic_hamzaonyeh                               = 0x05c6,
+                       Arabic_alef                                             = 0x05c7,
+                       Arabic_beh                                              = 0x05c8,
+                       Arabic_tehmarbuta                               = 0x05c9,
+                       Arabic_teh                                              = 0x05ca,
+                       Arabic_theh                                             = 0x05cb,
+                       Arabic_jeem                                             = 0x05cc,
+                       Arabic_hah                                              = 0x05cd,
+                       Arabic_khah                                             = 0x05ce,
+                       Arabic_dal                                              = 0x05cf,
+                       Arabic_thal                                             = 0x05d0,
+                       Arabic_ra                                               = 0x05d1,
+                       Arabic_zain                                             = 0x05d2,
+                       Arabic_seen                                             = 0x05d3,
+                       Arabic_sheen                                    = 0x05d4,
+                       Arabic_sad                                              = 0x05d5,
+                       Arabic_dad                                              = 0x05d6,
+                       Arabic_tah                                              = 0x05d7,
+                       Arabic_zah                                              = 0x05d8,
+                       Arabic_ain                                              = 0x05d9,
+                       Arabic_ghain                                    = 0x05da,
+                       Arabic_tatweel                                  = 0x05e0,
+                       Arabic_feh                                              = 0x05e1,
+                       Arabic_qaf                                              = 0x05e2,
+                       Arabic_kaf                                              = 0x05e3,
+                       Arabic_lam                                              = 0x05e4,
+                       Arabic_meem                                             = 0x05e5,
+                       Arabic_noon                                             = 0x05e6,
+                       Arabic_ha                                               = 0x05e7,
+                       Arabic_heh                                              = 0x05e7,
+                       Arabic_waw                                              = 0x05e8,
+                       Arabic_alefmaksura                              = 0x05e9,
+                       Arabic_yeh                                              = 0x05ea,
+                       Arabic_fathatan                                 = 0x05eb,
+                       Arabic_dammatan                                 = 0x05ec,
+                       Arabic_kasratan                                 = 0x05ed,
+                       Arabic_fatha                                    = 0x05ee,
+                       Arabic_damma                                    = 0x05ef,
+                       Arabic_kasra                                    = 0x05f0,
+                       Arabic_shadda                                   = 0x05f1,
+                       Arabic_sukun                                    = 0x05f2,
+                       Arabic_madda_above                              = 0x1000653,
+                       Arabic_hamza_above                              = 0x1000654,
+                       Arabic_hamza_below                              = 0x1000655,
+                       Arabic_jeh                                              = 0x1000698,
+                       Arabic_veh                                              = 0x10006a4,
+                       Arabic_keheh                                    = 0x10006a9,
+                       Arabic_gaf                                              = 0x10006af,
+                       Arabic_noon_ghunna                              = 0x10006ba,
+                       Arabic_heh_doachashmee                  = 0x10006be,
+                       Farsi_yeh                                               = 0x10006cc,
+                       Arabic_farsi_yeh                                = 0x10006cc,
+                       Arabic_yeh_baree                                = 0x10006d2,
+                       Arabic_heh_goal                                 = 0x10006c1,
+                       Arabic_switch                                   = 0xff7e,
+                       Cyrillic_GHE_bar                                = 0x1000492,
+                       Cyrillic_ghe_bar                                = 0x1000493,
+                       Cyrillic_ZHE_descender                  = 0x1000496,
+                       Cyrillic_zhe_descender                  = 0x1000497,
+                       Cyrillic_KA_descender                   = 0x100049a,
+                       Cyrillic_ka_descender                   = 0x100049b,
+                       Cyrillic_KA_vertstroke                  = 0x100049c,
+                       Cyrillic_ka_vertstroke                  = 0x100049d,
+                       Cyrillic_EN_descender                   = 0x10004a2,
+                       Cyrillic_en_descender                   = 0x10004a3,
+                       Cyrillic_U_straight                             = 0x10004ae,
+                       Cyrillic_u_straight                             = 0x10004af,
+                       Cyrillic_U_straight_bar                 = 0x10004b0,
+                       Cyrillic_u_straight_bar                 = 0x10004b1,
+                       Cyrillic_HA_descender                   = 0x10004b2,
+                       Cyrillic_ha_descender                   = 0x10004b3,
+                       Cyrillic_CHE_descender                  = 0x10004b6,
+                       Cyrillic_che_descender                  = 0x10004b7,
+                       Cyrillic_CHE_vertstroke                 = 0x10004b8,
+                       Cyrillic_che_vertstroke                 = 0x10004b9,
+                       Cyrillic_SHHA                                   = 0x10004ba,
+                       Cyrillic_shha                                   = 0x10004bb,
+                       Cyrillic_SCHWA                                  = 0x10004d8,
+                       Cyrillic_schwa                                  = 0x10004d9,
+                       Cyrillic_I_macron                               = 0x10004e2,
+                       Cyrillic_i_macron                               = 0x10004e3,
+                       Cyrillic_O_bar                                  = 0x10004e8,
+                       Cyrillic_o_bar                                  = 0x10004e9,
+                       Cyrillic_U_macron                               = 0x10004ee,
+                       Cyrillic_u_macron                               = 0x10004ef,
+                       Serbian_dje                                             = 0x06a1,
+                       Macedonia_gje                                   = 0x06a2,
+                       Cyrillic_io                                             = 0x06a3,
+                       Ukrainian_ie                                    = 0x06a4,
+                       Ukranian_je                                             = 0x06a4,
+                       Macedonia_dse                                   = 0x06a5,
+                       Ukrainian_i                                             = 0x06a6,
+                       Ukranian_i                                              = 0x06a6,
+                       Ukrainian_yi                                    = 0x06a7,
+                       Ukranian_yi                                             = 0x06a7,
+                       Cyrillic_je                                             = 0x06a8,
+                       Serbian_je                                              = 0x06a8,
+                       Cyrillic_lje                                    = 0x06a9,
+                       Serbian_lje                                             = 0x06a9,
+                       Cyrillic_nje                                    = 0x06aa,
+                       Serbian_nje                                             = 0x06aa,
+                       Serbian_tshe                                    = 0x06ab,
+                       Macedonia_kje                                   = 0x06ac,
+                       Ukrainian_ghe_with_upturn               = 0x06ad,
+                       Byelorussian_shortu                             = 0x06ae,
+                       Cyrillic_dzhe                                   = 0x06af,
+                       Serbian_dze                                             = 0x06af,
+                       numerosign                                              = 0x06b0,
+                       Serbian_DJE                                             = 0x06b1,
+                       Macedonia_GJE                                   = 0x06b2,
+                       Cyrillic_IO                                             = 0x06b3,
+                       Ukrainian_IE                                    = 0x06b4,
+                       Ukranian_JE                                             = 0x06b4,
+                       Macedonia_DSE                                   = 0x06b5,
+                       Ukrainian_I                                             = 0x06b6,
+                       Ukranian_I                                              = 0x06b6,
+                       Ukrainian_YI                                    = 0x06b7,
+                       Ukranian_YI                                             = 0x06b7,
+                       Cyrillic_JE                                             = 0x06b8,
+                       Serbian_JE                                              = 0x06b8,
+                       Cyrillic_LJE                                    = 0x06b9,
+                       Serbian_LJE                                             = 0x06b9,
+                       Cyrillic_NJE                                    = 0x06ba,
+                       Serbian_NJE                                             = 0x06ba,
+                       Serbian_TSHE                                    = 0x06bb,
+                       Macedonia_KJE                                   = 0x06bc,
+                       Ukrainian_GHE_WITH_UPTURN               = 0x06bd,
+                       Byelorussian_SHORTU                             = 0x06be,
+                       Cyrillic_DZHE                                   = 0x06bf,
+                       Serbian_DZE                                             = 0x06bf,
+                       Cyrillic_yu                                             = 0x06c0,
+                       Cyrillic_a                                              = 0x06c1,
+                       Cyrillic_be                                             = 0x06c2,
+                       Cyrillic_tse                                    = 0x06c3,
+                       Cyrillic_de                                             = 0x06c4,
+                       Cyrillic_ie                                             = 0x06c5,
+                       Cyrillic_ef                                             = 0x06c6,
+                       Cyrillic_ghe                                    = 0x06c7,
+                       Cyrillic_ha                                             = 0x06c8,
+                       Cyrillic_i                                              = 0x06c9,
+                       Cyrillic_shorti                                 = 0x06ca,
+                       Cyrillic_ka                                             = 0x06cb,
+                       Cyrillic_el                                             = 0x06cc,
+                       Cyrillic_em                                             = 0x06cd,
+                       Cyrillic_en                                             = 0x06ce,
+                       Cyrillic_o                                              = 0x06cf,
+                       Cyrillic_pe                                             = 0x06d0,
+                       Cyrillic_ya                                             = 0x06d1,
+                       Cyrillic_er                                             = 0x06d2,
+                       Cyrillic_es                                             = 0x06d3,
+                       Cyrillic_te                                             = 0x06d4,
+                       Cyrillic_u                                              = 0x06d5,
+                       Cyrillic_zhe                                    = 0x06d6,
+                       Cyrillic_ve                                             = 0x06d7,
+                       Cyrillic_softsign                               = 0x06d8,
+                       Cyrillic_yeru                                   = 0x06d9,
+                       Cyrillic_ze                                             = 0x06da,
+                       Cyrillic_sha                                    = 0x06db,
+                       Cyrillic_e                                              = 0x06dc,
+                       Cyrillic_shcha                                  = 0x06dd,
+                       Cyrillic_che                                    = 0x06de,
+                       Cyrillic_hardsign                               = 0x06df,
+                       Cyrillic_YU                                             = 0x06e0,
+                       Cyrillic_A                                              = 0x06e1,
+                       Cyrillic_BE                                             = 0x06e2,
+                       Cyrillic_TSE                                    = 0x06e3,
+                       Cyrillic_DE                                             = 0x06e4,
+                       Cyrillic_IE                                             = 0x06e5,
+                       Cyrillic_EF                                             = 0x06e6,
+                       Cyrillic_GHE                                    = 0x06e7,
+                       Cyrillic_HA                                             = 0x06e8,
+                       Cyrillic_I                                              = 0x06e9,
+                       Cyrillic_SHORTI                                 = 0x06ea,
+                       Cyrillic_KA                                             = 0x06eb,
+                       Cyrillic_EL                                             = 0x06ec,
+                       Cyrillic_EM                                             = 0x06ed,
+                       Cyrillic_EN                                             = 0x06ee,
+                       Cyrillic_O                                              = 0x06ef,
+                       Cyrillic_PE                                             = 0x06f0,
+                       Cyrillic_YA                                             = 0x06f1,
+                       Cyrillic_ER                                             = 0x06f2,
+                       Cyrillic_ES                                             = 0x06f3,
+                       Cyrillic_TE                                             = 0x06f4,
+                       Cyrillic_U                                              = 0x06f5,
+                       Cyrillic_ZHE                                    = 0x06f6,
+                       Cyrillic_VE                                             = 0x06f7,
+                       Cyrillic_SOFTSIGN                               = 0x06f8,
+                       Cyrillic_YERU                                   = 0x06f9,
+                       Cyrillic_ZE                                             = 0x06fa,
+                       Cyrillic_SHA                                    = 0x06fb,
+                       Cyrillic_E                                              = 0x06fc,
+                       Cyrillic_SHCHA                                  = 0x06fd,
+                       Cyrillic_CHE                                    = 0x06fe,
+                       Cyrillic_HARDSIGN                               = 0x06ff,
+                       Greek_ALPHAaccent                               = 0x07a1,
+                       Greek_EPSILONaccent                             = 0x07a2,
+                       Greek_ETAaccent                                 = 0x07a3,
+                       Greek_IOTAaccent                                = 0x07a4,
+                       Greek_IOTAdieresis                              = 0x07a5,
+                       Greek_IOTAdiaeresis                             = 0x07a5,
+                       Greek_OMICRONaccent                             = 0x07a7,
+                       Greek_UPSILONaccent                             = 0x07a8,
+                       Greek_UPSILONdieresis                   = 0x07a9,
+                       Greek_OMEGAaccent                               = 0x07ab,
+                       Greek_accentdieresis                    = 0x07ae,
+                       Greek_horizbar                                  = 0x07af,
+                       Greek_alphaaccent                               = 0x07b1,
+                       Greek_epsilonaccent                             = 0x07b2,
+                       Greek_etaaccent                                 = 0x07b3,
+                       Greek_iotaaccent                                = 0x07b4,
+                       Greek_iotadieresis                              = 0x07b5,
+                       Greek_iotaaccentdieresis                = 0x07b6,
+                       Greek_omicronaccent                             = 0x07b7,
+                       Greek_upsilonaccent                             = 0x07b8,
+                       Greek_upsilondieresis                   = 0x07b9,
+                       Greek_upsilonaccentdieresis             = 0x07ba,
+                       Greek_omegaaccent                               = 0x07bb,
+                       Greek_ALPHA                                             = 0x07c1,
+                       Greek_BETA                                              = 0x07c2,
+                       Greek_GAMMA                                             = 0x07c3,
+                       Greek_DELTA                                             = 0x07c4,
+                       Greek_EPSILON                                   = 0x07c5,
+                       Greek_ZETA                                              = 0x07c6,
+                       Greek_ETA                                               = 0x07c7,
+                       Greek_THETA                                             = 0x07c8,
+                       Greek_IOTA                                              = 0x07c9,
+                       Greek_KAPPA                                             = 0x07ca,
+                       Greek_LAMDA                                             = 0x07cb,
+                       Greek_LAMBDA                                    = 0x07cb,
+                       Greek_MU                                                = 0x07cc,
+                       Greek_NU                                                = 0x07cd,
+                       Greek_XI                                                = 0x07ce,
+                       Greek_OMICRON                                   = 0x07cf,
+                       Greek_PI                                                = 0x07d0,
+                       Greek_RHO                                               = 0x07d1,
+                       Greek_SIGMA                                             = 0x07d2,
+                       Greek_TAU                                               = 0x07d4,
+                       Greek_UPSILON                                   = 0x07d5,
+                       Greek_PHI                                               = 0x07d6,
+                       Greek_CHI                                               = 0x07d7,
+                       Greek_PSI                                               = 0x07d8,
+                       Greek_OMEGA                                             = 0x07d9,
+                       Greek_alpha                                             = 0x07e1,
+                       Greek_beta                                              = 0x07e2,
+                       Greek_gamma                                             = 0x07e3,
+                       Greek_delta                                             = 0x07e4,
+                       Greek_epsilon                                   = 0x07e5,
+                       Greek_zeta                                              = 0x07e6,
+                       Greek_eta                                               = 0x07e7,
+                       Greek_theta                                             = 0x07e8,
+                       Greek_iota                                              = 0x07e9,
+                       Greek_kappa                                             = 0x07ea,
+                       Greek_lamda                                             = 0x07eb,
+                       Greek_lambda                                    = 0x07eb,
+                       Greek_mu                                                = 0x07ec,
+                       Greek_nu                                                = 0x07ed,
+                       Greek_xi                                                = 0x07ee,
+                       Greek_omicron                                   = 0x07ef,
+                       Greek_pi                                                = 0x07f0,
+                       Greek_rho                                               = 0x07f1,
+                       Greek_sigma                                             = 0x07f2,
+                       Greek_finalsmallsigma                   = 0x07f3,
+                       Greek_tau                                               = 0x07f4,
+                       Greek_upsilon                                   = 0x07f5,
+                       Greek_phi                                               = 0x07f6,
+                       Greek_chi                                               = 0x07f7,
+                       Greek_psi                                               = 0x07f8,
+                       Greek_omega                                             = 0x07f9,
+                       Greek_switch                                    = 0xff7e,
+                       leftradical                                             = 0x08a1,
+                       topleftradical                                  = 0x08a2,
+                       horizconnector                                  = 0x08a3,
+                       topintegral                                             = 0x08a4,
+                       botintegral                                             = 0x08a5,
+                       vertconnector                                   = 0x08a6,
+                       topleftsqbracket                                = 0x08a7,
+                       botleftsqbracket                                = 0x08a8,
+                       toprightsqbracket                               = 0x08a9,
+                       botrightsqbracket                               = 0x08aa,
+                       topleftparens                                   = 0x08ab,
+                       botleftparens                                   = 0x08ac,
+                       toprightparens                                  = 0x08ad,
+                       botrightparens                                  = 0x08ae,
+                       leftmiddlecurlybrace                    = 0x08af,
+                       rightmiddlecurlybrace                   = 0x08b0,
+                       topleftsummation                                = 0x08b1,
+                       botleftsummation                                = 0x08b2,
+                       topvertsummationconnector               = 0x08b3,
+                       botvertsummationconnector               = 0x08b4,
+                       toprightsummation                               = 0x08b5,
+                       botrightsummation                               = 0x08b6,
+                       rightmiddlesummation                    = 0x08b7,
+                       lessthanequal                                   = 0x08bc,
+                       notequal                                                = 0x08bd,
+                       greaterthanequal                                = 0x08be,
+                       integral                                                = 0x08bf,
+                       therefore                                               = 0x08c0,
+                       variation                                               = 0x08c1,
+                       infinity                                                = 0x08c2,
+                       nabla                                                   = 0x08c5,
+                       approximate                                             = 0x08c8,
+                       similarequal                                    = 0x08c9,
+                       ifonlyif                                                = 0x08cd,
+                       implies                                                 = 0x08ce,
+                       identical                                               = 0x08cf,
+                       radical                                                 = 0x08d6,
+                       includedin                                              = 0x08da,
+                       includes                                                = 0x08db,
+                       intersection                                    = 0x08dc,
+                       union                                                   = 0x08dd,
+                       logicaland                                              = 0x08de,
+                       logicalor                                               = 0x08df,
+                       partialderivative                               = 0x08ef,
+                       function                                                = 0x08f6,
+                       leftarrow                                               = 0x08fb,
+                       uparrow                                                 = 0x08fc,
+                       rightarrow                                              = 0x08fd,
+                       downarrow                                               = 0x08fe,
+                       blank                                                   = 0x09df,
+                       soliddiamond                                    = 0x09e0,
+                       checkerboard                                    = 0x09e1,
+                       ht                                                              = 0x09e2,
+                       ff                                                              = 0x09e3,
+                       cr                                                              = 0x09e4,
+                       lf                                                              = 0x09e5,
+                       nl                                                              = 0x09e8,
+                       vt                                                              = 0x09e9,
+                       lowrightcorner                                  = 0x09ea,
+                       uprightcorner                                   = 0x09eb,
+                       upleftcorner                                    = 0x09ec,
+                       lowleftcorner                                   = 0x09ed,
+                       crossinglines                                   = 0x09ee,
+                       horizlinescan1                                  = 0x09ef,
+                       horizlinescan3                                  = 0x09f0,
+                       horizlinescan5                                  = 0x09f1,
+                       horizlinescan7                                  = 0x09f2,
+                       horizlinescan9                                  = 0x09f3,
+                       leftt                                                   = 0x09f4,
+                       rightt                                                  = 0x09f5,
+                       bott                                                    = 0x09f6,
+                       topt                                                    = 0x09f7,
+                       vertbar                                                 = 0x09f8,
+                       emspace                                                 = 0x0aa1,
+                       enspace                                                 = 0x0aa2,
+                       em3space                                                = 0x0aa3,
+                       em4space                                                = 0x0aa4,
+                       digitspace                                              = 0x0aa5,
+                       punctspace                                              = 0x0aa6,
+                       thinspace                                               = 0x0aa7,
+                       hairspace                                               = 0x0aa8,
+                       emdash                                                  = 0x0aa9,
+                       endash                                                  = 0x0aaa,
+                       signifblank                                             = 0x0aac,
+                       ellipsis                                                = 0x0aae,
+                       doubbaselinedot                                 = 0x0aaf,
+                       onethird                                                = 0x0ab0,
+                       twothirds                                               = 0x0ab1,
+                       onefifth                                                = 0x0ab2,
+                       twofifths                                               = 0x0ab3,
+                       threefifths                                             = 0x0ab4,
+                       fourfifths                                              = 0x0ab5,
+                       onesixth                                                = 0x0ab6,
+                       fivesixths                                              = 0x0ab7,
+                       careof                                                  = 0x0ab8,
+                       figdash                                                 = 0x0abb,
+                       leftanglebracket                                = 0x0abc,
+                       decimalpoint                                    = 0x0abd,
+                       rightanglebracket                               = 0x0abe,
+                       marker                                                  = 0x0abf,
+                       oneeighth                                               = 0x0ac3,
+                       threeeighths                                    = 0x0ac4,
+                       fiveeighths                                             = 0x0ac5,
+                       seveneighths                                    = 0x0ac6,
+                       trademark                                               = 0x0ac9,
+                       signaturemark                                   = 0x0aca,
+                       trademarkincircle                               = 0x0acb,
+                       leftopentriangle                                = 0x0acc,
+                       rightopentriangle                               = 0x0acd,
+                       emopencircle                                    = 0x0ace,
+                       emopenrectangle                                 = 0x0acf,
+                       leftsinglequotemark                             = 0x0ad0,
+                       rightsinglequotemark                    = 0x0ad1,
+                       leftdoublequotemark                             = 0x0ad2,
+                       rightdoublequotemark                    = 0x0ad3,
+                       prescription                                    = 0x0ad4,
+                       permille                                                = 0x0ad5,
+                       minutes                                                 = 0x0ad6,
+                       seconds                                                 = 0x0ad7,
+                       latincross                                              = 0x0ad9,
+                       hexagram                                                = 0x0ada,
+                       filledrectbullet                                = 0x0adb,
+                       filledlefttribullet                             = 0x0adc,
+                       filledrighttribullet                    = 0x0add,
+                       emfilledcircle                                  = 0x0ade,
+                       emfilledrect                                    = 0x0adf,
+                       enopencircbullet                                = 0x0ae0,
+                       enopensquarebullet                              = 0x0ae1,
+                       openrectbullet                                  = 0x0ae2,
+                       opentribulletup                                 = 0x0ae3,
+                       opentribulletdown                               = 0x0ae4,
+                       openstar                                                = 0x0ae5,
+                       enfilledcircbullet                              = 0x0ae6,
+                       enfilledsqbullet                                = 0x0ae7,
+                       filledtribulletup                               = 0x0ae8,
+                       filledtribulletdown                             = 0x0ae9,
+                       leftpointer                                             = 0x0aea,
+                       rightpointer                                    = 0x0aeb,
+                       club                                                    = 0x0aec,
+                       diamond                                                 = 0x0aed,
+                       heart                                                   = 0x0aee,
+                       maltesecross                                    = 0x0af0,
+                       dagger                                                  = 0x0af1,
+                       doubledagger                                    = 0x0af2,
+                       checkmark                                               = 0x0af3,
+                       ballotcross                                             = 0x0af4,
+                       musicalsharp                                    = 0x0af5,
+                       musicalflat                                             = 0x0af6,
+                       malesymbol                                              = 0x0af7,
+                       femalesymbol                                    = 0x0af8,
+                       telephone                                               = 0x0af9,
+                       telephonerecorder                               = 0x0afa,
+                       phonographcopyright                             = 0x0afb,
+                       caret                                                   = 0x0afc,
+                       singlelowquotemark                              = 0x0afd,
+                       doublelowquotemark                              = 0x0afe,
+                       cursor                                                  = 0x0aff,
+                       leftcaret                                               = 0x0ba3,
+                       rightcaret                                              = 0x0ba6,
+                       downcaret                                               = 0x0ba8,
+                       upcaret                                                 = 0x0ba9,
+                       overbar                                                 = 0x0bc0,
+                       downtack                                                = 0x0bc2,
+                       upshoe                                                  = 0x0bc3,
+                       downstile                                               = 0x0bc4,
+                       underbar                                                = 0x0bc6,
+                       jot                                                             = 0x0bca,
+                       quad                                                    = 0x0bcc,
+                       uptack                                                  = 0x0bce,
+                       circle                                                  = 0x0bcf,
+                       upstile                                                 = 0x0bd3,
+                       downshoe                                                = 0x0bd6,
+                       rightshoe                                               = 0x0bd8,
+                       leftshoe                                                = 0x0bda,
+                       lefttack                                                = 0x0bdc,
+                       righttack                                               = 0x0bfc,
+                       hebrew_doublelowline                    = 0x0cdf,
+                       hebrew_aleph                                    = 0x0ce0,
+                       hebrew_bet                                              = 0x0ce1,
+                       hebrew_beth                                             = 0x0ce1,
+                       hebrew_gimel                                    = 0x0ce2,
+                       hebrew_gimmel                                   = 0x0ce2,
+                       hebrew_dalet                                    = 0x0ce3,
+                       hebrew_daleth                                   = 0x0ce3,
+                       hebrew_he                                               = 0x0ce4,
+                       hebrew_waw                                              = 0x0ce5,
+                       hebrew_zain                                             = 0x0ce6,
+                       hebrew_zayin                                    = 0x0ce6,
+                       hebrew_chet                                             = 0x0ce7,
+                       hebrew_het                                              = 0x0ce7,
+                       hebrew_tet                                              = 0x0ce8,
+                       hebrew_teth                                             = 0x0ce8,
+                       hebrew_yod                                              = 0x0ce9,
+                       hebrew_finalkaph                                = 0x0cea,
+                       hebrew_kaph                                             = 0x0ceb,
+                       hebrew_lamed                                    = 0x0cec,
+                       hebrew_finalmem                                 = 0x0ced,
+                       hebrew_mem                                              = 0x0cee,
+                       hebrew_finalnun                                 = 0x0cef,
+                       hebrew_nun                                              = 0x0cf0,
+                       hebrew_samech                                   = 0x0cf1,
+                       hebrew_samekh                                   = 0x0cf1,
+                       hebrew_ayin                                             = 0x0cf2,
+                       hebrew_finalpe                                  = 0x0cf3,
+                       hebrew_pe                                               = 0x0cf4,
+                       hebrew_finalzade                                = 0x0cf5,
+                       hebrew_finalzadi                                = 0x0cf5,
+                       hebrew_zade                                             = 0x0cf6,
+                       hebrew_zadi                                             = 0x0cf6,
+                       hebrew_qoph                                             = 0x0cf7,
+                       hebrew_kuf                                              = 0x0cf7,
+                       hebrew_resh                                             = 0x0cf8,
+                       hebrew_shin                                             = 0x0cf9,
+                       hebrew_taw                                              = 0x0cfa,
+                       hebrew_taf                                              = 0x0cfa,
+                       Hebrew_switch                                   = 0xff7e,
+                       Thai_kokai                                              = 0x0da1,
+                       Thai_khokhai                                    = 0x0da2,
+                       Thai_khokhuat                                   = 0x0da3,
+                       Thai_khokhwai                                   = 0x0da4,
+                       Thai_khokhon                                    = 0x0da5,
+                       Thai_khorakhang                                 = 0x0da6,
+                       Thai_ngongu                                             = 0x0da7,
+                       Thai_chochan                                    = 0x0da8,
+                       Thai_choching                                   = 0x0da9,
+                       Thai_chochang                                   = 0x0daa,
+                       Thai_soso                                               = 0x0dab,
+                       Thai_chochoe                                    = 0x0dac,
+                       Thai_yoying                                             = 0x0dad,
+                       Thai_dochada                                    = 0x0dae,
+                       Thai_topatak                                    = 0x0daf,
+                       Thai_thothan                                    = 0x0db0,
+                       Thai_thonangmontho                              = 0x0db1,
+                       Thai_thophuthao                                 = 0x0db2,
+                       Thai_nonen                                              = 0x0db3,
+                       Thai_dodek                                              = 0x0db4,
+                       Thai_totao                                              = 0x0db5,
+                       Thai_thothung                                   = 0x0db6,
+                       Thai_thothahan                                  = 0x0db7,
+                       Thai_thothong                                   = 0x0db8,
+                       Thai_nonu                                               = 0x0db9,
+                       Thai_bobaimai                                   = 0x0dba,
+                       Thai_popla                                              = 0x0dbb,
+                       Thai_phophung                                   = 0x0dbc,
+                       Thai_fofa                                               = 0x0dbd,
+                       Thai_phophan                                    = 0x0dbe,
+                       Thai_fofan                                              = 0x0dbf,
+                       Thai_phosamphao                                 = 0x0dc0,
+                       Thai_moma                                               = 0x0dc1,
+                       Thai_yoyak                                              = 0x0dc2,
+                       Thai_rorua                                              = 0x0dc3,
+                       Thai_ru                                                 = 0x0dc4,
+                       Thai_loling                                             = 0x0dc5,
+                       Thai_lu                                                 = 0x0dc6,
+                       Thai_wowaen                                             = 0x0dc7,
+                       Thai_sosala                                             = 0x0dc8,
+                       Thai_sorusi                                             = 0x0dc9,
+                       Thai_sosua                                              = 0x0dca,
+                       Thai_hohip                                              = 0x0dcb,
+                       Thai_lochula                                    = 0x0dcc,
+                       Thai_oang                                               = 0x0dcd,
+                       Thai_honokhuk                                   = 0x0dce,
+                       Thai_paiyannoi                                  = 0x0dcf,
+                       Thai_saraa                                              = 0x0dd0,
+                       Thai_maihanakat                                 = 0x0dd1,
+                       Thai_saraaa                                             = 0x0dd2,
+                       Thai_saraam                                             = 0x0dd3,
+                       Thai_sarai                                              = 0x0dd4,
+                       Thai_saraii                                             = 0x0dd5,
+                       Thai_saraue                                             = 0x0dd6,
+                       Thai_sarauee                                    = 0x0dd7,
+                       Thai_sarau                                              = 0x0dd8,
+                       Thai_sarauu                                             = 0x0dd9,
+                       Thai_phinthu                                    = 0x0dda,
+                       Thai_maihanakat_maitho                  = 0x0dde,
+                       Thai_baht                                               = 0x0ddf,
+                       Thai_sarae                                              = 0x0de0,
+                       Thai_saraae                                             = 0x0de1,
+                       Thai_sarao                                              = 0x0de2,
+                       Thai_saraaimaimuan                              = 0x0de3,
+                       Thai_saraaimaimalai                             = 0x0de4,
+                       Thai_lakkhangyao                                = 0x0de5,
+                       Thai_maiyamok                                   = 0x0de6,
+                       Thai_maitaikhu                                  = 0x0de7,
+                       Thai_maiek                                              = 0x0de8,
+                       Thai_maitho                                             = 0x0de9,
+                       Thai_maitri                                             = 0x0dea,
+                       Thai_maichattawa                                = 0x0deb,
+                       Thai_thanthakhat                                = 0x0dec,
+                       Thai_nikhahit                                   = 0x0ded,
+                       Thai_leksun                                             = 0x0df0,
+                       Thai_leknung                                    = 0x0df1,
+                       Thai_leksong                                    = 0x0df2,
+                       Thai_leksam                                             = 0x0df3,
+                       Thai_leksi                                              = 0x0df4,
+                       Thai_lekha                                              = 0x0df5,
+                       Thai_lekhok                                             = 0x0df6,
+                       Thai_lekchet                                    = 0x0df7,
+                       Thai_lekpaet                                    = 0x0df8,
+                       Thai_lekkao                                             = 0x0df9,
+                       Hangul                                                  = 0xff31,
+                       Hangul_Start                                    = 0xff32,
+                       Hangul_End                                              = 0xff33,
+                       Hangul_Hanja                                    = 0xff34,
+                       Hangul_Jamo                                             = 0xff35,
+                       Hangul_Romaja                                   = 0xff36,
+                       Hangul_Codeinput                                = 0xff37,
+                       Hangul_Jeonja                                   = 0xff38,
+                       Hangul_Banja                                    = 0xff39,
+                       Hangul_PreHanja                                 = 0xff3a,
+                       Hangul_PostHanja                                = 0xff3b,
+                       Hangul_SingleCandidate                  = 0xff3c,
+                       Hangul_MultipleCandidate                = 0xff3d,
+                       Hangul_PreviousCandidate                = 0xff3e,
+                       Hangul_Special                                  = 0xff3f,
+                       Hangul_switch                                   = 0xff7e,
+                       Hangul_Kiyeog                                   = 0x0ea1,
+                       Hangul_SsangKiyeog                              = 0x0ea2,
+                       Hangul_KiyeogSios                               = 0x0ea3,
+                       Hangul_Nieun                                    = 0x0ea4,
+                       Hangul_NieunJieuj                               = 0x0ea5,
+                       Hangul_NieunHieuh                               = 0x0ea6,
+                       Hangul_Dikeud                                   = 0x0ea7,
+                       Hangul_SsangDikeud                              = 0x0ea8,
+                       Hangul_Rieul                                    = 0x0ea9,
+                       Hangul_RieulKiyeog                              = 0x0eaa,
+                       Hangul_RieulMieum                               = 0x0eab,
+                       Hangul_RieulPieub                               = 0x0eac,
+                       Hangul_RieulSios                                = 0x0ead,
+                       Hangul_RieulTieut                               = 0x0eae,
+                       Hangul_RieulPhieuf                              = 0x0eaf,
+                       Hangul_RieulHieuh                               = 0x0eb0,
+                       Hangul_Mieum                                    = 0x0eb1,
+                       Hangul_Pieub                                    = 0x0eb2,
+                       Hangul_SsangPieub                               = 0x0eb3,
+                       Hangul_PieubSios                                = 0x0eb4,
+                       Hangul_Sios                                             = 0x0eb5,
+                       Hangul_SsangSios                                = 0x0eb6,
+                       Hangul_Ieung                                    = 0x0eb7,
+                       Hangul_Jieuj                                    = 0x0eb8,
+                       Hangul_SsangJieuj                               = 0x0eb9,
+                       Hangul_Cieuc                                    = 0x0eba,
+                       Hangul_Khieuq                                   = 0x0ebb,
+                       Hangul_Tieut                                    = 0x0ebc,
+                       Hangul_Phieuf                                   = 0x0ebd,
+                       Hangul_Hieuh                                    = 0x0ebe,
+                       Hangul_A                                                = 0x0ebf,
+                       Hangul_AE                                               = 0x0ec0,
+                       Hangul_YA                                               = 0x0ec1,
+                       Hangul_YAE                                              = 0x0ec2,
+                       Hangul_EO                                               = 0x0ec3,
+                       Hangul_E                                                = 0x0ec4,
+                       Hangul_YEO                                              = 0x0ec5,
+                       Hangul_YE                                               = 0x0ec6,
+                       Hangul_O                                                = 0x0ec7,
+                       Hangul_WA                                               = 0x0ec8,
+                       Hangul_WAE                                              = 0x0ec9,
+                       Hangul_OE                                               = 0x0eca,
+                       Hangul_YO                                               = 0x0ecb,
+                       Hangul_U                                                = 0x0ecc,
+                       Hangul_WEO                                              = 0x0ecd,
+                       Hangul_WE                                               = 0x0ece,
+                       Hangul_WI                                               = 0x0ecf,
+                       Hangul_YU                                               = 0x0ed0,
+                       Hangul_EU                                               = 0x0ed1,
+                       Hangul_YI                                               = 0x0ed2,
+                       Hangul_I                                                = 0x0ed3,
+                       Hangul_J_Kiyeog                                 = 0x0ed4,
+                       Hangul_J_SsangKiyeog                    = 0x0ed5,
+                       Hangul_J_KiyeogSios                             = 0x0ed6,
+                       Hangul_J_Nieun                                  = 0x0ed7,
+                       Hangul_J_NieunJieuj                             = 0x0ed8,
+                       Hangul_J_NieunHieuh                             = 0x0ed9,
+                       Hangul_J_Dikeud                                 = 0x0eda,
+                       Hangul_J_Rieul                                  = 0x0edb,
+                       Hangul_J_RieulKiyeog                    = 0x0edc,
+                       Hangul_J_RieulMieum                             = 0x0edd,
+                       Hangul_J_RieulPieub                             = 0x0ede,
+                       Hangul_J_RieulSios                              = 0x0edf,
+                       Hangul_J_RieulTieut                             = 0x0ee0,
+                       Hangul_J_RieulPhieuf                    = 0x0ee1,
+                       Hangul_J_RieulHieuh                             = 0x0ee2,
+                       Hangul_J_Mieum                                  = 0x0ee3,
+                       Hangul_J_Pieub                                  = 0x0ee4,
+                       Hangul_J_PieubSios                              = 0x0ee5,
+                       Hangul_J_Sios                                   = 0x0ee6,
+                       Hangul_J_SsangSios                              = 0x0ee7,
+                       Hangul_J_Ieung                                  = 0x0ee8,
+                       Hangul_J_Jieuj                                  = 0x0ee9,
+                       Hangul_J_Cieuc                                  = 0x0eea,
+                       Hangul_J_Khieuq                                 = 0x0eeb,
+                       Hangul_J_Tieut                                  = 0x0eec,
+                       Hangul_J_Phieuf                                 = 0x0eed,
+                       Hangul_J_Hieuh                                  = 0x0eee,
+                       Hangul_RieulYeorinHieuh                 = 0x0eef,
+                       Hangul_SunkyeongeumMieum                = 0x0ef0,
+                       Hangul_SunkyeongeumPieub                = 0x0ef1,
+                       Hangul_PanSios                                  = 0x0ef2,
+                       Hangul_KkogjiDalrinIeung                = 0x0ef3,
+                       Hangul_SunkyeongeumPhieuf               = 0x0ef4,
+                       Hangul_YeorinHieuh                              = 0x0ef5,
+                       Hangul_AraeA                                    = 0x0ef6,
+                       Hangul_AraeAE                                   = 0x0ef7,
+                       Hangul_J_PanSios                                = 0x0ef8,
+                       Hangul_J_KkogjiDalrinIeung              = 0x0ef9,
+                       Hangul_J_YeorinHieuh                    = 0x0efa,
+                       Korean_Won                                              = 0x0eff,
+                       Armenian_ligature_ew                    = 0x1000587,
+                       Armenian_full_stop                              = 0x1000589,
+                       Armenian_verjaket                               = 0x1000589,
+                       Armenian_separation_mark                = 0x100055d,
+                       Armenian_but                                    = 0x100055d,
+                       Armenian_hyphen                                 = 0x100058a,
+                       Armenian_yentamna                               = 0x100058a,
+                       Armenian_exclam                                 = 0x100055c,
+                       Armenian_amanak                                 = 0x100055c,
+                       Armenian_accent                                 = 0x100055b,
+                       Armenian_shesht                                 = 0x100055b,
+                       Armenian_question                               = 0x100055e,
+                       Armenian_paruyk                                 = 0x100055e,
+                       Armenian_AYB                                    = 0x1000531,
+                       Armenian_ayb                                    = 0x1000561,
+                       Armenian_BEN                                    = 0x1000532,
+                       Armenian_ben                                    = 0x1000562,
+                       Armenian_GIM                                    = 0x1000533,
+                       Armenian_gim                                    = 0x1000563,
+                       Armenian_DA                                             = 0x1000534,
+                       Armenian_da                                             = 0x1000564,
+                       Armenian_YECH                                   = 0x1000535,
+                       Armenian_yech                                   = 0x1000565,
+                       Armenian_ZA                                             = 0x1000536,
+                       Armenian_za                                             = 0x1000566,
+                       Armenian_E                                              = 0x1000537,
+                       Armenian_e                                              = 0x1000567,
+                       Armenian_AT                                             = 0x1000538,
+                       Armenian_at                                             = 0x1000568,
+                       Armenian_TO                                             = 0x1000539,
+                       Armenian_to                                             = 0x1000569,
+                       Armenian_ZHE                                    = 0x100053a,
+                       Armenian_zhe                                    = 0x100056a,
+                       Armenian_INI                                    = 0x100053b,
+                       Armenian_ini                                    = 0x100056b,
+                       Armenian_LYUN                                   = 0x100053c,
+                       Armenian_lyun                                   = 0x100056c,
+                       Armenian_KHE                                    = 0x100053d,
+                       Armenian_khe                                    = 0x100056d,
+                       Armenian_TSA                                    = 0x100053e,
+                       Armenian_tsa                                    = 0x100056e,
+                       Armenian_KEN                                    = 0x100053f,
+                       Armenian_ken                                    = 0x100056f,
+                       Armenian_HO                                             = 0x1000540,
+                       Armenian_ho                                             = 0x1000570,
+                       Armenian_DZA                                    = 0x1000541,
+                       Armenian_dza                                    = 0x1000571,
+                       Armenian_GHAT                                   = 0x1000542,
+                       Armenian_ghat                                   = 0x1000572,
+                       Armenian_TCHE                                   = 0x1000543,
+                       Armenian_tche                                   = 0x1000573,
+                       Armenian_MEN                                    = 0x1000544,
+                       Armenian_men                                    = 0x1000574,
+                       Armenian_HI                                             = 0x1000545,
+                       Armenian_hi                                             = 0x1000575,
+                       Armenian_NU                                             = 0x1000546,
+                       Armenian_nu                                             = 0x1000576,
+                       Armenian_SHA                                    = 0x1000547,
+                       Armenian_sha                                    = 0x1000577,
+                       Armenian_VO                                             = 0x1000548,
+                       Armenian_vo                                             = 0x1000578,
+                       Armenian_CHA                                    = 0x1000549,
+                       Armenian_cha                                    = 0x1000579,
+                       Armenian_PE                                             = 0x100054a,
+                       Armenian_pe                                             = 0x100057a,
+                       Armenian_JE                                             = 0x100054b,
+                       Armenian_je                                             = 0x100057b,
+                       Armenian_RA                                             = 0x100054c,
+                       Armenian_ra                                             = 0x100057c,
+                       Armenian_SE                                             = 0x100054d,
+                       Armenian_se                                             = 0x100057d,
+                       Armenian_VEV                                    = 0x100054e,
+                       Armenian_vev                                    = 0x100057e,
+                       Armenian_TYUN                                   = 0x100054f,
+                       Armenian_tyun                                   = 0x100057f,
+                       Armenian_RE                                             = 0x1000550,
+                       Armenian_re                                             = 0x1000580,
+                       Armenian_TSO                                    = 0x1000551,
+                       Armenian_tso                                    = 0x1000581,
+                       Armenian_VYUN                                   = 0x1000552,
+                       Armenian_vyun                                   = 0x1000582,
+                       Armenian_PYUR                                   = 0x1000553,
+                       Armenian_pyur                                   = 0x1000583,
+                       Armenian_KE                                             = 0x1000554,
+                       Armenian_ke                                             = 0x1000584,
+                       Armenian_O                                              = 0x1000555,
+                       Armenian_o                                              = 0x1000585,
+                       Armenian_FE                                             = 0x1000556,
+                       Armenian_fe                                             = 0x1000586,
+                       Armenian_apostrophe                             = 0x100055a,
+                       Georgian_an                                             = 0x10010d0,
+                       Georgian_ban                                    = 0x10010d1,
+                       Georgian_gan                                    = 0x10010d2,
+                       Georgian_don                                    = 0x10010d3,
+                       Georgian_en                                             = 0x10010d4,
+                       Georgian_vin                                    = 0x10010d5,
+                       Georgian_zen                                    = 0x10010d6,
+                       Georgian_tan                                    = 0x10010d7,
+                       Georgian_in                                             = 0x10010d8,
+                       Georgian_kan                                    = 0x10010d9,
+                       Georgian_las                                    = 0x10010da,
+                       Georgian_man                                    = 0x10010db,
+                       Georgian_nar                                    = 0x10010dc,
+                       Georgian_on                                             = 0x10010dd,
+                       Georgian_par                                    = 0x10010de,
+                       Georgian_zhar                                   = 0x10010df,
+                       Georgian_rae                                    = 0x10010e0,
+                       Georgian_san                                    = 0x10010e1,
+                       Georgian_tar                                    = 0x10010e2,
+                       Georgian_un                                             = 0x10010e3,
+                       Georgian_phar                                   = 0x10010e4,
+                       Georgian_khar                                   = 0x10010e5,
+                       Georgian_ghan                                   = 0x10010e6,
+                       Georgian_qar                                    = 0x10010e7,
+                       Georgian_shin                                   = 0x10010e8,
+                       Georgian_chin                                   = 0x10010e9,
+                       Georgian_can                                    = 0x10010ea,
+                       Georgian_jil                                    = 0x10010eb,
+                       Georgian_cil                                    = 0x10010ec,
+                       Georgian_char                                   = 0x10010ed,
+                       Georgian_xan                                    = 0x10010ee,
+                       Georgian_jhan                                   = 0x10010ef,
+                       Georgian_hae                                    = 0x10010f0,
+                       Georgian_he                                             = 0x10010f1,
+                       Georgian_hie                                    = 0x10010f2,
+                       Georgian_we                                             = 0x10010f3,
+                       Georgian_har                                    = 0x10010f4,
+                       Georgian_hoe                                    = 0x10010f5,
+                       Georgian_fi                                             = 0x10010f6,
+                       Xabovedot                                               = 0x1001e8a,
+                       Ibreve                                                  = 0x100012c,
+                       Zstroke                                                 = 0x10001b5,
+                       Gcaron                                                  = 0x10001e6,
+                       Ocaron                                                  = 0x10001d1,
+                       Obarred                                                 = 0x100019f,
+                       xabovedot                                               = 0x1001e8b,
+                       ibreve                                                  = 0x100012d,
+                       zstroke                                                 = 0x10001b6,
+                       gcaron                                                  = 0x10001e7,
+                       ocaron                                                  = 0x10001d2,
+                       obarred                                                 = 0x1000275,
+                       SCHWA                                                   = 0x100018f,
+                       schwa                                                   = 0x1000259,
+                       EZH                                                             = 0x10001b7,
+                       ezh                                                             = 0x1000292,
+                       Lbelowdot                                               = 0x1001e36,
+                       lbelowdot                                               = 0x1001e37,
+                       Abelowdot                                               = 0x1001ea0,
+                       abelowdot                                               = 0x1001ea1,
+                       Ahook                                                   = 0x1001ea2,
+                       ahook                                                   = 0x1001ea3,
+                       Acircumflexacute                                = 0x1001ea4,
+                       acircumflexacute                                = 0x1001ea5,
+                       Acircumflexgrave                                = 0x1001ea6,
+                       acircumflexgrave                                = 0x1001ea7,
+                       Acircumflexhook                                 = 0x1001ea8,
+                       acircumflexhook                                 = 0x1001ea9,
+                       Acircumflextilde                                = 0x1001eaa,
+                       acircumflextilde                                = 0x1001eab,
+                       Acircumflexbelowdot                             = 0x1001eac,
+                       acircumflexbelowdot                             = 0x1001ead,
+                       Abreveacute                                             = 0x1001eae,
+                       abreveacute                                             = 0x1001eaf,
+                       Abrevegrave                                             = 0x1001eb0,
+                       abrevegrave                                             = 0x1001eb1,
+                       Abrevehook                                              = 0x1001eb2,
+                       abrevehook                                              = 0x1001eb3,
+                       Abrevetilde                                             = 0x1001eb4,
+                       abrevetilde                                             = 0x1001eb5,
+                       Abrevebelowdot                                  = 0x1001eb6,
+                       abrevebelowdot                                  = 0x1001eb7,
+                       Ebelowdot                                               = 0x1001eb8,
+                       ebelowdot                                               = 0x1001eb9,
+                       Ehook                                                   = 0x1001eba,
+                       ehook                                                   = 0x1001ebb,
+                       Etilde                                                  = 0x1001ebc,
+                       etilde                                                  = 0x1001ebd,
+                       Ecircumflexacute                                = 0x1001ebe,
+                       ecircumflexacute                                = 0x1001ebf,
+                       Ecircumflexgrave                                = 0x1001ec0,
+                       ecircumflexgrave                                = 0x1001ec1,
+                       Ecircumflexhook                                 = 0x1001ec2,
+                       ecircumflexhook                                 = 0x1001ec3,
+                       Ecircumflextilde                                = 0x1001ec4,
+                       ecircumflextilde                                = 0x1001ec5,
+                       Ecircumflexbelowdot                             = 0x1001ec6,
+                       ecircumflexbelowdot                             = 0x1001ec7,
+                       Ihook                                                   = 0x1001ec8,
+                       ihook                                                   = 0x1001ec9,
+                       Ibelowdot                                               = 0x1001eca,
+                       ibelowdot                                               = 0x1001ecb,
+                       Obelowdot                                               = 0x1001ecc,
+                       obelowdot                                               = 0x1001ecd,
+                       Ohook                                                   = 0x1001ece,
+                       ohook                                                   = 0x1001ecf,
+                       Ocircumflexacute                                = 0x1001ed0,
+                       ocircumflexacute                                = 0x1001ed1,
+                       Ocircumflexgrave                                = 0x1001ed2,
+                       ocircumflexgrave                                = 0x1001ed3,
+                       Ocircumflexhook                                 = 0x1001ed4,
+                       ocircumflexhook                                 = 0x1001ed5,
+                       Ocircumflextilde                                = 0x1001ed6,
+                       ocircumflextilde                                = 0x1001ed7,
+                       Ocircumflexbelowdot                             = 0x1001ed8,
+                       ocircumflexbelowdot                             = 0x1001ed9,
+                       Ohornacute                                              = 0x1001eda,
+                       ohornacute                                              = 0x1001edb,
+                       Ohorngrave                                              = 0x1001edc,
+                       ohorngrave                                              = 0x1001edd,
+                       Ohornhook                                               = 0x1001ede,
+                       ohornhook                                               = 0x1001edf,
+                       Ohorntilde                                              = 0x1001ee0,
+                       ohorntilde                                              = 0x1001ee1,
+                       Ohornbelowdot                                   = 0x1001ee2,
+                       ohornbelowdot                                   = 0x1001ee3,
+                       Ubelowdot                                               = 0x1001ee4,
+                       ubelowdot                                               = 0x1001ee5,
+                       Uhook                                                   = 0x1001ee6,
+                       uhook                                                   = 0x1001ee7,
+                       Uhornacute                                              = 0x1001ee8,
+                       uhornacute                                              = 0x1001ee9,
+                       Uhorngrave                                              = 0x1001eea,
+                       uhorngrave                                              = 0x1001eeb,
+                       Uhornhook                                               = 0x1001eec,
+                       uhornhook                                               = 0x1001eed,
+                       Uhorntilde                                              = 0x1001eee,
+                       uhorntilde                                              = 0x1001eef,
+                       Uhornbelowdot                                   = 0x1001ef0,
+                       uhornbelowdot                                   = 0x1001ef1,
+                       Ybelowdot                                               = 0x1001ef4,
+                       ybelowdot                                               = 0x1001ef5,
+                       Yhook                                                   = 0x1001ef6,
+                       yhook                                                   = 0x1001ef7,
+                       Ytilde                                                  = 0x1001ef8,
+                       ytilde                                                  = 0x1001ef9,
+                       Ohorn                                                   = 0x10001a0,
+                       ohorn                                                   = 0x10001a1,
+                       Uhorn                                                   = 0x10001af,
+                       uhorn                                                   = 0x10001b0,
+                       EcuSign                                                 = 0x10020a0,
+                       ColonSign                                               = 0x10020a1,
+                       CruzeiroSign                                    = 0x10020a2,
+                       FFrancSign                                              = 0x10020a3,
+                       LiraSign                                                = 0x10020a4,
+                       MillSign                                                = 0x10020a5,
+                       NairaSign                                               = 0x10020a6,
+                       PesetaSign                                              = 0x10020a7,
+                       RupeeSign                                               = 0x10020a8,
+                       WonSign                                                 = 0x10020a9,
+                       NewSheqelSign                                   = 0x10020aa,
+                       DongSign                                                = 0x10020ab,
+                       EuroSign                                                = 0x20ac,
+                       zerosuperior                                    = 0x1002070,
+                       foursuperior                                    = 0x1002074,
+                       fivesuperior                                    = 0x1002075,
+                       sixsuperior                                             = 0x1002076,
+                       sevensuperior                                   = 0x1002077,
+                       eightsuperior                                   = 0x1002078,
+                       ninesuperior                                    = 0x1002079,
+                       zerosubscript                                   = 0x1002080,
+                       onesubscript                                    = 0x1002081,
+                       twosubscript                                    = 0x1002082,
+                       threesubscript                                  = 0x1002083,
+                       foursubscript                                   = 0x1002084,
+                       fivesubscript                                   = 0x1002085,
+                       sixsubscript                                    = 0x1002086,
+                       sevensubscript                                  = 0x1002087,
+                       eightsubscript                                  = 0x1002088,
+                       ninesubscript                                   = 0x1002089,
+                       partdifferential                                = 0x1002202,
+                       emptyset                                                = 0x1002205,
+                       elementof                                               = 0x1002208,
+                       notelementof                                    = 0x1002209,
+                       containsas                                              = 0x100220B,
+                       squareroot                                              = 0x100221A,
+                       cuberoot                                                = 0x100221B,
+                       fourthroot                                              = 0x100221C,
+                       dintegral                                               = 0x100222C,
+                       tintegral                                               = 0x100222D,
+                       because                                                 = 0x1002235,
+                       approxeq                                                = 0x1002248,
+                       notapproxeq                                             = 0x1002247,
+                       notidentical                                    = 0x1002262,
+                       stricteq                                                = 0x1002263,
+                       braille_dot_1                                   = 0xfff1,
+                       braille_dot_2                                   = 0xfff2,
+                       braille_dot_3                                   = 0xfff3,
+                       braille_dot_4                                   = 0xfff4,
+                       braille_dot_5                                   = 0xfff5,
+                       braille_dot_6                                   = 0xfff6,
+                       braille_dot_7                                   = 0xfff7,
+                       braille_dot_8                                   = 0xfff8,
+                       braille_dot_9                                   = 0xfff9,
+                       braille_dot_10                                  = 0xfffa,
+                       braille_blank                                   = 0x1002800,
+                       braille_dots_1                                  = 0x1002801,
+                       braille_dots_2                                  = 0x1002802,
+                       braille_dots_12                                 = 0x1002803,
+                       braille_dots_3                                  = 0x1002804,
+                       braille_dots_13                                 = 0x1002805,
+                       braille_dots_23                                 = 0x1002806,
+                       braille_dots_123                                = 0x1002807,
+                       braille_dots_4                                  = 0x1002808,
+                       braille_dots_14                                 = 0x1002809,
+                       braille_dots_24                                 = 0x100280a,
+                       braille_dots_124                                = 0x100280b,
+                       braille_dots_34                                 = 0x100280c,
+                       braille_dots_134                                = 0x100280d,
+                       braille_dots_234                                = 0x100280e,
+                       braille_dots_1234                               = 0x100280f,
+                       braille_dots_5                                  = 0x1002810,
+                       braille_dots_15                                 = 0x1002811,
+                       braille_dots_25                                 = 0x1002812,
+                       braille_dots_125                                = 0x1002813,
+                       braille_dots_35                                 = 0x1002814,
+                       braille_dots_135                                = 0x1002815,
+                       braille_dots_235                                = 0x1002816,
+                       braille_dots_1235                               = 0x1002817,
+                       braille_dots_45                                 = 0x1002818,
+                       braille_dots_145                                = 0x1002819,
+                       braille_dots_245                                = 0x100281a,
+                       braille_dots_1245                               = 0x100281b,
+                       braille_dots_345                                = 0x100281c,
+                       braille_dots_1345                               = 0x100281d,
+                       braille_dots_2345                               = 0x100281e,
+                       braille_dots_12345                              = 0x100281f,
+                       braille_dots_6                                  = 0x1002820,
+                       braille_dots_16                                 = 0x1002821,
+                       braille_dots_26                                 = 0x1002822,
+                       braille_dots_126                                = 0x1002823,
+                       braille_dots_36                                 = 0x1002824,
+                       braille_dots_136                                = 0x1002825,
+                       braille_dots_236                                = 0x1002826,
+                       braille_dots_1236                               = 0x1002827,
+                       braille_dots_46                                 = 0x1002828,
+                       braille_dots_146                                = 0x1002829,
+                       braille_dots_246                                = 0x100282a,
+                       braille_dots_1246                               = 0x100282b,
+                       braille_dots_346                                = 0x100282c,
+                       braille_dots_1346                               = 0x100282d,
+                       braille_dots_2346                               = 0x100282e,
+                       braille_dots_12346                              = 0x100282f,
+                       braille_dots_56                                 = 0x1002830,
+                       braille_dots_156                                = 0x1002831,
+                       braille_dots_256                                = 0x1002832,
+                       braille_dots_1256                               = 0x1002833,
+                       braille_dots_356                                = 0x1002834,
+                       braille_dots_1356                               = 0x1002835,
+                       braille_dots_2356                               = 0x1002836,
+                       braille_dots_12356                              = 0x1002837,
+                       braille_dots_456                                = 0x1002838,
+                       braille_dots_1456                               = 0x1002839,
+                       braille_dots_2456                               = 0x100283a,
+                       braille_dots_12456                              = 0x100283b,
+                       braille_dots_3456                               = 0x100283c,
+                       braille_dots_13456                              = 0x100283d,
+                       braille_dots_23456                              = 0x100283e,
+                       braille_dots_123456                             = 0x100283f,
+                       braille_dots_7                                  = 0x1002840,
+                       braille_dots_17                                 = 0x1002841,
+                       braille_dots_27                                 = 0x1002842,
+                       braille_dots_127                                = 0x1002843,
+                       braille_dots_37                                 = 0x1002844,
+                       braille_dots_137                                = 0x1002845,
+                       braille_dots_237                                = 0x1002846,
+                       braille_dots_1237                               = 0x1002847,
+                       braille_dots_47                                 = 0x1002848,
+                       braille_dots_147                                = 0x1002849,
+                       braille_dots_247                                = 0x100284a,
+                       braille_dots_1247                               = 0x100284b,
+                       braille_dots_347                                = 0x100284c,
+                       braille_dots_1347                               = 0x100284d,
+                       braille_dots_2347                               = 0x100284e,
+                       braille_dots_12347                              = 0x100284f,
+                       braille_dots_57                                 = 0x1002850,
+                       braille_dots_157                                = 0x1002851,
+                       braille_dots_257                                = 0x1002852,
+                       braille_dots_1257                               = 0x1002853,
+                       braille_dots_357                                = 0x1002854,
+                       braille_dots_1357                               = 0x1002855,
+                       braille_dots_2357                               = 0x1002856,
+                       braille_dots_12357                              = 0x1002857,
+                       braille_dots_457                                = 0x1002858,
+                       braille_dots_1457                               = 0x1002859,
+                       braille_dots_2457                               = 0x100285a,
+                       braille_dots_12457                              = 0x100285b,
+                       braille_dots_3457                               = 0x100285c,
+                       braille_dots_13457                              = 0x100285d,
+                       braille_dots_23457                              = 0x100285e,
+                       braille_dots_123457                             = 0x100285f,
+                       braille_dots_67                                 = 0x1002860,
+                       braille_dots_167                                = 0x1002861,
+                       braille_dots_267                                = 0x1002862,
+                       braille_dots_1267                               = 0x1002863,
+                       braille_dots_367                                = 0x1002864,
+                       braille_dots_1367                               = 0x1002865,
+                       braille_dots_2367                               = 0x1002866,
+                       braille_dots_12367                              = 0x1002867,
+                       braille_dots_467                                = 0x1002868,
+                       braille_dots_1467                               = 0x1002869,
+                       braille_dots_2467                               = 0x100286a,
+                       braille_dots_12467                              = 0x100286b,
+                       braille_dots_3467                               = 0x100286c,
+                       braille_dots_13467                              = 0x100286d,
+                       braille_dots_23467                              = 0x100286e,
+                       braille_dots_123467                             = 0x100286f,
+                       braille_dots_567                                = 0x1002870,
+                       braille_dots_1567                               = 0x1002871,
+                       braille_dots_2567                               = 0x1002872,
+                       braille_dots_12567                              = 0x1002873,
+                       braille_dots_3567                               = 0x1002874,
+                       braille_dots_13567                              = 0x1002875,
+                       braille_dots_23567                              = 0x1002876,
+                       braille_dots_123567                             = 0x1002877,
+                       braille_dots_4567                               = 0x1002878,
+                       braille_dots_14567                              = 0x1002879,
+                       braille_dots_24567                              = 0x100287a,
+                       braille_dots_124567                             = 0x100287b,
+                       braille_dots_34567                              = 0x100287c,
+                       braille_dots_134567                             = 0x100287d,
+                       braille_dots_234567                             = 0x100287e,
+                       braille_dots_1234567                    = 0x100287f,
+                       braille_dots_8                                  = 0x1002880,
+                       braille_dots_18                                 = 0x1002881,
+                       braille_dots_28                                 = 0x1002882,
+                       braille_dots_128                                = 0x1002883,
+                       braille_dots_38                                 = 0x1002884,
+                       braille_dots_138                                = 0x1002885,
+                       braille_dots_238                                = 0x1002886,
+                       braille_dots_1238                               = 0x1002887,
+                       braille_dots_48                                 = 0x1002888,
+                       braille_dots_148                                = 0x1002889,
+                       braille_dots_248                                = 0x100288a,
+                       braille_dots_1248                               = 0x100288b,
+                       braille_dots_348                                = 0x100288c,
+                       braille_dots_1348                               = 0x100288d,
+                       braille_dots_2348                               = 0x100288e,
+                       braille_dots_12348                              = 0x100288f,
+                       braille_dots_58                                 = 0x1002890,
+                       braille_dots_158                                = 0x1002891,
+                       braille_dots_258                                = 0x1002892,
+                       braille_dots_1258                               = 0x1002893,
+                       braille_dots_358                                = 0x1002894,
+                       braille_dots_1358                               = 0x1002895,
+                       braille_dots_2358                               = 0x1002896,
+                       braille_dots_12358                              = 0x1002897,
+                       braille_dots_458                                = 0x1002898,
+                       braille_dots_1458                               = 0x1002899,
+                       braille_dots_2458                               = 0x100289a,
+                       braille_dots_12458                              = 0x100289b,
+                       braille_dots_3458                               = 0x100289c,
+                       braille_dots_13458                              = 0x100289d,
+                       braille_dots_23458                              = 0x100289e,
+                       braille_dots_123458                             = 0x100289f,
+                       braille_dots_68                                 = 0x10028a0,
+                       braille_dots_168                                = 0x10028a1,
+                       braille_dots_268                                = 0x10028a2,
+                       braille_dots_1268                               = 0x10028a3,
+                       braille_dots_368                                = 0x10028a4,
+                       braille_dots_1368                               = 0x10028a5,
+                       braille_dots_2368                               = 0x10028a6,
+                       braille_dots_12368                              = 0x10028a7,
+                       braille_dots_468                                = 0x10028a8,
+                       braille_dots_1468                               = 0x10028a9,
+                       braille_dots_2468                               = 0x10028aa,
+                       braille_dots_12468                              = 0x10028ab,
+                       braille_dots_3468                               = 0x10028ac,
+                       braille_dots_13468                              = 0x10028ad,
+                       braille_dots_23468                              = 0x10028ae,
+                       braille_dots_123468                             = 0x10028af,
+                       braille_dots_568                                = 0x10028b0,
+                       braille_dots_1568                               = 0x10028b1,
+                       braille_dots_2568                               = 0x10028b2,
+                       braille_dots_12568                              = 0x10028b3,
+                       braille_dots_3568                               = 0x10028b4,
+                       braille_dots_13568                              = 0x10028b5,
+                       braille_dots_23568                              = 0x10028b6,
+                       braille_dots_123568                             = 0x10028b7,
+                       braille_dots_4568                               = 0x10028b8,
+                       braille_dots_14568                              = 0x10028b9,
+                       braille_dots_24568                              = 0x10028ba,
+                       braille_dots_124568                             = 0x10028bb,
+                       braille_dots_34568                              = 0x10028bc,
+                       braille_dots_134568                             = 0x10028bd,
+                       braille_dots_234568                             = 0x10028be,
+                       braille_dots_1234568                    = 0x10028bf,
+                       braille_dots_78                                 = 0x10028c0,
+                       braille_dots_178                                = 0x10028c1,
+                       braille_dots_278                                = 0x10028c2,
+                       braille_dots_1278                               = 0x10028c3,
+                       braille_dots_378                                = 0x10028c4,
+                       braille_dots_1378                               = 0x10028c5,
+                       braille_dots_2378                               = 0x10028c6,
+                       braille_dots_12378                              = 0x10028c7,
+                       braille_dots_478                                = 0x10028c8,
+                       braille_dots_1478                               = 0x10028c9,
+                       braille_dots_2478                               = 0x10028ca,
+                       braille_dots_12478                              = 0x10028cb,
+                       braille_dots_3478                               = 0x10028cc,
+                       braille_dots_13478                              = 0x10028cd,
+                       braille_dots_23478                              = 0x10028ce,
+                       braille_dots_123478                             = 0x10028cf,
+                       braille_dots_578                                = 0x10028d0,
+                       braille_dots_1578                               = 0x10028d1,
+                       braille_dots_2578                               = 0x10028d2,
+                       braille_dots_12578                              = 0x10028d3,
+                       braille_dots_3578                               = 0x10028d4,
+                       braille_dots_13578                              = 0x10028d5,
+                       braille_dots_23578                              = 0x10028d6,
+                       braille_dots_123578                             = 0x10028d7,
+                       braille_dots_4578                               = 0x10028d8,
+                       braille_dots_14578                              = 0x10028d9,
+                       braille_dots_24578                              = 0x10028da,
+                       braille_dots_124578                             = 0x10028db,
+                       braille_dots_34578                              = 0x10028dc,
+                       braille_dots_134578                             = 0x10028dd,
+                       braille_dots_234578                             = 0x10028de,
+                       braille_dots_1234578                    = 0x10028df,
+                       braille_dots_678                                = 0x10028e0,
+                       braille_dots_1678                               = 0x10028e1,
+                       braille_dots_2678                               = 0x10028e2,
+                       braille_dots_12678                              = 0x10028e3,
+                       braille_dots_3678                               = 0x10028e4,
+                       braille_dots_13678                              = 0x10028e5,
+                       braille_dots_23678                              = 0x10028e6,
+                       braille_dots_123678                             = 0x10028e7,
+                       braille_dots_4678                               = 0x10028e8,
+                       braille_dots_14678                              = 0x10028e9,
+                       braille_dots_24678                              = 0x10028ea,
+                       braille_dots_124678                             = 0x10028eb,
+                       braille_dots_34678                              = 0x10028ec,
+                       braille_dots_134678                             = 0x10028ed,
+                       braille_dots_234678                             = 0x10028ee,
+                       braille_dots_1234678                    = 0x10028ef,
+                       braille_dots_5678                               = 0x10028f0,
+                       braille_dots_15678                              = 0x10028f1,
+                       braille_dots_25678                              = 0x10028f2,
+                       braille_dots_125678                             = 0x10028f3,
+                       braille_dots_35678                              = 0x10028f4,
+                       braille_dots_135678                             = 0x10028f5,
+                       braille_dots_235678                             = 0x10028f6,
+                       braille_dots_1235678                    = 0x10028f7,
+                       braille_dots_45678                              = 0x10028f8,
+                       braille_dots_145678                             = 0x10028f9,
+                       braille_dots_245678                             = 0x10028fa,
+                       braille_dots_1245678                    = 0x10028fb,
+                       braille_dots_345678                             = 0x10028fc,
+                       braille_dots_1345678                    = 0x10028fd,
+                       braille_dots_2345678                    = 0x10028fe,
+                       braille_dots_12345678                   = 0x10028ff,
+                       Sinh_ng                                                 = 0x1000d82,
+                       Sinh_h2                                                 = 0x1000d83,
+                       Sinh_a                                                  = 0x1000d85,
+                       Sinh_aa                                                 = 0x1000d86,
+                       Sinh_ae                                                 = 0x1000d87,
+                       Sinh_aee                                                = 0x1000d88,
+                       Sinh_i                                                  = 0x1000d89,
+                       Sinh_ii                                                 = 0x1000d8a,
+                       Sinh_u                                                  = 0x1000d8b,
+                       Sinh_uu                                                 = 0x1000d8c,
+                       Sinh_ri                                                 = 0x1000d8d,
+                       Sinh_rii                                                = 0x1000d8e,
+                       Sinh_lu                                                 = 0x1000d8f,
+                       Sinh_luu                                                = 0x1000d90,
+                       Sinh_e                                                  = 0x1000d91,
+                       Sinh_ee                                                 = 0x1000d92,
+                       Sinh_ai                                                 = 0x1000d93,
+                       Sinh_o                                                  = 0x1000d94,
+                       Sinh_oo                                                 = 0x1000d95,
+                       Sinh_au                                                 = 0x1000d96,
+                       Sinh_ka                                                 = 0x1000d9a,
+                       Sinh_kha                                                = 0x1000d9b,
+                       Sinh_ga                                                 = 0x1000d9c,
+                       Sinh_gha                                                = 0x1000d9d,
+                       Sinh_ng2                                                = 0x1000d9e,
+                       Sinh_nga                                                = 0x1000d9f,
+                       Sinh_ca                                                 = 0x1000da0,
+                       Sinh_cha                                                = 0x1000da1,
+                       Sinh_ja                                                 = 0x1000da2,
+                       Sinh_jha                                                = 0x1000da3,
+                       Sinh_nya                                                = 0x1000da4,
+                       Sinh_jnya                                               = 0x1000da5,
+                       Sinh_nja                                                = 0x1000da6,
+                       Sinh_tta                                                = 0x1000da7,
+                       Sinh_ttha                                               = 0x1000da8,
+                       Sinh_dda                                                = 0x1000da9,
+                       Sinh_ddha                                               = 0x1000daa,
+                       Sinh_nna                                                = 0x1000dab,
+                       Sinh_ndda                                               = 0x1000dac,
+                       Sinh_tha                                                = 0x1000dad,
+                       Sinh_thha                                               = 0x1000dae,
+                       Sinh_dha                                                = 0x1000daf,
+                       Sinh_dhha                                               = 0x1000db0,
+                       Sinh_na                                                 = 0x1000db1,
+                       Sinh_ndha                                               = 0x1000db3,
+                       Sinh_pa                                                 = 0x1000db4,
+                       Sinh_pha                                                = 0x1000db5,
+                       Sinh_ba                                                 = 0x1000db6,
+                       Sinh_bha                                                = 0x1000db7,
+                       Sinh_ma                                                 = 0x1000db8,
+                       Sinh_mba                                                = 0x1000db9,
+                       Sinh_ya                                                 = 0x1000dba,
+                       Sinh_ra                                                 = 0x1000dbb,
+                       Sinh_la                                                 = 0x1000dbd,
+                       Sinh_va                                                 = 0x1000dc0,
+                       Sinh_sha                                                = 0x1000dc1,
+                       Sinh_ssha                                               = 0x1000dc2,
+                       Sinh_sa                                                 = 0x1000dc3,
+                       Sinh_ha                                                 = 0x1000dc4,
+                       Sinh_lla                                                = 0x1000dc5,
+                       Sinh_fa                                                 = 0x1000dc6,
+                       Sinh_al                                                 = 0x1000dca,
+                       Sinh_aa2                                                = 0x1000dcf,
+                       Sinh_ae2                                                = 0x1000dd0,
+                       Sinh_aee2                                               = 0x1000dd1,
+                       Sinh_i2                                                 = 0x1000dd2,
+                       Sinh_ii2                                                = 0x1000dd3,
+                       Sinh_u2                                                 = 0x1000dd4,
+                       Sinh_uu2                                                = 0x1000dd6,
+                       Sinh_ru2                                                = 0x1000dd8,
+                       Sinh_e2                                                 = 0x1000dd9,
+                       Sinh_ee2                                                = 0x1000dda,
+                       Sinh_ai2                                                = 0x1000ddb,
+                       Sinh_o2                                                 = 0x1000ddc,
+                       Sinh_oo2                                                = 0x1000ddd,
+                       Sinh_au2                                                = 0x1000dde,
+                       Sinh_lu2                                                = 0x1000ddf,
+                       Sinh_ruu2                                               = 0x1000df2,
+                       Sinh_luu2                                               = 0x1000df3,
+                       Sinh_kunddaliya                                 = 0x1000df4,
+                       XF86ModeLock                                    = 0x1008FF01,
+                       XF86MonBrightnessUp                             = 0x1008FF02,
+                       XF86MonBrightnessDown                   = 0x1008FF03,
+                       XF86KbdLightOnOff                               = 0x1008FF04,
+                       XF86KbdBrightnessUp                             = 0x1008FF05,
+                       XF86KbdBrightnessDown                   = 0x1008FF06,
+                       XF86Standby                                             = 0x1008FF10,
+                       XF86AudioLowerVolume                    = 0x1008FF11,
+                       XF86AudioMute                                   = 0x1008FF12,
+                       XF86AudioRaiseVolume                    = 0x1008FF13,
+                       XF86AudioPlay                                   = 0x1008FF14,
+                       XF86AudioStop                                   = 0x1008FF15,
+                       XF86AudioPrev                                   = 0x1008FF16,
+                       XF86AudioNext                                   = 0x1008FF17,
+                       XF86HomePage                                    = 0x1008FF18,
+                       XF86Mail                                                = 0x1008FF19,
+                       XF86Start                                               = 0x1008FF1A,
+                       XF86Search                                              = 0x1008FF1B,
+                       XF86AudioRecord                                 = 0x1008FF1C,
+                       XF86Calculator                                  = 0x1008FF1D,
+                       XF86Memo                                                = 0x1008FF1E,
+                       XF86ToDoList                                    = 0x1008FF1F,
+                       XF86Calendar                                    = 0x1008FF20,
+                       XF86PowerDown                                   = 0x1008FF21,
+                       XF86ContrastAdjust                              = 0x1008FF22,
+                       XF86RockerUp                                    = 0x1008FF23,
+                       XF86RockerDown                                  = 0x1008FF24,
+                       XF86RockerEnter                                 = 0x1008FF25,
+                       XF86Back                                                = 0x1008FF26,
+                       XF86Forward                                             = 0x1008FF27,
+                       XF86Stop                                                = 0x1008FF28,
+                       XF86Refresh                                             = 0x1008FF29,
+                       XF86PowerOff                                    = 0x1008FF2A,
+                       XF86WakeUp                                              = 0x1008FF2B,
+                       XF86Eject                                               = 0x1008FF2C,
+                       XF86ScreenSaver                                 = 0x1008FF2D,
+                       XF86WWW                                                 = 0x1008FF2E,
+                       XF86Sleep                                               = 0x1008FF2F,
+                       XF86Favorites                                   = 0x1008FF30,
+                       XF86AudioPause                                  = 0x1008FF31,
+                       XF86AudioMedia                                  = 0x1008FF32,
+                       XF86MyComputer                                  = 0x1008FF33,
+                       XF86VendorHome                                  = 0x1008FF34,
+                       XF86LightBulb                                   = 0x1008FF35,
+                       XF86Shop                                                = 0x1008FF36,
+                       XF86History                                             = 0x1008FF37,
+                       XF86OpenURL                                             = 0x1008FF38,
+                       XF86AddFavorite                                 = 0x1008FF39,
+                       XF86HotLinks                                    = 0x1008FF3A,
+                       XF86BrightnessAdjust                    = 0x1008FF3B,
+                       XF86Finance                                             = 0x1008FF3C,
+                       XF86Community                                   = 0x1008FF3D,
+                       XF86AudioRewind                                 = 0x1008FF3E,
+                       XF86BackForward                                 = 0x1008FF3F,
+                       XF86Launch0                                             = 0x1008FF40,
+                       XF86Launch1                                             = 0x1008FF41,
+                       XF86Launch2                                             = 0x1008FF42,
+                       XF86Launch3                                             = 0x1008FF43,
+                       XF86Launch4                                             = 0x1008FF44,
+                       XF86Launch5                                             = 0x1008FF45,
+                       XF86Launch6                                             = 0x1008FF46,
+                       XF86Launch7                                             = 0x1008FF47,
+                       XF86Launch8                                             = 0x1008FF48,
+                       XF86Launch9                                             = 0x1008FF49,
+                       XF86LaunchA                                             = 0x1008FF4A,
+                       XF86LaunchB                                             = 0x1008FF4B,
+                       XF86LaunchC                                             = 0x1008FF4C,
+                       XF86LaunchD                                             = 0x1008FF4D,
+                       XF86LaunchE                                             = 0x1008FF4E,
+                       XF86LaunchF                                             = 0x1008FF4F,
+                       XF86ApplicationLeft                             = 0x1008FF50,
+                       XF86ApplicationRight                    = 0x1008FF51,
+                       XF86Book                                                = 0x1008FF52,
+                       XF86CD                                                  = 0x1008FF53,
+                       XF86Calculater                                  = 0x1008FF54,
+                       XF86Clear                                               = 0x1008FF55,
+                       XF86Close                                               = 0x1008FF56,
+                       XF86Copy                                                = 0x1008FF57,
+                       XF86Cut                                                 = 0x1008FF58,
+                       XF86Display                                             = 0x1008FF59,
+                       XF86DOS                                                 = 0x1008FF5A,
+                       XF86Documents                                   = 0x1008FF5B,
+                       XF86Excel                                               = 0x1008FF5C,
+                       XF86Explorer                                    = 0x1008FF5D,
+                       XF86Game                                                = 0x1008FF5E,
+                       XF86Go                                                  = 0x1008FF5F,
+                       XF86iTouch                                              = 0x1008FF60,
+                       XF86LogOff                                              = 0x1008FF61,
+                       XF86Market                                              = 0x1008FF62,
+                       XF86Meeting                                             = 0x1008FF63,
+                       XF86MenuKB                                              = 0x1008FF65,
+                       XF86MenuPB                                              = 0x1008FF66,
+                       XF86MySites                                             = 0x1008FF67,
+                       XF86New                                                 = 0x1008FF68,
+                       XF86News                                                = 0x1008FF69,
+                       XF86OfficeHome                                  = 0x1008FF6A,
+                       XF86Open                                                = 0x1008FF6B,
+                       XF86Option                                              = 0x1008FF6C,
+                       XF86Paste                                               = 0x1008FF6D,
+                       XF86Phone                                               = 0x1008FF6E,
+                       XF86Q                                                   = 0x1008FF70,
+                       XF86Reply                                               = 0x1008FF72,
+                       XF86Reload                                              = 0x1008FF73,
+                       XF86RotateWindows                               = 0x1008FF74,
+                       XF86RotationPB                                  = 0x1008FF75,
+                       XF86RotationKB                                  = 0x1008FF76,
+                       XF86Save                                                = 0x1008FF77,
+                       XF86ScrollUp                                    = 0x1008FF78,
+                       XF86ScrollDown                                  = 0x1008FF79,
+                       XF86ScrollClick                                 = 0x1008FF7A,
+                       XF86Send                                                = 0x1008FF7B,
+                       XF86Spell                                               = 0x1008FF7C,
+                       XF86SplitScreen                                 = 0x1008FF7D,
+                       XF86Support                                             = 0x1008FF7E,
+                       XF86TaskPane                                    = 0x1008FF7F,
+                       XF86Terminal                                    = 0x1008FF80,
+                       XF86Tools                                               = 0x1008FF81,
+                       XF86Travel                                              = 0x1008FF82,
+                       XF86UserPB                                              = 0x1008FF84,
+                       XF86User1KB                                             = 0x1008FF85,
+                       XF86User2KB                                             = 0x1008FF86,
+                       XF86Video                                               = 0x1008FF87,
+                       XF86WheelButton                                 = 0x1008FF88,
+                       XF86Word                                                = 0x1008FF89,
+                       XF86Xfer                                                = 0x1008FF8A,
+                       XF86ZoomIn                                              = 0x1008FF8B,
+                       XF86ZoomOut                                             = 0x1008FF8C,
+                       XF86Away                                                = 0x1008FF8D,
+                       XF86Messenger                                   = 0x1008FF8E,
+                       XF86WebCam                                              = 0x1008FF8F,
+                       XF86MailForward                                 = 0x1008FF90,
+                       XF86Pictures                                    = 0x1008FF91,
+                       XF86Music                                               = 0x1008FF92,
+                       XF86Battery                                             = 0x1008FF93,
+                       XF86Bluetooth                                   = 0x1008FF94,
+                       XF86WLAN                                                = 0x1008FF95,
+                       XF86UWB                                                 = 0x1008FF96,
+                       XF86AudioForward                                = 0x1008FF97,
+                       XF86AudioRepeat                                 = 0x1008FF98,
+                       XF86AudioRandomPlay                             = 0x1008FF99,
+                       XF86Subtitle                                    = 0x1008FF9A,
+                       XF86AudioCycleTrack                             = 0x1008FF9B,
+                       XF86CycleAngle                                  = 0x1008FF9C,
+                       XF86FrameBack                                   = 0x1008FF9D,
+                       XF86FrameForward                                = 0x1008FF9E,
+                       XF86Time                                                = 0x1008FF9F,
+                       XF86Select                                              = 0x1008FFA0,
+                       XF86View                                                = 0x1008FFA1,
+                       XF86TopMenu                                             = 0x1008FFA2,
+                       XF86Red                                                 = 0x1008FFA3,
+                       XF86Green                                               = 0x1008FFA4,
+                       XF86Yellow                                              = 0x1008FFA5,
+                       XF86Blue                                                = 0x1008FFA6,
+                       XF86Suspend                                             = 0x1008FFA7,
+                       XF86Hibernate                                   = 0x1008FFA8,
+                       XF86TouchpadToggle                              = 0x1008FFA9,
+                       XF86TouchpadOn                                  = 0x1008FFB0,
+                       XF86TouchpadOff                                 = 0x1008FFB1,
+                       XF86AudioMicMute                                = 0x1008FFB2,
+                       XF86Keyboard                                    = 0x1008FFB3,
+                       XF86WWAN                                                = 0x1008FFB4,
+                       XF86RFKill                                              = 0x1008FFB5,
+                       XF86AudioPreset                                 = 0x1008FFB6,
+                       XF86Switch_VT_1                                 = 0x1008FE01,
+                       XF86Switch_VT_2                                 = 0x1008FE02,
+                       XF86Switch_VT_3                                 = 0x1008FE03,
+                       XF86Switch_VT_4                                 = 0x1008FE04,
+                       XF86Switch_VT_5                                 = 0x1008FE05,
+                       XF86Switch_VT_6                                 = 0x1008FE06,
+                       XF86Switch_VT_7                                 = 0x1008FE07,
+                       XF86Switch_VT_8                                 = 0x1008FE08,
+                       XF86Switch_VT_9                                 = 0x1008FE09,
+                       XF86Switch_VT_10                                = 0x1008FE0A,
+                       XF86Switch_VT_11                                = 0x1008FE0B,
+                       XF86Switch_VT_12                                = 0x1008FE0C,
+                       XF86Ungrab                                              = 0x1008FE20,
+                       XF86ClearGrab                                   = 0x1008FE21,
+                       XF86Next_VMode                                  = 0x1008FE22,
+                       XF86Prev_VMode                                  = 0x1008FE23,
+                       XF86LogWindowTree                               = 0x1008FE24,
+                       XF86LogGrabInfo                                 = 0x1008FE25,
+                       SunFA_Grave                                             = 0x1005FF00,
+                       SunFA_Circum                                    = 0x1005FF01,
+                       SunFA_Tilde                                             = 0x1005FF02,
+                       SunFA_Acute                                             = 0x1005FF03,
+                       SunFA_Diaeresis                                 = 0x1005FF04,
+                       SunFA_Cedilla                                   = 0x1005FF05,
+                       SunF36                                                  = 0x1005FF10,
+                       SunF37                                                  = 0x1005FF11,
+                       SunSys_Req                                              = 0x1005FF60,
+                       SunPrint_Screen                                 = 0x0000FF61,
+                       SunCompose                                              = 0x0000FF20,
+                       SunAltGraph                                             = 0x0000FF7E,
+                       SunPageUp                                               = 0x0000FF55,
+                       SunPageDown                                             = 0x0000FF56,
+                       SunUndo                                                 = 0x0000FF65,
+                       SunAgain                                                = 0x0000FF66,
+                       SunFind                                                 = 0x0000FF68,
+                       SunStop                                                 = 0x0000FF69,
+                       SunProps                                                = 0x1005FF70,
+                       SunFront                                                = 0x1005FF71,
+                       SunCopy                                                 = 0x1005FF72,
+                       SunOpen                                                 = 0x1005FF73,
+                       SunPaste                                                = 0x1005FF74,
+                       SunCut                                                  = 0x1005FF75,
+                       SunPowerSwitch                                  = 0x1005FF76,
+                       SunAudioLowerVolume                             = 0x1005FF77,
+                       SunAudioMute                                    = 0x1005FF78,
+                       SunAudioRaiseVolume                             = 0x1005FF79,
+                       SunVideoDegauss                                 = 0x1005FF7A,
+                       SunVideoLowerBrightness                 = 0x1005FF7B,
+                       SunVideoRaiseBrightness                 = 0x1005FF7C,
+                       SunPowerSwitchShift                             = 0x1005FF7D,
+                       Dring_accent                                    = 0x1000FEB0,
+                       Dcircumflex_accent                              = 0x1000FE5E,
+                       Dcedilla_accent                                 = 0x1000FE2C,
+                       Dacute_accent                                   = 0x1000FE27,
+                       Dgrave_accent                                   = 0x1000FE60,
+                       Dtilde                                                  = 0x1000FE7E,
+                       Ddiaeresis                                              = 0x1000FE22,
+                       DRemove                                                 = 0x1000FF00,
+                       hpClearLine                                             = 0x1000FF6F,
+                       hpInsertLine                                    = 0x1000FF70,
+                       hpDeleteLine                                    = 0x1000FF71,
+                       hpInsertChar                                    = 0x1000FF72,
+                       hpDeleteChar                                    = 0x1000FF73,
+                       hpBackTab                                               = 0x1000FF74,
+                       hpKP_BackTab                                    = 0x1000FF75,
+                       hpModelock1                                             = 0x1000FF48,
+                       hpModelock2                                             = 0x1000FF49,
+                       hpReset                                                 = 0x1000FF6C,
+                       hpSystem                                                = 0x1000FF6D,
+                       hpUser                                                  = 0x1000FF6E,
+                       hpmute_acute                                    = 0x100000A8,
+                       hpmute_grave                                    = 0x100000A9,
+                       hpmute_asciicircum                              = 0x100000AA,
+                       hpmute_diaeresis                                = 0x100000AB,
+                       hpmute_asciitilde                               = 0x100000AC,
+                       hplira                                                  = 0x100000AF,
+                       hpguilder                                               = 0x100000BE,
+                       hpYdiaeresis                                    = 0x100000EE,
+                       hpIO                                                    = 0x100000EE,
+                       hplongminus                                             = 0x100000F6,
+                       hpblock                                                 = 0x100000FC,
+                       osfCopy                                                 = 0x1004FF02,
+                       osfCut                                                  = 0x1004FF03,
+                       osfPaste                                                = 0x1004FF04,
+                       osfBackTab                                              = 0x1004FF07,
+                       osfBackSpace                                    = 0x1004FF08,
+                       osfClear                                                = 0x1004FF0B,
+                       osfEscape                                               = 0x1004FF1B,
+                       osfAddMode                                              = 0x1004FF31,
+                       osfPrimaryPaste                                 = 0x1004FF32,
+                       osfQuickPaste                                   = 0x1004FF33,
+                       osfPageLeft                                             = 0x1004FF40,
+                       osfPageUp                                               = 0x1004FF41,
+                       osfPageDown                                             = 0x1004FF42,
+                       osfPageRight                                    = 0x1004FF43,
+                       osfActivate                                             = 0x1004FF44,
+                       osfMenuBar                                              = 0x1004FF45,
+                       osfLeft                                                 = 0x1004FF51,
+                       osfUp                                                   = 0x1004FF52,
+                       osfRight                                                = 0x1004FF53,
+                       osfDown                                                 = 0x1004FF54,
+                       osfEndLine                                              = 0x1004FF57,
+                       osfBeginLine                                    = 0x1004FF58,
+                       osfEndData                                              = 0x1004FF59,
+                       osfBeginData                                    = 0x1004FF5A,
+                       osfPrevMenu                                             = 0x1004FF5B,
+                       osfNextMenu                                             = 0x1004FF5C,
+                       osfPrevField                                    = 0x1004FF5D,
+                       osfNextField                                    = 0x1004FF5E,
+                       osfSelect                                               = 0x1004FF60,
+                       osfInsert                                               = 0x1004FF63,
+                       osfUndo                                                 = 0x1004FF65,
+                       osfMenu                                                 = 0x1004FF67,
+                       osfCancel                                               = 0x1004FF69,
+                       osfHelp                                                 = 0x1004FF6A,
+                       osfSelectAll                                    = 0x1004FF71,
+                       osfDeselectAll                                  = 0x1004FF72,
+                       osfReselect                                             = 0x1004FF73,
+                       osfExtend                                               = 0x1004FF74,
+                       osfRestore                                              = 0x1004FF78,
+                       osfDelete                                               = 0x1004FFFF,
+                       Reset                                                   = 0x1000FF6C,
+                       System                                                  = 0x1000FF6D,
+                       User                                                    = 0x1000FF6E,
+                       ClearLine                                               = 0x1000FF6F,
+                       InsertLine                                              = 0x1000FF70,
+                       DeleteLine                                              = 0x1000FF71,
+                       InsertChar                                              = 0x1000FF72,
+                       DeleteChar                                              = 0x1000FF73,
+                       BackTab                                                 = 0x1000FF74,
+                       KP_BackTab                                              = 0x1000FF75,
+                       Ext16bit_L                                              = 0x1000FF76,
+                       Ext16bit_R                                              = 0x1000FF77,
+                       mute_acute                                              = 0x100000a8,
+                       mute_grave                                              = 0x100000a9,
+                       mute_asciicircum                                = 0x100000aa,
+                       mute_diaeresis                                  = 0x100000ab,
+                       mute_asciitilde                                 = 0x100000ac,
+                       lira                                                    = 0x100000af,
+                       guilder                                                 = 0x100000be,
+                       IO                                                              = 0x100000ee,
+                       longminus                                               = 0x100000f6,
+                       block                                                   = 0x100000fc,
+
+               }
+
+               enum xkb_key_direction : byte {
+                       KEY_UP,   /**< The key was released. */
+                       KEY_DOWN  /**< The key was pressed. */
+               }
+
+               [Flags]
+               enum xkb_state_component : ushort {                     
+                       XKB_STATE_MODS_DEPRESSED = (1 << 0),
+                       XKB_STATE_MODS_LATCHED = (1 << 1),
+                       XKB_STATE_MODS_LOCKED = (1 << 2),
+                       XKB_STATE_MODS_EFFECTIVE = (1 << 3),
+                       XKB_STATE_LAYOUT_DEPRESSED = (1 << 4),
+                       XKB_STATE_LAYOUT_LATCHED = (1 << 5),
+                       XKB_STATE_LAYOUT_LOCKED = (1 << 6),
+                       XKB_STATE_LAYOUT_EFFECTIVE = (1 << 7),
+                       XKB_STATE_LEDS = (1 << 8)
+               }
+
+               const string XKB_MOD_NAME_SHIFT ="Shift";
+               const string XKB_MOD_NAME_CAPS = "Lock";
+               const string XKB_MOD_NAME_CTRL = "Control";
+               const string XKB_MOD_NAME_ALT = "Mod1";
+               const string XKB_MOD_NAME_NUM = "Mod2";
+               const string XKB_MOD_NAME_LOGO = "Mod4";
+
+               const string XKB_LED_NAME_CAPS = "Caps Lock";
+               const string XKB_LED_NAME_NUM = "Num Lock";
+               const string XKB_LED_NAME_SCROLL = "Scroll Lock";
+
+               #region pinvoke XKB
+
+               [DllImportAttribute("xkbcommon")]
+               static extern IntPtr xkb_context_new (int flags);
+               [DllImportAttribute("xkbcommon")]
+               static extern xkb_keysym xkb_state_key_get_one_sym (IntPtr state, xkb_keycode_t keycode);
+               [DllImportAttribute("xkbcommon")]
+               static extern int xkb_state_key_get_syms (IntPtr state, xkb_keycode_t keycode, ref IntPtr syms_out);
+
+               [DllImportAttribute("xkbcommon")]
+               static extern xkb_mod_index_t xkb_keymap_num_mods (IntPtr keymap);
+               [DllImportAttribute("xkbcommon")]
+               static extern xkb_mod_index_t xkb_keymap_mod_get_index (IntPtr keymap, string name);
+               [DllImportAttribute("xkbcommon")]
+               static extern bool xkb_state_mod_index_is_active (IntPtr state, xkb_mod_index_t idx, xkb_state_component type);         
+               [DllImportAttribute("xkbcommon")]
+               static extern int xkb_state_mod_name_is_active (IntPtr state, string mod_name, xkb_state_component type);
+
+               [DllImportAttribute("xkbcommon")]
+               static extern UInt32 xkb_state_key_get_utf32 (IntPtr state, xkb_keycode_t key);
+               [DllImportAttribute("xkbcommon")]
+               static extern void xkb_state_unref (IntPtr state);      
+               [DllImportAttribute("xkbcommon")]
+               static extern void xkb_keymap_unref (IntPtr keymap);    
+               [DllImportAttribute("xkbcommon")]
+               static extern void xkb_context_unref (IntPtr ctx);      
+
+               [DllImportAttribute("xkbcommon")]
+               static extern xkb_state_component       xkb_state_update_key(IntPtr state, xkb_keycode_t key, xkb_key_direction direction);
+
+               [DllImportAttribute("xkbcommon-x11.so.0")]
+               static extern int xkb_x11_setup_xkb_extension (IntPtr connection,
+                       UInt16 major_xkb_version, UInt16 minor_xkb_version,
+                       byte xkb_x11_setup_xkb_extension_flags,
+                       out UInt16 major_xkb_version_out,
+                       out UInt16 minor_xkb_version_out,
+                       out byte base_event_out,
+                       out byte base_error_out);
+               [DllImportAttribute("xkbcommon-x11.so.0")]
+               static extern int xkb_x11_get_core_keyboard_device_id(IntPtr connection);
+               [DllImportAttribute("xkbcommon-x11.so.0")]
+               static extern IntPtr xkb_x11_keymap_new_from_device (IntPtr context, IntPtr connection,
+                       int device_id, byte flags);
+               [DllImportAttribute("xkbcommon-x11.so.0")]
+               static extern IntPtr xkb_x11_state_new_from_device (IntPtr xkbKeymap, IntPtr connection, int device_id);
+               #endregion
+               xkb_mod_index_t ModIdxShift;
+               xkb_mod_index_t ModIdxCtrl;
+               xkb_mod_index_t ModIdxAlt;
+               xkb_mod_index_t ModIdxLogo;
+               xkb_mod_index_t ModIdxCapsLock;
+               xkb_mod_index_t ModIdxNumLock;
+
+               IntPtr xkbCtx, xkbKeymap, xkbState;
+
+               #region IKeyboard implementation
+
+               public event EventHandler<KeyEventArgs> KeyDown;
+               public event EventHandler<KeyEventArgs> KeyUp;
+               public event EventHandler<KeyPressEventArgs> KeyPress;
+
+               public void HandleEvent (uint keycode, bool pressed) {
+                       xkb_keysym ks = xkb_state_key_get_one_sym (xkbState, keycode);
+                       xkb_key_direction keyDir = xkb_key_direction.KEY_DOWN;
+
+                       if (pressed) {
+                               KeyDown.Raise (this, new KeyEventArgs ((Key)ks, false));
+
+                               IntPtr ptrKeySyms = IntPtr.Zero;
+
+
+                               int nbKeySyms = xkb_state_key_get_syms (xkbState, keycode, ref ptrKeySyms);
+                               int[] keySyms = new int[nbKeySyms];
+                               Marshal.Copy (ptrKeySyms, keySyms, 0, nbKeySyms);
+
+                               uint utf32 = xkb_state_key_get_utf32 (xkbState, keycode);
+                               char c = char.ConvertFromUtf32 ((int)utf32) [0];
+
+                               if (!char.IsControl(c))
+                                       KeyPress.Raise (this, new KeyPressEventArgs (c));
+                       } else {
+                               keyDir = xkb_key_direction.KEY_UP;
+                               KeyUp.Raise (this, new KeyEventArgs ((Key)ks, false));
+                       }
+
+                       xkb_state_update_key (xkbState, keycode, keyDir);
+               }
+               public bool IsDown (Key key) {
+                       return false;
+               }
+               public bool Shift {
+                       get {
+                               return xkb_state_mod_index_is_active (xkbState, ModIdxShift, xkb_state_component.XKB_STATE_MODS_EFFECTIVE);
+                       }
+               }
+               public bool Ctrl {
+                       get {
+                               return xkb_state_mod_index_is_active (xkbState, ModIdxCtrl, xkb_state_component.XKB_STATE_MODS_EFFECTIVE);
+                       }
+               }
+               public bool Alt {
+                       get {
+                               return xkb_state_mod_index_is_active (xkbState, ModIdxAlt, xkb_state_component.XKB_STATE_MODS_EFFECTIVE);
+                       }
+               }
+               public void Destroy () {
+                       xkb_state_unref (xkbState);
+                       xkb_keymap_unref (xkbKeymap);
+                       xkb_context_unref (xkbCtx);
+               }
+               #endregion
+
+
+               public XCBKeyboard (IntPtr xcbConnection)
+               {
+                       ushort xkb_maj, xkb_min;
+                       byte base_evt, base_err;
+
+                       xkbCtx = xkb_context_new (0);
+                       xkb_x11_setup_xkb_extension (xcbConnection, 1, 0, 0, out xkb_maj, out xkb_min, out base_evt, out base_err);
+                       int kb = xkb_x11_get_core_keyboard_device_id (xcbConnection);
+                       xkbKeymap = xkb_x11_keymap_new_from_device (xkbCtx, xcbConnection, kb, 0);
+                       xkbState = xkb_x11_state_new_from_device (xkbKeymap, xcbConnection, kb);
+
+                       ModIdxShift = xkb_keymap_mod_get_index (xkbKeymap, XKB_MOD_NAME_SHIFT);
+                       ModIdxCtrl = xkb_keymap_mod_get_index (xkbKeymap, XKB_MOD_NAME_CTRL);
+                       ModIdxAlt = xkb_keymap_mod_get_index (xkbKeymap, XKB_MOD_NAME_ALT);
+                       ModIdxLogo = xkb_keymap_mod_get_index (xkbKeymap, XKB_MOD_NAME_LOGO);
+                       ModIdxCapsLock = xkb_keymap_mod_get_index (xkbKeymap, XKB_MOD_NAME_CAPS);
+                       ModIdxNumLock = xkb_keymap_mod_get_index (xkbKeymap, XKB_MOD_NAME_NUM);
+               }
+       }
+}
+
diff --git a/Crow/src/backends/xlib/X11Keyboard.cs b/Crow/src/backends/xlib/X11Keyboard.cs
new file mode 100644 (file)
index 0000000..78eef4e
--- /dev/null
@@ -0,0 +1,120 @@
+//
+// XCBKeyboard.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp_bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+using System;
+using System.Runtime.InteropServices;
+
+namespace Crow.XLib
+{
+       public class X11Keyboard : IKeyboard
+       {
+               #region PInvoke
+               [DllImportAttribute("X11")]
+               static extern IntPtr XFree(IntPtr data);
+               [DllImport ("libX11")]
+               static extern void XDisplayKeycodes (IntPtr disp, out int min, out int max);
+               [DllImport ("libX11")]
+               static extern IntPtr XGetKeyboardMapping (IntPtr disp, byte first_keycode, int keycode_count, 
+                       out int keysyms_per_keycode_return);
+               [DllImport ("libX11")]
+               unsafe static extern byte* XGetModifierMapping (IntPtr disp);
+               [DllImport ("libX11")]
+               static extern uint XKeycodeToKeysym (IntPtr display, int keycode, int index);
+               #endregion
+
+               #region IKeyboard implementation
+
+               public event EventHandler<KeyEventArgs> KeyDown;
+               public event EventHandler<KeyEventArgs> KeyUp;
+               public event EventHandler<KeyPressEventArgs> KeyPress;
+
+               public void HandleEvent (uint keycode, bool pressed) {
+                       /*int min_keycode, max_keycode, keysyms_per_keycode;
+                                               XLib.NativeMethods.XDisplayKeycodes (xDisp, out min_keycode, out max_keycode);
+
+                                               IntPtr ksp = XLib.NativeMethods.XGetKeyboardMapping (xDisp, (byte)min_keycode,
+                                                                    max_keycode + 1 - min_keycode, out keysyms_per_keycode);
+                                               XLib.NativeMethods.XFree (ksp);*/
+
+                       uint keySym;
+                       keySym = XKeycodeToKeysym (xDisp, (int)keycode, 0);
+                       char c = (char)keySym;
+                       if (pressed)
+                               KeyDown.Raise (this, new KeyEventArgs ((Key)keySym, false));
+                       else 
+                               KeyUp.Raise (this, new KeyEventArgs ((Key)keySym, false));                      
+               }
+               public bool IsDown (Key key) {
+                       throw new NotImplementedException();
+               }
+               public bool Shift {
+                       get {
+                               throw new NotImplementedException();
+                       }
+               }
+               public bool Ctrl {
+                       get {
+                               throw new NotImplementedException ();
+                       }
+               }
+               public bool Alt {
+                       get {
+                               throw new NotImplementedException ();
+                       }
+               }
+               public void Destroy () {
+
+               }
+               #endregion
+
+
+               IntPtr xDisp;
+
+               public X11Keyboard (IntPtr _xDisp)
+               {
+                       xDisp = _xDisp;
+
+                       int min_keycode, max_keycode, keysyms_per_keycode;
+
+                       XDisplayKeycodes (xDisp, out min_keycode, out max_keycode);
+                       IntPtr ksp = XGetKeyboardMapping (xDisp, (byte) min_keycode,
+                               max_keycode + 1 - min_keycode, out keysyms_per_keycode);
+                       XFree (ksp);
+
+                       unsafe {
+                               byte* modmap_unmanaged = XGetModifierMapping (xDisp);
+                               int nummodmap = 0;
+                               int* ptr = (int*)modmap_unmanaged;
+                               nummodmap = ptr [0];
+
+                               for (int i = 0; i< nummodmap; i++) {
+                                       Console.WriteLine(modmap_unmanaged[i+4]);
+                               }
+                               XFree ((IntPtr)modmap_unmanaged);
+                       }
+               }
+       }
+}
+
diff --git a/Crow/src/backends/xlib/X11Structs.cs b/Crow/src/backends/xlib/X11Structs.cs
new file mode 100644 (file)
index 0000000..5e43e00
--- /dev/null
@@ -0,0 +1,1821 @@
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software",, to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+// Copyright (c) 2004 Novell, Inc.
+//
+// Authors:
+//     Peter Bartok    pbartok@novell.com
+//
+
+
+// NOT COMPLETE
+
+using System;
+using System.ComponentModel;
+using System.Collections;
+using System.Diagnostics;
+using System.Runtime.InteropServices;
+using System.Threading;
+using System.Reflection;
+
+// X11 Version
+namespace Crow.XLib {
+       //
+       // In the structures below, fields of type long are mapped to IntPtr.
+       // This will work on all platforms where sizeof(long)==sizeof(void*), which
+       // is almost all platforms except WIN64.
+       //
+
+       [StructLayout(LayoutKind.Sequential)]
+       public struct XAnyEvent {
+               public XEventName       type;
+               public IntPtr           serial;
+               public bool             send_event;
+               public IntPtr           display;
+               public IntPtr           window;
+       }
+
+       [StructLayout(LayoutKind.Sequential)]
+       public struct XKeyEvent {
+               public XEventName       type;
+               public IntPtr           serial;
+               public bool             send_event;
+               public IntPtr           display;
+               public IntPtr           window;
+               public IntPtr           root;
+               public IntPtr           subwindow;
+               public IntPtr           time;
+               public int              x;
+               public int              y;
+               public int              x_root;
+               public int              y_root;
+               public int              state;
+               public int              keycode;
+               public bool             same_screen;
+       }
+
+       [StructLayout(LayoutKind.Sequential)]
+       public struct XButtonEvent {
+               public XEventName       type;
+               public IntPtr           serial;
+               public bool             send_event;
+               public IntPtr           display;
+               public IntPtr           window;
+               public IntPtr           root;
+               public IntPtr           subwindow;
+               public IntPtr           time;
+               public int              x;
+               public int              y;
+               public int              x_root;
+               public int              y_root;
+               public int              state;
+               public int              button;
+               public bool             same_screen;
+       }
+
+       [StructLayout(LayoutKind.Sequential)]
+       public struct XMotionEvent {
+               public XEventName       type;
+               public IntPtr           serial;
+               public bool             send_event;
+               public IntPtr           display;
+               public IntPtr           window;
+               public IntPtr           root;
+               public IntPtr           subwindow;
+               public IntPtr           time;
+               public int              x;
+               public int              y;
+               public int              x_root;
+               public int              y_root;
+               public int              state;
+               public byte             is_hint;
+               public bool             same_screen;
+       }
+
+       [StructLayout(LayoutKind.Sequential)]
+       public struct XCrossingEvent {
+               public XEventName       type;
+               public IntPtr           serial;
+               public bool             send_event;
+               public IntPtr           display;
+               public IntPtr           window;
+               public IntPtr           root;
+               public IntPtr           subwindow;
+               public IntPtr           time;
+               public int              x;
+               public int              y;
+               public int              x_root;
+               public int              y_root;
+               public NotifyMode       mode;
+               public NotifyDetail     detail;
+               public bool             same_screen;
+               public bool             focus;
+               public int              state;
+       }
+
+       [StructLayout(LayoutKind.Sequential)]
+       public struct XFocusChangeEvent {
+               public XEventName       type;
+               public IntPtr           serial;
+               public bool             send_event;
+               public IntPtr           display;
+               public IntPtr           window;
+               public int              mode;
+               public NotifyDetail     detail;
+       }
+
+       [StructLayout(LayoutKind.Sequential)]
+       public struct XKeymapEvent {
+               public XEventName       type;
+               public IntPtr           serial;
+               public bool             send_event;
+               public IntPtr           display;
+               public IntPtr           window;
+               public byte             key_vector0;
+               public byte             key_vector1;
+               public byte             key_vector2;
+               public byte             key_vector3;
+               public byte             key_vector4;
+               public byte             key_vector5;
+               public byte             key_vector6;
+               public byte             key_vector7;
+               public byte             key_vector8;
+               public byte             key_vector9;
+               public byte             key_vector10;
+               public byte             key_vector11;
+               public byte             key_vector12;
+               public byte             key_vector13;
+               public byte             key_vector14;
+               public byte             key_vector15;
+               public byte             key_vector16;
+               public byte             key_vector17;
+               public byte             key_vector18;
+               public byte             key_vector19;
+               public byte             key_vector20;
+               public byte             key_vector21;
+               public byte             key_vector22;
+               public byte             key_vector23;
+               public byte             key_vector24;
+               public byte             key_vector25;
+               public byte             key_vector26;
+               public byte             key_vector27;
+               public byte             key_vector28;
+               public byte             key_vector29;
+               public byte             key_vector30;
+               public byte             key_vector31;
+       }
+
+       [StructLayout(LayoutKind.Sequential)]
+       public struct XExposeEvent {
+               public XEventName       type;
+               public IntPtr           serial;
+               public bool             send_event;
+               public IntPtr           display;
+               public IntPtr           window;
+               public int              x;
+               public int              y;
+               public int              width;
+               public int              height;
+               public int              count;
+       }
+
+       [StructLayout(LayoutKind.Sequential)]
+       public struct XGraphicsExposeEvent {
+               public XEventName       type;
+               public IntPtr           serial;
+               public bool             send_event;
+               public IntPtr           display;
+               public IntPtr           drawable;
+               public int              x;
+               public int              y;
+               public int              width;
+               public int              height;
+               public int              count;
+               public int              major_code;
+               public int              minor_code;
+       }
+
+       [StructLayout(LayoutKind.Sequential)]
+       public struct XNoExposeEvent {
+               public XEventName       type;
+               public IntPtr           serial;
+               public bool             send_event;
+               public IntPtr           display;
+               public IntPtr           drawable;
+               public int              major_code;
+               public int              minor_code;
+       }
+
+       [StructLayout(LayoutKind.Sequential)]
+       public struct XVisibilityEvent {
+               public XEventName       type;
+               public IntPtr           serial;
+               public bool             send_event;
+               public IntPtr           display;
+               public IntPtr           window;
+               public int              state;
+       }
+
+       [StructLayout(LayoutKind.Sequential)]
+       public struct XCreateWindowEvent {
+               public XEventName       type;
+               public IntPtr           serial;
+               public bool             send_event;
+               public IntPtr           display;
+               public IntPtr           parent;
+               public IntPtr           window;
+               public int              x;
+               public int              y;
+               public int              width;
+               public int              height;
+               public int              border_width;
+               public bool             override_redirect;
+       }
+
+       [StructLayout(LayoutKind.Sequential)]
+       public struct XDestroyWindowEvent {
+               public XEventName       type;
+               public IntPtr           serial;
+               public bool             send_event;
+               public IntPtr           display;
+               public IntPtr           xevent;
+               public IntPtr           window;
+       }
+
+       [StructLayout(LayoutKind.Sequential)]
+       public struct XUnmapEvent {
+               public XEventName       type;
+               public IntPtr           serial;
+               public bool             send_event;
+               public IntPtr           display;
+               public IntPtr           xevent;
+               public IntPtr           window;
+               public bool             from_configure;
+       }
+
+       [StructLayout(LayoutKind.Sequential)]
+       public struct XMapEvent {
+               public XEventName       type;
+               public IntPtr           serial;
+               public bool             send_event;
+               public IntPtr           display;
+               public IntPtr           xevent;
+               public IntPtr           window;
+               public bool             override_redirect;
+       }
+
+       [StructLayout(LayoutKind.Sequential)]
+       public struct XMapRequestEvent {
+               public XEventName       type;
+               public IntPtr           serial;
+               public bool             send_event;
+               public IntPtr           display;
+               public IntPtr           parent;
+               public IntPtr           window;
+       }
+
+       [StructLayout(LayoutKind.Sequential)]
+       public struct XReparentEvent {
+               public XEventName       type;
+               public IntPtr           serial;
+               public bool             send_event;
+               public IntPtr           display;
+               public IntPtr           xevent;
+               public IntPtr           window;
+               public IntPtr           parent;
+               public int              x;
+               public int              y;
+               public bool             override_redirect;
+       }
+
+       [StructLayout(LayoutKind.Sequential)]
+       public struct XConfigureEvent {
+               public XEventName       type;
+               public IntPtr           serial;
+               public bool             send_event;
+               public IntPtr           display;
+               public IntPtr           xevent;
+               public IntPtr           window;
+               public int              x;
+               public int              y;
+               public int              width;
+               public int              height;
+               public int              border_width;
+               public IntPtr           above;
+               public bool             override_redirect;
+       }
+
+       [StructLayout(LayoutKind.Sequential)]
+       public struct XGravityEvent {
+               public XEventName       type;
+               public IntPtr           serial;
+               public bool             send_event;
+               public IntPtr           display;
+               public IntPtr           xevent;
+               public IntPtr           window;
+               public int              x;
+               public int              y;
+       }
+
+       [StructLayout(LayoutKind.Sequential)]
+       public struct XResizeRequestEvent {
+               public XEventName       type;
+               public IntPtr           serial;
+               public bool             send_event;
+               public IntPtr           display;
+               public IntPtr           window;
+               public int              width;
+               public int              height;
+       }
+
+       [StructLayout(LayoutKind.Sequential)]
+       public struct XConfigureRequestEvent {
+               public XEventName       type;
+               public IntPtr           serial;
+               public bool             send_event;
+               public IntPtr           display;
+               public IntPtr           parent;
+               public IntPtr           window;
+               public int              x;
+               public int              y;
+               public int              width;
+               public int              height;
+               public int              border_width;
+               public IntPtr           above;
+               public int              detail;
+               public IntPtr           value_mask;
+       }
+
+       [StructLayout(LayoutKind.Sequential)]
+       public struct XCirculateEvent {
+               public XEventName       type;
+               public IntPtr           serial;
+               public bool             send_event;
+               public IntPtr           display;
+               public IntPtr           xevent;
+               public IntPtr           window;
+               public int              place;
+       }
+
+       [StructLayout(LayoutKind.Sequential)]
+       public struct XCirculateRequestEvent {
+               public XEventName       type;
+               public IntPtr           serial;
+               public bool             send_event;
+               public IntPtr           display;
+               public IntPtr           parent;
+               public IntPtr           window;
+               public int              place;
+       }
+
+       [StructLayout(LayoutKind.Sequential)]
+       public struct XPropertyEvent {
+               public XEventName       type;
+               public IntPtr           serial;
+               public bool             send_event;
+               public IntPtr           display;
+               public IntPtr           window;
+               public IntPtr           atom;
+               public IntPtr           time;
+               public int              state;
+       }
+
+       [StructLayout(LayoutKind.Sequential)]
+       public struct XSelectionClearEvent {
+               public XEventName       type;
+               public IntPtr           serial;
+               public bool             send_event;
+               public IntPtr           display;
+               public IntPtr           window;
+               public IntPtr           selection;
+               public IntPtr           time;
+       }
+
+       [StructLayout(LayoutKind.Sequential)]
+       public struct XSelectionRequestEvent {
+               public XEventName       type;
+               public IntPtr           serial;
+               public bool             send_event;
+               public IntPtr           display;
+               public IntPtr           owner;
+               public IntPtr           requestor;
+               public IntPtr           selection;
+               public IntPtr           target;
+               public IntPtr           property;
+               public IntPtr           time;
+       }
+
+       [StructLayout(LayoutKind.Sequential)]
+       public struct XSelectionEvent {
+               public XEventName       type;
+               public IntPtr           serial;
+               public bool             send_event;
+               public IntPtr           display;
+               public IntPtr           requestor;
+               public IntPtr           selection;
+               public IntPtr           target;
+               public IntPtr           property;
+               public IntPtr           time;
+       }
+
+       [StructLayout(LayoutKind.Sequential)]
+       public struct XColormapEvent {
+               public XEventName       type;
+               public IntPtr           serial;
+               public bool             send_event;
+               public IntPtr           display;
+               public IntPtr           window;
+               public IntPtr           colormap;
+               public bool             c_new;
+               public int              state;
+       }
+
+       [StructLayout(LayoutKind.Sequential)]
+       public struct XClientMessageEvent {
+               public XEventName       type;
+               public IntPtr           serial;
+               public bool             send_event;
+               public IntPtr           display;
+               public IntPtr           window;
+               public IntPtr           message_type;
+               public int              format;
+               public IntPtr           ptr1;
+               public IntPtr           ptr2;
+               public IntPtr           ptr3;
+               public IntPtr           ptr4;
+               public IntPtr           ptr5;
+       }
+
+       [StructLayout(LayoutKind.Sequential)]
+       public struct XMappingEvent {
+               public XEventName       type;
+               public IntPtr           serial;
+               public bool             send_event;
+               public IntPtr           display;
+               public IntPtr           window;
+               public int              request;
+               public int              first_keycode;
+               public int              count;
+       }
+
+       [StructLayout(LayoutKind.Sequential)]
+       public struct XErrorEvent {
+               public XEventName       type;
+               public IntPtr           display;
+               public IntPtr           resourceid;
+               public IntPtr           serial;
+               public byte             error_code;
+               public XRequest request_code;
+               public byte             minor_code;
+       }
+
+       [StructLayout(LayoutKind.Sequential)]
+       public struct XEventPad {
+               public IntPtr pad0;
+               public IntPtr pad1;
+               public IntPtr pad2;
+               public IntPtr pad3;
+               public IntPtr pad4;
+               public IntPtr pad5;
+               public IntPtr pad6;
+               public IntPtr pad7;
+               public IntPtr pad8;
+               public IntPtr pad9;
+               public IntPtr pad10;
+               public IntPtr pad11;
+               public IntPtr pad12;
+               public IntPtr pad13;
+               public IntPtr pad14;
+               public IntPtr pad15;
+               public IntPtr pad16;
+               public IntPtr pad17;
+               public IntPtr pad18;
+               public IntPtr pad19;
+               public IntPtr pad20;
+               public IntPtr pad21;
+               public IntPtr pad22;
+               public IntPtr pad23;
+       }
+
+       [StructLayout(LayoutKind.Explicit)]
+       public struct XEvent {
+               [ FieldOffset(0) ] public XEventName type;
+               [ FieldOffset(0) ] public XAnyEvent AnyEvent;
+               [ FieldOffset(0) ] public XKeyEvent KeyEvent;
+               [ FieldOffset(0) ] public XButtonEvent ButtonEvent;
+               [ FieldOffset(0) ] public XMotionEvent MotionEvent;
+               [ FieldOffset(0) ] public XCrossingEvent CrossingEvent;
+               [ FieldOffset(0) ] public XFocusChangeEvent FocusChangeEvent;
+               [ FieldOffset(0) ] public XExposeEvent ExposeEvent;
+               [ FieldOffset(0) ] public XGraphicsExposeEvent GraphicsExposeEvent;
+               [ FieldOffset(0) ] public XNoExposeEvent NoExposeEvent;
+               [ FieldOffset(0) ] public XVisibilityEvent VisibilityEvent;
+               [ FieldOffset(0) ] public XCreateWindowEvent CreateWindowEvent;
+               [ FieldOffset(0) ] public XDestroyWindowEvent DestroyWindowEvent;
+               [ FieldOffset(0) ] public XUnmapEvent UnmapEvent;
+               [ FieldOffset(0) ] public XMapEvent MapEvent;
+               [ FieldOffset(0) ] public XMapRequestEvent MapRequestEvent;
+               [ FieldOffset(0) ] public XReparentEvent ReparentEvent;
+               [ FieldOffset(0) ] public XConfigureEvent ConfigureEvent;
+               [ FieldOffset(0) ] public XGravityEvent GravityEvent;
+               [ FieldOffset(0) ] public XResizeRequestEvent ResizeRequestEvent;
+               [ FieldOffset(0) ] public XConfigureRequestEvent ConfigureRequestEvent;
+               [ FieldOffset(0) ] public XCirculateEvent CirculateEvent;
+               [ FieldOffset(0) ] public XCirculateRequestEvent CirculateRequestEvent;
+               [ FieldOffset(0) ] public XPropertyEvent PropertyEvent;
+               [ FieldOffset(0) ] public XSelectionClearEvent SelectionClearEvent;
+               [ FieldOffset(0) ] public XSelectionRequestEvent SelectionRequestEvent;
+               [ FieldOffset(0) ] public XSelectionEvent SelectionEvent;
+               [ FieldOffset(0) ] public XColormapEvent ColormapEvent;
+               [ FieldOffset(0) ] public XClientMessageEvent ClientMessageEvent;
+               [ FieldOffset(0) ] public XMappingEvent MappingEvent;
+               [ FieldOffset(0) ] public XErrorEvent ErrorEvent;
+               [ FieldOffset(0) ] public XKeymapEvent KeymapEvent;
+
+               //[MarshalAs(System.Runtime.InteropServices.UnmanagedType.ByValArray, SizeConst=24)]
+               //[ FieldOffset(0) ] public int[] pad;
+               [ FieldOffset(0) ] public XEventPad Pad;
+               public override string ToString() {
+                       switch (type)
+                       {
+                               case XEventName.ButtonPress:
+                               case XEventName.ButtonRelease:
+                                       return ToString (ButtonEvent);
+                               case XEventName.CirculateNotify:
+                               case XEventName.CirculateRequest:
+                                       return ToString (CirculateEvent);
+                               case XEventName.ClientMessage:
+                                       return ToString (ClientMessageEvent);
+                               case XEventName.ColormapNotify:
+                                       return ToString (ColormapEvent);
+                               case XEventName.ConfigureNotify:
+                                       return ToString (ConfigureEvent);
+                               case XEventName.ConfigureRequest:
+                                       return ToString (ConfigureRequestEvent);
+                               case XEventName.CreateNotify:
+                                       return ToString (CreateWindowEvent);
+                               case XEventName.DestroyNotify:
+                                       return ToString (DestroyWindowEvent);
+                               case XEventName.Expose:
+                                       return ToString (ExposeEvent);
+                               case XEventName.FocusIn:
+                               case XEventName.FocusOut:
+                                       return ToString (FocusChangeEvent);
+                               case XEventName.GraphicsExpose:
+                                       return ToString (GraphicsExposeEvent);
+                               case XEventName.GravityNotify:
+                                       return ToString (GravityEvent);
+                               case XEventName.KeymapNotify:
+                                       return ToString (KeymapEvent);
+                               case XEventName.MapNotify:
+                                       return ToString (MapEvent);
+                               case XEventName.MappingNotify:
+                                       return ToString (MappingEvent);
+                               case XEventName.MapRequest:
+                                       return ToString (MapRequestEvent);
+                               case XEventName.MotionNotify:
+                                       return ToString (MotionEvent);
+                               case XEventName.NoExpose:
+                                       return ToString (NoExposeEvent);
+                               case XEventName.PropertyNotify:
+                                       return ToString (PropertyEvent);
+                               case XEventName.ReparentNotify:
+                                       return ToString (ReparentEvent);
+                               case XEventName.ResizeRequest:
+                                       return ToString (ResizeRequestEvent);
+                               case XEventName.SelectionClear:
+                                       return ToString (SelectionClearEvent);
+                               case XEventName.SelectionNotify:
+                                       return ToString (SelectionEvent);
+                               case XEventName.SelectionRequest:
+                                       return ToString (SelectionRequestEvent);
+                               case XEventName.UnmapNotify:
+                                       return ToString (UnmapEvent);
+                               case XEventName.VisibilityNotify:
+                                       return ToString (VisibilityEvent);
+                               case XEventName.EnterNotify:
+                               case XEventName.LeaveNotify:
+                                       return ToString (CrossingEvent);
+                               default:
+                                       return type.ToString ();
+                       }
+               }
+               
+               public static string ToString (object ev)
+               {
+                       string result = string.Empty;
+                       Type type = ev.GetType ();
+                       System.Reflection.FieldInfo [] fields = type.GetFields (System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.Instance);
+                       for (int i = 0; i < fields.Length; i++) {
+                               if (result != string.Empty) {
+                                       result += ", ";
+                               }
+                               object value = fields [i].GetValue (ev);
+                               result += fields [i].Name + "=" + (value == null ? "<null>" : value.ToString ());
+                       }
+                       return type.Name + " (" + result + ")";
+               }
+       }
+
+       [StructLayout(LayoutKind.Sequential)]
+       public struct XSetWindowAttributes {
+               public IntPtr           background_pixmap;
+               public IntPtr           background_pixel;
+               public IntPtr           border_pixmap;
+               public IntPtr           border_pixel;
+               public Gravity  bit_gravity;
+               public Gravity  win_gravity;
+               public int              backing_store;
+               public IntPtr           backing_planes;
+               public IntPtr           backing_pixel;
+               public bool             save_under;
+               public IntPtr           event_mask;
+               public IntPtr           do_not_propagate_mask;
+               public bool             override_redirect;
+               public IntPtr           colormap;
+               public IntPtr           cursor;
+       }
+
+       [StructLayout(LayoutKind.Sequential)]
+       public struct XWindowAttributes {
+               public int              x;
+               public int              y;
+               public int              width;
+               public int              height;
+               public int              border_width;
+               public int              depth;
+               public IntPtr           visual;
+               public IntPtr           root;
+               public int              c_class;
+               public Gravity  bit_gravity;
+               public Gravity  win_gravity;
+               public int              backing_store;
+               public IntPtr           backing_planes;
+               public IntPtr           backing_pixel;
+               public bool             save_under;
+               public IntPtr           colormap;
+               public bool             map_installed;
+               public MapState map_state;
+               public IntPtr           all_event_masks;
+               public IntPtr           your_event_mask;
+               public IntPtr           do_not_propagate_mask;
+               public bool             override_direct;
+               public IntPtr           screen;
+
+               public override string ToString ()
+               {
+                       return XEvent.ToString (this);
+               }
+       }
+
+       [StructLayout(LayoutKind.Sequential)]
+       public struct XTextProperty {
+               public string           value;
+               public IntPtr           encoding;
+               public int              format;
+               public IntPtr           nitems;
+       }
+
+       public enum XWindowClass {
+               InputOutput     = 1,
+               InputOnly       = 2
+       }
+
+       public enum XEventName {
+               KeyPress                = 2,
+               KeyRelease              = 3,
+               ButtonPress             = 4,
+               ButtonRelease           = 5,
+               MotionNotify            = 6,
+               EnterNotify             = 7,
+               LeaveNotify             = 8,
+               FocusIn                 = 9,
+               FocusOut                = 10,
+               KeymapNotify            = 11,
+               Expose                  = 12,
+               GraphicsExpose          = 13,
+               NoExpose                = 14,
+               VisibilityNotify        = 15,
+               CreateNotify            = 16,
+               DestroyNotify           = 17,
+               UnmapNotify             = 18,
+               MapNotify               = 19,
+               MapRequest              = 20,
+               ReparentNotify          = 21,
+               ConfigureNotify         = 22,
+               ConfigureRequest        = 23,
+               GravityNotify           = 24,
+               ResizeRequest           = 25,
+               CirculateNotify         = 26,
+               CirculateRequest        = 27,
+               PropertyNotify          = 28,
+               SelectionClear          = 29,
+               SelectionRequest        = 30,
+               SelectionNotify         = 31,
+               ColormapNotify          = 32,
+               ClientMessage           = 33,
+               MappingNotify           = 34,
+
+               LASTEvent
+       }
+
+       [Flags]
+       public enum SetWindowValuemask {
+               Nothing         = 0,
+               BackPixmap      = 1,
+               BackPixel       = 2,
+               BorderPixmap    = 4,
+               BorderPixel     = 8,
+               BitGravity      = 16,
+               WinGravity      = 32,
+               BackingStore    = 64,
+               BackingPlanes   = 128,
+               BackingPixel    = 256,
+               OverrideRedirect = 512,
+               SaveUnder       = 1024,
+               EventMask       = 2048,
+               DontPropagate   = 4096,
+               ColorMap        = 8192,
+               Cursor          = 16384
+       }
+       
+       public enum SendEventValues {
+               PointerWindow = 0,
+               InputFocus = 1
+       }
+
+       public enum CreateWindowArgs {
+               CopyFromParent  = 0,
+               ParentRelative  = 1,
+               InputOutput     = 1,
+               InputOnly       = 2
+       }
+
+       public enum Gravity {
+               ForgetGravity   = 0,
+               NorthWestGravity= 1,
+               NorthGravity    = 2,
+               NorthEastGravity= 3,
+               WestGravity     = 4,
+               CenterGravity   = 5,
+               EastGravity     = 6,
+               SouthWestGravity= 7,
+               SouthGravity    = 8,
+               SouthEastGravity= 9,
+               StaticGravity   = 10
+       }
+
+       public enum XKeySym : uint {
+               XK_BackSpace    = 0xFF08,
+               XK_Tab          = 0xFF09,
+               XK_Clear        = 0xFF0B,
+               XK_Return       = 0xFF0D,
+               XK_Home         = 0xFF50,
+               XK_Left         = 0xFF51,
+               XK_Up           = 0xFF52,
+               XK_Right        = 0xFF53,
+               XK_Down         = 0xFF54,
+               XK_Page_Up      = 0xFF55,
+               XK_Page_Down    = 0xFF56,
+               XK_End          = 0xFF57,
+               XK_Begin        = 0xFF58,
+               XK_Menu         = 0xFF67,
+               XK_Shift_L      = 0xFFE1,
+               XK_Shift_R      = 0xFFE2,
+               XK_Control_L    = 0xFFE3,
+               XK_Control_R    = 0xFFE4,
+               XK_Caps_Lock    = 0xFFE5,
+               XK_Shift_Lock   = 0xFFE6,       
+               XK_Meta_L       = 0xFFE7,
+               XK_Meta_R       = 0xFFE8,
+               XK_Alt_L        = 0xFFE9,
+               XK_Alt_R        = 0xFFEA,
+               XK_Super_L      = 0xFFEB,
+               XK_Super_R      = 0xFFEC,
+               XK_Hyper_L      = 0xFFED,
+               XK_Hyper_R      = 0xFFEE,
+       }
+
+       [Flags]
+       public enum EventMask {
+               NoEventMask             = 0,
+               KeyPressMask            = 1<<0,
+               KeyReleaseMask          = 1<<1,
+               ButtonPressMask         = 1<<2,
+               ButtonReleaseMask       = 1<<3,
+               EnterWindowMask         = 1<<4,
+               LeaveWindowMask         = 1<<5,
+               PointerMotionMask       = 1<<6,
+               PointerMotionHintMask   = 1<<7,
+               Button1MotionMask       = 1<<8,
+               Button2MotionMask       = 1<<9,
+               Button3MotionMask       = 1<<10,
+               Button4MotionMask       = 1<<11,
+               Button5MotionMask       = 1<<12,
+               ButtonMotionMask        = 1<<13,
+               KeymapStateMask         = 1<<14,
+               ExposureMask            = 1<<15,
+               VisibilityChangeMask    = 1<<16,
+               StructureNotifyMask     = 1<<17,
+               ResizeRedirectMask      = 1<<18,
+               SubstructureNotifyMask  = 1<<19,
+               SubstructureRedirectMask= 1<<20,
+               FocusChangeMask         = 1<<21,
+               PropertyChangeMask      = 1<<22,
+               ColormapChangeMask      = 1<<23,
+               OwnerGrabButtonMask     = 1<<24
+       }
+
+       public enum GrabMode {
+               GrabModeSync            = 0,
+               GrabModeAsync           = 1
+       }
+
+       [StructLayout(LayoutKind.Sequential)]
+       public struct XStandardColormap {
+               public IntPtr           colormap;
+               public IntPtr           red_max;
+               public IntPtr           red_mult;
+               public IntPtr           green_max;
+               public IntPtr           green_mult;
+               public IntPtr           blue_max;
+               public IntPtr           blue_mult;
+               public IntPtr           base_pixel;
+               public IntPtr           visualid;
+               public IntPtr           killid;
+       }
+
+       [StructLayout(LayoutKind.Sequential, Pack=2)]
+       public struct XColor {
+               public IntPtr           pixel;
+               public ushort           red;
+               public ushort           green;
+               public ushort           blue;
+               public byte             flags;
+               public byte             pad;
+       }
+
+       public enum Atom {
+               AnyPropertyType         = 0,
+               XA_PRIMARY              = 1,
+               XA_SECONDARY            = 2,
+               XA_ARC                  = 3,
+               XA_ATOM                 = 4,
+               XA_BITMAP               = 5,
+               XA_CARDINAL             = 6,
+               XA_COLORMAP             = 7,
+               XA_CURSOR               = 8,
+               XA_CUT_BUFFER0          = 9,
+               XA_CUT_BUFFER1          = 10,
+               XA_CUT_BUFFER2          = 11,
+               XA_CUT_BUFFER3          = 12,
+               XA_CUT_BUFFER4          = 13,
+               XA_CUT_BUFFER5          = 14,
+               XA_CUT_BUFFER6          = 15,
+               XA_CUT_BUFFER7          = 16,
+               XA_DRAWABLE             = 17,
+               XA_FONT                 = 18,
+               XA_INTEGER              = 19,
+               XA_PIXMAP               = 20,
+               XA_POINT                = 21,
+               XA_RECTANGLE            = 22,
+               XA_RESOURCE_MANAGER     = 23,
+               XA_RGB_COLOR_MAP        = 24,
+               XA_RGB_BEST_MAP         = 25,
+               XA_RGB_BLUE_MAP         = 26,
+               XA_RGB_DEFAULT_MAP      = 27,
+               XA_RGB_GRAY_MAP         = 28,
+               XA_RGB_GREEN_MAP        = 29,
+               XA_RGB_RED_MAP          = 30,
+               XA_STRING               = 31,
+               XA_VISUALID             = 32,
+               XA_WINDOW               = 33,
+               XA_WM_COMMAND           = 34,
+               XA_WM_HINTS             = 35,
+               XA_WM_CLIENT_MACHINE    = 36,
+               XA_WM_ICON_NAME         = 37,
+               XA_WM_ICON_SIZE         = 38,
+               XA_WM_NAME              = 39,
+               XA_WM_NORMAL_HINTS      = 40,
+               XA_WM_SIZE_HINTS        = 41,
+               XA_WM_ZOOM_HINTS        = 42,
+               XA_MIN_SPACE            = 43,
+               XA_NORM_SPACE           = 44,
+               XA_MAX_SPACE            = 45,
+               XA_END_SPACE            = 46,
+               XA_SUPERSCRIPT_X        = 47,
+               XA_SUPERSCRIPT_Y        = 48,
+               XA_SUBSCRIPT_X          = 49,
+               XA_SUBSCRIPT_Y          = 50,
+               XA_UNDERLINE_POSITION   = 51,
+               XA_UNDERLINE_THICKNESS  = 52,
+               XA_STRIKEOUT_ASCENT     = 53,
+               XA_STRIKEOUT_DESCENT    = 54,
+               XA_ITALIC_ANGLE         = 55,
+               XA_X_HEIGHT             = 56,
+               XA_QUAD_WIDTH           = 57,
+               XA_WEIGHT               = 58,
+               XA_POINT_SIZE           = 59,
+               XA_RESOLUTION           = 60,
+               XA_COPYRIGHT            = 61,
+               XA_NOTICE               = 62,
+               XA_FONT_NAME            = 63,
+               XA_FAMILY_NAME          = 64,
+               XA_FULL_NAME            = 65,
+               XA_CAP_HEIGHT           = 66,
+               XA_WM_CLASS             = 67,
+               XA_WM_TRANSIENT_FOR     = 68,
+
+               XA_LAST_PREDEFINED      = 68
+       }
+
+       [StructLayout(LayoutKind.Sequential)]
+       public struct XScreen {
+               public IntPtr           ext_data;
+               public IntPtr           display;
+               public IntPtr           root;
+               public int              width;
+               public int              height;
+               public int              mwidth;
+               public int              mheight;
+               public int              ndepths;
+               public IntPtr           depths;
+               public int              root_depth;
+               public IntPtr           root_visual;
+               public IntPtr           default_gc;
+               public IntPtr           cmap;
+               public IntPtr           white_pixel;
+               public IntPtr           black_pixel;
+               public int              max_maps;
+               public int              min_maps;
+               public int              backing_store;
+               public bool             save_unders;
+               public IntPtr       root_input_mask;
+       }
+
+       [Flags]
+       public enum ChangeWindowFlags {
+               CWX                     = 1<<0,
+               CWY                     = 1<<1,
+               CWWidth                 = 1<<2,
+               CWHeight                = 1<<3,
+               CWBorderWidth           = 1<<4,
+               CWSibling               = 1<<5,
+               CWStackMode             = 1<<6
+       }
+
+       public enum StackMode {
+               Above                   = 0,
+               Below                   = 1,
+               TopIf                   = 2,
+               BottomIf                = 3,
+               Opposite                = 4
+       }
+
+       [StructLayout(LayoutKind.Sequential)]
+       public struct XWindowChanges {
+               public int              x;
+               public int              y;
+               public int              width;
+               public int              height;
+               public int              border_width;
+               public IntPtr           sibling;
+               public StackMode        stack_mode;
+       }       
+
+       [Flags]
+       public enum ColorFlags {
+               DoRed                   = 1<<0,
+               DoGreen                 = 1<<1,
+               DoBlue                  = 1<<2
+       }
+
+       public enum NotifyMode {
+               NotifyNormal            = 0,
+               NotifyGrab              = 1,
+               NotifyUngrab            = 2
+       }
+
+       public enum NotifyDetail {
+               NotifyAncestor          = 0,
+               NotifyVirtual           = 1,
+               NotifyInferior          = 2,
+               NotifyNonlinear         = 3,
+               NotifyNonlinearVirtual  = 4,
+               NotifyPointer           = 5,
+               NotifyPointerRoot       = 6,
+               NotifyDetailNone        = 7
+       }
+
+       [StructLayout(LayoutKind.Sequential)]
+       public struct MotifWmHints {
+               public IntPtr           flags;
+               public IntPtr           functions;
+               public IntPtr       decorations;
+               public IntPtr           input_mode;
+               public IntPtr           status;
+
+               public override string ToString ()
+               {
+                       return string.Format("MotifWmHints <flags={0}, functions={1}, decorations={2}, input_mode={3}, status={4}", (MotifFlags) flags.ToInt32 (), (MotifFunctions) functions.ToInt32 (), (MotifDecorations) decorations.ToInt32 (), (MotifInputMode) input_mode.ToInt32 (), status.ToInt32 ());
+               }
+       }
+
+       [Flags]
+       public enum MotifFlags {
+               Functions               = 1,
+               Decorations             = 2,
+               InputMode               = 4,
+               Status                  = 8
+       }
+
+       [Flags]
+       public enum MotifFunctions {
+               All                     = 0x01,
+               Resize                  = 0x02,
+               Move                    = 0x04,
+               Minimize                = 0x08,
+               Maximize                = 0x10,
+               Close                   = 0x20
+       }
+
+       [Flags]
+       public enum MotifDecorations {
+               All                     = 0x01,
+               Border                  = 0x02,
+               ResizeH                 = 0x04,
+               Title                   = 0x08,
+               Menu                    = 0x10,
+               Minimize                = 0x20,
+               Maximize                = 0x40,
+               
+       }
+
+       [Flags]
+       public enum MotifInputMode {
+               Modeless                = 0,
+               ApplicationModal        = 1,
+               SystemModal             = 2,
+               FullApplicationModal    = 3
+       }
+
+       [Flags]
+       public enum KeyMasks {
+               ShiftMask               = (1 << 0),
+               LockMask                = (1 << 1),
+               ControlMask             = (1 << 2),
+               Mod1Mask                = (1 << 3),
+               Mod2Mask                = (1 << 4),
+               Mod3Mask                = (1 << 5),
+               Mod4Mask                = (1 << 6),
+               Mod5Mask                = (1 << 7),
+
+               ModMasks                = Mod1Mask | Mod2Mask | Mod3Mask | Mod4Mask | Mod5Mask
+       }
+
+       [Flags]
+       public enum MouseKeyMasks {
+               Button1Mask             = (1 << 8),
+               Button2Mask             = (1 << 9),
+               Button3Mask             = (1 << 10),
+               Button4Mask             = (1 << 11),
+               Button5Mask             = (1 << 12),
+       }
+
+       [StructLayout (LayoutKind.Sequential)]
+       public struct XModifierKeymap {
+               public int max_keypermod;
+               public IntPtr modifiermap;
+       } 
+
+       public enum PropertyMode {
+               Replace                 = 0,
+               Prepend                 = 1,
+               Append                  = 2
+       }
+
+       [StructLayout (LayoutKind.Sequential)]
+       public struct XKeyBoardState {
+               public int key_click_percent;
+               public int bell_percent;
+               public uint bell_pitch, bell_duration;
+               public IntPtr led_mask;
+               public int global_auto_repeat;
+               public AutoRepeats auto_repeats;
+
+               [StructLayout (LayoutKind.Explicit)]
+                       public struct AutoRepeats {
+                       [FieldOffset (0)]
+                       public byte first;
+                               
+                       [FieldOffset (31)]
+                       public byte last;
+               }
+       }
+
+       [Flags]
+       public enum GCFunction {
+               GCFunction              = 1<<0,
+               GCPlaneMask             = 1<<1,
+               GCForeground            = 1<<2,
+               GCBackground            = 1<<3,
+               GCLineWidth             = 1<<4,
+               GCLineStyle             = 1<<5,
+               GCCapStyle              = 1<<6,
+               GCJoinStyle             = 1<<7,
+               GCFillStyle             = 1<<8,
+               GCFillRule              = 1<<9, 
+               GCTile                  = 1<<10,
+               GCStipple               = 1<<11,
+               GCTileStipXOrigin       = 1<<12,
+               GCTileStipYOrigin       = 1<<13,
+               GCFont                  = 1<<14,
+               GCSubwindowMode         = 1<<15,
+               GCGraphicsExposures     = 1<<16,
+               GCClipXOrigin           = 1<<17,
+               GCClipYOrigin           = 1<<18,
+               GCClipMask              = 1<<19,
+               GCDashOffset            = 1<<20,
+               GCDashList              = 1<<21,
+               GCArcMode               = 1<<22
+       }
+
+       public enum GCJoinStyle {
+               JoinMiter               = 0,
+               JoinRound               = 1,
+               JoinBevel               = 2
+       }
+
+       public enum GCLineStyle {
+               LineSolid               = 0,
+               LineOnOffDash           = 1,
+               LineDoubleDash          = 2
+       }
+
+       public enum GCCapStyle {
+               CapNotLast              = 0,
+               CapButt                 = 1,
+               CapRound                = 2,
+               CapProjecting           = 3
+       }
+
+       public enum GCFillStyle {
+               FillSolid               = 0,
+               FillTiled               = 1,
+               FillStippled            = 2,
+               FillOpaqueStppled       = 3
+       }
+
+       public enum GCFillRule {
+               EvenOddRule             = 0,
+               WindingRule             = 1
+       }
+
+       public enum GCArcMode {
+               ArcChord                = 0,
+               ArcPieSlice             = 1
+       }
+
+       public enum GCSubwindowMode {
+               ClipByChildren          = 0,
+               IncludeInferiors        = 1
+       }
+
+       [StructLayout (LayoutKind.Sequential)]
+       public struct XGCValues {
+               public GXFunction               function;
+               public IntPtr                   plane_mask;
+               public IntPtr                   foreground;
+               public IntPtr                   background;
+               public int                      line_width;
+               public GCLineStyle              line_style;
+               public GCCapStyle               cap_style;
+               public GCJoinStyle              join_style;
+               public GCFillStyle              fill_style;
+               public GCFillRule               fill_rule;
+               public GCArcMode                arc_mode;
+               public IntPtr                   tile;
+               public IntPtr                   stipple;
+               public int                      ts_x_origin;
+               public int                      ts_y_origin;
+               public IntPtr                   font;
+               public GCSubwindowMode  subwindow_mode;
+               public bool                     graphics_exposures;
+               public int                      clip_x_origin;
+               public int                      clib_y_origin;
+               public IntPtr                   clip_mask;
+               public int                      dash_offset;
+               public byte                     dashes;
+       }
+
+       public enum GXFunction {
+               GXclear                         = 0x0,          /* 0 */
+               GXand                           = 0x1,          /* src AND dst */
+               GXandReverse                    = 0x2,          /* src AND NOT dst */
+               GXcopy                          = 0x3,          /* src */
+               GXandInverted                   = 0x4,          /* NOT src AND dst */
+               GXnoop                          = 0x5,          /* dst */
+               GXxor                           = 0x6,          /* src XOR dst */
+               GXor                            = 0x7,          /* src OR dst */
+               GXnor                           = 0x8,          /* NOT src AND NOT dst */
+               GXequiv                         = 0x9,          /* NOT src XOR dst */
+               GXinvert                        = 0xa,          /* NOT dst */
+               GXorReverse                     = 0xb,          /* src OR NOT dst */
+               GXcopyInverted                  = 0xc,          /* NOT src */
+               GXorInverted                    = 0xd,          /* NOT src OR dst */
+               GXnand                          = 0xe,          /* NOT src OR NOT dst */
+               GXset                           = 0xf           /* 1 */
+       }
+
+       public enum NetWindowManagerState {
+               Remove                          = 0,
+               Add                             = 1,
+               Toggle                          = 2
+       }
+
+       public enum RevertTo {
+               None                            = 0,
+               PointerRoot                     = 1,
+               Parent                          = 2
+       }
+
+       public enum MapState {
+               IsUnmapped                      = 0,
+               IsUnviewable                    = 1,
+               IsViewable                      = 2
+       }
+
+       public enum CursorFontShape {
+               XC_X_cursor                     = 0,
+               XC_arrow                        = 2,
+               XC_based_arrow_down             = 4,
+               XC_based_arrow_up               = 6,
+               XC_boat                         = 8,
+               XC_bogosity                     = 10,
+               XC_bottom_left_corner           = 12,
+               XC_bottom_right_corner          = 14,
+               XC_bottom_side                  = 16,
+               XC_bottom_tee                   = 18,
+               XC_box_spiral                   = 20,
+               XC_center_ptr                   = 22,
+
+               XC_circle                       = 24,
+               XC_clock                        = 26,
+               XC_coffee_mug                   = 28,
+               XC_cross                        = 30,
+               XC_cross_reverse                = 32,
+               XC_crosshair                    = 34,
+               XC_diamond_cross                = 36,
+               XC_dot                          = 38,
+               XC_dotbox                       = 40,
+               XC_double_arrow                 = 42,
+               XC_draft_large                  = 44,
+               XC_draft_small                  = 46,
+
+               XC_draped_box                   = 48,
+               XC_exchange                     = 50,
+               XC_fleur                        = 52,
+               XC_gobbler                      = 54,
+               XC_gumby                        = 56,
+               XC_hand1                        = 58,
+               XC_hand2                        = 60,
+               XC_heart                        = 62,
+               XC_icon                         = 64,
+               XC_iron_cross                   = 66,
+               XC_left_ptr                     = 68,
+               XC_left_side                    = 70,
+
+               XC_left_tee                     = 72,
+               XC_left_button                  = 74,
+               XC_ll_angle                     = 76,
+               XC_lr_angle                     = 78,
+               XC_man                          = 80,
+               XC_middlebutton                 = 82,
+               XC_mouse                        = 84,
+               XC_pencil                       = 86,
+               XC_pirate                       = 88,
+               XC_plus                         = 90,
+               XC_question_arrow               = 92,
+               XC_right_ptr                    = 94,
+
+               XC_right_side                   = 96,
+               XC_right_tee                    = 98,
+               XC_rightbutton                  = 100,
+               XC_rtl_logo                     = 102,
+               XC_sailboat                     = 104,
+               XC_sb_down_arrow                = 106,
+               XC_sb_h_double_arrow            = 108,
+               XC_sb_left_arrow                = 110,
+               XC_sb_right_arrow               = 112,
+               XC_sb_up_arrow                  = 114,
+               XC_sb_v_double_arrow            = 116,
+               XC_sb_shuttle                   = 118,
+
+               XC_sizing                       = 120,
+               XC_spider                       = 122,
+               XC_spraycan                     = 124,
+               XC_star                         = 126,
+               XC_target                       = 128,
+               XC_tcross                       = 130,
+               XC_top_left_arrow               = 132,
+               XC_top_left_corner              = 134,
+               XC_top_right_corner             = 136,
+               XC_top_side                     = 138,
+               XC_top_tee                      = 140,
+               XC_trek                         = 142,
+
+               XC_ul_angle                     = 144,
+               XC_umbrella                     = 146,
+               XC_ur_angle                     = 148,
+               XC_watch                        = 150,
+               XC_xterm                        = 152,
+               XC_num_glyphs                   = 154
+       }
+
+       public enum SystrayRequest {
+               SYSTEM_TRAY_REQUEST_DOCK        = 0,
+               SYSTEM_TRAY_BEGIN_MESSAGE       = 1,
+               SYSTEM_TRAY_CANCEL_MESSAGE      = 2
+       }
+
+       public enum NetWmStateRequest {
+               _NET_WM_STATE_REMOVE            = 0,
+               _NET_WM_STATE_ADD               = 1,
+               _NET_WM_STATE_TOGGLE            = 2
+       }
+
+       public enum NetWmMoveResize {
+               _NET_WM_MOVERESIZE_SIZE_TOPLEFT =       0,
+               _NET_WM_MOVERESIZE_SIZE_TOP =           1,
+               _NET_WM_MOVERESIZE_SIZE_TOPRIGHT =      2,
+               _NET_WM_MOVERESIZE_SIZE_RIGHT =         3,
+               _NET_WM_MOVERESIZE_SIZE_BOTTOMRIGHT =   4,
+               _NET_WM_MOVERESIZE_SIZE_BOTTOM =        5,
+               _NET_WM_MOVERESIZE_SIZE_BOTTOMLEFT =    6,
+               _NET_WM_MOVERESIZE_SIZE_LEFT =          7,
+               _NET_WM_MOVERESIZE_MOVE =               8,
+               _NET_WM_MOVERESIZE_SIZE_KEYBOARD =      9,
+               _NET_WM_MOVERESIZE_MOVE_KEYBOARD =      10,
+               _NET_WM_MOVERESIZE_CANCEL =             11
+       }
+
+       [Flags]
+       public enum XSizeHintsFlags  {
+               USPosition                      = (1 << 0),
+               USSize                          = (1 << 1),
+               PPosition                       = (1 << 2),
+               PSize                           = (1 << 3),
+               PMinSize                        = (1 << 4),
+               PMaxSize                        = (1 << 5),
+               PResizeInc                      = (1 << 6),
+               PAspect                         = (1 << 7),
+               PAllHints                       = (PPosition | PSize | PMinSize | PMaxSize | PResizeInc | PAspect),
+               PBaseSize                       = (1 << 8),
+               PWinGravity                     = (1 << 9),
+       }
+
+       [StructLayout(LayoutKind.Sequential)]
+       public struct XSizeHints {
+               public IntPtr                   flags;
+               public int                      x;
+               public int                      y;
+               public int                      width;
+               public int                      height;
+               public int                      min_width;
+               public int                      min_height;
+               public int                      max_width;
+               public int                      max_height;
+               public int                      width_inc;
+               public int                      height_inc;
+               public int                      min_aspect_x;
+               public int                      min_aspect_y;
+               public int                      max_aspect_x;
+               public int                      max_aspect_y;
+               public int                      base_width;
+               public int                      base_height;
+               public int                      win_gravity;
+       }
+
+       [Flags]
+       public enum XWMHintsFlags {
+               InputHint                       = (1 << 0),
+               StateHint                       = (1 << 1),
+               IconPixmapHint                  = (1 << 2),
+               IconWindowHint                  = (1 << 3),
+               IconPositionHint                = (1 << 4),
+               IconMaskHint                    = (1 << 5),
+               WindowGroupHint                 = (1 << 6),
+               AllHints                        = (InputHint | StateHint | IconPixmapHint | IconWindowHint | IconPositionHint | IconMaskHint | WindowGroupHint)
+       }
+
+       public enum XInitialState {
+               DontCareState                   = 0,
+               NormalState                     = 1,
+               ZoomState                       = 2,
+               IconicState                     = 3,
+               InactiveState                   = 4
+       }
+
+       [StructLayout(LayoutKind.Sequential)]
+       public struct XWMHints {
+               public IntPtr                   flags;
+               public bool                     input;
+               public XInitialState            initial_state;
+               public IntPtr                   icon_pixmap;
+               public IntPtr                   icon_window;
+               public int                      icon_x;
+               public int                      icon_y;
+               public IntPtr                   icon_mask;
+               public IntPtr                   window_group;
+       }
+
+       [StructLayout(LayoutKind.Sequential)]
+       public struct XIconSize {
+               public int                      min_width;
+               public int                      min_height;
+               public int                      max_width;
+               public int                      max_height;
+               public int                      width_inc;
+               public int                      height_inc;
+       }
+
+       public struct CaretStruct {
+               public Timer    Timer;                          // Blink interval
+               public IntPtr   Hwnd;                           // Window owning the caret
+               public IntPtr   Window;                         // Actual X11 handle of the window
+               public int      X;                              // X position of the caret
+               public int      Y;                              // Y position of the caret
+               public int      Width;                          // Width of the caret; if no image used
+               public int      Height;                         // Height of the caret, if no image used
+               public bool     Visible;                        // Is caret visible?
+               public bool     On;                             // Caret blink display state: On/Off
+               public IntPtr   gc;                             // Graphics context
+               public bool     Paused;                         // Don't update right now
+       }
+
+       public struct HoverStruct {
+               public Timer    Timer;                          // for hovering
+               public IntPtr   Window;                         // Last window we entered; used to generate WM_MOUSEHOVER (handle is X11 handle)
+               public int      X;                              // Last MouseMove X coordinate; used to generate WM_MOUSEHOVER
+               public int      Y;                              // Last MouseMove Y coordinate; used to generate WM_MOUSEHOVER
+               public Size     Size;                           // Size of the rectangle the mouse has to stay in to generate hover
+               public int      Interval;                       // in milliseconds, how long to hold before hover is generated
+               public IntPtr   Atom;                           // X Atom
+       }
+
+       /*public struct ClickStruct {
+               public IntPtr   Hwnd;                           // 
+               public Msg      Message;                        // 
+               public IntPtr   wParam;                         // 
+               public IntPtr   lParam;                         // 
+               public long     Time;                           // Last time we received a mouse click
+               public bool     Pending;                        // True if we haven't sent the last mouse click
+       }*/
+
+       public struct GrabStruct {
+               public bool             Confined;               // Is the current grab (if any) confined to grab_area?
+               public IntPtr           Hwnd;                   // The window that is grabbed
+               public Rectangle        Area;                   // The area the current grab is confined to
+       }
+
+       public delegate int  XErrorHandler(IntPtr DisplayHandle, ref XErrorEvent error_event);
+
+       public enum XRequest : byte {
+               X_CreateWindow                  = 1,
+               X_ChangeWindowAttributes        = 2,
+               X_GetWindowAttributes           = 3,
+               X_DestroyWindow                 = 4,
+               X_DestroySubwindows             = 5,
+               X_ChangeSaveSet                 = 6,
+               X_ReparentWindow                = 7,
+               X_MapWindow                     = 8,
+               X_MapSubwindows                 = 9,
+               X_UnmapWindow                   = 10,
+               X_UnmapSubwindows               = 11,
+               X_ConfigureWindow               = 12,
+               X_CirculateWindow               = 13,
+               X_GetGeometry                   = 14,
+               X_QueryTree                     = 15,
+               X_InternAtom                    = 16,
+               X_GetAtomName                   = 17,
+               X_ChangeProperty                = 18,
+               X_DeleteProperty                = 19,
+               X_GetProperty                   = 20,
+               X_ListProperties                = 21,
+               X_SetSelectionOwner             = 22,
+               X_GetSelectionOwner             = 23,
+               X_ConvertSelection              = 24,
+               X_SendEvent                     = 25,
+               X_GrabPointer                   = 26,
+               X_UngrabPointer                 = 27,
+               X_GrabButton                    = 28,
+               X_UngrabButton                  = 29,
+               X_ChangeActivePointerGrab       = 30,
+               X_GrabKeyboard                  = 31,
+               X_UngrabKeyboard                = 32,
+               X_GrabKey                       = 33,
+               X_UngrabKey                     = 34,
+               X_AllowEvents                   = 35,
+               X_GrabServer                    = 36,
+               X_UngrabServer                  = 37,
+               X_QueryPointer                  = 38,
+               X_GetMotionEvents               = 39,
+               X_TranslateCoords               = 40,
+               X_WarpPointer                   = 41,
+               X_SetInputFocus                 = 42,
+               X_GetInputFocus                 = 43,
+               X_QueryKeymap                   = 44,
+               X_OpenFont                      = 45,
+               X_CloseFont                     = 46,
+               X_QueryFont                     = 47,
+               X_QueryTextExtents              = 48,
+               X_ListFonts                     = 49,
+               X_ListFontsWithInfo             = 50,
+               X_SetFontPath                   = 51,
+               X_GetFontPath                   = 52,
+               X_CreatePixmap                  = 53,
+               X_FreePixmap                    = 54,
+               X_CreateGC                      = 55,
+               X_ChangeGC                      = 56,
+               X_CopyGC                        = 57,
+               X_SetDashes                     = 58,
+               X_SetClipRectangles             = 59,
+               X_FreeGC                        = 60,
+               X_ClearArea                     = 61,
+               X_CopyArea                      = 62,
+               X_CopyPlane                     = 63,
+               X_PolyPoint                     = 64,
+               X_PolyLine                      = 65,
+               X_PolySegment                   = 66,
+               X_PolyRectangle                 = 67,
+               X_PolyArc                       = 68,
+               X_FillPoly                      = 69,
+               X_PolyFillRectangle             = 70,
+               X_PolyFillArc                   = 71,
+               X_PutImage                      = 72,
+               X_GetImage                      = 73,
+               X_PolyText8                     = 74,
+               X_PolyText16                    = 75,
+               X_ImageText8                    = 76,
+               X_ImageText16                   = 77,
+               X_CreateColormap                = 78,
+               X_FreeColormap                  = 79,
+               X_CopyColormapAndFree           = 80,
+               X_InstallColormap               = 81,
+               X_UninstallColormap             = 82,
+               X_ListInstalledColormaps        = 83,
+               X_AllocColor                    = 84,
+               X_AllocNamedColor               = 85,
+               X_AllocColorCells               = 86,
+               X_AllocColorPlanes              = 87,
+               X_FreeColors                    = 88,
+               X_StoreColors                   = 89,
+               X_StoreNamedColor               = 90,
+               X_QueryColors                   = 91,
+               X_LookupColor                   = 92,
+               X_CreateCursor                  = 93,
+               X_CreateGlyphCursor             = 94,
+               X_FreeCursor                    = 95,
+               X_RecolorCursor                 = 96,
+               X_QueryBestSize                 = 97,
+               X_QueryExtension                = 98,
+               X_ListExtensions                = 99,
+               X_ChangeKeyboardMapping         = 100,
+               X_GetKeyboardMapping            = 101,
+               X_ChangeKeyboardControl         = 102,
+               X_GetKeyboardControl            = 103,
+               X_Bell                          = 104,
+               X_ChangePointerControl          = 105,
+               X_GetPointerControl             = 106,
+               X_SetScreenSaver                = 107,
+               X_GetScreenSaver                = 108,
+               X_ChangeHosts                   = 109,
+               X_ListHosts                     = 110,
+               X_SetAccessControl              = 111,
+               X_SetCloseDownMode              = 112,
+               X_KillClient                    = 113,
+               X_RotateProperties              = 114,
+               X_ForceScreenSaver              = 115,
+               X_SetPointerMapping             = 116,
+               X_GetPointerMapping             = 117,
+               X_SetModifierMapping            = 118,
+               X_GetModifierMapping            = 119,
+               X_NoOperation                   = 127
+       }
+
+       [Flags]
+       public enum XIMProperties {
+               XIMPreeditArea          = 0x0001,
+               XIMPreeditCallbacks     = 0x0002,
+               XIMPreeditPosition      = 0x0004,
+               XIMPreeditNothing       = 0x0008,
+               XIMPreeditNone          = 0x0010,
+               XIMStatusArea           = 0x0100,
+               XIMStatusCallbacks      = 0x0200,
+               XIMStatusNothing        = 0x0400,
+               XIMStatusNone           = 0x0800,
+       }
+
+       [Flags]
+       public enum WindowType {
+               Client                  = 1,
+               Whole                   = 2,
+               Both                    = 3
+       }
+
+       public enum XEmbedMessage {
+               EmbeddedNotify = 0,
+               WindowActivate = 1,
+               WindowDeactivate = 2,
+               RequestFocus = 3,
+               FocusIn = 4,
+               FocusOut = 5,
+               FocusNext = 6,
+               FocusPrev = 7,
+               /* 8-9 were used for XEMBED_GRAB_KEY/XEMBED_UNGRAB_KEY */
+               ModalityOn = 10,
+               ModalityOff = 11,
+               RegisterAccelerator = 12,
+               UnregisterAccelerator = 13,
+               ActivateAccelerator = 14
+       }
+
+       [StructLayout (LayoutKind.Sequential)]
+       public struct XcursorImage
+       {
+               private int version;
+               public int size;       /* nominal size for matching */
+               public int width;      /* actual width */
+               public int height;     /* actual height */
+               public int xhot;       /* hot spot x (must be inside image) */
+               public int yhot;       /* hot spot y (must be inside image) */
+               public int delay;       /* hot spot y (must be inside image) */
+               public IntPtr pixels;    /* pointer to pixels */
+
+               public override string ToString ()
+               {
+                       return string.Format ("XCursorImage (version: {0}, size: {1}, width: {2}, height: {3}, xhot: {4}, yhot: {5}, delay: {6}, pixels: {7}", 
+                               version, size, width, height, xhot, yhot, delay, pixels);
+               }
+       } ;
+
+       [StructLayout (LayoutKind.Sequential)]
+       public struct XcursorImages
+       {
+               public int nimage;     /* number of images */
+               public IntPtr images;   /* array of XcursorImage pointers */
+       }
+
+       [StructLayout (LayoutKind.Sequential)]
+       public struct XIMStyles
+       {
+               public ushort count_styles;
+               public IntPtr supported_styles;
+       }
+
+       [StructLayout (LayoutKind.Sequential)]
+       
+       public class XPoint
+       {
+               public short X;
+               public short Y;
+       }
+
+       [StructLayout (LayoutKind.Sequential)]
+       
+       public class XIMCallback
+       {
+               public IntPtr client_data;
+               public XIMProc callback;                
+               GCHandle gch;
+
+               public XIMCallback (IntPtr clientData, XIMProc proc)
+               {
+                       this.client_data = clientData;
+                       this.gch = GCHandle.Alloc (proc);
+                       this.callback = proc;
+               }
+
+               ~XIMCallback ()
+               {
+                       gch.Free ();
+               }
+       }
+       
+       public enum XIMFeedback
+       {
+               Reverse = 1,
+               Underline = 2,
+               Highlight = 4,
+               Primary = 32,
+               Secondary = 64,
+               Tertiary = 128,
+       }
+
+       public struct XIMFeedbackStruct
+       {
+               public byte FeedbackMask; // one or more of XIMFeedback enum
+       }
+       
+       public struct XIMText
+       {
+               public ushort Length;
+               public IntPtr Feedback; // to XIMFeedbackStruct
+               public bool EncodingIsWChar;
+               public IntPtr String; // it could be either char* or wchar_t*
+       }
+
+       public struct XIMPreeditDrawCallbackStruct
+       {
+               public int Caret;
+               public int ChangeFirst;
+               public int ChangeLength;
+               public IntPtr Text; // to XIMText
+       }
+
+       public enum XIMCaretDirection
+       {
+               XIMForwardChar,
+               XIMBackwardChar,
+               XIMForwardWord,
+               XIMBackwardWord,
+               XIMCaretUp,
+               XIMCaretDown,
+               XIMNextLine,
+               XIMPreviousLine,
+               XIMLineStart,
+               XIMLineEnd,
+               XIMAbsolutePosition,
+               XIMDontChange
+       }
+
+       public enum XIMCaretStyle
+       {
+               IsInvisible,
+               IsPrimary,
+               IsSecondary
+       }
+
+       public struct XIMPreeditCaretCallbackStruct
+       {
+               public int Position;
+               public XIMCaretDirection Direction;
+               public XIMCaretStyle Style;
+       }
+
+       // only PreeditStartCallback requires return value though.
+       public delegate int XIMProc (IntPtr xim, IntPtr clientData, IntPtr callData);
+
+       public static class XNames
+       {
+               public const string XNVaNestedList = "XNVaNestedList";
+               public const string XNQueryInputStyle = "queryInputStyle";
+               public const string XNClientWindow = "clientWindow";
+               public const string XNInputStyle = "inputStyle";
+               public const string XNFocusWindow = "focusWindow";
+
+               // XIMPreeditCallbacks delegate names.
+               public const string XNPreeditStartCallback = "preeditStartCallback";
+               public const string XNPreeditDoneCallback = "preeditDoneCallback";
+               public const string XNPreeditDrawCallback = "preeditDrawCallback";
+               public const string XNPreeditCaretCallback = "preeditCaretCallback";
+               public const string XNPreeditStateNotifyCallback = "preeditStateNotifyCallback";
+               public const string XNPreeditAttributes = "preeditAttributes";
+               // XIMStatusCallbacks delegate names.
+               public const string XNStatusStartCallback = "statusStartCallback";
+               public const string XNStatusDoneCallback = "statusDoneCallback";
+               public const string XNStatusDrawCallback = "statusDrawCallback";
+               public const string XNStatusAttributes = "statusAttributes";
+
+               public const string XNArea = "area";
+               public const string XNAreaNeeded = "areaNeeded";
+               public const string XNSpotLocation = "spotLocation";
+               public const string XNFontSet = "fontSet";
+       }
+
+       [StructLayout (LayoutKind.Sequential)]
+       public struct XineramaScreenInfo
+       {
+               public int screen_number;
+               public short x_org;
+               public short y_org;
+               public short width;
+               public short height;
+       }
+}
diff --git a/Crow/src/backends/xlib/XKeySym.cs b/Crow/src/backends/xlib/XKeySym.cs
new file mode 100644 (file)
index 0000000..f874f4d
--- /dev/null
@@ -0,0 +1,2109 @@
+/* autogenerated */
+using System;
+
+namespace XLib
+{
+       [Flags]
+       public enum KeySym
+       {
+               XK_VoidSymbol                                   = 0xffffff,
+               XK_BackSpace                                    = 0xff08,
+               XK_Tab                                                  = 0xff09,
+               XK_Linefeed                                             = 0xff0a,
+               XK_Clear                                                = 0xff0b,
+               XK_Return                                               = 0xff0d,
+               XK_Pause                                                = 0xff13,
+               XK_Scroll_Lock                                  = 0xff14,
+               XK_Sys_Req                                              = 0xff15,
+               XK_Escape                                               = 0xff1b,
+               XK_Delete                                               = 0xffff,
+               XK_Multi_key                                    = 0xff20,
+               XK_Codeinput                                    = 0xff37,
+               XK_SingleCandidate                              = 0xff3c,
+               XK_MultipleCandidate                    = 0xff3d,
+               XK_PreviousCandidate                    = 0xff3e,
+               XK_Kanji                                                = 0xff21,
+               XK_Muhenkan                                             = 0xff22,
+               XK_Henkan_Mode                                  = 0xff23,
+               XK_Henkan                                               = 0xff23,
+               XK_Romaji                                               = 0xff24,
+               XK_Hiragana                                             = 0xff25,
+               XK_Katakana                                             = 0xff26,
+               XK_Hiragana_Katakana                    = 0xff27,
+               XK_Zenkaku                                              = 0xff28,
+               XK_Hankaku                                              = 0xff29,
+               XK_Zenkaku_Hankaku                              = 0xff2a,
+               XK_Touroku                                              = 0xff2b,
+               XK_Massyo                                               = 0xff2c,
+               XK_Kana_Lock                                    = 0xff2d,
+               XK_Kana_Shift                                   = 0xff2e,
+               XK_Eisu_Shift                                   = 0xff2f,
+               XK_Eisu_toggle                                  = 0xff30,
+               XK_Kanji_Bangou                                 = 0xff37,
+               XK_Zen_Koho                                             = 0xff3d,
+               XK_Mae_Koho                                             = 0xff3e,
+               XK_Home                                                 = 0xff50,
+               XK_Left                                                 = 0xff51,
+               XK_Up                                                   = 0xff52,
+               XK_Right                                                = 0xff53,
+               XK_Down                                                 = 0xff54,
+               XK_Prior                                                = 0xff55,
+               XK_Page_Up                                              = 0xff55,
+               XK_Next                                                 = 0xff56,
+               XK_Page_Down                                    = 0xff56,
+               XK_End                                                  = 0xff57,
+               XK_Begin                                                = 0xff58,
+               XK_Select                                               = 0xff60,
+               XK_Print                                                = 0xff61,
+               XK_Execute                                              = 0xff62,
+               XK_Insert                                               = 0xff63,
+               XK_Undo                                                 = 0xff65,
+               XK_Redo                                                 = 0xff66,
+               XK_Menu                                                 = 0xff67,
+               XK_Find                                                 = 0xff68,
+               XK_Cancel                                               = 0xff69,
+               XK_Help                                                 = 0xff6a,
+               XK_Break                                                = 0xff6b,
+               XK_Mode_switch                                  = 0xff7e,
+               XK_script_switch                                = 0xff7e,
+               XK_Num_Lock                                             = 0xff7f,
+               XK_KP_Space                                             = 0xff80,
+               XK_KP_Tab                                               = 0xff89,
+               XK_KP_Enter                                             = 0xff8d,
+               XK_KP_F1                                                = 0xff91,
+               XK_KP_F2                                                = 0xff92,
+               XK_KP_F3                                                = 0xff93,
+               XK_KP_F4                                                = 0xff94,
+               XK_KP_Home                                              = 0xff95,
+               XK_KP_Left                                              = 0xff96,
+               XK_KP_Up                                                = 0xff97,
+               XK_KP_Right                                             = 0xff98,
+               XK_KP_Down                                              = 0xff99,
+               XK_KP_Prior                                             = 0xff9a,
+               XK_KP_Page_Up                                   = 0xff9a,
+               XK_KP_Next                                              = 0xff9b,
+               XK_KP_Page_Down                                 = 0xff9b,
+               XK_KP_End                                               = 0xff9c,
+               XK_KP_Begin                                             = 0xff9d,
+               XK_KP_Insert                                    = 0xff9e,
+               XK_KP_Delete                                    = 0xff9f,
+               XK_KP_Equal                                             = 0xffbd,
+               XK_KP_Multiply                                  = 0xffaa,
+               XK_KP_Add                                               = 0xffab,
+               XK_KP_Separator                                 = 0xffac,
+               XK_KP_Subtract                                  = 0xffad,
+               XK_KP_Decimal                                   = 0xffae,
+               XK_KP_Divide                                    = 0xffaf,
+               XK_KP_0                                                 = 0xffb0,
+               XK_KP_1                                                 = 0xffb1,
+               XK_KP_2                                                 = 0xffb2,
+               XK_KP_3                                                 = 0xffb3,
+               XK_KP_4                                                 = 0xffb4,
+               XK_KP_5                                                 = 0xffb5,
+               XK_KP_6                                                 = 0xffb6,
+               XK_KP_7                                                 = 0xffb7,
+               XK_KP_8                                                 = 0xffb8,
+               XK_KP_9                                                 = 0xffb9,
+               XK_F1                                                   = 0xffbe,
+               XK_F2                                                   = 0xffbf,
+               XK_F3                                                   = 0xffc0,
+               XK_F4                                                   = 0xffc1,
+               XK_F5                                                   = 0xffc2,
+               XK_F6                                                   = 0xffc3,
+               XK_F7                                                   = 0xffc4,
+               XK_F8                                                   = 0xffc5,
+               XK_F9                                                   = 0xffc6,
+               XK_F10                                                  = 0xffc7,
+               XK_F11                                                  = 0xffc8,
+               XK_L1                                                   = 0xffc8,
+               XK_F12                                                  = 0xffc9,
+               XK_L2                                                   = 0xffc9,
+               XK_F13                                                  = 0xffca,
+               XK_L3                                                   = 0xffca,
+               XK_F14                                                  = 0xffcb,
+               XK_L4                                                   = 0xffcb,
+               XK_F15                                                  = 0xffcc,
+               XK_L5                                                   = 0xffcc,
+               XK_F16                                                  = 0xffcd,
+               XK_L6                                                   = 0xffcd,
+               XK_F17                                                  = 0xffce,
+               XK_L7                                                   = 0xffce,
+               XK_F18                                                  = 0xffcf,
+               XK_L8                                                   = 0xffcf,
+               XK_F19                                                  = 0xffd0,
+               XK_L9                                                   = 0xffd0,
+               XK_F20                                                  = 0xffd1,
+               XK_L10                                                  = 0xffd1,
+               XK_F21                                                  = 0xffd2,
+               XK_R1                                                   = 0xffd2,
+               XK_F22                                                  = 0xffd3,
+               XK_R2                                                   = 0xffd3,
+               XK_F23                                                  = 0xffd4,
+               XK_R3                                                   = 0xffd4,
+               XK_F24                                                  = 0xffd5,
+               XK_R4                                                   = 0xffd5,
+               XK_F25                                                  = 0xffd6,
+               XK_R5                                                   = 0xffd6,
+               XK_F26                                                  = 0xffd7,
+               XK_R6                                                   = 0xffd7,
+               XK_F27                                                  = 0xffd8,
+               XK_R7                                                   = 0xffd8,
+               XK_F28                                                  = 0xffd9,
+               XK_R8                                                   = 0xffd9,
+               XK_F29                                                  = 0xffda,
+               XK_R9                                                   = 0xffda,
+               XK_F30                                                  = 0xffdb,
+               XK_R10                                                  = 0xffdb,
+               XK_F31                                                  = 0xffdc,
+               XK_R11                                                  = 0xffdc,
+               XK_F32                                                  = 0xffdd,
+               XK_R12                                                  = 0xffdd,
+               XK_F33                                                  = 0xffde,
+               XK_R13                                                  = 0xffde,
+               XK_F34                                                  = 0xffdf,
+               XK_R14                                                  = 0xffdf,
+               XK_F35                                                  = 0xffe0,
+               XK_R15                                                  = 0xffe0,
+               XK_Shift_L                                              = 0xffe1,
+               XK_Shift_R                                              = 0xffe2,
+               XK_Control_L                                    = 0xffe3,
+               XK_Control_R                                    = 0xffe4,
+               XK_Caps_Lock                                    = 0xffe5,
+               XK_Shift_Lock                                   = 0xffe6,
+               XK_Meta_L                                               = 0xffe7,
+               XK_Meta_R                                               = 0xffe8,
+               XK_Alt_L                                                = 0xffe9,
+               XK_Alt_R                                                = 0xffea,
+               XK_Super_L                                              = 0xffeb,
+               XK_Super_R                                              = 0xffec,
+               XK_Hyper_L                                              = 0xffed,
+               XK_Hyper_R                                              = 0xffee,
+               XK_ISO_Lock                                             = 0xfe01,
+               XK_ISO_Level2_Latch                             = 0xfe02,
+               XK_ISO_Level3_Shift                             = 0xfe03,
+               XK_ISO_Level3_Latch                             = 0xfe04,
+               XK_ISO_Level3_Lock                              = 0xfe05,
+               XK_ISO_Level5_Shift                             = 0xfe11,
+               XK_ISO_Level5_Latch                             = 0xfe12,
+               XK_ISO_Level5_Lock                              = 0xfe13,
+               XK_ISO_Group_Shift                              = 0xff7e,
+               XK_ISO_Group_Latch                              = 0xfe06,
+               XK_ISO_Group_Lock                               = 0xfe07,
+               XK_ISO_Next_Group                               = 0xfe08,
+               XK_ISO_Next_Group_Lock                  = 0xfe09,
+               XK_ISO_Prev_Group                               = 0xfe0a,
+               XK_ISO_Prev_Group_Lock                  = 0xfe0b,
+               XK_ISO_First_Group                              = 0xfe0c,
+               XK_ISO_First_Group_Lock                 = 0xfe0d,
+               XK_ISO_Last_Group                               = 0xfe0e,
+               XK_ISO_Last_Group_Lock                  = 0xfe0f,
+               XK_ISO_Left_Tab                                 = 0xfe20,
+               XK_ISO_Move_Line_Up                             = 0xfe21,
+               XK_ISO_Move_Line_Down                   = 0xfe22,
+               XK_ISO_Partial_Line_Up                  = 0xfe23,
+               XK_ISO_Partial_Line_Down                = 0xfe24,
+               XK_ISO_Partial_Space_Left               = 0xfe25,
+               XK_ISO_Partial_Space_Right              = 0xfe26,
+               XK_ISO_Set_Margin_Left                  = 0xfe27,
+               XK_ISO_Set_Margin_Right                 = 0xfe28,
+               XK_ISO_Release_Margin_Left              = 0xfe29,
+               XK_ISO_Release_Margin_Right             = 0xfe2a,
+               XK_ISO_Release_Both_Margins             = 0xfe2b,
+               XK_ISO_Fast_Cursor_Left                 = 0xfe2c,
+               XK_ISO_Fast_Cursor_Right                = 0xfe2d,
+               XK_ISO_Fast_Cursor_Up                   = 0xfe2e,
+               XK_ISO_Fast_Cursor_Down                 = 0xfe2f,
+               XK_ISO_Continuous_Underline             = 0xfe30,
+               XK_ISO_Discontinuous_Underline  = 0xfe31,
+               XK_ISO_Emphasize                                = 0xfe32,
+               XK_ISO_Center_Object                    = 0xfe33,
+               XK_ISO_Enter                                    = 0xfe34,
+               XK_dead_grave                                   = 0xfe50,
+               XK_dead_acute                                   = 0xfe51,
+               XK_dead_circumflex                              = 0xfe52,
+               XK_dead_tilde                                   = 0xfe53,
+               XK_dead_perispomeni                             = 0xfe53,
+               XK_dead_macron                                  = 0xfe54,
+               XK_dead_breve                                   = 0xfe55,
+               XK_dead_abovedot                                = 0xfe56,
+               XK_dead_diaeresis                               = 0xfe57,
+               XK_dead_abovering                               = 0xfe58,
+               XK_dead_doubleacute                             = 0xfe59,
+               XK_dead_caron                                   = 0xfe5a,
+               XK_dead_cedilla                                 = 0xfe5b,
+               XK_dead_ogonek                                  = 0xfe5c,
+               XK_dead_iota                                    = 0xfe5d,
+               XK_dead_voiced_sound                    = 0xfe5e,
+               XK_dead_semivoiced_sound                = 0xfe5f,
+               XK_dead_belowdot                                = 0xfe60,
+               XK_dead_hook                                    = 0xfe61,
+               XK_dead_horn                                    = 0xfe62,
+               XK_dead_stroke                                  = 0xfe63,
+               XK_dead_abovecomma                              = 0xfe64,
+               XK_dead_psili                                   = 0xfe64,
+               XK_dead_abovereversedcomma              = 0xfe65,
+               XK_dead_dasia                                   = 0xfe65,
+               XK_dead_doublegrave                             = 0xfe66,
+               XK_dead_belowring                               = 0xfe67,
+               XK_dead_belowmacron                             = 0xfe68,
+               XK_dead_belowcircumflex                 = 0xfe69,
+               XK_dead_belowtilde                              = 0xfe6a,
+               XK_dead_belowbreve                              = 0xfe6b,
+               XK_dead_belowdiaeresis                  = 0xfe6c,
+               XK_dead_invertedbreve                   = 0xfe6d,
+               XK_dead_belowcomma                              = 0xfe6e,
+               XK_dead_currency                                = 0xfe6f,
+               XK_dead_lowline                                 = 0xfe90,
+               XK_dead_aboveverticalline               = 0xfe91,
+               XK_dead_belowverticalline               = 0xfe92,
+               XK_dead_longsolidusoverlay              = 0xfe93,
+               XK_dead_a                                               = 0xfe80,
+               XK_dead_A                                               = 0xfe81,
+               XK_dead_e                                               = 0xfe82,
+               XK_dead_E                                               = 0xfe83,
+               XK_dead_i                                               = 0xfe84,
+               XK_dead_I                                               = 0xfe85,
+               XK_dead_o                                               = 0xfe86,
+               XK_dead_O                                               = 0xfe87,
+               XK_dead_u                                               = 0xfe88,
+               XK_dead_U                                               = 0xfe89,
+               XK_dead_small_schwa                             = 0xfe8a,
+               XK_dead_capital_schwa                   = 0xfe8b,
+               XK_dead_greek                                   = 0xfe8c,
+               XK_First_Virtual_Screen                 = 0xfed0,
+               XK_Prev_Virtual_Screen                  = 0xfed1,
+               XK_Next_Virtual_Screen                  = 0xfed2,
+               XK_Last_Virtual_Screen                  = 0xfed4,
+               XK_Terminate_Server                             = 0xfed5,
+               XK_AccessX_Enable                               = 0xfe70,
+               XK_AccessX_Feedback_Enable              = 0xfe71,
+               XK_RepeatKeys_Enable                    = 0xfe72,
+               XK_SlowKeys_Enable                              = 0xfe73,
+               XK_BounceKeys_Enable                    = 0xfe74,
+               XK_StickyKeys_Enable                    = 0xfe75,
+               XK_MouseKeys_Enable                             = 0xfe76,
+               XK_MouseKeys_Accel_Enable               = 0xfe77,
+               XK_Overlay1_Enable                              = 0xfe78,
+               XK_Overlay2_Enable                              = 0xfe79,
+               XK_AudibleBell_Enable                   = 0xfe7a,
+               XK_Pointer_Left                                 = 0xfee0,
+               XK_Pointer_Right                                = 0xfee1,
+               XK_Pointer_Up                                   = 0xfee2,
+               XK_Pointer_Down                                 = 0xfee3,
+               XK_Pointer_UpLeft                               = 0xfee4,
+               XK_Pointer_UpRight                              = 0xfee5,
+               XK_Pointer_DownLeft                             = 0xfee6,
+               XK_Pointer_DownRight                    = 0xfee7,
+               XK_Pointer_Button_Dflt                  = 0xfee8,
+               XK_Pointer_Button1                              = 0xfee9,
+               XK_Pointer_Button2                              = 0xfeea,
+               XK_Pointer_Button3                              = 0xfeeb,
+               XK_Pointer_Button4                              = 0xfeec,
+               XK_Pointer_Button5                              = 0xfeed,
+               XK_Pointer_DblClick_Dflt                = 0xfeee,
+               XK_Pointer_DblClick1                    = 0xfeef,
+               XK_Pointer_DblClick2                    = 0xfef0,
+               XK_Pointer_DblClick3                    = 0xfef1,
+               XK_Pointer_DblClick4                    = 0xfef2,
+               XK_Pointer_DblClick5                    = 0xfef3,
+               XK_Pointer_Drag_Dflt                    = 0xfef4,
+               XK_Pointer_Drag1                                = 0xfef5,
+               XK_Pointer_Drag2                                = 0xfef6,
+               XK_Pointer_Drag3                                = 0xfef7,
+               XK_Pointer_Drag4                                = 0xfef8,
+               XK_Pointer_Drag5                                = 0xfefd,
+               XK_Pointer_EnableKeys                   = 0xfef9,
+               XK_Pointer_Accelerate                   = 0xfefa,
+               XK_Pointer_DfltBtnNext                  = 0xfefb,
+               XK_Pointer_DfltBtnPrev                  = 0xfefc,
+               XK_ch                                                   = 0xfea0,
+               XK_Ch                                                   = 0xfea1,
+               XK_CH                                                   = 0xfea2,
+               XK_c_h                                                  = 0xfea3,
+               XK_C_h                                                  = 0xfea4,
+               XK_C_H                                                  = 0xfea5,
+               XK_3270_Duplicate                               = 0xfd01,
+               XK_3270_FieldMark                               = 0xfd02,
+               XK_3270_Right2                                  = 0xfd03,
+               XK_3270_Left2                                   = 0xfd04,
+               XK_3270_BackTab                                 = 0xfd05,
+               XK_3270_EraseEOF                                = 0xfd06,
+               XK_3270_EraseInput                              = 0xfd07,
+               XK_3270_Reset                                   = 0xfd08,
+               XK_3270_Quit                                    = 0xfd09,
+               XK_3270_PA1                                             = 0xfd0a,
+               XK_3270_PA2                                             = 0xfd0b,
+               XK_3270_PA3                                             = 0xfd0c,
+               XK_3270_Test                                    = 0xfd0d,
+               XK_3270_Attn                                    = 0xfd0e,
+               XK_3270_CursorBlink                             = 0xfd0f,
+               XK_3270_AltCursor                               = 0xfd10,
+               XK_3270_KeyClick                                = 0xfd11,
+               XK_3270_Jump                                    = 0xfd12,
+               XK_3270_Ident                                   = 0xfd13,
+               XK_3270_Rule                                    = 0xfd14,
+               XK_3270_Copy                                    = 0xfd15,
+               XK_3270_Play                                    = 0xfd16,
+               XK_3270_Setup                                   = 0xfd17,
+               XK_3270_Record                                  = 0xfd18,
+               XK_3270_ChangeScreen                    = 0xfd19,
+               XK_3270_DeleteWord                              = 0xfd1a,
+               XK_3270_ExSelect                                = 0xfd1b,
+               XK_3270_CursorSelect                    = 0xfd1c,
+               XK_3270_PrintScreen                             = 0xfd1d,
+               XK_3270_Enter                                   = 0xfd1e,
+               XK_space                                                = 0x0020,
+               XK_exclam                                               = 0x0021,
+               XK_quotedbl                                             = 0x0022,
+               XK_numbersign                                   = 0x0023,
+               XK_dollar                                               = 0x0024,
+               XK_percent                                              = 0x0025,
+               XK_ampersand                                    = 0x0026,
+               XK_apostrophe                                   = 0x0027,
+               XK_quoteright                                   = 0x0027,
+               XK_parenleft                                    = 0x0028,
+               XK_parenright                                   = 0x0029,
+               XK_asterisk                                             = 0x002a,
+               XK_plus                                                 = 0x002b,
+               XK_comma                                                = 0x002c,
+               XK_minus                                                = 0x002d,
+               XK_period                                               = 0x002e,
+               XK_slash                                                = 0x002f,
+               XK_0                                                    = 0x0030,
+               XK_1                                                    = 0x0031,
+               XK_2                                                    = 0x0032,
+               XK_3                                                    = 0x0033,
+               XK_4                                                    = 0x0034,
+               XK_5                                                    = 0x0035,
+               XK_6                                                    = 0x0036,
+               XK_7                                                    = 0x0037,
+               XK_8                                                    = 0x0038,
+               XK_9                                                    = 0x0039,
+               XK_colon                                                = 0x003a,
+               XK_semicolon                                    = 0x003b,
+               XK_less                                                 = 0x003c,
+               XK_equal                                                = 0x003d,
+               XK_greater                                              = 0x003e,
+               XK_question                                             = 0x003f,
+               XK_at                                                   = 0x0040,
+               XK_A                                                    = 0x0041,
+               XK_B                                                    = 0x0042,
+               XK_C                                                    = 0x0043,
+               XK_D                                                    = 0x0044,
+               XK_E                                                    = 0x0045,
+               XK_F                                                    = 0x0046,
+               XK_G                                                    = 0x0047,
+               XK_H                                                    = 0x0048,
+               XK_I                                                    = 0x0049,
+               XK_J                                                    = 0x004a,
+               XK_K                                                    = 0x004b,
+               XK_L                                                    = 0x004c,
+               XK_M                                                    = 0x004d,
+               XK_N                                                    = 0x004e,
+               XK_O                                                    = 0x004f,
+               XK_P                                                    = 0x0050,
+               XK_Q                                                    = 0x0051,
+               XK_R                                                    = 0x0052,
+               XK_S                                                    = 0x0053,
+               XK_T                                                    = 0x0054,
+               XK_U                                                    = 0x0055,
+               XK_V                                                    = 0x0056,
+               XK_W                                                    = 0x0057,
+               XK_X                                                    = 0x0058,
+               XK_Y                                                    = 0x0059,
+               XK_Z                                                    = 0x005a,
+               XK_bracketleft                                  = 0x005b,
+               XK_backslash                                    = 0x005c,
+               XK_bracketright                                 = 0x005d,
+               XK_asciicircum                                  = 0x005e,
+               XK_underscore                                   = 0x005f,
+               XK_grave                                                = 0x0060,
+               XK_quoteleft                                    = 0x0060,
+               XK_a                                                    = 0x0061,
+               XK_b                                                    = 0x0062,
+               XK_c                                                    = 0x0063,
+               XK_d                                                    = 0x0064,
+               XK_e                                                    = 0x0065,
+               XK_f                                                    = 0x0066,
+               XK_g                                                    = 0x0067,
+               XK_h                                                    = 0x0068,
+               XK_i                                                    = 0x0069,
+               XK_j                                                    = 0x006a,
+               XK_k                                                    = 0x006b,
+               XK_l                                                    = 0x006c,
+               XK_m                                                    = 0x006d,
+               XK_n                                                    = 0x006e,
+               XK_o                                                    = 0x006f,
+               XK_p                                                    = 0x0070,
+               XK_q                                                    = 0x0071,
+               XK_r                                                    = 0x0072,
+               XK_s                                                    = 0x0073,
+               XK_t                                                    = 0x0074,
+               XK_u                                                    = 0x0075,
+               XK_v                                                    = 0x0076,
+               XK_w                                                    = 0x0077,
+               XK_x                                                    = 0x0078,
+               XK_y                                                    = 0x0079,
+               XK_z                                                    = 0x007a,
+               XK_braceleft                                    = 0x007b,
+               XK_bar                                                  = 0x007c,
+               XK_braceright                                   = 0x007d,
+               XK_asciitilde                                   = 0x007e,
+               XK_nobreakspace                                 = 0x00a0,
+               XK_exclamdown                                   = 0x00a1,
+               XK_cent                                                 = 0x00a2,
+               XK_sterling                                             = 0x00a3,
+               XK_currency                                             = 0x00a4,
+               XK_yen                                                  = 0x00a5,
+               XK_brokenbar                                    = 0x00a6,
+               XK_section                                              = 0x00a7,
+               XK_diaeresis                                    = 0x00a8,
+               XK_copyright                                    = 0x00a9,
+               XK_ordfeminine                                  = 0x00aa,
+               XK_guillemotleft                                = 0x00ab,
+               XK_notsign                                              = 0x00ac,
+               XK_hyphen                                               = 0x00ad,
+               XK_registered                                   = 0x00ae,
+               XK_macron                                               = 0x00af,
+               XK_degree                                               = 0x00b0,
+               XK_plusminus                                    = 0x00b1,
+               XK_twosuperior                                  = 0x00b2,
+               XK_threesuperior                                = 0x00b3,
+               XK_acute                                                = 0x00b4,
+               XK_mu                                                   = 0x00b5,
+               XK_paragraph                                    = 0x00b6,
+               XK_periodcentered                               = 0x00b7,
+               XK_cedilla                                              = 0x00b8,
+               XK_onesuperior                                  = 0x00b9,
+               XK_masculine                                    = 0x00ba,
+               XK_guillemotright                               = 0x00bb,
+               XK_onequarter                                   = 0x00bc,
+               XK_onehalf                                              = 0x00bd,
+               XK_threequarters                                = 0x00be,
+               XK_questiondown                                 = 0x00bf,
+               XK_Agrave                                               = 0x00c0,
+               XK_Aacute                                               = 0x00c1,
+               XK_Acircumflex                                  = 0x00c2,
+               XK_Atilde                                               = 0x00c3,
+               XK_Adiaeresis                                   = 0x00c4,
+               XK_Aring                                                = 0x00c5,
+               XK_AE                                                   = 0x00c6,
+               XK_Ccedilla                                             = 0x00c7,
+               XK_Egrave                                               = 0x00c8,
+               XK_Eacute                                               = 0x00c9,
+               XK_Ecircumflex                                  = 0x00ca,
+               XK_Ediaeresis                                   = 0x00cb,
+               XK_Igrave                                               = 0x00cc,
+               XK_Iacute                                               = 0x00cd,
+               XK_Icircumflex                                  = 0x00ce,
+               XK_Idiaeresis                                   = 0x00cf,
+               XK_ETH                                                  = 0x00d0,
+               XK_Eth                                                  = 0x00d0,
+               XK_Ntilde                                               = 0x00d1,
+               XK_Ograve                                               = 0x00d2,
+               XK_Oacute                                               = 0x00d3,
+               XK_Ocircumflex                                  = 0x00d4,
+               XK_Otilde                                               = 0x00d5,
+               XK_Odiaeresis                                   = 0x00d6,
+               XK_multiply                                             = 0x00d7,
+               XK_Oslash                                               = 0x00d8,
+               XK_Ooblique                                             = 0x00d8,
+               XK_Ugrave                                               = 0x00d9,
+               XK_Uacute                                               = 0x00da,
+               XK_Ucircumflex                                  = 0x00db,
+               XK_Udiaeresis                                   = 0x00dc,
+               XK_Yacute                                               = 0x00dd,
+               XK_THORN                                                = 0x00de,
+               XK_Thorn                                                = 0x00de,
+               XK_ssharp                                               = 0x00df,
+               XK_agrave                                               = 0x00e0,
+               XK_aacute                                               = 0x00e1,
+               XK_acircumflex                                  = 0x00e2,
+               XK_atilde                                               = 0x00e3,
+               XK_adiaeresis                                   = 0x00e4,
+               XK_aring                                                = 0x00e5,
+               XK_ae                                                   = 0x00e6,
+               XK_ccedilla                                             = 0x00e7,
+               XK_egrave                                               = 0x00e8,
+               XK_eacute                                               = 0x00e9,
+               XK_ecircumflex                                  = 0x00ea,
+               XK_ediaeresis                                   = 0x00eb,
+               XK_igrave                                               = 0x00ec,
+               XK_iacute                                               = 0x00ed,
+               XK_icircumflex                                  = 0x00ee,
+               XK_idiaeresis                                   = 0x00ef,
+               XK_eth                                                  = 0x00f0,
+               XK_ntilde                                               = 0x00f1,
+               XK_ograve                                               = 0x00f2,
+               XK_oacute                                               = 0x00f3,
+               XK_ocircumflex                                  = 0x00f4,
+               XK_otilde                                               = 0x00f5,
+               XK_odiaeresis                                   = 0x00f6,
+               XK_division                                             = 0x00f7,
+               XK_oslash                                               = 0x00f8,
+               XK_ooblique                                             = 0x00f8,
+               XK_ugrave                                               = 0x00f9,
+               XK_uacute                                               = 0x00fa,
+               XK_ucircumflex                                  = 0x00fb,
+               XK_udiaeresis                                   = 0x00fc,
+               XK_yacute                                               = 0x00fd,
+               XK_thorn                                                = 0x00fe,
+               XK_ydiaeresis                                   = 0x00ff,
+               XK_Aogonek                                              = 0x01a1,
+               XK_breve                                                = 0x01a2,
+               XK_Lstroke                                              = 0x01a3,
+               XK_Lcaron                                               = 0x01a5,
+               XK_Sacute                                               = 0x01a6,
+               XK_Scaron                                               = 0x01a9,
+               XK_Scedilla                                             = 0x01aa,
+               XK_Tcaron                                               = 0x01ab,
+               XK_Zacute                                               = 0x01ac,
+               XK_Zcaron                                               = 0x01ae,
+               XK_Zabovedot                                    = 0x01af,
+               XK_aogonek                                              = 0x01b1,
+               XK_ogonek                                               = 0x01b2,
+               XK_lstroke                                              = 0x01b3,
+               XK_lcaron                                               = 0x01b5,
+               XK_sacute                                               = 0x01b6,
+               XK_caron                                                = 0x01b7,
+               XK_scaron                                               = 0x01b9,
+               XK_scedilla                                             = 0x01ba,
+               XK_tcaron                                               = 0x01bb,
+               XK_zacute                                               = 0x01bc,
+               XK_doubleacute                                  = 0x01bd,
+               XK_zcaron                                               = 0x01be,
+               XK_zabovedot                                    = 0x01bf,
+               XK_Racute                                               = 0x01c0,
+               XK_Abreve                                               = 0x01c3,
+               XK_Lacute                                               = 0x01c5,
+               XK_Cacute                                               = 0x01c6,
+               XK_Ccaron                                               = 0x01c8,
+               XK_Eogonek                                              = 0x01ca,
+               XK_Ecaron                                               = 0x01cc,
+               XK_Dcaron                                               = 0x01cf,
+               XK_Dstroke                                              = 0x01d0,
+               XK_Nacute                                               = 0x01d1,
+               XK_Ncaron                                               = 0x01d2,
+               XK_Odoubleacute                                 = 0x01d5,
+               XK_Rcaron                                               = 0x01d8,
+               XK_Uring                                                = 0x01d9,
+               XK_Udoubleacute                                 = 0x01db,
+               XK_Tcedilla                                             = 0x01de,
+               XK_racute                                               = 0x01e0,
+               XK_abreve                                               = 0x01e3,
+               XK_lacute                                               = 0x01e5,
+               XK_cacute                                               = 0x01e6,
+               XK_ccaron                                               = 0x01e8,
+               XK_eogonek                                              = 0x01ea,
+               XK_ecaron                                               = 0x01ec,
+               XK_dcaron                                               = 0x01ef,
+               XK_dstroke                                              = 0x01f0,
+               XK_nacute                                               = 0x01f1,
+               XK_ncaron                                               = 0x01f2,
+               XK_odoubleacute                                 = 0x01f5,
+               XK_rcaron                                               = 0x01f8,
+               XK_uring                                                = 0x01f9,
+               XK_udoubleacute                                 = 0x01fb,
+               XK_tcedilla                                             = 0x01fe,
+               XK_abovedot                                             = 0x01ff,
+               XK_Hstroke                                              = 0x02a1,
+               XK_Hcircumflex                                  = 0x02a6,
+               XK_Iabovedot                                    = 0x02a9,
+               XK_Gbreve                                               = 0x02ab,
+               XK_Jcircumflex                                  = 0x02ac,
+               XK_hstroke                                              = 0x02b1,
+               XK_hcircumflex                                  = 0x02b6,
+               XK_idotless                                             = 0x02b9,
+               XK_gbreve                                               = 0x02bb,
+               XK_jcircumflex                                  = 0x02bc,
+               XK_Cabovedot                                    = 0x02c5,
+               XK_Ccircumflex                                  = 0x02c6,
+               XK_Gabovedot                                    = 0x02d5,
+               XK_Gcircumflex                                  = 0x02d8,
+               XK_Ubreve                                               = 0x02dd,
+               XK_Scircumflex                                  = 0x02de,
+               XK_cabovedot                                    = 0x02e5,
+               XK_ccircumflex                                  = 0x02e6,
+               XK_gabovedot                                    = 0x02f5,
+               XK_gcircumflex                                  = 0x02f8,
+               XK_ubreve                                               = 0x02fd,
+               XK_scircumflex                                  = 0x02fe,
+               XK_kra                                                  = 0x03a2,
+               XK_kappa                                                = 0x03a2,
+               XK_Rcedilla                                             = 0x03a3,
+               XK_Itilde                                               = 0x03a5,
+               XK_Lcedilla                                             = 0x03a6,
+               XK_Emacron                                              = 0x03aa,
+               XK_Gcedilla                                             = 0x03ab,
+               XK_Tslash                                               = 0x03ac,
+               XK_rcedilla                                             = 0x03b3,
+               XK_itilde                                               = 0x03b5,
+               XK_lcedilla                                             = 0x03b6,
+               XK_emacron                                              = 0x03ba,
+               XK_gcedilla                                             = 0x03bb,
+               XK_tslash                                               = 0x03bc,
+               XK_ENG                                                  = 0x03bd,
+               XK_eng                                                  = 0x03bf,
+               XK_Amacron                                              = 0x03c0,
+               XK_Iogonek                                              = 0x03c7,
+               XK_Eabovedot                                    = 0x03cc,
+               XK_Imacron                                              = 0x03cf,
+               XK_Ncedilla                                             = 0x03d1,
+               XK_Omacron                                              = 0x03d2,
+               XK_Kcedilla                                             = 0x03d3,
+               XK_Uogonek                                              = 0x03d9,
+               XK_Utilde                                               = 0x03dd,
+               XK_Umacron                                              = 0x03de,
+               XK_amacron                                              = 0x03e0,
+               XK_iogonek                                              = 0x03e7,
+               XK_eabovedot                                    = 0x03ec,
+               XK_imacron                                              = 0x03ef,
+               XK_ncedilla                                             = 0x03f1,
+               XK_omacron                                              = 0x03f2,
+               XK_kcedilla                                             = 0x03f3,
+               XK_uogonek                                              = 0x03f9,
+               XK_utilde                                               = 0x03fd,
+               XK_umacron                                              = 0x03fe,
+               XK_Wcircumflex                                  = 0x1000174,
+               XK_wcircumflex                                  = 0x1000175,
+               XK_Ycircumflex                                  = 0x1000176,
+               XK_ycircumflex                                  = 0x1000177,
+               XK_Babovedot                                    = 0x1001e02,
+               XK_babovedot                                    = 0x1001e03,
+               XK_Dabovedot                                    = 0x1001e0a,
+               XK_dabovedot                                    = 0x1001e0b,
+               XK_Fabovedot                                    = 0x1001e1e,
+               XK_fabovedot                                    = 0x1001e1f,
+               XK_Mabovedot                                    = 0x1001e40,
+               XK_mabovedot                                    = 0x1001e41,
+               XK_Pabovedot                                    = 0x1001e56,
+               XK_pabovedot                                    = 0x1001e57,
+               XK_Sabovedot                                    = 0x1001e60,
+               XK_sabovedot                                    = 0x1001e61,
+               XK_Tabovedot                                    = 0x1001e6a,
+               XK_tabovedot                                    = 0x1001e6b,
+               XK_Wgrave                                               = 0x1001e80,
+               XK_wgrave                                               = 0x1001e81,
+               XK_Wacute                                               = 0x1001e82,
+               XK_wacute                                               = 0x1001e83,
+               XK_Wdiaeresis                                   = 0x1001e84,
+               XK_wdiaeresis                                   = 0x1001e85,
+               XK_Ygrave                                               = 0x1001ef2,
+               XK_ygrave                                               = 0x1001ef3,
+               XK_OE                                                   = 0x13bc,
+               XK_oe                                                   = 0x13bd,
+               XK_Ydiaeresis                                   = 0x13be,
+               XK_overline                                             = 0x047e,
+               XK_kana_fullstop                                = 0x04a1,
+               XK_kana_openingbracket                  = 0x04a2,
+               XK_kana_closingbracket                  = 0x04a3,
+               XK_kana_comma                                   = 0x04a4,
+               XK_kana_conjunctive                             = 0x04a5,
+               XK_kana_middledot                               = 0x04a5,
+               XK_kana_WO                                              = 0x04a6,
+               XK_kana_a                                               = 0x04a7,
+               XK_kana_i                                               = 0x04a8,
+               XK_kana_u                                               = 0x04a9,
+               XK_kana_e                                               = 0x04aa,
+               XK_kana_o                                               = 0x04ab,
+               XK_kana_ya                                              = 0x04ac,
+               XK_kana_yu                                              = 0x04ad,
+               XK_kana_yo                                              = 0x04ae,
+               XK_kana_tsu                                             = 0x04af,
+               XK_kana_tu                                              = 0x04af,
+               XK_prolongedsound                               = 0x04b0,
+               XK_kana_A                                               = 0x04b1,
+               XK_kana_I                                               = 0x04b2,
+               XK_kana_U                                               = 0x04b3,
+               XK_kana_E                                               = 0x04b4,
+               XK_kana_O                                               = 0x04b5,
+               XK_kana_KA                                              = 0x04b6,
+               XK_kana_KI                                              = 0x04b7,
+               XK_kana_KU                                              = 0x04b8,
+               XK_kana_KE                                              = 0x04b9,
+               XK_kana_KO                                              = 0x04ba,
+               XK_kana_SA                                              = 0x04bb,
+               XK_kana_SHI                                             = 0x04bc,
+               XK_kana_SU                                              = 0x04bd,
+               XK_kana_SE                                              = 0x04be,
+               XK_kana_SO                                              = 0x04bf,
+               XK_kana_TA                                              = 0x04c0,
+               XK_kana_CHI                                             = 0x04c1,
+               XK_kana_TI                                              = 0x04c1,
+               XK_kana_TSU                                             = 0x04c2,
+               XK_kana_TU                                              = 0x04c2,
+               XK_kana_TE                                              = 0x04c3,
+               XK_kana_TO                                              = 0x04c4,
+               XK_kana_NA                                              = 0x04c5,
+               XK_kana_NI                                              = 0x04c6,
+               XK_kana_NU                                              = 0x04c7,
+               XK_kana_NE                                              = 0x04c8,
+               XK_kana_NO                                              = 0x04c9,
+               XK_kana_HA                                              = 0x04ca,
+               XK_kana_HI                                              = 0x04cb,
+               XK_kana_FU                                              = 0x04cc,
+               XK_kana_HU                                              = 0x04cc,
+               XK_kana_HE                                              = 0x04cd,
+               XK_kana_HO                                              = 0x04ce,
+               XK_kana_MA                                              = 0x04cf,
+               XK_kana_MI                                              = 0x04d0,
+               XK_kana_MU                                              = 0x04d1,
+               XK_kana_ME                                              = 0x04d2,
+               XK_kana_MO                                              = 0x04d3,
+               XK_kana_YA                                              = 0x04d4,
+               XK_kana_YU                                              = 0x04d5,
+               XK_kana_YO                                              = 0x04d6,
+               XK_kana_RA                                              = 0x04d7,
+               XK_kana_RI                                              = 0x04d8,
+               XK_kana_RU                                              = 0x04d9,
+               XK_kana_RE                                              = 0x04da,
+               XK_kana_RO                                              = 0x04db,
+               XK_kana_WA                                              = 0x04dc,
+               XK_kana_N                                               = 0x04dd,
+               XK_voicedsound                                  = 0x04de,
+               XK_semivoicedsound                              = 0x04df,
+               XK_kana_switch                                  = 0xff7e,
+               XK_Farsi_0                                              = 0x10006f0,
+               XK_Farsi_1                                              = 0x10006f1,
+               XK_Farsi_2                                              = 0x10006f2,
+               XK_Farsi_3                                              = 0x10006f3,
+               XK_Farsi_4                                              = 0x10006f4,
+               XK_Farsi_5                                              = 0x10006f5,
+               XK_Farsi_6                                              = 0x10006f6,
+               XK_Farsi_7                                              = 0x10006f7,
+               XK_Farsi_8                                              = 0x10006f8,
+               XK_Farsi_9                                              = 0x10006f9,
+               XK_Arabic_percent                               = 0x100066a,
+               XK_Arabic_superscript_alef              = 0x1000670,
+               XK_Arabic_tteh                                  = 0x1000679,
+               XK_Arabic_peh                                   = 0x100067e,
+               XK_Arabic_tcheh                                 = 0x1000686,
+               XK_Arabic_ddal                                  = 0x1000688,
+               XK_Arabic_rreh                                  = 0x1000691,
+               XK_Arabic_comma                                 = 0x05ac,
+               XK_Arabic_fullstop                              = 0x10006d4,
+               XK_Arabic_0                                             = 0x1000660,
+               XK_Arabic_1                                             = 0x1000661,
+               XK_Arabic_2                                             = 0x1000662,
+               XK_Arabic_3                                             = 0x1000663,
+               XK_Arabic_4                                             = 0x1000664,
+               XK_Arabic_5                                             = 0x1000665,
+               XK_Arabic_6                                             = 0x1000666,
+               XK_Arabic_7                                             = 0x1000667,
+               XK_Arabic_8                                             = 0x1000668,
+               XK_Arabic_9                                             = 0x1000669,
+               XK_Arabic_semicolon                             = 0x05bb,
+               XK_Arabic_question_mark                 = 0x05bf,
+               XK_Arabic_hamza                                 = 0x05c1,
+               XK_Arabic_maddaonalef                   = 0x05c2,
+               XK_Arabic_hamzaonalef                   = 0x05c3,
+               XK_Arabic_hamzaonwaw                    = 0x05c4,
+               XK_Arabic_hamzaunderalef                = 0x05c5,
+               XK_Arabic_hamzaonyeh                    = 0x05c6,
+               XK_Arabic_alef                                  = 0x05c7,
+               XK_Arabic_beh                                   = 0x05c8,
+               XK_Arabic_tehmarbuta                    = 0x05c9,
+               XK_Arabic_teh                                   = 0x05ca,
+               XK_Arabic_theh                                  = 0x05cb,
+               XK_Arabic_jeem                                  = 0x05cc,
+               XK_Arabic_hah                                   = 0x05cd,
+               XK_Arabic_khah                                  = 0x05ce,
+               XK_Arabic_dal                                   = 0x05cf,
+               XK_Arabic_thal                                  = 0x05d0,
+               XK_Arabic_ra                                    = 0x05d1,
+               XK_Arabic_zain                                  = 0x05d2,
+               XK_Arabic_seen                                  = 0x05d3,
+               XK_Arabic_sheen                                 = 0x05d4,
+               XK_Arabic_sad                                   = 0x05d5,
+               XK_Arabic_dad                                   = 0x05d6,
+               XK_Arabic_tah                                   = 0x05d7,
+               XK_Arabic_zah                                   = 0x05d8,
+               XK_Arabic_ain                                   = 0x05d9,
+               XK_Arabic_ghain                                 = 0x05da,
+               XK_Arabic_tatweel                               = 0x05e0,
+               XK_Arabic_feh                                   = 0x05e1,
+               XK_Arabic_qaf                                   = 0x05e2,
+               XK_Arabic_kaf                                   = 0x05e3,
+               XK_Arabic_lam                                   = 0x05e4,
+               XK_Arabic_meem                                  = 0x05e5,
+               XK_Arabic_noon                                  = 0x05e6,
+               XK_Arabic_ha                                    = 0x05e7,
+               XK_Arabic_heh                                   = 0x05e7,
+               XK_Arabic_waw                                   = 0x05e8,
+               XK_Arabic_alefmaksura                   = 0x05e9,
+               XK_Arabic_yeh                                   = 0x05ea,
+               XK_Arabic_fathatan                              = 0x05eb,
+               XK_Arabic_dammatan                              = 0x05ec,
+               XK_Arabic_kasratan                              = 0x05ed,
+               XK_Arabic_fatha                                 = 0x05ee,
+               XK_Arabic_damma                                 = 0x05ef,
+               XK_Arabic_kasra                                 = 0x05f0,
+               XK_Arabic_shadda                                = 0x05f1,
+               XK_Arabic_sukun                                 = 0x05f2,
+               XK_Arabic_madda_above                   = 0x1000653,
+               XK_Arabic_hamza_above                   = 0x1000654,
+               XK_Arabic_hamza_below                   = 0x1000655,
+               XK_Arabic_jeh                                   = 0x1000698,
+               XK_Arabic_veh                                   = 0x10006a4,
+               XK_Arabic_keheh                                 = 0x10006a9,
+               XK_Arabic_gaf                                   = 0x10006af,
+               XK_Arabic_noon_ghunna                   = 0x10006ba,
+               XK_Arabic_heh_doachashmee               = 0x10006be,
+               XK_Farsi_yeh                                    = 0x10006cc,
+               XK_Arabic_farsi_yeh                             = 0x10006cc,
+               XK_Arabic_yeh_baree                             = 0x10006d2,
+               XK_Arabic_heh_goal                              = 0x10006c1,
+               XK_Arabic_switch                                = 0xff7e,
+               XK_Cyrillic_GHE_bar                             = 0x1000492,
+               XK_Cyrillic_ghe_bar                             = 0x1000493,
+               XK_Cyrillic_ZHE_descender               = 0x1000496,
+               XK_Cyrillic_zhe_descender               = 0x1000497,
+               XK_Cyrillic_KA_descender                = 0x100049a,
+               XK_Cyrillic_ka_descender                = 0x100049b,
+               XK_Cyrillic_KA_vertstroke               = 0x100049c,
+               XK_Cyrillic_ka_vertstroke               = 0x100049d,
+               XK_Cyrillic_EN_descender                = 0x10004a2,
+               XK_Cyrillic_en_descender                = 0x10004a3,
+               XK_Cyrillic_U_straight                  = 0x10004ae,
+               XK_Cyrillic_u_straight                  = 0x10004af,
+               XK_Cyrillic_U_straight_bar              = 0x10004b0,
+               XK_Cyrillic_u_straight_bar              = 0x10004b1,
+               XK_Cyrillic_HA_descender                = 0x10004b2,
+               XK_Cyrillic_ha_descender                = 0x10004b3,
+               XK_Cyrillic_CHE_descender               = 0x10004b6,
+               XK_Cyrillic_che_descender               = 0x10004b7,
+               XK_Cyrillic_CHE_vertstroke              = 0x10004b8,
+               XK_Cyrillic_che_vertstroke              = 0x10004b9,
+               XK_Cyrillic_SHHA                                = 0x10004ba,
+               XK_Cyrillic_shha                                = 0x10004bb,
+               XK_Cyrillic_SCHWA                               = 0x10004d8,
+               XK_Cyrillic_schwa                               = 0x10004d9,
+               XK_Cyrillic_I_macron                    = 0x10004e2,
+               XK_Cyrillic_i_macron                    = 0x10004e3,
+               XK_Cyrillic_O_bar                               = 0x10004e8,
+               XK_Cyrillic_o_bar                               = 0x10004e9,
+               XK_Cyrillic_U_macron                    = 0x10004ee,
+               XK_Cyrillic_u_macron                    = 0x10004ef,
+               XK_Serbian_dje                                  = 0x06a1,
+               XK_Macedonia_gje                                = 0x06a2,
+               XK_Cyrillic_io                                  = 0x06a3,
+               XK_Ukrainian_ie                                 = 0x06a4,
+               XK_Ukranian_je                                  = 0x06a4,
+               XK_Macedonia_dse                                = 0x06a5,
+               XK_Ukrainian_i                                  = 0x06a6,
+               XK_Ukranian_i                                   = 0x06a6,
+               XK_Ukrainian_yi                                 = 0x06a7,
+               XK_Ukranian_yi                                  = 0x06a7,
+               XK_Cyrillic_je                                  = 0x06a8,
+               XK_Serbian_je                                   = 0x06a8,
+               XK_Cyrillic_lje                                 = 0x06a9,
+               XK_Serbian_lje                                  = 0x06a9,
+               XK_Cyrillic_nje                                 = 0x06aa,
+               XK_Serbian_nje                                  = 0x06aa,
+               XK_Serbian_tshe                                 = 0x06ab,
+               XK_Macedonia_kje                                = 0x06ac,
+               XK_Ukrainian_ghe_with_upturn    = 0x06ad,
+               XK_Byelorussian_shortu                  = 0x06ae,
+               XK_Cyrillic_dzhe                                = 0x06af,
+               XK_Serbian_dze                                  = 0x06af,
+               XK_numerosign                                   = 0x06b0,
+               XK_Serbian_DJE                                  = 0x06b1,
+               XK_Macedonia_GJE                                = 0x06b2,
+               XK_Cyrillic_IO                                  = 0x06b3,
+               XK_Ukrainian_IE                                 = 0x06b4,
+               XK_Ukranian_JE                                  = 0x06b4,
+               XK_Macedonia_DSE                                = 0x06b5,
+               XK_Ukrainian_I                                  = 0x06b6,
+               XK_Ukranian_I                                   = 0x06b6,
+               XK_Ukrainian_YI                                 = 0x06b7,
+               XK_Ukranian_YI                                  = 0x06b7,
+               XK_Cyrillic_JE                                  = 0x06b8,
+               XK_Serbian_JE                                   = 0x06b8,
+               XK_Cyrillic_LJE                                 = 0x06b9,
+               XK_Serbian_LJE                                  = 0x06b9,
+               XK_Cyrillic_NJE                                 = 0x06ba,
+               XK_Serbian_NJE                                  = 0x06ba,
+               XK_Serbian_TSHE                                 = 0x06bb,
+               XK_Macedonia_KJE                                = 0x06bc,
+               XK_Ukrainian_GHE_WITH_UPTURN    = 0x06bd,
+               XK_Byelorussian_SHORTU                  = 0x06be,
+               XK_Cyrillic_DZHE                                = 0x06bf,
+               XK_Serbian_DZE                                  = 0x06bf,
+               XK_Cyrillic_yu                                  = 0x06c0,
+               XK_Cyrillic_a                                   = 0x06c1,
+               XK_Cyrillic_be                                  = 0x06c2,
+               XK_Cyrillic_tse                                 = 0x06c3,
+               XK_Cyrillic_de                                  = 0x06c4,
+               XK_Cyrillic_ie                                  = 0x06c5,
+               XK_Cyrillic_ef                                  = 0x06c6,
+               XK_Cyrillic_ghe                                 = 0x06c7,
+               XK_Cyrillic_ha                                  = 0x06c8,
+               XK_Cyrillic_i                                   = 0x06c9,
+               XK_Cyrillic_shorti                              = 0x06ca,
+               XK_Cyrillic_ka                                  = 0x06cb,
+               XK_Cyrillic_el                                  = 0x06cc,
+               XK_Cyrillic_em                                  = 0x06cd,
+               XK_Cyrillic_en                                  = 0x06ce,
+               XK_Cyrillic_o                                   = 0x06cf,
+               XK_Cyrillic_pe                                  = 0x06d0,
+               XK_Cyrillic_ya                                  = 0x06d1,
+               XK_Cyrillic_er                                  = 0x06d2,
+               XK_Cyrillic_es                                  = 0x06d3,
+               XK_Cyrillic_te                                  = 0x06d4,
+               XK_Cyrillic_u                                   = 0x06d5,
+               XK_Cyrillic_zhe                                 = 0x06d6,
+               XK_Cyrillic_ve                                  = 0x06d7,
+               XK_Cyrillic_softsign                    = 0x06d8,
+               XK_Cyrillic_yeru                                = 0x06d9,
+               XK_Cyrillic_ze                                  = 0x06da,
+               XK_Cyrillic_sha                                 = 0x06db,
+               XK_Cyrillic_e                                   = 0x06dc,
+               XK_Cyrillic_shcha                               = 0x06dd,
+               XK_Cyrillic_che                                 = 0x06de,
+               XK_Cyrillic_hardsign                    = 0x06df,
+               XK_Cyrillic_YU                                  = 0x06e0,
+               XK_Cyrillic_A                                   = 0x06e1,
+               XK_Cyrillic_BE                                  = 0x06e2,
+               XK_Cyrillic_TSE                                 = 0x06e3,
+               XK_Cyrillic_DE                                  = 0x06e4,
+               XK_Cyrillic_IE                                  = 0x06e5,
+               XK_Cyrillic_EF                                  = 0x06e6,
+               XK_Cyrillic_GHE                                 = 0x06e7,
+               XK_Cyrillic_HA                                  = 0x06e8,
+               XK_Cyrillic_I                                   = 0x06e9,
+               XK_Cyrillic_SHORTI                              = 0x06ea,
+               XK_Cyrillic_KA                                  = 0x06eb,
+               XK_Cyrillic_EL                                  = 0x06ec,
+               XK_Cyrillic_EM                                  = 0x06ed,
+               XK_Cyrillic_EN                                  = 0x06ee,
+               XK_Cyrillic_O                                   = 0x06ef,
+               XK_Cyrillic_PE                                  = 0x06f0,
+               XK_Cyrillic_YA                                  = 0x06f1,
+               XK_Cyrillic_ER                                  = 0x06f2,
+               XK_Cyrillic_ES                                  = 0x06f3,
+               XK_Cyrillic_TE                                  = 0x06f4,
+               XK_Cyrillic_U                                   = 0x06f5,
+               XK_Cyrillic_ZHE                                 = 0x06f6,
+               XK_Cyrillic_VE                                  = 0x06f7,
+               XK_Cyrillic_SOFTSIGN                    = 0x06f8,
+               XK_Cyrillic_YERU                                = 0x06f9,
+               XK_Cyrillic_ZE                                  = 0x06fa,
+               XK_Cyrillic_SHA                                 = 0x06fb,
+               XK_Cyrillic_E                                   = 0x06fc,
+               XK_Cyrillic_SHCHA                               = 0x06fd,
+               XK_Cyrillic_CHE                                 = 0x06fe,
+               XK_Cyrillic_HARDSIGN                    = 0x06ff,
+               XK_Greek_ALPHAaccent                    = 0x07a1,
+               XK_Greek_EPSILONaccent                  = 0x07a2,
+               XK_Greek_ETAaccent                              = 0x07a3,
+               XK_Greek_IOTAaccent                             = 0x07a4,
+               XK_Greek_IOTAdieresis                   = 0x07a5,
+               XK_Greek_IOTAdiaeresis                  = 0x07a5,
+               XK_Greek_OMICRONaccent                  = 0x07a7,
+               XK_Greek_UPSILONaccent                  = 0x07a8,
+               XK_Greek_UPSILONdieresis                = 0x07a9,
+               XK_Greek_OMEGAaccent                    = 0x07ab,
+               XK_Greek_accentdieresis                 = 0x07ae,
+               XK_Greek_horizbar                               = 0x07af,
+               XK_Greek_alphaaccent                    = 0x07b1,
+               XK_Greek_epsilonaccent                  = 0x07b2,
+               XK_Greek_etaaccent                              = 0x07b3,
+               XK_Greek_iotaaccent                             = 0x07b4,
+               XK_Greek_iotadieresis                   = 0x07b5,
+               XK_Greek_iotaaccentdieresis             = 0x07b6,
+               XK_Greek_omicronaccent                  = 0x07b7,
+               XK_Greek_upsilonaccent                  = 0x07b8,
+               XK_Greek_upsilondieresis                = 0x07b9,
+               XK_Greek_upsilonaccentdieresis  = 0x07ba,
+               XK_Greek_omegaaccent                    = 0x07bb,
+               XK_Greek_ALPHA                                  = 0x07c1,
+               XK_Greek_BETA                                   = 0x07c2,
+               XK_Greek_GAMMA                                  = 0x07c3,
+               XK_Greek_DELTA                                  = 0x07c4,
+               XK_Greek_EPSILON                                = 0x07c5,
+               XK_Greek_ZETA                                   = 0x07c6,
+               XK_Greek_ETA                                    = 0x07c7,
+               XK_Greek_THETA                                  = 0x07c8,
+               XK_Greek_IOTA                                   = 0x07c9,
+               XK_Greek_KAPPA                                  = 0x07ca,
+               XK_Greek_LAMDA                                  = 0x07cb,
+               XK_Greek_LAMBDA                                 = 0x07cb,
+               XK_Greek_MU                                             = 0x07cc,
+               XK_Greek_NU                                             = 0x07cd,
+               XK_Greek_XI                                             = 0x07ce,
+               XK_Greek_OMICRON                                = 0x07cf,
+               XK_Greek_PI                                             = 0x07d0,
+               XK_Greek_RHO                                    = 0x07d1,
+               XK_Greek_SIGMA                                  = 0x07d2,
+               XK_Greek_TAU                                    = 0x07d4,
+               XK_Greek_UPSILON                                = 0x07d5,
+               XK_Greek_PHI                                    = 0x07d6,
+               XK_Greek_CHI                                    = 0x07d7,
+               XK_Greek_PSI                                    = 0x07d8,
+               XK_Greek_OMEGA                                  = 0x07d9,
+               XK_Greek_alpha                                  = 0x07e1,
+               XK_Greek_beta                                   = 0x07e2,
+               XK_Greek_gamma                                  = 0x07e3,
+               XK_Greek_delta                                  = 0x07e4,
+               XK_Greek_epsilon                                = 0x07e5,
+               XK_Greek_zeta                                   = 0x07e6,
+               XK_Greek_eta                                    = 0x07e7,
+               XK_Greek_theta                                  = 0x07e8,
+               XK_Greek_iota                                   = 0x07e9,
+               XK_Greek_kappa                                  = 0x07ea,
+               XK_Greek_lamda                                  = 0x07eb,
+               XK_Greek_lambda                                 = 0x07eb,
+               XK_Greek_mu                                             = 0x07ec,
+               XK_Greek_nu                                             = 0x07ed,
+               XK_Greek_xi                                             = 0x07ee,
+               XK_Greek_omicron                                = 0x07ef,
+               XK_Greek_pi                                             = 0x07f0,
+               XK_Greek_rho                                    = 0x07f1,
+               XK_Greek_sigma                                  = 0x07f2,
+               XK_Greek_finalsmallsigma                = 0x07f3,
+               XK_Greek_tau                                    = 0x07f4,
+               XK_Greek_upsilon                                = 0x07f5,
+               XK_Greek_phi                                    = 0x07f6,
+               XK_Greek_chi                                    = 0x07f7,
+               XK_Greek_psi                                    = 0x07f8,
+               XK_Greek_omega                                  = 0x07f9,
+               XK_Greek_switch                                 = 0xff7e,
+               XK_leftradical                                  = 0x08a1,
+               XK_topleftradical                               = 0x08a2,
+               XK_horizconnector                               = 0x08a3,
+               XK_topintegral                                  = 0x08a4,
+               XK_botintegral                                  = 0x08a5,
+               XK_vertconnector                                = 0x08a6,
+               XK_topleftsqbracket                             = 0x08a7,
+               XK_botleftsqbracket                             = 0x08a8,
+               XK_toprightsqbracket                    = 0x08a9,
+               XK_botrightsqbracket                    = 0x08aa,
+               XK_topleftparens                                = 0x08ab,
+               XK_botleftparens                                = 0x08ac,
+               XK_toprightparens                               = 0x08ad,
+               XK_botrightparens                               = 0x08ae,
+               XK_leftmiddlecurlybrace                 = 0x08af,
+               XK_rightmiddlecurlybrace                = 0x08b0,
+               XK_topleftsummation                             = 0x08b1,
+               XK_botleftsummation                             = 0x08b2,
+               XK_topvertsummationconnector    = 0x08b3,
+               XK_botvertsummationconnector    = 0x08b4,
+               XK_toprightsummation                    = 0x08b5,
+               XK_botrightsummation                    = 0x08b6,
+               XK_rightmiddlesummation                 = 0x08b7,
+               XK_lessthanequal                                = 0x08bc,
+               XK_notequal                                             = 0x08bd,
+               XK_greaterthanequal                             = 0x08be,
+               XK_integral                                             = 0x08bf,
+               XK_therefore                                    = 0x08c0,
+               XK_variation                                    = 0x08c1,
+               XK_infinity                                             = 0x08c2,
+               XK_nabla                                                = 0x08c5,
+               XK_approximate                                  = 0x08c8,
+               XK_similarequal                                 = 0x08c9,
+               XK_ifonlyif                                             = 0x08cd,
+               XK_implies                                              = 0x08ce,
+               XK_identical                                    = 0x08cf,
+               XK_radical                                              = 0x08d6,
+               XK_includedin                                   = 0x08da,
+               XK_includes                                             = 0x08db,
+               XK_intersection                                 = 0x08dc,
+               XK_union                                                = 0x08dd,
+               XK_logicaland                                   = 0x08de,
+               XK_logicalor                                    = 0x08df,
+               XK_partialderivative                    = 0x08ef,
+               XK_function                                             = 0x08f6,
+               XK_leftarrow                                    = 0x08fb,
+               XK_uparrow                                              = 0x08fc,
+               XK_rightarrow                                   = 0x08fd,
+               XK_downarrow                                    = 0x08fe,
+               XK_blank                                                = 0x09df,
+               XK_soliddiamond                                 = 0x09e0,
+               XK_checkerboard                                 = 0x09e1,
+               XK_ht                                                   = 0x09e2,
+               XK_ff                                                   = 0x09e3,
+               XK_cr                                                   = 0x09e4,
+               XK_lf                                                   = 0x09e5,
+               XK_nl                                                   = 0x09e8,
+               XK_vt                                                   = 0x09e9,
+               XK_lowrightcorner                               = 0x09ea,
+               XK_uprightcorner                                = 0x09eb,
+               XK_upleftcorner                                 = 0x09ec,
+               XK_lowleftcorner                                = 0x09ed,
+               XK_crossinglines                                = 0x09ee,
+               XK_horizlinescan1                               = 0x09ef,
+               XK_horizlinescan3                               = 0x09f0,
+               XK_horizlinescan5                               = 0x09f1,
+               XK_horizlinescan7                               = 0x09f2,
+               XK_horizlinescan9                               = 0x09f3,
+               XK_leftt                                                = 0x09f4,
+               XK_rightt                                               = 0x09f5,
+               XK_bott                                                 = 0x09f6,
+               XK_topt                                                 = 0x09f7,
+               XK_vertbar                                              = 0x09f8,
+               XK_emspace                                              = 0x0aa1,
+               XK_enspace                                              = 0x0aa2,
+               XK_em3space                                             = 0x0aa3,
+               XK_em4space                                             = 0x0aa4,
+               XK_digitspace                                   = 0x0aa5,
+               XK_punctspace                                   = 0x0aa6,
+               XK_thinspace                                    = 0x0aa7,
+               XK_hairspace                                    = 0x0aa8,
+               XK_emdash                                               = 0x0aa9,
+               XK_endash                                               = 0x0aaa,
+               XK_signifblank                                  = 0x0aac,
+               XK_ellipsis                                             = 0x0aae,
+               XK_doubbaselinedot                              = 0x0aaf,
+               XK_onethird                                             = 0x0ab0,
+               XK_twothirds                                    = 0x0ab1,
+               XK_onefifth                                             = 0x0ab2,
+               XK_twofifths                                    = 0x0ab3,
+               XK_threefifths                                  = 0x0ab4,
+               XK_fourfifths                                   = 0x0ab5,
+               XK_onesixth                                             = 0x0ab6,
+               XK_fivesixths                                   = 0x0ab7,
+               XK_careof                                               = 0x0ab8,
+               XK_figdash                                              = 0x0abb,
+               XK_leftanglebracket                             = 0x0abc,
+               XK_decimalpoint                                 = 0x0abd,
+               XK_rightanglebracket                    = 0x0abe,
+               XK_marker                                               = 0x0abf,
+               XK_oneeighth                                    = 0x0ac3,
+               XK_threeeighths                                 = 0x0ac4,
+               XK_fiveeighths                                  = 0x0ac5,
+               XK_seveneighths                                 = 0x0ac6,
+               XK_trademark                                    = 0x0ac9,
+               XK_signaturemark                                = 0x0aca,
+               XK_trademarkincircle                    = 0x0acb,
+               XK_leftopentriangle                             = 0x0acc,
+               XK_rightopentriangle                    = 0x0acd,
+               XK_emopencircle                                 = 0x0ace,
+               XK_emopenrectangle                              = 0x0acf,
+               XK_leftsinglequotemark                  = 0x0ad0,
+               XK_rightsinglequotemark                 = 0x0ad1,
+               XK_leftdoublequotemark                  = 0x0ad2,
+               XK_rightdoublequotemark                 = 0x0ad3,
+               XK_prescription                                 = 0x0ad4,
+               XK_permille                                             = 0x0ad5,
+               XK_minutes                                              = 0x0ad6,
+               XK_seconds                                              = 0x0ad7,
+               XK_latincross                                   = 0x0ad9,
+               XK_hexagram                                             = 0x0ada,
+               XK_filledrectbullet                             = 0x0adb,
+               XK_filledlefttribullet                  = 0x0adc,
+               XK_filledrighttribullet                 = 0x0add,
+               XK_emfilledcircle                               = 0x0ade,
+               XK_emfilledrect                                 = 0x0adf,
+               XK_enopencircbullet                             = 0x0ae0,
+               XK_enopensquarebullet                   = 0x0ae1,
+               XK_openrectbullet                               = 0x0ae2,
+               XK_opentribulletup                              = 0x0ae3,
+               XK_opentribulletdown                    = 0x0ae4,
+               XK_openstar                                             = 0x0ae5,
+               XK_enfilledcircbullet                   = 0x0ae6,
+               XK_enfilledsqbullet                             = 0x0ae7,
+               XK_filledtribulletup                    = 0x0ae8,
+               XK_filledtribulletdown                  = 0x0ae9,
+               XK_leftpointer                                  = 0x0aea,
+               XK_rightpointer                                 = 0x0aeb,
+               XK_club                                                 = 0x0aec,
+               XK_diamond                                              = 0x0aed,
+               XK_heart                                                = 0x0aee,
+               XK_maltesecross                                 = 0x0af0,
+               XK_dagger                                               = 0x0af1,
+               XK_doubledagger                                 = 0x0af2,
+               XK_checkmark                                    = 0x0af3,
+               XK_ballotcross                                  = 0x0af4,
+               XK_musicalsharp                                 = 0x0af5,
+               XK_musicalflat                                  = 0x0af6,
+               XK_malesymbol                                   = 0x0af7,
+               XK_femalesymbol                                 = 0x0af8,
+               XK_telephone                                    = 0x0af9,
+               XK_telephonerecorder                    = 0x0afa,
+               XK_phonographcopyright                  = 0x0afb,
+               XK_caret                                                = 0x0afc,
+               XK_singlelowquotemark                   = 0x0afd,
+               XK_doublelowquotemark                   = 0x0afe,
+               XK_cursor                                               = 0x0aff,
+               XK_leftcaret                                    = 0x0ba3,
+               XK_rightcaret                                   = 0x0ba6,
+               XK_downcaret                                    = 0x0ba8,
+               XK_upcaret                                              = 0x0ba9,
+               XK_overbar                                              = 0x0bc0,
+               XK_downtack                                             = 0x0bc2,
+               XK_upshoe                                               = 0x0bc3,
+               XK_downstile                                    = 0x0bc4,
+               XK_underbar                                             = 0x0bc6,
+               XK_jot                                                  = 0x0bca,
+               XK_quad                                                 = 0x0bcc,
+               XK_uptack                                               = 0x0bce,
+               XK_circle                                               = 0x0bcf,
+               XK_upstile                                              = 0x0bd3,
+               XK_downshoe                                             = 0x0bd6,
+               XK_rightshoe                                    = 0x0bd8,
+               XK_leftshoe                                             = 0x0bda,
+               XK_lefttack                                             = 0x0bdc,
+               XK_righttack                                    = 0x0bfc,
+               XK_hebrew_doublelowline                 = 0x0cdf,
+               XK_hebrew_aleph                                 = 0x0ce0,
+               XK_hebrew_bet                                   = 0x0ce1,
+               XK_hebrew_beth                                  = 0x0ce1,
+               XK_hebrew_gimel                                 = 0x0ce2,
+               XK_hebrew_gimmel                                = 0x0ce2,
+               XK_hebrew_dalet                                 = 0x0ce3,
+               XK_hebrew_daleth                                = 0x0ce3,
+               XK_hebrew_he                                    = 0x0ce4,
+               XK_hebrew_waw                                   = 0x0ce5,
+               XK_hebrew_zain                                  = 0x0ce6,
+               XK_hebrew_zayin                                 = 0x0ce6,
+               XK_hebrew_chet                                  = 0x0ce7,
+               XK_hebrew_het                                   = 0x0ce7,
+               XK_hebrew_tet                                   = 0x0ce8,
+               XK_hebrew_teth                                  = 0x0ce8,
+               XK_hebrew_yod                                   = 0x0ce9,
+               XK_hebrew_finalkaph                             = 0x0cea,
+               XK_hebrew_kaph                                  = 0x0ceb,
+               XK_hebrew_lamed                                 = 0x0cec,
+               XK_hebrew_finalmem                              = 0x0ced,
+               XK_hebrew_mem                                   = 0x0cee,
+               XK_hebrew_finalnun                              = 0x0cef,
+               XK_hebrew_nun                                   = 0x0cf0,
+               XK_hebrew_samech                                = 0x0cf1,
+               XK_hebrew_samekh                                = 0x0cf1,
+               XK_hebrew_ayin                                  = 0x0cf2,
+               XK_hebrew_finalpe                               = 0x0cf3,
+               XK_hebrew_pe                                    = 0x0cf4,
+               XK_hebrew_finalzade                             = 0x0cf5,
+               XK_hebrew_finalzadi                             = 0x0cf5,
+               XK_hebrew_zade                                  = 0x0cf6,
+               XK_hebrew_zadi                                  = 0x0cf6,
+               XK_hebrew_qoph                                  = 0x0cf7,
+               XK_hebrew_kuf                                   = 0x0cf7,
+               XK_hebrew_resh                                  = 0x0cf8,
+               XK_hebrew_shin                                  = 0x0cf9,
+               XK_hebrew_taw                                   = 0x0cfa,
+               XK_hebrew_taf                                   = 0x0cfa,
+               XK_Hebrew_switch                                = 0xff7e,
+               XK_Thai_kokai                                   = 0x0da1,
+               XK_Thai_khokhai                                 = 0x0da2,
+               XK_Thai_khokhuat                                = 0x0da3,
+               XK_Thai_khokhwai                                = 0x0da4,
+               XK_Thai_khokhon                                 = 0x0da5,
+               XK_Thai_khorakhang                              = 0x0da6,
+               XK_Thai_ngongu                                  = 0x0da7,
+               XK_Thai_chochan                                 = 0x0da8,
+               XK_Thai_choching                                = 0x0da9,
+               XK_Thai_chochang                                = 0x0daa,
+               XK_Thai_soso                                    = 0x0dab,
+               XK_Thai_chochoe                                 = 0x0dac,
+               XK_Thai_yoying                                  = 0x0dad,
+               XK_Thai_dochada                                 = 0x0dae,
+               XK_Thai_topatak                                 = 0x0daf,
+               XK_Thai_thothan                                 = 0x0db0,
+               XK_Thai_thonangmontho                   = 0x0db1,
+               XK_Thai_thophuthao                              = 0x0db2,
+               XK_Thai_nonen                                   = 0x0db3,
+               XK_Thai_dodek                                   = 0x0db4,
+               XK_Thai_totao                                   = 0x0db5,
+               XK_Thai_thothung                                = 0x0db6,
+               XK_Thai_thothahan                               = 0x0db7,
+               XK_Thai_thothong                                = 0x0db8,
+               XK_Thai_nonu                                    = 0x0db9,
+               XK_Thai_bobaimai                                = 0x0dba,
+               XK_Thai_popla                                   = 0x0dbb,
+               XK_Thai_phophung                                = 0x0dbc,
+               XK_Thai_fofa                                    = 0x0dbd,
+               XK_Thai_phophan                                 = 0x0dbe,
+               XK_Thai_fofan                                   = 0x0dbf,
+               XK_Thai_phosamphao                              = 0x0dc0,
+               XK_Thai_moma                                    = 0x0dc1,
+               XK_Thai_yoyak                                   = 0x0dc2,
+               XK_Thai_rorua                                   = 0x0dc3,
+               XK_Thai_ru                                              = 0x0dc4,
+               XK_Thai_loling                                  = 0x0dc5,
+               XK_Thai_lu                                              = 0x0dc6,
+               XK_Thai_wowaen                                  = 0x0dc7,
+               XK_Thai_sosala                                  = 0x0dc8,
+               XK_Thai_sorusi                                  = 0x0dc9,
+               XK_Thai_sosua                                   = 0x0dca,
+               XK_Thai_hohip                                   = 0x0dcb,
+               XK_Thai_lochula                                 = 0x0dcc,
+               XK_Thai_oang                                    = 0x0dcd,
+               XK_Thai_honokhuk                                = 0x0dce,
+               XK_Thai_paiyannoi                               = 0x0dcf,
+               XK_Thai_saraa                                   = 0x0dd0,
+               XK_Thai_maihanakat                              = 0x0dd1,
+               XK_Thai_saraaa                                  = 0x0dd2,
+               XK_Thai_saraam                                  = 0x0dd3,
+               XK_Thai_sarai                                   = 0x0dd4,
+               XK_Thai_saraii                                  = 0x0dd5,
+               XK_Thai_saraue                                  = 0x0dd6,
+               XK_Thai_sarauee                                 = 0x0dd7,
+               XK_Thai_sarau                                   = 0x0dd8,
+               XK_Thai_sarauu                                  = 0x0dd9,
+               XK_Thai_phinthu                                 = 0x0dda,
+               XK_Thai_maihanakat_maitho               = 0x0dde,
+               XK_Thai_baht                                    = 0x0ddf,
+               XK_Thai_sarae                                   = 0x0de0,
+               XK_Thai_saraae                                  = 0x0de1,
+               XK_Thai_sarao                                   = 0x0de2,
+               XK_Thai_saraaimaimuan                   = 0x0de3,
+               XK_Thai_saraaimaimalai                  = 0x0de4,
+               XK_Thai_lakkhangyao                             = 0x0de5,
+               XK_Thai_maiyamok                                = 0x0de6,
+               XK_Thai_maitaikhu                               = 0x0de7,
+               XK_Thai_maiek                                   = 0x0de8,
+               XK_Thai_maitho                                  = 0x0de9,
+               XK_Thai_maitri                                  = 0x0dea,
+               XK_Thai_maichattawa                             = 0x0deb,
+               XK_Thai_thanthakhat                             = 0x0dec,
+               XK_Thai_nikhahit                                = 0x0ded,
+               XK_Thai_leksun                                  = 0x0df0,
+               XK_Thai_leknung                                 = 0x0df1,
+               XK_Thai_leksong                                 = 0x0df2,
+               XK_Thai_leksam                                  = 0x0df3,
+               XK_Thai_leksi                                   = 0x0df4,
+               XK_Thai_lekha                                   = 0x0df5,
+               XK_Thai_lekhok                                  = 0x0df6,
+               XK_Thai_lekchet                                 = 0x0df7,
+               XK_Thai_lekpaet                                 = 0x0df8,
+               XK_Thai_lekkao                                  = 0x0df9,
+               XK_Hangul                                               = 0xff31,
+               XK_Hangul_Start                                 = 0xff32,
+               XK_Hangul_End                                   = 0xff33,
+               XK_Hangul_Hanja                                 = 0xff34,
+               XK_Hangul_Jamo                                  = 0xff35,
+               XK_Hangul_Romaja                                = 0xff36,
+               XK_Hangul_Codeinput                             = 0xff37,
+               XK_Hangul_Jeonja                                = 0xff38,
+               XK_Hangul_Banja                                 = 0xff39,
+               XK_Hangul_PreHanja                              = 0xff3a,
+               XK_Hangul_PostHanja                             = 0xff3b,
+               XK_Hangul_SingleCandidate               = 0xff3c,
+               XK_Hangul_MultipleCandidate             = 0xff3d,
+               XK_Hangul_PreviousCandidate             = 0xff3e,
+               XK_Hangul_Special                               = 0xff3f,
+               XK_Hangul_switch                                = 0xff7e,
+               XK_Hangul_Kiyeog                                = 0x0ea1,
+               XK_Hangul_SsangKiyeog                   = 0x0ea2,
+               XK_Hangul_KiyeogSios                    = 0x0ea3,
+               XK_Hangul_Nieun                                 = 0x0ea4,
+               XK_Hangul_NieunJieuj                    = 0x0ea5,
+               XK_Hangul_NieunHieuh                    = 0x0ea6,
+               XK_Hangul_Dikeud                                = 0x0ea7,
+               XK_Hangul_SsangDikeud                   = 0x0ea8,
+               XK_Hangul_Rieul                                 = 0x0ea9,
+               XK_Hangul_RieulKiyeog                   = 0x0eaa,
+               XK_Hangul_RieulMieum                    = 0x0eab,
+               XK_Hangul_RieulPieub                    = 0x0eac,
+               XK_Hangul_RieulSios                             = 0x0ead,
+               XK_Hangul_RieulTieut                    = 0x0eae,
+               XK_Hangul_RieulPhieuf                   = 0x0eaf,
+               XK_Hangul_RieulHieuh                    = 0x0eb0,
+               XK_Hangul_Mieum                                 = 0x0eb1,
+               XK_Hangul_Pieub                                 = 0x0eb2,
+               XK_Hangul_SsangPieub                    = 0x0eb3,
+               XK_Hangul_PieubSios                             = 0x0eb4,
+               XK_Hangul_Sios                                  = 0x0eb5,
+               XK_Hangul_SsangSios                             = 0x0eb6,
+               XK_Hangul_Ieung                                 = 0x0eb7,
+               XK_Hangul_Jieuj                                 = 0x0eb8,
+               XK_Hangul_SsangJieuj                    = 0x0eb9,
+               XK_Hangul_Cieuc                                 = 0x0eba,
+               XK_Hangul_Khieuq                                = 0x0ebb,
+               XK_Hangul_Tieut                                 = 0x0ebc,
+               XK_Hangul_Phieuf                                = 0x0ebd,
+               XK_Hangul_Hieuh                                 = 0x0ebe,
+               XK_Hangul_A                                             = 0x0ebf,
+               XK_Hangul_AE                                    = 0x0ec0,
+               XK_Hangul_YA                                    = 0x0ec1,
+               XK_Hangul_YAE                                   = 0x0ec2,
+               XK_Hangul_EO                                    = 0x0ec3,
+               XK_Hangul_E                                             = 0x0ec4,
+               XK_Hangul_YEO                                   = 0x0ec5,
+               XK_Hangul_YE                                    = 0x0ec6,
+               XK_Hangul_O                                             = 0x0ec7,
+               XK_Hangul_WA                                    = 0x0ec8,
+               XK_Hangul_WAE                                   = 0x0ec9,
+               XK_Hangul_OE                                    = 0x0eca,
+               XK_Hangul_YO                                    = 0x0ecb,
+               XK_Hangul_U                                             = 0x0ecc,
+               XK_Hangul_WEO                                   = 0x0ecd,
+               XK_Hangul_WE                                    = 0x0ece,
+               XK_Hangul_WI                                    = 0x0ecf,
+               XK_Hangul_YU                                    = 0x0ed0,
+               XK_Hangul_EU                                    = 0x0ed1,
+               XK_Hangul_YI                                    = 0x0ed2,
+               XK_Hangul_I                                             = 0x0ed3,
+               XK_Hangul_J_Kiyeog                              = 0x0ed4,
+               XK_Hangul_J_SsangKiyeog                 = 0x0ed5,
+               XK_Hangul_J_KiyeogSios                  = 0x0ed6,
+               XK_Hangul_J_Nieun                               = 0x0ed7,
+               XK_Hangul_J_NieunJieuj                  = 0x0ed8,
+               XK_Hangul_J_NieunHieuh                  = 0x0ed9,
+               XK_Hangul_J_Dikeud                              = 0x0eda,
+               XK_Hangul_J_Rieul                               = 0x0edb,
+               XK_Hangul_J_RieulKiyeog                 = 0x0edc,
+               XK_Hangul_J_RieulMieum                  = 0x0edd,
+               XK_Hangul_J_RieulPieub                  = 0x0ede,
+               XK_Hangul_J_RieulSios                   = 0x0edf,
+               XK_Hangul_J_RieulTieut                  = 0x0ee0,
+               XK_Hangul_J_RieulPhieuf                 = 0x0ee1,
+               XK_Hangul_J_RieulHieuh                  = 0x0ee2,
+               XK_Hangul_J_Mieum                               = 0x0ee3,
+               XK_Hangul_J_Pieub                               = 0x0ee4,
+               XK_Hangul_J_PieubSios                   = 0x0ee5,
+               XK_Hangul_J_Sios                                = 0x0ee6,
+               XK_Hangul_J_SsangSios                   = 0x0ee7,
+               XK_Hangul_J_Ieung                               = 0x0ee8,
+               XK_Hangul_J_Jieuj                               = 0x0ee9,
+               XK_Hangul_J_Cieuc                               = 0x0eea,
+               XK_Hangul_J_Khieuq                              = 0x0eeb,
+               XK_Hangul_J_Tieut                               = 0x0eec,
+               XK_Hangul_J_Phieuf                              = 0x0eed,
+               XK_Hangul_J_Hieuh                               = 0x0eee,
+               XK_Hangul_RieulYeorinHieuh              = 0x0eef,
+               XK_Hangul_SunkyeongeumMieum             = 0x0ef0,
+               XK_Hangul_SunkyeongeumPieub             = 0x0ef1,
+               XK_Hangul_PanSios                               = 0x0ef2,
+               XK_Hangul_KkogjiDalrinIeung             = 0x0ef3,
+               XK_Hangul_SunkyeongeumPhieuf    = 0x0ef4,
+               XK_Hangul_YeorinHieuh                   = 0x0ef5,
+               XK_Hangul_AraeA                                 = 0x0ef6,
+               XK_Hangul_AraeAE                                = 0x0ef7,
+               XK_Hangul_J_PanSios                             = 0x0ef8,
+               XK_Hangul_J_KkogjiDalrinIeung   = 0x0ef9,
+               XK_Hangul_J_YeorinHieuh                 = 0x0efa,
+               XK_Korean_Won                                   = 0x0eff,
+               XK_Armenian_ligature_ew                 = 0x1000587,
+               XK_Armenian_full_stop                   = 0x1000589,
+               XK_Armenian_verjaket                    = 0x1000589,
+               XK_Armenian_separation_mark             = 0x100055d,
+               XK_Armenian_but                                 = 0x100055d,
+               XK_Armenian_hyphen                              = 0x100058a,
+               XK_Armenian_yentamna                    = 0x100058a,
+               XK_Armenian_exclam                              = 0x100055c,
+               XK_Armenian_amanak                              = 0x100055c,
+               XK_Armenian_accent                              = 0x100055b,
+               XK_Armenian_shesht                              = 0x100055b,
+               XK_Armenian_question                    = 0x100055e,
+               XK_Armenian_paruyk                              = 0x100055e,
+               XK_Armenian_AYB                                 = 0x1000531,
+               XK_Armenian_ayb                                 = 0x1000561,
+               XK_Armenian_BEN                                 = 0x1000532,
+               XK_Armenian_ben                                 = 0x1000562,
+               XK_Armenian_GIM                                 = 0x1000533,
+               XK_Armenian_gim                                 = 0x1000563,
+               XK_Armenian_DA                                  = 0x1000534,
+               XK_Armenian_da                                  = 0x1000564,
+               XK_Armenian_YECH                                = 0x1000535,
+               XK_Armenian_yech                                = 0x1000565,
+               XK_Armenian_ZA                                  = 0x1000536,
+               XK_Armenian_za                                  = 0x1000566,
+               XK_Armenian_E                                   = 0x1000537,
+               XK_Armenian_e                                   = 0x1000567,
+               XK_Armenian_AT                                  = 0x1000538,
+               XK_Armenian_at                                  = 0x1000568,
+               XK_Armenian_TO                                  = 0x1000539,
+               XK_Armenian_to                                  = 0x1000569,
+               XK_Armenian_ZHE                                 = 0x100053a,
+               XK_Armenian_zhe                                 = 0x100056a,
+               XK_Armenian_INI                                 = 0x100053b,
+               XK_Armenian_ini                                 = 0x100056b,
+               XK_Armenian_LYUN                                = 0x100053c,
+               XK_Armenian_lyun                                = 0x100056c,
+               XK_Armenian_KHE                                 = 0x100053d,
+               XK_Armenian_khe                                 = 0x100056d,
+               XK_Armenian_TSA                                 = 0x100053e,
+               XK_Armenian_tsa                                 = 0x100056e,
+               XK_Armenian_KEN                                 = 0x100053f,
+               XK_Armenian_ken                                 = 0x100056f,
+               XK_Armenian_HO                                  = 0x1000540,
+               XK_Armenian_ho                                  = 0x1000570,
+               XK_Armenian_DZA                                 = 0x1000541,
+               XK_Armenian_dza                                 = 0x1000571,
+               XK_Armenian_GHAT                                = 0x1000542,
+               XK_Armenian_ghat                                = 0x1000572,
+               XK_Armenian_TCHE                                = 0x1000543,
+               XK_Armenian_tche                                = 0x1000573,
+               XK_Armenian_MEN                                 = 0x1000544,
+               XK_Armenian_men                                 = 0x1000574,
+               XK_Armenian_HI                                  = 0x1000545,
+               XK_Armenian_hi                                  = 0x1000575,
+               XK_Armenian_NU                                  = 0x1000546,
+               XK_Armenian_nu                                  = 0x1000576,
+               XK_Armenian_SHA                                 = 0x1000547,
+               XK_Armenian_sha                                 = 0x1000577,
+               XK_Armenian_VO                                  = 0x1000548,
+               XK_Armenian_vo                                  = 0x1000578,
+               XK_Armenian_CHA                                 = 0x1000549,
+               XK_Armenian_cha                                 = 0x1000579,
+               XK_Armenian_PE                                  = 0x100054a,
+               XK_Armenian_pe                                  = 0x100057a,
+               XK_Armenian_JE                                  = 0x100054b,
+               XK_Armenian_je                                  = 0x100057b,
+               XK_Armenian_RA                                  = 0x100054c,
+               XK_Armenian_ra                                  = 0x100057c,
+               XK_Armenian_SE                                  = 0x100054d,
+               XK_Armenian_se                                  = 0x100057d,
+               XK_Armenian_VEV                                 = 0x100054e,
+               XK_Armenian_vev                                 = 0x100057e,
+               XK_Armenian_TYUN                                = 0x100054f,
+               XK_Armenian_tyun                                = 0x100057f,
+               XK_Armenian_RE                                  = 0x1000550,
+               XK_Armenian_re                                  = 0x1000580,
+               XK_Armenian_TSO                                 = 0x1000551,
+               XK_Armenian_tso                                 = 0x1000581,
+               XK_Armenian_VYUN                                = 0x1000552,
+               XK_Armenian_vyun                                = 0x1000582,
+               XK_Armenian_PYUR                                = 0x1000553,
+               XK_Armenian_pyur                                = 0x1000583,
+               XK_Armenian_KE                                  = 0x1000554,
+               XK_Armenian_ke                                  = 0x1000584,
+               XK_Armenian_O                                   = 0x1000555,
+               XK_Armenian_o                                   = 0x1000585,
+               XK_Armenian_FE                                  = 0x1000556,
+               XK_Armenian_fe                                  = 0x1000586,
+               XK_Armenian_apostrophe                  = 0x100055a,
+               XK_Georgian_an                                  = 0x10010d0,
+               XK_Georgian_ban                                 = 0x10010d1,
+               XK_Georgian_gan                                 = 0x10010d2,
+               XK_Georgian_don                                 = 0x10010d3,
+               XK_Georgian_en                                  = 0x10010d4,
+               XK_Georgian_vin                                 = 0x10010d5,
+               XK_Georgian_zen                                 = 0x10010d6,
+               XK_Georgian_tan                                 = 0x10010d7,
+               XK_Georgian_in                                  = 0x10010d8,
+               XK_Georgian_kan                                 = 0x10010d9,
+               XK_Georgian_las                                 = 0x10010da,
+               XK_Georgian_man                                 = 0x10010db,
+               XK_Georgian_nar                                 = 0x10010dc,
+               XK_Georgian_on                                  = 0x10010dd,
+               XK_Georgian_par                                 = 0x10010de,
+               XK_Georgian_zhar                                = 0x10010df,
+               XK_Georgian_rae                                 = 0x10010e0,
+               XK_Georgian_san                                 = 0x10010e1,
+               XK_Georgian_tar                                 = 0x10010e2,
+               XK_Georgian_un                                  = 0x10010e3,
+               XK_Georgian_phar                                = 0x10010e4,
+               XK_Georgian_khar                                = 0x10010e5,
+               XK_Georgian_ghan                                = 0x10010e6,
+               XK_Georgian_qar                                 = 0x10010e7,
+               XK_Georgian_shin                                = 0x10010e8,
+               XK_Georgian_chin                                = 0x10010e9,
+               XK_Georgian_can                                 = 0x10010ea,
+               XK_Georgian_jil                                 = 0x10010eb,
+               XK_Georgian_cil                                 = 0x10010ec,
+               XK_Georgian_char                                = 0x10010ed,
+               XK_Georgian_xan                                 = 0x10010ee,
+               XK_Georgian_jhan                                = 0x10010ef,
+               XK_Georgian_hae                                 = 0x10010f0,
+               XK_Georgian_he                                  = 0x10010f1,
+               XK_Georgian_hie                                 = 0x10010f2,
+               XK_Georgian_we                                  = 0x10010f3,
+               XK_Georgian_har                                 = 0x10010f4,
+               XK_Georgian_hoe                                 = 0x10010f5,
+               XK_Georgian_fi                                  = 0x10010f6,
+               XK_Xabovedot                                    = 0x1001e8a,
+               XK_Ibreve                                               = 0x100012c,
+               XK_Zstroke                                              = 0x10001b5,
+               XK_Gcaron                                               = 0x10001e6,
+               XK_Ocaron                                               = 0x10001d1,
+               XK_Obarred                                              = 0x100019f,
+               XK_xabovedot                                    = 0x1001e8b,
+               XK_ibreve                                               = 0x100012d,
+               XK_zstroke                                              = 0x10001b6,
+               XK_gcaron                                               = 0x10001e7,
+               XK_ocaron                                               = 0x10001d2,
+               XK_obarred                                              = 0x1000275,
+               XK_SCHWA                                                = 0x100018f,
+               XK_schwa                                                = 0x1000259,
+               XK_EZH                                                  = 0x10001b7,
+               XK_ezh                                                  = 0x1000292,
+               XK_Lbelowdot                                    = 0x1001e36,
+               XK_lbelowdot                                    = 0x1001e37,
+               XK_Abelowdot                                    = 0x1001ea0,
+               XK_abelowdot                                    = 0x1001ea1,
+               XK_Ahook                                                = 0x1001ea2,
+               XK_ahook                                                = 0x1001ea3,
+               XK_Acircumflexacute                             = 0x1001ea4,
+               XK_acircumflexacute                             = 0x1001ea5,
+               XK_Acircumflexgrave                             = 0x1001ea6,
+               XK_acircumflexgrave                             = 0x1001ea7,
+               XK_Acircumflexhook                              = 0x1001ea8,
+               XK_acircumflexhook                              = 0x1001ea9,
+               XK_Acircumflextilde                             = 0x1001eaa,
+               XK_acircumflextilde                             = 0x1001eab,
+               XK_Acircumflexbelowdot                  = 0x1001eac,
+               XK_acircumflexbelowdot                  = 0x1001ead,
+               XK_Abreveacute                                  = 0x1001eae,
+               XK_abreveacute                                  = 0x1001eaf,
+               XK_Abrevegrave                                  = 0x1001eb0,
+               XK_abrevegrave                                  = 0x1001eb1,
+               XK_Abrevehook                                   = 0x1001eb2,
+               XK_abrevehook                                   = 0x1001eb3,
+               XK_Abrevetilde                                  = 0x1001eb4,
+               XK_abrevetilde                                  = 0x1001eb5,
+               XK_Abrevebelowdot                               = 0x1001eb6,
+               XK_abrevebelowdot                               = 0x1001eb7,
+               XK_Ebelowdot                                    = 0x1001eb8,
+               XK_ebelowdot                                    = 0x1001eb9,
+               XK_Ehook                                                = 0x1001eba,
+               XK_ehook                                                = 0x1001ebb,
+               XK_Etilde                                               = 0x1001ebc,
+               XK_etilde                                               = 0x1001ebd,
+               XK_Ecircumflexacute                             = 0x1001ebe,
+               XK_ecircumflexacute                             = 0x1001ebf,
+               XK_Ecircumflexgrave                             = 0x1001ec0,
+               XK_ecircumflexgrave                             = 0x1001ec1,
+               XK_Ecircumflexhook                              = 0x1001ec2,
+               XK_ecircumflexhook                              = 0x1001ec3,
+               XK_Ecircumflextilde                             = 0x1001ec4,
+               XK_ecircumflextilde                             = 0x1001ec5,
+               XK_Ecircumflexbelowdot                  = 0x1001ec6,
+               XK_ecircumflexbelowdot                  = 0x1001ec7,
+               XK_Ihook                                                = 0x1001ec8,
+               XK_ihook                                                = 0x1001ec9,
+               XK_Ibelowdot                                    = 0x1001eca,
+               XK_ibelowdot                                    = 0x1001ecb,
+               XK_Obelowdot                                    = 0x1001ecc,
+               XK_obelowdot                                    = 0x1001ecd,
+               XK_Ohook                                                = 0x1001ece,
+               XK_ohook                                                = 0x1001ecf,
+               XK_Ocircumflexacute                             = 0x1001ed0,
+               XK_ocircumflexacute                             = 0x1001ed1,
+               XK_Ocircumflexgrave                             = 0x1001ed2,
+               XK_ocircumflexgrave                             = 0x1001ed3,
+               XK_Ocircumflexhook                              = 0x1001ed4,
+               XK_ocircumflexhook                              = 0x1001ed5,
+               XK_Ocircumflextilde                             = 0x1001ed6,
+               XK_ocircumflextilde                             = 0x1001ed7,
+               XK_Ocircumflexbelowdot                  = 0x1001ed8,
+               XK_ocircumflexbelowdot                  = 0x1001ed9,
+               XK_Ohornacute                                   = 0x1001eda,
+               XK_ohornacute                                   = 0x1001edb,
+               XK_Ohorngrave                                   = 0x1001edc,
+               XK_ohorngrave                                   = 0x1001edd,
+               XK_Ohornhook                                    = 0x1001ede,
+               XK_ohornhook                                    = 0x1001edf,
+               XK_Ohorntilde                                   = 0x1001ee0,
+               XK_ohorntilde                                   = 0x1001ee1,
+               XK_Ohornbelowdot                                = 0x1001ee2,
+               XK_ohornbelowdot                                = 0x1001ee3,
+               XK_Ubelowdot                                    = 0x1001ee4,
+               XK_ubelowdot                                    = 0x1001ee5,
+               XK_Uhook                                                = 0x1001ee6,
+               XK_uhook                                                = 0x1001ee7,
+               XK_Uhornacute                                   = 0x1001ee8,
+               XK_uhornacute                                   = 0x1001ee9,
+               XK_Uhorngrave                                   = 0x1001eea,
+               XK_uhorngrave                                   = 0x1001eeb,
+               XK_Uhornhook                                    = 0x1001eec,
+               XK_uhornhook                                    = 0x1001eed,
+               XK_Uhorntilde                                   = 0x1001eee,
+               XK_uhorntilde                                   = 0x1001eef,
+               XK_Uhornbelowdot                                = 0x1001ef0,
+               XK_uhornbelowdot                                = 0x1001ef1,
+               XK_Ybelowdot                                    = 0x1001ef4,
+               XK_ybelowdot                                    = 0x1001ef5,
+               XK_Yhook                                                = 0x1001ef6,
+               XK_yhook                                                = 0x1001ef7,
+               XK_Ytilde                                               = 0x1001ef8,
+               XK_ytilde                                               = 0x1001ef9,
+               XK_Ohorn                                                = 0x10001a0,
+               XK_ohorn                                                = 0x10001a1,
+               XK_Uhorn                                                = 0x10001af,
+               XK_uhorn                                                = 0x10001b0,
+               XK_EcuSign                                              = 0x10020a0,
+               XK_ColonSign                                    = 0x10020a1,
+               XK_CruzeiroSign                                 = 0x10020a2,
+               XK_FFrancSign                                   = 0x10020a3,
+               XK_LiraSign                                             = 0x10020a4,
+               XK_MillSign                                             = 0x10020a5,
+               XK_NairaSign                                    = 0x10020a6,
+               XK_PesetaSign                                   = 0x10020a7,
+               XK_RupeeSign                                    = 0x10020a8,
+               XK_WonSign                                              = 0x10020a9,
+               XK_NewSheqelSign                                = 0x10020aa,
+               XK_DongSign                                             = 0x10020ab,
+               XK_EuroSign                                             = 0x20ac,
+               XK_zerosuperior                                 = 0x1002070,
+               XK_foursuperior                                 = 0x1002074,
+               XK_fivesuperior                                 = 0x1002075,
+               XK_sixsuperior                                  = 0x1002076,
+               XK_sevensuperior                                = 0x1002077,
+               XK_eightsuperior                                = 0x1002078,
+               XK_ninesuperior                                 = 0x1002079,
+               XK_zerosubscript                                = 0x1002080,
+               XK_onesubscript                                 = 0x1002081,
+               XK_twosubscript                                 = 0x1002082,
+               XK_threesubscript                               = 0x1002083,
+               XK_foursubscript                                = 0x1002084,
+               XK_fivesubscript                                = 0x1002085,
+               XK_sixsubscript                                 = 0x1002086,
+               XK_sevensubscript                               = 0x1002087,
+               XK_eightsubscript                               = 0x1002088,
+               XK_ninesubscript                                = 0x1002089,
+               XK_partdifferential                             = 0x1002202,
+               XK_emptyset                                             = 0x1002205,
+               XK_elementof                                    = 0x1002208,
+               XK_notelementof                                 = 0x1002209,
+               XK_containsas                                   = 0x100220B,
+               XK_squareroot                                   = 0x100221A,
+               XK_cuberoot                                             = 0x100221B,
+               XK_fourthroot                                   = 0x100221C,
+               XK_dintegral                                    = 0x100222C,
+               XK_tintegral                                    = 0x100222D,
+               XK_because                                              = 0x1002235,
+               XK_approxeq                                             = 0x1002248,
+               XK_notapproxeq                                  = 0x1002247,
+               XK_notidentical                                 = 0x1002262,
+               XK_stricteq                                             = 0x1002263,
+               XK_braille_dot_1                                = 0xfff1,
+               XK_braille_dot_2                                = 0xfff2,
+               XK_braille_dot_3                                = 0xfff3,
+               XK_braille_dot_4                                = 0xfff4,
+               XK_braille_dot_5                                = 0xfff5,
+               XK_braille_dot_6                                = 0xfff6,
+               XK_braille_dot_7                                = 0xfff7,
+               XK_braille_dot_8                                = 0xfff8,
+               XK_braille_dot_9                                = 0xfff9,
+               XK_braille_dot_10                               = 0xfffa,
+               XK_braille_blank                                = 0x1002800,
+               XK_braille_dots_1                               = 0x1002801,
+               XK_braille_dots_2                               = 0x1002802,
+               XK_braille_dots_12                              = 0x1002803,
+               XK_braille_dots_3                               = 0x1002804,
+               XK_braille_dots_13                              = 0x1002805,
+               XK_braille_dots_23                              = 0x1002806,
+               XK_braille_dots_123                             = 0x1002807,
+               XK_braille_dots_4                               = 0x1002808,
+               XK_braille_dots_14                              = 0x1002809,
+               XK_braille_dots_24                              = 0x100280a,
+               XK_braille_dots_124                             = 0x100280b,
+               XK_braille_dots_34                              = 0x100280c,
+               XK_braille_dots_134                             = 0x100280d,
+               XK_braille_dots_234                             = 0x100280e,
+               XK_braille_dots_1234                    = 0x100280f,
+               XK_braille_dots_5                               = 0x1002810,
+               XK_braille_dots_15                              = 0x1002811,
+               XK_braille_dots_25                              = 0x1002812,
+               XK_braille_dots_125                             = 0x1002813,
+               XK_braille_dots_35                              = 0x1002814,
+               XK_braille_dots_135                             = 0x1002815,
+               XK_braille_dots_235                             = 0x1002816,
+               XK_braille_dots_1235                    = 0x1002817,
+               XK_braille_dots_45                              = 0x1002818,
+               XK_braille_dots_145                             = 0x1002819,
+               XK_braille_dots_245                             = 0x100281a,
+               XK_braille_dots_1245                    = 0x100281b,
+               XK_braille_dots_345                             = 0x100281c,
+               XK_braille_dots_1345                    = 0x100281d,
+               XK_braille_dots_2345                    = 0x100281e,
+               XK_braille_dots_12345                   = 0x100281f,
+               XK_braille_dots_6                               = 0x1002820,
+               XK_braille_dots_16                              = 0x1002821,
+               XK_braille_dots_26                              = 0x1002822,
+               XK_braille_dots_126                             = 0x1002823,
+               XK_braille_dots_36                              = 0x1002824,
+               XK_braille_dots_136                             = 0x1002825,
+               XK_braille_dots_236                             = 0x1002826,
+               XK_braille_dots_1236                    = 0x1002827,
+               XK_braille_dots_46                              = 0x1002828,
+               XK_braille_dots_146                             = 0x1002829,
+               XK_braille_dots_246                             = 0x100282a,
+               XK_braille_dots_1246                    = 0x100282b,
+               XK_braille_dots_346                             = 0x100282c,
+               XK_braille_dots_1346                    = 0x100282d,
+               XK_braille_dots_2346                    = 0x100282e,
+               XK_braille_dots_12346                   = 0x100282f,
+               XK_braille_dots_56                              = 0x1002830,
+               XK_braille_dots_156                             = 0x1002831,
+               XK_braille_dots_256                             = 0x1002832,
+               XK_braille_dots_1256                    = 0x1002833,
+               XK_braille_dots_356                             = 0x1002834,
+               XK_braille_dots_1356                    = 0x1002835,
+               XK_braille_dots_2356                    = 0x1002836,
+               XK_braille_dots_12356                   = 0x1002837,
+               XK_braille_dots_456                             = 0x1002838,
+               XK_braille_dots_1456                    = 0x1002839,
+               XK_braille_dots_2456                    = 0x100283a,
+               XK_braille_dots_12456                   = 0x100283b,
+               XK_braille_dots_3456                    = 0x100283c,
+               XK_braille_dots_13456                   = 0x100283d,
+               XK_braille_dots_23456                   = 0x100283e,
+               XK_braille_dots_123456                  = 0x100283f,
+               XK_braille_dots_7                               = 0x1002840,
+               XK_braille_dots_17                              = 0x1002841,
+               XK_braille_dots_27                              = 0x1002842,
+               XK_braille_dots_127                             = 0x1002843,
+               XK_braille_dots_37                              = 0x1002844,
+               XK_braille_dots_137                             = 0x1002845,
+               XK_braille_dots_237                             = 0x1002846,
+               XK_braille_dots_1237                    = 0x1002847,
+               XK_braille_dots_47                              = 0x1002848,
+               XK_braille_dots_147                             = 0x1002849,
+               XK_braille_dots_247                             = 0x100284a,
+               XK_braille_dots_1247                    = 0x100284b,
+               XK_braille_dots_347                             = 0x100284c,
+               XK_braille_dots_1347                    = 0x100284d,
+               XK_braille_dots_2347                    = 0x100284e,
+               XK_braille_dots_12347                   = 0x100284f,
+               XK_braille_dots_57                              = 0x1002850,
+               XK_braille_dots_157                             = 0x1002851,
+               XK_braille_dots_257                             = 0x1002852,
+               XK_braille_dots_1257                    = 0x1002853,
+               XK_braille_dots_357                             = 0x1002854,
+               XK_braille_dots_1357                    = 0x1002855,
+               XK_braille_dots_2357                    = 0x1002856,
+               XK_braille_dots_12357                   = 0x1002857,
+               XK_braille_dots_457                             = 0x1002858,
+               XK_braille_dots_1457                    = 0x1002859,
+               XK_braille_dots_2457                    = 0x100285a,
+               XK_braille_dots_12457                   = 0x100285b,
+               XK_braille_dots_3457                    = 0x100285c,
+               XK_braille_dots_13457                   = 0x100285d,
+               XK_braille_dots_23457                   = 0x100285e,
+               XK_braille_dots_123457                  = 0x100285f,
+               XK_braille_dots_67                              = 0x1002860,
+               XK_braille_dots_167                             = 0x1002861,
+               XK_braille_dots_267                             = 0x1002862,
+               XK_braille_dots_1267                    = 0x1002863,
+               XK_braille_dots_367                             = 0x1002864,
+               XK_braille_dots_1367                    = 0x1002865,
+               XK_braille_dots_2367                    = 0x1002866,
+               XK_braille_dots_12367                   = 0x1002867,
+               XK_braille_dots_467                             = 0x1002868,
+               XK_braille_dots_1467                    = 0x1002869,
+               XK_braille_dots_2467                    = 0x100286a,
+               XK_braille_dots_12467                   = 0x100286b,
+               XK_braille_dots_3467                    = 0x100286c,
+               XK_braille_dots_13467                   = 0x100286d,
+               XK_braille_dots_23467                   = 0x100286e,
+               XK_braille_dots_123467                  = 0x100286f,
+               XK_braille_dots_567                             = 0x1002870,
+               XK_braille_dots_1567                    = 0x1002871,
+               XK_braille_dots_2567                    = 0x1002872,
+               XK_braille_dots_12567                   = 0x1002873,
+               XK_braille_dots_3567                    = 0x1002874,
+               XK_braille_dots_13567                   = 0x1002875,
+               XK_braille_dots_23567                   = 0x1002876,
+               XK_braille_dots_123567                  = 0x1002877,
+               XK_braille_dots_4567                    = 0x1002878,
+               XK_braille_dots_14567                   = 0x1002879,
+               XK_braille_dots_24567                   = 0x100287a,
+               XK_braille_dots_124567                  = 0x100287b,
+               XK_braille_dots_34567                   = 0x100287c,
+               XK_braille_dots_134567                  = 0x100287d,
+               XK_braille_dots_234567                  = 0x100287e,
+               XK_braille_dots_1234567                 = 0x100287f,
+               XK_braille_dots_8                               = 0x1002880,
+               XK_braille_dots_18                              = 0x1002881,
+               XK_braille_dots_28                              = 0x1002882,
+               XK_braille_dots_128                             = 0x1002883,
+               XK_braille_dots_38                              = 0x1002884,
+               XK_braille_dots_138                             = 0x1002885,
+               XK_braille_dots_238                             = 0x1002886,
+               XK_braille_dots_1238                    = 0x1002887,
+               XK_braille_dots_48                              = 0x1002888,
+               XK_braille_dots_148                             = 0x1002889,
+               XK_braille_dots_248                             = 0x100288a,
+               XK_braille_dots_1248                    = 0x100288b,
+               XK_braille_dots_348                             = 0x100288c,
+               XK_braille_dots_1348                    = 0x100288d,
+               XK_braille_dots_2348                    = 0x100288e,
+               XK_braille_dots_12348                   = 0x100288f,
+               XK_braille_dots_58                              = 0x1002890,
+               XK_braille_dots_158                             = 0x1002891,
+               XK_braille_dots_258                             = 0x1002892,
+               XK_braille_dots_1258                    = 0x1002893,
+               XK_braille_dots_358                             = 0x1002894,
+               XK_braille_dots_1358                    = 0x1002895,
+               XK_braille_dots_2358                    = 0x1002896,
+               XK_braille_dots_12358                   = 0x1002897,
+               XK_braille_dots_458                             = 0x1002898,
+               XK_braille_dots_1458                    = 0x1002899,
+               XK_braille_dots_2458                    = 0x100289a,
+               XK_braille_dots_12458                   = 0x100289b,
+               XK_braille_dots_3458                    = 0x100289c,
+               XK_braille_dots_13458                   = 0x100289d,
+               XK_braille_dots_23458                   = 0x100289e,
+               XK_braille_dots_123458                  = 0x100289f,
+               XK_braille_dots_68                              = 0x10028a0,
+               XK_braille_dots_168                             = 0x10028a1,
+               XK_braille_dots_268                             = 0x10028a2,
+               XK_braille_dots_1268                    = 0x10028a3,
+               XK_braille_dots_368                             = 0x10028a4,
+               XK_braille_dots_1368                    = 0x10028a5,
+               XK_braille_dots_2368                    = 0x10028a6,
+               XK_braille_dots_12368                   = 0x10028a7,
+               XK_braille_dots_468                             = 0x10028a8,
+               XK_braille_dots_1468                    = 0x10028a9,
+               XK_braille_dots_2468                    = 0x10028aa,
+               XK_braille_dots_12468                   = 0x10028ab,
+               XK_braille_dots_3468                    = 0x10028ac,
+               XK_braille_dots_13468                   = 0x10028ad,
+               XK_braille_dots_23468                   = 0x10028ae,
+               XK_braille_dots_123468                  = 0x10028af,
+               XK_braille_dots_568                             = 0x10028b0,
+               XK_braille_dots_1568                    = 0x10028b1,
+               XK_braille_dots_2568                    = 0x10028b2,
+               XK_braille_dots_12568                   = 0x10028b3,
+               XK_braille_dots_3568                    = 0x10028b4,
+               XK_braille_dots_13568                   = 0x10028b5,
+               XK_braille_dots_23568                   = 0x10028b6,
+               XK_braille_dots_123568                  = 0x10028b7,
+               XK_braille_dots_4568                    = 0x10028b8,
+               XK_braille_dots_14568                   = 0x10028b9,
+               XK_braille_dots_24568                   = 0x10028ba,
+               XK_braille_dots_124568                  = 0x10028bb,
+               XK_braille_dots_34568                   = 0x10028bc,
+               XK_braille_dots_134568                  = 0x10028bd,
+               XK_braille_dots_234568                  = 0x10028be,
+               XK_braille_dots_1234568                 = 0x10028bf,
+               XK_braille_dots_78                              = 0x10028c0,
+               XK_braille_dots_178                             = 0x10028c1,
+               XK_braille_dots_278                             = 0x10028c2,
+               XK_braille_dots_1278                    = 0x10028c3,
+               XK_braille_dots_378                             = 0x10028c4,
+               XK_braille_dots_1378                    = 0x10028c5,
+               XK_braille_dots_2378                    = 0x10028c6,
+               XK_braille_dots_12378                   = 0x10028c7,
+               XK_braille_dots_478                             = 0x10028c8,
+               XK_braille_dots_1478                    = 0x10028c9,
+               XK_braille_dots_2478                    = 0x10028ca,
+               XK_braille_dots_12478                   = 0x10028cb,
+               XK_braille_dots_3478                    = 0x10028cc,
+               XK_braille_dots_13478                   = 0x10028cd,
+               XK_braille_dots_23478                   = 0x10028ce,
+               XK_braille_dots_123478                  = 0x10028cf,
+               XK_braille_dots_578                             = 0x10028d0,
+               XK_braille_dots_1578                    = 0x10028d1,
+               XK_braille_dots_2578                    = 0x10028d2,
+               XK_braille_dots_12578                   = 0x10028d3,
+               XK_braille_dots_3578                    = 0x10028d4,
+               XK_braille_dots_13578                   = 0x10028d5,
+               XK_braille_dots_23578                   = 0x10028d6,
+               XK_braille_dots_123578                  = 0x10028d7,
+               XK_braille_dots_4578                    = 0x10028d8,
+               XK_braille_dots_14578                   = 0x10028d9,
+               XK_braille_dots_24578                   = 0x10028da,
+               XK_braille_dots_124578                  = 0x10028db,
+               XK_braille_dots_34578                   = 0x10028dc,
+               XK_braille_dots_134578                  = 0x10028dd,
+               XK_braille_dots_234578                  = 0x10028de,
+               XK_braille_dots_1234578                 = 0x10028df,
+               XK_braille_dots_678                             = 0x10028e0,
+               XK_braille_dots_1678                    = 0x10028e1,
+               XK_braille_dots_2678                    = 0x10028e2,
+               XK_braille_dots_12678                   = 0x10028e3,
+               XK_braille_dots_3678                    = 0x10028e4,
+               XK_braille_dots_13678                   = 0x10028e5,
+               XK_braille_dots_23678                   = 0x10028e6,
+               XK_braille_dots_123678                  = 0x10028e7,
+               XK_braille_dots_4678                    = 0x10028e8,
+               XK_braille_dots_14678                   = 0x10028e9,
+               XK_braille_dots_24678                   = 0x10028ea,
+               XK_braille_dots_124678                  = 0x10028eb,
+               XK_braille_dots_34678                   = 0x10028ec,
+               XK_braille_dots_134678                  = 0x10028ed,
+               XK_braille_dots_234678                  = 0x10028ee,
+               XK_braille_dots_1234678                 = 0x10028ef,
+               XK_braille_dots_5678                    = 0x10028f0,
+               XK_braille_dots_15678                   = 0x10028f1,
+               XK_braille_dots_25678                   = 0x10028f2,
+               XK_braille_dots_125678                  = 0x10028f3,
+               XK_braille_dots_35678                   = 0x10028f4,
+               XK_braille_dots_135678                  = 0x10028f5,
+               XK_braille_dots_235678                  = 0x10028f6,
+               XK_braille_dots_1235678                 = 0x10028f7,
+               XK_braille_dots_45678                   = 0x10028f8,
+               XK_braille_dots_145678                  = 0x10028f9,
+               XK_braille_dots_245678                  = 0x10028fa,
+               XK_braille_dots_1245678                 = 0x10028fb,
+               XK_braille_dots_345678                  = 0x10028fc,
+               XK_braille_dots_1345678                 = 0x10028fd,
+               XK_braille_dots_2345678                 = 0x10028fe,
+               XK_braille_dots_12345678                = 0x10028ff,
+               XK_Sinh_ng                                              = 0x1000d82,
+               XK_Sinh_h2                                              = 0x1000d83,
+               XK_Sinh_a                                               = 0x1000d85,
+               XK_Sinh_aa                                              = 0x1000d86,
+               XK_Sinh_ae                                              = 0x1000d87,
+               XK_Sinh_aee                                             = 0x1000d88,
+               XK_Sinh_i                                               = 0x1000d89,
+               XK_Sinh_ii                                              = 0x1000d8a,
+               XK_Sinh_u                                               = 0x1000d8b,
+               XK_Sinh_uu                                              = 0x1000d8c,
+               XK_Sinh_ri                                              = 0x1000d8d,
+               XK_Sinh_rii                                             = 0x1000d8e,
+               XK_Sinh_lu                                              = 0x1000d8f,
+               XK_Sinh_luu                                             = 0x1000d90,
+               XK_Sinh_e                                               = 0x1000d91,
+               XK_Sinh_ee                                              = 0x1000d92,
+               XK_Sinh_ai                                              = 0x1000d93,
+               XK_Sinh_o                                               = 0x1000d94,
+               XK_Sinh_oo                                              = 0x1000d95,
+               XK_Sinh_au                                              = 0x1000d96,
+               XK_Sinh_ka                                              = 0x1000d9a,
+               XK_Sinh_kha                                             = 0x1000d9b,
+               XK_Sinh_ga                                              = 0x1000d9c,
+               XK_Sinh_gha                                             = 0x1000d9d,
+               XK_Sinh_ng2                                             = 0x1000d9e,
+               XK_Sinh_nga                                             = 0x1000d9f,
+               XK_Sinh_ca                                              = 0x1000da0,
+               XK_Sinh_cha                                             = 0x1000da1,
+               XK_Sinh_ja                                              = 0x1000da2,
+               XK_Sinh_jha                                             = 0x1000da3,
+               XK_Sinh_nya                                             = 0x1000da4,
+               XK_Sinh_jnya                                    = 0x1000da5,
+               XK_Sinh_nja                                             = 0x1000da6,
+               XK_Sinh_tta                                             = 0x1000da7,
+               XK_Sinh_ttha                                    = 0x1000da8,
+               XK_Sinh_dda                                             = 0x1000da9,
+               XK_Sinh_ddha                                    = 0x1000daa,
+               XK_Sinh_nna                                             = 0x1000dab,
+               XK_Sinh_ndda                                    = 0x1000dac,
+               XK_Sinh_tha                                             = 0x1000dad,
+               XK_Sinh_thha                                    = 0x1000dae,
+               XK_Sinh_dha                                             = 0x1000daf,
+               XK_Sinh_dhha                                    = 0x1000db0,
+               XK_Sinh_na                                              = 0x1000db1,
+               XK_Sinh_ndha                                    = 0x1000db3,
+               XK_Sinh_pa                                              = 0x1000db4,
+               XK_Sinh_pha                                             = 0x1000db5,
+               XK_Sinh_ba                                              = 0x1000db6,
+               XK_Sinh_bha                                             = 0x1000db7,
+               XK_Sinh_ma                                              = 0x1000db8,
+               XK_Sinh_mba                                             = 0x1000db9,
+               XK_Sinh_ya                                              = 0x1000dba,
+               XK_Sinh_ra                                              = 0x1000dbb,
+               XK_Sinh_la                                              = 0x1000dbd,
+               XK_Sinh_va                                              = 0x1000dc0,
+               XK_Sinh_sha                                             = 0x1000dc1,
+               XK_Sinh_ssha                                    = 0x1000dc2,
+               XK_Sinh_sa                                              = 0x1000dc3,
+               XK_Sinh_ha                                              = 0x1000dc4,
+               XK_Sinh_lla                                             = 0x1000dc5,
+               XK_Sinh_fa                                              = 0x1000dc6,
+               XK_Sinh_al                                              = 0x1000dca,
+               XK_Sinh_aa2                                             = 0x1000dcf,
+               XK_Sinh_ae2                                             = 0x1000dd0,
+               XK_Sinh_aee2                                    = 0x1000dd1,
+               XK_Sinh_i2                                              = 0x1000dd2,
+               XK_Sinh_ii2                                             = 0x1000dd3,
+               XK_Sinh_u2                                              = 0x1000dd4,
+               XK_Sinh_uu2                                             = 0x1000dd6,
+               XK_Sinh_ru2                                             = 0x1000dd8,
+               XK_Sinh_e2                                              = 0x1000dd9,
+               XK_Sinh_ee2                                             = 0x1000dda,
+               XK_Sinh_ai2                                             = 0x1000ddb,
+               XK_Sinh_o2                                              = 0x1000ddc,
+               XK_Sinh_oo2                                             = 0x1000ddd,
+               XK_Sinh_au2                                             = 0x1000dde,
+               XK_Sinh_lu2                                             = 0x1000ddf,
+               XK_Sinh_ruu2                                    = 0x1000df2,
+               XK_Sinh_luu2                                    = 0x1000df3,
+               XK_Sinh_kunddaliya                              = 0x1000df4,
+       }
+}
diff --git a/Crow/src/backends/xlib/XLibBackend.cs b/Crow/src/backends/xlib/XLibBackend.cs
new file mode 100644 (file)
index 0000000..a123e20
--- /dev/null
@@ -0,0 +1,183 @@
+//
+// XLibBackend.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp_bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+using System;
+using System.Diagnostics;
+using System.Runtime.InteropServices;
+
+namespace Crow.XLib
+{
+       public class XLibBackend : IBackend
+       {
+               #region pinvoke
+               [DllImportAttribute("X11")]
+               static extern int XInitThreads();
+               [DllImportAttribute("X11")]
+               internal static extern IntPtr XOpenDisplay(IntPtr displayName);
+               [DllImportAttribute("X11")]
+               internal static extern IntPtr XCloseDisplay(IntPtr disp);
+               [DllImportAttribute("X11")]
+               static extern Int32 XDefaultScreen(IntPtr disp);
+               [DllImportAttribute("X11")]
+               static extern IntPtr XDefaultRootWindow(IntPtr disp);
+               [DllImportAttribute("X11")]
+               static extern UInt32 XDefaultDepth (IntPtr disp, Int32 screen);
+               [DllImportAttribute("X11")]
+               static extern IntPtr XDefaultVisual(IntPtr disp, Int32 screen);
+               [DllImportAttribute("X11")]
+               static extern IntPtr XCreateSimpleWindow(IntPtr disp, IntPtr rootWindow, Int32 x, Int32 y, UInt32 width, UInt32 height,
+                       UInt32 borderWidth, IntPtr border, IntPtr background);
+               [DllImportAttribute("X11")]
+               static extern IntPtr XCreatePixmap(IntPtr disp, IntPtr rootWindow, UInt32 width, UInt32 height, UInt32 depth);
+               [DllImportAttribute("X11")]
+               static extern IntPtr XFreePixmap(IntPtr disp, IntPtr pixmap);
+               [DllImportAttribute("X11")]
+               static extern IntPtr XFree(IntPtr data);
+               [DllImportAttribute("X11")]
+               static extern Int32 XSelectInput(IntPtr disp, IntPtr win, EventMask eventMask);
+               [DllImportAttribute("X11")]
+               static extern Int32 XMapWindow(IntPtr disp, IntPtr win);
+               [DllImportAttribute("X11")]
+               static extern int XPending (IntPtr disp);
+               [DllImportAttribute("X11")]
+               static extern IntPtr XNextEvent(IntPtr disp, ref XEvent xevent);
+               [DllImportAttribute("X11")]
+               static extern Int32 XSync(IntPtr disp, int discard);
+               [DllImportAttribute("X11")]
+               static extern int XConnectionNumber(IntPtr disp);
+               [DllImportAttribute("X11")]
+               static extern IntPtr XSetErrorHandler(XErrorHandler error_handler);
+
+               #endregion
+
+               IntPtr xDisp, xwinHnd, xDefaultRootWin, xDefaultVisual;
+               UInt32 xDefaultDepth;
+               Int32 xScreen;
+               XErrorHandler errorHnd;
+
+               Interface iFace;
+
+               #region IBackend implementation
+
+               public void Init (Interface _iFace)
+               {
+                       iFace = _iFace;
+                       XInitThreads ();
+                       xDisp = XOpenDisplay(IntPtr.Zero);
+                       if (xDisp == IntPtr.Zero)
+                               throw new NotSupportedException("[XLib] Failed to open display.");
+
+                       xScreen = XDefaultScreen(xDisp);
+
+                       xDefaultRootWin = XDefaultRootWindow (xDisp);
+                       xDefaultVisual = XDefaultVisual (xDisp, xScreen);
+                       xDefaultDepth = XDefaultDepth (xDisp, xScreen);
+
+                       xwinHnd = XCreateSimpleWindow (xDisp, xDefaultRootWin,
+                               0, 0, (uint)iFace.ClientRectangle.Width, (uint)iFace.ClientRectangle.Height, 0, IntPtr.Zero, IntPtr.Zero);
+                       if (xwinHnd == IntPtr.Zero)
+                               throw new NotSupportedException("[XLib] Failed to create window.");
+
+                       XSelectInput (xDisp, xwinHnd, EventMask.ExposureMask | 
+                               EventMask.KeyPressMask  | EventMask.KeyReleaseMask | 
+                               EventMask.PointerMotionMask | EventMask.ButtonPressMask | EventMask.ButtonReleaseMask);
+
+                       XMapWindow (xDisp, xwinHnd);
+
+                       iFace.Keyboard = new Crow.XLib.X11Keyboard (xDisp);
+
+                       iFace.surf = new Cairo.XlibSurface (xDisp, xwinHnd, xDefaultVisual, iFace.ClientRectangle.Width, iFace.ClientRectangle.Height);
+
+                       errorHnd = new XErrorHandler (HandleError);
+                       XSetErrorHandler (errorHnd);
+               }
+
+               public void CleanUp ()
+               {
+                       iFace.Keyboard.Destroy ();
+
+                       XCloseDisplay (xDisp);
+               }
+               public void Flush () {
+                       XSync (xDisp, 0);
+               }
+               public void ProcessEvents ()
+               {
+                       if (XPending (xDisp) > 0) {
+                               XEvent xevent = new XEvent ();
+                               XNextEvent (xDisp, ref xevent);
+
+                               switch (xevent.type) {
+                               case XEventName.Expose:
+                                       iFace.ProcessResize (new Rectangle (0, 0, xevent.ExposeEvent.width, xevent.ExposeEvent.height));
+                                       break;
+                               case XEventName.KeyPress:
+                                       iFace.Keyboard.HandleEvent ((uint)xevent.KeyEvent.keycode, true);
+                                       break;
+                               case XEventName.KeyRelease:
+                                       iFace.Keyboard.HandleEvent ((uint)xevent.KeyEvent.keycode, false);
+                                       break;
+                               case XEventName.MotionNotify:
+                                       //Debug.WriteLine ("motion: ({0},{1})", xevent.MotionEvent.x, xevent.MotionEvent.y);
+                                       iFace.ProcessMouseMove (xevent.MotionEvent.x, xevent.MotionEvent.y);
+                                       break;
+                               case XEventName.ButtonPress:
+                                       //Debug.WriteLine ("button press: {0}", xevent.ButtonEvent.button);
+                                       if (xevent.ButtonEvent.button == 4)
+                                               iFace.ProcessMouseWheelChanged (Interface.WheelIncrement);
+                                       else if(xevent.ButtonEvent.button == 5)
+                                               iFace.ProcessMouseWheelChanged (-Interface.WheelIncrement);
+                                       else
+                                               iFace.ProcessMouseButtonDown (xevent.ButtonEvent.button - 1);
+                                       break;
+                               case XEventName.ButtonRelease:
+                                       //Debug.WriteLine ("button release: {0}", xevent.ButtonEvent.button);
+                                       iFace.ProcessMouseButtonUp (xevent.ButtonEvent.button - 1);
+                                       break;
+
+                               }
+                       }
+               }
+
+               #endregion
+
+               int HandleError (IntPtr display, ref XErrorEvent error_event)
+               {
+                       /*if (ErrorExceptions)
+                               throw new X11Exception (error_event.display, error_event.resourceid,
+                                       error_event.serial, error_event.error_code,
+                                       error_event.request_code, error_event.minor_code);
+                       else
+                               Console.WriteLine ("X11 Error encountered: {0}{1}\n",
+                                       X11Exception.GetMessage(error_event.display, error_event.resourceid,
+                                               error_event.serial, error_event.error_code,
+                                               error_event.request_code, error_event.minor_code),
+                                       WhereString());*/
+                       Debug.WriteLine ("XERROR {0}", error_event.error_code);
+                       return 0;
+               }
+       }
+}
+
diff --git a/Crow/src/debug/DbgEventTypeColors.cs b/Crow/src/debug/DbgEventTypeColors.cs
new file mode 100644 (file)
index 0000000..e088118
--- /dev/null
@@ -0,0 +1,77 @@
+//
+// DbgEventTypeColors.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp_bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+using System;
+using Cairo;
+using System.Linq;
+
+namespace Crow
+{
+       #if DEBUG_LOG
+       public class DbgEventTypeColors : GraphicObject
+       {
+               protected override void onDraw (Context gr)
+               {
+                       base.onDraw (gr);
+
+                       gr.SelectFontFace (Font.Name, Font.Slant, Font.Wheight);
+                       gr.SetFontSize (Font.Size);
+                       gr.FontOptions = Interface.FontRenderingOptions;
+                       gr.Antialias = Interface.Antialias;
+
+                       DbgEvtType[] types = DbgLogViewer.colors.Keys.ToArray ();
+                       Color[] colors = DbgLogViewer.colors.Values.ToArray ();
+
+                       Rectangle r = ClientRectangle;
+                       FontExtents fe = gr.FontExtents;
+
+                       double penY = fe.Height + r.Top;
+                       double penX = (double)r.Left;
+
+
+                       for (int i = 0; i < types.Length; i++) {
+                               string n = types [i].ToString();
+                               Color c = colors[i];
+                               Foreground.SetAsSource (gr);
+
+                               gr.MoveTo (penX + 25.0, penY - fe.Descent);
+                               gr.ShowText (n);
+
+                               Rectangle rc = new Rectangle((int)penX, (int)(penY - fe.Height), 20, (int)fe.Height);
+                               rc.Inflate (-2);
+                               gr.Rectangle (rc);
+                               gr.StrokePreserve ();
+
+                               gr.SetSourceColor (c);
+                               gr.Fill ();
+
+                               penY += fe.Height;
+
+                       }
+               }
+       }
+       #endif
+}
+
diff --git a/Crow/src/debug/DbgLogViewer.cs b/Crow/src/debug/DbgLogViewer.cs
new file mode 100644 (file)
index 0000000..6124d6f
--- /dev/null
@@ -0,0 +1,646 @@
+//
+// DbgLogViewer.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp_bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using Cairo;
+
+#if DEBUG_LOG
+namespace Crow
+{
+       public class DbgLogViewer : ScrollingObject
+       {
+               public static Dictionary<DbgEvtType,Color> colors;
+
+               public static Configuration colorsConf = new Configuration("dbgcolor.conf");
+
+               #region debug viewer private classes
+               public class DbgData {
+                       public int objInstanceNum;
+                       public LayoutingType layout;
+                       public LayoutingQueueItem.Result result;
+
+                       public DbgData (int _obj) {
+                               objInstanceNum = _obj;
+                       }
+               }
+               public class DbgEvent {
+                       public long begin, end;
+                       public DbgEvtType type;
+                       public DbgData data = null;
+
+                       public DbgEvent() {}
+
+                       public static DbgEvent Parse (string str) {
+                               if (str == null)
+                                       return null;
+                               string[] tmp = str.Trim().Split(';');
+
+                               DbgEvent evt = new DbgEvent ();
+                               evt.begin = long.Parse (tmp [0]);
+                               evt.end = long.Parse (tmp [1]);
+                               evt.type = (DbgEvtType)Enum.Parse (typeof(DbgEvtType), tmp [2]);
+
+                               if (evt.type.HasFlag (DbgEvtType.GraphicObject)) {
+                                       evt.data = new DbgData (int.Parse (tmp [3]));
+                                       if (evt.type.HasFlag (DbgEvtType.GOLayouting)) {
+                                               evt.data.layout = (LayoutingType)Enum.Parse (typeof(LayoutingType), tmp [4]);
+                                               if (evt.type == DbgEvtType.GOProcessLayouting)
+                                                       evt.data.result = (LayoutingQueueItem.Result)Enum.Parse (typeof(LayoutingQueueItem.Result), tmp [5]);                                                                           
+                                       }
+                               }
+                               return evt;
+                       }
+               }
+               class DbgGo {
+                       public int listIndex;//prevent doing an IndexOf on list for each event to know y pos on screen
+                       public int instanceNum;//class instantiation order, used to bind events to objs
+                       public string name;
+                       //0 is the main graphic tree, for other obj tree not added to main tree, it range from 1->n
+                       //useful to track events for obj shown later, not on start
+                       public int treeIndex;
+                       public int yIndex;//index in parenting, the whole main graphic tree is one continuous suite
+                       public int xLevel;//depth
+
+                       public List<DbgEvent> events = new List<DbgEvent>();
+
+                       public static DbgGo Parse (string str) {
+                               DbgGo g = new DbgGo ();
+                               if (str == null)
+                                       return null;
+                               string[] tmp = str.Trim().Split(';');
+                               g.instanceNum = int.Parse (tmp [0]);
+                               g.name = tmp [1];
+                               g.yIndex = int.Parse (tmp [2]);
+                               g.xLevel = int.Parse (tmp [3]);
+                               return g;
+                       }
+
+               }
+               #endregion
+
+               public static void reloadColors () {
+                       colors = new Dictionary<DbgEvtType, Color>();
+                       foreach (string n in colorsConf.Names) {
+                               DbgEvtType t = (DbgEvtType)Enum.Parse (typeof(DbgEvtType), n);
+                               Color c = colorsConf.Get<Color> (n);
+                               colors.Add (t, c);
+                       }
+
+               }
+               #region CTOR
+               static DbgLogViewer() {
+                       reloadColors ();
+               }
+               protected DbgLogViewer () : base(){}
+               public DbgLogViewer (Interface iface) : base(iface){}
+               #endregion
+
+               FontExtents fe;
+
+               double xScale = 1.0/512.0, yScale = 1.0, leftMargin, topMargin = 0.0;
+               string logFile;
+
+               List<DbgEvent> events;//global events
+               List<DbgGo> objs;
+
+               long currentTick = 0, selStart = -1, selEnd = -1, minTicks = 0, maxTicks = 0, visibleTicks = 0;
+               int currentLine = -1;
+               int visibleLines;
+
+               public string LogFile {
+                       get { return logFile; }
+                       set {
+                               if (logFile == value)
+                                       return;
+                               logFile = value;
+
+                               loadDebugFile ();
+
+
+                               NotifyValueChanged ("LogFile", logFile);
+                               RegisterForGraphicUpdate ();
+                       }
+               }
+               public double XScale {
+                       get { return xScale; }
+                       set {
+                               if (xScale == value)
+                                       return;
+                               xScale = value;
+                               NotifyValueChanged ("XScale", xScale);
+                               updateVisibleTicks ();
+                               RegisterForGraphicUpdate ();
+                       }
+               }
+               public double YScale {
+                       get { return yScale; }
+                       set {
+                               if (yScale == value)
+                                       return;
+                               yScale = value;
+                               NotifyValueChanged ("YScale", yScale);
+                               RegisterForGraphicUpdate ();
+                       }
+               }
+
+
+               void storeEvent (DbgEvent evt) {
+                       if (evt.data == null)//global events
+                               events.Add (evt);
+                       else {
+                               DbgGo go = objs.Where (o => o.instanceNum == evt.data.objInstanceNum).FirstOrDefault ();
+                               if (go == null)
+                                       Console.WriteLine ("Unknown instance: " + evt.data.objInstanceNum);
+                               else
+                                       go.events.Add (evt);                                            
+                       }
+               }
+
+               void loadDebugFile() {
+                       if (!File.Exists (logFile))
+                               return;
+
+                       events = new List<DbgEvent>();
+                       objs = new List<DbgGo> ();
+                       minTicks = maxTicks = 0;
+                       leftMargin = topMargin = 0.0;
+
+                       using (ImageSurface img = new ImageSurface (Format.Argb32, 1, 1)) {
+                               using (Context gr = new Context (img)) {
+                                       double maxNameWidth = 0.0;
+
+                                       gr.SelectFontFace (Font.Name, Font.Slant, Font.Wheight);
+                                       gr.SetFontSize (Font.Size);
+
+                                       using (StreamReader s = new StreamReader (logFile)) {
+                                               if (s.ReadLine () != "[GraphicObjects]")                                        
+                                                       return;                         
+                                               while (!s.EndOfStream) {
+                                                       string l = s.ReadLine ();
+                                                       if (l == "[Events]")
+                                                               break;
+                                                       DbgGo o = DbgGo.Parse (l);
+                                                       objs.Add (o);
+                                                       double nameWidth = gr.TextExtents (o.name).Width + 5.0 * o.xLevel;
+                                                       if (nameWidth > maxNameWidth)
+                                                               maxNameWidth = nameWidth;
+                                               }
+                                               if (!s.EndOfStream) {
+                                                       DbgEvent firstEvt = DbgEvent.Parse (s.ReadLine ());
+                                                       storeEvent (firstEvt);
+                                                       minTicks = firstEvt.begin;
+                                               }
+
+                                               if (!s.EndOfStream) {
+                                                       while (true) {
+                                                               DbgLogViewer.DbgEvent evt = DbgEvent.Parse (s.ReadLine ());
+                                                               storeEvent (evt);
+                                                               if (s.EndOfStream) {
+                                                                       maxTicks = evt.end;
+                                                                       break;
+                                                               }
+                                                       }
+                                               }
+                                       }
+
+                                       leftMargin = 2.5 + maxNameWidth;
+
+                                       fe = gr.FontExtents;
+
+                                       topMargin = 2.0 * fe.Height;
+
+                                       updateVisibleLines ();
+                                       updateVisibleTicks ();
+                               }
+                       }
+
+               }
+               void updateVisibleLines(){
+                       visibleLines = (int)Math.Floor (((double)ClientRectangle.Height - topMargin) / fe.Height);
+                       NotifyValueChanged ("VisibleLines", visibleLines);
+                       updateMaxScrollY ();
+               }
+               void updateVisibleTicks() {
+                       visibleTicks = Math.Max (0, (long)((double)(ClientRectangle.Width - leftMargin) / XScale));
+                       NotifyValueChanged ("VisibleTicks", visibleTicks);
+                       updateMaxScrollX ();
+               }
+               /*
+               void updateVisibleColumns(){
+                       visibleColumns = (int)Math.Floor ((double)(ClientRectangle.Width - leftMargin)/ fe.MaxXAdvance);
+                       NotifyValueChanged ("VisibleColumns", visibleColumns);
+                       updateMaxScrollX ();
+               }
+               void updateMaxScrollX () {
+                       MaxScrollX = Math.Max (0, buffer.longestLineCharCount - visibleColumns);
+                       if (buffer.longestLineCharCount > 0)
+                               NotifyValueChanged ("ChildWidthRatio", Slot.Width * visibleColumns / buffer.longestLineCharCount);                      
+               }*/
+
+               void updateMaxScrollX () {
+                       if (objs == null)
+                               MaxScrollX = 0;
+                       else                            
+                               MaxScrollX =  (int)Math.Max(0L, maxTicks - minTicks - visibleTicks);
+               }
+               void updateMaxScrollY () {
+                       if (objs == null)
+                               MaxScrollY = 0;
+                       else                            
+                               MaxScrollY =  Math.Max(0, objs.Count - visibleLines);
+               }
+
+
+               public override Font Font {
+                       get { return base.Font; }
+                       set {
+                               base.Font = value;
+                               loadDebugFile ();
+                       }
+               }
+
+               public override int ScrollY {
+                       get {
+                               return base.ScrollY;
+                       }
+                       set {
+                               base.ScrollY = value;
+
+                               if (objs == null)
+                                       return;
+                               
+                               Rectangle cb = ClientRectangle;
+                               cb.Left += (int)leftMargin;
+                               cb.Width -= (int)leftMargin;
+                               cb.Y += (int)topMargin;
+                               cb.Height -= (int)topMargin;
+
+                               if (mousePos.Y < cb.Top || mousePos.Y > cb.Bottom)
+                                       currentLine = -1;
+                               else
+                                       currentLine = (int)((double)(mousePos.Y - cb.Top) / fe.Height) + ScrollY;
+
+                               NotifyValueChanged ("CurrentLine", currentLine);
+
+                       }
+               }
+
+
+
+               protected override void onDraw (Cairo.Context gr)
+               {
+                       base.onDraw (gr);
+
+                       gr.SelectFontFace (Font.Name, Font.Slant, Font.Wheight);
+                       gr.SetFontSize (Font.Size);
+                       gr.FontOptions = Interface.FontRenderingOptions;
+                       gr.Antialias = Cairo.Antialias.None;
+
+                       if (objs == null)
+                               return;
+
+                       gr.LineWidth = 1.0;
+
+                       Rectangle cb = ClientRectangle;
+
+                       double penY = topMargin + ClientRectangle.Top;
+
+                       for (int i = 0; i < visibleLines; i++) {
+                               if (i + ScrollY >= objs.Count)
+                                       break;
+                               DbgGo g = objs [i + ScrollY];
+
+
+                               foreach (DbgEvent evt in g.events) {
+                                       
+
+                                       if (evt.end - minTicks <= ScrollX)
+                                               continue;
+                                       if (evt.begin - minTicks > ScrollX + visibleTicks)
+                                               break;
+
+                                       double x = xScale * (evt.begin - minTicks - ScrollX) ;
+                                       double w = Math.Max (Math.Max(2.0, 2.0 * xScale), (double)(evt.end - evt.begin) * xScale);
+                                       if (x < 0.0) {
+                                               w += x;
+                                               x = 0.0;
+                                       }
+                                       x += leftMargin + cb.Left;
+                                       double rightDiff = x + w - cb.Right;
+                                       if (rightDiff > 0)
+                                               w -= rightDiff;
+                                       //if (x + w > cb.Right)
+                                       //      continue;
+
+                                       Color c = Color.Black;
+
+                                       if (evt.type == DbgEvtType.GOProcessLayouting) {                                                        
+                                               switch (evt.data.result) {
+                                               case LayoutingQueueItem.Result.Success:
+                                                       c = Crow.Color.Green;
+                                                       break;
+                                               case LayoutingQueueItem.Result.Deleted:
+                                                       c = Crow.Color.Red;
+                                                       break;
+                                               case LayoutingQueueItem.Result.Discarded:
+                                                       c = Crow.Color.OrangeRed;
+                                                       break;
+                                               case LayoutingQueueItem.Result.Requeued:
+                                                       c = Crow.Color.Orange;
+                                                       break;
+                                               }
+                                       } else if (colors.ContainsKey (evt.type))
+                                               c = colors [evt.type];
+                                       else
+                                               System.Diagnostics.Debugger.Break ();
+
+                                       gr.SetSourceColor (c);
+
+                                       gr.Rectangle (x, penY, w, fe.Height);
+                                       gr.Fill ();
+                               }
+
+                               penY += fe.Height;
+
+                               gr.SetSourceColor (Crow.Color.Jet);
+                               gr.MoveTo (cb.X, penY - 0.5);
+                               gr.LineTo (cb.Right, penY - 0.5);
+                               gr.Stroke ();
+
+                               double penX = 5.0 * g.xLevel + cb.Left;
+
+                               if (g.yIndex == 0)
+                                       gr.SetSourceColor (Crow.Color.LightSalmon);
+                               else
+                                       Foreground.SetAsSource (gr);
+
+                               gr.MoveTo (penX, penY - gr.FontExtents.Descent);
+                               gr.ShowText (g.name);
+
+                               gr.SetSourceColor (Crow.Color.White);
+                               gr.MoveTo (cb.X, penY - gr.FontExtents.Descent);
+                               gr.ShowText ((i+ ScrollY).ToString());
+
+                       }
+
+
+                       gr.MoveTo (cb.Left, topMargin - 0.5 + cb.Top);
+                       gr.LineTo (cb.Right, topMargin - 0.5 + cb.Top);
+
+                       gr.MoveTo (leftMargin + cb.Left, cb.Top);
+                       gr.LineTo (leftMargin + cb.Left, cb.Bottom);
+                       gr.SetSourceColor (Crow.Color.Grey);
+
+                       penY = topMargin + ClientRectangle.Top;
+
+                       //graduation
+                       int largeGrad = int.Parse ("1" + new string ('0', visibleTicks.ToString ().Length - 1));
+                       int smallGrad = Math.Max (1, largeGrad / 10);
+
+                       long firstVisibleTicks = minTicks + ScrollX;
+                       long curGrad = firstVisibleTicks - firstVisibleTicks % smallGrad + smallGrad;
+
+                       long gg = curGrad - ScrollX - minTicks;
+                       while (gg < visibleTicks ) {
+                               double x = (double)gg * xScale + leftMargin + cb.Left;
+
+                               gr.MoveTo (x, penY - 0.5);
+                               if (curGrad % largeGrad == 0) { 
+                                       gr.LineTo (x, penY - 8.5);
+                                       string str = curGrad.ToString ();
+                                       TextExtents te = gr.TextExtents (str);
+                                       gr.RelMoveTo (-0.5 * te.Width, -2.0);
+                                       gr.ShowText (str);
+                               }else
+                                       gr.LineTo (x, penY - 2.5);
+
+                               curGrad += smallGrad;
+                               gg = curGrad - ScrollX - minTicks;
+                       }
+
+                       gr.Stroke ();
+
+                       //global events
+                       foreach (DbgEvent evt in events) {
+                               if (evt.begin - minTicks <= ScrollX)
+                                       continue;
+                               double x = xScale * (evt.begin - minTicks - ScrollX) ;
+                               x += leftMargin + cb.Left;
+
+                               gr.SetSourceColor (Crow.Color.Yellow);
+                               gr.MoveTo (x, penY);
+                               gr.LineTo (x, cb.Bottom);
+                               gr.Stroke ();
+                               string s = evt.type.ToString () [10].ToString ();
+                               Cairo.TextExtents te = gr.TextExtents (s);
+                               gr.Rectangle (x - 0.5 * te.Width , penY - te.Height, te.Width, te.Height);
+                               gr.Fill ();
+                               gr.MoveTo (x- 0.5 * te.Width, penY - gr.FontExtents.Descent);
+                               gr.SetSourceColor (Crow.Color.Jet);
+                               gr.ShowText (s);
+
+                       }
+
+               }
+               public override void Paint (ref Cairo.Context ctx)
+               {
+                       base.Paint (ref ctx);
+
+                       Rectangle r = new Rectangle(mousePos.X, 0, 1, Slot.Height);
+                       Rectangle ctxR = ContextCoordinates (r);
+                       Rectangle cb = ClientRectangle;
+
+                       ctx.Rectangle (ctxR);
+                       ctx.SetSourceColor (Color.CornflowerBlue);
+                       ctx.Fill();
+
+                       ctx.SelectFontFace (Font.Name, Font.Slant, Font.Wheight);
+                       ctx.SetFontSize (Font.Size);
+                       ctx.FontOptions = Interface.FontRenderingOptions;
+                       ctx.Antialias = Interface.Antialias;
+
+                       ctx.MoveTo (ctxR.X, ctxR.Y + fe.Height);
+                       ctx.ShowText (currentTick.ToString ());
+
+                       ctx.Operator = Cairo.Operator.Add;
+
+                       if (currentLine >= 0) {
+                               r = new Rectangle (cb.Left, (currentLine + 2 - ScrollY) * (int)fe.Height + cb.Top, cb.Width, (int)fe.Height);
+
+                               ctx.Operator = Cairo.Operator.Add;
+                               ctx.SetSourceRGBA (0.1, 0.1, 0.1, 0.4);
+                               ctx.Rectangle (ContextCoordinates (r));
+                               ctx.Fill ();
+                       }
+
+                       if (selStart < 0) {
+                               ctx.Operator = Cairo.Operator.Over;
+                               return;
+                       }
+                       double selStartX = (double)(selStart - ScrollX - minTicks) * xScale + leftMargin + cb.Left;
+                       double selEndX = (selEnd >= 0) ? (double)(selEnd - ScrollX - minTicks) * xScale + leftMargin + cb.Left :
+                               (double)(currentTick - ScrollX - minTicks) * xScale + leftMargin + cb.Left;
+
+                       if (selStartX < selEndX) {
+                               ctxR.X = (int)selStartX;
+                               ctxR.Width = (int)(selEndX - selStartX);
+                       } else {
+                               ctxR.X = (int)selEndX;
+                               ctxR.Width = (int)(selStartX - selEndX);
+                       }
+
+                       ctxR.Width = Math.Max (1, ctxR.Width);
+                       ctx.Rectangle (ctxR);
+                       //ctx.SetSourceColor (Color.LightYellow);
+                       ctx.SetSourceColor (Color.Jet);
+                       ctx.Fill();
+                       ctx.Operator = Cairo.Operator.Over;
+
+               }
+               public override void OnLayoutChanges (LayoutingType layoutType)
+               {
+                       base.OnLayoutChanges (layoutType);
+                       switch (layoutType) {
+                       case LayoutingType.Width:
+                               updateVisibleTicks ();
+                               break;
+                       case LayoutingType.Height:
+                               updateVisibleLines ();
+                               break;
+                       }
+               }
+
+               Point mousePos;
+               void updateMouseLocalPos(Point mPos){
+                       Rectangle r = ScreenCoordinates (Slot);
+                       Rectangle cb = ClientRectangle;
+                       cb.Left += (int)leftMargin;
+                       cb.Width -= (int)leftMargin;
+                       cb.Y += (int)topMargin;
+                       cb.Height -= (int)topMargin;
+
+                       mousePos = mPos - r.Position;
+
+                       mousePos.X = Math.Max(cb.X, mousePos.X);
+                       mousePos.X = Math.Min(cb.Right, mousePos.X);
+
+                       if (mousePos.Y < cb.Top || mousePos.Y > cb.Bottom)
+                               currentLine = -1;
+                       else
+                               currentLine = (int)((double)(mousePos.Y - cb.Top) / fe.Height) + ScrollY;
+
+                       NotifyValueChanged ("CurrentLine", currentLine);
+                       
+                       mousePos.Y = Math.Max(cb.Y, mousePos.Y);
+                       mousePos.Y = Math.Min(cb.Bottom, mousePos.Y);
+
+                       currentTick = (int)((double)(mousePos.X - cb.X) / xScale) + minTicks + ScrollX;
+
+               }
+               public override void onMouseLeave (object sender, MouseMoveEventArgs e)
+               {
+                       base.onMouseLeave (sender, e);
+                       currentLine = -1;
+                       currentTick = 0;
+               }
+               public override void onMouseMove (object sender, MouseMoveEventArgs e)
+               {
+                       base.onMouseMove (sender, e);
+                       updateMouseLocalPos (e.Position);
+
+                       if (selStart >= 0 && IFace.Mouse.IsButtonDown(MouseButton.Left))
+                               selEnd = currentTick;
+
+                       if (RegisteredLayoutings == LayoutingType.None && !IsDirty)
+                               IFace.EnqueueForRepaint (this);
+                       
+               }
+               public override void onMouseDown (object sender, MouseButtonEventArgs e)
+               {
+                       base.onMouseDown (sender, e);
+
+                       selStart = currentTick;
+                       selEnd = -1;
+
+                       RegisterForRedraw ();
+               }
+               public override void onMouseUp (object sender, MouseButtonEventArgs e)
+               {
+                       base.onMouseUp (sender, e);
+                       if (selStart == currentTick) {
+                               selStart = -1;
+                               selEnd = -1;
+                       }else
+                               selEnd = currentTick;
+                       RegisterForRedraw ();
+               }
+
+               /// <summary> Process scrolling vertically, or if shift is down, vertically </summary>
+               public override void onMouseWheel (object sender, MouseWheelEventArgs e)
+               {                       
+                       //base.onMouseWheel (sender, e);
+
+                       if (IFace.Keyboard.Shift)
+                               ScrollX -= (int)((double)(e.Delta * MouseWheelSpeed) / xScale);
+                       else if (IFace.Keyboard.Ctrl) {
+                               if (e.Delta > 0) {
+                                       XScale *= 2.0;
+                               } else {
+                                       if (MaxScrollX > 0)
+                                               XScale *= 0.5;
+                               }
+                               ScrollX = (int)(currentTick - (int)((double)Math.Max(0, mousePos.X - (int)leftMargin) / xScale) - minTicks);
+                       }else
+                               ScrollY -= e.Delta * MouseWheelSpeed;
+               }
+
+               public override void onKeyDown (object sender, KeyEventArgs e)
+               {
+                       base.onKeyDown (sender, e);
+
+                       if (e.Key == Key.F3) {
+                               if (selEnd < 0)
+                                       return;
+                               if (selEnd < selStart)
+                                       zoom (selEnd, selStart);
+                               else
+                                       zoom (selStart, selEnd);
+                               selEnd = selStart = -1;
+                       }
+               }
+
+               void zoom (long start, long end) {                                              
+                       //Rectangle cb = ClientRectangle;
+                       //cb.X += (int)leftMargin;
+                       XScale = ((double)ClientRectangle.Width - leftMargin)/(end - start);
+                       ScrollX = (int)(start - minTicks);
+               }
+       }
+}
+#endif
+
diff --git a/Crow/src/debug/DebugLogger.cs b/Crow/src/debug/DebugLogger.cs
new file mode 100644 (file)
index 0000000..38cbc2a
--- /dev/null
@@ -0,0 +1,177 @@
+//
+// CrowDebugger.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp_bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+using System;
+using Cairo;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.IO;
+using System.Linq;
+
+#if DEBUG_LOG
+namespace Crow
+{
+       /*public class LayoutingEvent : DbgEvent {
+               public List<LayoutingQueueItem> lqis = new List<LayoutingQueueItem>();
+
+       }*/
+       [Flags]
+       public enum DbgEvtType {
+               ////9 nth bit set for iface event
+               IFace                                                   = 0x0100,
+               IFaceStartLayouting                             = 0x0101,
+               IFaceEndLayouting                               = 0x0102,
+               IFaceStartClipping                              = 0x0103,
+               IFaceEndClipping                                = 0x0104,
+               IFaceStartDrawing                               = 0x0105,
+               IFaceEndDrawing                                 = 0x0106,
+               IFaceUpdate                                             = 0x0107,
+               //10 nth bit set for graphic obj
+               GraphicObject                                   = 0x0200,
+               GOClassCreation                                 = 0x0201,
+               GOInitialization                                = 0x0202,
+               GOClippingRegistration                  = 0x0203,
+               GORegisterClip                                  = 0x0204,
+               GORegisterForGraphicUpdate              = 0x0205,
+               GOEnqueueForRepaint                             = 0x0206,
+               GOLayouting                                             = 0x0400,
+               GORegisterLayouting                             = 0x0607,
+               GOProcessLayoutingWithNoParent  = 0x0608,
+               GOProcessLayouting                              = 0x0609,
+               GODraw                                                  = 0x020a,
+               GORecreateCache                                 = 0x020b,
+               GOUpdateCacheAndPaintOnCTX              = 0x020c,
+               GOPaint                                                 = 0x020d,
+               GONewDataSource                                 = 0x020e,
+               GOLock                                                  = 0x0800,
+               GOLockUpdate                                    = 0x0a01,
+               GOLockClipping                                  = 0x0a02,
+               GOLockRender                                    = 0x0a03,
+               GOLockLayouting                                 = 0x0a04,
+       }
+
+       /// <summary>
+       /// debug events as recorded, another class is used in the viewer
+       /// </summary>
+       public class DbgEvent {
+               public long begin, end;
+               public DbgEvtType type;
+               public object data = null;
+
+               public DbgEvent() {}
+                       
+               public DbgEvent(long timeStamp, DbgEvtType evt, object _data = null) {                  
+                       data = _data;
+                       type = evt;
+                       begin = timeStamp;
+                       end = timeStamp;
+               }
+
+               public override string ToString ()
+               {
+                       GraphicObject go = data as GraphicObject;
+                       if (go != null)
+                               return string.Format ("{0};{1};{2};{3}", begin, end, type, GraphicObject.GraphicObjects.IndexOf(go).ToString());
+                       if (!(data is LayoutingQueueItem))
+                               return string.Format ("{0};{1};{2}", begin, end, type);
+                       LayoutingQueueItem lqi = (LayoutingQueueItem)data;
+                       if (type == DbgEvtType.GOProcessLayouting)
+                               return string.Format ("{0};{1};{2};{3};{4};{5}", begin, end, type, GraphicObject.GraphicObjects.IndexOf(lqi.graphicObject).ToString(), lqi.LayoutType.ToString(), lqi.result.ToString());                       
+                       return string.Format ("{0};{1};{2};{3};{4}", begin, end, type, GraphicObject.GraphicObjects.IndexOf(lqi.graphicObject).ToString(), lqi.LayoutType.ToString());
+                       
+               }
+       }
+
+       public static class DebugLog
+       {
+               static Surface surf;
+               static Context ctx;
+
+               static Crow.Rectangle bounds = new Crow.Rectangle(0,0,8182,4096);
+               static double penX = 1.0;
+               static double ySpacing = 10.0;
+               static double xPenStart = 250.0;
+               static double xResolution = 0.001; //per tick
+               public static Stopwatch chrono = Stopwatch.StartNew();
+
+               public static List<DbgEvent> events = new List<DbgEvent>();
+               public static DbgEvent currentEvent = null;
+
+               public static DbgEvent AddEvent (DbgEvtType evtType, object data = null) {
+                       DbgEvent evt = new DbgEvent(chrono.ElapsedTicks, evtType, data);
+                       events.Add (evt);
+                       return evt;
+               }
+
+               static int y, level;
+
+               static void parseTree (GraphicObject go) {
+                       if (go == null)
+                               return;
+
+
+                       go.yIndex = y++;
+                       go.xLevel = level++;
+
+                       Group gr = go as Group;
+                       if (gr != null) {
+                               foreach (GraphicObject g in gr.Children) {
+                                       parseTree (g);
+                               }
+                       } else {
+                               PrivateContainer pc = go as PrivateContainer;
+                               if (pc != null)
+                                       parseTree (pc.getTemplateRoot);                         
+                       }
+                       level--;                
+               }
+
+               public static void save(Interface iface) {
+                       y = 1;
+                       level = 0;
+
+                       foreach (GraphicObject go in iface.GraphicTree) 
+                               parseTree (go);                 
+
+                       using (StreamWriter s = new StreamWriter("debug.log")){
+                               s.WriteLine ("[GraphicObjects]");
+                               lock (GraphicObject.GraphicObjects) {
+                                       GraphicObject.GraphicObjects = GraphicObject.GraphicObjects.OrderBy (o => o.yIndex).ToList();
+                                       for (int i = 0; i < GraphicObject.GraphicObjects.Count; i++) {
+                                               GraphicObject g = GraphicObject.GraphicObjects [i];
+                                               s.WriteLine ("{0};{1};{2};{3}", i, g.GetType ().Name, g.yIndex, g.xLevel);      
+                                       }
+                               }
+                               s.WriteLine ("[Events]");
+
+                               foreach (DbgEvent e in events)
+                                       if (e != null)
+                                               s.WriteLine (e.ToString ());
+                       }
+               }
+       }
+}
+#endif
+
diff --git a/Crow/src/rsvg/DimensionData.cs b/Crow/src/rsvg/DimensionData.cs
new file mode 100644 (file)
index 0000000..66aab91
--- /dev/null
@@ -0,0 +1,24 @@
+//Copyright GPL2
+namespace Rsvg {
+
+       using System;
+       using System.Collections;
+       using System.Runtime.InteropServices;
+
+       [StructLayout(LayoutKind.Sequential)]
+       public struct DimensionData {
+
+               public int Width;
+               public int Height;
+               public double Em;
+               public double Ex;
+
+               public static Rsvg.DimensionData Zero = new Rsvg.DimensionData ();
+
+               public static Rsvg.DimensionData New(IntPtr raw) {
+                       if (raw == IntPtr.Zero)
+                               return Rsvg.DimensionData.Zero;
+                       return (Rsvg.DimensionData) Marshal.PtrToStructure (raw, typeof (Rsvg.DimensionData));
+               }
+       }
+}
diff --git a/Crow/src/rsvg/Global.cs b/Crow/src/rsvg/Global.cs
new file mode 100644 (file)
index 0000000..6591701
--- /dev/null
@@ -0,0 +1,41 @@
+// This file was generated by the Gtk# code generator.
+// Any changes made will be lost if regenerated.
+
+namespace Rsvg {
+
+       using System;
+       using System.Runtime.InteropServices;
+
+#region Autogenerated code
+       public class Global {
+
+               [DllImport("rsvg-2")]
+               static extern void rsvg_set_default_dpi_x_y(double dpi_x, double dpi_y);
+
+               public static void SetDefaultDpiXY(double dpi_x, double dpi_y) {
+                       rsvg_set_default_dpi_x_y(dpi_x, dpi_y);
+               }
+
+               [DllImport("rsvg-2")]
+               static extern int rsvg_error_quark();
+
+               public static int ErrorQuark {
+                       get {
+                               int raw_ret = rsvg_error_quark();
+                               int ret = raw_ret;
+                               return ret;
+                       }
+               }
+
+               [DllImport("rsvg-2")]
+               static extern void rsvg_set_default_dpi(double dpi);
+
+               public static double DefaultDpi {
+                       set {
+                               rsvg_set_default_dpi(value);
+                       }
+               }
+
+#endregion
+       }
+}
diff --git a/Crow/src/rsvg/Handle.cs b/Crow/src/rsvg/Handle.cs
new file mode 100644 (file)
index 0000000..e13f79a
--- /dev/null
@@ -0,0 +1,125 @@
+//Copyright GPL2
+using Cairo;
+
+
+namespace Rsvg {
+
+       using System;
+       using System.Collections;
+       using System.Runtime.InteropServices;
+
+       public class Handle {
+
+               public IntPtr Raw;
+
+               [DllImport("rsvg-2")]
+               static extern IntPtr rsvg_handle_new();
+
+               public Handle ()
+               {
+                       Raw = rsvg_handle_new();
+               }
+
+               [DllImport("rsvg-2")]
+               static extern unsafe IntPtr rsvg_handle_new_from_data(byte[] data, UIntPtr n_data, out IntPtr error);
+
+               public unsafe Handle (byte[] data)
+               {
+                       if (GetType () != typeof (Handle)) {
+                               throw new InvalidOperationException ("Can't override this constructor.");
+                       }
+                       IntPtr error = IntPtr.Zero;
+                       Raw = rsvg_handle_new_from_data(data, new UIntPtr ((ulong) (data == null ? 0 : data.Length)), out error);
+                       if (error != IntPtr.Zero) throw new Exception (error.ToString());
+               }
+
+               [DllImport("rsvg-2")]
+               static extern unsafe IntPtr rsvg_handle_new_from_file(string file_name, out IntPtr error);
+
+               public unsafe Handle (string file_name)
+               {
+                       IntPtr error = IntPtr.Zero;
+                       Raw = rsvg_handle_new_from_file(file_name, out error);
+                       if (error != IntPtr.Zero) throw new Exception (error.ToString());
+               }
+
+               [DllImport("rsvg-2")]
+               static extern IntPtr rsvg_handle_get_base_uri(IntPtr raw);
+
+               [DllImport("rsvg-2")]
+               static extern void rsvg_handle_set_dpi(IntPtr raw, double dpi);
+
+               public double Dpi {
+                       set {
+                               rsvg_handle_set_dpi(Raw, value);
+                       }
+               }
+
+               [DllImport("rsvg-2")]
+               static extern void rsvg_handle_render_cairo(IntPtr raw, IntPtr cr);
+
+               public void RenderCairo(Context cr) {
+                       unsafe{
+                               rsvg_handle_render_cairo (Raw, cr == null ? IntPtr.Zero : cr.Handle);
+                       }
+               }
+
+               [DllImport("rsvg-2")]
+               static extern void rsvg_handle_set_dpi_x_y(IntPtr raw, double dpi_x, double dpi_y);
+
+               public void SetDpiXY(double dpi_x, double dpi_y) {
+                       rsvg_handle_set_dpi_x_y(Raw, dpi_x, dpi_y);
+               }
+
+               [DllImport("rsvg-2")]
+               static extern void rsvg_handle_get_dimensions(IntPtr raw, IntPtr dimension_data);
+
+               public Rsvg.DimensionData Dimensions {
+                       get {
+                               Rsvg.DimensionData dimension_data;
+                               IntPtr native_dimension_data = Marshal.AllocHGlobal (Marshal.SizeOf (typeof (Rsvg.DimensionData)));
+                               rsvg_handle_get_dimensions(Raw, native_dimension_data);
+                               dimension_data = Rsvg.DimensionData.New (native_dimension_data);
+                               Marshal.FreeHGlobal (native_dimension_data);
+                               return dimension_data;
+                       }
+               }
+
+               [DllImport("rsvg-2")]
+               static extern unsafe bool rsvg_handle_close(IntPtr raw, out IntPtr error);
+
+               public unsafe bool Close() {
+                       IntPtr error = IntPtr.Zero;
+                       bool raw_ret = rsvg_handle_close(Raw, out error);
+                       if (error != IntPtr.Zero) throw new Exception (error.ToString());
+                       return raw_ret;
+               }
+
+               [DllImport("rsvg-2")]
+               static extern IntPtr rsvg_handle_get_title(IntPtr raw);
+
+               public string Title {
+                       get {
+                               IntPtr raw_ret = rsvg_handle_get_title(Raw);
+                               return "not supported";
+                       }
+               }
+
+               [DllImport("rsvg-2")]
+               static extern void rsvg_handle_render_cairo_sub(IntPtr raw, IntPtr cr, string id);
+
+               public void RenderCairoSub(Cairo.Context cr, string id) {
+                       rsvg_handle_render_cairo_sub(Raw, cr == null ? IntPtr.Zero : cr.Handle, id);
+               }
+
+               [DllImport("rsvg-2")]
+               static extern IntPtr rsvg_handle_get_metadata(IntPtr raw);
+
+               public string Metadata {
+                       get {
+                               IntPtr raw_ret = rsvg_handle_get_metadata(Raw);
+                               return "not supported";
+                       }
+               }
+       }
+}
diff --git a/Crow/src/win32/Win32.cs b/Crow/src/win32/Win32.cs
new file mode 100644 (file)
index 0000000..3249fce
--- /dev/null
@@ -0,0 +1,62 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Runtime.InteropServices;
+using System.Diagnostics;
+
+namespace Crow
+{
+    public static class Win32
+    {
+        [DllImport("user32.dll")]
+        public static extern IntPtr GetDC(IntPtr hWnd);
+        #region  mouse winApi
+
+        [System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential)]
+        public struct Point
+        {
+
+            /// LONG->int
+            public int x;
+
+            /// LONG->int
+            public int y;
+        }
+        [System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential)]
+        public struct HICON__
+        {
+
+            /// int
+            public int unused;
+        }
+
+#if _WIN32 || _WIN64
+        /// Return Type: HCURSOR->HICON->HICON__*
+        ///hCursor: HCURSOR->HICON->HICON__*
+        [System.Runtime.InteropServices.DllImportAttribute("user32.dll", EntryPoint = "SetCursor")]
+        public static extern System.IntPtr SetCursor([System.Runtime.InteropServices.InAttribute()] System.IntPtr hCursor);
+#elif __linux__
+               public static System.IntPtr SetCursor(System.IntPtr hCursor)
+               {
+
+                       return (IntPtr)0;
+               }
+#endif
+
+        /// Return Type: BOOL->int
+        ///lpPoint: LPPOINT->tagPOINT*
+        [System.Runtime.InteropServices.DllImportAttribute("user32.dll", EntryPoint = "GetCursorPos")]
+        [return: System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.Bool)]
+        public static extern bool GetCursorPos([System.Runtime.InteropServices.OutAttribute()] out Point lpPoint);
+
+        /// Return Type: BOOL->int
+        ///X: int
+        ///Y: int
+        [System.Runtime.InteropServices.DllImportAttribute("user32.dll", EntryPoint = "SetCursorPos")]
+        [return: System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.Bool)]
+        public static extern bool SetCursorPos(int X, int Y);
+
+        #endregion
+    }
+}
diff --git a/Crow/src/win32/winApi.cs b/Crow/src/win32/winApi.cs
new file mode 100755 (executable)
index 0000000..7ed9f90
--- /dev/null
@@ -0,0 +1,1238 @@
+   /// <summary>
+  /// Windows Messages
+  /// Defined in winuser.h from Windows SDK v6.1
+  /// Documentation pulled from MSDN.
+  /// </summary>
+using System;
+
+public enum WM : uint
+  {
+    /// <summary>
+    /// The WM_NULL message performs no operation. An application sends the WM_NULL message if it wants to post a message that the recipient window will ignore.
+    /// </summary>
+    NULL = 0x0000,
+    /// <summary>
+    /// The WM_CREATE message is sent when an application requests that a window be created by calling the CreateWindowEx or CreateWindow function. (The message is sent before the function returns.) The window procedure of the new window receives this message after the window is created, but before the window becomes visible.
+    /// </summary>
+    CREATE = 0x0001,
+    /// <summary>
+    /// The WM_DESTROY message is sent when a window is being destroyed. It is sent to the window procedure of the window being destroyed after the window is removed from the screen.
+    /// This message is sent first to the window being destroyed and then to the child windows (if any) as they are destroyed. During the processing of the message, it can be assumed that all child windows still exist.
+    /// /// </summary>
+    DESTROY = 0x0002,
+    /// <summary>
+    /// The WM_MOVE message is sent after a window has been moved.
+    /// </summary>
+    MOVE = 0x0003,
+    /// <summary>
+    /// The WM_SIZE message is sent to a window after its size has changed.
+    /// </summary>
+    SIZE = 0x0005,
+    /// <summary>
+    /// The WM_ACTIVATE message is sent to both the window being activated and the window being deactivated. If the windows use the same input queue, the message is sent synchronously, first to the window procedure of the top-level window being deactivated, then to the window procedure of the top-level window being activated. If the windows use different input queues, the message is sent asynchronously, so the window is activated immediately.
+    /// </summary>
+    ACTIVATE = 0x0006,
+    /// <summary>
+    /// The WM_SETFOCUS message is sent to a window after it has gained the keyboard focus.
+    /// </summary>
+    SETFOCUS = 0x0007,
+    /// <summary>
+    /// The WM_KILLFOCUS message is sent to a window immediately before it loses the keyboard focus.
+    /// </summary>
+    KILLFOCUS = 0x0008,
+    /// <summary>
+    /// The WM_ENABLE message is sent when an application changes the enabled state of a window. It is sent to the window whose enabled state is changing. This message is sent before the EnableWindow function returns, but after the enabled state (WS_DISABLED style bit) of the window has changed.
+    /// </summary>
+    ENABLE = 0x000A,
+    /// <summary>
+    /// An application sends the WM_SETREDRAW message to a window to allow changes in that window to be redrawn or to prevent changes in that window from being redrawn.
+    /// </summary>
+    SETREDRAW = 0x000B,
+    /// <summary>
+    /// An application sends a WM_SETTEXT message to set the text of a window.
+    /// </summary>
+    SETTEXT = 0x000C,
+    /// <summary>
+    /// An application sends a WM_GETTEXT message to copy the text that corresponds to a window into a buffer provided by the caller.
+    /// </summary>
+    GETTEXT = 0x000D,
+    /// <summary>
+    /// An application sends a WM_GETTEXTLENGTH message to determine the length, in characters, of the text associated with a window.
+    /// </summary>
+    GETTEXTLENGTH = 0x000E,
+    /// <summary>
+    /// The WM_PAINT message is sent when the system or another application makes a request to paint a portion of an application's window. The message is sent when the UpdateWindow or RedrawWindow function is called, or by the DispatchMessage function when the application obtains a WM_PAINT message by using the GetMessage or PeekMessage function.
+    /// </summary>
+    PAINT = 0x000F,
+    /// <summary>
+    /// The WM_CLOSE message is sent as a signal that a window or an application should terminate.
+    /// </summary>
+    CLOSE = 0x0010,
+    /// <summary>
+    /// The WM_QUERYENDSESSION message is sent when the user chooses to end the session or when an application calls one of the system shutdown functions. If any application returns zero, the session is not ended. The system stops sending WM_QUERYENDSESSION messages as soon as one application returns zero.
+    /// After processing this message, the system sends the WM_ENDSESSION message with the wParam parameter set to the results of the WM_QUERYENDSESSION message.
+    /// </summary>
+    QUERYENDSESSION = 0x0011,
+    /// <summary>
+    /// The WM_QUERYOPEN message is sent to an icon when the user requests that the window be restored to its previous size and position.
+    /// </summary>
+    QUERYOPEN = 0x0013,
+    /// <summary>
+    /// The WM_ENDSESSION message is sent to an application after the system processes the results of the WM_QUERYENDSESSION message. The WM_ENDSESSION message informs the application whether the session is ending.
+    /// </summary>
+    ENDSESSION = 0x0016,
+    /// <summary>
+    /// The WM_QUIT message indicates a request to terminate an application and is generated when the application calls the PostQuitMessage function. It causes the GetMessage function to return zero.
+    /// </summary>
+    QUIT = 0x0012,
+    /// <summary>
+    /// The WM_ERASEBKGND message is sent when the window background must be erased (for example, when a window is resized). The message is sent to prepare an invalidated portion of a window for painting.
+    /// </summary>
+    ERASEBKGND = 0x0014,
+    /// <summary>
+    /// This message is sent to all top-level windows when a change is made to a system color setting.
+    /// </summary>
+    SYSCOLORCHANGE = 0x0015,
+    /// <summary>
+    /// The WM_SHOWWINDOW message is sent to a window when the window is about to be hidden or shown.
+    /// </summary>
+    SHOWWINDOW = 0x0018,
+    /// <summary>
+    /// An application sends the WM_WININICHANGE message to all top-level windows after making a change to the WIN.INI file. The SystemParametersInfo function sends this message after an application uses the function to change a setting in WIN.INI.
+    /// Note  The WM_WININICHANGE message is provided only for compatibility with earlier versions of the system. Applications should use the WM_SETTINGCHANGE message.
+    /// </summary>
+    WININICHANGE = 0x001A,
+    /// <summary>
+    /// An application sends the WM_WININICHANGE message to all top-level windows after making a change to the WIN.INI file. The SystemParametersInfo function sends this message after an application uses the function to change a setting in WIN.INI.
+    /// Note  The WM_WININICHANGE message is provided only for compatibility with earlier versions of the system. Applications should use the WM_SETTINGCHANGE message.
+    /// </summary>
+    SETTINGCHANGE = WININICHANGE,
+    /// <summary>
+    /// The WM_DEVMODECHANGE message is sent to all top-level windows whenever the user changes device-mode settings.
+    /// </summary>
+    DEVMODECHANGE = 0x001B,
+    /// <summary>
+    /// The WM_ACTIVATEAPP message is sent when a window belonging to a different application than the active window is about to be activated. The message is sent to the application whose window is being activated and to the application whose window is being deactivated.
+    /// </summary>
+    ACTIVATEAPP = 0x001C,
+    /// <summary>
+    /// An application sends the WM_FONTCHANGE message to all top-level windows in the system after changing the pool of font resources.
+    /// </summary>
+    FONTCHANGE = 0x001D,
+    /// <summary>
+    /// A message that is sent whenever there is a change in the system time.
+    /// </summary>
+    TIMECHANGE = 0x001E,
+    /// <summary>
+    /// The WM_CANCELMODE message is sent to cancel certain modes, such as mouse capture. For example, the system sends this message to the active window when a dialog box or message box is displayed. Certain functions also send this message explicitly to the specified window regardless of whether it is the active window. For example, the EnableWindow function sends this message when disabling the specified window.
+    /// </summary>
+    CANCELMODE = 0x001F,
+    /// <summary>
+    /// The WM_SETCURSOR message is sent to a window if the mouse causes the cursor to move within a window and mouse input is not captured.
+    /// </summary>
+    SETCURSOR = 0x0020,
+    /// <summary>
+    /// The WM_MOUSEACTIVATE message is sent when the cursor is in an inactive window and the user presses a mouse button. The parent window receives this message only if the child window passes it to the DefWindowProc function.
+    /// </summary>
+    MOUSEACTIVATE = 0x0021,
+    /// <summary>
+    /// The WM_CHILDACTIVATE message is sent to a child window when the user clicks the window's title bar or when the window is activated, moved, or sized.
+    /// </summary>
+    CHILDACTIVATE = 0x0022,
+    /// <summary>
+    /// The WM_QUEUESYNC message is sent by a computer-based training (CBT) application to separate user-input messages from other messages sent through the WH_JOURNALPLAYBACK Hook procedure.
+    /// </summary>
+    QUEUESYNC = 0x0023,
+    /// <summary>
+    /// The WM_GETMINMAXINFO message is sent to a window when the size or position of the window is about to change. An application can use this message to override the window's default maximized size and position, or its default minimum or maximum tracking size.
+    /// </summary>
+    GETMINMAXINFO = 0x0024,
+    /// <summary>
+    /// Windows NT 3.51 and earlier: The WM_PAINTICON message is sent to a minimized window when the icon is to be painted. This message is not sent by newer versions of Microsoft Windows, except in unusual circumstances explained in the Remarks.
+    /// </summary>
+    PAINTICON = 0x0026,
+    /// <summary>
+    /// Windows NT 3.51 and earlier: The WM_ICONERASEBKGND message is sent to a minimized window when the background of the icon must be filled before painting the icon. A window receives this message only if a class icon is defined for the window; otherwise, WM_ERASEBKGND is sent. This message is not sent by newer versions of Windows.
+    /// </summary>
+    ICONERASEBKGND = 0x0027,
+    /// <summary>
+    /// The WM_NEXTDLGCTL message is sent to a dialog box procedure to set the keyboard focus to a different control in the dialog box.
+    /// </summary>
+    NEXTDLGCTL = 0x0028,
+    /// <summary>
+    /// The WM_SPOOLERSTATUS message is sent from Print Manager whenever a job is added to or removed from the Print Manager queue.
+    /// </summary>
+    SPOOLERSTATUS = 0x002A,
+    /// <summary>
+    /// The WM_DRAWITEM message is sent to the parent window of an owner-drawn button, combo box, list box, or menu when a visual aspect of the button, combo box, list box, or menu has changed.
+    /// </summary>
+    DRAWITEM = 0x002B,
+    /// <summary>
+    /// The WM_MEASUREITEM message is sent to the owner window of a combo box, list box, list view control, or menu item when the control or menu is created.
+    /// </summary>
+    MEASUREITEM = 0x002C,
+    /// <summary>
+    /// Sent to the owner of a list box or combo box when the list box or combo box is destroyed or when items are removed by the LB_DELETESTRING, LB_RESETCONTENT, CB_DELETESTRING, or CB_RESETCONTENT message. The system sends a WM_DELETEITEM message for each deleted item. The system sends the WM_DELETEITEM message for any deleted list box or combo box item with nonzero item data.
+    /// </summary>
+    DELETEITEM = 0x002D,
+    /// <summary>
+    /// Sent by a list box with the LBS_WANTKEYBOARDINPUT style to its owner in response to a WM_KEYDOWN message.
+    /// </summary>
+    VKEYTOITEM = 0x002E,
+    /// <summary>
+    /// Sent by a list box with the LBS_WANTKEYBOARDINPUT style to its owner in response to a WM_CHAR message.
+    /// </summary>
+    CHARTOITEM = 0x002F,
+    /// <summary>
+    /// An application sends a WM_SETFONT message to specify the font that a control is to use when drawing text.
+    /// </summary>
+    SETFONT = 0x0030,
+    /// <summary>
+    /// An application sends a WM_GETFONT message to a control to retrieve the font with which the control is currently drawing its text.
+    /// </summary>
+    GETFONT = 0x0031,
+    /// <summary>
+    /// An application sends a WM_SETHOTKEY message to a window to associate a hot key with the window. When the user presses the hot key, the system activates the window.
+    /// </summary>
+    SETHOTKEY = 0x0032,
+    /// <summary>
+    /// An application sends a WM_GETHOTKEY message to determine the hot key associated with a window.
+    /// </summary>
+    GETHOTKEY = 0x0033,
+    /// <summary>
+    /// The WM_QUERYDRAGICON message is sent to a minimized (iconic) window. The window is about to be dragged by the user but does not have an icon defined for its class. An application can return a handle to an icon or cursor. The system displays this cursor or icon while the user drags the icon.
+    /// </summary>
+    QUERYDRAGICON = 0x0037,
+    /// <summary>
+    /// The system sends the WM_COMPAREITEM message to determine the relative position of a new item in the sorted list of an owner-drawn combo box or list box. Whenever the application adds a new item, the system sends this message to the owner of a combo box or list box created with the CBS_SORT or LBS_SORT style.
+    /// </summary>
+    COMPAREITEM = 0x0039,
+    /// <summary>
+    /// Active Accessibility sends the WM_GETOBJECT message to obtain information about an accessible object contained in a server application.
+    /// Applications never send this message directly. It is sent only by Active Accessibility in response to calls to AccessibleObjectFromPoint, AccessibleObjectFromEvent, or AccessibleObjectFromWindow. However, server applications handle this message.
+    /// </summary>
+    GETOBJECT = 0x003D,
+    /// <summary>
+    /// The WM_COMPACTING message is sent to all top-level windows when the system detects more than 12.5 percent of system time over a 30- to 60-second interval is being spent compacting memory. This indicates that system memory is low.
+    /// </summary>
+    COMPACTING = 0x0041,
+    /// <summary>
+    /// WM_COMMNOTIFY is Obsolete for Win32-Based Applications
+    /// </summary>
+    [Obsolete]
+    COMMNOTIFY = 0x0044,
+    /// <summary>
+    /// The WM_WINDOWPOSCHANGING message is sent to a window whose size, position, or place in the Z order is about to change as a result of a call to the SetWindowPos function or another window-management function.
+    /// </summary>
+    WINDOWPOSCHANGING = 0x0046,
+    /// <summary>
+    /// The WM_WINDOWPOSCHANGED message is sent to a window whose size, position, or place in the Z order has changed as a result of a call to the SetWindowPos function or another window-management function.
+    /// </summary>
+    WINDOWPOSCHANGED = 0x0047,
+    /// <summary>
+    /// Notifies applications that the system, typically a battery-powered personal computer, is about to enter a suspended mode.
+    /// Use: POWERBROADCAST
+    /// </summary>
+    [Obsolete]
+    POWER = 0x0048,
+    /// <summary>
+    /// An application sends the WM_COPYDATA message to pass data to another application.
+    /// </summary>
+    COPYDATA = 0x004A,
+    /// <summary>
+    /// The WM_CANCELJOURNAL message is posted to an application when a user cancels the application's journaling activities. The message is posted with a NULL window handle.
+    /// </summary>
+    CANCELJOURNAL = 0x004B,
+    /// <summary>
+    /// Sent by a common control to its parent window when an event has occurred or the control requires some information.
+    /// </summary>
+    NOTIFY = 0x004E,
+    /// <summary>
+    /// The WM_INPUTLANGCHANGEREQUEST message is posted to the window with the focus when the user chooses a new input language, either with the hotkey (specified in the Keyboard control panel application) or from the indicator on the system taskbar. An application can accept the change by passing the message to the DefWindowProc function or reject the change (and prevent it from taking place) by returning immediately.
+    /// </summary>
+    INPUTLANGCHANGEREQUEST = 0x0050,
+    /// <summary>
+    /// The WM_INPUTLANGCHANGE message is sent to the topmost affected window after an application's input language has been changed. You should make any application-specific settings and pass the message to the DefWindowProc function, which passes the message to all first-level child windows. These child windows can pass the message to DefWindowProc to have it pass the message to their child windows, and so on.
+    /// </summary>
+    INPUTLANGCHANGE = 0x0051,
+    /// <summary>
+    /// Sent to an application that has initiated a training card with Microsoft Windows Help. The message informs the application when the user clicks an authorable button. An application initiates a training card by specifying the HELP_TCARD command in a call to the WinHelp function.
+    /// </summary>
+    TCARD = 0x0052,
+    /// <summary>
+    /// Indicates that the user pressed the F1 key. If a menu is active when F1 is pressed, WM_HELP is sent to the window associated with the menu; otherwise, WM_HELP is sent to the window that has the keyboard focus. If no window has the keyboard focus, WM_HELP is sent to the currently active window.
+    /// </summary>
+    HELP = 0x0053,
+    /// <summary>
+    /// The WM_USERCHANGED message is sent to all windows after the user has logged on or off. When the user logs on or off, the system updates the user-specific settings. The system sends this message immediately after updating the settings.
+    /// </summary>
+    USERCHANGED = 0x0054,
+    /// <summary>
+    /// Determines if a window accepts ANSI or Unicode structures in the WM_NOTIFY notification message. WM_NOTIFYFORMAT messages are sent from a common control to its parent window and from the parent window to the common control.
+    /// </summary>
+    NOTIFYFORMAT = 0x0055,
+    /// <summary>
+    /// The WM_CONTEXTMENU message notifies a window that the user clicked the right mouse button (right-clicked) in the window.
+    /// </summary>
+    CONTEXTMENU = 0x007B,
+    /// <summary>
+    /// The WM_STYLECHANGING message is sent to a window when the SetWindowLong function is about to change one or more of the window's styles.
+    /// </summary>
+    STYLECHANGING = 0x007C,
+    /// <summary>
+    /// The WM_STYLECHANGED message is sent to a window after the SetWindowLong function has changed one or more of the window's styles
+    /// </summary>
+    STYLECHANGED = 0x007D,
+    /// <summary>
+    /// The WM_DISPLAYCHANGE message is sent to all windows when the display resolution has changed.
+    /// </summary>
+    DISPLAYCHANGE = 0x007E,
+    /// <summary>
+    /// The WM_GETICON message is sent to a window to retrieve a handle to the large or small icon associated with a window. The system displays the large icon in the ALT+TAB dialog, and the small icon in the window caption.
+    /// </summary>
+    GETICON = 0x007F,
+    /// <summary>
+    /// An application sends the WM_SETICON message to associate a new large or small icon with a window. The system displays the large icon in the ALT+TAB dialog box, and the small icon in the window caption.
+    /// </summary>
+    SETICON = 0x0080,
+    /// <summary>
+    /// The WM_NCCREATE message is sent prior to the WM_CREATE message when a window is first created.
+    /// </summary>
+    NCCREATE = 0x0081,
+    /// <summary>
+    /// The WM_NCDESTROY message informs a window that its nonclient area is being destroyed. The DestroyWindow function sends the WM_NCDESTROY message to the window following the WM_DESTROY message. WM_DESTROY is used to free the allocated memory object associated with the window.
+    /// The WM_NCDESTROY message is sent after the child windows have been destroyed. In contrast, WM_DESTROY is sent before the child windows are destroyed.
+    /// </summary>
+    NCDESTROY = 0x0082,
+    /// <summary>
+    /// The WM_NCCALCSIZE message is sent when the size and position of a window's client area must be calculated. By processing this message, an application can control the content of the window's client area when the size or position of the window changes.
+    /// </summary>
+    NCCALCSIZE = 0x0083,
+    /// <summary>
+    /// The WM_NCHITTEST message is sent to a window when the cursor moves, or when a mouse button is pressed or released. If the mouse is not captured, the message is sent to the window beneath the cursor. Otherwise, the message is sent to the window that has captured the mouse.
+    /// </summary>
+    NCHITTEST = 0x0084,
+    /// <summary>
+    /// The WM_NCPAINT message is sent to a window when its frame must be painted.
+    /// </summary>
+    NCPAINT = 0x0085,
+    /// <summary>
+    /// The WM_NCACTIVATE message is sent to a window when its nonclient area needs to be changed to indicate an active or inactive state.
+    /// </summary>
+    NCACTIVATE = 0x0086,
+    /// <summary>
+    /// The WM_GETDLGCODE message is sent to the window procedure associated with a control. By default, the system handles all keyboard input to the control; the system interprets certain types of keyboard input as dialog box navigation keys. To override this default behavior, the control can respond to the WM_GETDLGCODE message to indicate the types of input it wants to process itself.
+    /// </summary>
+    GETDLGCODE = 0x0087,
+    /// <summary>
+    /// The WM_SYNCPAINT message is used to synchronize painting while avoiding linking independent GUI threads.
+    /// </summary>
+    SYNCPAINT = 0x0088,
+    /// <summary>
+    /// The WM_NCMOUSEMOVE message is posted to a window when the cursor is moved within the nonclient area of the window. This message is posted to the window that contains the cursor. If a window has captured the mouse, this message is not posted.
+    /// </summary>
+    NCMOUSEMOVE = 0x00A0,
+    /// <summary>
+    /// The WM_NCLBUTTONDOWN message is posted when the user presses the left mouse button while the cursor is within the nonclient area of a window. This message is posted to the window that contains the cursor. If a window has captured the mouse, this message is not posted.
+    /// </summary>
+    NCLBUTTONDOWN = 0x00A1,
+    /// <summary>
+    /// The WM_NCLBUTTONUP message is posted when the user releases the left mouse button while the cursor is within the nonclient area of a window. This message is posted to the window that contains the cursor. If a window has captured the mouse, this message is not posted.
+    /// </summary>
+    NCLBUTTONUP = 0x00A2,
+    /// <summary>
+    /// The WM_NCLBUTTONDBLCLK message is posted when the user double-clicks the left mouse button while the cursor is within the nonclient area of a window. This message is posted to the window that contains the cursor. If a window has captured the mouse, this message is not posted.
+    /// </summary>
+    NCLBUTTONDBLCLK = 0x00A3,
+    /// <summary>
+    /// The WM_NCRBUTTONDOWN message is posted when the user presses the right mouse button while the cursor is within the nonclient area of a window. This message is posted to the window that contains the cursor. If a window has captured the mouse, this message is not posted.
+    /// </summary>
+    NCRBUTTONDOWN = 0x00A4,
+    /// <summary>
+    /// The WM_NCRBUTTONUP message is posted when the user releases the right mouse button while the cursor is within the nonclient area of a window. This message is posted to the window that contains the cursor. If a window has captured the mouse, this message is not posted.
+    /// </summary>
+    NCRBUTTONUP = 0x00A5,
+    /// <summary>
+    /// The WM_NCRBUTTONDBLCLK message is posted when the user double-clicks the right mouse button while the cursor is within the nonclient area of a window. This message is posted to the window that contains the cursor. If a window has captured the mouse, this message is not posted.
+    /// </summary>
+    NCRBUTTONDBLCLK = 0x00A6,
+    /// <summary>
+    /// The WM_NCMBUTTONDOWN message is posted when the user presses the middle mouse button while the cursor is within the nonclient area of a window. This message is posted to the window that contains the cursor. If a window has captured the mouse, this message is not posted.
+    /// </summary>
+    NCMBUTTONDOWN = 0x00A7,
+    /// <summary>
+    /// The WM_NCMBUTTONUP message is posted when the user releases the middle mouse button while the cursor is within the nonclient area of a window. This message is posted to the window that contains the cursor. If a window has captured the mouse, this message is not posted.
+    /// </summary>
+    NCMBUTTONUP = 0x00A8,
+    /// <summary>
+    /// The WM_NCMBUTTONDBLCLK message is posted when the user double-clicks the middle mouse button while the cursor is within the nonclient area of a window. This message is posted to the window that contains the cursor. If a window has captured the mouse, this message is not posted.
+    /// </summary>
+    NCMBUTTONDBLCLK = 0x00A9,
+    /// <summary>
+    /// The WM_NCXBUTTONDOWN message is posted when the user presses the first or second X button while the cursor is in the nonclient area of a window. This message is posted to the window that contains the cursor. If a window has captured the mouse, this message is not posted.
+    /// </summary>
+    NCXBUTTONDOWN = 0x00AB,
+    /// <summary>
+    /// The WM_NCXBUTTONUP message is posted when the user releases the first or second X button while the cursor is in the nonclient area of a window. This message is posted to the window that contains the cursor. If a window has captured the mouse, this message is not posted.
+    /// </summary>
+    NCXBUTTONUP = 0x00AC,
+    /// <summary>
+    /// The WM_NCXBUTTONDBLCLK message is posted when the user double-clicks the first or second X button while the cursor is in the nonclient area of a window. This message is posted to the window that contains the cursor. If a window has captured the mouse, this message is not posted.
+    /// </summary>
+    NCXBUTTONDBLCLK = 0x00AD,
+    /// <summary>
+    /// The WM_INPUT_DEVICE_CHANGE message is sent to the window that registered to receive raw input. A window receives this message through its WindowProc function.
+    /// </summary>
+    INPUT_DEVICE_CHANGE = 0x00FE,
+    /// <summary>
+    /// The WM_INPUT message is sent to the window that is getting raw input.
+    /// </summary>
+    INPUT = 0x00FF,
+    /// <summary>
+    /// This message filters for keyboard messages.
+    /// </summary>
+    KEYFIRST = 0x0100,
+    /// <summary>
+    /// The WM_KEYDOWN message is posted to the window with the keyboard focus when a nonsystem key is pressed. A nonsystem key is a key that is pressed when the ALT key is not pressed.
+    /// </summary>
+    KEYDOWN = 0x0100,
+    /// <summary>
+    /// The WM_KEYUP message is posted to the window with the keyboard focus when a nonsystem key is released. A nonsystem key is a key that is pressed when the ALT key is not pressed, or a keyboard key that is pressed when a window has the keyboard focus.
+    /// </summary>
+    KEYUP = 0x0101,
+    /// <summary>
+    /// The WM_CHAR message is posted to the window with the keyboard focus when a WM_KEYDOWN message is translated by the TranslateMessage function. The WM_CHAR message contains the character code of the key that was pressed.
+    /// </summary>
+    CHAR = 0x0102,
+    /// <summary>
+    /// The WM_DEADCHAR message is posted to the window with the keyboard focus when a WM_KEYUP message is translated by the TranslateMessage function. WM_DEADCHAR specifies a character code generated by a dead key. A dead key is a key that generates a character, such as the umlaut (double-dot), that is combined with another character to form a composite character. For example, the umlaut-O character (Ö) is generated by typing the dead key for the umlaut character, and then typing the O key.
+    /// </summary>
+    DEADCHAR = 0x0103,
+    /// <summary>
+    /// The WM_SYSKEYDOWN message is posted to the window with the keyboard focus when the user presses the F10 key (which activates the menu bar) or holds down the ALT key and then presses another key. It also occurs when no window currently has the keyboard focus; in this case, the WM_SYSKEYDOWN message is sent to the active window. The window that receives the message can distinguish between these two contexts by checking the context code in the lParam parameter.
+    /// </summary>
+    SYSKEYDOWN = 0x0104,
+    /// <summary>
+    /// The WM_SYSKEYUP message is posted to the window with the keyboard focus when the user releases a key that was pressed while the ALT key was held down. It also occurs when no window currently has the keyboard focus; in this case, the WM_SYSKEYUP message is sent to the active window. The window that receives the message can distinguish between these two contexts by checking the context code in the lParam parameter.
+    /// </summary>
+    SYSKEYUP = 0x0105,
+    /// <summary>
+    /// The WM_SYSCHAR message is posted to the window with the keyboard focus when a WM_SYSKEYDOWN message is translated by the TranslateMessage function. It specifies the character code of a system character key — that is, a character key that is pressed while the ALT key is down.
+    /// </summary>
+    SYSCHAR = 0x0106,
+    /// <summary>
+    /// The WM_SYSDEADCHAR message is sent to the window with the keyboard focus when a WM_SYSKEYDOWN message is translated by the TranslateMessage function. WM_SYSDEADCHAR specifies the character code of a system dead key — that is, a dead key that is pressed while holding down the ALT key.
+    /// </summary>
+    SYSDEADCHAR = 0x0107,
+    /// <summary>
+    /// The WM_UNICHAR message is posted to the window with the keyboard focus when a WM_KEYDOWN message is translated by the TranslateMessage function. The WM_UNICHAR message contains the character code of the key that was pressed.
+    /// The WM_UNICHAR message is equivalent to WM_CHAR, but it uses Unicode Transformation Format (UTF)-32, whereas WM_CHAR uses UTF-16. It is designed to send or post Unicode characters to ANSI windows and it can can handle Unicode Supplementary Plane characters.
+    /// </summary>
+    UNICHAR = 0x0109,
+    /// <summary>
+    /// This message filters for keyboard messages.
+    /// </summary>
+    KEYLAST = 0x0109,
+    /// <summary>
+    /// Sent immediately before the IME generates the composition string as a result of a keystroke. A window receives this message through its WindowProc function.
+    /// </summary>
+    IME_STARTCOMPOSITION = 0x010D,
+    /// <summary>
+    /// Sent to an application when the IME ends composition. A window receives this message through its WindowProc function.
+    /// </summary>
+    IME_ENDCOMPOSITION = 0x010E,
+    /// <summary>
+    /// Sent to an application when the IME changes composition status as a result of a keystroke. A window receives this message through its WindowProc function.
+    /// </summary>
+    IME_COMPOSITION = 0x010F,
+    IME_KEYLAST = 0x010F,
+    /// <summary>
+    /// The WM_INITDIALOG message is sent to the dialog box procedure immediately before a dialog box is displayed. Dialog box procedures typically use this message to initialize controls and carry out any other initialization tasks that affect the appearance of the dialog box.
+    /// </summary>
+    INITDIALOG = 0x0110,
+    /// <summary>
+    /// The WM_COMMAND message is sent when the user selects a command item from a menu, when a control sends a notification message to its parent window, or when an accelerator keystroke is translated.
+    /// </summary>
+    COMMAND = 0x0111,
+    /// <summary>
+    /// A window receives this message when the user chooses a command from the Window menu, clicks the maximize button, minimize button, restore button, close button, or moves the form. You can stop the form from moving by filtering this out.
+    /// </summary>
+    SYSCOMMAND = 0x0112,
+    /// <summary>
+    /// The WM_TIMER message is posted to the installing thread's message queue when a timer expires. The message is posted by the GetMessage or PeekMessage function.
+    /// </summary>
+    TIMER = 0x0113,
+    /// <summary>
+    /// The WM_HSCROLL message is sent to a window when a scroll event occurs in the window's standard horizontal scroll bar. This message is also sent to the owner of a horizontal scroll bar control when a scroll event occurs in the control.
+    /// </summary>
+    HSCROLL = 0x0114,
+    /// <summary>
+    /// The WM_VSCROLL message is sent to a window when a scroll event occurs in the window's standard vertical scroll bar. This message is also sent to the owner of a vertical scroll bar control when a scroll event occurs in the control.
+    /// </summary>
+    VSCROLL = 0x0115,
+    /// <summary>
+    /// The WM_INITMENU message is sent when a menu is about to become active. It occurs when the user clicks an item on the menu bar or presses a menu key. This allows the application to modify the menu before it is displayed.
+    /// </summary>
+    INITMENU = 0x0116,
+    /// <summary>
+    /// The WM_INITMENUPOPUP message is sent when a drop-down menu or submenu is about to become active. This allows an application to modify the menu before it is displayed, without changing the entire menu.
+    /// </summary>
+    INITMENUPOPUP = 0x0117,
+    /// <summary>
+    /// The WM_MENUSELECT message is sent to a menu's owner window when the user selects a menu item.
+    /// </summary>
+    MENUSELECT = 0x011F,
+    /// <summary>
+    /// The WM_MENUCHAR message is sent when a menu is active and the user presses a key that does not correspond to any mnemonic or accelerator key. This message is sent to the window that owns the menu.
+    /// </summary>
+    MENUCHAR = 0x0120,
+    /// <summary>
+    /// The WM_ENTERIDLE message is sent to the owner window of a modal dialog box or menu that is entering an idle state. A modal dialog box or menu enters an idle state when no messages are waiting in its queue after it has processed one or more previous messages.
+    /// </summary>
+    ENTERIDLE = 0x0121,
+    /// <summary>
+    /// The WM_MENURBUTTONUP message is sent when the user releases the right mouse button while the cursor is on a menu item.
+    /// </summary>
+    MENURBUTTONUP = 0x0122,
+    /// <summary>
+    /// The WM_MENUDRAG message is sent to the owner of a drag-and-drop menu when the user drags a menu item.
+    /// </summary>
+    MENUDRAG = 0x0123,
+    /// <summary>
+    /// The WM_MENUGETOBJECT message is sent to the owner of a drag-and-drop menu when the mouse cursor enters a menu item or moves from the center of the item to the top or bottom of the item.
+    /// </summary>
+    MENUGETOBJECT = 0x0124,
+    /// <summary>
+    /// The WM_UNINITMENUPOPUP message is sent when a drop-down menu or submenu has been destroyed.
+    /// </summary>
+    UNINITMENUPOPUP = 0x0125,
+    /// <summary>
+    /// The WM_MENUCOMMAND message is sent when the user makes a selection from a menu.
+    /// </summary>
+    MENUCOMMAND = 0x0126,
+    /// <summary>
+    /// An application sends the WM_CHANGEUISTATE message to indicate that the user interface (UI) state should be changed.
+    /// </summary>
+    CHANGEUISTATE = 0x0127,
+    /// <summary>
+    /// An application sends the WM_UPDATEUISTATE message to change the user interface (UI) state for the specified window and all its child windows.
+    /// </summary>
+    UPDATEUISTATE = 0x0128,
+    /// <summary>
+    /// An application sends the WM_QUERYUISTATE message to retrieve the user interface (UI) state for a window.
+    /// </summary>
+    QUERYUISTATE = 0x0129,
+    /// <summary>
+    /// The WM_CTLCOLORMSGBOX message is sent to the owner window of a message box before Windows draws the message box. By responding to this message, the owner window can set the text and background colors of the message box by using the given display device context handle.
+    /// </summary>
+    CTLCOLORMSGBOX = 0x0132,
+    /// <summary>
+    /// An edit control that is not read-only or disabled sends the WM_CTLCOLOREDIT message to its parent window when the control is about to be drawn. By responding to this message, the parent window can use the specified device context handle to set the text and background colors of the edit control.
+    /// </summary>
+    CTLCOLOREDIT = 0x0133,
+    /// <summary>
+    /// Sent to the parent window of a list box before the system draws the list box. By responding to this message, the parent window can set the text and background colors of the list box by using the specified display device context handle.
+    /// </summary>
+    CTLCOLORLISTBOX = 0x0134,
+    /// <summary>
+    /// The WM_CTLCOLORBTN message is sent to the parent window of a button before drawing the button. The parent window can change the button's text and background colors. However, only owner-drawn buttons respond to the parent window processing this message.
+    /// </summary>
+    CTLCOLORBTN = 0x0135,
+    /// <summary>
+    /// The WM_CTLCOLORDLG message is sent to a dialog box before the system draws the dialog box. By responding to this message, the dialog box can set its text and background colors using the specified display device context handle.
+    /// </summary>
+    CTLCOLORDLG = 0x0136,
+    /// <summary>
+    /// The WM_CTLCOLORSCROLLBAR message is sent to the parent window of a scroll bar control when the control is about to be drawn. By responding to this message, the parent window can use the display context handle to set the background color of the scroll bar control.
+    /// </summary>
+    CTLCOLORSCROLLBAR = 0x0137,
+    /// <summary>
+    /// A static control, or an edit control that is read-only or disabled, sends the WM_CTLCOLORSTATIC message to its parent window when the control is about to be drawn. By responding to this message, the parent window can use the specified device context handle to set the text and background colors of the static control.
+    /// </summary>
+    CTLCOLORSTATIC = 0x0138,
+    /// <summary>
+    /// Use WM_MOUSEFIRST to specify the first mouse message. Use the PeekMessage() Function.
+    /// </summary>
+    MOUSEFIRST = 0x0200,
+    /// <summary>
+    /// The WM_MOUSEMOVE message is posted to a window when the cursor moves. If the mouse is not captured, the message is posted to the window that contains the cursor. Otherwise, the message is posted to the window that has captured the mouse.
+    /// </summary>
+    MOUSEMOVE = 0x0200,
+    /// <summary>
+    /// The WM_LBUTTONDOWN message is posted when the user presses the left mouse button while the cursor is in the client area of a window. If the mouse is not captured, the message is posted to the window beneath the cursor. Otherwise, the message is posted to the window that has captured the mouse.
+    /// </summary>
+    LBUTTONDOWN = 0x0201,
+    /// <summary>
+    /// The WM_LBUTTONUP message is posted when the user releases the left mouse button while the cursor is in the client area of a window. If the mouse is not captured, the message is posted to the window beneath the cursor. Otherwise, the message is posted to the window that has captured the mouse.
+    /// </summary>
+    LBUTTONUP = 0x0202,
+    /// <summary>
+    /// The WM_LBUTTONDBLCLK message is posted when the user double-clicks the left mouse button while the cursor is in the client area of a window. If the mouse is not captured, the message is posted to the window beneath the cursor. Otherwise, the message is posted to the window that has captured the mouse.
+    /// </summary>
+    LBUTTONDBLCLK = 0x0203,
+    /// <summary>
+    /// The WM_RBUTTONDOWN message is posted when the user presses the right mouse button while the cursor is in the client area of a window. If the mouse is not captured, the message is posted to the window beneath the cursor. Otherwise, the message is posted to the window that has captured the mouse.
+    /// </summary>
+    RBUTTONDOWN = 0x0204,
+    /// <summary>
+    /// The WM_RBUTTONUP message is posted when the user releases the right mouse button while the cursor is in the client area of a window. If the mouse is not captured, the message is posted to the window beneath the cursor. Otherwise, the message is posted to the window that has captured the mouse.
+    /// </summary>
+    RBUTTONUP = 0x0205,
+    /// <summary>
+    /// The WM_RBUTTONDBLCLK message is posted when the user double-clicks the right mouse button while the cursor is in the client area of a window. If the mouse is not captured, the message is posted to the window beneath the cursor. Otherwise, the message is posted to the window that has captured the mouse.
+    /// </summary>
+    RBUTTONDBLCLK = 0x0206,
+    /// <summary>
+    /// The WM_MBUTTONDOWN message is posted when the user presses the middle mouse button while the cursor is in the client area of a window. If the mouse is not captured, the message is posted to the window beneath the cursor. Otherwise, the message is posted to the window that has captured the mouse.
+    /// </summary>
+    MBUTTONDOWN = 0x0207,
+    /// <summary>
+    /// The WM_MBUTTONUP message is posted when the user releases the middle mouse button while the cursor is in the client area of a window. If the mouse is not captured, the message is posted to the window beneath the cursor. Otherwise, the message is posted to the window that has captured the mouse.
+    /// </summary>
+    MBUTTONUP = 0x0208,
+    /// <summary>
+    /// The WM_MBUTTONDBLCLK message is posted when the user double-clicks the middle mouse button while the cursor is in the client area of a window. If the mouse is not captured, the message is posted to the window beneath the cursor. Otherwise, the message is posted to the window that has captured the mouse.
+    /// </summary>
+    MBUTTONDBLCLK = 0x0209,
+    /// <summary>
+    /// The WM_MOUSEWHEEL message is sent to the focus window when the mouse wheel is rotated. The DefWindowProc function propagates the message to the window's parent. There should be no internal forwarding of the message, since DefWindowProc propagates it up the parent chain until it finds a window that processes it.
+    /// </summary>
+    MOUSEWHEEL = 0x020A,
+    /// <summary>
+    /// The WM_XBUTTONDOWN message is posted when the user presses the first or second X button while the cursor is in the client area of a window. If the mouse is not captured, the message is posted to the window beneath the cursor. Otherwise, the message is posted to the window that has captured the mouse.
+   /// </summary>
+    XBUTTONDOWN = 0x020B,
+    /// <summary>
+    /// The WM_XBUTTONUP message is posted when the user releases the first or second X button while the cursor is in the client area of a window. If the mouse is not captured, the message is posted to the window beneath the cursor. Otherwise, the message is posted to the window that has captured the mouse.
+    /// </summary>
+    XBUTTONUP = 0x020C,
+    /// <summary>
+    /// The WM_XBUTTONDBLCLK message is posted when the user double-clicks the first or second X button while the cursor is in the client area of a window. If the mouse is not captured, the message is posted to the window beneath the cursor. Otherwise, the message is posted to the window that has captured the mouse.
+    /// </summary>
+    XBUTTONDBLCLK = 0x020D,
+    /// <summary>
+    /// The WM_MOUSEHWHEEL message is sent to the focus window when the mouse's horizontal scroll wheel is tilted or rotated. The DefWindowProc function propagates the message to the window's parent. There should be no internal forwarding of the message, since DefWindowProc propagates it up the parent chain until it finds a window that processes it.
+    /// </summary>
+    MOUSEHWHEEL = 0x020E,
+    /// <summary>
+    /// Use WM_MOUSELAST to specify the last mouse message. Used with PeekMessage() Function.
+    /// </summary>
+    MOUSELAST = 0x020E,
+    /// <summary>
+    /// The WM_PARENTNOTIFY message is sent to the parent of a child window when the child window is created or destroyed, or when the user clicks a mouse button while the cursor is over the child window. When the child window is being created, the system sends WM_PARENTNOTIFY just before the CreateWindow or CreateWindowEx function that creates the window returns. When the child window is being destroyed, the system sends the message before any processing to destroy the window takes place.
+    /// </summary>
+    PARENTNOTIFY = 0x0210,
+    /// <summary>
+    /// The WM_ENTERMENULOOP message informs an application's main window procedure that a menu modal loop has been entered.
+    /// </summary>
+    ENTERMENULOOP = 0x0211,
+    /// <summary>
+    /// The WM_EXITMENULOOP message informs an application's main window procedure that a menu modal loop has been exited.
+    /// </summary>
+    EXITMENULOOP = 0x0212,
+    /// <summary>
+    /// The WM_NEXTMENU message is sent to an application when the right or left arrow key is used to switch between the menu bar and the system menu.
+    /// </summary>
+    NEXTMENU = 0x0213,
+    /// <summary>
+    /// The WM_SIZING message is sent to a window that the user is resizing. By processing this message, an application can monitor the size and position of the drag rectangle and, if needed, change its size or position.
+    /// </summary>
+    SIZING = 0x0214,
+    /// <summary>
+    /// The WM_CAPTURECHANGED message is sent to the window that is losing the mouse capture.
+    /// </summary>
+    CAPTURECHANGED = 0x0215,
+    /// <summary>
+    /// The WM_MOVING message is sent to a window that the user is moving. By processing this message, an application can monitor the position of the drag rectangle and, if needed, change its position.
+    /// </summary>
+    MOVING = 0x0216,
+    /// <summary>
+    /// Notifies applications that a power-management event has occurred.
+    /// </summary>
+    POWERBROADCAST = 0x0218,
+    /// <summary>
+    /// Notifies an application of a change to the hardware configuration of a device or the computer.
+    /// </summary>
+    DEVICECHANGE = 0x0219,
+    /// <summary>
+    /// An application sends the WM_MDICREATE message to a multiple-document interface (MDI) client window to create an MDI child window.
+    /// </summary>
+    MDICREATE = 0x0220,
+    /// <summary>
+    /// An application sends the WM_MDIDESTROY message to a multiple-document interface (MDI) client window to close an MDI child window.
+    /// </summary>
+    MDIDESTROY = 0x0221,
+    /// <summary>
+    /// An application sends the WM_MDIACTIVATE message to a multiple-document interface (MDI) client window to instruct the client window to activate a different MDI child window.
+    /// </summary>
+    MDIACTIVATE = 0x0222,
+    /// <summary>
+    /// An application sends the WM_MDIRESTORE message to a multiple-document interface (MDI) client window to restore an MDI child window from maximized or minimized size.
+    /// </summary>
+    MDIRESTORE = 0x0223,
+    /// <summary>
+    /// An application sends the WM_MDINEXT message to a multiple-document interface (MDI) client window to activate the next or previous child window.
+    /// </summary>
+    MDINEXT = 0x0224,
+    /// <summary>
+    /// An application sends the WM_MDIMAXIMIZE message to a multiple-document interface (MDI) client window to maximize an MDI child window. The system resizes the child window to make its client area fill the client window. The system places the child window's window menu icon in the rightmost position of the frame window's menu bar, and places the child window's restore icon in the leftmost position. The system also appends the title bar text of the child window to that of the frame window.
+    /// </summary>
+    MDIMAXIMIZE = 0x0225,
+    /// <summary>
+    /// An application sends the WM_MDITILE message to a multiple-document interface (MDI) client window to arrange all of its MDI child windows in a tile format.
+    /// </summary>
+    MDITILE = 0x0226,
+    /// <summary>
+    /// An application sends the WM_MDICASCADE message to a multiple-document interface (MDI) client window to arrange all its child windows in a cascade format.
+    /// </summary>
+    MDICASCADE = 0x0227,
+    /// <summary>
+    /// An application sends the WM_MDIICONARRANGE message to a multiple-document interface (MDI) client window to arrange all minimized MDI child windows. It does not affect child windows that are not minimized.
+    /// </summary>
+    MDIICONARRANGE = 0x0228,
+    /// <summary>
+    /// An application sends the WM_MDIGETACTIVE message to a multiple-document interface (MDI) client window to retrieve the handle to the active MDI child window.
+    /// </summary>
+    MDIGETACTIVE = 0x0229,
+    /// <summary>
+    /// An application sends the WM_MDISETMENU message to a multiple-document interface (MDI) client window to replace the entire menu of an MDI frame window, to replace the window menu of the frame window, or both.
+    /// </summary>
+    MDISETMENU = 0x0230,
+    /// <summary>
+    /// The WM_ENTERSIZEMOVE message is sent one time to a window after it enters the moving or sizing modal loop. The window enters the moving or sizing modal loop when the user clicks the window's title bar or sizing border, or when the window passes the WM_SYSCOMMAND message to the DefWindowProc function and the wParam parameter of the message specifies the SC_MOVE or SC_SIZE value. The operation is complete when DefWindowProc returns.
+    /// The system sends the WM_ENTERSIZEMOVE message regardless of whether the dragging of full windows is enabled.
+    /// </summary>
+    ENTERSIZEMOVE = 0x0231,
+    /// <summary>
+    /// The WM_EXITSIZEMOVE message is sent one time to a window, after it has exited the moving or sizing modal loop. The window enters the moving or sizing modal loop when the user clicks the window's title bar or sizing border, or when the window passes the WM_SYSCOMMAND message to the DefWindowProc function and the wParam parameter of the message specifies the SC_MOVE or SC_SIZE value. The operation is complete when DefWindowProc returns.
+    /// </summary>
+    EXITSIZEMOVE = 0x0232,
+    /// <summary>
+    /// Sent when the user drops a file on the window of an application that has registered itself as a recipient of dropped files.
+    /// </summary>
+    DROPFILES = 0x0233,
+    /// <summary>
+    /// An application sends the WM_MDIREFRESHMENU message to a multiple-document interface (MDI) client window to refresh the window menu of the MDI frame window.
+    /// </summary>
+    MDIREFRESHMENU = 0x0234,
+    /// <summary>
+    /// Sent to an application when a window is activated. A window receives this message through its WindowProc function.
+    /// </summary>
+    IME_SETCONTEXT = 0x0281,
+    /// <summary>
+    /// Sent to an application to notify it of changes to the IME window. A window receives this message through its WindowProc function.
+    /// </summary>
+    IME_NOTIFY = 0x0282,
+    /// <summary>
+    /// Sent by an application to direct the IME window to carry out the requested command. The application uses this message to control the IME window that it has created. To send this message, the application calls the SendMessage function with the following parameters.
+    /// </summary>
+    IME_CONTROL = 0x0283,
+    /// <summary>
+    /// Sent to an application when the IME window finds no space to extend the area for the composition window. A window receives this message through its WindowProc function.
+    /// </summary>
+    IME_COMPOSITIONFULL = 0x0284,
+    /// <summary>
+    /// Sent to an application when the operating system is about to change the current IME. A window receives this message through its WindowProc function.
+    /// </summary>
+    IME_SELECT = 0x0285,
+    /// <summary>
+    /// Sent to an application when the IME gets a character of the conversion result. A window receives this message through its WindowProc function.
+    /// </summary>
+    IME_CHAR = 0x0286,
+    /// <summary>
+    /// Sent to an application to provide commands and request information. A window receives this message through its WindowProc function.
+    /// </summary>
+    IME_REQUEST = 0x0288,
+    /// <summary>
+    /// Sent to an application by the IME to notify the application of a key press and to keep message order. A window receives this message through its WindowProc function.
+    /// </summary>
+    IME_KEYDOWN = 0x0290,
+    /// <summary>
+    /// Sent to an application by the IME to notify the application of a key release and to keep message order. A window receives this message through its WindowProc function.
+    /// </summary>
+    IME_KEYUP = 0x0291,
+    /// <summary>
+    /// The WM_MOUSEHOVER message is posted to a window when the cursor hovers over the client area of the window for the period of time specified in a prior call to TrackMouseEvent.
+    /// </summary>
+    MOUSEHOVER = 0x02A1,
+    /// <summary>
+    /// The WM_MOUSELEAVE message is posted to a window when the cursor leaves the client area of the window specified in a prior call to TrackMouseEvent.
+    /// </summary>
+    MOUSELEAVE = 0x02A3,
+    /// <summary>
+    /// The WM_NCMOUSEHOVER message is posted to a window when the cursor hovers over the nonclient area of the window for the period of time specified in a prior call to TrackMouseEvent.
+    /// </summary>
+    NCMOUSEHOVER = 0x02A0,
+    /// <summary>
+    /// The WM_NCMOUSELEAVE message is posted to a window when the cursor leaves the nonclient area of the window specified in a prior call to TrackMouseEvent.
+    /// </summary>
+    NCMOUSELEAVE = 0x02A2,
+    /// <summary>
+    /// The WM_WTSSESSION_CHANGE message notifies applications of changes in session state.
+    /// </summary>
+    WTSSESSION_CHANGE = 0x02B1,
+    TABLET_FIRST = 0x02c0,
+    TABLET_LAST = 0x02df,
+    /// <summary>
+    /// An application sends a WM_CUT message to an edit control or combo box to delete (cut) the current selection, if any, in the edit control and copy the deleted text to the clipboard in CF_TEXT format.
+    /// </summary>
+    CUT = 0x0300,
+    /// <summary>
+    /// An application sends the WM_COPY message to an edit control or combo box to copy the current selection to the clipboard in CF_TEXT format.
+    /// </summary>
+    COPY = 0x0301,
+    /// <summary>
+    /// An application sends a WM_PASTE message to an edit control or combo box to copy the current content of the clipboard to the edit control at the current caret position. Data is inserted only if the clipboard contains data in CF_TEXT format.
+    /// </summary>
+    PASTE = 0x0302,
+    /// <summary>
+    /// An application sends a WM_CLEAR message to an edit control or combo box to delete (clear) the current selection, if any, from the edit control.
+    /// </summary>
+    CLEAR = 0x0303,
+    /// <summary>
+    /// An application sends a WM_UNDO message to an edit control to undo the last operation. When this message is sent to an edit control, the previously deleted text is restored or the previously added text is deleted.
+    /// </summary>
+    UNDO = 0x0304,
+    /// <summary>
+    /// The WM_RENDERFORMAT message is sent to the clipboard owner if it has delayed rendering a specific clipboard format and if an application has requested data in that format. The clipboard owner must render data in the specified format and place it on the clipboard by calling the SetClipboardData function.
+    /// </summary>
+    RENDERFORMAT = 0x0305,
+    /// <summary>
+    /// The WM_RENDERALLFORMATS message is sent to the clipboard owner before it is destroyed, if the clipboard owner has delayed rendering one or more clipboard formats. For the content of the clipboard to remain available to other applications, the clipboard owner must render data in all the formats it is capable of generating, and place the data on the clipboard by calling the SetClipboardData function.
+    /// </summary>
+    RENDERALLFORMATS = 0x0306,
+    /// <summary>
+    /// The WM_DESTROYCLIPBOARD message is sent to the clipboard owner when a call to the EmptyClipboard function empties the clipboard.
+    /// </summary>
+    DESTROYCLIPBOARD = 0x0307,
+    /// <summary>
+    /// The WM_DRAWCLIPBOARD message is sent to the first window in the clipboard viewer chain when the content of the clipboard changes. This enables a clipboard viewer window to display the new content of the clipboard.
+    /// </summary>
+    DRAWCLIPBOARD = 0x0308,
+    /// <summary>
+    /// The WM_PAINTCLIPBOARD message is sent to the clipboard owner by a clipboard viewer window when the clipboard contains data in the CF_OWNERDISPLAY format and the clipboard viewer's client area needs repainting.
+    /// </summary>
+    PAINTCLIPBOARD = 0x0309,
+    /// <summary>
+    /// The WM_VSCROLLCLIPBOARD message is sent to the clipboard owner by a clipboard viewer window when the clipboard contains data in the CF_OWNERDISPLAY format and an event occurs in the clipboard viewer's vertical scroll bar. The owner should scroll the clipboard image and update the scroll bar values.
+    /// </summary>
+    VSCROLLCLIPBOARD = 0x030A,
+    /// <summary>
+    /// The WM_SIZECLIPBOARD message is sent to the clipboard owner by a clipboard viewer window when the clipboard contains data in the CF_OWNERDISPLAY format and the clipboard viewer's client area has changed size.
+    /// </summary>
+    SIZECLIPBOARD = 0x030B,
+    /// <summary>
+    /// The WM_ASKCBFORMATNAME message is sent to the clipboard owner by a clipboard viewer window to request the name of a CF_OWNERDISPLAY clipboard format.
+    /// </summary>
+    ASKCBFORMATNAME = 0x030C,
+    /// <summary>
+    /// The WM_CHANGECBCHAIN message is sent to the first window in the clipboard viewer chain when a window is being removed from the chain.
+    /// </summary>
+    CHANGECBCHAIN = 0x030D,
+    /// <summary>
+    /// The WM_HSCROLLCLIPBOARD message is sent to the clipboard owner by a clipboard viewer window. This occurs when the clipboard contains data in the CF_OWNERDISPLAY format and an event occurs in the clipboard viewer's horizontal scroll bar. The owner should scroll the clipboard image and update the scroll bar values.
+    /// </summary>
+    HSCROLLCLIPBOARD = 0x030E,
+    /// <summary>
+    /// This message informs a window that it is about to receive the keyboard focus, giving the window the opportunity to realize its logical palette when it receives the focus.
+    /// </summary>
+    QUERYNEWPALETTE = 0x030F,
+    /// <summary>
+    /// The WM_PALETTEISCHANGING message informs applications that an application is going to realize its logical palette.
+    /// </summary>
+    PALETTEISCHANGING = 0x0310,
+    /// <summary>
+    /// This message is sent by the OS to all top-level and overlapped windows after the window with the keyboard focus realizes its logical palette.
+    /// This message enables windows that do not have the keyboard focus to realize their logical palettes and update their client areas.
+    /// </summary>
+    PALETTECHANGED = 0x0311,
+    /// <summary>
+    /// The WM_HOTKEY message is posted when the user presses a hot key registered by the RegisterHotKey function. The message is placed at the top of the message queue associated with the thread that registered the hot key.
+    /// </summary>
+    HOTKEY = 0x0312,
+    /// <summary>
+    /// The WM_PRINT message is sent to a window to request that it draw itself in the specified device context, most commonly in a printer device context.
+    /// </summary>
+    PRINT = 0x0317,
+    /// <summary>
+    /// The WM_PRINTCLIENT message is sent to a window to request that it draw its client area in the specified device context, most commonly in a printer device context.
+    /// </summary>
+    PRINTCLIENT = 0x0318,
+    /// <summary>
+    /// The WM_APPCOMMAND message notifies a window that the user generated an application command event, for example, by clicking an application command button using the mouse or typing an application command key on the keyboard.
+    /// </summary>
+    APPCOMMAND = 0x0319,
+    /// <summary>
+    /// The WM_THEMECHANGED message is broadcast to every window following a theme change event. Examples of theme change events are the activation of a theme, the deactivation of a theme, or a transition from one theme to another.
+    /// </summary>
+    THEMECHANGED = 0x031A,
+    /// <summary>
+    /// Sent when the contents of the clipboard have changed.
+    /// </summary>
+    CLIPBOARDUPDATE = 0x031D,
+    /// <summary>
+    /// The system will send a window the WM_DWMCOMPOSITIONCHANGED message to indicate that the availability of desktop composition has changed.
+    /// </summary>
+    DWMCOMPOSITIONCHANGED = 0x031E,
+    /// <summary>
+    /// WM_DWMNCRENDERINGCHANGED is called when the non-client area rendering status of a window has changed. Only windows that have set the flag DWM_BLURBEHIND.fTransitionOnMaximized to true will get this message.
+    /// </summary>
+    DWMNCRENDERINGCHANGED = 0x031F,
+    /// <summary>
+    /// Sent to all top-level windows when the colorization color has changed.
+    /// </summary>
+    DWMCOLORIZATIONCOLORCHANGED = 0x0320,
+    /// <summary>
+    /// WM_DWMWINDOWMAXIMIZEDCHANGE will let you know when a DWM composed window is maximized. You also have to register for this message as well. You'd have other windowd go opaque when this message is sent.
+    /// </summary>
+    DWMWINDOWMAXIMIZEDCHANGE = 0x0321,
+    /// <summary>
+    /// Sent to request extended title bar information. A window receives this message through its WindowProc function.
+    /// </summary>
+    GETTITLEBARINFOEX = 0x033F,
+    HANDHELDFIRST = 0x0358,
+    HANDHELDLAST = 0x035F,
+    AFXFIRST = 0x0360,
+    AFXLAST = 0x037F,
+    PENWINFIRST = 0x0380,
+    PENWINLAST = 0x038F,
+    /// <summary>
+    /// The WM_APP constant is used by applications to help define private messages, usually of the form WM_APP+X, where X is an integer value.
+    /// </summary>
+    APP = 0x8000,
+    /// <summary>
+    /// The WM_USER constant is used by applications to help define private messages for use by private window classes, usually of the form WM_USER+X, where X is an integer value.
+    /// </summary>
+    USER = 0x0400,
+
+    /// <summary>
+    /// An application sends the WM_CPL_LAUNCH message to Windows Control Panel to request that a Control Panel application be started.
+    /// </summary>
+    CPL_LAUNCH = USER+0x1000,
+    /// <summary>
+    /// The WM_CPL_LAUNCHED message is sent when a Control Panel application, started by the WM_CPL_LAUNCH message, has closed. The WM_CPL_LAUNCHED message is sent to the window identified by the wParam parameter of the WM_CPL_LAUNCH message that started the application.
+    /// </summary>
+    CPL_LAUNCHED = USER+0x1001,
+    /// <summary>
+    /// WM_SYSTIMER is a well-known yet still undocumented message. Windows uses WM_SYSTIMER for internal actions like scrolling.
+    /// </summary>
+    SYSTIMER = 0x118,
+
+    /// <summary>
+    /// The accessibility state has changed.
+    /// </summary>
+    HSHELL_ACCESSIBILITYSTATE = 11,
+    /// <summary>
+    /// The shell should activate its main window.
+    /// </summary>
+    HSHELL_ACTIVATESHELLWINDOW = 3,
+    /// <summary>
+    /// The user completed an input event (for example, pressed an application command button on the mouse or an application command key on the keyboard), and the application did not handle the WM_APPCOMMAND message generated by that input.
+    /// If the Shell procedure handles the WM_COMMAND message, it should not call CallNextHookEx. See the Return Value section for more information.
+    /// </summary>
+    HSHELL_APPCOMMAND = 12,
+    /// <summary>
+    /// A window is being minimized or maximized. The system needs the coordinates of the minimized rectangle for the window.
+    /// </summary>
+    HSHELL_GETMINRECT = 5,
+    /// <summary>
+    /// Keyboard language was changed or a new keyboard layout was loaded.
+    /// </summary>
+    HSHELL_LANGUAGE = 8,
+    /// <summary>
+    /// The title of a window in the task bar has been redrawn.
+    /// </summary>
+    HSHELL_REDRAW = 6,
+    /// <summary>
+    /// The user has selected the task list. A shell application that provides a task list should return TRUE to prevent Windows from starting its task list.
+    /// </summary>
+    HSHELL_TASKMAN = 7,
+    /// <summary>
+    /// A top-level, unowned window has been created. The window exists when the system calls this hook.
+    /// </summary>
+    HSHELL_WINDOWCREATED = 1,
+    /// <summary>
+    /// A top-level, unowned window is about to be destroyed. The window still exists when the system calls this hook.
+    /// </summary>
+    HSHELL_WINDOWDESTROYED = 2,
+    /// <summary>
+    /// The activation has changed to a different top-level, unowned window.
+    /// </summary>
+    HSHELL_WINDOWACTIVATED = 4,
+    /// <summary>
+    /// A top-level window is being replaced. The window exists when the system calls this hook.
+    /// </summary>
+    HSHELL_WINDOWREPLACED = 13
+}
+
+/// <summary>
+/// Window Styles.
+/// The following styles can be specified wherever a window style is required. After the control has been created, these styles cannot be modified, except as noted.
+/// </summary>
+[Flags()]
+public enum WindowStyles : uint
+{
+    /// <summary>The window has a thin-line border.</summary>
+    WS_BORDER = 0x800000,
+
+    /// <summary>The window has a title bar (includes the WS_BORDER style).</summary>
+    WS_CAPTION = 0xc00000,
+
+    /// <summary>The window is a child window. A window with this style cannot have a menu bar. This style cannot be used with the WS_POPUP style.</summary>
+    WS_CHILD = 0x40000000,
+
+    /// <summary>Excludes the area occupied by child windows when drawing occurs within the parent window. This style is used when creating the parent window.</summary>
+    WS_CLIPCHILDREN = 0x2000000,
+
+    /// <summary>
+    /// Clips child windows relative to each other; that is, when a particular child window receives a WM_PAINT message, the WS_CLIPSIBLINGS style clips all other overlapping child windows out of the region of the child window to be updated.
+    /// If WS_CLIPSIBLINGS is not specified and child windows overlap, it is possible, when drawing within the client area of a child window, to draw within the client area of a neighboring child window.
+    /// </summary>
+    WS_CLIPSIBLINGS = 0x4000000,
+
+    /// <summary>The window is initially disabled. A disabled window cannot receive input from the user. To change this after a window has been created, use the EnableWindow function.</summary>
+    WS_DISABLED = 0x8000000,
+
+    /// <summary>The window has a border of a style typically used with dialog boxes. A window with this style cannot have a title bar.</summary>
+    WS_DLGFRAME = 0x400000,
+
+    /// <summary>
+    /// The window is the first control of a group of controls. The group consists of this first control and all controls defined after it, up to the next control with the WS_GROUP style.
+    /// The first control in each group usually has the WS_TABSTOP style so that the user can move from group to group. The user can subsequently change the keyboard focus from one control in the group to the next control in the group by using the direction keys.
+    /// You can turn this style on and off to change dialog box navigation. To change this style after a window has been created, use the SetWindowLong function.
+    /// </summary>
+    WS_GROUP = 0x20000,
+
+    /// <summary>The window has a horizontal scroll bar.</summary>
+    WS_HSCROLL = 0x100000,
+
+    /// <summary>The window is initially maximized.</summary>
+    WS_MAXIMIZE = 0x1000000,
+
+    /// <summary>The window has a maximize button. Cannot be combined with the WS_EX_CONTEXTHELP style. The WS_SYSMENU style must also be specified.</summary>
+    WS_MAXIMIZEBOX = 0x10000,
+
+    /// <summary>The window is initially minimized.</summary>
+    WS_MINIMIZE = 0x20000000,
+
+    /// <summary>The window has a minimize button. Cannot be combined with the WS_EX_CONTEXTHELP style. The WS_SYSMENU style must also be specified.</summary>
+    WS_MINIMIZEBOX = 0x20000,
+
+    /// <summary>The window is an overlapped window. An overlapped window has a title bar and a border.</summary>
+    WS_OVERLAPPED = 0x0,
+
+    /// <summary>The window is an overlapped window.</summary>
+    WS_OVERLAPPEDWINDOW = WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_SIZEFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX,
+
+    /// <summary>The window is a pop-up window. This style cannot be used with the WS_CHILD style.</summary>
+    WS_POPUP = 0x80000000u,
+
+    /// <summary>The window is a pop-up window. The WS_CAPTION and WS_POPUPWINDOW styles must be combined to make the window menu visible.</summary>
+    WS_POPUPWINDOW = WS_POPUP | WS_BORDER | WS_SYSMENU,
+
+    /// <summary>The window has a sizing border.</summary>
+    WS_SIZEFRAME = 0x40000,
+
+    /// <summary>The window has a window menu on its title bar. The WS_CAPTION style must also be specified.</summary>
+    WS_SYSMENU = 0x80000,
+
+    /// <summary>
+    /// The window is a control that can receive the keyboard focus when the user presses the TAB key.
+    /// Pressing the TAB key changes the keyboard focus to the next control with the WS_TABSTOP style.  
+    /// You can turn this style on and off to change dialog box navigation. To change this style after a window has been created, use the SetWindowLong function.
+    /// For user-created windows and modeless dialogs to work with tab stops, alter the message loop to call the IsDialogMessage function.
+    /// </summary>
+    WS_TABSTOP = 0x10000,
+
+    /// <summary>The window is initially visible. This style can be turned on and off by using the ShowWindow or SetWindowPos function.</summary>
+    WS_VISIBLE = 0x10000000,
+
+    /// <summary>The window has a vertical scroll bar.</summary>
+    WS_VSCROLL = 0x200000
+}
+
+[Flags]
+public enum WindowStylesEx : uint
+{
+    /// <summary>
+    /// Specifies that a window created with this style accepts drag-drop files.
+    /// </summary>
+    WS_EX_ACCEPTFILES = 0x00000010,
+    /// <summary>
+    /// Forces a top-level window onto the taskbar when the window is visible.
+    /// </summary>
+    WS_EX_APPWINDOW = 0x00040000,
+    /// <summary>
+    /// Specifies that a window has a border with a sunken edge.
+    /// </summary>
+    WS_EX_CLIENTEDGE = 0x00000200,
+    /// <summary>
+    /// Windows XP: Paints all descendants of a window in bottom-to-top painting order using double-buffering. For more information, see Remarks. This cannot be used if the window has a class style of either CS_OWNDC or CS_CLASSDC.
+    /// </summary>
+    WS_EX_COMPOSITED = 0x02000000,
+    /// <summary>
+    /// Includes a question mark in the title bar of the window. When the user clicks the question mark, the cursor changes to a question mark with a pointer. If the user then clicks a child window, the child receives a WM_HELP message. The child window should pass the message to the parent window procedure, which should call the WinHelp function using the HELP_WM_HELP command. The Help application displays a pop-up window that typically contains help for the child window.
+    /// WS_EX_CONTEXTHELP cannot be used with the WS_MAXIMIZEBOX or WS_MINIMIZEBOX styles.
+    /// </summary>
+    WS_EX_CONTEXTHELP = 0x00000400,
+    /// <summary>
+    /// The window itself contains child windows that should take part in dialog box navigation. If this style is specified, the dialog manager recurses into children of this window when performing navigation operations such as handling the TAB key, an arrow key, or a keyboard mnemonic.
+    /// </summary>
+    WS_EX_CONTROLPARENT = 0x00010000,
+    /// <summary>
+    /// Creates a window that has a double border; the window can, optionally, be created with a title bar by specifying the WS_CAPTION style in the dwStyle parameter.
+    /// </summary>
+    WS_EX_DLGMODALFRAME = 0x00000001,
+    /// <summary>
+    /// Windows 2000/XP: Creates a layered window. Note that this cannot be used for child windows. Also, this cannot be used if the window has a class style of either CS_OWNDC or CS_CLASSDC.
+    /// </summary>
+    WS_EX_LAYERED = 0x00080000,
+    /// <summary>
+    /// Arabic and Hebrew versions of Windows 98/Me, Windows 2000/XP: Creates a window whose horizontal origin is on the right edge. Increasing horizontal values advance to the left.
+    /// </summary>
+    WS_EX_LAYOUTRTL = 0x00400000,
+    /// <summary>
+    /// Creates a window that has generic left-aligned properties. This is the default.
+    /// </summary>
+    WS_EX_LEFT = 0x00000000,
+    /// <summary>
+    /// If the shell language is Hebrew, Arabic, or another language that supports reading order alignment, the vertical scroll bar (if present) is to the left of the client area. For other languages, the style is ignored.
+    /// </summary>
+    WS_EX_LEFTSCROLLBAR = 0x00004000,
+    /// <summary>
+    /// The window text is displayed using left-to-right reading-order properties. This is the default.
+    /// </summary>
+    WS_EX_LTRREADING = 0x00000000,
+    /// <summary>
+    /// Creates a multiple-document interface (MDI) child window.
+    /// </summary>
+    WS_EX_MDICHILD = 0x00000040,
+    /// <summary>
+    /// Windows 2000/XP: A top-level window created with this style does not become the foreground window when the user clicks it. The system does not bring this window to the foreground when the user minimizes or closes the foreground window.
+    /// To activate the window, use the SetActiveWindow or SetForegroundWindow function.
+    /// The window does not appear on the taskbar by default. To force the window to appear on the taskbar, use the WS_EX_APPWINDOW style.
+    /// </summary>
+    WS_EX_NOACTIVATE = 0x08000000,
+    /// <summary>
+    /// Windows 2000/XP: A window created with this style does not pass its window layout to its child windows.
+    /// </summary>
+    WS_EX_NOINHERITLAYOUT = 0x00100000,
+    /// <summary>
+    /// Specifies that a child window created with this style does not send the WM_PARENTNOTIFY message to its parent window when it is created or destroyed.
+    /// </summary>
+    WS_EX_NOPARENTNOTIFY = 0x00000004,
+    /// <summary>
+    /// Combines the WS_EX_CLIENTEDGE and WS_EX_WINDOWEDGE styles.
+    /// </summary>
+    WS_EX_OVERLAPPEDWINDOW = WS_EX_WINDOWEDGE | WS_EX_CLIENTEDGE,
+    /// <summary>
+    /// Combines the WS_EX_WINDOWEDGE, WS_EX_TOOLWINDOW, and WS_EX_TOPMOST styles.
+    /// </summary>
+    WS_EX_PALETTEWINDOW = WS_EX_WINDOWEDGE | WS_EX_TOOLWINDOW | WS_EX_TOPMOST,
+    /// <summary>
+    /// The window has generic "right-aligned" properties. This depends on the window class. This style has an effect only if the shell language is Hebrew, Arabic, or another language that supports reading-order alignment; otherwise, the style is ignored.
+    /// Using the WS_EX_RIGHT style for static or edit controls has the same effect as using the SS_RIGHT or ES_RIGHT style, respectively. Using this style with button controls has the same effect as using BS_RIGHT and BS_RIGHTBUTTON styles.
+    /// </summary>
+    WS_EX_RIGHT = 0x00001000,
+    /// <summary>
+    /// Vertical scroll bar (if present) is to the right of the client area. This is the default.
+    /// </summary>
+    WS_EX_RIGHTSCROLLBAR = 0x00000000,
+    /// <summary>
+    /// If the shell language is Hebrew, Arabic, or another language that supports reading-order alignment, the window text is displayed using right-to-left reading-order properties. For other languages, the style is ignored.
+    /// </summary>
+    WS_EX_RTLREADING = 0x00002000,
+    /// <summary>
+    /// Creates a window with a three-dimensional border style intended to be used for items that do not accept user input.
+    /// </summary>
+    WS_EX_STATICEDGE = 0x00020000,
+    /// <summary>
+    /// Creates a tool window; that is, a window intended to be used as a floating toolbar. A tool window has a title bar that is shorter than a normal title bar, and the window title is drawn using a smaller font. A tool window does not appear in the taskbar or in the dialog that appears when the user presses ALT+TAB. If a tool window has a system menu, its icon is not displayed on the title bar. However, you can display the system menu by right-clicking or by typing ALT+SPACE.
+    /// </summary>
+    WS_EX_TOOLWINDOW = 0x00000080,
+    /// <summary>
+    /// Specifies that a window created with this style should be placed above all non-topmost windows and should stay above them, even when the window is deactivated. To add or remove this style, use the SetWindowPos function.
+    /// </summary>
+    WS_EX_TOPMOST = 0x00000008,
+    /// <summary>
+    /// Specifies that a window created with this style should not be painted until siblings beneath the window (that were created by the same thread) have been painted. The window appears transparent because the bits of underlying sibling windows have already been painted.
+    /// To achieve transparency without these restrictions, use the SetWindowRgn function.
+    /// </summary>
+    WS_EX_TRANSPARENT = 0x00000020,
+    /// <summary>
+    /// Specifies that a window has a border with a raised edge.
+    /// </summary>
+    WS_EX_WINDOWEDGE = 0x00000100
+}
+
+public enum ShowWindowCommands
+{
+    /// <summary>
+    /// Hides the window and activates another window.
+    /// </summary>
+    Hide = 0,
+    /// <summary>
+    /// Activates and displays a window. If the window is minimized or
+    /// maximized, the system restores it to its original size and position.
+    /// An application should specify this flag when displaying the window
+    /// for the first time.
+    /// </summary>
+    Normal = 1,
+    /// <summary>
+    /// Activates the window and displays it as a minimized window.
+    /// </summary>
+    ShowMinimized = 2,
+    /// <summary>
+    /// Maximizes the specified window.
+    /// </summary>
+    Maximize = 3, // is this the right value?
+    /// <summary>
+    /// Activates the window and displays it as a maximized window.
+    /// </summary>      
+    ShowMaximized = 3,
+    /// <summary>
+    /// Displays a window in its most recent size and position. This value
+    /// is similar to <see cref="Win32.ShowWindowCommand.Normal"/>, except
+    /// the window is not activated.
+    /// </summary>
+    ShowNoActivate = 4,
+    /// <summary>
+    /// Activates the window and displays it in its current size and position.
+    /// </summary>
+    Show = 5,
+    /// <summary>
+    /// Minimizes the specified window and activates the next top-level
+    /// window in the Z order.
+    /// </summary>
+    Minimize = 6,
+    /// <summary>
+    /// Displays the window as a minimized window. This value is similar to
+    /// <see cref="Win32.ShowWindowCommand.ShowMinimized"/>, except the
+    /// window is not activated.
+    /// </summary>
+    ShowMinNoActive = 7,
+    /// <summary>
+    /// Displays the window in its current size and position. This value is
+    /// similar to <see cref="Win32.ShowWindowCommand.Show"/>, except the
+    /// window is not activated.
+    /// </summary>
+    ShowNA = 8,
+    /// <summary>
+    /// Activates and displays the window. If the window is minimized or
+    /// maximized, the system restores it to its original size and position.
+    /// An application should specify this flag when restoring a minimized window.
+    /// </summary>
+    Restore = 9,
+    /// <summary>
+    /// Sets the show state based on the SW_* value specified in the
+    /// STARTUPINFO structure passed to the CreateProcess function by the
+    /// program that started the application.
+    /// </summary>
+    ShowDefault = 10,
+    /// <summary>
+    ///  <b>Windows 2000/XP:</b> Minimizes a window, even if the thread
+    /// that owns the window is not responding. This flag should only be
+    /// used when minimizing windows from a different thread.
+    /// </summary>
+    ForceMinimize = 11
+}
diff --git a/CrowIDE/CrowIDE.NetStd.csproj b/CrowIDE/CrowIDE.NetStd.csproj
new file mode 100644 (file)
index 0000000..a06ae4e
--- /dev/null
@@ -0,0 +1,56 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <TargetFramework>netcoreapp2.0</TargetFramework>
+
+    <OutputType>Exe</OutputType>
+    <RootNamespace>Crow.Coding</RootNamespace>
+    <AssemblyName>CrowIDE</AssemblyName>
+    <StartupObject>Crow.Coding.CrowIDE</StartupObject>
+        
+    <OutputPath>$(SolutionDir)build/$(Configuration)</OutputPath>
+    <IntermediateOutputPath>$(SolutionDir)build/obj/$(Configuration)</IntermediateOutputPath>  
+              
+    <EnableDefaultItems>false</EnableDefaultItems>
+    <EnableDefaultCompileItems>false</EnableDefaultCompileItems>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugType>full</DebugType>
+    <DefineConstants>TRACE;NETSTANDARD2_0;DEBUG;NETCOREAPP2_0</DefineConstants>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <EmbeddedResource Remove="icons\blank-file2.svg" />
+  </ItemGroup>
+  <ItemGroup>
+    <PackageReference Include="System.CodeDom" Version="4.5.0" />
+        
+    <Compile Include="src\**\*.cs" />  
+        
+    <ProjectReference Include="..\Crow\Crow.NetStd.csproj" />
+        
+    <EmbeddedResource Include="icons\*.*">
+      <LogicalName>icons.%(Filename)%(Extension)</LogicalName>
+    </EmbeddedResource>
+
+    <EmbeddedResource Include="ui\**\*.crow" />
+    <EmbeddedResource Include="ui\**\*.itemp" />
+<!--      <LogicalName>ui.%(Filename)</LogicalName>-->
+<!--      <LogicalName>%(Identity)</LogicalName>
+    </EmbeddedResource>   -->     
+    <EmbeddedResource Include="ui\**\*.template">
+      <LogicalName>Crow.Coding.%(Filename).template</LogicalName>
+    </EmbeddedResource> 
+
+    <EmbeddedResource Include="DefaultTemplateOverrides\*.*">
+      <LogicalName>Crow.%(Filename).template</LogicalName>
+    </EmbeddedResource>
+        
+    <EmbeddedResource Include="IDE.style" />
+    <PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="2.10.0" />
+  </ItemGroup>
+    
+  <ItemGroup>
+    <Folder Include="src\msbuild\" />
+  </ItemGroup>
+</Project>
index bf02c662e7f4bfaaba9718c7b5291bd24c017c83..d88145061db2fbf91b17810fe562abfccb94ddde 100644 (file)
@@ -9,7 +9,6 @@
     <OutputType>Exe</OutputType>
     <RootNamespace>Crow.Coding</RootNamespace>
     <AssemblyName>CrowIDE</AssemblyName>
-    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
     <OutputPath>$(SolutionDir)build/$(Configuration)</OutputPath>
     <IntermediateOutputPath>$(SolutionDir)build/obj/$(Configuration)</IntermediateOutputPath>
     <CustomCommands>
@@ -66,7 +65,7 @@
   </ItemGroup>
   <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
   <ItemGroup>
-    <ProjectReference Include="..\Crow.csproj">
+    <ProjectReference Include="..\Crow\Crow.csproj">
       <Project>{C2980F9B-4798-4C05-99E2-E174810F7C7B}</Project>
       <Name>Crow</Name>
     </ProjectReference>
   </ItemGroup>
   <ItemGroup>
     <EmbeddedResource Include="images\save.svg" />
-    <EmbeddedResource Include="ui\IDE.style" />
+    <EmbeddedResource Include="IDE.style" />
     <EmbeddedResource Include="ui\MembersView.template">
       <LogicalName>Crow.Coding.MembersView.template</LogicalName>
     </EmbeddedResource>
     <EmbeddedResource Include="ui\MemberView.crow" />
     <EmbeddedResource Include="ui\ProjectProperties.crow" />
     <EmbeddedResource Include="ui\TreeExpandable.template">
-      <LogicalName>Crow.TreeExpandable.template</LogicalName>
+      <LogicalName>Crow.Coding.TreeExpandable.template</LogicalName>
+    </EmbeddedResource>
+    <EmbeddedResource Include="ui\ProjectTree.template">
+      <LogicalName>Crow.Coding.ProjectTree.template</LogicalName>
     </EmbeddedResource>
-    <EmbeddedResource Include="ui\ProjectTree.template" />
     <EmbeddedResource Include="ui\CrowIDE.crow" />
-    <EmbeddedResource Include="ui\icons\blank-file.svg" />
-    <EmbeddedResource Include="ui\icons\sign-out.svg" />
-    <EmbeddedResource Include="ui\icons\reply.svg" />
-    <EmbeddedResource Include="ui\icons\share-arrow.svg" />
-    <EmbeddedResource Include="ui\icons\question.svg" />
-    <EmbeddedResource Include="ui\icons\tools.svg" />
-    <EmbeddedResource Include="ui\TabItem.template">
+    <EmbeddedResource Include="DefaultTemplateOverrides\TabItem.template">
       <LogicalName>Crow.TabItem.template</LogicalName>
     </EmbeddedResource>
-    <EmbeddedResource Include="ui\MenuItem.template">
+    <EmbeddedResource Include="DefaultTemplateOverrides\MenuItem.template">
       <LogicalName>Crow.MenuItem.template</LogicalName>
     </EmbeddedResource>
+    <EmbeddedResource Include="DefaultTemplateOverrides\ContextMenu.template">
+      <LogicalName>Crow.ContextMenu.template</LogicalName>
+    </EmbeddedResource>
     <EmbeddedResource Include="ui\Options.crow" />
     <EmbeddedResource Include="ui\IcoBut.template" />
-    <EmbeddedResource Include="ui\MembersItem.template" />
-    <EmbeddedResource Include="ui\ItemTemplates\Enum.template" />
-    <EmbeddedResource Include="ui\ItemTemplates\Fill.template" />
+    <EmbeddedResource Include="ui\MembersItem.template">
+      <LogicalName>Crow.Coding.MembersItem.template</LogicalName>
+    </EmbeddedResource>
+    <EmbeddedResource Include="ui\ItemTemplates\Enum.template">
+      <LogicalName>Crow.Coding.Enum.template</LogicalName>
+    </EmbeddedResource>
+    <EmbeddedResource Include="ui\ItemTemplates\Fill.template">
+      <LogicalName>Crow.Coding.Fill.template</LogicalName>
+    </EmbeddedResource>
     <EmbeddedResource Include="ui\DockWindows\winEditor.crow" />
     <EmbeddedResource Include="ui\DockWindows\winErrors.crow" />
     <EmbeddedResource Include="ui\DockWindows\winSolution.crow" />
     <EmbeddedResource Include="icons\toolbox\Crow.MessageBox.svg" />
     <EmbeddedResource Include="icons\toolbox\options.svg" />
     <EmbeddedResource Include="icons\toolbox\Crow.RadioButton.svg" />
-    <EmbeddedResource Include="icons\move-arrows.svg" />
-    <EmbeddedResource Include="icons\eraser.svg" />
-    <EmbeddedResource Include="icons\light-bulb.svg" />
-    <EmbeddedResource Include="icons\pin.svg" />
-    <EmbeddedResource Include="icons\paint-brush.svg" />
-    <EmbeddedResource Include="icons\tools.svg" />
-    <EmbeddedResource Include="icons\trash.svg" />
-    <EmbeddedResource Include="icons\zoom-in.svg" />
-    <EmbeddedResource Include="icons\zoom-out.svg" />
-    <EmbeddedResource Include="icons\search.svg" />
-    <EmbeddedResource Include="icons\curly-brackets.svg" />
-    <EmbeddedResource Include="icons\compile.svg" />
-    <EmbeddedResource Include="icons\edit.svg" />
+    <EmbeddedResource Include="icons\move-arrows.svg">
+      <LogicalName>icons.move-arrows.svg</LogicalName>
+    </EmbeddedResource>
+    <EmbeddedResource Include="icons\eraser.svg">
+      <LogicalName>icons.eraser.svg</LogicalName>
+    </EmbeddedResource>
+    <EmbeddedResource Include="icons\light-bulb.svg">
+      <LogicalName>icons.light-bulb.svg</LogicalName>
+    </EmbeddedResource>
+    <EmbeddedResource Include="icons\pin.svg">
+      <LogicalName>icons.pin.svg</LogicalName>
+    </EmbeddedResource>
+    <EmbeddedResource Include="icons\paint-brush.svg">
+      <LogicalName>icons.paint-brush.svg</LogicalName>
+    </EmbeddedResource>
+    <EmbeddedResource Include="icons\tools.svg">
+      <LogicalName>icons.tools.svg</LogicalName>
+    </EmbeddedResource>
+    <EmbeddedResource Include="icons\trash.svg">
+      <LogicalName>icons.trash.svg</LogicalName>
+    </EmbeddedResource>
+    <EmbeddedResource Include="icons\zoom-in.svg">
+      <LogicalName>icons.zoom-in.svg</LogicalName>
+    </EmbeddedResource>
+    <EmbeddedResource Include="icons\zoom-out.svg">
+      <LogicalName>icons.zoom-out.svg</LogicalName>
+    </EmbeddedResource>
+    <EmbeddedResource Include="icons\search.svg">
+      <LogicalName>icons.search.svg</LogicalName>
+    </EmbeddedResource>
+    <EmbeddedResource Include="icons\curly-brackets.svg">
+      <LogicalName>icons.curly-brackets.svg</LogicalName>
+    </EmbeddedResource>
+    <EmbeddedResource Include="icons\compile.svg">
+      <LogicalName>icons.compile.svg</LogicalName>
+    </EmbeddedResource>
+    <EmbeddedResource Include="icons\edit.svg">
+      <LogicalName>icons.edit.svg</LogicalName>
+    </EmbeddedResource>
     <EmbeddedResource Include="icons\text-file.svg" />
-    <EmbeddedResource Include="icons\undo.svg" />
-    <EmbeddedResource Include="icons\redo.svg" />
-    <EmbeddedResource Include="icons\folder.svg" />
-    <EmbeddedResource Include="icons\file.svg" />
-    <EmbeddedResource Include="icons\palette.svg" />
-    <EmbeddedResource Include="ui\ContextMenu.template">
-      <LogicalName>Crow.ContextMenu.template</LogicalName>
+    <EmbeddedResource Include="icons\undo.svg">
+      <LogicalName>icons.undo.svg</LogicalName>
+    </EmbeddedResource>
+    <EmbeddedResource Include="icons\redo.svg">
+      <LogicalName>icons.redo.svg</LogicalName>
+    </EmbeddedResource>
+    <EmbeddedResource Include="icons\sign-out.svg">
+      <LogicalName>icons.sign-out.svg</LogicalName>
+    </EmbeddedResource>
+    <EmbeddedResource Include="icons\folder.svg">
+      <LogicalName>icons.folder.svg</LogicalName>
+    </EmbeddedResource>
+    <EmbeddedResource Include="icons\file.svg">
+      <LogicalName>icons.file.svg</LogicalName>
+    </EmbeddedResource>
+    <EmbeddedResource Include="icons\palette.svg">
+      <LogicalName>icons.palette.svg</LogicalName>
     </EmbeddedResource>
     <EmbeddedResource Include="ui\editors\EditPane.template">
       <LogicalName>Crow.Coding.EditPane.template</LogicalName>
     </EmbeddedResource>
     <EmbeddedResource Include="ui\editors\EditPaneItems.template">
-      <LogicalName>Crow.Coding.ui.EditPaneItems.template</LogicalName>
+      <LogicalName>Crow.Coding.EditPaneItems.template</LogicalName>
     </EmbeddedResource>
-    <EmbeddedResource Include="ui\editors\IMLEdit.itemp">
-      <LogicalName>Crow.Coding.ui.IMLEdit.itemp</LogicalName>
+    <EmbeddedResource Include="ui\editors\IMLEdit.itemp" />
+    <EmbeddedResource Include="ui\editors\SourceEditor.crow" />
+    <EmbeddedResource Include="ui\editors\SrcEdit.itemp" />
+    <EmbeddedResource Include="ui\editors\SvgEdit.itemp" />
+    <EmbeddedResource Include="ui\DockWindows\winGTExplorer.crow" />
+    <EmbeddedResource Include="ui\DockWindows\GTreeExpITemp.crow" />
+    <EmbeddedResource Include="icons\copy-file.svg">
+      <LogicalName>icons.copy-file.svg</LogicalName>
     </EmbeddedResource>
-    <EmbeddedResource Include="ui\editors\SourceEditor.crow">
-      <LogicalName>Crow.Coding.ui.SourceEditor.crow</LogicalName>
+    <EmbeddedResource Include="icons\paste-on-document.svg">
+      <LogicalName>icons.paste-on-document.svg</LogicalName>
     </EmbeddedResource>
-    <EmbeddedResource Include="ui\editors\SrcEdit.itemp">
-      <LogicalName>Crow.Coding.ui.SrcEdit.itemp</LogicalName>
+    <EmbeddedResource Include="icons\scissors.svg">
+      <LogicalName>icons.scissors.svg</LogicalName>
     </EmbeddedResource>
-    <EmbeddedResource Include="ui\editors\SvgEdit.itemp">
-      <LogicalName>Crow.Coding.ui.SvgEdit.itemp</LogicalName>
+    <EmbeddedResource Include="icons\question.svg">
+      <LogicalName>icons.question.svg</LogicalName>
+    </EmbeddedResource>
+    <EmbeddedResource Include="icons\blank-file.svg">
+      <LogicalName>icons.blank-file.svg</LogicalName>
+    </EmbeddedResource>
+    <EmbeddedResource Include="icons\cs-file.svg">
+      <LogicalName>icons.cs-file.svg</LogicalName>
+    </EmbeddedResource>
+    <EmbeddedResource Include="icons\xml-file.svg">
+      <LogicalName>icons.xml-file.svg</LogicalName>
+    </EmbeddedResource>
+    <EmbeddedResource Include="icons\save.svg">
+      <LogicalName>icons.save.svg</LogicalName>
+    </EmbeddedResource>
+    <EmbeddedResource Include="icons\open.svg">
+      <LogicalName>icons.open.svg</LogicalName>
     </EmbeddedResource>
-    <EmbeddedResource Include="ui\DockWindows\winGTExplorer.crow" />
-    <EmbeddedResource Include="ui\DockWindows\GTreeExpITemp.crow" />
-    <EmbeddedResource Include="icons\copy-file.svg" />
-    <EmbeddedResource Include="icons\paste-on-document.svg" />
-    <EmbeddedResource Include="icons\scissors.svg" />
-    <EmbeddedResource Include="icons\question.svg" />
-    <EmbeddedResource Include="icons\blank-file.svg" />
-    <EmbeddedResource Include="icons\save.svg" />
-    <EmbeddedResource Include="icons\open.svg" />
     <EmbeddedResource Include="ui\NewFile.crow" />
     <EmbeddedResource Include="ui\DockWindows\winSchema.crow" />
     <EmbeddedResource Include="ui\DockWindows\WinSchemaItem.template" />
       <LogicalName>Crow.Coding.ui.TextEditor.crow</LogicalName>
     </EmbeddedResource>
     <EmbeddedResource Include="ui\DockWindows\winStyleView.crow" />
-    <EmbeddedResource Include="ui\CategoryExp.template" />
+    <EmbeddedResource Include="ui\CategoryExp.template">
+      <LogicalName>Crow.Coding.CategoryExp.template</LogicalName>
+    </EmbeddedResource>
     <EmbeddedResource Include="ui\DockWindows\winDesign.crow" />
     <EmbeddedResource Include="ui\editors\EditTabItem.template">
       <LogicalName>Crow.Coding.EditTabItem.template</LogicalName>
     <None Include="ui\test.crow">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </None>
-    <None Include="ui\icons\center-align.svg" />
-    <None Include="ui\icons\cogwheel.svg" />
-    <None Include="ui\icons\edit.svg" />
-    <None Include="ui\icons\file-code.svg" />
-    <None Include="ui\icons\folder.svg" />
-    <None Include="ui\icons\font-file.svg" />
-    <None Include="ui\icons\light-bulb.svg" />
-    <None Include="ui\icons\paragraph.svg" />
-    <None Include="ui\icons\previous.svg" />
-    <None Include="ui\icons\search.svg" />
-    <None Include="ui\icons\text-file.svg" />
-    <None Include="ui\icons\text-label.svg" />
-    <None Include="ui\icons\zoom-in.svg" />
-    <None Include="ui\icons\zoom-out.svg" />
-    <None Include="ui\icons\basic_floppydisk.svg" />
   </ItemGroup>
 </Project>
diff --git a/CrowIDE/DefaultTemplateOverrides/ContextMenu.template b/CrowIDE/DefaultTemplateOverrides/ContextMenu.template
new file mode 100644 (file)
index 0000000..38e6b7b
--- /dev/null
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<MenuItem MinimumSize="20,20" Height="Fit" Width="160" Caption="Context Menu" Data="{ContextCommands}" Orientation="Vertical"
+       IsOpened ="true" Visible="{/IsOpened}" SelectionBackground="Transparent">
+       <Template>              
+               <Border Background="DimGrey" Foreground="Black" CornerRadius="2">
+                       <GenericStack Orientation="{./Orientation}" Name="ItemsContainer" Margin="2"/>
+               </Border>               
+       </Template>
+       <ItemTemplate>
+               <MenuItem Command="{}" Width="150" PopWidth="120" SelectionBackground="Transparent" IsEnabled="{CanExecute}">
+                       <Template>
+                               <Popper Font="{./Font}" Caption="{./Caption}"  Background="{./Background}" PopDirection="{./PopDirection}"
+                                       Foreground = "{./Foreground}" CanPop="{./HasChildren}" MouseDown="./onMI_Click"
+                                       IsPopped="{²./IsOpened}" PopWidth="{./PopWidth}" PopHeight="{./PopHeight}">
+                                       <Template>
+                                               <Border Name="border1"
+                                                               CornerRadius="0"
+                                                               MouseEnter="{Foreground=vgradient|0:White|0.2:Grey|0.9:Grey|1:Black}"
+                                                               MouseLeave="{Foreground=Transparent}"
+                                                               MouseDown="{Foreground=vgradient|0:Black|0.05:Grey|0.85:Grey|1:White}"
+                                                               MouseUp="{Foreground=vgradient|0:White|0.2:Grey|0.9:Grey|1:Black}"
+                                                               MinimumSize = "60,0"
+                                                               Foreground="Transparent"
+                                                               Background="{./Background}">
+                                                               <HorizontalStack Spacing="5">
+                                                                       <Image Height="14" Width="14" Picture="{Icon}" />
+                                                                       <Label Text="{./Caption}"
+                                                                               Foreground="{./Foreground}"
+                                                                               Margin="1" HorizontalAlignment="Left"
+                                                                               Font="{./Font}" />
+                                                               </HorizontalStack>
+                                               </Border>
+                                       </Template>
+                                       <Border Foreground="DimGrey" Width="{../PopWidth}" Height="{../PopHeight}" Background="DimGrey">
+                                               <VerticalStack Name="ItemsContainer"/>
+                                       </Border>
+                               </Popper>
+                       </Template>
+               </MenuItem>
+       </ItemTemplate>
+</MenuItem>
+
diff --git a/CrowIDE/DefaultTemplateOverrides/MenuItem.template b/CrowIDE/DefaultTemplateOverrides/MenuItem.template
new file mode 100644 (file)
index 0000000..bf01f99
--- /dev/null
@@ -0,0 +1,29 @@
+<?xml version="1.0"?>
+<Popper Font="{./Font}" Caption="{./Caption}"  Background="{./Background}" PopDirection="{./PopDirection}"
+       Foreground = "{./Foreground}" CanPop="{./HasChildren}" MouseClick="./onMI_Click"
+       IsPopped="{²./IsOpened}" PopWidth="{./PopWidth}" PopHeight="{./PopHeight}" IsEnabled="{./IsEnabled}">
+       <Template>
+               <CheckBox IsChecked="{²./IsPopped}" Caption="{./Caption}" Background="{./Background}" Foreground="{./Foreground}">
+                       <Template>
+                               <Border Name="border1"
+                                               MouseEnter="{Foreground=vgradient|0:White|0.2:Grey|0.9:Grey|1:Black}"
+                                               MouseLeave="{Foreground=Transparent}"
+                                               MouseDown="{Foreground=vgradient|0:Black|0.05:Grey|0.85:Grey|1:White}"
+                                               MouseUp="{Foreground=vgradient|0:White|0.2:Grey|0.9:Grey|1:Black}"
+                                               MinimumSize = "40,0"
+                                               Foreground="Transparent"
+                                               Background="{./Background}">
+                                               <HorizontalStack HorizontalAlignment="Left" Margin="1">
+                                                       <Image Width="10" Height="10" Picture="{../../../../../Icon}"/>
+                                                       <Label Text="{./Caption}"
+                                                               Foreground="{./Foreground}"
+                                                               Font="{./Font}" />
+                                               </HorizontalStack>
+                               </Border>
+                       </Template>
+               </CheckBox>
+       </Template>
+       <Border Foreground="DimGrey" Width="{../PopWidth}" Height="{../PopHeight}" Background="Jet">
+               <VerticalStack Name="ItemsContainer"/>
+       </Border>
+</Popper>
diff --git a/CrowIDE/DefaultTemplateOverrides/TabItem.template b/CrowIDE/DefaultTemplateOverrides/TabItem.template
new file mode 100644 (file)
index 0000000..c07119b
--- /dev/null
@@ -0,0 +1,19 @@
+<?xml version="1.0"?>
+<GenericStack Orientation="Vertical" Spacing="0"               
+               MouseEnter="{caption.Foreground=White}"
+               MouseLeave="{caption.Foreground=Grey}">
+       <HorizontalStack Margin="2" Left="{./TabOffset}"
+               Name="TabTitle"
+               HorizontalAlignment="Left"
+               Height="{./TabHeight}"
+               Width="{./TabWidth}">
+               <Label Name="caption" Text="{./Caption}" Foreground="Grey" Width="Stretched"/>
+               <Border CornerRadius="5" BorderWidth="1" Foreground="Transparent"  Height="12" Width="12"
+                                       MouseEnter="{Foreground=White}" MouseLeave="{Foreground=Transparent}">
+                       <Image Focusable="true" Name="Image" Margin="0" Width="Stretched" Height="Stretched" Path="#Crow.Icons.exit2.svg"
+                                MouseClick="./butCloseTabClick"/>
+               </Border>
+       </HorizontalStack>
+       <Container Name="Content"/>
+</GenericStack>
+
diff --git a/CrowIDE/IDE.style b/CrowIDE/IDE.style
new file mode 100644 (file)
index 0000000..5b5054a
--- /dev/null
@@ -0,0 +1,64 @@
+Label {    
+    Foreground="Black";
+}
+icon {
+       Width="14";
+       Height="14";
+}
+MemberViewLabel {
+       Margin="1";
+       Height="Fit";
+       Width="50%";
+       Background="White";
+}
+MemberViewHStack {
+       Focusable="true";
+       Height="Fit";
+       Spacing="1";
+       MouseEnter="{Background=SteelBlue}";
+       MouseLeave="{Background=Transparent}";
+}
+
+IcoBut {
+       Template = "#Crow.Coding.IcoBut.template";
+       MinimumSize = "10,10";
+       Width = "8";
+       Height = "14";
+       Background = "Black";
+}
+
+WinSchema {
+       Template="#Crow.Coding.ui.DockWindows.WinSchemaItem.template";
+       Focusable = "true";
+       MinimumSize="150,50";
+       Width = "Fit";
+       Height = "Fit";
+}
+TabItem {
+       AllowDrag="false";
+       Background="Grey";
+       SelectedBackground="0.9,0.9,0.91,1.0";
+    Foreground="Black";
+}
+TreeItemBorder {
+       CornerRadius="2";
+       Margin="0";
+       //Focusable="true";
+       Height="Fit";
+       Width="Stretched";
+       Foreground="Transparent";
+       MouseEnter="{Foreground=DimGrey}";
+       MouseLeave="{Foreground=Transparent}";
+}
+TreeIcon {
+       Margin="0";
+       Width="14";
+       Height="14";
+}
+Splitter {
+       Thickness="1";
+       Background="RoyalBlue";
+}
+DockWindow {
+    Background="0.98,0.98,0.99,0.9";
+}
diff --git a/CrowIDE/icons/basic_floppydisk.svg b/CrowIDE/icons/basic_floppydisk.svg
new file mode 100644 (file)
index 0000000..55d901d
--- /dev/null
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+        width="64px" height="64px" viewBox="0 0 64 64" enable-background="new 0 0 64 64" xml:space="preserve">
+<g>
+       <polygon fill="none" stroke="#000000" stroke-width="2" stroke-miterlimit="10" points="63,63 1,63 1,1 51,1 63,13         "/>
+</g>
+<rect x="7" y="31" fill="none" stroke="#000000" stroke-width="2" stroke-miterlimit="10" width="50" height="32"/>
+<line fill="none" stroke="#000000" stroke-width="2" stroke-miterlimit="10" x1="14" y1="39" x2="50" y2="39"/>
+<line fill="none" stroke="#000000" stroke-width="2" stroke-miterlimit="10" x1="14" y1="47" x2="50" y2="47"/>
+<line fill="none" stroke="#000000" stroke-width="2" stroke-miterlimit="10" x1="14" y1="55" x2="50" y2="55"/>
+<rect x="15" y="1" fill="none" stroke="#000000" stroke-width="2" stroke-miterlimit="10" width="34" height="19"/>
+<rect x="38" y="5" fill="none" stroke="#000000" stroke-width="2" stroke-miterlimit="10" width="5" height="11"/>
+</svg>
index 8136979e109f0fd6533e4307a212becf7aecfad7..5880a3ab5d88bcd6b7bbf45a06e27c6909c74171 100644 (file)
@@ -2,5 +2,6 @@
 <!-- Generated by IcoMoon.io -->
 <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
 <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16">
-<path fill="#FFFFFF" d="M10 0h-8v16h12v-12l-4-4zM9 5h4v10h-10v-14h6v4zM10 4v-3l3 3h-3z"></path>
+<path fill="#ffffff" d="M 10,0 H 2 V 16 H 14 V 4 Z"/>
+<path fill="#444444" d="M10 0h-8v16h12v-12l-4-4zM9 5h4v10h-10v-14h6v4zM10 4v-3l3 3h-3z"/>
 </svg>
diff --git a/CrowIDE/icons/center-align.svg b/CrowIDE/icons/center-align.svg
new file mode 100644 (file)
index 0000000..92e3fac
--- /dev/null
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generated by IcoMoon.io -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16">
+<path fill="#FFFFFF" d="M5 0h6v3h-6v-3z"></path>
+<path fill="#FFFFFF" d="M1 4h14v3h-14v-3z"></path>
+<path fill="#FFFFFF" d="M3 8h10v3h-10v-3z"></path>
+<path fill="#FFFFFF" d="M0 12h16v3h-16v-3z"></path>
+</svg>
diff --git a/CrowIDE/icons/cogwheel.svg b/CrowIDE/icons/cogwheel.svg
new file mode 100644 (file)
index 0000000..c104c47
--- /dev/null
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generated by IcoMoon.io -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16">
+<path fill="#FFFFFF" d="M15.2 6l-1.1-0.2c-0.1-0.2-0.1-0.4-0.2-0.6l0.6-0.9 0.5-0.7-2.6-2.6-0.7 0.5-0.9 0.6c-0.2-0.1-0.4-0.1-0.6-0.2l-0.2-1.1-0.2-0.8h-3.6l-0.2 0.8-0.2 1.1c-0.2 0.1-0.4 0.1-0.6 0.2l-0.9-0.6-0.7-0.4-2.5 2.5 0.5 0.7 0.6 0.9c-0.2 0.2-0.2 0.4-0.3 0.6l-1.1 0.2-0.8 0.2v3.6l0.8 0.2 1.1 0.2c0.1 0.2 0.1 0.4 0.2 0.6l-0.6 0.9-0.5 0.7 2.6 2.6 0.7-0.5 0.9-0.6c0.2 0.1 0.4 0.1 0.6 0.2l0.2 1.1 0.2 0.8h3.6l0.2-0.8 0.2-1.1c0.2-0.1 0.4-0.1 0.6-0.2l0.9 0.6 0.7 0.5 2.6-2.6-0.5-0.7-0.6-0.9c0.1-0.2 0.2-0.4 0.2-0.6l1.1-0.2 0.8-0.2v-3.6l-0.8-0.2zM15 9l-1.7 0.3c-0.1 0.5-0.3 1-0.6 1.5l0.9 1.4-1.4 1.4-1.4-0.9c-0.5 0.3-1 0.5-1.5 0.6l-0.3 1.7h-2l-0.3-1.7c-0.5-0.1-1-0.3-1.5-0.6l-1.4 0.9-1.4-1.4 0.9-1.4c-0.3-0.5-0.5-1-0.6-1.5l-1.7-0.3v-2l1.7-0.3c0.1-0.5 0.3-1 0.6-1.5l-1-1.4 1.4-1.4 1.4 0.9c0.5-0.3 1-0.5 1.5-0.6l0.4-1.7h2l0.3 1.7c0.5 0.1 1 0.3 1.5 0.6l1.4-0.9 1.4 1.4-0.9 1.4c0.3 0.5 0.5 1 0.6 1.5l1.7 0.3v2z"></path>
+<path fill="#FFFFFF" d="M8 4.5c-1.9 0-3.5 1.6-3.5 3.5s1.6 3.5 3.5 3.5 3.5-1.6 3.5-3.5c0-1.9-1.6-3.5-3.5-3.5zM8 10.5c-1.4 0-2.5-1.1-2.5-2.5s1.1-2.5 2.5-2.5 2.5 1.1 2.5 2.5c0 1.4-1.1 2.5-2.5 2.5z"></path>
+</svg>
diff --git a/CrowIDE/icons/cs-file.svg b/CrowIDE/icons/cs-file.svg
new file mode 100644 (file)
index 0000000..5ddb69a
--- /dev/null
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<svg width="16" height="16" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg">
+
+ <g class="layer">
+  <title>Layer 1</title>
+  <path d="m10,0l-8,0l0,16l12,0l0,-12l-4,-4z" fill="#ffffff" id="svg_1"/>
+  <path d="m10,0l-8,0l0,16l12,0l0,-12l-4,-4zm-1,5l4,0l0,10l-10,0l0,-14l6,0l0,4zm1,-1l0,-3l3,3l-3,0z" fill="#444444" id="svg_2"/>
+  <text fill="#007f00" font-family="Monospace" font-size="16" font-style="normal" font-weight="bold" id="svg_4" stroke="#000000" stroke-width="0" text-anchor="middle" transform="matrix(0.69828, 0, 0, 0.877654, 0.704781, 2.22646)" x="7.714503" xml:space="preserve" y="12.444685">c</text>
+  <text fill="#007f00" font-family="Monospace" font-size="7" font-style="normal" font-weight="bold" id="svg_5" stroke="#000000" stroke-width="0" text-anchor="middle" transform="matrix(0.999951, 0, 0, 0.975655, -2.14552, 0.0604767)" x="12.987902" xml:space="preserve" y="11.031572">#</text>
+ </g>
+</svg>
\ No newline at end of file
diff --git a/CrowIDE/icons/drawsvg.svg b/CrowIDE/icons/drawsvg.svg
new file mode 100644 (file)
index 0000000..36ef290
--- /dev/null
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="1120px" height="670px" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0  1120 670" preserveAspectRatio="xMidYMid meet" ><rect id="svgEditorBackground" x="0" y="0" width="1120" height="670" style="fill: none; stroke: none;"/><line id="e1_line" x1="432" y1="118" x2="291" y2="273" style="stroke:black;fill:none;stroke-width:1px;"/><line id="e2_line" x1="291" y1="270" x2="397" y2="402" style="stroke:black;fill:none;stroke-width:1px;"/><polyline style="stroke:black;fill:none;stroke-width:10px;stroke-linecap:round;stroke-linejoin:round;" id="e3_polyline" points="685,138 683,138 596,275 694,413"/></svg>
\ No newline at end of file
index 366862c7cda86cfcb2522c5d32d5ce79eabbc21d..73569d8d5dcdfc863c207b96040eecae9328cdcc 100644 (file)
@@ -2,5 +2,5 @@
 <!-- Generated by IcoMoon.io -->
 <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
 <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16">
-<path fill="#dddddd" d="M16 4c0 0 0-1-1-2s-1.9-1-1.9-1l-1.1 1.1v-2.1h-12v16h12v-8l4-4zM6.3 11.4l-0.6-0.6 0.3-1.1 1.5 1.5-1.2 0.2zM7.2 9.5l-0.6-0.6 5.2-5.2c0.2 0.1 0.4 0.3 0.6 0.5zM14.1 2.5l-0.9 1c-0.2-0.2-0.4-0.3-0.6-0.5l0.9-0.9c0.1 0.1 0.3 0.2 0.6 0.4zM11 15h-10v-14h10v2.1l-5.9 5.9-1.1 4.1 4.1-1.1 2.9-3v6z"></path>
+<path fill="#FFFFFF" d="M16 4c0 0 0-1-1-2s-1.9-1-1.9-1l-1.1 1.1v-2.1h-12v16h12v-8l4-4zM6.3 11.4l-0.6-0.6 0.3-1.1 1.5 1.5-1.2 0.2zM7.2 9.5l-0.6-0.6 5.2-5.2c0.2 0.1 0.4 0.3 0.6 0.5zM14.1 2.5l-0.9 1c-0.2-0.2-0.4-0.3-0.6-0.5l0.9-0.9c0.1 0.1 0.3 0.2 0.6 0.4zM11 15h-10v-14h10v2.1l-5.9 5.9-1.1 4.1 4.1-1.1 2.9-3v6z"></path>
 </svg>
diff --git a/CrowIDE/icons/file-code.svg b/CrowIDE/icons/file-code.svg
new file mode 100644 (file)
index 0000000..2dc00db
--- /dev/null
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generated by IcoMoon.io -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16">
+<path fill="#FFFFFF" d="M10 0h-8v16h12v-12l-4-4zM9 5h4v10h-10v-14h6v4zM10 4v-3l3 3h-3z"></path>
+<path fill="#FFFFFF" d="M6.2 13h-0.7l-2-2.5 2-2.5h0.7l-2 2.5z"></path>
+<path fill="#FFFFFF" d="M9.8 13h0.7l2-2.5-2-2.5h-0.7l2 2.5z"></path>
+<path fill="#FFFFFF" d="M6.7 14h0.6l2.1-7h-0.8z"></path>
+</svg>
index f59e2dacbf27e8970445ecc198b2f8460d4d8b68..6cddd9cbefccff26cf9912b7799467b67e9aecbf 100644 (file)
@@ -3,9 +3,9 @@
 <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
 <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16">
   <g id="False">
-    <path fill="#dddddd" d="M7 4l-1-2h-4l-1 2h-1v11h16v-11h-9zM15 14h-14v-9h0.6l1-2h2.6l1.2 2h8.6v9z"></path>
+    <path fill="#111111" d="M7 4l-1-2h-4l-1 2h-1v11h16v-11h-9zM15 14h-14v-9h0.6l1-2h2.6l1.2 2h8.6v9z"></path>
   </g>
   <g id="True">
-    <path fill="#dddddd" d="M14 6v-2h-7l-1-2h-4l-1 2h-1v11h14l2-9h-2zM14.9 7l-1.6 7-11.9-0.1 2.3-6.9h11.2zM1 5h0.6l1-2h2.6l1.2 2h6.6v1h-10l-2 5.9v-6.9z"></path>
+    <path fill="#111111" d="M14 6v-2h-7l-1-2h-4l-1 2h-1v11h14l2-9h-2zM14.9 7l-1.6 7-11.9-0.1 2.3-6.9h11.2zM1 5h0.6l1-2h2.6l1.2 2h6.6v1h-10l-2 5.9v-6.9z"></path>
   </g>
 </svg>
diff --git a/CrowIDE/icons/font-file.svg b/CrowIDE/icons/font-file.svg
new file mode 100644 (file)
index 0000000..20beac1
--- /dev/null
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generated by IcoMoon.io -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16">
+<path fill="#FFFFFF" d="M10 0h-8v16h12v-12l-4-4zM9 5h4v10h-10v-14h6v4zM10 4v-3l3 3h-3z"></path>
+<path fill="#FFFFFF" d="M5 7v2h2v5h2v-5h2v-2z"></path>
+</svg>
index 89ff2364a801c9611421751a017189102bba4658..4193a7507962f43d5d82c27456b7763f020591a0 100644 (file)
@@ -2,6 +2,6 @@
 <!-- Generated by IcoMoon.io -->
 <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
 <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16">
-<path fill="#dddddd" d="M11.7 1.9c-1-1.2-2.6-1.9-4.2-1.9s-3.2 0.7-4.2 1.9c-1 1.1-1.4 2.6-1.2 4 0.2 1.5 0.8 2.6 2.1 3.7 0.5 0.4 0.7 0.8 0.9 1.2 0 0.1 0.1 0.2 0.1 0.3-0.1 0.1-0.2 0.2-0.2 0.4 0 0.3 0.2 0.5 0.5 0.5-0.3 0-0.5 0.2-0.5 0.5s0.2 0.5 0.5 0.5c-0.3 0-0.5 0.2-0.5 0.5s0.2 0.5 0.5 0.5c-0.3 0-0.5 0.2-0.5 0.5s0.2 0.5 0.5 0.5h0.5c0 0.5 0.7 1 1.5 1s1.5-0.5 1.5-1h0.5c0.3 0 0.5-0.2 0.5-0.5s-0.2-0.5-0.5-0.5c0.3 0 0.5-0.2 0.5-0.5s-0.2-0.5-0.5-0.5c0.3 0 0.5-0.2 0.5-0.5s-0.2-0.5-0.5-0.5c0.3 0 0.5-0.2 0.5-0.5 0-0.2-0.1-0.3-0.2-0.4 0-0.1 0.1-0.1 0.1-0.2 0.2-0.4 0.4-0.8 0.9-1.2 1.3-1.1 1.9-2.2 2.1-3.8 0.2-1.4-0.2-2.8-1.2-4zM12 5.8c-0.2 1.3-0.7 2.2-1.8 3.2-0.6 0.5-0.9 1-1.2 1.4-0.2 0.5-0.3 0.6-0.5 0.6h-2c-0.2 0-0.3-0.1-0.5-0.6-0.2-0.4-0.5-1-1.1-1.6-1.3-1.1-1.6-2-1.8-3-0.2-1.1 0.2-2.3 0.9-3.2 0.9-1 2.2-1.6 3.5-1.6s2.6 0.6 3.5 1.6c0.7 0.9 1.1 2.1 1 3.2z"></path>
-<path fill="#dddddd" d="M11 5h-1c0-0.7-0.8-2-2-2v-1c1.8 0 3 1.8 3 3z"></path>
+<path fill="#FFFFFF" d="M11.7 1.9c-1-1.2-2.6-1.9-4.2-1.9s-3.2 0.7-4.2 1.9c-1 1.1-1.4 2.6-1.2 4 0.2 1.5 0.8 2.6 2.1 3.7 0.5 0.4 0.7 0.8 0.9 1.2 0 0.1 0.1 0.2 0.1 0.3-0.1 0.1-0.2 0.2-0.2 0.4 0 0.3 0.2 0.5 0.5 0.5-0.3 0-0.5 0.2-0.5 0.5s0.2 0.5 0.5 0.5c-0.3 0-0.5 0.2-0.5 0.5s0.2 0.5 0.5 0.5c-0.3 0-0.5 0.2-0.5 0.5s0.2 0.5 0.5 0.5h0.5c0 0.5 0.7 1 1.5 1s1.5-0.5 1.5-1h0.5c0.3 0 0.5-0.2 0.5-0.5s-0.2-0.5-0.5-0.5c0.3 0 0.5-0.2 0.5-0.5s-0.2-0.5-0.5-0.5c0.3 0 0.5-0.2 0.5-0.5s-0.2-0.5-0.5-0.5c0.3 0 0.5-0.2 0.5-0.5 0-0.2-0.1-0.3-0.2-0.4 0-0.1 0.1-0.1 0.1-0.2 0.2-0.4 0.4-0.8 0.9-1.2 1.3-1.1 1.9-2.2 2.1-3.8 0.2-1.4-0.2-2.8-1.2-4zM12 5.8c-0.2 1.3-0.7 2.2-1.8 3.2-0.6 0.5-0.9 1-1.2 1.4-0.2 0.5-0.3 0.6-0.5 0.6h-2c-0.2 0-0.3-0.1-0.5-0.6-0.2-0.4-0.5-1-1.1-1.6-1.3-1.1-1.6-2-1.8-3-0.2-1.1 0.2-2.3 0.9-3.2 0.9-1 2.2-1.6 3.5-1.6s2.6 0.6 3.5 1.6c0.7 0.9 1.1 2.1 1 3.2z"></path>
+<path fill="#FFFFFF" d="M11 5h-1c0-0.7-0.8-2-2-2v-1c1.8 0 3 1.8 3 3z"></path>
 </svg>
diff --git a/CrowIDE/icons/paragraph.svg b/CrowIDE/icons/paragraph.svg
new file mode 100644 (file)
index 0000000..826aa63
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generated by IcoMoon.io -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16">
+<path fill="#FFFFFF" d="M5.5 0c-2.5 0-4.5 2-4.5 4.5s2 4.5 4.5 4.5h2.5v7h2v-14h1v14h2v-14h2v-2h-9.5z"></path>
+</svg>
diff --git a/CrowIDE/icons/previous.svg b/CrowIDE/icons/previous.svg
new file mode 100644 (file)
index 0000000..566c8a3
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generated by IcoMoon.io -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16">
+<path fill="#FFFFFF" d="M0 7.9l6-4.9v3c0 0 1.1 0 2 0 8 0 8 8 8 8s-1-4-7.8-4c-1.1 0-1.8 0-2.2 0v2.9l-6-5z"></path>
+</svg>
diff --git a/CrowIDE/icons/reply.svg b/CrowIDE/icons/reply.svg
new file mode 100644 (file)
index 0000000..d008cb3
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generated by IcoMoon.io -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16">
+<path fill="#FFFFFF" d="M16 8c0-5-4.9-5-4.9-5h-5.1v-3l-6 6 6 6v-3h5.2c3.5 0 1.8 7 1.8 7s3-4.1 3-8z"></path>
+</svg>
index f3eb3682dc8c45d8663080d88a92f543b1d78ae8..4a931b3584463cb0279b1f3dc59708ab5f7b097d 100644 (file)
@@ -2,5 +2,5 @@
 <!-- Generated by IcoMoon.io -->
 <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
 <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16">
-<path fill="#dddddd" d="M15.7 14.3l-4.2-4.2c-0.2-0.2-0.5-0.3-0.8-0.3 0.8-1 1.3-2.4 1.3-3.8 0-3.3-2.7-6-6-6s-6 2.7-6 6 2.7 6 6 6c1.4 0 2.8-0.5 3.8-1.4 0 0.3 0 0.6 0.3 0.8l4.2 4.2c0.2 0.2 0.5 0.3 0.7 0.3s0.5-0.1 0.7-0.3c0.4-0.3 0.4-0.9 0-1.3zM6 10.5c-2.5 0-4.5-2-4.5-4.5s2-4.5 4.5-4.5 4.5 2 4.5 4.5-2 4.5-4.5 4.5z"></path>
+<path fill="#FFFFFF" d="M15.7 14.3l-4.2-4.2c-0.2-0.2-0.5-0.3-0.8-0.3 0.8-1 1.3-2.4 1.3-3.8 0-3.3-2.7-6-6-6s-6 2.7-6 6 2.7 6 6 6c1.4 0 2.8-0.5 3.8-1.4 0 0.3 0 0.6 0.3 0.8l4.2 4.2c0.2 0.2 0.5 0.3 0.7 0.3s0.5-0.1 0.7-0.3c0.4-0.3 0.4-0.9 0-1.3zM6 10.5c-2.5 0-4.5-2-4.5-4.5s2-4.5 4.5-4.5 4.5 2 4.5 4.5-2 4.5-4.5 4.5z"></path>
 </svg>
diff --git a/CrowIDE/icons/share-arrow.svg b/CrowIDE/icons/share-arrow.svg
new file mode 100644 (file)
index 0000000..e0eb246
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generated by IcoMoon.io -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16">
+<path fill="#FFFFFF" d="M10 3h-5.1c0 0-4.9 0-4.9 5 0 3.9 3 8 3 8s-1.7-7 1.8-7h5.2v3l6-6-6-6v3z"></path>
+</svg>
diff --git a/CrowIDE/icons/sign-out.svg b/CrowIDE/icons/sign-out.svg
new file mode 100644 (file)
index 0000000..c5951fc
--- /dev/null
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generated by IcoMoon.io -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16">
+<path fill="#FFFFFF" d="M9 4v-3h-9v14h9v-3h-1v2h-7v-12h7v2z"></path>
+<path fill="#FFFFFF" d="M16 8l-5-4v2h-5v4h5v2z"></path>
+</svg>
index 826bc326adf3f55f6d95c6eb4358dece42015b7a..eafca90c0763edac9243de76e6eaff4388753de5 100644 (file)
@@ -2,8 +2,8 @@
 <!-- Generated by IcoMoon.io -->
 <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
 <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16">
-<path fill="#dddddd" d="M10 0h-8v16h12v-12l-4-4zM9 5h4v10h-10v-14h6v4zM10 4v-3l3 3h-3z"></path>
-<path fill="#dddddd" d="M4 7h8v1h-8v-1z"></path>
-<path fill="#dddddd" d="M4 9h8v1h-8v-1z"></path>
-<path fill="#dddddd" d="M4 11h8v1h-8v-1z"></path>
+<path fill="#FFFFFF" d="M10 0h-8v16h12v-12l-4-4zM9 5h4v10h-10v-14h6v4zM10 4v-3l3 3h-3z"></path>
+<path fill="#FFFFFF" d="M4 7h8v1h-8v-1z"></path>
+<path fill="#FFFFFF" d="M4 9h8v1h-8v-1z"></path>
+<path fill="#FFFFFF" d="M4 11h8v1h-8v-1z"></path>
 </svg>
diff --git a/CrowIDE/icons/text-label.svg b/CrowIDE/icons/text-label.svg
new file mode 100644 (file)
index 0000000..8fa9196
--- /dev/null
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generated by IcoMoon.io -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16">
+<path fill="#FFFFFF" d="M12.5 4.9c-1.4 0-2.5 0.8-2.6 0.9l1.2 1.6c0 0 0.7-0.5 1.4-0.5 1.4 0 1.5 1.2 1.5 1.6-0.4-0.1-1.1-0.3-2-0.1-1.4 0.3-2.8 2-2.1 3.9 0.7 1.8 3.1 2.1 4.1 0.6v1h2v-5.3c0-2.7-1.9-3.7-3.5-3.7zM11.5 11.4c-0.1-1.9 1.5-1.9 2.5-1.8v1c0 1.2-2.3 2.3-2.5 0.8z"></path>
+<path fill="#FFFFFF" d="M6.9 14h2.1l-3.2-12h-2.7l-3.1 12h2.1l1-4h2.7l1.1 4zM3.6 8l0.8-3.2 0.9 3.2h-1.7z"></path>
+</svg>
index 5ad8a8d95ba407686eb6f45b4519c45114478a02..5326f1993f28010deb641d42b1f3cdafab6d1899 100644 (file)
@@ -2,7 +2,7 @@
 <!-- Generated by IcoMoon.io -->
 <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
 <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16">
-<path fill="#dddddd" d="M10.3 8.2l-0.9 0.9 0.9 0.9-1.2 1.2 4.3 4.3c0.6 0.6 1.5 0.6 2.1 0s0.6-1.5 0-2.1l-5.2-5.2zM14.2 15c-0.4 0-0.8-0.3-0.8-0.8 0-0.4 0.3-0.8 0.8-0.8s0.8 0.3 0.8 0.8c0 0.5-0.3 0.8-0.8 0.8z"></path>
-<path fill="#dddddd" d="M3.6 8l0.9-0.6 1.5-1.7 0.9 0.9 0.9-0.9-0.1-0.1c0.2-0.5 0.3-1 0.3-1.6 0-2.2-1.8-4-4-4-0.6 0-1.1 0.1-1.6 0.3l2.9 2.9-2.1 2.1-2.9-2.9c-0.2 0.5-0.3 1-0.3 1.6 0 2.1 1.6 3.7 3.6 4z"></path>
-<path fill="#dddddd" d="M8 10.8l0.9-0.8-0.9-0.9 5.7-5.7 1.2-0.4 1.1-2.2-0.7-0.7-2.3 1-0.5 1.2-5.6 5.7-0.9-0.9-0.8 0.9c0 0 0.8 0.6-0.1 1.5-0.5 0.5-1.3-0.1-2.8 1.4-0.5 0.5-2.1 2.1-2.1 2.1s-0.6 1 0.6 2.2 2.2 0.6 2.2 0.6 1.6-1.6 2.1-2.1c1.4-1.4 0.9-2.3 1.3-2.7 0.9-0.9 1.6-0.2 1.6-0.2zM4.9 10.4l0.7 0.7-3.8 3.8-0.7-0.7z"></path>
+<path fill="#FFFFFF" d="M10.3 8.2l-0.9 0.9 0.9 0.9-1.2 1.2 4.3 4.3c0.6 0.6 1.5 0.6 2.1 0s0.6-1.5 0-2.1l-5.2-5.2zM14.2 15c-0.4 0-0.8-0.3-0.8-0.8 0-0.4 0.3-0.8 0.8-0.8s0.8 0.3 0.8 0.8c0 0.5-0.3 0.8-0.8 0.8z"></path>
+<path fill="#FFFFFF" d="M3.6 8l0.9-0.6 1.5-1.7 0.9 0.9 0.9-0.9-0.1-0.1c0.2-0.5 0.3-1 0.3-1.6 0-2.2-1.8-4-4-4-0.6 0-1.1 0.1-1.6 0.3l2.9 2.9-2.1 2.1-2.9-2.9c-0.2 0.5-0.3 1-0.3 1.6 0 2.1 1.6 3.7 3.6 4z"></path>
+<path fill="#FFFFFF" d="M8 10.8l0.9-0.8-0.9-0.9 5.7-5.7 1.2-0.4 1.1-2.2-0.7-0.7-2.3 1-0.5 1.2-5.6 5.7-0.9-0.9-0.8 0.9c0 0 0.8 0.6-0.1 1.5-0.5 0.5-1.3-0.1-2.8 1.4-0.5 0.5-2.1 2.1-2.1 2.1s-0.6 1 0.6 2.2 2.2 0.6 2.2 0.6 1.6-1.6 2.1-2.1c1.4-1.4 0.9-2.3 1.3-2.7 0.9-0.9 1.6-0.2 1.6-0.2zM4.9 10.4l0.7 0.7-3.8 3.8-0.7-0.7z"></path>
 </svg>
diff --git a/CrowIDE/icons/xml-file.svg b/CrowIDE/icons/xml-file.svg
new file mode 100644 (file)
index 0000000..0420435
--- /dev/null
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generated by IcoMoon.io -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16">
+<path fill="#ffffff" d="M 10,0 H 2 V 16 H 14 V 4 Z"/>
+<path fill="#444444" d="M10 0h-8v16h12v-12l-4-4zM9 5h4v10h-10v-14h6v4zM10 4v-3l3 3h-3z"/>
+<text x="3" y="12" fill="darkorange" font-stretch="condensed" font-family="mono" font-size="6px" font-weight="bold">&lt;/&gt;</text>
+</svg>
\ No newline at end of file
index 540a93bba57d33a64ce6226ad13396c4fd12387d..60c41d1482dc8021e249f79f8e2fa705810b3463 100644 (file)
@@ -2,6 +2,6 @@
 <!-- Generated by IcoMoon.io -->
 <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
 <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16">
-<path fill="#dddddd" d="M15.7 14.3l-4.2-4.2c-0.2-0.2-0.5-0.3-0.8-0.3 0.8-1 1.3-2.4 1.3-3.8 0-3.3-2.7-6-6-6s-6 2.7-6 6 2.7 6 6 6c1.4 0 2.8-0.5 3.8-1.4 0 0.3 0 0.6 0.3 0.8l4.2 4.2c0.2 0.2 0.5 0.3 0.7 0.3s0.5-0.1 0.7-0.3c0.4-0.3 0.4-0.9 0-1.3zM6 10.5c-2.5 0-4.5-2-4.5-4.5s2-4.5 4.5-4.5 4.5 2 4.5 4.5-2 4.5-4.5 4.5z"></path>
-<path fill="#dddddd" d="M7 3h-2v2h-2v2h2v2h2v-2h2v-2h-2z"></path>
+<path fill="#FFFFFF" d="M15.7 14.3l-4.2-4.2c-0.2-0.2-0.5-0.3-0.8-0.3 0.8-1 1.3-2.4 1.3-3.8 0-3.3-2.7-6-6-6s-6 2.7-6 6 2.7 6 6 6c1.4 0 2.8-0.5 3.8-1.4 0 0.3 0 0.6 0.3 0.8l4.2 4.2c0.2 0.2 0.5 0.3 0.7 0.3s0.5-0.1 0.7-0.3c0.4-0.3 0.4-0.9 0-1.3zM6 10.5c-2.5 0-4.5-2-4.5-4.5s2-4.5 4.5-4.5 4.5 2 4.5 4.5-2 4.5-4.5 4.5z"></path>
+<path fill="#FFFFFF" d="M7 3h-2v2h-2v2h2v2h2v-2h2v-2h-2z"></path>
 </svg>
index 6bd256f9c2015a133b818ca9278014a5ad1c62e6..bd4eec3a0537fa0de72830c07a93323a369a817e 100644 (file)
@@ -2,6 +2,6 @@
 <!-- Generated by IcoMoon.io -->
 <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
 <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16">
-<path fill="#dddddd" d="M15.7 14.3l-4.2-4.2c-0.2-0.2-0.5-0.3-0.8-0.3 0.8-1 1.3-2.4 1.3-3.8 0-3.3-2.7-6-6-6s-6 2.7-6 6 2.7 6 6 6c1.4 0 2.8-0.5 3.8-1.4 0 0.3 0 0.6 0.3 0.8l4.2 4.2c0.2 0.2 0.5 0.3 0.7 0.3s0.5-0.1 0.7-0.3c0.4-0.3 0.4-0.9 0-1.3zM6 10.5c-2.5 0-4.5-2-4.5-4.5s2-4.5 4.5-4.5 4.5 2 4.5 4.5-2 4.5-4.5 4.5z"></path>
-<path fill="#dddddd" d="M3 5h6v2h-6v-2z"></path>
+<path fill="#FFFFFF" d="M15.7 14.3l-4.2-4.2c-0.2-0.2-0.5-0.3-0.8-0.3 0.8-1 1.3-2.4 1.3-3.8 0-3.3-2.7-6-6-6s-6 2.7-6 6 2.7 6 6 6c1.4 0 2.8-0.5 3.8-1.4 0 0.3 0 0.6 0.3 0.8l4.2 4.2c0.2 0.2 0.5 0.3 0.7 0.3s0.5-0.1 0.7-0.3c0.4-0.3 0.4-0.9 0-1.3zM6 10.5c-2.5 0-4.5-2-4.5-4.5s2-4.5 4.5-4.5 4.5 2 4.5 4.5-2 4.5-4.5 4.5z"></path>
+<path fill="#FFFFFF" d="M3 5h6v2h-6v-2z"></path>
 </svg>
index 55ea1570a88d5882d21e5421d24a936e35ee1e6d..e398af8db1c63a321e5b4fd3e531191ab952c8e8 100644 (file)
@@ -44,21 +44,21 @@ namespace Crow.Coding
                CMDCompile;
 
                void initCommands () {
-                       CMDNew = new Command(new Action(() => newFile())) { Caption = "New", Icon = new SvgPicture("#Crow.Coding.ui.icons.blank-file.svg"), CanExecute = true};
-                       CMDOpen = new Command(new Action(() => openFileDialog())) { Caption = "Open...", Icon = new SvgPicture("#Crow.Coding.icons.open.svg")};
-                       CMDSave = new Command(new Action(() => saveFileDialog())) { Caption = "Save", Icon = new SvgPicture("#Crow.Coding.icons.save.svg"), CanExecute = false};
-                       CMDSaveAs = new Command(new Action(() => saveFileDialog())) { Caption = "Save As...", Icon = new SvgPicture("#Crow.Coding.icons.save.svg"), CanExecute = false};
-                       CMDQuit = new Command(new Action(() => app.running = false)) { Caption = "Quit", Icon = new SvgPicture("#Crow.Coding.ui.icons.sign-out.svg")};
-                       CMDUndo = new Command(new Action(() => undo())) { Caption = "Undo", Icon = new SvgPicture("#Crow.Coding.icons.undo.svg"), CanExecute = false};
-                       CMDRedo = new Command(new Action(() => redo())) { Caption = "Redo", Icon = new SvgPicture("#Crow.Coding.icons.redo.svg"), CanExecute = false};
-                       //CMDCut = new Command(new Action(() => Quit (null, null))) { Caption = "Cut", Icon = new SvgPicture("#Crow.Coding.icons.scissors.svg"), CanExecute = false};
-                       //CMDCopy = new Command(new Action(() => Quit (null, null))) { Caption = "Copy", Icon = new SvgPicture("#Crow.Coding.icons.copy-file.svg"), CanExecute = false};
-                       //CMDPaste = new Command(new Action(() => Quit (null, null))) { Caption = "Paste", Icon = new SvgPicture("#Crow.Coding.icons.paste-on-document.svg"), CanExecute = false};
-                       CMDHelp = new Command(new Action(() => System.Diagnostics.Debug.WriteLine("help"))) { Caption = "Help", Icon = new SvgPicture("#Crow.Coding.icons.question.svg")};
-                       CMDOptions = new Command(new Action(() => loadWindow("#Crow.Coding.ui.Options.crow"))) { Caption = "Editor Options", Icon = new SvgPicture("#Crow.Coding.icons.tools.svg")};
+                       CMDNew = new Command(new Action(() => newFile())) { Caption = "New", Icon = new SvgPicture("#icons.blank-file.svg"), CanExecute = true};
+                       CMDOpen = new Command(new Action(() => openFileDialog())) { Caption = "Open...", Icon = new SvgPicture("#icons.open.svg") };
+                       CMDSave = new Command(new Action(() => saveFileDialog())) { Caption = "Save", Icon = new SvgPicture("#icons.save.svg"), CanExecute = false};
+                       CMDSaveAs = new Command(new Action(() => saveFileDialog())) { Caption = "Save As...", Icon = new SvgPicture("#icons.save.svg"), CanExecute = false};
+                       CMDQuit = new Command(new Action(() => app.running = false)) { Caption = "Quit", Icon = new SvgPicture("#icons.sign-out.svg") };
+                       CMDUndo = new Command(new Action(() => undo())) { Caption = "Undo", Icon = new SvgPicture("#icons.undo.svg"), CanExecute = false};
+                       CMDRedo = new Command(new Action(() => redo())) { Caption = "Redo", Icon = new SvgPicture("#icons.redo.svg"), CanExecute = false};
+            //CMDCut = new Command(new Action(() => Quit (null, null))) { Caption = "Cut", Icon = new SvgPicture("#icons.scissors.svg"), CanExecute = false};
+            //CMDCopy = new Command(new Action(() => Quit (null, null))) { Caption = "Copy", Icon = new SvgPicture("#icons.copy-file.svg"), CanExecute = false};
+            //CMDPaste = new Command(new Action(() => Quit (null, null))) { Caption = "Paste", Icon = new SvgPicture("#icons.paste-on-document.svg"), CanExecute = false};
+            CMDHelp = new Command(new Action(() => System.Diagnostics.Debug.WriteLine("help"))) { Caption = "Help", Icon = new SvgPicture("#icons.question.svg") };
+                       CMDOptions = new Command(new Action(() => loadWindow("#Crow.Coding.ui.Options.crow"))) { Caption = "Editor Options", Icon = new SvgPicture("#icons.tools.svg") };
 
                        cmdCloseSolution = new Command(new Action(() => closeSolution()))
-                       { Caption = "Close Solution", Icon = new SvgPicture("#Crow.Coding.icons.paste-on-document.svg"), CanExecute = false};
+                       { Caption = "Close Solution", Icon = new SvgPicture("#icons.paste-on-document.svg"), CanExecute = false};
 
                        CMDViewErrors = new Command(new Action(() => loadWindow ("#Crow.Coding.ui.DockWindows.winErrors.crow",this)))
                        { Caption = "Errors pane"};
@@ -156,7 +156,13 @@ namespace Crow.Coding
                public static CrowIDE MainWin;
 
                void initIde() {
-                       initCommands ();
+
+            foreach (string s in System.Reflection.Assembly.GetEntryAssembly().GetManifestResourceNames())
+            {
+                Console.WriteLine(s);
+            }
+
+            initCommands ();
 
                        GraphicObject go = AddWidget (@"#Crow.Coding.ui.CrowIDE.crow");
                        go.DataSource = this;
@@ -282,7 +288,7 @@ namespace Crow.Coding
                                g.DataSource = dataSource;
                                return g as Window;
                        } catch (Exception ex) {
-                               System.Diagnostics.Debug.WriteLine (ex.ToString ());
+                               Console.WriteLine (ex.ToString ());
                        }
                        return null;
                }
index 00d1ec96cb009b28a50e01586d30b94f71e18f1c..225d3ae91e374dc88eb702a812f1b0f393e9f72d 100644 (file)
@@ -67,18 +67,18 @@ namespace Crow.Coding
 
                void initCommands () {
                        cmdDelete = new Crow.Command (new Action (() => deleteObject (SelectedItem)))
-                               { Caption = "Delete", Icon = new SvgPicture ("#Crow.Coding.icons.save.svg"), CanExecute = true };
+                               { Caption = "Delete", Icon = new SvgPicture ("#icons.save.svg"), CanExecute = true };
                        Commands = new List<Crow.Command> (new Crow.Command[] { cmdDelete });
                }
 
                void initIcons () {
-                       icoMove = new SvgPicture ("#Crow.Coding.icons.move-arrows.svg");
+                       icoMove = new SvgPicture ("#icons.move-arrows.svg");
 
-//                     icoStyle = new SvgPicture ();
-//                     icoStyle.Load (IFace, "#Crow.Coding.icons.palette.svg");
-               }
+            //                 icoStyle = new SvgPicture ();
+            //                 icoStyle.Load (IFace, "#icons.palette.svg");
+        }
 
-               [DefaultValue(true)]
+        [DefaultValue(true)]
                public bool DrawGrid {
                        get { return drawGrid; }
                        set {
index 05ef71e4f73c627b76a04c9ca5dc5f602a8b7fac..45873d3ef2ede29d82d4f62a8dc367420a6e83aa 100644 (file)
@@ -26,7 +26,7 @@ namespace Crow
        public static partial class Extensions
        {
                public static string GetIcon(this GraphicObject go){
-                       return "#Crow.Coding.icons.toolbox." + go.GetType().FullName + ".svg";
+                       return "#icons.toolbox." + go.GetType().FullName + ".svg";
                }
                public static List<GraphicObject> GetChildren(this GraphicObject go){
                        Type goType = go.GetType();
index 26e61c916bb0e19c4432316375778546cc845078..d99b38cb339c1c432052d26dbb64ff213f5b89ae 100644 (file)
@@ -41,7 +41,7 @@ namespace Crow.Coding
                public Type CrowType;
 
                public string IconPath {
-                       get { return "#Crow.Coding.icons.toolbox." + CrowType.FullName + ".svg"; }
+                       get { return "#icons.toolbox." + CrowType.FullName + ".svg"; }
                }
                public string DisplayName {
                        get { return CrowType.Name; }
index 693da8680d6b9fbf62074683261eac9c1a7aa515..0a6534986c3ed8485536d966f2e113fb0690cec1 100644 (file)
@@ -61,18 +61,18 @@ namespace Crow.Coding
                        solution = sol;
 
                        cmdSave = new Crow.Command (new Action (() => Save ()))
-                       { Caption = "Save", Icon = new SvgPicture ("#Crow.Coding.icons.save.svg"), CanExecute = true };
+                       { Caption = "Save", Icon = new SvgPicture ("#icons.save.svg"), CanExecute = true };
                        cmdOpen = new Crow.Command (new Action (() => Load ())) 
-                       { Caption = "Open", Icon = new SvgPicture ("#Crow.Coding.icons.open.svg"), CanExecute = false };
+                       { Caption = "Open", Icon = new SvgPicture ("#icons.open.svg"), CanExecute = false };
                        cmdCompile = new Crow.Command (new Action (() => Compile ())) {
                                Caption = "Compile",
-                               Icon = "#Crow.Coding.icons.compile.svg"
+                               Icon = "#icons.compile.svg"
                        };
                        cmdSetAsStartProj = new Crow.Command (new Action (() => setAsStartupProject ())) {
                                Caption = "Set as Startup Project"
                        };
                        cmdNewFile = new Crow.Command (new Action (() => AddNewFile ())) {
-                               Caption = "Add New File", Icon = new SvgPicture ("#Crow.Coding.icons.blank-file.svg"), CanExecute = true
+                               Caption = "Add New File", Icon = new SvgPicture ("#icons.blank-file.svg"), CanExecute = true
                        };
 
                        Commands = new List<Crow.Command> (new Crow.Command[] {cmdOpen,cmdSave,cmdSetAsStartProj,cmdCompile,cmdNewFile});
index 7218c1d113a6cb0017d49d1551d01e7822ddc33f..2c60c32ceb01083d195a73e879c9c97b26e6da1e 100644 (file)
@@ -51,17 +51,17 @@ namespace Crow.Coding
 
                void initCommands (){
                        cmdSave = new Crow.Command (new Action (() => Save ()))
-                       { Caption = "Save", Icon = new SvgPicture ("#Crow.Coding.icons.save.svg"), CanExecute = false };
+                       { Caption = "Save", Icon = new SvgPicture ("#icons.save.svg"), CanExecute = false };
                        cmdSaveAs = new Crow.Command (new Action (() => SaveAs ()))
-                       { Caption = "Save As ..", Icon = new SvgPicture ("#Crow.Coding.icons.save.svg"), CanExecute = false };
+                       { Caption = "Save As ..", Icon = new SvgPicture ("#icons.save.svg"), CanExecute = false };
                        cmdOpen = new Crow.Command (new Action (() => Open ())) 
-                       { Caption = "Open", Icon = new SvgPicture ("#Crow.Coding.icons.open.svg"), CanExecute = true };
+                       { Caption = "Open", Icon = new SvgPicture ("#icons.open.svg"), CanExecute = true };
                        cmdClose = new Crow.Command (new Action (() => OnQueryClose (this,null))) 
-                       { Caption = "Close", Icon = new SvgPicture ("#Crow.Coding.icons.open.svg"), CanExecute = false };
+                       { Caption = "Close", Icon = new SvgPicture ("#icons.open.svg"), CanExecute = false };
                        cmdUndo = new Crow.Command (new Action (() => Undo (null))) 
-                       { Caption = "Undo", Icon = new SvgPicture ("#Crow.Coding.icons.undo.svg"), CanExecute = false };
+                       { Caption = "Undo", Icon = new SvgPicture ("#icons.undo.svg"), CanExecute = false };
                        cmdRedo = new Crow.Command (new Action (() => Redo (null))) 
-                       { Caption = "Redo", Icon = new SvgPicture ("#Crow.Coding.icons.redo.svg"), CanExecute = false };
+                       { Caption = "Redo", Icon = new SvgPicture ("#icons.redo.svg"), CanExecute = false };
 
                        Commands.Insert (0, cmdOpen);
                        Commands.Insert (1, cmdSave);
index 71a0b0f3f9de9de4be37527c4a250b02282eb7ff..89889ca3d1dca395c46ed99127cddf15ff15297b 100644 (file)
@@ -43,7 +43,26 @@ namespace Crow.Coding
 
                public XmlNode node;
 
-               public string Extension {
+        public override Picture Icon {
+            get {
+                Console.WriteLine("extension="+Extension);
+
+                switch (Extension)
+                {
+                    case ".cs":
+                        return new SvgPicture("#icons.cs-file.svg");
+                    case ".crow":
+                        Console.WriteLine("loading icons.xml-file");
+                        return new SvgPicture("#icons.xml-file.svg");
+                    case ".xml":
+                        return new SvgPicture("#icons.xml-file.svg");
+                    default:
+                        return base.Icon;
+                }
+            }
+        }
+
+        public string Extension {
                        get { return System.IO.Path.GetExtension (Path); }
                }
                public string Path {
index b3b5e6c4f318866622486e037bb86d5de50fd8a9..5f518ff77ecd3c60d494c2ba2ae7dfa41b2fcc2a 100644 (file)
@@ -79,7 +79,7 @@ namespace Crow.Coding
 
                ProjectNode parent;
                bool isExpanded;
-               protected bool isSelected = false;
+               protected bool isSelected;
                ItemType type;
                string name;
                List<ProjectNode> childNodes = new List<ProjectNode>();
@@ -87,7 +87,7 @@ namespace Crow.Coding
                public Project Project;
                public List<Crow.Command> Commands;//list of command available for that node
 
-               public Crow.Picture Icon {
+               public virtual Crow.Picture Icon {
                        get {
                                switch (Type) {
                                case ItemType.Reference:
@@ -95,7 +95,7 @@ namespace Crow.Coding
                                case ItemType.ProjectReference:
                                        return new SvgPicture("#Crow.Icons.projectRef.svg"); 
                                default:
-                                       return new SvgPicture("#Crow.Coding.icons.file.svg"); 
+                                       return new SvgPicture("#icons.blank-file.svg"); 
                                }
                        }
                }
index f546492d905520a10cabfcefa0ce00f60d2923d2..d3732aee4ec3cb980128ca705f4cfb3ea190da8e 100755 (executable)
@@ -7,7 +7,7 @@
                                                                                                                        MouseEnter="{Background=LightGrey}"
                                                                                                                        MouseLeave="{Background=Transparent}">
                                        <Image
-                                               Path="#Crow.Images.Icons.expandable.svg"
+                                               Path="#Crow.Icons.expandable.svg"
                                                Visible="{./IsExpandable}"
                                                SvgSub="{./IsExpanded}"/>
                                </Container>
diff --git a/CrowIDE/ui/ContextMenu.template b/CrowIDE/ui/ContextMenu.template
deleted file mode 100644 (file)
index 38e6b7b..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<MenuItem MinimumSize="20,20" Height="Fit" Width="160" Caption="Context Menu" Data="{ContextCommands}" Orientation="Vertical"
-       IsOpened ="true" Visible="{/IsOpened}" SelectionBackground="Transparent">
-       <Template>              
-               <Border Background="DimGrey" Foreground="Black" CornerRadius="2">
-                       <GenericStack Orientation="{./Orientation}" Name="ItemsContainer" Margin="2"/>
-               </Border>               
-       </Template>
-       <ItemTemplate>
-               <MenuItem Command="{}" Width="150" PopWidth="120" SelectionBackground="Transparent" IsEnabled="{CanExecute}">
-                       <Template>
-                               <Popper Font="{./Font}" Caption="{./Caption}"  Background="{./Background}" PopDirection="{./PopDirection}"
-                                       Foreground = "{./Foreground}" CanPop="{./HasChildren}" MouseDown="./onMI_Click"
-                                       IsPopped="{²./IsOpened}" PopWidth="{./PopWidth}" PopHeight="{./PopHeight}">
-                                       <Template>
-                                               <Border Name="border1"
-                                                               CornerRadius="0"
-                                                               MouseEnter="{Foreground=vgradient|0:White|0.2:Grey|0.9:Grey|1:Black}"
-                                                               MouseLeave="{Foreground=Transparent}"
-                                                               MouseDown="{Foreground=vgradient|0:Black|0.05:Grey|0.85:Grey|1:White}"
-                                                               MouseUp="{Foreground=vgradient|0:White|0.2:Grey|0.9:Grey|1:Black}"
-                                                               MinimumSize = "60,0"
-                                                               Foreground="Transparent"
-                                                               Background="{./Background}">
-                                                               <HorizontalStack Spacing="5">
-                                                                       <Image Height="14" Width="14" Picture="{Icon}" />
-                                                                       <Label Text="{./Caption}"
-                                                                               Foreground="{./Foreground}"
-                                                                               Margin="1" HorizontalAlignment="Left"
-                                                                               Font="{./Font}" />
-                                                               </HorizontalStack>
-                                               </Border>
-                                       </Template>
-                                       <Border Foreground="DimGrey" Width="{../PopWidth}" Height="{../PopHeight}" Background="DimGrey">
-                                               <VerticalStack Name="ItemsContainer"/>
-                                       </Border>
-                               </Popper>
-                       </Template>
-               </MenuItem>
-       </ItemTemplate>
-</MenuItem>
-
index c2029d5fc3d12aa3ea543bd667399710c0783947..461a2606f5ef7f34a51e9a24f3373ab077c5652d 100644 (file)
@@ -2,5 +2,5 @@
 <DockWindow Name="winEditor" Caption="Edit View">
        <EditPane DataSource="{CurrentSolution}"
                SelectedItemElement="{²SelectedItemElement}" Data="{OpenedItems}" DataTest="Extension"
-               ItemTemplate="#Crow.Coding.ui.EditPaneItems.template"/>
+               ItemTemplate="#Crow.Coding.EditPaneItems.template"/>
 </DockWindow>
index 25d073b6d184e99c980f0b9faebed1fbb2439756..2ef5f6e0c7a87fae740ea520870e7444251d6760 100644 (file)
@@ -2,6 +2,6 @@
 <DockWindow Name="winProperties" Caption="Properties"  Width="20%">
        <MembersView DataSource="{CurrentSolution}" ProjectNode="{SelectedItem}"
                Instance="{SelectedItemElement}" DataTest="Type"
-               ItemTemplate="#Crow.Coding.ui.MembersItem.template"/>
+               ItemTemplate="#Crow.Coding.MembersItem.template"/>
 </DockWindow>
 
index 06ca58bab04877701fc5f4eb6884373756d4c78f..e33a2006db2abb4b6a564ca048240a6edb4ef2d5 100644 (file)
@@ -2,5 +2,5 @@
 <DockWindow Name="winSolution" Caption="Solution"  Width="20%">
        <TreeView Name="treeview" IsRoot="true" DataSource="{CurrentSolution}"
                Data="{Projects}" SelectedItemChanged="onSelectedItemChanged"
-               ItemTemplate="#Crow.Coding.ui.ProjectTree.template"/>
+               ItemTemplate="#Crow.Coding.ProjectTree.template"/>
 </DockWindow>
diff --git a/CrowIDE/ui/IDE.style b/CrowIDE/ui/IDE.style
deleted file mode 100644 (file)
index 3ba5ed4..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-icon {
-       Width="14";
-       Height="14";
-}
-MemberViewLabel {
-       Margin="1";
-       Height="Fit";
-       Width="50%";
-       Background="White";
-}
-MemberViewHStack {
-       Focusable="true";
-       Height="Fit";
-       Spacing="1";
-       MouseEnter="{Background=SteelBlue}";
-       MouseLeave="{Background=Transparent}";
-}
-
-IcoBut {
-       Template = "#Crow.Coding.ui.IcoBut.template";
-       MinimumSize = "10,10";
-       Width = "8";
-       Height = "14";
-       Background = "White";
-}
-
-WinSchema {
-       Template="#Crow.Coding.ui.DockWindows.WinSchemaItem.template";
-       Focusable = "true";
-       MinimumSize="150,50";
-       Width = "Fit";
-       Height = "Fit";
-}
-TabItem {
-       AllowDrag="false";
-       Background="Onyx";
-       SelectedBackground="vgradient|0:DimGrey|0.4:Onyx";
-}
-TreeItemBorder {
-       CornerRadius="2";
-       Margin="0";
-       //Focusable="true";
-       Height="Fit";
-       Width="Stretched";
-       Foreground="Transparent";
-       MouseEnter="{Foreground=DimGrey}";
-       MouseLeave="{Foreground=Transparent}";
-}
-TreeIcon {
-       Margin="0";
-       Width="14";
-       Height="14";
-}
-Splitter {
-       Thickness="1";
-       Background="RoyalBlue";
-}
index a9fc28a7dc7ab89dfea020faa4536110d3fddd89..ef84670d5f97efa22a598e753ca86b04a4880065 100644 (file)
@@ -3,5 +3,5 @@
        BorderWidth="1" BorderStyle="Normal"
        MouseDown="{BorderStyle=Sunken}"
        MouseUp="{BorderStyle=Normal}">
-       <Image Margin="1" Path="#Crow.Coding.ui.icons.blank-file.svg" />
+       <Image Margin="1" Path="#icons.blank-file" />
 </Border>
index efd9e4363fc83ed8e1343fd1b1416570f9c30fbf..61b902ef0e72100a24be2bb1e4cf9bca1a099680 100755 (executable)
@@ -13,8 +13,8 @@
                                                                        <Label Width="Stretched" MinimumSize="80,10" Margin="1" Foreground = "{LabForeground}" Background="White"
                                                                                Text="{../../../../../SelectedItem}"/>
                                                                        <Button Width="12" Height="12" Focusable="false"
-                                                                               Template="#Crow.Templates.ArrowBut.template">
-                                                                               <Image Margin="1" Path="#Crow.Images.Icons.updown.svg" SvgSub="down"/>
+                                                                               Template="#Crow.ArrowBut.template">
+                                                                               <Image Margin="1" Path="#Crow.Icons.updown.svg" SvgSub="down"/>
                                                                        </Button>
                                                                </HorizontalStack>
                                                        </Border>
index f1427e310b791bdc8ef1cd1f07258180896b554c..845a117dddcd62de26f8ffd46bc94cba15acbeb2 100755 (executable)
@@ -5,7 +5,7 @@
                <TextBox Margin="1" Text="{²Value}" Height="Fit" Foreground = "{LabForeground}"/>
        </HorizontalStack>
 </ItemTemplate>
-<ItemTemplate Path="#Crow.Coding.ui.CategoryExp.template" DataType="Crow.Coding.CategoryContainer"
+<ItemTemplate Path="#Crow.Coding.CategoryExp.template" DataType="Crow.Coding.CategoryContainer"
        Data="Properties" DataTest="Type"/>
 <ItemTemplate DataType="System.Boolean" >
        <HorizontalStack Style="MemberViewHStack" ContextCommands="{Commands}">
@@ -13,7 +13,7 @@
                <CheckBox Background="White" Foreground = "{LabForeground}" Height="Stretched" Caption="" IsChecked="{²Value}"/>
        </HorizontalStack>
 </ItemTemplate>
-<ItemTemplate Path="#Crow.Coding.ui.ItemTemplates.Enum.template" DataType="System.Enum" />
-<ItemTemplate Path="#Crow.Coding.ui.ItemTemplates.Enum.template" DataType="Style" />
+<ItemTemplate Path="#Crow.Coding.Enum.template" DataType="System.Enum" />
+<ItemTemplate Path="#Crow.Coding.Enum.template" DataType="Style" />
 <!--<ItemTemplate Path="#Crow.Coding.ui.ItemTemplates.Fill.template" DataType="Crow.Fill"/>-->
        
\ No newline at end of file
index ef66b2e0c2db21fbdec989da9ea4a17b020d787b..046049ebc4bde32f285a6f720017284b86423f95 100755 (executable)
                                Height="Fit" Name="ItemsContainer" Margin="0" VerticalAlignment="Top"/>
                </Scroller>
                <ScrollBar
-                       Name="scrollbar1"
+                       Name="scrollbar1" Orientation="Vertical"
                        LargeIncrement="{../scroller1.PageHeight}" SmallIncrement="30"
                        CursorSize="{../scroller1.ChildHeightRatio}"
                        Value="{²../scroller1.ScrollY}"
-                       Maximum="{../scroller1.MaxScrollY}"
-                       Width="14" Orientation="Vertical"/>
+                       Maximum="{../scroller1.MaxScrollY}"/>
        </HorizontalStack>
 </VerticalStack>
diff --git a/CrowIDE/ui/MenuItem.template b/CrowIDE/ui/MenuItem.template
deleted file mode 100644 (file)
index bf01f99..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0"?>
-<Popper Font="{./Font}" Caption="{./Caption}"  Background="{./Background}" PopDirection="{./PopDirection}"
-       Foreground = "{./Foreground}" CanPop="{./HasChildren}" MouseClick="./onMI_Click"
-       IsPopped="{²./IsOpened}" PopWidth="{./PopWidth}" PopHeight="{./PopHeight}" IsEnabled="{./IsEnabled}">
-       <Template>
-               <CheckBox IsChecked="{²./IsPopped}" Caption="{./Caption}" Background="{./Background}" Foreground="{./Foreground}">
-                       <Template>
-                               <Border Name="border1"
-                                               MouseEnter="{Foreground=vgradient|0:White|0.2:Grey|0.9:Grey|1:Black}"
-                                               MouseLeave="{Foreground=Transparent}"
-                                               MouseDown="{Foreground=vgradient|0:Black|0.05:Grey|0.85:Grey|1:White}"
-                                               MouseUp="{Foreground=vgradient|0:White|0.2:Grey|0.9:Grey|1:Black}"
-                                               MinimumSize = "40,0"
-                                               Foreground="Transparent"
-                                               Background="{./Background}">
-                                               <HorizontalStack HorizontalAlignment="Left" Margin="1">
-                                                       <Image Width="10" Height="10" Picture="{../../../../../Icon}"/>
-                                                       <Label Text="{./Caption}"
-                                                               Foreground="{./Foreground}"
-                                                               Font="{./Font}" />
-                                               </HorizontalStack>
-                               </Border>
-                       </Template>
-               </CheckBox>
-       </Template>
-       <Border Foreground="DimGrey" Width="{../PopWidth}" Height="{../PopHeight}" Background="Jet">
-               <VerticalStack Name="ItemsContainer"/>
-       </Border>
-</Popper>
index a18b67dcdbdc71e830946f6d57625f75738c3c94..0e31bb3ae72af08b61821a61ce859cb99a209f6a 100644 (file)
@@ -26,8 +26,7 @@
                                                <Image Style="TreeIcon"
                                                        Path="#Crow.Icons.crowproj.svg"/>
                                                <GraphicObject Width="4" Height="9" Background="Green" Visible="{IsStartupProject}"/>
-                                               <Label Text="{./Caption}"/>
-                                               <Label Text="{./Caption}" Visible="{IsStartupProject}" Font="mono bold, 12"/>
+                                               <Label Text="{./Caption}"/>                                             
                                        </HorizontalStack>
                                </Border>
                                <Container Name="Content" Visible="false"/>
@@ -40,7 +39,7 @@
        </Expandable>
 </ItemTemplate>
 <ItemTemplate DataType="ReferenceGroup" Data="ChildNodes" DataTest="Type" >
-       <Expandable Caption="{DisplayName}" Template="#Crow.TreeExpandable.template" IsExpanded="{²IsExpanded}">
+       <Expandable Caption="{DisplayName}" Template="#Crow.Coding.TreeExpandable.template" IsExpanded="{²IsExpanded}">
                <HorizontalStack Height="Fit">
                        <GraphicObject Width="8" Height="10"/>
                        <VerticalStack Height="Fit" Name="ItemsContainer"/>
@@ -48,7 +47,7 @@
        </Expandable>
 </ItemTemplate>
 <ItemTemplate DataType="VirtualGroup" Data="ChildNodes" DataTest="Type">
-       <Expandable Caption="{DisplayName}" Template="#Crow.TreeExpandable.template" IsExpanded="{²IsExpanded}">
+       <Expandable Caption="{DisplayName}" Template="#Crow.Coding.TreeExpandable.template" IsExpanded="{²IsExpanded}">
                <HorizontalStack Height="Fit">
                        <GraphicObject Width="8" Height="10"/>
                        <VerticalStack Height="Fit" Name="ItemsContainer"/>
diff --git a/CrowIDE/ui/TabItem.template b/CrowIDE/ui/TabItem.template
deleted file mode 100644 (file)
index 4253059..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0"?>
-<GenericStack Orientation="Vertical" Spacing="0"               
-               MouseEnter="{caption.Foreground=White}"
-               MouseLeave="{caption.Foreground=Grey}">
-       <HorizontalStack Margin="2" Left="{./TabOffset}"
-               Name="TabTitle"
-               HorizontalAlignment="Left"
-               Height="{./TabHeight}"
-               Width="{./TabWidth}">
-               <Label Name="caption" Text="{./Caption}" Foreground="Grey" Width="Stretched"/>
-               <Border CornerRadius="5" BorderWidth="1" Foreground="Transparent"  Height="12" Width="12"
-                                       MouseEnter="{Foreground=White}" MouseLeave="{Foreground=Transparent}">
-                       <Image Focusable="true" Name="Image" Margin="0" Width="Stretched" Height="Stretched" Path="#Crow.Images.Icons.exit2.svg"
-                                MouseClick="./butCloseTabClick"/>
-               </Border>
-       </HorizontalStack>
-       <Container Name="Content"/>
-</GenericStack>
-
index 8191c3175dd3d3e174d5c36b7bc3520df23d6d5b..27de0df2520b33f4c7713059ccb6bf843219155a 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0"?>
 <VerticalStack>
-       <Border Style="TreeItemBorder" MouseDoubleClick="./onClickForExpand">           
-               <HorizontalStack Spacing="5">
+       <Border Style="TreeItemBorder" >                
+               <HorizontalStack Spacing="5" Focusable="true" MouseDoubleClick="./onClickForExpand">
                        <Image Margin="1" Width="9" Height="9" Focusable="true" MouseDown="./onClickForExpand"
                                Path="{./Image}"
                                Visible="{./IsExpandable}"
@@ -9,7 +9,7 @@
                                MouseEnter="{Background=LightGrey}"
                                MouseLeave="{Background=Transparent}"/>
                        <Image Style="TreeIcon"
-                               Path="#Crow.Coding.icons.folder.svg" SvgSub="{./IsExpanded}"/>
+                               Path="#icons.folder.svg" SvgSub="{./IsExpanded}"/>
                        <Label Text="{./Caption}"/>
                </HorizontalStack>
        </Border>
index 4f5cb021f18a9a8747f0a9b9a282efbdb248739f..5e71222810e51e4e6d55f79ebdb97a72d344772d 100644 (file)
@@ -4,14 +4,14 @@
                <Label Text="Error" Background="Red"/>
        </TabItem>
 </ItemTemplate>
-<ItemTemplate Path="#Crow.Coding.ui.SvgEdit.itemp" DataType=".svg"/>
-<ItemTemplate Path="#Crow.Coding.ui.SrcEdit.itemp" DataType=".cs"/>
-<ItemTemplate Path="#Crow.Coding.ui.SrcEdit.itemp" DataType=".style"/>
-<ItemTemplate Path="#Crow.Coding.ui.IMLEdit.itemp" DataType=".crow"/>
-<ItemTemplate Path="#Crow.Coding.ui.IMLEdit.itemp" DataType=".template"/>
+<ItemTemplate Path="#Crow.Coding.ui.editors.SvgEdit.itemp" DataType=".svg"/>
+<ItemTemplate Path="#Crow.Coding.ui.editors.SrcEdit.itemp" DataType=".cs"/>
+<ItemTemplate Path="#Crow.Coding.ui.editors.SrcEdit.itemp" DataType=".style"/>
+<ItemTemplate Path="#Crow.Coding.ui.editors.IMLEdit.itemp" DataType=".crow"/>
+<ItemTemplate Path="#Crow.Coding.ui.editors.IMLEdit.itemp" DataType=".template"/>
 <ItemTemplate DataType=".goml">
        <TabItem Caption="{DisplayName}" QueryClose="OnQueryClose">
-               <IMLContainer Path="#Crow.Coding.ui.TextEditor.crow"/>
+               <IMLContainer Path="#Crow.Coding.ui.editors.TextEditor.crow"/>
        </TabItem>
 </ItemTemplate>
 
index f283c20dba4aada4ace5a4264221eb2a82d6b0a9..81cc84d8df5fd80d92476ad00675881315b056f8 100644 (file)
@@ -1,17 +1,17 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <GenericStack Orientation="Vertical" Spacing="0"               
-       MouseEnter="{caption.Foreground=White}"
-       MouseLeave="{caption.Foreground=Grey}">
+       MouseEnter="{caption.Font=hack bold, 10}"
+       MouseLeave="{caption.Font=hack, 10}">
        <HorizontalStack Margin="2" Left="{./TabOffset}"
                Name="TabTitle"
                HorizontalAlignment="Left"
                Height="{./TabHeight}"
                Width="{./TabWidth}">
                <GraphicObject Width="5" Height="5" Background="Blue" Visible="{IsDirty}"/>
-               <Label Name="caption" Text="{DisplayName}" Foreground="Grey" Width="Stretched"/>
+               <Label Name="caption" Text="{DisplayName}" Foreground="Black" Width="Stretched"/>
                <Border CornerRadius="5" BorderWidth="1" Foreground="Transparent"  Height="12" Width="12"
-                                       MouseEnter="{Foreground=White}" MouseLeave="{Foreground=Transparent}">
-                       <Image Focusable="true" Name="Image" Margin="0" Width="Stretched" Height="Stretched" Path="#Crow.Images.Icons.exit2.svg"
+                                       MouseEnter="{Foreground=Black}" MouseLeave="{Foreground=Transparent}">
+                       <Image Focusable="true" Name="Image" Margin="0" Width="Stretched" Height="Stretched" Path="#Crow.Icons.exit2.svg"
                                 MouseClick="./butCloseTabClick"/>
                </Border>
        </HorizontalStack>
index b121f00a7859272c72a51fad6d96a7602ade3eef..84c0063262bc58763c0d9a93a86671ff752edc70 100644 (file)
@@ -2,49 +2,50 @@
 <TabItem QueryClose="OnQueryClose" IsSelected="{²IsSelected}" Template="#Crow.Coding.EditTabItem.template">
 
        <VerticalStack>
-               <HorizontalStack Height="Fit" Margin="2" Spacing="5">
-                       <HorizontalStack Width="Fit" Spacing="1">
-                               <Label Text="Design Size:"/>
-                               <TextBox Text="{²../../../editor.DesignWidth}" Width="40" TextAlignment="Right"/>
-                               <Label Text="X"/>
-                               <TextBox Text="{²../../../editor.DesignHeight}" Width="40" TextAlignment="Right"/>
-                       </HorizontalStack>
-                       <HorizontalStack Width="Fit" Spacing="1">
-                               <Label Text="Zoom:"/>
-                               <Slider Value="{²../../../editor.Zoom}" Width="100" Height="10" Minimum="10" Maximum="200" SmallIncrement="10" LargeIncrement="50"/>
-                               <Label Text="{../../../editor.Zoom}"/>
-                       </HorizontalStack>
-                       <HorizontalStack Width="Fit" Spacing="1">
-                               <Label Text="Grid Spacing:"/>
-                               <Slider Value="{²../../../editor.GridSpacing}" Width="100" Height="10" Minimum="5" Maximum="100" SmallIncrement="5" LargeIncrement="20"/>
-                               <TextBox Text="{../../../editor.GridSpacing}"/>
-                       </HorizontalStack>
-               </HorizontalStack>
-               <Label DataSource="{../editor.HoverWidget}" Width="Stretched" Margin="1" Text="{Name}"/>
-               <VerticalStack Height="60%" Width="Stretched" Margin="0" MinimumSize="10,10">
-                       <HorizontalStack>
-                               <Scroller Name="scroller1" Margin="2" >
-                                       <ImlVisualEditor  Foreground="SkyBlue" Name="editor" Background="Grey"                                          
-                                               VerticalAlignment="Top" HorizontalAlignment="Left" Margin="4"
-                                               ContextCommands="{/Commands}"
-                                               AllowDrop="true" AllowDrag="true" Focusable="true"
-                                               UpdateEnabled="{../../../../../IsSelected}"
-                                               ProjectNode="{}" SelectedItem="{²SelectedItem}"/>
-                               </Scroller>
-                               <ScrollBar Name="scrollbar1" Orientation="Vertical"
-                                       Value="{²../scroller1.ScrollY}"        Maximum="{../scroller1.MaxScrollY}" 
-                                       CursorSize="{../scroller1.ChildHeightRatio}"
-                                       LargeIncrement="{../scroller1.PageHeight}" SmallIncrement="30"
-                                       Width="14" />
-                       </HorizontalStack>
-                       <ScrollBar Style="HScrollBar" Name="scrollbarX" Orientation="Horizontal"
-                                       Value="{²../scroller1.ScrollX}" Maximum="{../scroller1.MaxScrollX}" 
-                                       CursorSize="{../scroller1.ChildWidthRatio}" 
-                                       LargeIncrement="{../scroller1.PageWidth}" SmallIncrement="30"
-                                       Height="14" />
-               </VerticalStack>
-               <Splitter/>
-               <IMLContainer Path="#Crow.Coding.ui.SourceEditor.crow"/>
+        <VerticalStack Height="60%">
+               <Label DataSource="{../editor.HoverWidget}" Width="Stretched" Margin="2" Text="{Name}"/>
+               <VerticalStack Width="Stretched" Margin="0" MinimumSize="10,10">
+                       <HorizontalStack>
+                               <Scroller Name="scroller1" Margin="2" >
+                                       <ImlVisualEditor  Foreground="SkyBlue" Name="editor" Background="Grey"                                          
+                                               VerticalAlignment="Top" HorizontalAlignment="Left" Margin="4"
+                                               ContextCommands="{/Commands}"
+                                               AllowDrop="true" AllowDrag="true" Focusable="true"
+                                               UpdateEnabled="{../../../../../../IsSelected}"
+                                               ProjectNode="{}" SelectedItem="{²SelectedItem}"/>
+                               </Scroller>
+                               <ScrollBar Name="scrollbar1" Orientation="Vertical"                    
+                                       Value="{²../scroller1.ScrollY}"        Maximum="{../scroller1.MaxScrollY}" 
+                                       CursorSize="{../scroller1.ChildHeightRatio}"
+                                       LargeIncrement="{../scroller1.PageHeight}" SmallIncrement="30"
+                                        />
+                       </HorizontalStack>
+                       <ScrollBar Style="HScrollBar" Name="scrollbarX" Orientation="Horizontal"                    
+                                       Value="{²../scroller1.ScrollX}" Maximum="{../scroller1.MaxScrollX}" 
+                                       CursorSize="{../scroller1.ChildWidthRatio}" 
+                                       LargeIncrement="{../scroller1.PageWidth}" SmallIncrement="30"/>
+               </VerticalStack>        
+            <HorizontalStack Height="Fit" Margin="2" Spacing="5" Background="vgradient|0:0.8,0.8,0.8,1|1:Grey">
+                <HorizontalStack Width="Fit" Spacing="1">
+                    <Label Text="Design Size:"/>
+                    <TextBox Text="{²../../../editor.DesignWidth}" Width="40" TextAlignment="Right"/>
+                    <Label Text="X"/>
+                    <TextBox Text="{²../../../editor.DesignHeight}" Width="40" TextAlignment="Right"/>
+                </HorizontalStack>
+                <HorizontalStack Width="Fit" Spacing="1">
+                    <Label Text="Zoom:"/>
+                    <Slider Value="{²../../../editor.Zoom}" Width="100" Height="10" Minimum="10" Maximum="200" SmallIncrement="10" LargeIncrement="50"/>
+                    <Label Text="{../../../editor.Zoom}"/>
+                </HorizontalStack>
+                <HorizontalStack Width="Fit" Spacing="1">
+                    <Label Text="Grid Spacing:"/>
+                    <Slider Value="{²../../../editor.GridSpacing}" Width="100" Height="10" Minimum="5" Maximum="100" SmallIncrement="5" LargeIncrement="20"/>
+                    <TextBox Text="{../../../editor.GridSpacing}"/>
+                </HorizontalStack>
+            </HorizontalStack>
+        </VerticalStack>               
+        <Splitter/>
+               <IMLContainer Path="#Crow.Coding.ui.editors.SourceEditor.crow"/>
                <Splitter Visible="{../editor.HasError}"/>
                <Label DataSource="{../editor.Error}" Text="{}"
                        Visible="{../editor.HasError}"
index 980c68fcf9736de7d497b85ce1df16c266971175..eb4cfd80df6be349b214ff6d73ee6acb3ef4d3b0 100644 (file)
@@ -8,14 +8,12 @@
                <ScrollBar Name="scrollbarY" Value="{²../editor.ScrollY}"
                                   LargeIncrement="{../editor.VisibleLines}"
                                   CursorSize="{../editor.ChildHeightRatio}"
-                       Maximum="{../editor.MaxScrollY}" Orientation="Vertical"
-                       Width="14" />
+                       Maximum="{../editor.MaxScrollY}" Orientation="Vertical"/>
        </HorizontalStack>
        <ScrollBar Style="HScrollBar" Name="scrollbarX" Value="{²../editor.ScrollX}"
                        Maximum="{../editor.MaxScrollX}" Orientation="Horizontal"
                        LargeIncrement="{../editor.VisibleColumns}"
-                       CursorSize="{../editor.ChildWidthRatio}"
-                       Height="14" />                  
+                       CursorSize="{../editor.ChildWidthRatio}"/>                      
        <HorizontalStack Height="Fit">
                <Label Text="{../../editor.HoverError}" Width="Stretched"/>
                <GraphicObject Background="Red" Width="5" Height="5" Visible="{IsDirty}"/>
index e430324af9f659c5658074714b8ba267f0917282..4f473515a914905d3176e3072a7b4bc9daea9064 100644 (file)
@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <TabItem Caption="{DisplayName}" QueryClose="OnQueryClose" Template="#Crow.Coding.EditTabItem.template">
-       <IMLContainer Path="#Crow.Coding.ui.SourceEditor.crow"/>
+       <IMLContainer Path="#Crow.Coding.ui.editors.SourceEditor.crow"/>
 </TabItem>
\ No newline at end of file
index 0466cc1af4234c5c6a41af013219791e88968732..a724b92e818892408fb3aa7fb47d4f4f6a32f85e 100644 (file)
@@ -7,14 +7,12 @@
                                <ScrollBar Name="scrollbarY" Value="{²../editor.ScrollY}"
                                                   LargeIncrement="10"
                                                   CursorSize="{../editor.ChildHeightRatio}"
-                                       Maximum="{../editor.MaxScrollY}" Orientation="Vertical"
-                                       Width="14" />
+                                       Maximum="{../editor.MaxScrollY}" Orientation="Vertical"/>
                        </HorizontalStack>
                        <ScrollBar Style="HScrollBar" Name="scrollbarX" Value="{²../editor.ScrollX}"
                                        Maximum="{../editor.MaxScrollX}" Orientation="Horizontal"
                                        LargeIncrement="10"
-                                       CursorSize="{../editor.ChildWidthRatio}"
-                                       Height="14" />
+                                       CursorSize="{../editor.ChildWidthRatio}"/>
                        <HorizontalStack Height="Fit" Margin="3">
                                <Label Text="Zoom:"/>
                                <Label Text="{../../editor.Zoom}" Fit="true"/>
index 582ba2bf0c91465871d495d0e44213ba042637ad..b250a970f5563a28f491dbb6bf73a1246c146cdb 100644 (file)
@@ -8,14 +8,12 @@
                <ScrollBar Name="scrollbarY" Value="{²../editor.ScrollY}"
                                   LargeIncrement="{../editor.VisibleLines}"
                                   CursorSize="{../editor.ChildHeightRatio}"
-                       Maximum="{../editor.MaxScrollY}" Orientation="Vertical"
-                       Width="14" />
+                       Maximum="{../editor.MaxScrollY}" Orientation="Vertical"/>
        </HorizontalStack>
        <ScrollBar Style="HScrollBar" Name="scrollbarX" Value="{²../editor.ScrollX}"
                        Maximum="{../editor.MaxScrollX}" Orientation="Horizontal"
                        LargeIncrement="{../editor.VisibleColumns}"
-                       CursorSize="{../editor.ChildWidthRatio}"
-                       Height="14" />                  
+                       CursorSize="{../editor.ChildWidthRatio}"/>                      
        <HorizontalStack Height="Fit">
                <GraphicObject Height="5" Width="Stretched"/>
                <GraphicObject Background="Red" Width="5" Height="5" Visible="{IsDirty}"/>
diff --git a/CrowIDE/ui/icons/basic_floppydisk.svg b/CrowIDE/ui/icons/basic_floppydisk.svg
deleted file mode 100644 (file)
index 55d901d..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-        width="64px" height="64px" viewBox="0 0 64 64" enable-background="new 0 0 64 64" xml:space="preserve">
-<g>
-       <polygon fill="none" stroke="#000000" stroke-width="2" stroke-miterlimit="10" points="63,63 1,63 1,1 51,1 63,13         "/>
-</g>
-<rect x="7" y="31" fill="none" stroke="#000000" stroke-width="2" stroke-miterlimit="10" width="50" height="32"/>
-<line fill="none" stroke="#000000" stroke-width="2" stroke-miterlimit="10" x1="14" y1="39" x2="50" y2="39"/>
-<line fill="none" stroke="#000000" stroke-width="2" stroke-miterlimit="10" x1="14" y1="47" x2="50" y2="47"/>
-<line fill="none" stroke="#000000" stroke-width="2" stroke-miterlimit="10" x1="14" y1="55" x2="50" y2="55"/>
-<rect x="15" y="1" fill="none" stroke="#000000" stroke-width="2" stroke-miterlimit="10" width="34" height="19"/>
-<rect x="38" y="5" fill="none" stroke="#000000" stroke-width="2" stroke-miterlimit="10" width="5" height="11"/>
-</svg>
diff --git a/CrowIDE/ui/icons/blank-file.svg b/CrowIDE/ui/icons/blank-file.svg
deleted file mode 100644 (file)
index 8136979..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16">
-<path fill="#FFFFFF" d="M10 0h-8v16h12v-12l-4-4zM9 5h4v10h-10v-14h6v4zM10 4v-3l3 3h-3z"></path>
-</svg>
diff --git a/CrowIDE/ui/icons/center-align.svg b/CrowIDE/ui/icons/center-align.svg
deleted file mode 100644 (file)
index 92e3fac..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16">
-<path fill="#FFFFFF" d="M5 0h6v3h-6v-3z"></path>
-<path fill="#FFFFFF" d="M1 4h14v3h-14v-3z"></path>
-<path fill="#FFFFFF" d="M3 8h10v3h-10v-3z"></path>
-<path fill="#FFFFFF" d="M0 12h16v3h-16v-3z"></path>
-</svg>
diff --git a/CrowIDE/ui/icons/cogwheel.svg b/CrowIDE/ui/icons/cogwheel.svg
deleted file mode 100644 (file)
index c104c47..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16">
-<path fill="#FFFFFF" d="M15.2 6l-1.1-0.2c-0.1-0.2-0.1-0.4-0.2-0.6l0.6-0.9 0.5-0.7-2.6-2.6-0.7 0.5-0.9 0.6c-0.2-0.1-0.4-0.1-0.6-0.2l-0.2-1.1-0.2-0.8h-3.6l-0.2 0.8-0.2 1.1c-0.2 0.1-0.4 0.1-0.6 0.2l-0.9-0.6-0.7-0.4-2.5 2.5 0.5 0.7 0.6 0.9c-0.2 0.2-0.2 0.4-0.3 0.6l-1.1 0.2-0.8 0.2v3.6l0.8 0.2 1.1 0.2c0.1 0.2 0.1 0.4 0.2 0.6l-0.6 0.9-0.5 0.7 2.6 2.6 0.7-0.5 0.9-0.6c0.2 0.1 0.4 0.1 0.6 0.2l0.2 1.1 0.2 0.8h3.6l0.2-0.8 0.2-1.1c0.2-0.1 0.4-0.1 0.6-0.2l0.9 0.6 0.7 0.5 2.6-2.6-0.5-0.7-0.6-0.9c0.1-0.2 0.2-0.4 0.2-0.6l1.1-0.2 0.8-0.2v-3.6l-0.8-0.2zM15 9l-1.7 0.3c-0.1 0.5-0.3 1-0.6 1.5l0.9 1.4-1.4 1.4-1.4-0.9c-0.5 0.3-1 0.5-1.5 0.6l-0.3 1.7h-2l-0.3-1.7c-0.5-0.1-1-0.3-1.5-0.6l-1.4 0.9-1.4-1.4 0.9-1.4c-0.3-0.5-0.5-1-0.6-1.5l-1.7-0.3v-2l1.7-0.3c0.1-0.5 0.3-1 0.6-1.5l-1-1.4 1.4-1.4 1.4 0.9c0.5-0.3 1-0.5 1.5-0.6l0.4-1.7h2l0.3 1.7c0.5 0.1 1 0.3 1.5 0.6l1.4-0.9 1.4 1.4-0.9 1.4c0.3 0.5 0.5 1 0.6 1.5l1.7 0.3v2z"></path>
-<path fill="#FFFFFF" d="M8 4.5c-1.9 0-3.5 1.6-3.5 3.5s1.6 3.5 3.5 3.5 3.5-1.6 3.5-3.5c0-1.9-1.6-3.5-3.5-3.5zM8 10.5c-1.4 0-2.5-1.1-2.5-2.5s1.1-2.5 2.5-2.5 2.5 1.1 2.5 2.5c0 1.4-1.1 2.5-2.5 2.5z"></path>
-</svg>
diff --git a/CrowIDE/ui/icons/edit.svg b/CrowIDE/ui/icons/edit.svg
deleted file mode 100644 (file)
index 73569d8..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16">
-<path fill="#FFFFFF" d="M16 4c0 0 0-1-1-2s-1.9-1-1.9-1l-1.1 1.1v-2.1h-12v16h12v-8l4-4zM6.3 11.4l-0.6-0.6 0.3-1.1 1.5 1.5-1.2 0.2zM7.2 9.5l-0.6-0.6 5.2-5.2c0.2 0.1 0.4 0.3 0.6 0.5zM14.1 2.5l-0.9 1c-0.2-0.2-0.4-0.3-0.6-0.5l0.9-0.9c0.1 0.1 0.3 0.2 0.6 0.4zM11 15h-10v-14h10v2.1l-5.9 5.9-1.1 4.1 4.1-1.1 2.9-3v6z"></path>
-</svg>
diff --git a/CrowIDE/ui/icons/file-code.svg b/CrowIDE/ui/icons/file-code.svg
deleted file mode 100644 (file)
index 2dc00db..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16">
-<path fill="#FFFFFF" d="M10 0h-8v16h12v-12l-4-4zM9 5h4v10h-10v-14h6v4zM10 4v-3l3 3h-3z"></path>
-<path fill="#FFFFFF" d="M6.2 13h-0.7l-2-2.5 2-2.5h0.7l-2 2.5z"></path>
-<path fill="#FFFFFF" d="M9.8 13h0.7l2-2.5-2-2.5h-0.7l2 2.5z"></path>
-<path fill="#FFFFFF" d="M6.7 14h0.6l2.1-7h-0.8z"></path>
-</svg>
diff --git a/CrowIDE/ui/icons/folder.svg b/CrowIDE/ui/icons/folder.svg
deleted file mode 100644 (file)
index ee1f82b..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16">
-<path fill="#FFFFFF" d="M7 4l-1-2h-4l-1 2h-1v11h16v-11h-9zM15 14h-14v-9h0.6l1-2h2.6l1.2 2h8.6v9z"></path>
-</svg>
diff --git a/CrowIDE/ui/icons/font-file.svg b/CrowIDE/ui/icons/font-file.svg
deleted file mode 100644 (file)
index 20beac1..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16">
-<path fill="#FFFFFF" d="M10 0h-8v16h12v-12l-4-4zM9 5h4v10h-10v-14h6v4zM10 4v-3l3 3h-3z"></path>
-<path fill="#FFFFFF" d="M5 7v2h2v5h2v-5h2v-2z"></path>
-</svg>
diff --git a/CrowIDE/ui/icons/light-bulb.svg b/CrowIDE/ui/icons/light-bulb.svg
deleted file mode 100644 (file)
index 4193a75..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16">
-<path fill="#FFFFFF" d="M11.7 1.9c-1-1.2-2.6-1.9-4.2-1.9s-3.2 0.7-4.2 1.9c-1 1.1-1.4 2.6-1.2 4 0.2 1.5 0.8 2.6 2.1 3.7 0.5 0.4 0.7 0.8 0.9 1.2 0 0.1 0.1 0.2 0.1 0.3-0.1 0.1-0.2 0.2-0.2 0.4 0 0.3 0.2 0.5 0.5 0.5-0.3 0-0.5 0.2-0.5 0.5s0.2 0.5 0.5 0.5c-0.3 0-0.5 0.2-0.5 0.5s0.2 0.5 0.5 0.5c-0.3 0-0.5 0.2-0.5 0.5s0.2 0.5 0.5 0.5h0.5c0 0.5 0.7 1 1.5 1s1.5-0.5 1.5-1h0.5c0.3 0 0.5-0.2 0.5-0.5s-0.2-0.5-0.5-0.5c0.3 0 0.5-0.2 0.5-0.5s-0.2-0.5-0.5-0.5c0.3 0 0.5-0.2 0.5-0.5s-0.2-0.5-0.5-0.5c0.3 0 0.5-0.2 0.5-0.5 0-0.2-0.1-0.3-0.2-0.4 0-0.1 0.1-0.1 0.1-0.2 0.2-0.4 0.4-0.8 0.9-1.2 1.3-1.1 1.9-2.2 2.1-3.8 0.2-1.4-0.2-2.8-1.2-4zM12 5.8c-0.2 1.3-0.7 2.2-1.8 3.2-0.6 0.5-0.9 1-1.2 1.4-0.2 0.5-0.3 0.6-0.5 0.6h-2c-0.2 0-0.3-0.1-0.5-0.6-0.2-0.4-0.5-1-1.1-1.6-1.3-1.1-1.6-2-1.8-3-0.2-1.1 0.2-2.3 0.9-3.2 0.9-1 2.2-1.6 3.5-1.6s2.6 0.6 3.5 1.6c0.7 0.9 1.1 2.1 1 3.2z"></path>
-<path fill="#FFFFFF" d="M11 5h-1c0-0.7-0.8-2-2-2v-1c1.8 0 3 1.8 3 3z"></path>
-</svg>
diff --git a/CrowIDE/ui/icons/paragraph.svg b/CrowIDE/ui/icons/paragraph.svg
deleted file mode 100644 (file)
index 826aa63..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16">
-<path fill="#FFFFFF" d="M5.5 0c-2.5 0-4.5 2-4.5 4.5s2 4.5 4.5 4.5h2.5v7h2v-14h1v14h2v-14h2v-2h-9.5z"></path>
-</svg>
diff --git a/CrowIDE/ui/icons/previous.svg b/CrowIDE/ui/icons/previous.svg
deleted file mode 100644 (file)
index 566c8a3..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16">
-<path fill="#FFFFFF" d="M0 7.9l6-4.9v3c0 0 1.1 0 2 0 8 0 8 8 8 8s-1-4-7.8-4c-1.1 0-1.8 0-2.2 0v2.9l-6-5z"></path>
-</svg>
diff --git a/CrowIDE/ui/icons/question.svg b/CrowIDE/ui/icons/question.svg
deleted file mode 100644 (file)
index fb8e3d3..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16">
-<path fill="#FFFFFF" d="M9 11h-3c0-3 1.6-4 2.7-4.6 0.4-0.2 0.7-0.4 0.9-0.6 0.5-0.5 0.3-1.2 0.2-1.4-0.3-0.7-1-1.4-2.3-1.4-2.1 0-2.5 1.9-2.5 2.3l-3-0.4c0.2-1.7 1.7-4.9 5.5-4.9 2.3 0 4.3 1.3 5.1 3.2 0.7 1.7 0.4 3.5-0.8 4.7-0.5 0.5-1.1 0.8-1.6 1.1-0.9 0.5-1.2 1-1.2 2z"></path>
-<path fill="#FFFFFF" d="M9.5 14c0 1.105-0.895 2-2 2s-2-0.895-2-2c0-1.105 0.895-2 2-2s2 0.895 2 2z"></path>
-</svg>
diff --git a/CrowIDE/ui/icons/reply.svg b/CrowIDE/ui/icons/reply.svg
deleted file mode 100644 (file)
index d008cb3..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16">
-<path fill="#FFFFFF" d="M16 8c0-5-4.9-5-4.9-5h-5.1v-3l-6 6 6 6v-3h5.2c3.5 0 1.8 7 1.8 7s3-4.1 3-8z"></path>
-</svg>
diff --git a/CrowIDE/ui/icons/search.svg b/CrowIDE/ui/icons/search.svg
deleted file mode 100644 (file)
index 4a931b3..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16">
-<path fill="#FFFFFF" d="M15.7 14.3l-4.2-4.2c-0.2-0.2-0.5-0.3-0.8-0.3 0.8-1 1.3-2.4 1.3-3.8 0-3.3-2.7-6-6-6s-6 2.7-6 6 2.7 6 6 6c1.4 0 2.8-0.5 3.8-1.4 0 0.3 0 0.6 0.3 0.8l4.2 4.2c0.2 0.2 0.5 0.3 0.7 0.3s0.5-0.1 0.7-0.3c0.4-0.3 0.4-0.9 0-1.3zM6 10.5c-2.5 0-4.5-2-4.5-4.5s2-4.5 4.5-4.5 4.5 2 4.5 4.5-2 4.5-4.5 4.5z"></path>
-</svg>
diff --git a/CrowIDE/ui/icons/share-arrow.svg b/CrowIDE/ui/icons/share-arrow.svg
deleted file mode 100644 (file)
index e0eb246..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16">
-<path fill="#FFFFFF" d="M10 3h-5.1c0 0-4.9 0-4.9 5 0 3.9 3 8 3 8s-1.7-7 1.8-7h5.2v3l6-6-6-6v3z"></path>
-</svg>
diff --git a/CrowIDE/ui/icons/sign-out.svg b/CrowIDE/ui/icons/sign-out.svg
deleted file mode 100644 (file)
index c5951fc..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16">
-<path fill="#FFFFFF" d="M9 4v-3h-9v14h9v-3h-1v2h-7v-12h7v2z"></path>
-<path fill="#FFFFFF" d="M16 8l-5-4v2h-5v4h5v2z"></path>
-</svg>
diff --git a/CrowIDE/ui/icons/text-file.svg b/CrowIDE/ui/icons/text-file.svg
deleted file mode 100644 (file)
index eafca90..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16">
-<path fill="#FFFFFF" d="M10 0h-8v16h12v-12l-4-4zM9 5h4v10h-10v-14h6v4zM10 4v-3l3 3h-3z"></path>
-<path fill="#FFFFFF" d="M4 7h8v1h-8v-1z"></path>
-<path fill="#FFFFFF" d="M4 9h8v1h-8v-1z"></path>
-<path fill="#FFFFFF" d="M4 11h8v1h-8v-1z"></path>
-</svg>
diff --git a/CrowIDE/ui/icons/text-label.svg b/CrowIDE/ui/icons/text-label.svg
deleted file mode 100644 (file)
index 8fa9196..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16">
-<path fill="#FFFFFF" d="M12.5 4.9c-1.4 0-2.5 0.8-2.6 0.9l1.2 1.6c0 0 0.7-0.5 1.4-0.5 1.4 0 1.5 1.2 1.5 1.6-0.4-0.1-1.1-0.3-2-0.1-1.4 0.3-2.8 2-2.1 3.9 0.7 1.8 3.1 2.1 4.1 0.6v1h2v-5.3c0-2.7-1.9-3.7-3.5-3.7zM11.5 11.4c-0.1-1.9 1.5-1.9 2.5-1.8v1c0 1.2-2.3 2.3-2.5 0.8z"></path>
-<path fill="#FFFFFF" d="M6.9 14h2.1l-3.2-12h-2.7l-3.1 12h2.1l1-4h2.7l1.1 4zM3.6 8l0.8-3.2 0.9 3.2h-1.7z"></path>
-</svg>
diff --git a/CrowIDE/ui/icons/tools.svg b/CrowIDE/ui/icons/tools.svg
deleted file mode 100644 (file)
index 5326f19..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16">
-<path fill="#FFFFFF" d="M10.3 8.2l-0.9 0.9 0.9 0.9-1.2 1.2 4.3 4.3c0.6 0.6 1.5 0.6 2.1 0s0.6-1.5 0-2.1l-5.2-5.2zM14.2 15c-0.4 0-0.8-0.3-0.8-0.8 0-0.4 0.3-0.8 0.8-0.8s0.8 0.3 0.8 0.8c0 0.5-0.3 0.8-0.8 0.8z"></path>
-<path fill="#FFFFFF" d="M3.6 8l0.9-0.6 1.5-1.7 0.9 0.9 0.9-0.9-0.1-0.1c0.2-0.5 0.3-1 0.3-1.6 0-2.2-1.8-4-4-4-0.6 0-1.1 0.1-1.6 0.3l2.9 2.9-2.1 2.1-2.9-2.9c-0.2 0.5-0.3 1-0.3 1.6 0 2.1 1.6 3.7 3.6 4z"></path>
-<path fill="#FFFFFF" d="M8 10.8l0.9-0.8-0.9-0.9 5.7-5.7 1.2-0.4 1.1-2.2-0.7-0.7-2.3 1-0.5 1.2-5.6 5.7-0.9-0.9-0.8 0.9c0 0 0.8 0.6-0.1 1.5-0.5 0.5-1.3-0.1-2.8 1.4-0.5 0.5-2.1 2.1-2.1 2.1s-0.6 1 0.6 2.2 2.2 0.6 2.2 0.6 1.6-1.6 2.1-2.1c1.4-1.4 0.9-2.3 1.3-2.7 0.9-0.9 1.6-0.2 1.6-0.2zM4.9 10.4l0.7 0.7-3.8 3.8-0.7-0.7z"></path>
-</svg>
diff --git a/CrowIDE/ui/icons/zoom-in.svg b/CrowIDE/ui/icons/zoom-in.svg
deleted file mode 100644 (file)
index 60c41d1..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16">
-<path fill="#FFFFFF" d="M15.7 14.3l-4.2-4.2c-0.2-0.2-0.5-0.3-0.8-0.3 0.8-1 1.3-2.4 1.3-3.8 0-3.3-2.7-6-6-6s-6 2.7-6 6 2.7 6 6 6c1.4 0 2.8-0.5 3.8-1.4 0 0.3 0 0.6 0.3 0.8l4.2 4.2c0.2 0.2 0.5 0.3 0.7 0.3s0.5-0.1 0.7-0.3c0.4-0.3 0.4-0.9 0-1.3zM6 10.5c-2.5 0-4.5-2-4.5-4.5s2-4.5 4.5-4.5 4.5 2 4.5 4.5-2 4.5-4.5 4.5z"></path>
-<path fill="#FFFFFF" d="M7 3h-2v2h-2v2h2v2h2v-2h2v-2h-2z"></path>
-</svg>
diff --git a/CrowIDE/ui/icons/zoom-out.svg b/CrowIDE/ui/icons/zoom-out.svg
deleted file mode 100644 (file)
index bd4eec3..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16">
-<path fill="#FFFFFF" d="M15.7 14.3l-4.2-4.2c-0.2-0.2-0.5-0.3-0.8-0.3 0.8-1 1.3-2.4 1.3-3.8 0-3.3-2.7-6-6-6s-6 2.7-6 6 2.7 6 6 6c1.4 0 2.8-0.5 3.8-1.4 0 0.3 0 0.6 0.3 0.8l4.2 4.2c0.2 0.2 0.5 0.3 0.7 0.3s0.5-0.1 0.7-0.3c0.4-0.3 0.4-0.9 0-1.3zM6 10.5c-2.5 0-4.5-2-4.5-4.5s2-4.5 4.5-4.5 4.5 2 4.5 4.5-2 4.5-4.5 4.5z"></path>
-<path fill="#FFFFFF" d="M3 5h6v2h-6v-2z"></path>
-</svg>
diff --git a/Default.style b/Default.style
deleted file mode 100644 (file)
index 43c4cab..0000000
+++ /dev/null
@@ -1,221 +0,0 @@
-Button, CheckBox, RadioButton, ComboBox, Expandable,
-MessageBox, Popper, Slider, Spinner, TextBox {
-       Focusable = "true";
-       Height = "Fit";
-}
-Border {
-       Foreground = "Grey";
-}
-CheckBox { Caption = "CheckBox"; }
-RadioButton { Caption = "RadioButton"; }
-Expandable { Caption = "Expandable"; }
-Popper { Caption = "Popper";}
-GroupBox { Caption = "Group Box"; }
-
-ControlBorder {
-       BorderWidth     = "1";
-       Foreground  = "DimGrey";
-       Background      = "Transparent";
-}
-ControlCaption {
-       Foreground  = "Grey";
-       MouseEnter      = "{Foreground=White}";
-       MouseLeave      = "{Foreground=Grey}";
-}
-Icon {
-       Margin = "1";
-       Width = "12";
-       Height = "12";
-}
-
-Wrapper {
-       Orientation = "Vertical";
-}
-Button {
-       Caption = "Button";
-       Width = "Fit";
-}
-Label {
-       Height = "Fit";
-       Width = "Fit";
-       Margin = "0";
-}
-Menu {
-       Margin = "1";
-       Background = "vgradient|0:DimGrey|1:Black";
-       //Background = "Transparent";
-       Height = "Fit";
-       Width = "Stretched";
-       VerticalAlignment = "Top";
-       SelectionBackground = "Transparent";
-}
-MenuItem {
-       Caption = "MenuItem";
-       Width = "Stretched";
-       Height = "Fit";
-       //Background = "vgradient|0:DimGrey|1:Black";
-       //Background = "Transparent";
-       Foreground = "LightGrey";
-       //MouseEnter = "{Background=SteelBlue;}";
-       //MouseLeave = "{Background=Transparent;}";
-       //MouseEnter = "{Background = vgradient|0:SteelBlue|1:Jet;Foreground=White;}";
-       //MouseLeave = "{Foreground=LightGrey;Background=Transparent;}";
-       SelectionBackground = "Transparent";
-}
-MessageBox {
-       Background = "0.1,0.1,0.2,0.7";
-       Width = "Fit";
-       Caption="MessageBox";
-       Font = "serif, 12";
-       MinimumSize = "200,120";
-       AlwaysOnTop = "true";
-}
-Slider {
-       Background = "vgradient|0:Black|0.1:Grey|0.9:Grey|1:LightGrey";
-       Foreground = "Grey";
-       Height = "10";
-       Value="5";
-}
-Splitter {
-       Focusable = "true";
-       Margin = "1";
-       Background = "Grey";
-}
-Spinner {
-       Foreground = "DimGrey";
-}
-TabView {
-       CacheEnabled = "false";
-       AllowDrop = "true";
-}
-TabItem {
-       Caption = "TabItem";
-       Focusable = "true";
-       CacheEnabled = "true";
-       //MouseEnter = "{Background = Cobalt;Foreground=White;}";
-       //MouseLeave = "{Foreground=LightGrey;Background=Jet;}";
-       AllowDrag = "true";
-}
-TextBox {
-       Background = "White";
-       Foreground = "Black";
-       Selectable = "True";
-       Text = "TextBox";
-       Margin = "1";
-}
-Window {
-       Caption = "Window";
-       Focusable = "true";
-       MinimumSize="5,5";
-       Width = "150";
-       Height = "150";
-}
-ToolWindow {
-       Caption = "Window";
-       Template = "#Crow.ToolWindow.template";
-       Focusable = "true";
-       MinimumSize="50,50";
-       Width = "150";
-       Height = "150";
-}
-Docker {
-       AllowDrop = "false";
-       Margin="0";
-       Focusable="true";
-}
-DockStack {
-       Margin="1";
-       AllowDrop = "true";
-       Focusable="true";
-       //DragEnter="{Background=Blue}";
-       //DragLeave="{Background=Transparent}";
-       //EndDrag="{Background=Jet}";
-}
-DockWindow {
-       //Background = "Onyx";
-       Focusable = "true";
-       AllowDrag = "true";
-       AlwaysOnTop = "true";
-       Margin="0";
-       Width="200";
-       Height="200";
-       //MinimumSize="50,50";
-}
-FileDialog {
-       Template = "#Crow.FileDialog.template";
-       AlwaysOnTop = "true";
-       Focusable = "true";
-       MinimumSize="50,50";
-       Width = "500";
-       Height = "300";
-}
-ProgressBar {
-       Foreground = "vgradient|0:DarkBlue|0.5:SkyBlue|1:DarkBlue";
-}
-ScrollBar {
-       Maximum = "0";
-       Value = "0";
-}
-HScrollBar {
-       Template = "#Crow.HScrollBar.template";
-       Maximum = "0";
-       Value = "0";
-}
-Scroller {
-       CacheEnabled = "false";
-}
-Control {
-       Margin="0";
-       Spacing="3";
-}
-SaturationValueSelector {
-       Foreground="Red";
-}
-HueSelector {
-       ClipToClientRect="False";
-}
-ColorSpinner {
-       Minimum = "0";
-       Maximum = "255";
-       SmallIncrement = "1";
-}
-HSVSpinner {
-       Minimum = "0";
-       Maximum = "1";
-       SmallIncrement = "0.01";
-}
-TxtInFileDialog {
-       Margine = "1";
-       Font = "droid, 12";
-}
-CheckBoxAlt {
-       Template= "#Crow.Templates.CheckBox2.template";
-       Background = "Transparent";
-       Checked="{Background=Grey;Foreground=LightGrey;}";
-       Unchecked = "{Background=Transparent;Foreground=DimGrey;}";
-}
-
-ArrowBut {
-       MouseRepeat="true";
-       Height="Fit";
-       Width="Fit";
-       Focusable="true";
-       Foreground="Onyx";
-       Background="hgradient|0:Grey|1:Jet";
-       MouseDown="{Background=hgradient|0:White|0.4:CornflowerBlue|1:Jet}";
-       MouseUp="{Background=hgradient|0:Grey|1:DimGrey}";
-       MouseEnter="{Foreground=Black}";
-       MouseLeave="{Foreground=Onyx}";
-}
-HArrowBut {
-       MouseRepeat="true";
-       Height="Fit";
-       Width="Fit";
-       Focusable="true";
-       Foreground="Jet";
-       Background="vgradient|0:Grey|1:DimGrey";
-       MouseDown="{Background=vgradient|0:White|0.4:DarkBlue|1:Jet}";
-       MouseUp="{Background=vgradient|0:Grey|1:DimGrey}";
-       MouseEnter="{Foreground=Black}";
-       MouseLeave="{Foreground=DimGrey}";
-}
\ No newline at end of file
diff --git a/Icons/Icon_no.svg b/Icons/Icon_no.svg
deleted file mode 100644 (file)
index c7613fb..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16">
-<path d="M1,1H15V15H1zM3.5,3.5 12.5,12.5M12.5,3.5 3.5,12.5" fill="none" stroke="#f00" stroke-width="2"/>
-</svg>
\ No newline at end of file
diff --git a/Icons/assembly.svg b/Icons/assembly.svg
deleted file mode 100644 (file)
index 5ac3643..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<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"
-   viewBox="0 0 64 64"
-   height="64"
-   width="64"
-   id="svg2"
-   version="1.1">
-  <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></dc:title>
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <defs
-     id="defs6" />
-  <path
-     d="M 15,33.964845 A 6.2543149,5.8551034 0 0 1 8.7456846,39.819949 6.2543149,5.8551034 0 0 1 2.4913703,33.964845 6.2543149,5.8551034 0 0 1 8.7456846,28.109741 6.2543149,5.8551034 0 0 1 15,33.964845 Z M 30.205524,19.726298 h 24.484978 c 3.833495,0 6.919666,3.88699 6.919666,8.715226 v 11.046641 c 0,4.828235 -3.086171,8.715225 -6.919666,8.715225 H 30.205524 c -3.833494,0 -6.919665,-3.88699 -6.919665,-8.715225 V 28.441524 c 0,-4.828236 3.086171,-8.715226 6.919665,-8.715226 z M 15,33.964845 h 8.285859"
-     style="opacity:1;fill:#a0a8ab;fill-opacity:1;stroke:#181818;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
-     id="path819" />
-</svg>
diff --git a/Icons/compiler_error.svg b/Icons/compiler_error.svg
deleted file mode 100644 (file)
index 1b50568..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-<svg width="32" height="32" xmlns="http://www.w3.org/2000/svg">
- <!-- Created with Method Draw - http://github.com/duopixel/Method-Draw/ -->
- <g id="False">
-  <title>Layer 1</title>
-  <rect id="svg_1" height="27" width="27" y="2.5" x="2.5" stroke-width="5" stroke="#bf0000" fill="#fff"/>
-  <text font-weight="bold" xml:space="preserve" text-anchor="start" font-family="Helvetica, Arial, sans-serif" font-size="24" id="svg_2" y="24.84615" x="7.82692" stroke-width="0" stroke="#bf0000" fill="#000000">X</text>
- </g>
-  <g id="True">
-  <title>Layer 2</title>
-  <path id="svg_1" d="m16.28846,3.46154l13.78846,26.61539l-27.57692,0l13.78846,-26.61539z" stroke-linecap="null" stroke-linejoin="null" stroke-width="3" stroke="#d1d100" fill-opacity="null" fill="#fff"/>
-  <text font-weight="bold" xml:space="preserve" text-anchor="start" font-family="Georgia, Times, 'Times New Roman', serif" font-size="24" id="svg_3" y="27.15385" x="12.44231" stroke-width="0" stroke="#bf0000" fill="#000000">!</text>
- </g>
-</svg>
\ No newline at end of file
diff --git a/Icons/compiler_warning.svg b/Icons/compiler_warning.svg
deleted file mode 100644 (file)
index 9dac377..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-<?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:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="378.30496" height="326.05325" id="svg2" sodipodi:version="0.32" inkscape:version="0.46" version="1.0" sodipodi:docbase="C:\Documents and Settings\KevinDuke\Desktop" sodipodi:docname="Ambox_warning_yellow.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape">
-  <sodipodi:namedview id="base" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" gridtolerance="10000" guidetolerance="10" objecttolerance="10" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="1.4225" inkscape:cx="90.333919" inkscape:cy="200" inkscape:document-units="px" inkscape:current-layer="layer1" width="400px" height="400px" showgrid="false" inkscape:window-width="1280" inkscape:window-height="750" inkscape:window-x="-8" inkscape:window-y="-8"/>
-  <defs id="defs4">
-    <linearGradient id="linearGradient3149">
-      <stop id="stop3151" style="stop-color:#f6eb71;stop-opacity:1;" offset="0"/>
-      <stop offset="0.5138889" style="stop-color:#ffeb00;stop-opacity:1;" id="stop3271"/>
-      <stop offset="1" style="stop-color:#f4c930;stop-opacity:1;" id="stop3153"/>
-    </linearGradient>
-    <linearGradient id="linearGradient3134">
-      <stop offset="0" style="stop-color:#ffb300;stop-opacity:1;" id="stop3136"/>
-      <stop id="stop3165" style="stop-color:#ff9900;stop-opacity:1;" offset="1"/>
-    </linearGradient>
-    <linearGradient id="linearGradient3140" gradientUnits="userSpaceOnUse" inkscape:collect="always" x1="57.553783" x2="142.16243" xlink:href="#linearGradient3149" y1="-7.0170116" y2="123.27175"/>
-    <linearGradient id="linearGradient3148" gradientUnits="userSpaceOnUse" inkscape:collect="always" x1="57.553783" x2="142.16243" xlink:href="#linearGradient3149" y1="-7.0170116" y2="123.27175"/>
-    <filter inkscape:collect="always" id="filter3172">
-      <feGaussianBlur inkscape:collect="always" stdDeviation="5.0924795" id="feGaussianBlur3174"/>
-    </filter>
-    <linearGradient inkscape:collect="always" xlink:href="#linearGradient3134" id="linearGradient2184" gradientUnits="userSpaceOnUse" x1="-49.164131" y1="-82.266502" x2="227.38515" y2="216.95886" gradientTransform="matrix(1.2084425,0,0,1.2084425,89.669573,106.93911)"/>
-  </defs>
-  <metadata id="metadata7">
-    <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>3D effect warning triangle</dc:title>
-        <dc:date>18/9/07</dc:date>
-        <dc:creator>
-          <cc:Agent>
-            <dc:title>Tim O'Ryan</dc:title>
-          </cc:Agent>
-        </dc:creator>
-        <cc:license rdf:resource="http://creativecommons.org/licenses/by-sa/2.5/"/>
-      </cc:Work>
-      <cc:License rdf:about="http://creativecommons.org/licenses/by-sa/2.5/">
-        <cc:permits rdf:resource="http://web.resource.org/cc/Reproduction"/>
-        <cc:permits rdf:resource="http://web.resource.org/cc/Distribution"/>
-        <cc:requires rdf:resource="http://web.resource.org/cc/Notice"/>
-        <cc:requires rdf:resource="http://web.resource.org/cc/Attribution"/>
-        <cc:permits rdf:resource="http://web.resource.org/cc/DerivativeWorks"/>
-        <cc:requires rdf:resource="http://web.resource.org/cc/ShareAlike"/>
-      </cc:License>
-    </rdf:RDF>
-  </metadata>
-  <g inkscape:label="Layer 1" id="layer1" inkscape:groupmode="layer" transform="translate(-15.90328,-38.352144)">
-    <path style="opacity:1;fill:#777777;fill-opacity:0.79729728;stroke:none;stroke-width:20.6877861;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter3172)" d="M 213.05399,47.37801 C 208.83955,47.5955 205.01929,49.92458 202.89552,53.57127 L 33.940149,345.10803 C 31.700749,348.97294 31.693669,353.73905 33.921559,357.61061 C 36.149459,361.48217 40.273789,363.87084 44.740599,363.87665 L 381.66948,364.40534 C 386.13811,364.41875 390.27406,362.04591 392.51793,358.18147 C 394.7618,354.31704 394.77229,349.54876 392.54546,345.67448 L 224.53419,53.60904 C 222.18314,49.53899 217.74782,47.13166 213.05399,47.37801 L 213.05399,47.37801 z M 213.65821,84.83972 L 360.06857,339.36792 L 66.417039,338.91476 L 213.65821,84.83972 z" id="path3152"/>
-    <path style="opacity:1;fill:url(#linearGradient2184);fill-opacity:1;stroke:#a37900;stroke-width:6.25;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 199.82666,41.494396 C 195.61222,41.711894 191.79197,44.040971 189.66819,47.687664 L 20.712823,339.22442 C 18.473424,343.08933 18.466339,347.85544 20.694238,351.727 C 22.922136,355.59856 27.04646,357.98723 31.513278,357.99304 L 368.44215,358.52173 C 372.91078,358.53514 377.04674,356.1623 379.2906,352.29786 C 381.53447,348.43343 381.54497,343.66515 379.31813,339.79087 L 211.30686,47.725427 C 208.95581,43.655381 204.52049,41.248051 199.82666,41.494396 L 199.82666,41.494396 z M 200.43088,78.956113 L 346.84124,333.48431 L 53.189715,333.03115 L 200.43088,78.956113 z" id="path2178"/>
-    <path sodipodi:arg2="1.5723975" style="opacity:1;fill:url(#linearGradient3140);fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient3148);stroke-width:20.6877861;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" id="path2160" sodipodi:cx="91.428574" sodipodi:cy="117.14286" sodipodi:arg1="0.52519998" sodipodi:type="star" d="M 230.71429,197.85715 L -48.114905,197.41068 L 91.686339,-43.839248 L 230.71429,197.85715 z" sodipodi:r2="80.491158" sodipodi:sides="3" inkscape:randomized="0" transform="matrix(1.2084425,0,0,1.2084425,89.669573,106.93911)" inkscape:rounded="0" sodipodi:r1="160.98232" inkscape:flatsided="true"/>
-    <path sodipodi:nodetypes="cccsccscccc" d="M 199.89464,117.765 C 197.29017,117.9016 194.92932,119.3644 193.61684,121.65473 L 89.204984,304.75655 C 87.82107,307.18391 87.81669,310.17731 89.193499,312.60887 C 90.570306,315.04044 93.119077,316.54066 95.879504,316.54431 L 304.09647,316.87636 C 306.85801,316.88477 309.41397,315.39449 310.80064,312.96739 C 312.18732,310.54032 312.1938,307.54558 310.81766,305.1123 L 206.98922,121.67846 C 205.53631,119.12222 202.79534,117.61029 199.89464,117.765 L 199.89464,117.765 z" style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:20.6877861;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1" id="path19491"/>
-    <path style="font-size:333.22640991px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Angsana New" d="M 203.68708,256.44083 L 198.35371,256.44083 C 197.80195,246.98576 195.96287,235.6645 192.83645,222.47702 L 186.4916,195.60456 C 182.6908,179.49366 180.79042,167.95467 180.79043,160.9876 C 180.79042,146.92949 187.50308,139.90034 200.92845,139.90018 C 206.81347,139.90034 211.67173,141.84424 215.50321,145.73187 C 219.33458,149.61982 221.25031,154.58066 221.25036,160.61436 C 221.25031,167.0216 219.22731,178.685 215.18136,195.60456 L 208.74456,222.47702 C 206.47631,231.93222 204.79048,243.25347 203.68708,256.44083 L 203.68708,256.44083 z M 201.20431,274.07588 C 207.45715,274.07593 212.30007,276.20643 215.7331,280.46742 C 219.166,284.72848 220.88248,289.28498 220.88254,294.13692 C 220.88248,300.54403 218.79818,305.47375 214.62964,308.92611 C 210.461,312.37848 205.98588,314.10466 201.20431,314.10466 C 194.89007,314.10466 190.03183,311.98969 186.62953,307.75978 C 183.22721,303.52985 181.52605,298.9889 181.52607,294.13692 C 181.52605,288.47632 183.41112,283.71765 187.18126,279.86093 C 190.95137,276.00427 195.6257,274.07593 201.20431,274.07588 L 201.20431,274.07588 z" id="text2171"/>
-  </g>
-</svg>
\ No newline at end of file
diff --git a/Icons/compiler_warning_orange.svg b/Icons/compiler_warning_orange.svg
deleted file mode 100644 (file)
index 233437f..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-<?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:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="378.30496" height="326.05325" id="svg2" sodipodi:version="0.32" inkscape:version="0.46" version="1.0" sodipodi:docbase="C:\Documents and Settings\KevinDuke\Desktop" sodipodi:docname="Ambox_warning_orange.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape">
-  <sodipodi:namedview id="base" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" gridtolerance="10000" guidetolerance="10" objecttolerance="10" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="0.64877047" inkscape:cx="107.30042" inkscape:cy="95.503105" inkscape:document-units="px" inkscape:current-layer="layer1" width="400px" height="400px" showgrid="false" inkscape:window-width="1280" inkscape:window-height="750" inkscape:window-x="-8" inkscape:window-y="-8"/>
-  <defs id="defs4">
-    <linearGradient id="linearGradient3149">
-      <stop id="stop3151" style="stop-color:#f3c381;stop-opacity:1;" offset="0"/>
-      <stop offset="0.25" style="stop-color:#f4b24e;stop-opacity:1;" id="stop3172"/>
-      <stop offset="0.5" style="stop-color:#f39502;stop-opacity:1;" id="stop3171"/>
-      <stop offset="1" style="stop-color:#f67805;stop-opacity:1;" id="stop3153"/>
-    </linearGradient>
-    <linearGradient id="linearGradient3134">
-      <stop offset="0" style="stop-color:#ffb300;stop-opacity:1;" id="stop3136"/>
-      <stop id="stop3165" style="stop-color:#ff9900;stop-opacity:1;" offset="1"/>
-    </linearGradient>
-    <linearGradient id="linearGradient3140" gradientUnits="userSpaceOnUse" inkscape:collect="always" x1="15.087464" x2="120.05667" xlink:href="#linearGradient3149" y1="9.8531685" y2="108.72849"/>
-    <linearGradient id="linearGradient3148" gradientUnits="userSpaceOnUse" inkscape:collect="always" x1="15.087464" x2="120.05667" xlink:href="#linearGradient3149" y1="9.8531685" y2="108.72849"/>
-    <filter inkscape:collect="always" id="filter3172">
-      <feGaussianBlur inkscape:collect="always" stdDeviation="5.0924795" id="feGaussianBlur3174"/>
-    </filter>
-    <linearGradient inkscape:collect="always" xlink:href="#linearGradient3134" id="linearGradient2184" gradientUnits="userSpaceOnUse" x1="-49.164131" y1="-82.266502" x2="227.38515" y2="216.95886" gradientTransform="matrix(1.2084425,0,0,1.2084425,89.669573,106.93911)"/>
-  </defs>
-  <metadata id="metadata7">
-    <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>3D effect warning triangle</dc:title>
-        <dc:date>18/9/07</dc:date>
-        <dc:creator>
-          <cc:Agent>
-            <dc:title>Tim O'Ryan</dc:title>
-          </cc:Agent>
-        </dc:creator>
-        <cc:license rdf:resource="http://creativecommons.org/licenses/by-sa/2.5/"/>
-      </cc:Work>
-      <cc:License rdf:about="http://creativecommons.org/licenses/by-sa/2.5/">
-        <cc:permits rdf:resource="http://web.resource.org/cc/Reproduction"/>
-        <cc:permits rdf:resource="http://web.resource.org/cc/Distribution"/>
-        <cc:requires rdf:resource="http://web.resource.org/cc/Notice"/>
-        <cc:requires rdf:resource="http://web.resource.org/cc/Attribution"/>
-        <cc:permits rdf:resource="http://web.resource.org/cc/DerivativeWorks"/>
-        <cc:requires rdf:resource="http://web.resource.org/cc/ShareAlike"/>
-      </cc:License>
-    </rdf:RDF>
-  </metadata>
-  <g inkscape:label="Layer 1" id="layer1" inkscape:groupmode="layer" transform="translate(-15.90328,-38.352144)">
-    <path style="opacity:1;fill:#777777;fill-opacity:0.79729728;stroke:none;stroke-width:20.6877861;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter3172)" d="M 213.05399,47.37801 C 208.83955,47.5955 205.01929,49.92458 202.89552,53.57127 L 33.940149,345.10803 C 31.700749,348.97294 31.693669,353.73905 33.921559,357.61061 C 36.149459,361.48217 40.273789,363.87084 44.740599,363.87665 L 381.66948,364.40534 C 386.13811,364.41875 390.27406,362.04591 392.51793,358.18147 C 394.7618,354.31704 394.77229,349.54876 392.54546,345.67448 L 224.53419,53.60904 C 222.18314,49.53899 217.74782,47.13166 213.05399,47.37801 L 213.05399,47.37801 z M 213.65821,84.83972 L 360.06857,339.36792 L 66.417039,338.91476 L 213.65821,84.83972 z" id="path3152"/>
-    <path style="opacity:1;fill:url(#linearGradient2184);fill-opacity:1;stroke:#a37900;stroke-width:6.25;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 199.82666,41.494396 C 195.61222,41.711894 191.79197,44.040971 189.66819,47.687664 L 20.712823,339.22442 C 18.473424,343.08933 18.466339,347.85544 20.694238,351.727 C 22.922136,355.59856 27.04646,357.98723 31.513278,357.99304 L 368.44215,358.52173 C 372.91078,358.53514 377.04674,356.1623 379.2906,352.29786 C 381.53447,348.43343 381.54497,343.66515 379.31813,339.79087 L 211.30686,47.725427 C 208.95581,43.655381 204.52049,41.248051 199.82666,41.494396 L 199.82666,41.494396 z M 200.43088,78.956113 L 346.84124,333.48431 L 53.189715,333.03115 L 200.43088,78.956113 z" id="path2178"/>
-    <path sodipodi:arg2="1.5723975" style="opacity:1;fill:url(#linearGradient3140);fill-opacity:1.0;fill-rule:nonzero;stroke:url(#linearGradient3148);stroke-width:20.68778610000000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" id="path2160" sodipodi:cx="91.428574" sodipodi:cy="117.14286" sodipodi:arg1="0.52519998" sodipodi:type="star" d="M 230.71429,197.85715 L -48.114905,197.41068 L 91.686339,-43.839248 L 230.71429,197.85715 z" sodipodi:r2="80.491158" sodipodi:sides="3" inkscape:randomized="0" transform="matrix(1.2084425,0,0,1.2084425,89.669573,106.93911)" inkscape:rounded="0" sodipodi:r1="160.98232" inkscape:flatsided="true"/>
-    <path sodipodi:nodetypes="cccsccscccc" d="M 199.89464,117.765 C 197.29017,117.9016 194.92932,119.3644 193.61684,121.65473 L 89.204984,304.75655 C 87.82107,307.18391 87.81669,310.17731 89.193499,312.60887 C 90.570306,315.04044 93.119077,316.54066 95.879504,316.54431 L 304.09647,316.87636 C 306.85801,316.88477 309.41397,315.39449 310.80064,312.96739 C 312.18732,310.54032 312.1938,307.54558 310.81766,305.1123 L 206.98922,121.67846 C 205.53631,119.12222 202.79534,117.61029 199.89464,117.765 L 199.89464,117.765 z" style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:20.6877861;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1" id="path19491"/>
-    <path style="font-size:333.22640991px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Angsana New" d="M 203.68708,256.44083 L 198.35371,256.44083 C 197.80195,246.98576 195.96287,235.6645 192.83645,222.47702 L 186.4916,195.60456 C 182.6908,179.49366 180.79042,167.95467 180.79043,160.9876 C 180.79042,146.92949 187.50308,139.90034 200.92845,139.90018 C 206.81347,139.90034 211.67173,141.84424 215.50321,145.73187 C 219.33458,149.61982 221.25031,154.58066 221.25036,160.61436 C 221.25031,167.0216 219.22731,178.685 215.18136,195.60456 L 208.74456,222.47702 C 206.47631,231.93222 204.79048,243.25347 203.68708,256.44083 L 203.68708,256.44083 z M 201.20431,274.07588 C 207.45715,274.07593 212.30007,276.20643 215.7331,280.46742 C 219.166,284.72848 220.88248,289.28498 220.88254,294.13692 C 220.88248,300.54403 218.79818,305.47375 214.62964,308.92611 C 210.461,312.37848 205.98588,314.10466 201.20431,314.10466 C 194.89007,314.10466 190.03183,311.98969 186.62953,307.75978 C 183.22721,303.52985 181.52605,298.9889 181.52607,294.13692 C 181.52605,288.47632 183.41112,283.71765 187.18126,279.86093 C 190.95137,276.00427 195.6257,274.07593 201.20431,274.07588 L 201.20431,274.07588 z" id="text2171"/>
-  </g>
-</svg>
\ No newline at end of file
diff --git a/Icons/copy-file.svg b/Icons/copy-file.svg
deleted file mode 100644 (file)
index 63c2dd3..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16">
-<path fill="#FFFFFF" d="M13 3h-3l-3-3h-7v13h6v3h10v-10l-3-3zM7 1l2 2h-2v-2zM1 12v-11h5v3h3v8h-8zM15 15h-8v-2h3v-9h2v3h3v8zM13 6v-2l2 2h-2z"></path>
-</svg>
diff --git a/Icons/crowproj.svg b/Icons/crowproj.svg
deleted file mode 100644 (file)
index b0f6b86..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-<svg width="64" height="64" xmlns="http://www.w3.org/2000/svg">
- <!-- Created with Method Draw - http://github.com/duopixel/Method-Draw/ -->
- <g>
-  <rect opacity="1.0" rx="5" id="svg_1" height="59" width="59" y="2.5" x="2.5" stroke-width="6" stroke="#111111" fill="#bbbbcc"/>
-  <rect opacity="1.0" rx="5" id="svg_1" height="22" width="59" y="2.5" x="2.5" stroke-width="6" stroke="#111111" fill="#4455aa"/>
-<!--  <line stroke-linecap="undefined" stroke-linejoin="undefined" id="svg_2" y2="24.5" x2="61.5" y1="24.5" x1="2.5" stroke-width="6" stroke="#bbbbbb" fill="none"/>-->
- </g>
-</svg>
\ No newline at end of file
diff --git a/Icons/exit-symbol.svg b/Icons/exit-symbol.svg
deleted file mode 100644 (file)
index 3fbaa0d..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16">
-<path fill="#FFFFFF" d="M14 6h-1.7c-0.2 0-0.4-0.1-0.6-0.2l-1.3-1.3c-0.2-0.3-0.6-0.5-1.1-0.5h-0.3c1.1 0 2-0.9 2-2s-0.9-2-2-2-2 0.9-2 2c0 0.7 0.4 1.4 1 1.7l-0.2 0.3h-2c-1.1 0-2.3 0.5-3 1.5l-0.6 0.8c-0.4 0.4-0.2 1 0.2 1.3 0.4 0.2 0.9 0.1 1.2-0.3l0.5-0.7c0.3-0.4 0.7-0.6 1.2-0.6h0.8l-0.7 1.6c-0.3 0.6-0.4 1.2-0.4 1.9v2c0 0.3-0.2 0.5-0.5 0.5h-2.5c-0.6 0-1 0.4-1 1s0.4 1 1 1h3.5c0.8 0 1.5-0.7 1.5-1.5v-2.5l3.8 4.5c0.6 0.9 1.7 1.5 2.8 1.5h0.9l-5.4-6.7c-0.3-0.4-0.2-0.8 0-1.3l0.6-1.5 0.7 0.8c0.4 0.4 1 0.7 1.6 0.7h2c0.6 0 1-0.4 1-1s-0.4-1-1-1z"></path>
-</svg>
diff --git a/Icons/file.svg b/Icons/file.svg
deleted file mode 100644 (file)
index b156b0a..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-        width="64px" height="64px" viewBox="0 0 64 64" enable-background="new 0 0 64 64" xml:space="preserve">
-<g>
-       <polygon fill="#ffffff" stroke="#000000" stroke-width="2" stroke-miterlimit="10" points="23,1 55,1 55,63 9,63 9,15      "/>
-       <polyline fill="#ffffff" stroke="#000000" stroke-width="2" stroke-miterlimit="10" points="9,15 23,15 23,1       "/>
-</g>
-</svg>
diff --git a/Icons/folder.svg b/Icons/folder.svg
deleted file mode 100644 (file)
index 84caa4f..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64">
-       <defs>
-               <linearGradient id="0" x1="59.31" y1="-10.513" x2="59.15" y2="-37.783" gradientUnits="userSpaceOnUse" gradientTransform="matrix(4.17478 0 0 4.16765-1066.12 447.73)">
-                       <stop stop-color="#e4c754"/>
-                       <stop offset="1" stop-color="#ffe684"/>
-               </linearGradient>
-               <linearGradient gradientUnits="userSpaceOnUse" y2="354.29" x2="-704.05" y1="647.77" x1="-701.19" id="1">
-                       <stop stop-color="#ffdd5a"/>
-                       <stop offset="1" stop-color="#f4eca5"/>
-               </linearGradient>
-       </defs>
-       <path d="m-880.52 294.78c-4.626 0-8.349 3.718-8.349 8.335v161.41l88.94.193 372.09.807v-121.2c0-4.618-3.724-8.335-8.35-8.335h-265.48c-8.51.751-9.607-.377-13.812-5.981-5.964-7.968-14.969-21.443-20.84-29.21-4.712-6.805-5.477-6.02-13.292-6.02z" transform="matrix(.12614 0 0 .12614 115.04-27.788)" fill="url(#0)" color="#000"/>
-       <rect transform="matrix(.12614 0 0 .12614 115.04-27.788)" y="356.85" x="-890.28" height="295.13" width="463.85" fill="url(#1)" stroke="url(#1)" stroke-width="2.378" rx="9.63"/>
-</svg>
diff --git a/Icons/frame.svg b/Icons/frame.svg
deleted file mode 100644 (file)
index 576d418..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-<?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"
-   width="67.316353mm"
-   height="27.756908mm"
-   viewBox="0 0 67.316353 27.756908"
-   version="1.1"
-   id="svg8895"
-   inkscape:version="0.92.2 (5c3e80d, 2017-08-06)"
-   sodipodi:docname="frame.svg">
-  <defs
-     id="defs8889" />
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#434343"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="0.35"
-     inkscape:cx="195.58263"
-     inkscape:cy="-58.812438"
-     inkscape:document-units="mm"
-     inkscape:current-layer="layer1"
-     showgrid="false"
-     inkscape:window-width="1600"
-     inkscape:window-height="881"
-     inkscape:window-x="0"
-     inkscape:window-y="0"
-     inkscape:window-maximized="1"
-     fit-margin-top="0"
-     fit-margin-left="0"
-     fit-margin-right="0"
-     fit-margin-bottom="0" />
-  <metadata
-     id="metadata8892">
-    <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></dc:title>
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="Calque 1"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(106.44585,-169.24652)">
-    <polygon
-       transform="matrix(0.26458333,0,0,0.26458333,-314.15488,52.734079)"
-       style="fill:#f5fcff"
-       id="polygon6818"
-       points="860.815,440.362 785.042,440.362 785.042,469.369 789.327,469.369 789.327,515.071 815.242,540.986 971.44,540.986 971.44,545.27 1001.438,545.27 1001.438,540.986 1039.466,540.986 1039.466,470.564 1013.109,444.207 1012.21,445.105 1038.193,471.091 1038.193,539.714 815.77,539.714 790.598,514.544 790.598,445.919 1014.176,445.919 1014.176,444.648 860.815,444.648 " />
-  </g>
-</svg>
diff --git a/Icons/level-up.svg b/Icons/level-up.svg
deleted file mode 100644 (file)
index 86d7c78..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16">
-<path fill="#FFFFFF" d="M9 0l4 7h-3v9h-7l2-3h2v-6h-3z"></path>
-</svg>
diff --git a/Icons/open-file.svg b/Icons/open-file.svg
deleted file mode 100644 (file)
index d5c6a84..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16">
-<path fill="#FFFFFF" d="M 4.0527344 0.24023438 L 4.0527344 2.1777344 L 1.9316406 2.1777344 L 0.93164062 4.1777344 L -0.068359375 4.1777344 L -0.068359375 15.177734 L 13.931641 15.177734 L 15.931641 6.1777344 L 13.759766 6.1777344 L 13.759766 3.4746094 L 10.525391 0.24023438 L 4.0527344 0.24023438 z M 4.8613281 1.0488281 L 9.7148438 1.0488281 L 9.7148438 4.2851562 L 12.951172 4.2851562 L 12.951172 6.1777344 L 4.8613281 6.1777344 L 4.8613281 1.0488281 z M 10.525391 1.0488281 L 12.951172 3.4746094 L 10.525391 3.4746094 L 10.525391 1.0488281 z M 2.53125 3.1777344 L 4.0527344 3.1777344 L 4.0527344 6.1777344 L 2.9316406 6.1777344 L 0.93164062 12.078125 L 0.93164062 5.1777344 L 1.53125 5.1777344 L 2.53125 3.1777344 z M 3.6328125 7.1777344 L 14.832031 7.1777344 L 13.232422 14.177734 L 1.3320312 14.078125 L 3.6328125 7.1777344 z "/>
-</svg>
diff --git a/Icons/paste-on-document.svg b/Icons/paste-on-document.svg
deleted file mode 100644 (file)
index b0a705e..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16">
-<path fill="#FFFFFF" d="M13 4h-3v-4h-10v14h6v2h10v-9l-3-3zM3 1h4v1h-4v-1zM15 15h-8v-10h5v3h3v7zM13 7v-2l2 2h-2z"></path>
-</svg>
diff --git a/Icons/project.svg b/Icons/project.svg
deleted file mode 100644 (file)
index 7522605..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg xmlns="http://www.w3.org/2000/svg"
-   viewBox="0 0 64 64"
-   height="64"
-   width="64">  
-  <g>
-   <path fill="#3333dd" stroke="#bbbbff" stroke-width="10" d="m1.655043,19.482317l17.905939,-17.913175l25.323143,0l17.905937,17.913175l0,25.333551l-17.905937,17.913147l-25.323143,0l-17.905939,-17.913147l0,-25.333551z" id="svg_2"/>
-  </g>
-</svg>
diff --git a/Icons/projectRef.svg b/Icons/projectRef.svg
deleted file mode 100644 (file)
index 3ebd7b5..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<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"
-   viewBox="0 0 64 64"
-   height="64"
-   width="64"
-   id="svg2"
-   version="1.1">  
-  <defs id="defs6" />
-  <g>
-          <path fill="#007fff" stroke="#111111" stroke-width="2" d="m1.655043,19.482317l17.905939,-17.913175l25.323143,0l17.905937,17.913175l0,25.333551l-17.905937,17.913147l-25.323143,0l-17.905939,-17.913147l0,-25.333551z" id="svg_2"/>
-         <path
-            d="M 15,33.964845 A 6.2543149,5.8551034 0 0 1 8.7456846,39.819949 6.2543149,5.8551034 0 0 1 2.4913703,33.964845 6.2543149,5.8551034 0 0 1 8.7456846,28.109741 6.2543149,5.8551034 0 0 1 15,33.964845 Z M 30.205524,19.726298 h 24.484978 c 3.833495,0 6.919666,3.88699 6.919666,8.715226 v 11.046641 c 0,4.828235 -3.086171,8.715225 -6.919666,8.715225 H 30.205524 c -3.833494,0 -6.919665,-3.88699 -6.919665,-8.715225 V 28.441524 c 0,-4.828236 3.086171,-8.715226 6.919665,-8.715226 z M 15,33.964845 h 8.285859"
-            style="opacity:1;fill:#a0a8ab;fill-opacity:1;stroke:#181818;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
-            id="path819" />
-  </g>
-</svg>
diff --git a/Icons/question.svg b/Icons/question.svg
deleted file mode 100644 (file)
index fb8e3d3..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16">
-<path fill="#FFFFFF" d="M9 11h-3c0-3 1.6-4 2.7-4.6 0.4-0.2 0.7-0.4 0.9-0.6 0.5-0.5 0.3-1.2 0.2-1.4-0.3-0.7-1-1.4-2.3-1.4-2.1 0-2.5 1.9-2.5 2.3l-3-0.4c0.2-1.7 1.7-4.9 5.5-4.9 2.3 0 4.3 1.3 5.1 3.2 0.7 1.7 0.4 3.5-0.8 4.7-0.5 0.5-1.1 0.8-1.6 1.1-0.9 0.5-1.2 1-1.2 2z"></path>
-<path fill="#FFFFFF" d="M9.5 14c0 1.105-0.895 2-2 2s-2-0.895-2-2c0-1.105 0.895-2 2-2s2 0.895 2 2z"></path>
-</svg>
diff --git a/Icons/scissors.svg b/Icons/scissors.svg
deleted file mode 100644 (file)
index 4b5a225..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generated by IcoMoon.io -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16">
-<path fill="#FFFFFF" d="M16 3.1c0 0-2.1-1.1-3.5-1-0.3 0-0.5 0.1-0.7 0.2l-4.3 3.4-1.8-1.5c0.1-0.3 0.2-0.6 0.3-1 0.1-1.8-1.4-3.4-3.3-3.2-1.2 0.1-2.3 1-2.6 2.2-0.3 1.3 0.2 2.5 1.2 3.2l3.3 2.6-3.3 2.6c-1 0.7-1.5 1.9-1.2 3.2 0.3 1.2 1.4 2 2.6 2.2 1.9 0.2 3.4-1.4 3.2-3.2 0-0.3-0.1-0.7-0.3-1l1.8-1.5 4.3 3.4c0.2 0.1 0.4 0.2 0.7 0.2 1.4 0.1 3.5-1 3.5-1l-5.7-4.9 5.8-4.9zM2.8 4.6c-0.9-0.1-1.6-0.9-1.5-1.8s0.9-1.6 1.8-1.5c0.9 0.1 1.6 0.9 1.5 1.8 0 0.9-0.9 1.6-1.8 1.5zM3.1 14.7c-0.9 0.1-1.7-0.6-1.8-1.5s0.6-1.7 1.5-1.8c0.9-0.1 1.7 0.6 1.8 1.5s-0.6 1.7-1.5 1.8zM12.4 3.2c0 0 0.1 0 0.2 0 0.4 0 0.9 0.1 1.4 0.2l-6.8 5.7-0.9-1.1 6.1-4.8zM14 12.6c-0.5 0.2-1 0.3-1.4 0.2-0.1 0-0.2 0-0.2 0l-4-3.2 1-0.9 4.6 3.9z"></path>
-</svg>
diff --git a/Icons/warning_construction.svg b/Icons/warning_construction.svg
deleted file mode 100644 (file)
index 4c101ec..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-<?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:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="378.30496" height="326.05325" id="svg2" sodipodi:version="0.32" inkscape:version="0.46" version="1.0" sodipodi:docbase="C:\Documents and Settings\KevinDuke\Desktop" sodipodi:docname="Ambox_warning_blue_construction.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape">
-  <sodipodi:namedview id="base" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" gridtolerance="10000" guidetolerance="10" objecttolerance="10" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="0.64877047" inkscape:cx="-125.04673" inkscape:cy="39.346892" inkscape:document-units="px" inkscape:current-layer="layer1" width="400px" height="400px" showgrid="false" inkscape:window-width="1264" inkscape:window-height="764" inkscape:window-x="0" inkscape:window-y="0"/>
-  <defs id="defs4">
-    <linearGradient id="linearGradient3134">
-      <stop offset="0" style="stop-color:#4c99f5;stop-opacity:1;" id="stop3136"/>
-      <stop id="stop3165" style="stop-color:#1361ba;stop-opacity:1;" offset="0.5"/>
-      <stop offset="1" style="stop-color:#194c9a;stop-opacity:1;" id="stop3138"/>
-    </linearGradient>
-    <linearGradient id="linearGradient3140" gradientUnits="userSpaceOnUse" inkscape:collect="always" x1="91.29969" x2="244.97258" xlink:href="#linearGradient3134" y1="4.3178039" y2="237.70302"/>
-    <linearGradient id="linearGradient3148" gradientUnits="userSpaceOnUse" inkscape:collect="always" x1="91.29969" x2="244.97258" xlink:href="#linearGradient3134" y1="4.3178039" y2="237.70302"/>
-    <filter inkscape:collect="always" id="filter3172">
-      <feGaussianBlur inkscape:collect="always" stdDeviation="5.0924795" id="feGaussianBlur3174"/>
-    </filter>
-    <linearGradient inkscape:collect="always" xlink:href="#linearGradient3134" id="linearGradient2184" gradientUnits="userSpaceOnUse" x1="29.753853" y1="-13.269632" x2="202.58235" y2="183.58783" gradientTransform="matrix(1.2084425,0,0,1.2084425,89.669573,106.93911)"/>
-  </defs>
-  <metadata id="metadata7">
-    <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>3D effect warning triangle</dc:title>
-        <dc:date>18/9/07</dc:date>
-        <dc:creator>
-          <cc:Agent>
-            <dc:title>Tim O'Ryan</dc:title>
-          </cc:Agent>
-        </dc:creator>
-        <cc:license rdf:resource="http://creativecommons.org/licenses/by-sa/2.5/"/>
-      </cc:Work>
-      <cc:License rdf:about="http://creativecommons.org/licenses/by-sa/2.5/">
-        <cc:permits rdf:resource="http://web.resource.org/cc/Reproduction"/>
-        <cc:permits rdf:resource="http://web.resource.org/cc/Distribution"/>
-        <cc:requires rdf:resource="http://web.resource.org/cc/Notice"/>
-        <cc:requires rdf:resource="http://web.resource.org/cc/Attribution"/>
-        <cc:permits rdf:resource="http://web.resource.org/cc/DerivativeWorks"/>
-        <cc:requires rdf:resource="http://web.resource.org/cc/ShareAlike"/>
-      </cc:License>
-    </rdf:RDF>
-  </metadata>
-  <g inkscape:label="Layer 1" id="layer1" inkscape:groupmode="layer" transform="translate(-15.90328,-38.352144)">
-    <path style="opacity:1;fill:#777777;fill-opacity:0.79729728;stroke:none;stroke-width:20.6877861;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter3172)" d="M 213.05399,47.37801 C 208.83955,47.5955 205.01929,49.92458 202.89552,53.57127 L 33.940149,345.10803 C 31.700749,348.97294 31.693669,353.73905 33.921559,357.61061 C 36.149459,361.48217 40.273789,363.87084 44.740599,363.87665 L 381.66948,364.40534 C 386.13811,364.41875 390.27406,362.04591 392.51793,358.18147 C 394.7618,354.31704 394.77229,349.54876 392.54546,345.67448 L 224.53419,53.60904 C 222.18314,49.53899 217.74782,47.13166 213.05399,47.37801 L 213.05399,47.37801 z M 213.65821,84.83972 L 360.06857,339.36792 L 66.417039,338.91476 L 213.65821,84.83972 z" id="path3152"/>
-    <path style="opacity:1;fill:url(#linearGradient2184);fill-opacity:1;stroke:#001387;stroke-width:6.25;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 199.82666,41.494396 C 195.61222,41.711894 191.79197,44.040971 189.66819,47.687664 L 20.712823,339.22442 C 18.473424,343.08933 18.466339,347.85544 20.694238,351.727 C 22.922136,355.59856 27.04646,357.98723 31.513278,357.99304 L 368.44215,358.52173 C 372.91078,358.53514 377.04674,356.1623 379.2906,352.29786 C 381.53447,348.43343 381.54497,343.66515 379.31813,339.79087 L 211.30686,47.725427 C 208.95581,43.655381 204.52049,41.248051 199.82666,41.494396 L 199.82666,41.494396 z M 200.43088,78.956113 L 346.84124,333.48431 L 53.189715,333.03115 L 200.43088,78.956113 z" id="path2178"/>
-    <path sodipodi:arg2="1.5723975" style="opacity:1;fill:url(#linearGradient3140);fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient3148);stroke-width:20.6877861;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" id="path2160" sodipodi:cx="91.428574" sodipodi:cy="117.14286" sodipodi:arg1="0.52519998" sodipodi:type="star" d="M 230.71429,197.85715 L -48.114905,197.41068 L 91.686339,-43.839248 L 230.71429,197.85715 z" sodipodi:r2="80.491158" sodipodi:sides="3" inkscape:randomized="0" transform="matrix(1.2084425,0,0,1.2084425,89.669573,106.93911)" inkscape:rounded="0" sodipodi:r1="160.98232" inkscape:flatsided="true"/>
-    <path sodipodi:nodetypes="cccsccscccc" d="M 199.89464,117.765 C 197.29017,117.9016 194.92932,119.3644 193.61684,121.65473 L 89.204984,304.75655 C 87.82107,307.18391 87.81669,310.17731 89.193499,312.60887 C 90.570306,315.04044 93.119077,316.54066 95.879504,316.54431 L 304.09647,316.87636 C 306.85801,316.88477 309.41397,315.39449 310.80064,312.96739 C 312.18732,310.54032 312.1938,307.54558 310.81766,305.1123 L 206.98922,121.67846 C 205.53631,119.12222 202.79534,117.61029 199.89464,117.765 L 199.89464,117.765 z" style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:20.6877861;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1" id="path19491"/>
-    <g id="g2689" transform="matrix(0.4429717,0,0,0.4429717,130.45212,176.47068)">
-      <path id="path633" style="font-size:12px;fill-rule:evenodd" d="M 385.98026,297.1542 L 140.36506,297.47 C 138.14026,297.2692 136.52876,296.7617 137.37106,294.1072 L 227.62156,178.4191 C 230.74276,173.9958 235.45166,171.6041 240.18906,171.7401 L 285.54036,171.6433 C 292.89546,171.6399 295.73166,173.769 299.77886,178.8507 L 388.15426,292.9709 C 388.96306,294.9787 388.23836,296.9865 385.98026,297.1542 z"/>
-      <rect id="rect613" style="font-size:12px;fill:#000002;fill-rule:evenodd" transform="matrix(0.8854492,0.4647361,-0.4080531,0.9129582,0,0)" y="-14.842998" x="123.87642" ry="11.816919" rx="11.204546" height="124.68408" width="62.141693"/>
-      <rect id="rect615" style="font-size:12px;fill-rule:evenodd" y="46.624874" x="62.235527" ry="8" rx="9.4117651" height="32.5" width="100.00001"/>
-      <rect id="rect616" style="font-size:12px;fill-rule:evenodd" transform="matrix(0.4686899,-0.8833628,0.7446349,0.6674719,0,0)" y="81.759407" x="-81.341789" ry="6.8044353" rx="8.770999" height="27.643017" width="93.191841"/>
-      <rect id="rect617" style="font-size:12px;fill-rule:evenodd" transform="matrix(0.8845854,0.4663782,-0.4366812,0.8996163,0,0)" y="83.646034" x="80.548698" ry="3.8168414" rx="27.532589" height="15.505919" width="292.53378"/>
-      <rect id="rect618" style="font-size:12px;fill-rule:evenodd" transform="matrix(-5.7205843e-2,-0.9983624,0.9970356,-7.6942184e-2,0,0)" y="144.00377" x="-203.17215" ry="6.6537714" rx="12.701341" height="27.030947" width="134.95171"/>
-      <ellipse sodipodi:ry="32.5" sodipodi:rx="31.25" sodipodi:cy="467.36218" sodipodi:cx="418.75" id="path619" style="font-size:12px;fill-rule:evenodd;stroke-width:1" transform="matrix(0.957573,0,0,0.972804,-219.55633,-423.0267)" ry="32.5" rx="31.25" cy="467.36218" cx="418.75"/>
-      <rect id="rect621" style="font-size:12px;fill-rule:evenodd" transform="matrix(-0.2340079,-0.9722347,0.9856452,-0.16883,0,0)" y="45.608078" x="-250.27161" ry="7.6888905" rx="7.3474178" height="31.236115" width="78.066315"/>
-      <rect id="rect622" style="font-size:12px;fill-rule:evenodd" transform="matrix(-7.5698648e-3,-0.9999713,0.9970336,7.6967061e-2,0,0)" y="100.42473" x="-287.73053" ry="7.6912837" rx="7.3637767" height="31.245834" width="78.240143"/>
-      <rect id="rect623" style="font-size:12px;fill-rule:evenodd" transform="matrix(0.4947081,-0.8690592,0.8178671,0.5754071,0,0)" y="135.70329" x="-232.42075" ry="7.8654013" rx="14.748785" height="31.953188" width="156.70583"/>
-    </g>
-  </g>
-</svg>
\ No newline at end of file
diff --git a/Images/Icons/Cursors/arrow b/Images/Icons/Cursors/arrow
deleted file mode 100644 (file)
index 61f968e..0000000
Binary files a/Images/Icons/Cursors/arrow and /dev/null differ
diff --git a/Images/Icons/Cursors/bottom_left_corner b/Images/Icons/Cursors/bottom_left_corner
deleted file mode 100644 (file)
index e9a41a2..0000000
Binary files a/Images/Icons/Cursors/bottom_left_corner and /dev/null differ
diff --git a/Images/Icons/Cursors/bottom_right_corner b/Images/Icons/Cursors/bottom_right_corner
deleted file mode 100644 (file)
index 208faf4..0000000
Binary files a/Images/Icons/Cursors/bottom_right_corner and /dev/null differ
diff --git a/Images/Icons/Cursors/cross b/Images/Icons/Cursors/cross
deleted file mode 100644 (file)
index 4596b48..0000000
Binary files a/Images/Icons/Cursors/cross and /dev/null differ
diff --git a/Images/Icons/Cursors/hand b/Images/Icons/Cursors/hand
deleted file mode 100644 (file)
index 23939b7..0000000
Binary files a/Images/Icons/Cursors/hand and /dev/null differ
diff --git a/Images/Icons/Cursors/help b/Images/Icons/Cursors/help
deleted file mode 100644 (file)
index cd7ec27..0000000
Binary files a/Images/Icons/Cursors/help and /dev/null differ
diff --git a/Images/Icons/Cursors/ibeam b/Images/Icons/Cursors/ibeam
deleted file mode 100644 (file)
index ccbdcb5..0000000
Binary files a/Images/Icons/Cursors/ibeam and /dev/null differ
diff --git a/Images/Icons/Cursors/move b/Images/Icons/Cursors/move
deleted file mode 100644 (file)
index ab98f6a..0000000
Binary files a/Images/Icons/Cursors/move and /dev/null differ
diff --git a/Images/Icons/Cursors/sb_h_double_arrow b/Images/Icons/Cursors/sb_h_double_arrow
deleted file mode 100644 (file)
index 1768b6a..0000000
Binary files a/Images/Icons/Cursors/sb_h_double_arrow and /dev/null differ
diff --git a/Images/Icons/Cursors/sb_v_double_arrow b/Images/Icons/Cursors/sb_v_double_arrow
deleted file mode 100644 (file)
index a36abd4..0000000
Binary files a/Images/Icons/Cursors/sb_v_double_arrow and /dev/null differ
diff --git a/Images/Icons/Cursors/top_left_corner b/Images/Icons/Cursors/top_left_corner
deleted file mode 100644 (file)
index 3493adc..0000000
Binary files a/Images/Icons/Cursors/top_left_corner and /dev/null differ
diff --git a/Images/Icons/Cursors/top_right_corner b/Images/Icons/Cursors/top_right_corner
deleted file mode 100644 (file)
index 264cc57..0000000
Binary files a/Images/Icons/Cursors/top_right_corner and /dev/null differ
diff --git a/Images/Icons/IconAlerte.svg b/Images/Icons/IconAlerte.svg
deleted file mode 100755 (executable)
index 286dbf3..0000000
+++ /dev/null
@@ -1,177 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<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"
-   version="1.0"
-   width="64"
-   height="64"
-   id="svg2"
-   inkscape:version="0.91 r13725"
-   sodipodi:docname="IconAlerte.svg">
-  <metadata
-     id="metadata49">
-    <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></dc:title>
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <sodipodi:namedview
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1"
-     objecttolerance="10"
-     gridtolerance="10"
-     guidetolerance="10"
-     inkscape:pageopacity="0"
-     inkscape:pageshadow="2"
-     inkscape:window-width="1280"
-     inkscape:window-height="984"
-     id="namedview47"
-     showgrid="false"
-     fit-margin-top="1"
-     fit-margin-left="1"
-     fit-margin-right="1"
-     fit-margin-bottom="1"
-     inkscape:zoom="4.2211598"
-     inkscape:cx="60.205288"
-     inkscape:cy="44.735206"
-     inkscape:window-x="0"
-     inkscape:window-y="16"
-     inkscape:window-maximized="1"
-     inkscape:current-layer="svg2" />
-  <defs
-     id="defs4">
-    <linearGradient
-       id="Grad1"
-       x1="41.194874"
-       y1="616.47717"
-       x2="118.93135"
-       y2="527.55511"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0.48821801,0,0,-0.48010384,3.766054,311.02113)">
-      <stop
-         offset="0"
-         stop-color="#bb0000"
-         id="stop7" />
-      <stop
-         offset="1"
-         stop-color="#5f0000"
-         id="stop9" />
-    </linearGradient>
-    <linearGradient
-       id="Grad2"
-       x1="530.80951"
-       y1="486.63101"
-       x2="174.80548"
-       y2="211.22995"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0.1028564,0,0,0.10681322,1.0000004,5.1888378)">
-      <stop
-         offset="0"
-         stop-color="#9a0000"
-         id="stop12" />
-      <stop
-         offset="1"
-         stop-color="#f22803"
-         id="stop14" />
-    </linearGradient>
-    <linearGradient
-       id="Grad3"
-       x1="187.87357"
-       y1="224.59892"
-       x2="581.83746"
-       y2="483.10001"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0.1028564,0,0,0.10681322,1.0000004,5.1888372)">
-      <stop
-         offset="0"
-         stop-color="#ec6c60"
-         id="stop17" />
-      <stop
-         offset="1"
-         stop-color="#d11412"
-         id="stop19" />
-    </linearGradient>
-    <linearGradient
-       id="Grad4"
-       x1="250.39845"
-       y1="101.53633"
-       x2="412.0943"
-       y2="264.54187"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0.1028564,0,0,0.10681322,1.0000004,5.1888378)">
-      <stop
-         offset="0"
-         stop-color="#ffd9d9"
-         id="stop22" />
-      <stop
-         offset="1"
-         stop-color="#ff2727"
-         id="stop24" />
-    </linearGradient>
-    <radialGradient
-       id="Grad5"
-       cx="295.47125"
-       cy="186.09634"
-       r="179.55"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0,0.17037225,-0.09390987,-2.4099214e-6,49.328051,-23.159866)">
-      <stop
-         offset="0"
-         stop-color="#ffffff"
-         id="stop27" />
-      <stop
-         offset="0.5"
-         stop-color="#ffffff"
-         id="stop29" />
-      <stop
-         offset="1"
-         stop-color="#d5d5d5"
-         id="stop31" />
-    </radialGradient>
-  </defs>
-  <path
-     d="m 30.5028,7.5139081 c 0,0 -27.8740714,47.5318579 -27.8740714,47.5318579 -0.5348541,0.907918 -0.5348541,2.029451 0,2.937368 0.5245675,0.897228 1.5119883,1.463345 2.5816945,1.463345 l 55.7481489,0 c 1.059418,0 2.046843,-0.566117 2.58169,-1.463345 0.524565,-0.907917 0.524565,-2.02945 0,-2.937368 L 35.666191,7.5139081 c -0.534848,-0.9079111 -1.522275,-1.4740216 -2.5817,-1.4740216 -1.059414,0 -2.04684,0.5661105 -2.581691,1.4740216 z"
-     style="fill-opacity:0.17857104"
-     id="path33"
-     inkscape:connector-curvature="0" />
-  <path
-     d="m 29.275219,6.6628606 c 0,0 -27.8740792,47.5318564 -27.8740792,47.5318564 -0.53485309,0.907918 -0.53485309,2.029463 0,2.937369 0.5245677,0.897237 1.5119881,1.463341 2.5816944,1.463341 l 55.7481458,0 c 1.059424,0 2.046838,-0.566104 2.581701,-1.463341 0.52456,-0.907906 0.52456,-2.029451 0,-2.937369 L 34.438597,6.6628606 C 33.903747,5.7549484 32.916334,5.188839 31.856907,5.188839 c -1.059426,0 -2.046838,0.5661094 -2.581688,1.4740216 z"
-     style="fill:url(#Grad1)"
-     id="path35"
-     inkscape:connector-curvature="0" />
-  <path
-     d="m 31.856907,7.6348601 c -0.174854,0 -0.339422,0.096135 -0.431993,0.2456701 L 17.487873,31.646467 3.550838,55.41239 c -0.092571,0.14954 -0.092571,0.341802 0,0.491339 0.09257,0.149539 0.2571403,0.245671 0.4319962,0.245671 l 55.7481458,0 c 0.174855,0 0.339424,-0.09613 0.432007,-0.245671 0.09256,-0.149537 0.09256,-0.341799 0,-0.491339 L 32.288901,7.8805302 C 32.196331,7.7309918 32.031763,7.6348601 31.856907,7.6348601 Z"
-     style="fill:url(#Grad2)"
-     id="path37"
-     inkscape:connector-curvature="0" />
-  <path
-     d="m 31.853051,7.6348601 c -0.174856,0 -0.339436,0.096135 -0.432004,0.2456701 L 17.484016,31.646467 3.5469789,55.41239 c -0.092572,0.14954 -0.092572,0.341802 0,0.491339 0.09257,0.149539 0.2571404,0.245671 0.4319963,0.245671 l 55.7481468,0 c 0.174855,0 0.339424,-0.09613 0.431994,-0.245671 0.09257,-0.149537 0.09257,-0.341799 0,-0.491339 L 32.285045,7.8805302 C 32.192475,7.7309918 32.027904,7.6348601 31.853051,7.6348601 Z"
-     style="fill:none;stroke:url(#Grad3);stroke-width:1.2577858;stroke-linejoin:round"
-     id="path39"
-     inkscape:connector-curvature="0" />
-  <path
-     d="m 31.8643,8.4908547 c -0.165609,0.00854 -0.319978,0.1044731 -0.408207,0.2470058 L 17.519052,32.503792 15.577638,35.815003 c 4.728601,2.947692 10.261233,4.646368 16.174165,4.646368 5.996896,0 11.604186,-1.744327 16.376659,-4.769869 L 32.320723,8.7378605 c -0.09257,-0.1495396 -0.255854,-0.2470058 -0.430709,-0.2470058 -0.0082,0 -0.01758,-4.087e-4 -0.02572,0 z"
-     style="fill:url(#Grad4);stroke-width:10;stroke-linejoin:round"
-     id="path41"
-     inkscape:connector-curvature="0" />
-  <path
-     d="m 30.437499,20.313589 -16.837595,28.70071 c -0.287995,0.502028 -0.287995,1.121539 0,1.612881 0.288007,0.502017 0.833143,0.811785 1.419421,0.811785 l 33.664901,0 c 0.58628,0 1.131427,-0.309768 1.419424,-0.811785 0.287994,-0.502022 0.287994,-1.110853 0,-1.612881 L 33.276338,20.313589 c -0.287995,-0.502021 -0.833141,-0.811777 -1.419419,-0.811777 -0.586279,0 -1.131423,0.309756 -1.41942,0.811777 z"
-     style="fill:url(#Grad5)"
-     id="path43"
-     inkscape:connector-curvature="0" />
-  <path
-     d="m 30.969176,50.420598 c -0.964669,-0.479803 -1.699326,-1.633479 -1.699326,-2.668545 0,-1.92727 1.939303,-3.37905 3.774142,-2.825358 1.237815,0.373544 2.079121,1.533547 2.068815,2.852514 -0.0088,1.120421 -0.475773,1.945794 -1.428956,2.525663 -0.729622,0.44385 -1.950349,0.495876 -2.714675,0.115726 z m 0.219256,-7.610173 c -0.120588,-0.06883 -0.404599,-0.308433 -0.631097,-0.532473 -0.791399,-0.78278 -0.790414,-0.775892 -1.30629,-9.151632 -0.458585,-7.445434 -0.462378,-7.561125 -0.265603,-8.095945 0.442678,-1.203277 1.429043,-1.730174 3.071401,-1.640697 1.043956,0.05689 1.847956,0.437609 2.370558,1.122567 0.446394,0.585054 0.543443,0.915796 0.543036,1.850484 -4.75e-4,1.015697 -0.625235,13.471485 -0.714045,14.234796 -0.116279,0.999709 -0.678344,1.810994 -1.502164,2.168205 -0.470757,0.204147 -1.247544,0.22632 -1.565796,0.04469 z"
-     id="path45"
-     inkscape:connector-curvature="0" />
-</svg>
diff --git a/Images/Icons/buttonB.svg b/Images/Icons/buttonB.svg
deleted file mode 100755 (executable)
index 56bc8d9..0000000
+++ /dev/null
@@ -1,125 +0,0 @@
-<?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:xlink="http://www.w3.org/1999/xlink"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   version="1.1"
-   width="228.18092"
-   height="82.974884"
-   id="Root"
-   pointer-events="none"
-   inkscape:version="0.91 r13725"
-   sodipodi:docname="buttonB.svg">
-  <metadata
-     id="metadata5666">
-    <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></dc:title>
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <sodipodi:namedview
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1"
-     objecttolerance="10"
-     gridtolerance="10"
-     guidetolerance="10"
-     inkscape:pageopacity="0"
-     inkscape:pageshadow="2"
-     inkscape:window-width="1280"
-     inkscape:window-height="984"
-     id="namedview5664"
-     showgrid="false"
-     inkscape:zoom="1.7041667"
-     inkscape:cx="64.029735"
-     inkscape:cy="41.487444"
-     inkscape:window-x="0"
-     inkscape:window-y="16"
-     inkscape:window-maximized="1"
-     inkscape:current-layer="layer1"
-     fit-margin-top="0"
-     fit-margin-left="0"
-     fit-margin-right="0"
-     fit-margin-bottom="0" />
-  <defs
-     id="defs4">
-    <linearGradient
-       id="linearGradient3159">
-      <stop
-         id="stop3163"
-         style="stop-color:#000000;stop-opacity:0"
-         offset="0" />
-      <stop
-         id="stop3161"
-         style="stop-color:#000000;stop-opacity:0.5"
-         offset="1" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient3030">
-      <stop
-         id="stop3032"
-         style="stop-color:#ffffff;stop-opacity:1"
-         offset="0" />
-      <stop
-         id="stop3034"
-         style="stop-color:#ffffff;stop-opacity:0"
-         offset="1" />
-    </linearGradient>
-    <linearGradient
-       x1="120"
-       y1="10"
-       x2="120"
-       y2="50"
-       id="linearGradient3113"
-       xlink:href="#linearGradient3030"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(1.037186,0,0,1.037186,-4.4623201,-1.8593001)" />
-    <radialGradient
-       cx="120"
-       cy="170"
-       r="100"
-       fx="120"
-       fy="170"
-       id="radialGradient3165"
-       xlink:href="#linearGradient3159"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0,-0.75431712,2.074372,0,-232.64324,174.46232)" />
-  </defs>
-  <g
-     id="layer1"
-     transform="translate(-5.9095402,-8.5125599)">
-    <rect
-       width="228.18092"
-       height="82.974884"
-       ry="41.487442"
-       x="5.9095402"
-       y="8.5125599"
-       id="ButtonBase"
-       style="fill:currentColor;stroke:none" />
-    <rect
-       width="228.18092"
-       height="82.974884"
-       ry="41.487442"
-       x="5.9095402"
-       y="8.5125599"
-       id="ButtonGlow"
-       style="fill:url(#radialGradient3165);stroke:none" />
-    <path
-       d="m 47.39698,13.69849 145.20604,0 c 11.49202,0 23.35397,11.319856 20.74372,20.74372 -1.90259,6.868746 -9.2517,5.18593 -20.74372,5.18593 l -145.205989,0 c -11.49202,0 -18.841228,1.682847 -20.743771,-5.18593 -2.610262,-9.423863 9.251699,-20.74372 20.74372,-20.74372 z"
-       id="ButtonHighlight"
-       style="fill:url(#linearGradient3113)"
-       inkscape:connector-curvature="0" />
-  </g>
-</svg>
diff --git a/Images/Icons/checkbox.svg b/Images/Icons/checkbox.svg
deleted file mode 100644 (file)
index 6b6914a..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<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"
-   version="1.1"
-   id="svg2"
-   viewBox="0 0 64 64"
-   height="64"
-   width="64">
-  <defs
-     id="defs4" />
-  <metadata
-     id="metadata7">
-    <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></dc:title>
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     id="False">
-    <rect
-       style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:3.38882232;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="background-0"
-       width="50.832325"
-       height="50.832325"
-       x="7.1542463"
-       y="10.990663" />
-  </g>
-  <g
-     id="True">
-    <rect
-       style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:3.38882232;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="background"
-       width="50.832333"
-       height="50.832333"
-       x="7.1542463"
-       y="10.990663" />
-    <path
-       style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.99999988;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:0;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
-       d="m 31.716712,35.071243 c 0,0 -6.596639,-15.24725 -21.446849,-19.472822 C 28.252789,42.42005 32.673128,59.741754 32.673128,59.741754 42.630927,26.54013 47.25986,13.972168 62.050847,1.147331 42.892384,10.522281 37.883684,17.76245 31.716712,35.071243 Z"
-       id="checkmark" />
-  </g>
-</svg>
diff --git a/Images/Icons/crow.png b/Images/Icons/crow.png
deleted file mode 100644 (file)
index 7b737d0..0000000
Binary files a/Images/Icons/crow.png and /dev/null differ
diff --git a/Images/Icons/crow.svg b/Images/Icons/crow.svg
deleted file mode 100644 (file)
index 4904e68..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<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:xlink="http://www.w3.org/1999/xlink"
-   version="1.1"
-   id="svg4242"
-   viewBox="0 0 256 256"
-   height="256"
-   width="256">
-  <defs
-     id="defs4244">
-    <radialGradient
-       r="110.25913"
-       fy="270.70752"
-       fx="372.23856"
-       cy="270.70752"
-       cx="372.23856"
-       gradientTransform="matrix(1.062155,-0.3274557,0.07305654,0.2041912,-10.009476,513.34516)"
-       gradientUnits="userSpaceOnUse"
-       id="radialGradient4294"
-       xlink:href="#linearGradient3866" />
-    <linearGradient
-       id="linearGradient3866">
-      <stop
-         id="stop3868"
-         offset="0"
-         style="stop-color:#7f8084;stop-opacity:1;" />
-      <stop
-         id="stop3870"
-         offset="1"
-         style="stop-color:#33343c;stop-opacity:1;" />
-    </linearGradient>
-    <linearGradient
-       y2="306.08167"
-       x2="343.59439"
-       y1="279.60583"
-       x1="334.9541"
-       gradientTransform="matrix(1,0,0,1.0091769,40.07781,159.75914)"
-       gradientUnits="userSpaceOnUse"
-       id="linearGradient4296"
-       xlink:href="#linearGradient3876" />
-    <linearGradient
-       id="linearGradient3876">
-      <stop
-         id="stop3878"
-         offset="0"
-         style="stop-color:#ffffff;stop-opacity:1;" />
-      <stop
-         style="stop-color:#7f7f7f;stop-opacity:1;"
-         offset="0.64247584"
-         id="stop3884" />
-      <stop
-         id="stop3880"
-         offset="1"
-         style="stop-color:#1a1a1a;stop-opacity:1;" />
-    </linearGradient>
-  </defs>
-  <metadata
-     id="metadata4247">
-    <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></dc:title>
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     transform="translate(0,-796.36219)"
-     id="layer1">
-    <g
-       transform="matrix(1.2350742,-0.53882275,0.65916664,1.4650343,-673.53297,471.49303)"
-       id="g4184">
-      <path
-         style="opacity:1;fill:url(#radialGradient4294);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.96044916px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-         d="m 487.68304,411.00893 c -2.99682,-0.23105 -5.81177,-0.55121 -9.1875,-0.59375 -8.40713,2.77744 -30.28806,5.94556 -33.03125,6.90625 -42.47708,7.28343 -94.98471,24.15339 -120.90625,39.21875 l 4.5,12 c -2.11072,-3.69563 -4.31718,-7.19861 -5.78125,-12.1875 -0.18227,2.82859 0.84496,7.82162 1.5,9.53125 0.65503,1.70962 1.61057,3.36756 3.34375,5.96875 -1.99166,-0.84449 -7.11658,-11.75343 -7.375,-12.875 -0.15386,-0.66767 1.05534,10.33056 2.84375,11.6875 -1.80696,-1.49188 -1.52305,-1.66181 -2.75,-2.84375 -1.22696,-1.18195 -2.71173,-3.93719 -3.9375,-5.0625 0.3843,2.49805 3.42098,8.39174 4.8125,9.40625 -0.86053,-0.0279 -2.97317,-2.46587 -3.46875,-3.03125 -0.99115,-1.13075 -1.48932,-3.9565 -2.03125,-4.9375 -0.50246,0.39731 -1.6681,3.34737 -2.0625,4 -0.39441,0.65262 -0.74884,1.40612 -1.03125,2.25 -0.56482,1.68775 -0.87547,3.68174 -0.96875,5.75 -0.0933,2.06825 0.0591,4.22015 0.46875,6.15625 0.20483,0.96804 0.47603,1.87987 0.8125,2.71875 0.33646,0.83887 0.71548,1.60436 1.1875,2.25 0.70264,0.75969 1.84388,1.48568 3.25,2.15625 1.40611,0.67056 3.0821,1.28578 4.84375,1.8125 1.76164,0.52671 3.60577,0.95312 5.375,1.28125 1.76922,0.32812 3.47738,0.55018 4.90625,0.625 0.24031,-0.0875 -0.45581,-0.78256 -1.3125,-2.15625 -0.42835,-0.68686 -0.90225,-1.56763 -1.3125,-2.59375 -0.41026,-1.02613 -0.77149,-2.21654 -0.96875,-3.59375 0.5081,1.36152 1.77536,3.78883 3.0625,5.34375 1.28714,1.55493 5.38999,3.14625 5.5,3.03125 -1.03917,-1.47385 -1.47448,-2.2088 -1.71875,-4.5625 -0.16233,-1.56406 -0.31418,-1.70098 -0.3125,-2.59375 0.002,-1.18053 -0.57594,-1.72994 -0.53125,-2.03125 1.77126,1.56 0.69713,6.57726 3.03125,8.65625 0.54324,0.48387 1.40275,0.27647 2.375,0.4375 0.36923,-0.0588 2.2407,0.0938 2.625,0.0312 l -4.34375,-9.75 5.75,9.5 c 2.18192,-0.25918 6.49585,-2.30584 6.53125,-2.3125 -1.93129,-2.48728 -4.12405,-4.98149 -6.53125,-7.46875 1.76984,1.76613 7.30073,6.91537 7.78125,6.96875 2.24762,0.24967 67.93089,-26.76399 85.5,-30.96875 l -4.71875,-6.3125 6.625,5.90625 c 16.63744,-3.85235 29.80389,-5.39971 51.3125,-12.78125 2.77265,-0.72543 5.88424,-2.80725 9.125,-5.3125 l -2.96875,-9.34375 4.1875,8.375 c 1.1134,-0.89476 2.14336,-1.65364 3.3125,-2.65625 l -4.28125,-6.4375 5.9375,5.03125 c 0.22145,-0.19242 0.4641,-0.39907 0.6875,-0.59375 l -3.40625,-4.4375 4.59375,3.40625 c 1.49874,-1.3084 2.9456,-2.59231 4.53125,-3.9375 l -4.84375,-1.25 7.75,-1.03125 c 2.01674,-1.64114 4.00268,-3.30676 6.15625,-4.8125 -4.34436,-4.58536 -11.02475,-7.98537 -20.34375,-10.09375 l -5.71875,4.15625 3.875,-4.59375 c -0.34329,-0.0684 -0.74363,-0.0912 -1.09375,-0.15625 l -6.34375,4.375 3.09375,-4.90625 c -0.40346,-0.0596 -0.77578,-0.13199 -1.1875,-0.1875 l -6.1875,6.1875 3.78125,-6.4375 c -0.69105,-0.0777 -1.53691,-0.0583 -2.25,-0.125 l -7.25,7.96875 5.1875,-8.125 z"
-         id="path4150" />
-      <path
-         style="fill:url(#linearGradient4296);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-         d="m 502.57781,423.08731 c -85.9867,11.86766 -158.64637,39.03586 -212.85714,75.32784 -0.54182,2.60394 0.35052,2.5753 2.37373,3.22191 50.90148,-37.35132 134.86502,-67.36701 210.48341,-78.54975 z"
-         id="path4143" />
-    </g>
-    <text
-       id="text4912"
-       y="1041.6479"
-       x="85.000008"
-       style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       xml:space="preserve"><tspan
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Arial Black';-inkscape-font-specification:'Arial Black, '"
-         y="1041.6479"
-         x="85.000008"
-         id="tspan4914">C<tspan
-   id="tspan4916"
-   style="font-size:15px">.</tspan>R<tspan
-   id="tspan4918"
-   style="font-size:15px">.</tspan>O<tspan
-   id="tspan4922"
-   style="font-size:15px">.</tspan>W<tspan
-   id="tspan4924"
-   style="font-size:15px">.</tspan></tspan></text>
-  </g>
-</svg>
diff --git a/Images/Icons/exit.svg b/Images/Icons/exit.svg
deleted file mode 100644 (file)
index cb8d1c2..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   width="64"
-   height="64"
-   viewBox="0 0 64 64">
-  <path
-     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:9;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-     d="m 13.884262,15.143117 c 24.231966,13.49131 34.18672,34.186719 34.18672,34.186719"
-     id="path4175"
-     inkscape:connector-curvature="0"
-     sodipodi:nodetypes="cc" />
-  <path
-     sodipodi:nodetypes="cc"
-     inkscape:connector-curvature="0"
-     id="path4177"
-     d="M 50.43178,15.408178 C 20.436536,37.282439 16.245061,49.594898 16.245061,49.594898"
-     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:9;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
-</svg>
diff --git a/Images/Icons/exit2.svg b/Images/Icons/exit2.svg
deleted file mode 100644 (file)
index 2361ba8..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-<?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"
-   width="64"
-   height="64"
-   viewBox="0 0 64 64.000002"
-   id="svg2"
-   version="1.1"
-   inkscape:version="0.91 r13725"
-   sodipodi:docname="exit.svg">
-  <defs
-     id="defs4" />
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="2.6992188"
-     inkscape:cx="-80.264621"
-     inkscape:cy="63.946457"
-     inkscape:document-units="px"
-     inkscape:current-layer="svg2"
-     showgrid="false"
-     units="px"
-     inkscape:window-width="1280"
-     inkscape:window-height="1009"
-     inkscape:window-x="0"
-     inkscape:window-y="0"
-     inkscape:window-maximized="1" />
-  <metadata
-     id="metadata7">
-    <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>
-  <path
-     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:9;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-     d="m 13.884262,15.143117 c 24.231966,13.49131 34.18672,34.186719 34.18672,34.186719"
-     id="path4175"
-     inkscape:connector-curvature="0"
-     sodipodi:nodetypes="cc" />
-  <path
-     sodipodi:nodetypes="cc"
-     inkscape:connector-curvature="0"
-     id="path4177"
-     d="M 50.43178,15.408178 C 20.436536,37.282439 16.245061,49.594898 16.245061,49.594898"
-     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:9;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
-</svg>
diff --git a/Images/Icons/expandable.svg b/Images/Icons/expandable.svg
deleted file mode 100644 (file)
index 134d02e..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-<svg width="9" height="9" xmlns="http://www.w3.org/2000/svg">
- <g id="False">
-  <rect height="8" width="8" y="0.5" x="0.5" stroke="#000" fill="#fff" stroke-width="1"/>
-  <line stroke-linecap="undefined" stroke-linejoin="undefined" id="svg_2" y2="4.5" x2="7" y1="4.5" x1="2" stroke="#000" fill="none"/>
-  <line stroke-linecap="undefined" stroke-linejoin="undefined" id="svg_3" y2="7" x2="4.5" y1="2" x1="4.5" stroke="#000" fill="none"/>
- </g>
- <g id="True">
-  <rect height="8" width="8" y="0.5" x="0.5" stroke="#000" fill="#fff" stroke-width="1"/>
-  <line stroke-linecap="undefined" stroke-linejoin="undefined" id="svg_2" y2="4.5" x2="7" y1="4.5" x1="2" stroke="#000" fill="none"/>
- </g>
-</svg>
\ No newline at end of file
diff --git a/Images/Icons/file.svg b/Images/Icons/file.svg
deleted file mode 100644 (file)
index a31c367..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-<?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:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="128" height="128" id="svg2606" sodipodi:version="0.32" inkscape:version="0.48.0 r9654" version="1.0" sodipodi:docname="mime2.svgz" inkscape:output_extension="org.inkscape.output.svgz.inkscape" inkscape:export-filename="/home/pinheiro/pics/oxygen-icons/scalable/mimetypes/mime2.png" inkscape:export-xdpi="360" inkscape:export-ydpi="360">
-  <defs id="defs2608">
-    <linearGradient inkscape:collect="always" id="linearGradient3913">
-      <stop style="stop-color:#ffffff;stop-opacity:1;" offset="0" id="stop3915"/>
-      <stop style="stop-color:#ffffff;stop-opacity:0;" offset="1" id="stop3917"/>
-    </linearGradient>
-    <linearGradient id="linearGradient3897">
-      <stop style="stop-color:#fcfcfc;stop-opacity:1" offset="0" id="stop3899"/>
-      <stop id="stop3901" offset="0.52275378" style="stop-color:#f8f8f8;stop-opacity:1"/>
-      <stop style="stop-color:#f0efef;stop-opacity:1;" offset="0.72337759" id="stop3903"/>
-      <stop style="stop-color:#e3e1e1;stop-opacity:1;" offset="0.89024991" id="stop3905"/>
-      <stop style="stop-color:#cecbcb;stop-opacity:1" offset="1" id="stop3907"/>
-    </linearGradient>
-    <linearGradient id="linearGradient6131">
-      <stop id="stop6133" offset="0" style="stop-color:#fcfcfc;stop-opacity:1"/>
-      <stop style="stop-color:#f8f8f8;stop-opacity:1" offset="0.52275378" id="stop6135"/>
-      <stop id="stop6141" offset="0.77457333" style="stop-color:#f0efef;stop-opacity:1;"/>
-      <stop id="stop6139" offset="0.90122044" style="stop-color:#e3e1e1;stop-opacity:1;"/>
-      <stop id="stop6137" offset="1" style="stop-color:#cecbcb;stop-opacity:1"/>
-    </linearGradient>
-    <linearGradient inkscape:collect="always" id="linearGradient5982">
-      <stop style="stop-color:#ffffff;stop-opacity:1;" offset="0" id="stop5984"/>
-      <stop style="stop-color:#ffffff;stop-opacity:0;" offset="1" id="stop5986"/>
-    </linearGradient>
-    <linearGradient id="linearGradient4518">
-      <stop style="stop-color:#eeecec;stop-opacity:1" offset="0" id="stop4520"/>
-      <stop id="stop5969" offset="0.40000001" style="stop-color:#f4f4f4;stop-opacity:1"/>
-      <stop style="stop-color:#f6f5f5;stop-opacity:1" offset="1" id="stop4522"/>
-    </linearGradient>
-    <linearGradient inkscape:collect="always" xlink:href="#linearGradient4518" id="linearGradient4524" x1="72" y1="0" x2="72" y2="116.40091" gradientUnits="userSpaceOnUse"/>
-    <radialGradient inkscape:collect="always" xlink:href="#linearGradient5982" id="radialGradient5988" cx="64" cy="64.004021" fx="63.793392" fy="47.274845" r="47.5" gradientTransform="matrix(1.6842105,-0.08429519,0.06886339,1.3758846,-48.197002,-18.663233)" gradientUnits="userSpaceOnUse"/>
-    <clipPath clipPathUnits="userSpaceOnUse" id="clipPath6093">
-      <path inkscape:connector-curvature="0" sodipodi:nodetypes="cccssccc" id="path6095" d="M 17.000001,8 17,120 l 57.5,0 c 1.675283,0 3.914297,-0.56468 7,-3.6 8.870045,-8.72523 20.24047,-19.851805 27.49904,-27.175957 C 111.4396,86.761431 112,84.752873 112,82.5 L 112,8 z" style="fill:#ffffff;fill-opacity:1"/>
-    </clipPath>
-    <filter inkscape:collect="always" id="filter6118" x="-0.1126375" width="1.225275" y="-0.12064722" height="1.2412944">
-      <feGaussianBlur inkscape:collect="always" stdDeviation="2.3860572" id="feGaussianBlur6120"/>
-    </filter>
-    <filter inkscape:collect="always" id="filter6171" x="-0.47870938" width="1.9574188" y="-0.51275067" height="2.0255013">
-      <feGaussianBlur inkscape:collect="always" stdDeviation="10.140743" id="feGaussianBlur6173"/>
-    </filter>
-    <clipPath clipPathUnits="userSpaceOnUse" id="clipPath3889">
-      <path sodipodi:nodetypes="cscscssc" inkscape:connector-curvature="0" id="path3891" d="m 112,82.502986 c 0,4.465301 -2.79749,6.409952 -5.27972,8.093625 -5.10854,3.46508 -14.939114,3.32536 -20.720284,3.40638 -0.081,5.781159 0.16586,15.504599 -3.29922,20.613139 -1.68367,2.48224 -5.29051,5.38687 -8.20078,5.38687 2.31803,0 4.74284,-1.33476 7.58402,-4.08481 9.14197,-8.84873 17.36714,-16.13535 25.673154,-25.297529 C 109.67612,88.503916 112,86.97878 112,82.502986 z" style="fill:url(#linearGradient3893);fill-opacity:1;stroke:none"/>
-    </clipPath>
-    <linearGradient inkscape:collect="always" xlink:href="#linearGradient6131" id="linearGradient3893" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.0119858,0,0,1.0119858,-0.89554075,-0.9871566)" x1="86.73793" y1="93.621468" x2="95.460213" y2="102.34375"/>
-    <linearGradient inkscape:collect="always" xlink:href="#linearGradient3897" id="linearGradient3895" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.0119858,0,0,1.0119858,-0.89554075,-0.9871566)" x1="86.73793" y1="93.621468" x2="95.18235" y2="102.06589"/>
-    <filter inkscape:collect="always" id="filter3909">
-      <feGaussianBlur inkscape:collect="always" stdDeviation="0.43040059" id="feGaussianBlur3911"/>
-    </filter>
-    <radialGradient inkscape:collect="always" xlink:href="#linearGradient3913" id="radialGradient3919" cx="90.75" cy="110.25299" fx="90.75" fy="110.25299" r="18.750002" gradientTransform="matrix(1.3067347,0,0,1.3067347,-27.83617,-33.818441)" gradientUnits="userSpaceOnUse"/>
-    <filter inkscape:collect="always" id="filter3826">
-      <feGaussianBlur inkscape:collect="always" stdDeviation="1.036" id="feGaussianBlur3828"/>
-    </filter>
-    <filter inkscape:collect="always" id="filter3834">
-      <feGaussianBlur inkscape:collect="always" stdDeviation="1.50075" id="feGaussianBlur3836"/>
-    </filter>
-  </defs>
-  <sodipodi:namedview id="base" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="2.8284271" inkscape:cx="36.031425" inkscape:cy="70.491779" inkscape:document-units="px" inkscape:current-layer="layer1" width="128px" height="128px" showgrid="false" inkscape:grid-points="true" showguides="true" inkscape:guide-bbox="true" inkscape:window-width="1487" inkscape:window-height="789" inkscape:window-x="317" inkscape:window-y="144" inkscape:snap-global="false" inkscape:window-maximized="0">
-    <inkscape:grid id="GridFromPre046Settings" type="xygrid" originx="0px" originy="0px" spacingx="1px" spacingy="1px" color="#0000ff" empcolor="#0000ff" opacity="0.2" empopacity="0.4" empspacing="2" visible="true" enabled="true" snapvisiblegridlinesonly="true"/>
-    <sodipodi:guide orientation="1,0" position="-68,29.325902" id="guide4564"/>
-    <sodipodi:guide orientation="1,0" position="-51.972348,130.81475" id="guide3859"/>
-  </sodipodi:namedview>
-  <metadata id="metadata2611">
-    <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>
-  <g inkscape:label="Livello 1" inkscape:groupmode="layer" id="layer1">
-    <path style="opacity:0.26237623999999998;fill:#000000;fill-opacity:1;filter:url(#filter3834)" d="m 17,8.5 0,112 58.1875,0 c 2.115556,0 4.528919,-1.77169 7,-4.25 0.71234,-0.71442 1.440746,-1.39395 2.15625,-2.09375 0.415612,-0.40649 0.832187,-0.81443 1.25,-1.21875 7.773958,-7.40962 14.98341,-14.022603 22.21875,-22 0.42065,-0.420645 0.81207,-0.811101 1.15625,-1.1875 1.46444,-1.497657 2.76158,-2.837804 2.99375,-5.8625 L 112,83.15625 112,8.5 z" id="path5990" inkscape:connector-curvature="0" sodipodi:nodetypes="ccsssccccccc"/>
-    <path sodipodi:nodetypes="cccssccc" id="path3722" d="M 17.000001,8 17,120.2 l 57.746418,0 c 4.168166,0 7.728581,-4.85625 20.853582,-17.1 7.48636,-6.9837 10.43958,-10.889428 13.15009,-13.599933 C 110.49334,87.756815 112,86.462557 112,82.3 L 112,8 z" style="fill:#000000;fill-opacity:0.70053478000000002;filter:url(#filter3826)" inkscape:connector-curvature="0"/>
-    <path style="fill:#ffffff;fill-opacity:1" d="M 17.000001,8 17,120 l 57.5,0 c 1.675283,0 3.914297,-0.56468 7,-3.6 8.870045,-8.72523 20.24047,-19.851805 27.49904,-27.175957 C 111.4396,86.761431 112,84.752873 112,82.5 L 112,8 z" id="path34" sodipodi:nodetypes="cccssccc" inkscape:connector-curvature="0"/>
-    <path style="fill:url(#linearGradient4524);fill-opacity:1" d="M 18.5,9 C 18.160156,9 18,9.2346178 18,9.5 l 0,107.96875 c 0,0.82158 0.679323,1.5 1.5,1.5 l 53.6875,0 c 0.05307,0 0.810384,0.0234 1.5,0.0313 1.777664,-0.0401 3.131974,-0.75374 4.356035,-1.59328 1.051866,-0.29103 20.649835,-19.619593 29.770955,-28.809238 1.36239,-1.372621 2.18546,-3.948169 2.18546,-4.895612 L 111,9.5 C 111,9.1772826 110.83678,9 110.5,9 z" id="path3967" inkscape:connector-curvature="0" sodipodi:nodetypes="ccsssccscccc"/>
-    <path clip-path="url(#clipPath6093)" style="opacity:0.27722772;fill:#000000;fill-opacity:1;stroke:none;filter:url(#filter6171)" d="m 114.4,82.502986 c 0,4.465301 -4.99749,6.609952 -7.47972,8.293625 -5.10854,3.46508 -14.739114,3.52536 -20.520284,3.60638 -0.081,5.781159 -0.03414,15.304599 -3.49922,20.413139 -1.68367,2.48224 -5.79051,8.68687 -8.70078,8.68687 -2.091359,1.5337 3.488204,8.21101 6.734971,5.31989 9.501888,-8.46107 35.131683,-30.022704 43.350823,-39.262889 2.04044,-2.29392 -4.90514,-9.844666 -9.88579,-7.057015 z" id="path6153" inkscape:connector-curvature="0" sodipodi:nodetypes="cscscssc"/>
-    <path style="fill:#000000" d="" id="path2197"/>
-    <g style="display:none" id="Frame_copy" display="none" transform="translate(1042.0419,-279.83386)">
-      <g style="display:inline" display="inline" id="g3978">
-        <image style="opacity:0.75" width="571" height="571" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAjsAAAI7CAYAAAAK1lpbAAAACXBIWXMAAAsSAAALEgHS3X78AAAA BGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAFS4SURB VHja7J0JdxrbkmaDFBpsX9fr//8rq969tqwJul2tfA6CiDhxkgQS2HstlgbbEsISufXFcFYCAJfK 6oC/syq8r/ftU7E98O3ofdn7q38OABf6ZAkAy/457RWX1uvV953jOWTbeL36vuz1XkFCggCQHQCY 4WeyJTS90qJfrg74O6d8HslEZhu8r/fvVP+sIjoIEACyA8DPX/H9VWnJxGQ109urQHiO+XwSpS5b 5yYzvj1FkBAgAGQHgJ+3othUZaYlJXPfhkSqjo0nIJtAeo51i+SoIkEIEACyA3BzctMrNBURqbw9 TPg33p+tOiTu0DQnS3Q2weuttzeNf5993DlEqPV1AgCyA3AVcpNJTUU8vJfR+6K/0/q4QyJL0dc4 d5rjyc7GeblpiIz9u623Wx9305CvQ5Ig5AcA2QG4KLmpJDUtgfHenvO2anwee59ETlPOyspXnqxs GnKT3T6Kf5Z9zkrCVOkJqiZBAIDsABz1Z2aK3NgkJZOYu+Tt1uut900VIZs4neK5xEtJNhOFxhMY 7+VH4e9UP08rDdpKfwkM+QFAdgCOnt5kU089YhNJyV3xbfu+6O+3RKiaHLVKWYc+v1T6daqCsw2S mUhuPhzRqdwiQcqkyKZP1X4gUh8AZAfgpOlNqxyVpTWRuKw7327dhuR1fZ+qJbLqKPoxU51tR5qz dYSjKjTvhdez9300UqJWCpT1AGWpD+IDgOwAlAWnld54vS6tpCaSm7Xz+jr5O5H4rJPPWS1prYqp zrnLWNtCalIpXUXiUnlZeV9VhqoCVCl7IT4AyA5ASXCy9CZKbVpCY2Umu90HEuR9zEq6E8lOZWqr d/z8FOlOayIrK2f1JDvvjdd7bpkQefLzIX39P4gPALIDfM93C06lgfjOSVyqEnPfeOndeiUnanRu SU0mOecePW9JTyZBUf9Or/Bktzfn9bfgzyvyk5XAEB8AZAegtO8mGwG/S9IbLSCRxFRfz4SnVcYa giTHK1lFkrNqyI0nO6dMdiLZyXbdtJKflvi8S17eiiTHe/nmvB3JUFQia8kP4gOA7AApTld6YyUi K0PdN24PieB4AlRNdHpHyyubkaMEZ6lnY1UkaCP1aa6etOejkOr03loC9C7t8hfiA4DsAIJTkhuv T+a+ITcPSmweAtmpJDlrJ8nJenGm9txkYiNymaee9wpQJD829bGJik19oqTHS3deG29777Mfb3w7 Kn8dIj5IDyA7AAv+Xo7KVPaC75WmouQmEpwHIzgPzvuqotNKcVoJTvX8q0pa0yM355Cdivz0pkAt 8akkP9Xylic0r8n7XpO/+yZx+atXfEh7ANkBuOAUpzU1VRGb+0Bmopv9+1XB0ZKTCU6W2AzJ4zFF alYLe+6oiE+vBE0VoOoIeyY8meRktzfz+hTxqY60Iz2A7AAsIMVpSU40Cm7l5qGR2lRu9t97pSpv fDxrMu4tR/WITY/QLOV5YztBhCriI1JrePYEyBtrj0pdFfHRQvOi3vfivO+1Q3zenfsZbXS2jw3i A8gOwJlTHG+CyktwtHhkUvPYeDuTHJvmVJuMexqKRdr9Na2UpvVccCnPE9vOP6smQJEEVRqes3JX pcyVyc5L8HpLfN4OTHxIewDZAThTimP7cLIS1b0jN4/Oy8fgz3oE517a/TfecQ2t9OaQxOaQn/+l PWdsZ/w3WSmsp/zVU/JqTXNFJS1Pdl6K4vM6k/hUUjQAZAfgQMmJUpxWierBCE1265GcdSPFaaU3 1eV91YmoFc8Dky7EUxuhe+Un2+nTkp4X5+VLQXxeAvHJ+nxIewDZATix5Nixaq/RuFdwnoLXM8mJ SlRTBGf8eqRTcKo/w/yczyNDVQmqTnxl8uMlPl4/z2uH9FSTn0h89H2sjLEjPYDsADQkR1/cvYV/ UR+OJzgPgdw8mdejVMcrU1X24FQO0azusmn9vPKzfB4JaglQK/mppD5e2uOJT5b2/HKE51ciP95Y e1Tm8sQH6QFkB6AgOba0U+nD8XpwbGrTIzpZihM1GU8VHJHaoj5+ZpcvQZXpr6r8ZD0+WV9PlvT8 Cl566U802VXZ32OFD+kBZAeQHCM5U1KcLL3J3o5KVtEkVUVwKlNTJDa3KUBV+cnEp9rb44mPlhx9 ezGvW+mJylxR2jPed6QHkB1AcgqSk6U4Xv9N65ZJjt6LE0lONb2pJDj8PCI/LfnJSl2Z+GRTXC+B 8PwKJGiOtAfpAWQHkBwjOfYU8ajRWMvLFyU0XwLJ8cpV3uK/VorTk94gN9ASoKzZ2ZOfSHyqTc1e WevZSM6zk/pk4tOa5EJ6ANkBJKczxXlyxOZLQXQejOS0SlXZBFV2CviKnzeYQX683pdNUXy8/h6v xGVLW8+B8DwH4mPLXN7hpEgPIDuA5DiSE6U4nuB8CURHJz9eP45XqhqSFKey+4afL5hbfloTXq1x 9krak5W1noOXlTKXN76O9ACyA0hOIjhWbqzwRCUruwDQS3G8c6i8AzURHLhE8fHKXJn0vCTC81wQ Hy/tQXoA2QEkJ5CcL4VbS3LuG5JTTXG8nxl+hmCJ4hOVukbRsCWuHunxxOdZ4sZmpAeQHUBylORk Cc7XJNWJylW6uTnaatzag4PgwLWIj3750Uh7qtKT3aZKz0ZYTgjIDixUcrTsDDNJzlclOV+DNOex IDlew7EnOQgOXKv4ZBNdFel5FX9yywrOz0B89L/NpCc6jkIkPnwUANmBo37feJKjD+acIjlfjeh4 iU4ryckajqOzqBAcuGbx8cbZvaWFVnyysXUv5fmpXv6UuMwVNTNnCwopbQGyA2dJc1bSPtLhvkNy WqKT9eRk/TiVUhU/E3BL4hOVuVpTXFnSY6Xnp5EfKz52iqvS04P0ALIDZ5WcrFxl9+N8KUjOV/H7 cnSSo5cAelNVpDgANfFplbi80XWvpycSnkx6tPiMHzeSHu/sLYQHkB2Y7XskO4XcSs6YuGSTVZHg fJW8L0dPV9mm42yqCsEB2BeDqMxlm5mt+OglhePN6+f5mdxazczRURTRKetIDyA7MFuaM4pEdDhn a3z8a3LzRsmznpyoH6d3szEAaU9+NpdNe0YBeQuSHtvP48nOD5P42C3Nr4n0UNoCZAeOIjleX07W eDxKi05wvnVKzqPs78mJzqmyy/9IcQAOT3si8dH7eqKeHjuqrsXmh3nppT26RPaWSA+lLUB2YNL3 Q1Sy8iRHl6sekxTnm3mpS1k9kpPtxyHFAZg/7elpZtZJz4uRHtvP8yMRH6+8NUqUPnsra2Im5QEu BlBKcwYnzRnlw5uuspLzLREdm+ZUJafSj8P3NcDx055oSaEnPbaJeRQaLTpR2vPLJD3RuHpW2kJ4 bpw1DwGi40hOVLLSY+Q6yXlKUhz9uk1zdCKE5AAs87lh6/ycbdVL/VzxYZ4v3iSeynyW/UN9f8j+ YMLPz3///PmxRum5k7yfR5z7j/QgO0CaU+rL8UbIvxq5+eakObZkpRcCIjkAlys9W+e540PiXVue +DzJfklb334o8fn1+fF+yZ/S1vApPCvZ7SmyKc8K4UF2gDRHTzd5zcf6yWeUl2+B6FjJsWnOFMmh 6Rjg8qXnviE9nvjohOen+ji/Pj+2Jz2kPIDskOaUSlZRX87XQHL+krg359FJc6ZIDoIDsDzpWTkJ iic9rc3qFenR5S29jmL8+GM/zyD7U1ukPMgO3HiaoxuQvb6crFz1l/i9OVHJKjvWAckBuLxfnrbq ZzaTnmii00t7npzU5zH4xelZfUzbz0PKA8gOaU46Sv6USM5f4petWiUrb+sxkgNwXWmPJz36uedD 4l1dWXnr0Xlu8X6R+iX7e7hIeZAdIM3ZSXOs5HxVcvOXIztZA3JlISCSA3D90jM+92ySpKclPp7s 2OeaZyU8pDyA7Nyg6GQ7c7ySlU1y/nISHS/NiUpWSA7AbUqPyO7IerTHKyptedLzmCQ8+rnnhZQH kJ3rlhyR+GRym+bofTmR5FjRiRqQo74cu/XYu78AcF3PR970ViQ+d5I3MlekZ/z7a/M8RMqD7MAN pTnezhyb5vwV3FppTrVkJaQ5ADed8owMzi9ktpcwkp7W7Z6UB5Cd63wyEYlPJ9dPGl4D8rdO0bGn kmdnWFGyAoBqE7Pe91WZ3noQv5ylb17KM+7keSukPAgPsgMLTHNWHWlOJDnfJS5beWnO+HnoywGA 3qTHK2utJkjPg8Q9PDbl+f3xxkWEWnhWRnooayE7sEDRiUbKK2nO90B0dNnKnmW1VpJzJ/TlAED9 +Svq59mYlz17elrSo2XHlrbGc7a03FDWQnbgzJIjEk82eEc96N6cUWa+O6KjtyF/baQ5UQOykOYA wISURz6fR1qTW5H0VHp7WstN3z/vB2UtZAcWlObouNc7uNNLc7TcfJf9/pxRdFq9OZSsAGBu6bH7 eXqlp9q8bFdj3AUpj1fWQniQHTih6EQj5VFvjic6UdnK7s2p7MxBcgBgzqTHPt9FSbb9RS8Sn3vx +3iiX+DeTbKzMfcZ6UF24Iiio3/YvTTnUfzenO+O5GjR0U3IXuTr9eaI0JcDAPM+32WlrY20z91a N1KeqIcn2gv2YdIdUh5kB44kOWJ+CPUPtm7Ki/bmZKJjm5C9NCcaJyfNAYBTpTxb9frg3Lz9PLaf 574hPVGJ/sNJeBAeZAdmTnNaZSvdhGzHySPRyZqQ18lvOqQ5ALCElKe1hXmdyM59Q3Zsyf7NSA/C g+zAkUQn2p1TTXNsf042Uk6aAwCXnPJEm5ij3TvrJOEZnwffkpRH1PsA2YFO0fEO8BxFZ5yW0qeT R5LzXfaXBEZNyPTmAMASnxsPTXnWSnDuzetWdKKS1pv6/PTxIDtwgOSI7G8RjcpWUZrzX1IvW40f m0krALiE58melCeTHk92KiUt28fDPh5kByakOVF/jt2d401a/Zd6qRcFRrtzspFy0hwAWOpzZk/K Y6XHkx9PdrKmZdvHwz4eZAcmiI7Xn6PLVnpvjhYdm+i0dudk0wekOQCw9OfOLOXJkh6b4FRlJytr CcKD7EBbdKL9Od7unL8cyfFExzvAMxopH0hzAOACn0ejlMf7RVJLj5Wfu0SGhob00LiM7ECH6OhG ZHu2lS1bWckZS1c60dFlK12jHsSfthJEBwAu9Pk02r4cpTxeecvr27kLpMf7HCI0LiM70BSdVn+O l+boRMcbK882IdsfUiQHAC75udVLeaaKj5Ugb0rL+4WRxmVkhx9G9VJPXGX7c7KyVSQ63pJAmpAB 4FaeY3ulJ5OcdUN2sudUGpeRnZsXHf1DFu3PicpW/5L9HTrRWLkVHdIcALiF51vvJHX95z2TW73l LHuQKMKD7NzMD57eoWMbkW1/zig63ztFR29D9o58QHQA4NZ+wdzK/g6zbOVHr/S09pMhPMjOzfyw RaPl3qJArz/nX7JfusoakXV/zuD8gCM6AHBLz8NeWct7bh5fv2tIzyBxKcu72UkthAfZuSnR8RqR o7LV+Lo3ceX150TTVkgOANy68FSmtjLpGSQfSY9Sno16ifAgO1ctOrp0Fe3PsZKjS1f66Af6cwAA pgnPIH19PIPEu3pa6c748W0fD8KD7FyN6EQ7dPTElT7bSgvO+LoVnVYjMksCAQDi5+dqH8/KPKfe FWSn1b+D8CA7Vy063g4dfVr5fxnJ8UpXWnS808rpzwEAqD1XV/p4rOzYdoTKZmXvufgD4UF2rl10 ngLR+ZcjO94Onex8K8pWAADThCfr41k5MjMUbl5i5IHwIDsXJzrZssBotPxf4ic63mi5FR36cwAA 5hGewZGN6gbmylRWBsKD7FyU6GTLAkfRyUpXNtGxomMnrujPAQA4/Dk86uNpTW6tGtLT85yM8CA7 FyU69tRyKzrfJe7RqYoO/TkAAPM+n0d9PCLtdGcl01MdhAfZuVjRyXbofDeCY5uRI9G5Q3QAAM4i PKvCrbVFGeFBdq5GdPRWZO8wT68ZOduKPH686MRyJAcA4HjCEz3PVmQnep6uPGcjPMjOokXHjpaP ovNfgeh8D0Qn26GD6AAAnE54dONyq5ende3oAeFBdhYvOt8C0fEmrrytyGOiw2g5AMD5hEeM9Ni/ 02piPvR5GuFBds4mOjqy9JqR9WGe3rSVHS0fd+jYZYGIDgDA+Z/3vUkt73n4WM/LCA+ycxbR0Rs0 bTOyJzr/R/zRcm8rsndqOaIDAHDea4BtXL6T/T6cVfFjITzIzkWIjt2jYw/0tKKjZSc7/iEbLUd0 AACWJTzDEaQG4UF2zvpNHh0B4Y2XW9H5P+p9VnQeP2+6EZllgQAAlyc8p3iORniQnaNJji1feUdA ZKJjx8tZFggAcJ3CcwoQHmTn7KLTmrr6Jn926LAsEAAA4bFsC+9HeJCdWb6R9eu6ITk66yqavPqX ER0v0WFZIADA7QpPj6y8IzzIzpyiE/Xo9IiObkaORIfRcgAAhKciRFslPPrzIjzIziyi442Ya9H5 LvvnXH2X3WbkJ0QHAADh6ZCa6H22nIXwIDsHiY4eMc+OgfAO9Gzt0UF0AAAQnor4tHp4EB5kp1t0 7HZkLTpe6cprSK5OXSE6AAAIj5UX72V0E0d4ANlpio4tXdkTzP+S+ATzsaT1DdEBAEB4OoWnR3Ky 0hbSg+w0RScrXY2iEzUj26krfagnW5EBABAeSaTEk5yNeenJjv27+n4gOxCKTmVpYKt0NfboeJuR ER0AAIQnEp9MdiL50TCSjuzsSU7P0kCvT2d8e0x0vgrNyAAAXGP6hSeSHXvLkh5G0pGdnW9C/bpX vvJEp7UwMBOdAdEBAEB4GnITCU4kPdG0FhNaNy47laWBdsQ8SnRsQ7LepaNLV4gOAADC4wmPyH7f Tq/4RL08Nz+htb7hbzqRuHxlR8wj0dGyY0VnTHTWQukKAADqJa1DEh4v6bn5Ca1bT3aiEXNbvvou +0dBeImOXRqoS1cDogMAgPBILeGJmpN/3z7MrSI7Nz2htb7RbzSb6OjFgY+SNyTrm7dLR/fo3BnJ AQAAiIRnK396RkX6k52spDVykxNa6xv8BtOvR306nuhkzcgsDQQAgEOF5069vv28rlSTnUrKc7MT Wusb+8bSkqPLV17pyvbp6DTHLg1EdAAAYA7hGZSMiPjlLC01WoBafTwjN9ewvL6hbygRvyH5XnbL V7ohOZKd6LwrtiMDAMAhwjPKzp0jO9tAcqKbLWlpwdmo+3D10nNryU525pU9xdxOX40LA1sHe7Id GQAA5hCeSHZ0utMSnaikpUtYV1/OWt/IN5GVHXuSeWtDsi5d2akrvUuHRAcAAOYQHv3L+dRkx5Oe m2xYXt/AN0+P6Hh9OrZH52siOiwNBACAOYSnsn/HS3feP29eD8/NHimxvvJvGis6Y+lqrUSn1afD dmQAADjXdUw3LN9LO915l76UR+QGGpZvIdnxjoN4ULIT9elURYfSFQAAzHnd8ia0vIZlPYXVkp1N Ijv65VWmO+sr/maxstNzknlFdLzyFaIDAADHEh5PdrYS9+68y25Zy5vQ0h9rda3Cs77SbxJPdHSq M4qOPffqu7SPgdDnXbEdGQAATiE8eiS9le58OJLTGku/6v6d9RV+c2jRWcn+4kA9Zv6XEhstOmMz MksDAQBgKcLjTWhF6c671NMdvXPnKvt3rjXZ6d2nYxMdvR3ZnmLO5BUAAJxDeLIDQ22zciQ7nvRE h4deTbqzvrJvCCs7ekuyPvdqTHX+SkTnayI6JDoAAHBq4RF1fdt+XpfsdFbWt+OVtjzZubr+nfUV fSN4orMuiM73hujQkAwAAEu61onEDcu6f+e9cIukR/fvXDzXluxk01e6IdlOX32X+CiIrCEZ0QEA gFNd46oNy17/ztvnLROdqy1nra/kG0AS0Rn7dLJUp3LmlVe+AgAAOJfwRA3L0WTWeyA+WePyVZSz 1lfwH++JTtSn860gOjQkAwDAJQhP1LCskxorOG9Gdt4c4dFTXldRzrqWZMfKzr3spzqe6ERnXo3/ noZkAABYqvCI+A3LD7Lbt/PhiM6rtEtbV1POWl/4f7ZIvjzwUXYP+bSy803aR0HQkAwAAEu+Dors Nyx7o+jvSnReZT/l8UTnKspZ6wv/D64cB2HLV/rlX0p0dKpj+3QE0QEAgIVdB7OGZU92snTH9vDY puWLLmdderJTaUr+JvtNybp09SURHdunAwAAsFThsddDLTxesvNq3rayczXlrPWF/ueKxE3JdvrK pjr2KAgWBwIAwDUIT7Rw8FH8dOfVER+b8FxFOWt9gf+pnuiMiU6W6mjhGUXnixKdUXaYvAIAgEsV HjHCE6U7Vdm5inLWpSY7veUrKzrRPh1EBwAALll6tOxo4fF6d14D4bm6ctb6Av8TK+Wrb7Lfq9Pq 0xmEPh0AALhc0fEalkfhefiUlifxe3dsD89VlbPWF/Sf6IlOpXxlRUfv09Fj5ndCqgMAAJcvPPp6 qaezRuFp9e5ECc/FlrMuLdmplq+ipuTsgE+b5iA6AABwqdIjsjuOXpnOeglk510uvJy1vqD/tOxI iKh81TN9RfkKAACuQXRa4+iPSmJeG7ds4eDFlLPWF/CflonOvfxZCOgd9On16TBmDgAAtyA8+vqp y1n3SnhsOcumO9GG5UEuqJx1KcmOlp1BdstX+kiIv8RPdb46okP5CgAArl16RNrlrKx3J+rf2Zqb lSxkp/M/SSQ+EsI70bw31aF8BQAA1yg6PeUsr3fnRfb37+h0x+vfWSSXUMbSiY495PNJiY5Nduz0 FeUrAAC4ReHR19NWOcuTHS/hsbKjp7QWJz3rBf8HSSA6rVRHNyRTvgIAAKTn/+OVs+yyQS03L+rm lbN0wrOSBTcrrxf8nxKNmlvRiWSHQz4BAADRyctZetmg7d3RouMdKWHLWYttVl5yshPt1NGj5l+l PWZulwdSvgIAgFsUHn19zZYNesmOt4PHG0dfZLPyeoH/IeLYp92pE/XqaNHRZ19RvgIAAKTn/zOo l7qc9f557XwLZGe8ZenOIpuVl1rGsr063pEQXwPRaR3ySfkKAABuUXRsOWtMd/Q6l3dHdn593rKE ZxSeQRbYrLxe2H+Elp3xP6I1gfXNER1v+upOKF8BAADCY4OFMVT4+Lx2ZqWsSjlrcc3KSyxjReWr SqpjRede/AM+ER0AALhl6RH5swX5Tv6Moutm5dfPa6tOd3TKE6U7i2tWXi/sge/dq/NN4j6de9k9 zZzyFQAAIDq7MqKFxw4C6XTHik62cHBxzcrrhTzwWnRsrPagHvivgez0bklGeAAA4NaFR8w1d5zO 0s3KWnY86XkNZGcjC0p3lpTseKPma9mdwPriyI4VHW+nDuUrAACAOGwYnKDh0QjP79uzIzteOWtM jBaR7qwX8kBbu4zKV1+V4GjR0Tt1okQHyQEAANiVDzsUZI+S0JNZvwXnL9kvZ+mEx9u9I0IZKz3V 3DYm20THGzPXvTpMXwEAALSFZ0xivOksfQ3+pV5WmpV1Kets6c76zA+yfl2Lzlr8Cayv0i5fadEZ EB0AAIDS9bjVrPziiI5OeGzvzti/8yGUsZrTV18cyfkq/U3JAAAAsH8d9pqVN+p6/C5/2kl0k/Kz /Onh8fp3xrLY2U9FX5/xwdWys5LdpmRvW3KW6tjyFU3JAAAA067L3pmU9pr8LH3lLJEbL2NFqY4+ 2bzSq+P16SA5AAAA7etxtFlZBxBvn9feLN0ZhUeXs8by2NnSnfWZHlRtj3YC616JTlTC8spX+vwr Uh0AAIDDrs9eujPKjk53vHLWmO68ywLSnfUCH1CvV+erkR1vpw6j5gAAANOvy3oUPWpW1sLzywiP V876/W/Pnu4MZ5ac1qj5V0d09E4db3kgo+YAAACHXaOjEw30NfqLCSS8Y5u8Bb8nvzYvoYzVSnWi 8pX3QDJqDgAAMM91Wqc7nvD8vi6Pe3ee1du/X19UujOc4cHzUp11YIzeBFYmOkgOAADA4ddqe71u Xat1KNGqwJz8Wn3uMlZrtM178OwEFuUrAACA+a/Xq+L12rtm6+u1HSI6ufQMJ3zQrCW2tiXbBYLR pmQWCAIAAMx/zbbX7ahZOQonFpPunLOMFdUAI0PMLJFRcwAAgPmv26sJ123ddrKIdGc40YNlHzjd 3a3P3vhizFC/zqg5AADA6QOKbNHgkyM8X2Rhk1mnLGN5UVir2Sl7sDgWAgAA4HTCY9MdL6zIem3P lu4MJ3qgRPJGp8wMHyXu1SHVAQAAOE1g0ZPuROtivLDiaspYnhXac7B0slNtcGICCwAA4PihRSXd iUILfR33Jqnl2NfxU5axsm5uT3SiOf3oQQIAAIDTBRfeZFZ0LbelrJNOUw9HfmCyB+hBdmt92YMT pTpHt0EAAABEZ+d6Hk1m2UO8KycfnOR6foqencgE7yUuYekHxk5grYReHQAAgHNIT7X/1mtJ0enO SftvhyM+IJEFeudgVVIdr3tbBOEBAAA4hei0rutZOat6ruVFyY59YKLTzaNU56wGCAAAAOn1Pevd eZRprSlHGzgajvQgiCM6U+xv3bA/hAcAAOD0oqOFxxs6ejpQeBYvO9b6VrK7RLDVqxONqJHqAAAA nFd0vDDDDh95wvMkfaWsWa/zxy5jZSWsHuu7EyawAAAAliI92fCRrd48OcITXeOPEmgMR3gAJHgQ 7BLBLwXr0w/CgOQAAACcXXQkuda3+nIfpT6GvljZ8YzPHvpp460nqcVbVqYAAADgfNKTlbK8UfTs Wu8Jz2zX+mHmL1wkPvQz69XRJSzdq8MEFgAAwPJEx5Oe6IQET3psFeeovbnHLGPZXp2sU9suEdQn o3IGFgAAwHKlx17zdbqjAw6d7LQalWe95h+zjNWyvOgLt1/00ZcNAQAAwGTRaS0ZjK77evJ67Vzz F1fGqpSwIsPz6ncnm70HAACAg67/1UblTHiO2qg8nOAL9vp1rOhER0Mwbg4AALBc0akKz5MjPCcr ZQ0zfrEitVSn8sXqcXNSHQAAgOWLj77+eyeiR2HH0as6c5axqiUs74s9+TZFAAAAOLkD9Kycmc0B jlXG0k1KUc0u6sa+kyM1KAEAAMDsomM9YM7AY5Z0Z5jpi4xEx0ZYj+qLO+sJqAAAADC79LQms/QJ CtoN9DT2nSywjOXN2euNyZHR6b06dokg4+YAAACXJzqVdOcxcYFMeCZ7wdw9O95ZWC3ZOWp0BQAA ACcVH69RuRJ+ZH07Z+vZ6dmt8yhxqpOdi3HwFwgAAAAnE53evTuPkld6FtOz41lcFlt5jcm2XwfJ AQAAuCzRsX6RpTteCKKdwJ6icJAbDDN8UT0Gl9XnaEwGAAC4fOnJFgzboaXHwAvWMuNywWHGL6jS jOR1XmcbkwEAAOByRCfyg+xQ8KOXsuYqY+mR80pUxcZkAACA6xafaPdelO5E25QPTniGiV+AZ252 CitrQoq+GO/zAAAAwGWJjohf+cmEp9XiMtkNhpm+kGx5kFfGynp1kBwAAIDLF52op/de9lfTVE5V OGvPTrRI0BOeB/V3sogKAAAALl98BmmvpsmalGcpZQ0T7nhmbOuGrXmd1uzWAQAAuD7R8Vwh6u09 ainr0J4dz9aiMhaHfgIAANyG6Ni39VSWDkYi4Zm1lHVIz060EjqbodclrOhoCIQHAADgesTHK2WN Acmj8YajlLKGzjsssh9NebGUd8crh3wBAADA9YhO6/iIk5SyDunZ0abmbUd8MK9njcnddxwAAAAW LTrWN4ZO4ZmtlDW1Z8dbFBTd8cjQKGEBAADchvhEO3dOUso6pGcnO+TL3u6FEhYAAMCtik40lVUp ZUXJzuw9O63zLnpSHUpYAAAAtyE61jkyd4j84eCzsg5pUPZSHS/Z8Xp1vI3JCA8AAMD1ik9WyvL6 faNe3+6EZzjCnfVkJ0p1EBwAAIDbEJ3WgsFq385RenayElZ01oWX6sx6qBcAAABchOjYt7NJ7soI endgMqVnxzYmZ6lOdCcRHgAAgNsTn0HOMODU27OTNSffS1+qg+AAAADcjuh4wUnmEeNtLf6ZmiLF 0GRKz85c/TrNOwcAAABXITpWerIKUXTMVNT7e3CDcmvkPIufsmVAiA4AAMBtik8mPFWfmL2M5QlP a+T8XvLjIVaB8QEAAMD1io5IfOTU2jiE9Yk7ySe7V4fIjgQW1mpOzs60QHAAAABuU3SiY6cqfTuT jo3olR17auna2Bcj5wAAAFBxCu9wUOsVlUrRQT07XqdztF+nIjqMnAMAACA6Vnis6HheoZ3C6wOe LDsi8SLBqIRlbYwSFgAAAHii02pU9pKdSUdPTe3Z6dmvMwiTWAAAALDvFlGjclTKOkqDspfsjMJz 7wiPNw9/h+gAAABA4hdRslNZZ9OsGg3JnfDMS9+ZtXNHKqecC9IDAABw06Ij0j5cPCpleS0yMkV2 RPajoVXxzlQakwEAAADRqSwYtH7RSndWPbIjgXnZzcneHdIlrFLzEAAAANyk/GR9O61kp9S3U+3Z ycpYWnSq1gUAAACITrVvJ9q3M7lB2duvUxkNW0u9nob0AAAA3LboWMdotcrYQKXctzN03onojkSi Q78OAAAAZI7RKzzdnlFpUB7Eb072hKd1FhbCAwAAANY3osXFFeHxPGNVlR0rPN4BoF6qwyJBAAAA qIpO66QGL1jxXKN7Gsv+Iy9aij5564gIpAcAAABWgfBEw1BZb3BayhqCT2ylJ/rka4knsJjCAgAA gKrw2BF0byDKBiulJuXWNJbXnOylO5O6owEAAOCmJUf7xipxDS9k8U4/d92jVcaqNCdHx66X598B AADgpsWnNf09JWBZtWRHpDZ27pWxuo9eBwAAAKRH6q0zXQHL0DAsrzv6rlN0AAAAACLBEam1zmS9 wmmT8uB8QnsnKvWzO4nPqkB4AAAAoCU6vX075cWCwwGGlU1iMW4OAAAAvfJTFZ4oZBFPerIy1tD4 hNkIGNNYAAAAMFV0omXGWd9O2KRcmcY6JNmhORkAAABaohP5R+YdWni8np10Gis67bz1iWhOBgAA gEOkpydoyXqF3TLWKhGd6idkczIAAAD0Co5IvUm5UsraozV63hKdO+lc2QwAAACQyE92CHlLdFwP iUbPo1TH+4T06gAAAMDcomP7du7M660m5f+8HJJPNN4yybmrfiL+DwEAAGCi9NwZ//A8pNmzUzWr ilFRygIAAIBewclE584RntaREf/5uNlSwYrolJuDAAAAABqiI+IHLi3pSRcLDhOsqmJTJDsAAABw iPhk6U7XMVU2ifF6dqJ0p7I1GeEBAACAXuGJJrJawUs6jeWtVx46P8lK2K8DAAAA84hORXoG8Zca h2WsyKiGxieJGpOZxAIAAIBDpGfocJFSg3KlhFWNjRAcAAAA6BUc6XSRTHhKyc7QYVSUsAAAAGBu +amkO60G5dVQsKpB8kQnO1odAAAAoCI2nocMEqc7mYs0j4vITGoomBTSAwAAAHOIjyc61XTnPz4y BB+4FR0N0o6OEB4AAACYKjyVgalSpSk7Gyv7oNmYF5IDAAAAcwnPkNyi/mER06Ac1ckym/IsCgAA AGAuyRGphzDpdPjQYVGVZiB27AAAAMCc0qMble8kD2BcJxmcDyiBRXkv09gIAAAAoFNwrEtkjcot 0flfevfseKKTHr4FAAAAMFF8vHRnaNz2psOrG5QrJgUAAABwiNxEwhOJTqWMFY6eV/p1mMQCAACA Y0lPFMCsekRHpD2NFS0VbB66BQAAAHCg8FSkJwtg/vfW2rMTCU/LohAeAAAAOFR4WsuOo/ftMDQ+ cKsBiDIWAAAAnFJ8ur3Ejp5LxwejORkAAABOLTmep6TT4a1kp8egvDsIAAAAMFVy5AAv2VsqKBI3 KK8kTnTYmgwAAADHlB6RWnuN17MTHhdRER5EBwAAAI4pOOI4yaSqUzQ6vko+OE3JAAAAcArpscFK JDilBmWRfHw8qp1lJgYAAAAwt/i0RtD3fCY7G0ukXrZCdAAAAGAOqamITiQ87rT4ULSoSIQQHQAA ADiW9KwawuP1Fu/9+6FgViwPBAAAgKUJTzZEteMy0annkrweSREAAADAscQnu4kkR1gNgbSsijeE BwAAAJYgPtHfLW1QRngAAADgnGIjjm9kLTc7f97aoNyzW4deHgAAADim+IjU2mx2GAJLysa7aFYG AACAc4hO9L5095899TxbybwqCg/yAwAAAKeSnuafZUsFq6uYAQAAABZLlOxE2wm9U0URHwAAAFgC q0h2bAnKS3KaJ4oCAAAALEFuPNnR/8BrUK6UsyZ9cgAAAIBjY5cKtkbOI9Fh3w4AAAAsWnYi4alM YCE6AAAAsGjZiTYQitQ3KAMAAAAsVnZEahuRSXAAAADgYmUnk5jKGVgIEAAAACxedgAAAACuWna2 wd/Zqj/L/g4AAADAYmVn25AcKQgPAAAAwCJlZ+sIztZ5O7oBAAAALFp2tOh4grP5vEWiQ+IDAAAA i5cdT3Q2gfggPAAAAHBxsiPil6825pYJj5iPBQAAALAI2bE9O57UWOGhZwcAAAAuRnZE4nLVJrl5 pS8AAACAU1FyjyH4h16akzUpAwAAACxSfqJkJ5rGak1mlS0LAAAA4BQMEi8O3BYlB7kBAACAU7Cd 8mfVPTve694nQXwAAADgFJKTVZW2kex4olPdoIzkAAAAwCmEZxu8HjIkRlQ9JgLRAQAAgGMJTuQc 28Rbdv58CP5i9EGk8T4AAACAUwhQpX94a2VHHFvaSn5QKAAAAMC5BCc7vPw//3YofGCRONkBAAAA OJbgSCIz0akPaRkrkhh6dgAAAGBJorNJhGfv32dlrJbYdHdDAwAAABQkJ3OS6EircE1OdOp59kkQ GwAAADi1BHmnO2SnPPzn3w6SNyFvG8KD+AAAAMCxBUckPqA8O7/TLWN5cuNFRFETEOIDAAAAh0pO JD3bRHo2gaM0j4vYSHwoKMIDAAAApxCfluRY4dn595XjIlo1sazXBwAAAGCK5GSTWJVU5z//fkg+ aOuDZYeCAgAAAMwlPdvAQ7K+nf/QSnZaMRHNygAAAHAO6Sl7ydD4YPaDfkihEQjpAQAAgBkFpzJy 7vXsyCg72ZZCT3Qi4UF0AAAAYC7RiaSn0ke8cxsC0dlInuhQxgIAAIBjik5LcqrVJneDcpbsZNID AAAAcKjkiOMmUcmqJDxD4wNvpD/lAQAAAJhDfipnYkU9O3sNytHxEDbVsX072XJBAAAAgF7BsS4R OUlpe7KWnegDeklOJdlBfAAAAOBQ8bGpzkdDesKlgtE0ltev8+F8AhqUAQAAYG7J8YTHc5Ksl7j7 uIjsg5PqAAAAwDGkJ+vPsV7ittVEo+fZjh3vAzOVBQAAAHOLjnaSD+e2qfhI5dTzj8InYd8OAAAA zCU6Ivnuvy4faR0XkX3g7BMAAAAATBEcKzrbouiUDwKVmT44wgMAAABTxafVO9wKX3Y+nrdBWZwP vpH+ZAfxAQAAgB7JsW8fXML6zeB8gpZNvYu/YJBSFgAAABwqPJXm5HfpCF56e3beC0aVWRoAAABA VXoqqY7XWrPjINlSwWzU6132Ex4WDAIAAMDcohM5yHvVQbxkRySvk0XREbt2AAAAYIrciLQXG7+L X2FqCk926rmX7rzLtHIWAAAAQEV8Wo3JUXUpmsZqHheRNShXylhMZAEAAEBFciLpiUTHBi+hfwwd ZpV9ouysLAAAAICK8GSBSyQ6Uaqzc+r53jtl/zh1L9XxeneYyAIAAIA5pCdrUP5IHCRsUPbKTa3x cyayAAAAYG7J8RYbvwc3LTphZam3Qbmyb2eD5AAAAEBRcOzLVnNyNI1VHj23wrMxwpOZVcmuAAAA AALh8cKWinukYcvUZKdn/JyJLAAAAKiKT1ZVymQnnAQfGp8wm8byambp6BcAAABAIjlV92gtNm6e jRV90pbsRJ8U0QEAAIBe4cm8w2tQDgOWaPRcAsOyn+QtkB4kBwAAAFpyYyWnKjpdJzi0GpTHm62b vSWikyU7CBAAAABEwpOVsDzv0M7RNXquqfbseJ/YPWYdAAAAIBCfbVF0spBlzzuqyY43/vUmuwlP Nu+O8AAAAEDLOWzI4nlHS3TEekc0ei4dn/i98MkRHQAAANgTEZnWmOyVsUSKZaysSVl/8jfZT3Yy 4QEAAACQxDvsQJTnHD1nc4ayI45pRX07b8kdyM7JQn4AAAAgWnfj9etkwUrz5IahcEeyWKlHeBAd AAAA8Dwj2uv35gjPeGstFCzJTlTKspLzKnGzMn07AAAA0BKeiui0PENkwjSWFGwrSnY84wIAAADI lgnaYaiW6DQXCkay0zoywitjvUot2aGcBQAAAFmo0mqVyZKdsux4d6gykUXfDgAAAPQIT8UxonaZ sl8MnXfEs65XqdfTEB0AAADQnpFVj1p9wSXh6W1Q1uYVWRd9OwAAAFBxiyhQmVI96p7Gap1E6tXT 6NsBAACAXuFp9QS/ir9QsNSvk8mOd8eyU0hfJW8iom8HAAAAxBGdKNXJ2mS6jqXqaVBuxUyv4qc7 5dEwAAAAuGrBidzCNie/Sp7sdA1ADcU7VmlSfjV3sNKkjPgAAADcpvT0TmG9yf6ZWEdvUP5w7kRl mzKSAwAAgOjYgz+9Xh1vAKqrX6clO94dzJqUszvmTWUhPAAAALcpPF4JywYn1iuysfOj9ezY2ppX ynoT9u0AAAAgOLtO4TUmR1NYWXOyyMw9OyLTmpRbjcqIDwAAwG0KT0t0oubkrvBkShkruoOvReFB dAAAAG5XeFpTWPZmS1gn7dmZcgcpZQEAANye4HiiE+3W8XqAtU90LykeDrijWRmrtXOHbcoAAAC3 KzytVOdF/OBkkkcME+5gZGTeHWylO4gOAADA7QhPJdV5kdoUVplh4p1tTWXZO5pZGQAAAFyv4HgO YY+eepW4HcYKT3c7zDDhTusyVqvWNt6iw7uyBwQAAACuQ3i86pAWndEhXqRdwure2dfboCySH9z1 6tzZNyM8Xr0N0QEAALhu4bHuYBcJZqmO15x8kgZl3aT8XrzDH4mdAQAAwHUJTiQ83vmaL+bWak4u M7VnJ2tS9u6sXQoUiQ7iAwAAcF3C0zoe4k35QuQNBw04TenZEWkvF3w1d9w7sZRSFgAAwG0IT9T+ MorOS+ANs5zCMLVnp3LHbcrTuuMAAABwPYITCY8XkETNyVFI0sVwwBeRnVbq3WlKWQAAALclPJUT zrP2l1l29E3t2cmEp9VoRCkLAADgdoQnm+Cu9PlGzckn7dlp9e1UOqspZQEAAFyP4GhX2Ep7Y/Kv xBUOKmFNkR37xWTnW7yYLyDbqMxZWQAAANcpPF4wkoUir4knTHKEYYYvwjO21hcRRVOIDgAAwPUI j3fqQuQIeqBpthLWVNmplrKiL0ILz+RzLgAAAGCRgmNFR09h2cbkX7Jfwmo1J3czzPBFVZqU9Rdj S1mTjmsHAACAxQpPax9fFobYye2D3eDQnh0rPJUm5Rdpb0ZEdAAAAC5PcjTZOVg2DBkDEW9FzaJ6 drxlQd4Xko2hbxoPHAAAACxbeLIprKjqc7QS1iGy431hPaWsaAydnTsAAACXLzytVOeX7Ich2cGf Imfu2fG+sPeOL8pLdxAdAACAyxKc8WUr1fklfj+vt19nln7eYeYvzNu343VcZxZHozIAAMBlC09r B9+z7FZ7Ric4yqT2MOMXGM3S6y/k1+cXWNmSiOgAAABcjuRoH7Dj5lGlp1LCWlTPTm8pq5LuCNID AABwEcJTcYGp/ToHucBcPTvSKTvPp7I5AAAAOJnwRB6Q9fBGW5MXXcbKtilHX6Q3akajMgAAwPIF J/MAL9V5lr4SlshCylgi9VLWs/SVsujfAQAAuAzhyRqTW5PZWTvLQQxH+IJb42ae1VWFBwAAAJYl OVp0pl7/j3o4+HCEL7p66FcrxprlWHcAAAA4qvBs1fW6muqcrIQ1p+z0lLI84bGnob8fy+4AAABg tuu+d+2v9uocvTF5btmxX7AVHq9vp7d3R5AeAACARQlP73BSzzT2bNf8Y5Wxqk1KVnp0uqO/8Nmb lQAAAOCg671IfA7WeD3X1/rKFNZRrvXDER+I1viZ/eJfhHQHAADgUoTHS3bGPl2vT8dLdcbr/VFb V4YTPAA23fF6dkbpqYyhIToAAADLEZ7KBFbWr3PUEtYxZGfqGJoXbUWlLDmG9QEAAED5Ol9tWXkW v5IzhhonOTnh2GWslvF5D4JXy7MPAqIDAABwPuHJrvG/itf4aApr9kDjWGWsQ4Snp3cHAAAATic5 In6qE/Xl/vy8taawjnp9H07wwFSOj/CEhyWDAAAAyxOeVpDxHNy8VOckU9fDiR+Q8UGJ+na8UXQa lQEAAM4vOSJxquOVsHSq82yu629ywonr4cgPiki9lGUflOxEdNIdAACA0wtPdE1/CUQnKmHZa/pR r+fDiR4YW8p6l3YpKypnke4AAACcVnK88MJLdTzRqZawjiY8wwkeHO8B8h4cr5HJi7xIdwAAAE4v PL2pjic6Xnhx9Ov4cKIHSCTv3M5iLz2TT7oDAABwWsnxQotWqvMsfgnr5KnOKWTHio4+ETUqZXnC Q7oDAABwPuE5pFcnGzg6yfV7OOEDJVLfuUO6AwAAcH7JEbnwVOdUstOb7vwU0h0AAIClCM9Fpzqn kp1IelrrpaemOwgPAADAfNfsi051Tik7c6U7rb07iA4AAMB81+6LT3VOKTuR9FTTnfHBi0bXOBEd AABg/mv1xac6p5adQ9Kd6qw+6Q4AAMB8onPxqc5v1md6IFeSpztesvPl832P/+/28P9u95/3/+5T 2jafH3dlPg8AAAD0XadbJ5tX207OnuqcQ3as6Kyklu78+JSdp8+bFZ6PT+HRsoPoAAAA9F2j9esb yU82jyowi0p1ziE7kfRED+STEp3xZZTujAnPVskO6Q4AAEDf9bl6gHfrwM9FpDrnkp0p6Y4WnjHZ icpZKyU9CA8AAEDt2qxfn3Ligd2Lt4hU51yyE0mP1/w0pjtaeL6IX8rSsrOS3YQHAAAA2tdlW77y enV0i8niU51zyk6W7ngP6pPsJjs63bl3hEcnOyKkOwAAANk1WdQ1eSt5U/KzEp0f6n1nPdl8ibIT SY+X7jwq4RmlRzcrP3zerOyQ7gAAANRFZ2tEx5uU/mlEZ/Gpzrllx0t3PhzheVbC46U7Wna8chbp DgAAQH499kpY3sLfn47oaNlZXKpzbtmx0qOFZ2yG+n3/7pXwPDk33btzL/vpDqPoAAAA/vVXv66b kqOdOj/UbRQfb+HvYlKdJciOTnfGt0fZuZPdMXSvnOVNZt3J7ij6RnbLWkgPAADAn+tuNmo+pjqR 6Cw+1VmC7Fi7tOnOmyM8XsJjJ7PWsj+ZxSg6AADA7nW3coTTT0d2RuHJDummjGUe8JXzoNt0Z3zA tex8kd1kx1s0uBGalQEAADzR0U3JWnS8pmQrOlmqs1mC5CxJdiLLtI3K958yo0tZT0p+Wnt3aFYG AADYF52oKTkSnR/iT2CNqY49mJsyliMfdjrLTmY9fD7Qj+KXsjzh8ZqVER4AALhFyRFzvc323I1y 88/nLUp1xhKWLl9tl/JFrxf6n9A6M8s2K2dHSNiEZ1DCAwAAcGuisxX/SAgv1fGSHW+JoO7V2QZy hezIbgOxriEOsj+K/vNTah6dW5busFkZAABuXXiyIyH09NXv2z/ipzovEk9gLSrVWZrsWOGxpayo WVmXs6rpDiejAwDArUmOJzyj6LzJfvlqFJxqU/LienWWKjv2P0ULz9untIzNyvfiJzt2yaBNd8YO ccpZAABwS6KTHQkRLQ9s9erYCazFic5SZcdrVh7LWaPw/JK8nBWNodt0h3IWAADcivB4O3VsT2wm Oj8LorNd4he/Xvh/jBUe20B1r8TmIZCdqHeHchYAANyC5FjhsTt1RtF5DkQnWiD4LvuJjixReJZc xrLNylp4xmbltRIeL9mJ0p1BiQ3lLAAAuGbRya6levrKis54y8pX3l6dxbH0ZCdqVh6U8DzLfrqj X+p0x1s2SDkLAACuWXjs9FU0Zm5Fx56BZRcIeqUrylgHmql3Kvqd/El37gPZeQhkh3IWAABcs+RY 4dHlK2/6KpIdu1Mn6tUh2TngP8trVh6XA97JfjnLu7V6d0QoZwEAwHWJTnaiuXfIpxUdr1fnYpqS L0l2vP8420X+In/KWfdGemwpi+ksAAC4FeGJylfemPlvwflb+lKdxZevLkl2bLOyTnf0KHor3cnK WfrMLBHKWQAAcLmSY4XHm76yywPt7Yf4m5IvpnR1abJjhUdkf/fOoIQnk54o3eHsLAAAuBbRseGA N31ly1c61dHTV79k96BPrzGZMtYR/yN1LDfIn3KWbViOZCc6FV2fjk66AwAAl3adzJYHVspXP5Ts vF666Fya7GTlrJX8OUqiIjs23bH9OyK7k1oIDwAAXEoYsJXalmQrOv8Y0bmYgz6vSXas8Ij45Sw9 oaUlp9W7Y5MdxtEBAOAaROdN9rckV0Unkh25JOFZX8F/bKWc5cmOFR5PekQJDwAAwNJFJxsz97Yk /y35QZ8XXb66ZNlplbMGJS9eSeu+ITu2WZn+HQAAWPp1sXdL8t+y36tzdeWrS5YdKzwiu+Use3aW TXjupXaMBOPoAACw9Guhfj0SnXH6yqY5UarzKldSvrp02bH/0fo/eezdeRE/3clkJ5rOGhAeAABY 8PXPpjrePp0f8ifR0aKjd+roLclXITqXLjutZYO2nGV38ETlrEH2j5OgfwcAAJYoOlvnF36d6nil Kys7XlPyVZSvrkF2rPCI7J+d5Z2fdR+ITiXdoX8HAACWJDqV4yD+cWQnOxLiqlKda5Ad7z/fm87y 0p2q9FipYf8OAACc+5oXTV7ZfTqR6NhNyVlT8kWLzrXIjlfOWslu3VIvD1wXRCfaqsz+HQAAOPcv 9vqX+3GfzntDdP79efNSnawheXsND9w1JTtROcsraXmiU21WFqFhGQAAziM6XukqO+DT69PRqY49 0dwe9CnXIDzrK/1m0OmO3b1jS1pr6ZvMEqFhGQAAziM6rcWBnuj8uyA6H9cqOtcmO166M8rIaL06 3bGNy1aA7oSGZQAAWJbotBqSI9Gx5SuvT8fr1bkKrjHZWZlvjGi7spfwVEVHQ8MyAACcQnRaDck/ jOxo0RllR4uOnb6yfTpXIzzrK/7mEPmT7thxdLuD586RHW8qiwNDAQDgXNc2ryHZHgVhE53xpbcl +eqWB96S7HhGbMfRbcPynSM6Vnai09FFaFgGAIDjXsMqDcladLzpq6s9DuJWZScaR3+X/ZJWtGn5 TvbLWV66I7LfsIzwAADAHKLjla+miM5PJTqvRnSusk/nFmTHCo/IbsNyq6TlvR2lOyK752chPAAA MJfojJIzRXT+NqKjy1c3k+pcu+zYb5ysf8c2Lkfyk/XuCMIDAAAzi45NdLIzr6zs6EM+bfnqasfM b1F2bLpjD0vzSlr2PC1vMqsynQUAADBVdLaJ6OgNyaPo/I/U+3RuSnRuQXas8GzU+1dKeFoJT0V4 rPgwkg4AAFNFR5eusjOv/p2Izs3t07ll2RHJ9++8yW55KpOeQdrpzloYSQcAgOmio8tXkejYslXU pzOKzpvE515dvfCsb/AbSmS3f0fEP0MrkxwrO5H4MJIOAAC9opMtDYx6dFp9OjrR2dyS6Nya7Nhv LlvS8tIdL+mxstM6PwvhAQCAyrVJT155iY6Wnf9RN69Pxx7w+WEk52ZE5xZlp9Kw3JIeT3ZWieyw gwcAAKJfvHXZSl+PosM9/y1+omMbknWfjm1IvplenVuVHSs8UcNyr/QMifT85g7hAQAAR3R0+aq1 HXmUG5vo/C35huSba0hGdnaFR1u17d/plR5PcuzHQXgAABAdkXxpYLRLx4qOd+7VWL7ylgbeVJ8O suP/Z28OlJ1WuiMIDwAAoiPx0sA3R3Ss5ESiY08y946DuEnRuXXZsd98dkJLHOnpFR1PZBAeAABE Z1sQHTtiXl0c6EnOzYoOshOfnyWy32zsiU9ryaD+WAgPAACi4y0NfJd4O7Lt0/kfJTo/pXaS+c32 6iA7sfBo214lotMqcWUTWggPAMDtio6dvHpRohP16HgNyT8T0bnphmRkpy08m+DveKLTalJuyQvC AwBwe6KTHQOhTzHPdul4fTqR6Ny88CA7vvB4Y+lZ4/JqouwgPAAAiI5XurLNyFp2es68ItlBdlLh kc9vmtXnN1JVeiLZWSE8AACIjtR7dPTLSqJz8yPmyE7/N6ko4ZFEdqrbk1sgPAAA1y06epeOtx35 b0d0xpKWTnTGPh2b6Nz8iDmyM/0btio7cqDsIDwAANcrOl6ikzUj2z4dPXk1HifBLh1k5+BvWG8k /SP4+9lenV4QHgCA6xedbGlgJjreKebs0kF2ZhceEf9ICGm8D+EBALgd0RlFpKcZOTvFnF06yM7J hEcf1jaH1CA8AACXLzladPQOnQ/Z3Yz861NexkRnlJv//rzppYGtwz0RHWTnaMKj0533jo+xmvjD g/AAAFym6ExJdHSq0xIdlgYiOycTno8Z5EYa36wIDwDAMkVHtzl4R0C8iL8wcBSd/zYv7Yi5PsWc pYHIzlmFZy6psb8h6LfvEB4AgMWJTuX0cp3o/CO7iY4uXUVLA70Rc0QH2Vm88PQK0Sg645EUWngE 6QEAWITovDdExzsCIpu80tuR34WlgcjOBQvPNrjpP7s3/2YwkkPKAwBwPtGxywLtHh1duoomr/5x REf36WyEXTrIzgUKz7ZDgPT77pTo2JQH4QEAOI/ojEv+9Fbk6AiI7ATzrEcH0UF2LkJ4to0fHP0D 1IoqbbqD8AAAnF509LLA6PiHv43gRKLjnXfFdmRk5yKFJ/s4kex4t7WRHoQHAOA0omOXBb7Jnx06 0TlXnujohYG6RwfRQXauSngikdkUxOc3dwgPAMBRJUekvSzQjpaPE1f2QE97qKfeo6OnrujRQXau SnjsVuboViltITwAAKcRnfdEdEaZ8fpzsrOuEB1k5yqFJ0t1WtLj7Vi4E0bTAQDmEp1sWWBLdP4n EJ1/JD7Uk2ZkZOfqhMebsoqkJpIefbOj6UxqAQAcJjpRovOaiE40Wu5NXHlHQHzIbpKP6CA7Fyk8 3jfvNvnBakmOd7sTJrUAAOYSnY9EdPQOHZvo6H4dnej8kvpZV4gOsnOxwvPu/D0rOq1kpyVANC4D APRJjkjciOwtC7THP0Q9OlZ0XhAdZOeWhKe1Z6f3Fi0ipI8HACAXHdufk+3Q8Y5/8MbL/1aio0fL sx06iA6yc1XCUylj9aY7nvTo/1v6eAAAfNHJJq7GrcijsHjHP+iSld2hY7cijwL1IZx1hexcufCs AtHxduzY20fyeiQ99PEAAMS/bFYmrkbR8RKdfweiY3fo2EQH0UF2rlp4RPxJrUo560N2a8kfgfRY caKPBwB4Ht59actWrYmrLNHRE1dWdN4QHWQH4dkVHU96toH0fCTSs0l+oOjjAYBbFp2obDUmOmN/ TnT8g71lo+XRskD7vA/IztULj/2Gb21W/ijcIuGxfTz6RsoDANcqOSLtspUWHW9Z4N+B6Oj+HDta zrJAZAfhUe/zUp5sB8+H+W3kvSA+Xh+PV9YSpAcArkh0WmWrUXK8iSsv0Rnf/kf8wzxZFojsQEF4 WhuWrexUE57ftwcjPNtEehAeALgG0amUraKJq78D2flH/P4cduggOxD8MIqRi9ZoetSk3Ep6rPis P29bJT12WkuQHgC44OdV75fFrGzl7dDRL72xct2fww4dZAeSH87KaHprMsuTnHfzg+fVjtdGbEh5 AOCSRSf6JbFVtvrREJ2obDVOXEWnliM6yA44wiOyP5pemcx6l/105z2RIZvy6BH1lZDyAMBlSU70 XFktW0Wi84/sHvuQHf3AaDmyAxOEp7J0sCU7WWnrMRCesaRFygMAl5LmiORlK+98K1u2+jtJc3TZ Su/PifpzEB1kB4rCM0pP9BtLVs7Sv8m8mx9MT34elPTcCSkPAFxumrMxz4He+VY/HNGxvTk2zfH2 5+g0ZxNIGCA70BCebfGHO2pW9mQnkh4tPKQ8AHBJac7WPAe+KdH5pUQnK1t5TchR2Yr+HGQHZvyt RaTeuBylO1p27G388yfxe3lIeQBgyWlO1IScbUOOEh2vCVmLjtf7SNkK2YEZfri9xuXektab+S1H v7TSM/by3AspDwBcRprTU7b6p5Hm/DBpTnS+FaKD7MCRhaeV8kSy85rIjpWeR1IeAFhomuM1IXuH eOptyHZRYFS2am1D9spWiA6yA0cQnmyfxNY8AWTSY29eL4+X8gyf0kPKAwCnlJzolzqd5rTGyq3k ULZCdmChP/w24ZHik4G9ebLz5ojPo/gNzIOwfRkAjvNc55Ws9KSVbUL2ylY/lNR4kuPtzqFshezA AlOejdR6eKrpjhWfbGJrLGtp4bEnqSM9ADBHmuP15nhLAr3+nH+CNOen5GdbWdERRAfZgfMJjzg/ jK0enqrsaOl5Uh/rXvzyFqUtAJhTcqppji1b/dOQnFF0XoSyFbIDFyE8W9ltGM6a+Fopz0tDfGxp SwvP2MsjQgMzAPRJjohfsop+UdO7c34moqMlJ2tCpmyF7MDCnywqx0y0RtJ7pOdLIDy6pDUIpS0A yJ+7vDTaGye3k1Z6d44nOp7k2CZkO5hB2QrZgQtKeSSRnuxoiaic9eKIjxak36WtByflsb08XmkL 6QG47TSnp2SVpTk20YlKVlkTMmUrZAcuTHi2JknZmt9WNs5vTdmUVquv5+nzYzwo8VnLbmnLTm1p 6UF4AG5XcuwGZO/wTq83R+/P+SdIcmzJKjry4cO5T4gOsgMLf0JppTzZWVrvsrt48CW5/f7zr4H0 6NLWRvypLVIegNuSHJH2UTdeA7JNczzRGV//GaQ5dsrUHo/DkkBkB2405fHKWVZ2xte/OsIzlrbW Snjo5wG4LdGJ+nKySdEX2d+b45Wtfsh+87FXsqpsQibNQXbghlKeqKz10kh6tBg9OSnP/afsrCXf zYP0AFxXmlM55iErWXlNyJnkeCWrVm8OooPswA2mPNlOnhfzW9eL+Q1qTHm09Dwo6fmQ3YWEA9ID cHOSUy1Z2TQnkpyf6t/qX76qaQ6ig+wAKc9eWaslO1p4Rul5NNKjhQfpAbh8wfEkx/slylsM6KU5 tjfH3nSSE5WsdAMyaQ6yA6Q84W9flZTnl/mtTD/xfDHC8yi7pa0p0oP4ACwrxRHp2+8V7czRk1Y/ xJ+usvtyfgWSQ5oDyA5PUqWUx5a03oPfyF4c2RlvX5X0PAUpT4/0CGkPwEVJTjRKrs+zaqU5VnKe zXOPnbKKJIc0B9kBUp6dt4dAerx9PJHo/FK/fX35FJ8vJuV5VMJTlR5BegAuSnJaJSuvN8dKju3L sZKTjZOT5iA7wBNYmvL0lrV+mSeyb+rlKD1fTNLzgPQAXKTkeGPknuS0GpB/BqJT7cvR2+H1/RLS HEB2oJryRP08bxKXtfSTmhaer07K0ys9K9lfToj0AMwvOCL75Z+N1Cas3pznhGfxe3N+GPHRE1bR KHm1ZIXoABcECL8n9MtRLEbZGPflrD+FZJSURyUuX4zYjKJjb18mSI9dTDiY+7vi+xxg9hTHS3u9 haTeAEPUm+NJTtR8/Ko+h5Wcjfg9OUgOcBGA0veFbRAelPDcKeHJpOeLkp6vndJjx9XtmVvZ9Jb3 tQBAnuKI5HtyojFyry/Hpjk/kxSn0nxs0xxKVoDswFFSnpVJVkbpuS8kPV+cxKclPd64ut3GPEh+ DIWQ9gCUUhyRuB/HK1e9y27f3pjEjMmMlhx9+2H+TA8zeEsBKVkBsgNnkR5dQrorJD2PSdLzJZCe 8e8/OknPWvzyVtbXQ9oDCE47xcn6cVorKLySlXfTf8dOWEWSY5uPkRxAduCo3yut0pYnPQ8m6Xkq SI+d3HqUeDHhWvK+HtIeQHJqKU5LcrwJTLsz59mRm5bkjB/7XfxRckpWgOzA2aXHS3q0hFSlJxMe nfI8St7T09vMjPgAKc5uihKNkEd9Oc+y35/z05Ege7yMTXJa+3JIcwDZgZN/72T9PMNE6fHSHm8/ z2MgPd7I+l0gPa0yFz8ncC2CI4UUJzsTz0tyfgWJznNDcnRPjh0jpy8HkB1YfMojRigOlZ4vQcLz VEh67p2kp1Liynp6+JmBSxEckXgBoG06fpf2wb92U/pz4fYrkRyb5HgTVpSsANmBq5Sex0R6vgTS Y5Oex6L0eM3M2c4exAeWLDgifpmqJ8XpkZxfidz0SI4da4/OsEJ0ANmBq5aeSH6eJkiPLnF5+3p0 2oP4wCUJjjgJjneUQ6VUFUnOL0dunhuCU+3J2ThfD5IDyA5cvfRE4vPFkZ+nidKTlbiyEXbEB04p NyJxSceWfWyKs1GCEaU4tun4xUjMc/DSCk7Uj4PkALIDSE8gPV7ak4mPJzxRM7MnPetEemziI1Jr bubnDOYWnFaZamqpKkty7PteCinOm+xuWkZyANkBpMdIj7eV2Ut7Hh3J8V5/TKTHW1JYFZ8pR1Tw cwctuZkiOK0FgG9JiuNJjn39ZUKKg+QAsgNIT0N6etOex0B4vMmtbGzdlrgy8VlJ+4gK5AemyI3I /iRVVKbSCYo9ymGK5ESNxp7gRNuOkRxAdoDvu07puXOkp1Lmim6PDemxaY8VH+8g0mriUzmugp/N 6xObTG4kSW8qZapqP07Uk1MVnFaK4+3IQXIA2QG+/xLpWTWkx0t7IvF5DITHlra8Ete9tMtcPeKD /NyG2EyRm6rgVEpVrZ6cluAcmuJskRxAdgDa0rOaMe3xyl2PQcoTiU+rzOWNsR8qPwjQZYuNvdj3 CI530rhtOPZKVa9KVKKSlX3fi/k3VnC8LcfRuVXsyQFkB6BDekTi87es9Nw50mPFx2tufkzeZ4Wn MsnVEp+ektch4+38bB9PalpiUxGcLL3JBMdLcd4cwfHKVlGTsT2jytuL827uWyQ4SA4gOwAzSY93 8Kg3vh6VuTz5yW4PzsuoxOWVuQ6RH5H5J734ua9fhFvL/CSQGnFEoFWe2pj0xCY4UakqKllF0mMT nKhMFU1UbQKBQ3IA2QE4kvREh4+2xCdKfR4awhM1M3vSM0V+ppa8KsnP6oaeG7YH/t2ekpQEUhON h09JcFqS8+qkNFH/zZRm400xxUFyANkBmOn7NEt7ot4e29+zDsQnSn482fFSnntHfO7N5281OB9S 8ooEsfJzv1rIc8vcF8tt8f3bwsvoaIaW3HgNxlZuIsl5DUTnpfjyVfZLVFGZihQHkB2AK0h7MvGJ Sl5e+uPJjtfIHPX3eFub50h9MgHq7QFaShK0neHvV8tRlZ6bjfT33rQSnKwXJxOd6H3ex3iXeJqq JTn2MUFyANkBOFPaEzU1j4JgRWItebnLSsxD4xZJz4MjVV7J607iJmdvtH0Qv48peizmkqDqn095 ftlO/LNeqWkJTaWpeFuQmx7BaSU5URnLS21aPTikOIDsAFxp2tOT+HjiY8telZf3xcSn1eCcHV1h U59K+hNJz6rxuFakc+pzzLbz7ZbUSHDB3so0uan03kRy05Kc10ai89YhNja98SapPhxxI8UBZAfg QtMeSaRnVRCfOyMi9xKXvu6T97XkJ2pubvX43AXSM6cAVURmakrUk8REF9wpi/sysdkWxCZb8vfh SMdbQXTeApmpik2U3lQTHFIcQHYAriTtkYnicydxz43XkHzfkJ+sqblXeu7M/a4mPz39P9JIfaZM ifU0CLf22vQIzqYoOC25qaQ4Wbmq92bToQ/npb3P2dI/JqoA2QG4gbSnR3yGIPXJ+n4qAtRqZr6X 9hj7IfIzx7h7pU+oRTbxtE1EqCo5Wb9Nb3oTJTnvTuLSEp73JK2JUhtvPDxKb1rj4qQ4gOwAID5h n0+U/kQCFMnPWvKRdfvv7Qh7dqvKT1V8vMdKpF4ay5KdSqkpS3mmCs6H+Mv9MsGJkpyq8LwHSU1F bD6c+xwlVRXBQXIA2QFAfFzxiZKfoUN+Ipm5T/7OuiA8UZmr1eszZaNz1gu1KiY8FVlplV6mNBdX SlSe4HwEQhKJS/b2R1FsrNxspb88heAAT/gA/Bx0iU8r+WklQJ6wrIs3r4R2V0x6MuGpjLZXG75X yb+VQHgqPTVZyuMt9tsmCU5FdLJE5yMRnvdEiFpS8xHc55bYIDgAyA7A7OIjQZpREaBW+esuEZsp gjNFeLyvKROdVjmsmuxkpadWP090TMMU0cmEJ2oMzpqGI6n5kHy0vTe5QXAAkB2AWcRHpL+sU0l/ WjLUIzKt/p1KWas6sRV9jatCuhOVoHov+D0bjT3ZqYjPh7T7aFpSkzUSRweHRkmWIDgAyA7AsX9W KtNJ1SQk6wEaOoWlV25a/TtTv55WutNKdTIRaB3nkPXpTJGfTeP1TeN1T9xaJanK6D2CA4DsAJwt 9emVn1VDGIainHh/ftf571uy0kp1op6fluxkk1NZ0uEdzLkp3D4KMhRJS1R+at3vav+RSFyaQm4A kB2ARaU+mfxk8tBq/B0ar7d260zZvSNSK2PZ99mv2V60bc9N1LdTbVKu7tSp/nlFZFpC09tvQ2kK ANkBuDr5kYJYDAfKUesoibnGzudqUJ5z/HxblKlN4X5UZKaa2gjpDQCyA3AL8lMRIJH5dt4Mxb9X WSq4lD07IvVjIloff06Z6dlUjNwAIDsAV/9z1zpxvFeIpCAuU87Gan3eIfk7LdmRQDgiqZgiPZW/ JzK9r4bUBgDZAYCJAjS3ELVeF8kPAe1Jn1pEAtKSDCkkKr2vV15WpQa5AUB2AGDiz+fqSFLUel+P XLU+RiQPh4rGdsLHrr6O2AAgOwCwgJ/Znh6hXnGqyk9FdKqSUU1Qth1vz1FqQmoAkB0AuBARav3b VefHXE24X9vOt3vl45CmYKQG4ML5vwIMADa9e26qZ/20AAAAAElFTkSuQmCC" id="image3980"/>
-        <g id="g3982">
-          <circle sodipodi:ry="275.909" sodipodi:rx="275.909" sodipodi:cy="278.93399" sodipodi:cx="279.51501" cx="279.51501" cy="278.93399" r="275.909" id="circle3984" d="m 555.42401,278.93399 c 0,152.38033 -123.52866,275.909 -275.909,275.909 -152.38033,0 -275.9089919,-123.52867 -275.9089919,-275.909 0,-152.38033 123.5286619,-275.9089961 275.9089919,-275.9089961 152.38034,0 275.909,123.5286661 275.909,275.9089961 z"/>
-        </g>
-      </g>
-      <g style="display:inline" id="Frame_copy_1_" display="inline"/>
-    </g>
-    <g style="display:none" id="Frame_copy_2" display="none" transform="translate(1042.0419,-279.83386)">
-      <circle style="fill:#ffffff;display:inline" sodipodi:ry="275.909" sodipodi:rx="275.909" sodipodi:cy="278.93399" sodipodi:cx="279.51501" display="inline" cx="279.51501" cy="278.93399" r="275.909" id="circle3988" d="m 555.42401,278.93399 c 0,152.38033 -123.52866,275.909 -275.909,275.909 -152.38033,0 -275.9089919,-123.52867 -275.9089919,-275.909 0,-152.38033 123.5286619,-275.9089961 275.9089919,-275.9089961 152.38034,0 275.909,123.5286661 275.909,275.9089961 z"/>
-      <g style="display:inline" id="Frame_copy_2_1_" display="inline"/>
-    </g>
-    <g id="Foreground_Grid_1_" transform="matrix(0.333692,0,0,0.333692,-610.81394,-151.23635)"/>
-    <g id="layer4" inkscape:label="box" style="display:inline" transform="matrix(0.6433923,0,0,0.6433923,563.19164,120.38376)"/>
-    <g id="layer5" inkscape:label="zip_app" style="display:inline" transform="matrix(0.6433923,0,0,0.6433923,563.19164,120.38376)"/>
-    <rect style="opacity:0.57786889;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none" id="rect1327" width="0.64339232" height="0" x="563.78369" y="130.76021"/>
-    <path sodipodi:nodetypes="ccssscccccc" inkscape:connector-curvature="0" id="path5980" d="M 18.5,9 C 18.160156,9 18,9.2346178 18,9.5 l 0,107.96875 c 0,0.82158 0.679323,1.49953 1.5,1.5 L 74,119 c 0.05307,3e-5 3.273884,-0.008 3.9635,5e-5 6.540972,-4.50361 22.6373,-21.953284 31.58253,-30.955094 1.47685,-1.656484 0.4576,-0.370067 1.45391,-1.607456 L 111,9.5 C 111,9.1772826 110.83678,9 110.5,9 z" style="opacity:0.84653476;fill:url(#radialGradient5988);fill-opacity:1"/>
-    <path sodipodi:nodetypes="cscscssc" inkscape:connector-curvature="0" id="path6081" d="m 113.9,82.502986 c 0,4.465301 -4.49749,6.609952 -6.97972,8.293625 -5.10854,3.46508 -14.739114,3.52536 -20.520284,3.60638 -0.081,5.781159 0.76586,15.304599 -2.69922,20.413139 -1.68367,2.48224 -5.79051,7.98687 -8.70078,7.98687 -2.091359,1.5337 3.488204,11.21101 6.734971,8.31989 9.501888,-8.46107 45.998943,-30.20138 54.218083,-39.441569 2.04044,-2.29392 -17.0724,-11.965986 -22.05305,-9.178335 z" style="opacity:0.40099009;fill:#000000;fill-opacity:1;stroke:none;filter:url(#filter6118)" clip-path="url(#clipPath6093)"/>
-    <path style="fill:url(#linearGradient3895);fill-opacity:1;stroke:none" d="m 112,82.502986 c 0,4.465301 -2.79749,6.409952 -5.27972,8.093625 -5.10854,3.46508 -14.939114,3.32536 -20.720284,3.40638 -0.081,5.781159 0.16586,15.504599 -3.29922,20.613139 -1.68367,2.48224 -5.29051,5.38687 -8.20078,5.38687 2.31803,0 4.74284,-1.33476 7.58402,-4.08481 9.14197,-8.84873 17.36714,-16.13535 25.673154,-25.297529 C 109.67612,88.503916 112,86.97878 112,82.502986 z" id="path6011" inkscape:connector-curvature="0" sodipodi:nodetypes="cscscssc"/>
-    <path style="fill:#ffffff;fill-opacity:1;stroke:none" d="m 112.01875,83.2125 c -0.31643,3.899106 -3.52291,5.902807 -5.85,7.48125 C 101.06021,94.15883 90.83117,93.01898 85.05,93.1 c -0.081,5.781159 0.85258,16.31646 -2.6125,21.425 -1.473211,2.17196 -4.099456,4.6601 -6.7625,5.25 1.980459,-0.3623 3.884931,-1.66139 6.26875,-3.96875 0.339117,-0.38853 0.574297,-0.67895 1.10625,-1.5 3.46508,-5.10854 2.8315,-14.51259 2.9125,-20.29375 5.78117,-0.08102 15.81021,0.25883 20.91875,-3.20625 0.46542,-0.315689 1.59399,-1.187744 2.00625,-1.6 1.53629,-1.536293 2.90171,-2.613421 3.13125,-5.99375 z M 75.675,119.775 c -0.157658,0.0349 -0.313437,0.0414 -0.46875,0.0625 0.156991,-0.0169 0.310443,-0.0335 0.46875,-0.0625 z" id="path6122" inkscape:connector-curvature="0" sodipodi:nodetypes="cscsccccsscccc"/>
-    <path style="fill:none;stroke:url(#radialGradient3919);stroke-width:1.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;filter:url(#filter3909)" d="M 117.31456,81.861283 72.639105,125.34835" id="path3873" inkscape:connector-curvature="0" sodipodi:nodetypes="cc" clip-path="url(#clipPath3889)"/>
-  </g>
-</svg>
\ No newline at end of file
diff --git a/Images/Icons/folder.svg b/Images/Icons/folder.svg
deleted file mode 100644 (file)
index beac8a1..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
-       <!ENTITY ns_svg "http://www.w3.org/2000/svg">
-       <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
-]>
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128" viewBox="0 0 128 128" style="overflow:visible;enable-background:new 0 0 128 128;" xml:space="preserve">
-<linearGradient id="XMLID_14_" gradientUnits="userSpaceOnUse" x1="53.9155" y1="91.1152" x2="55.8202" y2="110.6698">
-       <stop offset="0" style="stop-color:#999999"/>
-       <stop offset="1" style="stop-color:#4D4D4D"/>
-</linearGradient>
-<path style="opacity:0.2;fill:url(#XMLID_14_);" d="M0,96.969C0,101.766,4.52,104,6.5,104h98.342  c3.922-0.238,4.158-3.357,4.158-7.104v0.109C109,93.197,0,96.969,0,96.969z"/>
-<linearGradient id="XMLID_15_" gradientUnits="userSpaceOnUse" x1="56.8511" y1="91.5078" x2="58.8261" y2="111.7843">
-       <stop offset="0" style="stop-color:#999999"/>
-       <stop offset="1" style="stop-color:#4D4D4D"/>
-</linearGradient>
-<path style="opacity:0.2;fill:url(#XMLID_15_);" d="M0,97.969C0,102.078,3.266,105,6.5,105h101.553  c3.922-0.238,7.114-0.754,7.114-4.5L115,98.005C115,94.296,0,95.861,0,97.969z"/>
-<linearGradient id="XMLID_16_" gradientUnits="userSpaceOnUse" x1="57.9409" y1="89.6006" x2="60.2324" y2="113.1264">
-       <stop offset="0" style="stop-color:#999999"/>
-       <stop offset="1" style="stop-color:#4D4D4D"/>
-</linearGradient>
-<path style="opacity:0.2;fill:url(#XMLID_16_);" d="M110.053,97.824L0,95.969v3C0,104.609,4.52,106,6.5,106h103.167  c1.729-0.104,3.551-0.264,5.05-0.729c1.903-0.591,3.283-1.675,3.283-3.771C118,101.5,116.206,97.824,110.053,97.824z"/>
-<linearGradient id="XMLID_17_" gradientUnits="userSpaceOnUse" x1="47.3115" y1="10.7583" x2="58.863" y2="110.2979">
-       <stop offset="0" style="stop-color:#999999"/>
-       <stop offset="1" style="stop-color:#4D4D4D"/>
-</linearGradient>
-<path style="opacity:0.75;fill:url(#XMLID_17_);" d="M6.946,16.1C3.116,16.1,0,19.209,0,23.031v73.038C0,99.891,3.116,103,6.946,103  h93.108c3.83,0,6.945-3.109,6.945-6.931V32.097c0-3.822-3.115-6.931-6.945-6.931H62.729c-2.793,0-6.33-1.492-8.801-3.713  c0,0-1.035-0.928-1.035-0.928c-2.114-1.899-5.372-4.425-9.246-4.425H6.946z"/>
-<linearGradient id="XMLID_18_" gradientUnits="userSpaceOnUse" x1="35.979" y1="15.0229" x2="68.9291" y2="107.2834">
-       <stop offset="0" style="stop-color:#FFFFFF"/>
-       <stop offset="0.2191" style="stop-color:#F4F4F4"/>
-       <stop offset="0.6013" style="stop-color:#D8D8D8"/>
-       <stop offset="1" style="stop-color:#B3B3B3"/>
-</linearGradient>
-<path style="fill:url(#XMLID_18_);" d="M106,96.069c0,3.263-2.676,5.931-5.945,5.931H6.946C3.676,102,1,99.332,1,96.069V23.031  C1,19.769,3.676,17.1,6.946,17.1h36.701c3.271,0,6.149,1.987,8.578,4.169l1.034,0.928c2.429,2.182,6.2,3.969,9.47,3.969h37.326  c3.27,0,5.945,2.668,5.945,5.931V96.069z"/>
-<path style="fill:#FFFFFF;" d="M100.055,26.167H62.729c-3.27,0-7.041-1.787-9.47-3.969l-1.034-0.928  c-2.428-2.182-5.307-4.169-8.578-4.169H6.946C3.676,17.1,1,19.769,1,23.031v1C1,20.769,3.676,18.1,6.946,18.1h36.701  c3.271,0,6.149,1.987,8.578,4.169l1.034,0.928c2.429,2.182,6.2,3.969,9.47,3.969h37.326c3.27,0,5.945,2.668,5.945,5.931v-1  C106,28.835,103.324,26.167,100.055,26.167z"/>
-<linearGradient id="XMLID_19_" gradientUnits="userSpaceOnUse" x1="49.9219" y1="23.2446" x2="58.3703" y2="104.0195">
-       <stop offset="0" style="stop-color:#D9D9D9"/>
-       <stop offset="0.3749" style="stop-color:#CECECE"/>
-       <stop offset="1" style="stop-color:#B3B3B3"/>
-</linearGradient>
-<path style="fill:url(#XMLID_19_);" d="M3.344,99.816c0,0,0.984,0.168,1.615-0.284C5.625,99.054,6,97.695,6,95.896V54.132  c0-3.808,3.117-6.905,6.947-6.905h37.308c2.996,0,6.582-2.007,8.807-3.997l1.033-0.924c3.164-2.831,6.188-4.207,9.247-4.207H106  v-0.6H68.342c-3.059,0-6.083,1.376-9.247,4.207l-1.033,0.924c-2.225,1.989-5.811,3.997-8.807,3.997H11.947  C8.117,46.627,5,49.725,5,53.533v41.763c0.062,2.017-0.495,3.878-1.167,4.351C3.701,99.739,3.344,99.816,3.344,99.816z"/>
-<linearGradient id="XMLID_20_" gradientUnits="userSpaceOnUse" x1="54.9907" y1="39.2622" x2="63.2101" y2="110.0893">
-       <stop offset="0" style="stop-color:#999999"/>
-       <stop offset="1" style="stop-color:#4D4D4D"/>
-</linearGradient>
-<path style="opacity:0.75;fill:url(#XMLID_20_);" d="M69.342,38.1c-3.059,0-6.083,1.376-9.247,4.207l-1.033,0.924  c-2.225,1.989-5.811,3.996-8.807,3.996H12.947C9.117,47.227,6,50.325,6,54.132v41.763c0,1.847-0.37,3.165-1.015,3.619  C4.607,99.78,3.94,99.97,3.171,99.78c-0.762-0.188-1.067-0.562-1.563-1.022c-0.241,0.421,0.332,2.104,0.705,2.414  c0.219,0.183,2.062,1.719,4.344,1.719L109.053,103c3.923-0.238,6.947-3.358,6.947-7.104V45.005c0-3.807-3.116-6.905-6.947-6.905  H69.342z"/>
-<radialGradient id="XMLID_21_" cx="79.6152" cy="116.7344" r="88.0417" gradientUnits="userSpaceOnUse">
-       <stop offset="0" style="stop-color:#FFDD70"/>
-       <stop offset="0.4225" style="stop-color:#FFAB43"/>
-       <stop offset="0.8022" style="stop-color:#FF841F"/>
-       <stop offset="1" style="stop-color:#FF7512"/>
-</radialGradient>
-<path style="fill:url(#XMLID_21_);" d="M7,95.896c0,3.417-1.516,5.839-4.047,4.558c0,0,1.859,1.547,3.547,1.547s102.553,0,102.553,0  c3.271-0.2,5.947-2.857,5.947-6.104V45.005c0-3.248-2.676-5.905-5.947-5.905H69.342c-3.271,0-6.151,1.779-8.58,3.952l-1.033,0.924  c-2.43,2.172-6.202,4.251-9.474,4.251H12.947C9.676,48.227,7,50.884,7,54.132V95.896z"/>
-<radialGradient id="XMLID_22_" cx="126.5" cy="130.1982" r="82.3742" gradientUnits="userSpaceOnUse">
-       <stop offset="0" style="stop-color:#F2D26A"/>
-       <stop offset="0.2621" style="stop-color:#F6B650"/>
-       <stop offset="0.7541" style="stop-color:#FC8723"/>
-       <stop offset="1" style="stop-color:#FF7512"/>
-</radialGradient>
-<path style="fill:url(#XMLID_22_);" d="M109.053,39.1H106V102c2.578,0,3.053,0,3.053,0c3.271-0.2,5.947-2.857,5.947-6.104V45.005  C115,41.757,112.324,39.1,109.053,39.1z"/>
-<linearGradient id="XMLID_23_" gradientUnits="userSpaceOnUse" x1="132.5059" y1="35.3008" x2="40.7597" y2="115.4526">
-       <stop offset="0" style="stop-color:#FFDD70"/>
-       <stop offset="0.3826" style="stop-color:#FFB047"/>
-       <stop offset="0.791" style="stop-color:#FF8521"/>
-       <stop offset="1" style="stop-color:#FF7512"/>
-</linearGradient>
-<path style="fill:url(#XMLID_23_);" d="M109.053,100c0,0-100.947-0.52-102.553,0c-0.324,0.104-0.608,0.189-0.866,0.26  c-0.623,0.479-1.739,0.85-2.638,0.19C3.479,100.83,5.083,102,6.5,102c1.688,0,102.553,0,102.553,0  c3.271-0.2,5.947-2.857,5.947-6.104v-1C115,98.143,112.324,99.8,109.053,100z"/>
-<radialGradient id="XMLID_24_" cx="87.5469" cy="108.1338" r="112.4545" gradientUnits="userSpaceOnUse">
-       <stop offset="0" style="stop-color:#FFF3CC"/>
-       <stop offset="0.1912" style="stop-color:#FFDBAA"/>
-       <stop offset="0.5738" style="stop-color:#FFB06C"/>
-       <stop offset="0.854" style="stop-color:#FF9445"/>
-       <stop offset="1" style="stop-color:#FF8A36"/>
-</radialGradient>
-<path style="fill:url(#XMLID_24_);" d="M58.636,69.891C86.75,66.5,115,65.75,115,65.75V45.005c0-3.248-2.676-5.905-5.947-5.905  H69.342c-3.271,0-6.151,1.779-8.58,3.952l-1.033,0.924c-2.43,2.172-6.202,4.251-9.474,4.251H12.947C9.676,48.227,7,50.884,7,54.132  V84.75C7,84.75,30.521,73.281,58.636,69.891z"/>
-<linearGradient id="XMLID_25_" gradientUnits="userSpaceOnUse" x1="59.6372" y1="28.6401" x2="65.5115" y2="120.5861">
-       <stop offset="0" style="stop-color:#EBDBA6"/>
-       <stop offset="1" style="stop-color:#FF7512"/>
-</linearGradient>
-<path style="fill:url(#XMLID_25_);" d="M109.053,39.1H69.342c-3.271,0-6.151,1.779-8.58,3.952l-1.033,0.924  c-2.43,2.172-6.202,4.251-9.474,4.251H12.947C9.676,48.227,7,50.884,7,54.132v1c0-3.248,2.676-5.905,5.947-5.905h37.308  c3.271,0,7.044-2.079,9.474-4.251l1.033-0.924c2.429-2.173,5.309-3.952,8.58-3.952h39.711c3.271,0,5.947,2.657,5.947,5.905v-1  C115,41.757,112.324,39.1,109.053,39.1z"/>
-<linearGradient id="XMLID_26_" gradientUnits="userSpaceOnUse" x1="103.9541" y1="11.4053" x2="108.0303" y2="106.0095">
-       <stop offset="0" style="stop-color:#999999"/>
-       <stop offset="1" style="stop-color:#4D4D4D"/>
-</linearGradient>
-<rect x="106" y="39" style="opacity:0.15;fill:url(#XMLID_26_);" width="1" height="63"/>
-<path style="fill:#F3AF61;" d="M42,24c0,1.1-0.9,2-2,2H9c-1.1,0-2-0.9-2-2v-2c0-1.1,0.9-2,2-2h31c1.1,0,2,0.9,2,2V24z"/>
-<path style="fill:#CCCCCC;" d="M8.5,42C7.672,42,7,42.672,7,43.5S7.672,45,8.5,45s1.5-0.672,1.5-1.5S9.328,42,8.5,42z M17.5,42  c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S18.328,42,17.5,42z M26.5,42c-0.828,0-1.5,0.672-1.5,1.5  s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S27.328,42,26.5,42z M35.5,42c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5  S36.328,42,35.5,42z M44.5,42c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S45.328,42,44.5,42z M53.5,42  c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S54.328,42,53.5,42z"/>
-<path style="opacity:0.07;fill:#802600;" d="M8.5,51C7.672,51,7,51.672,7,52.5S7.672,54,8.5,54s1.5-0.672,1.5-1.5S9.328,51,8.5,51z   M17.5,51c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S18.328,51,17.5,51z M26.5,51c-0.828,0-1.5,0.672-1.5,1.5  s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S27.328,51,26.5,51z M35.5,51c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5  S36.328,51,35.5,51z M44.5,51c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S45.328,51,44.5,51z M53.5,51  c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S54.328,51,53.5,51z M62.5,51c-0.828,0-1.5,0.672-1.5,1.5  s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S63.328,51,62.5,51z M71.5,51c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5  S72.328,51,71.5,51z M80.5,51c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S81.328,51,80.5,51z M89.5,51  c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S90.328,51,89.5,51z M98.5,51c-0.828,0-1.5,0.672-1.5,1.5  s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S99.328,51,98.5,51z M62.5,42c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5  S63.328,42,62.5,42z M71.5,42c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S72.328,42,71.5,42z M80.5,42  c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S81.328,42,80.5,42z M89.5,42c-0.828,0-1.5,0.672-1.5,1.5  s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S90.328,42,89.5,42z M98.5,45c0.828,0,1.5-0.672,1.5-1.5S99.328,42,98.5,42S97,42.672,97,43.5  S97.672,45,98.5,45z M8.5,60C7.672,60,7,60.672,7,61.5S7.672,63,8.5,63s1.5-0.672,1.5-1.5S9.328,60,8.5,60z M17.5,60  c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S18.328,60,17.5,60z M26.5,60c-0.828,0-1.5,0.672-1.5,1.5  s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S27.328,60,26.5,60z M35.5,60c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5  S36.328,60,35.5,60z M44.5,60c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S45.328,60,44.5,60z M53.5,60  c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S54.328,60,53.5,60z M62.5,60c-0.828,0-1.5,0.672-1.5,1.5  s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S63.328,60,62.5,60z M71.5,60c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5  S72.328,60,71.5,60z M80.5,60c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S81.328,60,80.5,60z M89.5,60  c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S90.328,60,89.5,60z M98.5,60c-0.828,0-1.5,0.672-1.5,1.5  s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S99.328,60,98.5,60z M8.5,69C7.672,69,7,69.672,7,70.5S7.672,72,8.5,72s1.5-0.672,1.5-1.5  S9.328,69,8.5,69z M17.5,69c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S18.328,69,17.5,69z M26.5,69  c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S27.328,69,26.5,69z M35.5,69c-0.828,0-1.5,0.672-1.5,1.5  s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S36.328,69,35.5,69z M44.5,69c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5  S45.328,69,44.5,69z M53.5,69c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S54.328,69,53.5,69z M62.5,69  c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S63.328,69,62.5,69z M71.5,69c-0.828,0-1.5,0.672-1.5,1.5  s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S72.328,69,71.5,69z M80.5,69c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5  S81.328,69,80.5,69z M89.5,69c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S90.328,69,89.5,69z M98.5,69  c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S99.328,69,98.5,69z M8.5,78C7.672,78,7,78.672,7,79.5  S7.672,81,8.5,81s1.5-0.672,1.5-1.5S9.328,78,8.5,78z M17.5,78c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5  S18.328,78,17.5,78z M26.5,78c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S27.328,78,26.5,78z M35.5,78  c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S36.328,78,35.5,78z M44.5,78c-0.828,0-1.5,0.672-1.5,1.5  s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S45.328,78,44.5,78z M53.5,78c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5  S54.328,78,53.5,78z M62.5,78c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S63.328,78,62.5,78z M71.5,78  c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S72.328,78,71.5,78z M80.5,78c-0.828,0-1.5,0.672-1.5,1.5  s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S81.328,78,80.5,78z M89.5,78c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5  S90.328,78,89.5,78z M98.5,78c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S99.328,78,98.5,78z M8.5,87  C7.672,87,7,87.672,7,88.5S7.672,90,8.5,90s1.5-0.672,1.5-1.5S9.328,87,8.5,87z M17.5,87c-0.828,0-1.5,0.672-1.5,1.5  s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S18.328,87,17.5,87z M26.5,87c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5  S27.328,87,26.5,87z M35.5,87c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S36.328,87,35.5,87z M44.5,87  c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S45.328,87,44.5,87z M53.5,87c-0.828,0-1.5,0.672-1.5,1.5  s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S54.328,87,53.5,87z M62.5,87c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5  S63.328,87,62.5,87z M71.5,87c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S72.328,87,71.5,87z M80.5,87  c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S81.328,87,80.5,87z M89.5,87c-0.828,0-1.5,0.672-1.5,1.5  s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5S90.328,87,89.5,87z M98.5,87c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5  S99.328,87,98.5,87z"/>
-</svg>
\ No newline at end of file
diff --git a/Images/Icons/iconInfo.svg b/Images/Icons/iconInfo.svg
deleted file mode 100644 (file)
index 8234550..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 62 62" width="62" height="62" version="1.0">
-       <defs>
-               <linearGradient id="fieldGradient" gradientUnits="userSpaceOnUse" x1="42.9863" y1="7.01270" x2="22.0144" y2="51.9871">
-                       <stop offset="0.0" stop-color="#BCD6FE"/>
-                       <stop offset="1.0" stop-color="#6787D3"/>
-               </linearGradient>
-               <linearGradient id="edgeGradient" gradientUnits="userSpaceOnUse" x1="55.4541" y1="42.7529" x2="9.54710" y2="16.2485">
-                       <stop offset="0.0" stop-color="#3057A7"/>
-                       <stop offset="1.0" stop-color="#5A7AC6"/>
-               </linearGradient>
-               <radialGradient id="shadowGradient">
-                       <stop offset="0.0" stop-color="#C0C0C0"/>
-                       <stop offset="0.88" stop-color="#C0C0C0"/>
-                       <stop offset="1.0" stop-color="#C0C0C0" stop-opacity="0.0"/>
-               </radialGradient>
-       </defs>
-       <circle id="shadow" r="26.5" cy="29.5" cx="32.5" fill="url(#shadowGradient)" transform="matrix(1.0648,0.0,0.0,1.064822,-2.1,1.0864)"/>
-       <circle id="field" r="25.8" cx="31" cy="31" fill="url(#fieldGradient)" stroke="url(#edgeGradient)" stroke-width="2"/>
-       <g id="info" fill="white">
-               <polygon points="23,25 35,25 35,44 39,44 39,48 23,48 23,44 27,44 27,28 23,28 23,25"/>
-               <circle r="4" cx="31" cy="17"/>
-       </g>
-</svg>
\ No newline at end of file
diff --git a/Images/Icons/maximize.svg b/Images/Icons/maximize.svg
deleted file mode 100644 (file)
index b70604a..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   width="14"
-   height="14"
-   viewBox="0 0 14 14">
-       <path
-               style="fill:none;stroke:#ffffff;stroke-width:2"
-               d="m 2,2 10,0 0,10 -10,0 z"/>
-</svg>
diff --git a/Images/Icons/member.svg b/Images/Icons/member.svg
deleted file mode 100644 (file)
index af654a9..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-<?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"
-   width="64"
-   height="64"
-   viewBox="0 0 63.999998 63.999998"
-   id="svg2"
-   version="1.1"
-   inkscape:version="0.91 r13725"
-   sodipodi:docname="member.svg">
-  <defs
-     id="defs4" />
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="1.9604882"
-     inkscape:cx="-66.406882"
-     inkscape:cy="33.211154"
-     inkscape:document-units="px"
-     inkscape:current-layer="svg2"
-     showgrid="false"
-     fit-margin-top="0"
-     fit-margin-left="0"
-     fit-margin-right="0"
-     fit-margin-bottom="0"
-     units="px"
-     inkscape:window-width="1280"
-     inkscape:window-height="1009"
-     inkscape:window-x="0"
-     inkscape:window-y="0"
-     inkscape:window-maximized="1" />
-  <g
-     id="ctor">
-    <rect
-       style="opacity:1;fill:#3fff69;fill-opacity:1;stroke:#000000;stroke-width:6;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:0;stroke-dasharray:none;stroke-opacity:0.74509804"
-       id="rect4185"
-       width="58"
-       height="58"
-       x="3"
-       y="3" />
-    <text
-       sodipodi:linespacing="125%"
-       id="text4176"
-       y="51.758148"
-       x="7.4200573"
-       style="font-style:normal;font-weight:normal;font-size:57.0553093px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       xml:space="preserve"><tspan
-         y="51.758148"
-         x="7.4200573"
-         id="tspan4178"
-         sodipodi:role="line">#</tspan></text>
-  </g>
-  <circle
-     style="opacity:1;fill:#70bbff;fill-opacity:1;stroke:#000000;stroke-width:5.99999905;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:0;stroke-dasharray:none;stroke-opacity:0.74509804"
-     id="property"
-     cx="32"
-     cy="32"
-     r="29" />
-  <metadata
-     id="metadata4158">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:title></dc:title>
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <rect
-     style="opacity:1;fill:#ff543f;fill-opacity:1;stroke:#000000;stroke-width:6;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:0;stroke-dasharray:none;stroke-opacity:0.74509804"
-     id="method"
-     width="58"
-     height="58"
-     x="3"
-     y="3" />
-  <path
-     style="fill:#f7ff3f;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.06100774px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-     d="M 22.471298,1.892924 8.8054675,32.128113 30.276085,31.763018 10.90935,62.764759 56.012472,21.268821 30.415746,22.059981 47.587854,2.0447011 Z"
-     id="event"
-     inkscape:connector-curvature="0"
-     sodipodi:nodetypes="cccccccc" />
-</svg>
diff --git a/Images/Icons/minimize.svg b/Images/Icons/minimize.svg
deleted file mode 100644 (file)
index dc3dcd2..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   width="64"
-   height="64"
-   viewBox="0 0 14 14">
-       <path
-               style="fill:#ffffff;stroke:none"
-               d="m 1,6 12,0 0,4 -12,0 z"/>
-</svg>
diff --git a/Images/Icons/normalize.svg b/Images/Icons/normalize.svg
deleted file mode 100644 (file)
index b8b44bd..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   width="14"
-   height="14"
-   viewBox="0 0 14 14">
-<!--   <rect y="7" x="7" height="40" width="40"
-     style="opacity:1;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:3;stroke-opacity:1" />
-   <rect y="7" x="7" height="10" width="40"
-     style="opacity:1;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:3;stroke-opacity:1" />
-   <rect y="17" x="17" height="40" width="40"
-     style="opacity:1;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:3;stroke-opacity:1" />
-   <rect y="17" x="17" height="10" width="40"
-     style="opacity:1;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:3;stroke-opacity:1" />-->
-       <path
-               style="fill:none;stroke:#ffffff;stroke-width:1"
-               d="m 1,1 8,0 0,8 -8,0 z"/>
-       <path
-               style="fill:none;stroke:#ffffff;stroke-width:1"
-               d="m 4,4 8,0 0,8 -8,0 z"/>
-</svg>
diff --git a/Images/Icons/radiobutton.svg b/Images/Icons/radiobutton.svg
deleted file mode 100644 (file)
index b102b3e..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<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"
-   id="svg2"
-   width="64"
-   height="64"
-   viewBox="0 0 64 64"
-   version="1.1">
-  <metadata
-     id="metadata12">
-    <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></dc:title>
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <defs
-     id="defs10" />
-  <g
-     id="True">
-    <circle
-       r="30"
-       cy="32"
-       cx="32"
-       id="path4166"
-       style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.99999952;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:0;stroke-dasharray:none;stroke-opacity:1" />
-    <circle
-       r="22"
-       cy="32"
-       cx="32"
-       id="path4166-1"
-       style="opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:2.99999952;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:0;stroke-dasharray:none;stroke-opacity:1" />
-  </g>
-  <circle
-     style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.99999952;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:0;stroke-dasharray:none;stroke-opacity:1"
-     id="False"
-     cx="32"
-     cy="32"
-     r="30" />
-</svg>
diff --git a/Images/Icons/tetra.png b/Images/Icons/tetra.png
deleted file mode 100644 (file)
index b0c855a..0000000
Binary files a/Images/Icons/tetra.png and /dev/null differ
diff --git a/Images/Icons/updown.svg b/Images/Icons/updown.svg
deleted file mode 100644 (file)
index 0df8175..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<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"
-   version="1.1"
-   id="svg2"
-   width="44.717388"
-   height="31.938803"
-   viewBox="0 0 44.717389 31.938803">
-  <metadata
-     id="metadata11">
-    <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></dc:title>
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <defs
-     id="defs9" />
-  <g
-     transform="matrix(0.81305037,0,0,0.79847006,-3.6589183,-5.1900554)"
-     id="up">
-    <path
-       id="path4144"
-       d="M 32,9 7,44 57,44 Z"
-       style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
-  </g>
-  <g
-     transform="matrix(0.81305037,0,0,0.79847006,-3.6589183,-5.1900554)"
-     id="down">
-    <path
-       id="path4144-0"
-       d="M 7,9 57,9 32,44 Z"
-       style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
-  </g>
-</svg>
diff --git a/Images/button.svg b/Images/button.svg
deleted file mode 100644 (file)
index 314f63f..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
- <svg width="200" height="100">
-       <g id="normal">
-               <rect width="98%" height="98%" 
-                       rx="10px" ry="10px" x="2%" y="2%"
-                       style="fill:rgb(50,50,50);" />
-               <rect width="98%" height="98%" 
-                       rx="10px" ry="10px" 
-                       style="fill:rgb(200,200,200);" />
-       </g>
-       <g id="pressed">
-               <rect width="98%" height="98%" 
-                       rx="10px" ry="10px" x="2%" y="2%"
-                       style="fill:rgb(200,200,200);" />
-       </g>
-
-</svg> 
diff --git a/Images/crow0.svg b/Images/crow0.svg
deleted file mode 100644 (file)
index c621130..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<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"
-   height="35.987217"
-   width="51.116982"
-   version="1.1"
-   id="svg2">
-  <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></dc:title>
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <defs
-     id="defs6" />
-  <path
-     id="path2818"
-     d="m 36.232985,35.977162 c -0.02345,-0.0094 -0.04263,-0.04436 -0.04263,-0.07772 0,-0.03337 -0.04543,-0.117846 -0.100965,-0.187724 -0.05553,-0.06987 -0.10986,-0.152552 -0.120738,-0.183728 -0.04888,-0.140096 -0.547064,-0.441575 -0.740404,-0.448061 -0.01333,-6.73e-4 -0.0417,0.06441 -0.06301,0.144127 -0.0213,0.07971 -0.05448,0.164118 -0.0737,0.187567 -0.06807,0.08303 -0.2351,0.04596 -0.448164,-0.09947 -0.114492,-0.07815 -0.231452,-0.140793 -0.259915,-0.139198 -0.103032,0.0057 -0.22753,-0.0647 -0.284401,-0.160973 -0.105659,-0.178872 -0.451937,-0.41031 -0.613884,-0.41031 -0.11287,0 -0.378547,-0.121442 -0.488394,-0.223239 -0.06283,-0.05824 -0.129597,-0.08369 -0.219515,-0.08369 -0.191898,0 -0.291236,-0.05025 -0.332315,-0.168082 -0.02007,-0.05761 -0.05795,-0.104746 -0.08415,-0.104746 -0.02621,0 -0.07371,-0.02879 -0.105549,-0.06398 -0.03185,-0.03519 -0.108169,-0.07213 -0.169604,-0.08211 -0.219849,-0.03568 -0.937873,-0.414299 -0.993727,-0.524009 -0.01875,-0.03685 -0.103161,-0.143806 -0.187567,-0.237705 -0.189643,-0.210956 -0.537045,-0.371869 -0.741262,-0.343338 -0.710425,0.09925 -0.737631,0.100685 -1.030367,0.05449 -0.337983,-0.05334 -0.630446,-0.05889 -1.115893,-0.02117 -0.331487,0.02576 -0.347801,0.02387 -0.368967,-0.04283 -0.01219,-0.03838 0.0026,-0.154623 0.03266,-0.258318 0.03015,-0.103694 0.04455,-0.205124 0.03202,-0.225402 -0.04471,-0.07234 -0.314032,-0.0065 -0.532991,0.130268 -0.165667,0.103489 -0.230973,0.169125 -0.288563,0.290041 -0.07126,0.149603 -0.19268,0.232754 -0.339892,0.232754 -0.09327,0 -0.01149,-0.448641 0.108895,-0.597398 0.0301,-0.03719 0.045,-0.04843 0.03312,-0.02499 -0.01262,0.02492 3.4e-5,0.04263 0.03051,0.04263 0.03229,0 0.04463,-0.01945 0.03247,-0.05115 -0.0108,-0.02813 -0.0027,-0.05115 0.01813,-0.05115 0.02077,0 0.03776,-0.02034 0.03776,-0.04521 0,-0.05853 0.151433,-0.201223 0.181571,-0.171088 0.01268,0.01268 0.02305,0.003 0.02305,-0.02158 0,-0.05501 0.190827,-0.241992 0.218611,-0.214209 0.01107,0.01107 0.02012,0.0013 0.02012,-0.02169 0,-0.02299 0.01358,-0.03341 0.03018,-0.02314 0.0166,0.01026 0.07415,0.0046 0.127887,-0.01261 0.05374,-0.01721 0.185946,-0.03746 0.293797,-0.04502 0.154262,-0.01082 0.196092,-0.0032 0.196092,0.03533 0,0.03062 0.02017,0.04134 0.05362,0.02851 0.02949,-0.01132 0.08321,-0.0048 0.119365,0.01461 0.04469,0.02391 0.06573,0.02399 0.06573,0 0,-0.0546 0.166343,-0.02716 0.19016,0.03136 0.01696,0.04168 0.02726,0.03685 0.05065,-0.02383 0.03017,-0.0782 0.05209,-0.07969 0.33327,-0.02256 0.04625,0.0094 0.07104,0.0023 0.05918,-0.01685 -0.01918,-0.03103 0.105189,-0.09308 0.158609,-0.07913 0.01351,0.0035 0.0409,-0.02412 0.06088,-0.06145 0.01998,-0.03733 0.06279,-0.06787 0.09513,-0.06787 0.03235,0 0.07872,-0.0319 0.103074,-0.07089 0.03874,-0.06204 0.03597,-0.07306 -0.02225,-0.08828 -0.04068,-0.01065 -0.07465,-0.05808 -0.08746,-0.122132 -0.01151,-0.0576 -0.03098,-0.0947 -0.04325,-0.08243 -0.02243,0.02243 -0.09396,-0.07925 -0.134223,-0.190818 -0.01192,-0.03303 -0.05709,-0.06895 -0.100386,-0.07981 -0.0433,-0.01087 -0.08702,-0.04139 -0.09717,-0.06783 -0.01015,-0.02644 -0.03811,-0.04866 -0.06215,-0.04937 -0.02403,-6.72e-4 -0.09734,-0.06977 -0.162897,-0.153463 -0.06556,-0.08369 -0.141017,-0.152171 -0.167679,-0.152171 -0.02665,0 -0.03909,-0.0094 -0.02762,-0.02084 0.02949,-0.02949 -0.161533,-0.183774 -0.227545,-0.183774 -0.03567,0 -0.05475,-0.02971 -0.05475,-0.08526 0,-0.04689 -0.01667,-0.08526 -0.03705,-0.08526 -0.02039,0 -0.132932,-0.09206 -0.250118,-0.204591 -0.117184,-0.112527 -0.225744,-0.193097 -0.241239,-0.179042 -0.0155,0.01404 -0.01813,0.008 -0.0059,-0.01351 0.02148,-0.0376 -0.06692,-0.09775 -0.12476,-0.08487 -0.01546,0.0034 -0.01943,-0.0078 -0.0088,-0.02496 0.01062,-0.01717 -0.02277,-0.05853 -0.0742,-0.09191 -0.05142,-0.03337 -0.113546,-0.08877 -0.138053,-0.123093 -0.02451,-0.03432 -0.06672,-0.0624 -0.09378,-0.0624 -0.02707,0 -0.04922,-0.01355 -0.04922,-0.03012 0,-0.0438 -0.778285,-0.624964 -0.930964,-0.695162 -0.0729,-0.03352 -0.164401,-0.05081 -0.209278,-0.03955 -0.05655,0.01418 -0.102151,-0.0031 -0.15683,-0.05944 -0.0424,-0.0437 -0.06447,-0.05739 -0.04905,-0.03043 0.01542,0.02698 -0.03574,-0.0023 -0.113694,-0.06486 -0.140423,-0.112848 -0.199258,-0.210672 -0.162485,-0.270173 0.01048,-0.01696 -0.0034,-0.03946 -0.03092,-0.05001 -0.03157,-0.0121 -0.04839,-0.06147 -0.04566,-0.133995 0.0046,-0.123415 -0.115972,-0.333547 -0.242202,-0.421962 -0.03969,-0.0278 -0.06324,-0.06494 -0.05237,-0.08255 0.01089,-0.01761 -0.0042,-0.04121 -0.03354,-0.05247 -0.02932,-0.01125 -0.05331,-0.04833 -0.05331,-0.0824 0,-0.03407 -0.03837,-0.107533 -0.08526,-0.163263 -0.07704,-0.09156 -0.08519,-0.130424 -0.08459,-0.403332 0.0011,-0.467434 0.102818,-0.951299 0.346875,-1.649081 0.133708,-0.382291 0.234679,-0.776483 0.280602,-1.095504 0.01999,-0.138863 0.01188,-0.170521 -0.06808,-0.265547 -0.09126,-0.108463 -0.277674,-0.207699 -0.390138,-0.207699 -0.03326,0 -0.167911,-0.04572 -0.299229,-0.101598 -0.334854,-0.142493 -0.698295,-0.199641 -1.524701,-0.239741 -0.393891,-0.01911 -0.856189,-0.05756 -1.027322,-0.08543 -0.171134,-0.02796 -0.404168,-0.05076 -0.517855,-0.05076 -0.113686,0 -0.249901,-0.01718 -0.302703,-0.03821 -0.0528,-0.02101 -0.22913,-0.0397 -0.391836,-0.04152 -0.16271,-0.0018 -0.288412,-0.01532 -0.27934,-0.03 0.0091,-0.01468 -0.01127,-0.02647 -0.0452,-0.02621 -0.03393,2.24e-4 -0.315468,-0.0481 -0.625641,-0.107494 l -0.563945,-0.107977 -0.33979,0.10758 c -0.186882,0.05917 -0.349511,0.107539 -0.361388,0.107494 -0.04086,-1.36e-4 -0.05638,-0.13324 -0.01741,-0.149221 0.02145,-0.0088 -0.0023,-0.01721 -0.05276,-0.01869 -0.05047,-0.0015 -0.100161,0.01089 -0.110412,0.02747 -0.03208,0.05191 -0.458126,0.118498 -0.505769,0.07904 -0.02811,-0.02328 -0.09385,-0.0242 -0.195783,-0.0028 -0.08441,0.01777 -0.280073,0.0495 -0.434816,0.07054 -0.154743,0.02104 -0.281352,0.05283 -0.281352,0.07068 0,0.01786 -0.02302,0.02362 -0.05115,0.01281 -0.02814,-0.0108 -0.05123,-0.0086 -0.05131,0.0049 0,0.01348 -0.05615,0.02741 -0.124603,0.03097 -0.06845,0.0036 -0.1336,0.01891 -0.144786,0.0341 -0.02606,0.03542 -0.139983,0.04146 -0.796184,0.04221 -0.297591,4.49e-4 -0.537126,0.01439 -0.537126,0.0315 0,0.01698 -0.134282,0.03143 -0.298403,0.0321 -0.369505,0.0015 -0.539084,0.01992 -0.844055,0.09164 -0.131298,0.03088 -0.373004,0.06513 -0.537126,0.0761 -0.164122,0.01097 -0.298404,0.03207 -0.298404,0.04687 0,0.01481 -0.05371,0.0182 -0.119361,0.0076 -0.08039,-0.01304 -0.119361,-0.0061 -0.119361,0.02122 0,0.02232 -0.01443,0.03166 -0.03208,0.02075 -0.03408,-0.02106 -0.587009,0.111706 -0.615884,0.147893 -0.0094,0.01176 -0.04775,0.02527 -0.08526,0.03003 -0.319552,0.04061 -0.388045,0.05571 -0.371812,0.08197 0.01026,0.01661 -0.02466,0.02725 -0.07759,0.02367 -0.107275,-0.0073 -0.331986,0.114563 -0.292219,0.15843 0.014,0.01544 0.0067,0.01729 -0.01626,0.0041 -0.03986,-0.0229 -0.410541,0.170723 -0.776766,0.405746 -0.09378,0.06018 -0.400713,0.229852 -0.682064,0.377042 -0.8431486,0.441091 -1.5106691,0.786933 -1.9438848,1.00712 -0.331279,0.168378 -0.7656083,0.411685 -1.2106655,0.678201 -0.1208071,0.07234 -0.7235464,0.348753 -1.0060453,0.461358 -0.1688108,0.06729 -0.3529682,0.143067 -0.4092389,0.168389 -0.3782305,0.170213 -0.4488005,0.204855 -0.4944967,0.24276 -0.1118065,0.09275 -0.7795227,0.48269 -0.974639,0.569184 -0.1140235,0.05055 -0.3212008,0.108223 -0.4603938,0.12817 -0.2794774,0.04005 -0.6793677,0.03386 -0.6793677,-0.01051 0,-0.01562 -0.014897,-0.01916 -0.033103,-0.0079 -0.018206,0.01125 -0.04289,-0.01852 -0.054852,-0.0662 -0.011962,-0.04766 -0.028767,-0.08665 -0.037344,-0.08665 -0.027842,0 -0.1640932,0.0777 -0.1816285,0.103583 -0.024028,0.03546 -0.2704515,0.135139 -0.3340901,0.135139 -0.040327,0 -0.033244,-0.02142 0.029742,-0.08996 l 0.082677,-0.08996 -0.1534646,0.02493 c -0.084405,0.01371 -0.2762361,0.02752 -0.4262904,0.0307 -0.1617809,0.0034 -0.3133657,0.02625 -0.3724277,0.0561 -0.076685,0.03876 -0.1028397,0.04063 -0.113677,0.0081 -0.00774,-0.02322 -0.050258,-0.04223 -0.09448,-0.04223 -0.044221,0 -0.090781,-0.0168 -0.1034652,-0.03732 -0.012684,-0.02052 -0.05963,-0.03032 -0.1043224,-0.02178 -0.044694,0.0085 -0.0812605,0.0028 -0.0812605,-0.01277 0,-0.01557 -0.0226251,-0.01963 -0.0502787,-0.009 -0.0276536,0.01062 -0.0747891,-0.0052 -0.10474605,-0.03517 -0.0299569,-0.02996 -0.0836695,-0.05446 -0.11936206,-0.05446 -0.0755134,0 -0.16300798,-0.155442 -0.14396948,-0.255775 0.0216458,-0.114071 0.0858903,-0.269677 0.13551736,-0.328235 0.0258287,-0.03048 0.0424846,-0.07582 0.0370134,-0.100762 -0.005471,-0.02494 0.0126179,-0.04604 0.0401989,-0.04689 0.0275816,-8.75e-4 0.0695576,-0.03992 0.0932812,-0.08681 0.0237239,-0.04689 0.0433594,-0.07187 0.0436366,-0.05551 2.7333e-4,0.01638 0.0233532,0.0108 0.0512819,-0.01239 0.0279281,-0.02318 0.0409047,-0.05812 0.0288344,-0.07765 -0.0120695,-0.01954 -0.00597,-0.02563 0.013563,-0.01355 0.03826,0.02364 0.1334119,-0.06902 0.102556,-0.09987 -0.010234,-0.01023 -0.081291,0.01337 -0.15790503,0.05246 -0.19132318,0.0976 -0.53029094,0.131726 -0.60948002,0.06135 -0.040574,-0.03605 -0.10602968,-0.04828 -0.20760549,-0.03876 L 0,26.723956 0.13129745,26.603285 c 0.20194096,-0.185598 1.15569925,-0.834706 1.22646285,-0.834706 0.017944,0 1.0011722,-0.593762 1.1596288,-0.700289 l 0.1062908,-0.07146 -0.097498,-0.04316 c -0.075194,-0.03329 -0.09082,-0.05618 -0.068306,-0.100101 0.016056,-0.03132 0.038207,-0.148677 0.049225,-0.2608 0.013936,-0.141813 0.038705,-0.216631 0.081377,-0.245814 0.1348325,-0.09221 0.317117,-0.268214 0.317117,-0.306188 0,-0.04333 -0.2144179,0.01817 -0.8473768,0.243035 -0.1940842,0.06895 -0.3609084,0.117337 -0.3707213,0.107524 -0.030038,-0.03004 0.1889381,-0.28351 0.3932649,-0.455219 0.1064018,-0.08942 0.2148835,-0.182797 0.2410706,-0.207519 0.134978,-0.127412 0.6824316,-0.46318 1.0116807,-0.620491 0.2054297,-0.09815 0.4118743,-0.205241 0.4587663,-0.237974 0.046892,-0.03274 0.2270451,-0.133333 0.40034,-0.223546 0.1732947,-0.09022 0.3093674,-0.169742 0.3023838,-0.176726 -0.00698,-0.007 -0.1087422,0.01965 -0.226129,0.0592 -0.1501313,0.05057 -0.2241353,0.06119 -0.249524,0.0358 -0.025388,-0.02539 -0.024637,-0.03609 0.00253,-0.03609 0.021244,0 0.048451,-0.03096 0.060459,-0.06879 0.019185,-0.06045 0.1680893,-0.221549 0.4635947,-0.501568 0.048755,-0.0462 0.1428871,-0.117089 0.2091823,-0.157532 0.2161395,-0.131856 0.3951126,-0.257621 0.4169899,-0.29302 0.022754,-0.03682 1.0610754,-0.562441 1.1881729,-0.601483 0.04125,-0.01267 0.1911105,-0.08059 0.3330257,-0.150923 0.1419153,-0.07034 0.2933966,-0.139111 0.3366242,-0.152832 0.043226,-0.01372 0.1463559,-0.07271 0.2291753,-0.131083 0.1199707,-0.08456 0.1625792,-0.09864 0.2096072,-0.06927 0.047284,0.02953 0.1538875,-0.0087 0.5358933,-0.192258 0.2622766,-0.126017 0.5689448,-0.264972 0.6814862,-0.308789 0.1125401,-0.04382 0.2249981,-0.09985 0.2499076,-0.124513 0.081951,-0.08115 0.1773194,-0.116582 0.3449729,-0.128175 0.1131113,-0.0078 0.1886589,-0.03475 0.2391522,-0.08524 0.040595,-0.0406 0.1438461,-0.118225 0.2294472,-0.172512 0.1733184,-0.109916 0.2284002,-0.176259 0.2623733,-0.316014 0.01334,-0.05486 0.06939,-0.123095 0.132975,-0.161862 0.06158,-0.03755 0.08742,-0.0685 0.05876,-0.07038 -0.08661,-0.0057 0.555593,-0.16351 0.673539,-0.16552 0.06836,-0.0011 0.110835,-0.01922 0.110835,-0.0471 0,-0.02486 0.03789,-0.08081 0.08421,-0.124319 0.09656,-0.09071 0.08465,-0.1374 -0.03506,-0.1374 -0.139172,0 -0.09502,-0.04884 0.164003,-0.181411 0.306614,-0.156928 0.449342,-0.161093 0.841624,-0.02456 0.28366,0.09873 0.288206,0.09917 0.345032,0.03364 0.03167,-0.03652 0.06838,-0.06639 0.08158,-0.06639 0.02544,0 0.444123,-0.288445 0.530711,-0.36562 0.02814,-0.02508 0.1816,-0.14031 0.341033,-0.256071 0.159432,-0.115763 0.427996,-0.311618 0.596806,-0.435234 0.324997,-0.237988 0.519973,-0.363211 0.852581,-0.547569 0.112541,-0.06238 0.272663,-0.181743 0.355823,-0.265252 l 0.151204,-0.151834 -0.279091,0.01616 c -0.295876,0.01713 -0.322422,0.0016 -0.24494,-0.143172 0.05332,-0.09963 0.736112,-0.634181 1.100461,-0.86154 0.05926,-0.03698 0.08714,-0.07645 0.07227,-0.102311 -0.01332,-0.02315 -0.01159,-0.03067 0.0038,-0.01669 0.01542,0.01398 0.07543,-0.01065 0.133354,-0.05471 0.219267,-0.166827 1.171023,-0.727058 1.367134,-0.804733 0.258942,-0.102562 0.861798,-0.404573 0.886111,-0.443911 0.0101,-0.01634 0.121786,-0.06366 0.248193,-0.105146 0.287589,-0.09439 0.30873,-0.106826 0.229061,-0.134772 -0.06732,-0.02362 -0.07326,-0.02127 0.880461,-0.347551 0.239998,-0.08211 0.429331,-0.156371 0.420748,-0.165033 -0.0086,-0.0087 0.03161,-0.01751 0.08933,-0.01966 0.05771,-0.0022 0.121598,-0.02517 0.141958,-0.05115 0.02171,-0.0277 0.120634,-0.05234 0.239187,-0.05957 0.210669,-0.01285 0.602989,-0.173276 0.928324,-0.379597 0.08567,-0.05433 0.264945,-0.123611 0.398397,-0.153965 0.133453,-0.03035 0.2584,-0.06637 0.277662,-0.08004 0.01927,-0.01367 0.09641,-0.04558 0.171433,-0.07092 0.07503,-0.02534 0.173013,-0.07458 0.217746,-0.109424 0.04473,-0.03484 0.09298,-0.06335 0.107228,-0.06335 0.01425,0 0.07348,-0.04445 0.131636,-0.09877 0.113963,-0.106457 0.351444,-0.240935 0.463279,-0.26234 0.038,-0.0073 0.08445,-0.03321 0.10321,-0.05764 0.01875,-0.02443 0.09498,-0.08983 0.169391,-0.145337 0.194156,-0.144837 0.214536,-0.162058 0.478569,-0.404414 0.251516,-0.230862 0.606848,-0.516232 1.227718,-0.98599 0.344093,-0.2603468 0.589539,-0.4332454 1.258562,-0.886573 0.133088,-0.09018 0.449157,-0.2640469 0.702374,-0.3863728 0.253216,-0.1223245 0.529451,-0.2557186 0.613857,-0.2964302 0.08441,-0.04071 0.158614,-0.085626 0.16491,-0.099811 0.0063,-0.014184 0.02548,-0.017112 0.04263,-0.00653 0.01716,0.010605 0.0312,0.00558 0.0312,-0.011156 0,-0.016741 0.02005,-0.030435 0.04455,-0.030435 0.0245,0 0.158784,-0.058252 0.298402,-0.129445 0.139619,-0.071195 0.430335,-0.1978034 0.646038,-0.2813523 0.215704,-0.083549 0.491939,-0.1954213 0.613858,-0.2486049 0.121921,-0.053185 0.306077,-0.1321049 0.40924,-0.1753788 0.103162,-0.043273 0.29828,-0.1359289 0.433601,-0.2058975 0.135324,-0.069969 0.361685,-0.1753594 0.503025,-0.2342005 0.141344,-0.058844 0.256987,-0.118339 0.256987,-0.1322199 0,-0.013882 0.01945,-0.02524 0.04319,-0.02524 0.02377,0 0.303834,-0.1227275 0.622385,-0.2727296 0.318551,-0.1500017 0.675102,-0.3078947 0.792333,-0.3508747 0.117228,-0.042978 0.213145,-0.092292 0.213145,-0.1095837 0,-0.017291 0.01918,-0.027759 0.04263,-0.02326 0.06969,0.013374 0.594379,-0.1884232 0.639435,-0.2459351 0.0094,-0.011971 0.04007,-0.021527 0.06821,-0.021238 0.121558,0.00127 0.660662,-0.1945862 0.918837,-0.3337747 0.241294,-0.1300895 0.587545,-0.3830342 0.701059,-0.5121391 0.01875,-0.021333 0.06131,-0.048999 0.09456,-0.061479 0.03325,-0.012481 0.07001,-0.047591 0.08169,-0.078024 0.02692,-0.070138 0.174568,-0.219039 0.217202,-0.219039 0.01774,0 0.05143,-0.030691 0.07486,-0.068207 0.02342,-0.037513 0.06448,-0.068206 0.09123,-0.068206 0.02675,0 0.03887,-0.00976 0.02696,-0.021682 -0.01192,-0.011924 0.05783,-0.09633 0.155007,-0.1875678 0.09718,-0.091238 0.161929,-0.1668596 0.143886,-0.168049 -0.01803,-0.00118 0.0028,-0.016405 0.04612,-0.033815 0.04747,-0.019039 0.06915,-0.047456 0.05441,-0.071314 -0.01348,-0.021822 -0.0098,-0.030553 0.0083,-0.019409 0.01801,0.011138 0.09144,-0.040204 0.163151,-0.1140923 0.0717,-0.073888 0.117738,-0.1343421 0.10229,-0.1343421 -0.01546,0 0.02072,-0.036015 0.08038,-0.080032 0.05967,-0.044017 0.09718,-0.091336 0.08336,-0.105152 -0.01383,-0.013815 -0.0095,-0.020006 0.0097,-0.013752 0.04939,0.01615 0.223702,-0.1274928 0.194271,-0.1600887 -0.01342,-0.014875 -0.0072,-0.017247 0.01376,-0.00527 0.06096,0.034779 0.607999,-0.4589859 0.563584,-0.5087016 -0.0121,-0.013544 -0.0039,-0.014234 0.01831,-0.00155 0.02248,0.012885 0.06394,-0.010665 0.09378,-0.053276 0.02942,-0.042001 0.05349,-0.064232 0.05349,-0.049403 0,0.035425 0.155483,-0.078134 0.314002,-0.2293306 0.06954,-0.066327 0.191209,-0.1634486 0.270384,-0.2158258 l 0.143933,-0.095226 -0.09461,-0.017052 c -0.09208,-0.016595 -0.08962,-0.020213 0.09234,-0.1351948 0.102836,-0.064979 0.180276,-0.1355869 0.172099,-0.1569075 -0.0082,-0.021322 0.03576,-0.063723 0.09766,-0.094226 l 0.112534,-0.055461 -0.110835,-7.738e-4 c -0.121681,-8.545e-4 -0.148951,-0.052289 -0.04518,-0.085223 0.03611,-0.011461 0.177308,-0.1287936 0.313783,-0.260741 0.136473,-0.1319475 0.294923,-0.2638643 0.352116,-0.2931487 0.05718,-0.029285 0.112307,-0.066044 0.122484,-0.081687 0.01017,-0.015643 0.08691,-0.0653452 0.170517,-0.1104495 0.08361,-0.0451035 0.148684,-0.0976873 0.144617,-0.11685267 -0.0041,-0.0191645 0.0331,-0.0450046 0.08257,-0.0574227 0.04948,-0.0124174 0.127764,-0.0523182 0.173974,-0.0886698 0.04622,-0.0363507 0.110775,-0.0660921 0.143466,-0.0660921 0.08441,0 0.311151,-0.09789 0.391757,-0.16912543 0.07224,-0.0638419 0.511584,-0.24011339 0.598463,-0.24011339 0.02826,0 0.08528,-0.0237481 0.126716,-0.0527741 0.137291,-0.09616158 0.661132,-0.14352007 1.525634,-0.1379271367 0.792642,0.005129127 0.827085,0.008206607 1.091305,0.0975625367 0.150053,0.050747 0.291903,0.09246343 0.315215,0.09270283 0.09396,9.6895e-4 0.976611,0.42511458 1.100071,0.52862744 0.02811,0.02359 0.159498,0.0947176 0.291932,0.15806233 0.235834,0.11281152 0.25372,0.12719829 0.25372,0.20412699 0,0.023291 0.03271,0.029587 0.08526,0.016402 0.05003,-0.012556 0.08526,-0.00673 0.08526,0.014086 0,0.019516 0.04219,0.054229 0.09378,0.077137 0.05158,0.022909 0.123537,0.06862 0.159895,0.1015785 0.03637,0.032959 0.08624,0.059926 0.110835,0.059926 0.02459,0 0.04471,0.012883 0.04471,0.028629 0,0.037801 0.156041,0.1077839 0.240323,0.1077839 0.03664,0 0.0666,0.015347 0.0666,0.034103 0,0.050098 0.102113,0.041678 0.103394,-0.00853 4.52e-4,-0.025512 0.01972,-0.01804 0.04753,0.018611 0.03352,0.044207 0.07116,0.055035 0.135327,0.038932 0.05776,-0.014496 0.08889,-0.00837 0.08889,0.017504 0,0.021897 0.01498,0.030556 0.0333,0.019242 0.0461,-0.028494 0.444224,0.057046 0.423279,0.090944 -0.0093,0.015101 0.01841,0.027008 0.06163,0.02646 0.09589,-0.00121 0.512136,0.096881 0.42817,0.100902 -0.03285,0.00157 -0.05968,0.016565 -0.05968,0.033318 0,0.03259 0.410853,0.1157062 0.437957,0.0886 0.0089,-0.00889 0.03294,-0.00257 0.0534,0.014024 0.06789,0.055028 0.736829,0.2457834 0.776319,0.2213777 0.02148,-0.013281 0.02951,-0.00894 0.01796,0.00974 -0.01146,0.018537 0.130919,0.1054296 0.316393,0.1930939 0.185473,0.087664 0.472547,0.2615323 0.637942,0.3863739 0.1654,0.1248417 0.319902,0.2270363 0.343352,0.2270984 0.02346,6.81e-5 0.03547,0.00725 0.02675,0.015975 -0.0087,0.00872 0.03686,0.077444 0.101278,0.1527108 0.06442,0.075267 0.110018,0.148369 0.101315,0.162449 -0.0087,0.014079 0.0071,0.034399 0.03515,0.045154 0.02802,0.010755 0.0512,8.546e-4 0.05148,-0.022004 4.51e-4,-0.032265 0.0064,-0.032371 0.02662,-4.693e-4 0.01435,0.022595 0.02243,0.1068802 0.01796,0.1872996 -0.0057,0.1024476 0.0013,0.1309839 0.024,0.09533 0.02653,-0.041988 0.03272,-0.038959 0.03537,0.017319 0.0018,0.037513 0.01096,0.049024 0.0204,0.025578 0.0094,-0.023446 0.02802,-0.042629 0.04119,-0.042629 0.03781,0 0.03799,0.1327189 0,0.1560674 -0.02003,0.012395 -0.01119,0.037667 0.0217,0.061689 0.03979,0.029097 0.04904,0.067036 0.03244,0.1331389 -0.01277,0.050846 -0.03781,0.092447 -0.05563,0.092447 -0.01783,0 -0.02058,-0.019183 -0.0061,-0.042629 0.01444,-0.023446 -0.01394,-0.016324 -0.06312,0.015829 -0.08648,0.056549 -0.219373,0.09752 -0.342779,0.1056776 -0.0328,0.00217 -0.05968,0.015832 -0.05968,0.030358 0,0.014528 -0.03452,0.026195 -0.07673,0.025926 -0.04219,-2.688e-4 -0.12277,0.00591 -0.17904,0.013737 -0.971882,0.1351175 -1.779858,0.2316536 -2.0803,0.2485518 -0.206324,0.011606 -0.393648,0.035672 -0.416267,0.053482 -0.02261,0.017814 -0.05578,0.023341 -0.07366,0.012286 -0.05845,-0.036117 -0.137867,0.016695 -0.115393,0.076729 0.01854,0.049502 0.01385,0.050803 -0.03628,0.010053 -0.03979,-0.032383 -0.05754,-0.034549 -0.05754,-0.00703 0,0.021875 -0.01918,0.037283 -0.04264,0.034238 -0.113695,-0.014764 -0.168405,0.00487 -0.149657,0.0537 0.02179,0.056803 -0.03027,0.070789 -0.06349,0.017051 -0.01159,-0.018757 -0.0547,-0.032889 -0.0958,-0.031409 -0.04111,0.00149 -0.0564,0.010143 -0.03402,0.019253 0.02238,0.00911 0.03199,0.039256 0.02134,0.066986 -0.01674,0.043659 -0.02757,0.043 -0.0805,-0.00493 -0.04614,-0.041755 -0.07725,-0.046733 -0.126687,-0.020273 -0.03605,0.019289 -0.100448,0.02594 -0.143132,0.014777 -0.06857,-0.017931 -0.07496,-0.010784 -0.05491,0.061432 0.02026,0.072941 0.01773,0.075587 -0.02355,0.024614 -0.043,-0.053101 -0.05392,-0.052267 -0.155229,0.011876 -0.05993,0.037942 -0.108954,0.096734 -0.108954,0.1306499 0,0.044877 -0.01859,0.056808 -0.0682,0.04383 -0.0459,-0.012002 -0.06821,-0.00104 -0.06821,0.033502 0,0.031463 -0.04526,0.059826 -0.11689,0.073265 -0.0945,0.017728 -0.121158,0.041367 -0.139184,0.1234405 -0.02175,0.099065 -0.131379,0.1912377 -0.208964,0.1757021 -0.0213,-0.00429 -0.04769,0.015535 -0.05861,0.044002 -0.01092,0.028466 -0.0342,0.051758 -0.05175,0.051758 -0.03502,0 -0.139325,0.089285 -0.496709,0.4251098 -0.130107,0.1222664 -0.264395,0.2311337 -0.298403,0.241927 -0.03401,0.010793 -0.0623,0.045447 -0.06289,0.077007 -6.73e-4,0.031562 -0.0658,0.1065697 -0.144939,0.1666874 -0.270923,0.2058155 -0.531097,0.4853767 -0.510157,0.5481845 0.0076,0.022891 -0.0026,0.041625 -0.02258,0.041625 -0.02005,0 -0.05384,0.069059 -0.0751,0.1534642 -0.02126,0.084405 -0.05168,0.153465 -0.06763,0.153465 -0.01593,0 -0.02014,0.023019 -0.0093,0.051153 0.0108,0.028133 0.0056,0.051153 -0.01149,0.051153 -0.01712,0 -0.03115,0.034533 -0.03119,0.076733 0,0.1328989 -0.05393,0.4006339 -0.07758,0.3860182 -0.02005,-0.012388 -0.02725,0.1344432 -0.04256,0.8672752 -0.002,0.1031621 -0.01694,0.1959073 -0.03288,0.2061001 -0.03087,0.019749 -0.0581,0.1355871 -0.06226,0.2648322 -0.0013,0.043314 -0.0177,0.069369 -0.03625,0.057909 -0.01933,-0.011951 -0.02505,0.00175 -0.0134,0.03209 0.01118,0.029109 0.0038,0.052929 -0.01638,0.052929 -0.02017,0 -0.02725,0.024567 -0.01573,0.054598 0.01151,0.030024 0.004,0.065088 -0.01676,0.077907 -0.02074,0.012818 -0.04479,0.099111 -0.05345,0.1917602 -0.0087,0.092648 -0.03066,0.1734248 -0.0489,0.1795037 -0.01824,0.00606 -0.02536,0.040824 -0.01584,0.077209 0.01077,0.041208 -0.0034,0.074092 -0.03753,0.087197 -0.03015,0.01157 -0.04634,0.03478 -0.03596,0.05157 0.01038,0.0168 0.005,0.03053 -0.01205,0.03053 -0.017,0 -0.03228,0.04742 -0.03393,0.105393 -0.0051,0.179718 -0.117438,0.644115 -0.15081,0.623489 -0.01741,-0.01076 -0.02813,0.0011 -0.02381,0.02649 0.0043,0.02533 -0.0024,0.08442 -0.01478,0.131309 -0.01244,0.04689 -0.02923,0.154317 -0.03733,0.238722 -0.03648,0.380211 -0.166541,0.813049 -0.262056,0.87208 -0.01658,0.01025 -0.03014,0.06376 -0.03014,0.118927 0,0.05516 -0.01494,0.100297 -0.03323,0.100297 -0.04322,0 -0.145532,0.197792 -0.122006,0.23586 0.01,0.01608 -0.0048,0.04821 -0.0327,0.07138 -0.02793,0.02318 -0.05078,0.06201 -0.05078,0.08628 0,0.02428 -0.01521,0.04926 -0.03381,0.05551 -0.01859,0.0063 -0.03965,0.06171 -0.0468,0.123232 -0.0071,0.06153 -0.03801,0.139504 -0.06858,0.173284 -0.03057,0.03378 -0.04532,0.07168 -0.03278,0.08423 0.01255,0.01254 0.0024,0.02281 -0.02266,0.02281 -0.02501,0 -0.03585,0.0096 -0.0241,0.02137 0.0306,0.0306 -0.07344,0.220798 -0.170284,0.311282 -0.04526,0.04228 -0.07383,0.09055 -0.06351,0.107262 0.01033,0.01671 -0.0042,0.03918 -0.03219,0.04993 -0.02803,0.01075 -0.05096,0.05164 -0.05096,0.09084 0,0.03921 -0.01459,0.06228 -0.03239,0.05127 -0.03561,-0.022 -0.113081,0.09788 -0.08282,0.128147 0.01035,0.01034 -0.02074,0.04474 -0.06911,0.07642 -0.04835,0.03169 -0.08004,0.07036 -0.0704,0.08595 0.01898,0.03069 -0.114371,0.168819 -0.162961,0.168819 -0.01633,0 -0.02025,0.01524 -0.0088,0.03387 0.01151,0.01863 -0.03329,0.0897 -0.09956,0.157928 -0.06627,0.06823 -0.110938,0.139503 -0.09927,0.158378 0.01168,0.01887 -0.01552,0.06424 -0.06042,0.100806 -0.0449,0.03656 -0.05862,0.05631 -0.03048,0.04387 0.02814,-0.01243 0.01662,0.0079 -0.02558,0.04514 -0.0422,0.03726 -0.07673,0.08078 -0.07673,0.09671 0,0.01593 -0.03129,0.0485 -0.06953,0.07238 -0.03825,0.02388 -0.06135,0.05666 -0.05135,0.07284 0.01,0.01618 -0.0057,0.03859 -0.03494,0.0498 -0.02921,0.01121 -0.04333,0.03622 -0.03137,0.05557 0.01196,0.01935 0.0028,0.03097 -0.02039,0.02582 -0.02317,-0.0052 -0.05348,0.02899 -0.06734,0.07589 -0.01387,0.04689 -0.02673,0.07265 -0.0286,0.05724 -0.0047,-0.0388 -0.105707,0.06596 -0.105707,0.109636 0,0.01944 -0.03113,0.05199 -0.06916,0.07235 -0.03805,0.02035 -0.06111,0.05004 -0.05127,0.06597 0.0099,0.01593 -0.03193,0.07271 -0.09283,0.126176 -0.0609,0.05347 -0.118399,0.112566 -0.127777,0.131323 -0.0094,0.01876 -0.0255,0.03129 -0.03584,0.02784 -0.01033,-0.0034 -0.03831,0.02502 -0.0622,0.06325 -0.03566,0.0571 -0.03535,0.06485 0.0018,0.0434 0.05754,-0.03329 -0.100394,0.1488 -0.202424,0.233387 -0.04238,0.03514 -0.06834,0.078 -0.05767,0.09525 0.01067,0.01725 -0.0028,0.03137 -0.02973,0.03137 -0.05121,0 -0.198718,0.175689 -0.238939,0.28459 -0.01279,0.0346 -0.05386,0.07092 -0.09128,0.08071 -0.03742,0.0098 -0.06803,0.03258 -0.06803,0.05064 0,0.01807 -0.09548,0.127541 -0.212171,0.243271 -0.116693,0.115729 -0.208771,0.221926 -0.204617,0.235994 0.0042,0.01407 -0.0136,0.02558 -0.03946,0.02558 -0.0419,0 -0.36223,0.342153 -0.36223,0.386912 0,0.01812 -0.168333,0.207786 -0.434598,0.489667 -0.0797,0.08438 -0.134927,0.169585 -0.122716,0.189342 0.01221,0.01976 0.0063,0.02606 -0.01324,0.01401 -0.01949,-0.01205 -0.148957,0.09803 -0.287676,0.244627 -0.138717,0.146595 -0.276317,0.280693 -0.305775,0.297993 -0.113761,0.06682 -0.575254,0.510672 -0.575254,0.553274 0,0.0247 -0.01457,0.0359 -0.03239,0.0249 -0.01781,-0.01102 -0.04944,0.01184 -0.07028,0.05078 -0.02084,0.03893 -0.07624,0.08538 -0.123127,0.103201 -0.04688,0.01782 -0.07681,0.04604 -0.06651,0.06271 0.01031,0.01667 0,0.04609 -0.02352,0.06537 -0.04179,0.03468 -0.06108,0.04086 -0.127513,0.04086 -0.01875,0 -0.03027,0.01782 -0.02558,0.03961 0.0047,0.02178 -0.02216,0.04864 -0.05968,0.05968 -0.09596,0.02823 -0.460392,0.278998 -0.460392,0.316789 0,0.01721 -0.01255,0.02353 -0.02789,0.01405 -0.01535,-0.0095 -0.06906,0.02093 -0.119362,0.06757 -0.05031,0.04665 -0.09193,0.07268 -0.09251,0.05785 -6.72e-4,-0.01482 -0.01667,-6.8e-5 -0.0358,0.03272 -0.01911,0.03282 -0.06469,0.05968 -0.101275,0.05968 -0.03659,0 -0.09465,0.02686 -0.129032,0.05968 -0.03439,0.03282 -0.08427,0.06436 -0.110835,0.07008 -0.02657,0.0057 -0.06461,0.03156 -0.08453,0.05742 -0.01992,0.02586 -0.07746,0.05738 -0.127885,0.07003 -0.05042,0.01265 -0.09168,0.03925 -0.09168,0.0591 0,0.01985 -0.0097,0.02636 -0.02162,0.01447 -0.04327,-0.04327 -0.532043,0.244878 -0.72163,0.425432 -0.107024,0.101924 -0.294339,0.269485 -0.416257,0.372357 -0.351072,0.296226 -0.477445,0.419441 -0.477445,0.465526 0,0.02358 -0.01248,0.03903 -0.02774,0.03434 -0.03696,-0.01136 -0.401163,0.357536 -0.389174,0.394188 0.0052,0.01575 -0.0044,0.02012 -0.0213,0.0097 -0.01687,-0.01042 -0.120842,0.08723 -0.231043,0.217028 -0.110194,0.129794 -0.21571,0.237324 -0.234468,0.238955 -0.01875,0.0015 -0.139775,0.102333 -0.268924,0.223779 -0.129156,0.121446 -0.242179,0.220809 -0.251161,0.220809 -0.02537,0 -0.405851,0.275683 -0.572008,0.414454 -0.08205,0.06852 -0.314931,0.239897 -0.51753,0.380842 -0.387603,0.269655 -0.569368,0.44102 -0.766137,0.7223 -0.153643,0.219636 -0.36955,0.618807 -0.36955,0.683236 0,0.02749 -0.01176,0.04998 -0.02616,0.04998 -0.03167,0 -0.156417,0.321733 -0.224782,0.579755 -0.02733,0.103161 -0.05974,0.38707 -0.07201,0.63091 -0.01228,0.243838 -0.0367,0.457921 -0.0543,0.47574 -0.01759,0.01781 -0.03199,0.148686 -0.03199,0.290814 0,0.176685 -0.01649,0.281962 -0.05214,0.332861 -0.06265,0.08945 -0.03628,0.229636 0.05526,0.293757 0.03494,0.02447 0.273134,0.242804 0.529317,0.485172 0.256175,0.242373 0.479046,0.445791 0.495268,0.452042 0.01622,0.0063 0.02949,0.03311 0.02949,0.05968 0,0.02657 0.01297,0.04831 0.02881,0.04831 0.01584,0 0.103231,0.07579 0.194197,0.168432 0.09096,0.09264 0.17544,0.16222 0.187725,0.154627 0.01228,-0.0076 0.05524,0.02404 0.09546,0.07029 0.04022,0.04625 0.08856,0.0841 0.107445,0.0841 0.01889,0 0.03433,0.02302 0.03433,0.05115 0,0.02814 0.02393,0.05115 0.05316,0.05115 0.02924,0 0.04403,0.01481 0.03285,0.03288 -0.01118,0.01808 0.0378,0.07056 0.108823,0.116611 0.146636,0.09507 0.410528,0.327953 0.371622,0.327953 -0.01411,0 -0.0027,0.02302 0.02548,0.05115 0.02813,0.02814 0.07527,0.05115 0.104743,0.05115 0.02948,0 0.04976,0.01918 0.04506,0.04263 -0.0047,0.02344 0.01067,0.03879 0.0341,0.0341 0.02345,-0.0047 0.03879,0.01066 0.0341,0.0341 -0.0047,0.02344 0.01067,0.03879 0.03411,0.0341 0.02345,-0.0047 0.04263,0.0068 0.04263,0.02558 0,0.01875 0.01151,0.03167 0.02558,0.02869 0.01407,-0.003 0.05372,0.0068 0.08812,0.0218 0.04921,0.02142 0.05285,0.03336 0.01705,0.05605 -0.03107,0.0197 -0.01515,0.029 0.05031,0.02936 0.05269,4.48e-4 0.08814,0.01291 0.07878,0.02806 -0.0094,0.01515 0.01658,0.05262 0.05767,0.08326 0.211981,0.158129 0.321478,0.232868 0.398667,0.272128 0.115603,0.05878 0.204537,0.136366 0.205017,0.178823 6.73e-4,0.01926 0.06544,0.06496 0.144938,0.101519 0.141447,0.06505 0.340091,0.238163 0.308982,0.269278 -0.02718,0.02718 0.06833,0.153699 0.127777,0.169241 0.06948,0.01817 0.188265,0.276674 0.320871,0.69827 0.08404,0.267179 0.118475,0.330863 0.220688,0.408197 0.06662,0.0504 0.147197,0.124217 0.17907,0.164057 0.09286,0.116054 0.407185,0.314295 0.561941,0.354407 0.212211,0.05501 0.317944,0.197997 0.317944,0.42998 0,0.177064 0.0046,0.186422 0.114315,0.232258 0.06286,0.02626 0.181802,0.05857 0.2643,0.07179 0.08249,0.01322 0.264143,0.05332 0.403658,0.08911 0.139516,0.0358 0.327111,0.06508 0.416878,0.06508 0.191088,0 0.623427,0.160645 0.804959,0.299105 0.06647,0.0507 0.148841,0.153773 0.183033,0.229045 0.08345,0.183693 0.08156,0.232392 -0.0079,0.203999 -0.0628,-0.01994 -0.06843,-0.01289 -0.04589,0.05738 0.06069,0.189278 0.08178,0.333911 0.08254,0.566071 l 8.75e-4,0.247251 -0.10231,0 c -0.141004,0 -0.224605,-0.0965 -0.270173,-0.311862 -0.02207,-0.104268 -0.09225,-0.260923 -0.163567,-0.365089 -0.119313,-0.174261 -0.130354,-0.181565 -0.24619,-0.162767 -0.149842,0.02432 -0.206755,0.09784 -0.206755,0.267096 l 0,0.130514 -0.144938,-0.0091 c -0.128781,-0.0081 -0.143506,-0.0015 -0.132061,0.05907 0.02757,0.146015 0.01951,0.403542 -0.01289,0.41185 -0.01875,0.0048 -0.05329,0.0011 -0.07673,-0.0083 z m -4.19369,-3.988246 c 0.03255,-0.03255 -0.11857,-0.219098 -0.220265,-0.271924 -0.05026,-0.0261 -0.100619,-0.07448 -0.111934,-0.107508 -0.01132,-0.03303 -0.08846,-0.113161 -0.171444,-0.178065 -0.08298,-0.06491 -0.144604,-0.124279 -0.136937,-0.131946 0.01826,-0.01826 -0.252842,-0.244541 -0.292968,-0.244541 -0.01698,0 -0.03088,-0.02302 -0.03088,-0.05116 0,-0.02813 -0.01918,-0.04732 -0.04263,-0.04263 -0.02345,0.0047 -0.03879,-0.01067 -0.03411,-0.0341 0.0047,-0.02344 -0.0145,-0.04263 -0.04263,-0.04263 -0.02814,0 -0.05115,-0.02165 -0.05115,-0.04811 0,-0.02646 -0.09552,-0.13005 -0.212251,-0.230198 -0.116736,-0.100146 -0.253339,-0.224289 -0.30356,-0.27587 -0.05022,-0.05158 -0.09883,-0.09379 -0.108026,-0.09379 -0.0092,0 -0.09926,-0.08057 -0.200152,-0.17904 -0.186476,-0.182007 -0.359788,-0.332507 -0.382912,-0.332507 -0.007,0 -0.08682,-0.06799 -0.177335,-0.151102 -0.09051,-0.08311 -0.17673,-0.143589 -0.191592,-0.1344 -0.01486,0.0092 -0.02702,0.0024 -0.02702,-0.01528 0,-0.04201 -0.511787,-0.42675 -0.567681,-0.42675 -0.02375,0 -0.03553,-0.01237 -0.02619,-0.02747 0.02194,-0.03549 -0.281469,-0.225376 -0.403641,-0.252609 -0.05158,-0.01149 -0.09378,-0.03557 -0.09378,-0.05349 0,-0.019 -0.02956,-0.01678 -0.07091,0.0054 -0.06793,0.03636 -0.064,0.04498 0.09378,0.205769 0.09058,0.0923 0.183871,0.167842 0.207322,0.167869 0.02344,2.7e-5 0.04263,0.01302 0.04263,0.02885 0,0.01584 0.117144,0.14245 0.26033,0.281352 0.143178,0.138902 0.292804,0.289504 0.332507,0.334665 0.125042,0.142265 0.487691,0.495555 0.560957,0.546484 0.03864,0.02686 0.06096,0.06523 0.04957,0.08526 -0.01138,0.02003 -0.0087,0.02557 0.0061,0.0123 0.0147,-0.01326 0.07471,0.01169 0.133356,0.05543 0.05864,0.04375 0.165259,0.106726 0.236917,0.139967 0.0936,0.04341 0.117608,0.06848 0.08526,0.08899 -0.03381,0.02144 -0.02966,0.02869 0.01667,0.02908 0.03393,4.48e-4 0.05331,0.01409 0.04306,0.03066 -0.01667,0.02698 0.14951,0.115529 0.236282,0.125904 0.01875,0.0023 0.05419,0.0064 0.07875,0.0093 0.02455,0.0029 0.03515,0.02054 0.02356,0.0393 -0.01161,0.01875 0.0036,0.0341 0.0339,0.0341 0.03023,0 0.111436,0.03837 0.180445,0.08526 0.06901,0.04689 0.10272,0.08549 0.07492,0.08578 -0.04424,6.72e-4 -0.04417,0.0046 6.73e-4,0.03333 0.02814,0.01803 0.0764,0.02496 0.107242,0.01537 0.05882,-0.01828 0.141637,0.04693 0.20138,0.15856 0.01945,0.03632 0.09688,0.104889 0.17209,0.152367 0.10982,0.06933 0.132322,0.100292 0.114247,0.157236 -0.01432,0.04508 -0.0096,0.06294 0.01288,0.04903 0.01947,-0.01203 0.04436,-0.0074 0.05532,0.01035 0.01095,0.01772 -0.01483,0.0389 -0.05733,0.04706 -0.06684,0.01286 -0.06461,0.01548 0.01656,0.01949 0.07775,0.0038 0.09378,0.02023 0.09378,0.09574 0,0.149781 0.08859,0.215831 0.289483,0.215831 0.09713,0 0.186006,-0.0094 0.197504,-0.02091 z m -3.916702,-3.351519 c 0.01031,-0.01667 -0.03866,-0.07277 -0.108823,-0.124668 -0.162544,-0.12024 -0.245198,-0.220673 -0.246159,-0.299097 -0.0011,-0.08664 -0.139045,-0.398508 -0.176318,-0.398508 -0.01692,0 -0.04534,-0.03837 -0.06316,-0.08526 -0.01784,-0.04689 -0.04766,-0.08526 -0.06629,-0.08526 -0.01864,0 -0.02504,-0.02302 -0.01425,-0.05115 0.0108,-0.02813 0.0057,-0.05115 -0.01129,-0.05115 -0.04968,0 -0.120395,0.399496 -0.08306,0.469258 0.01779,0.03321 0.143661,0.159902 0.279747,0.281536 0.13608,0.121632 0.279425,0.254059 0.318537,0.294281 0.07702,0.0792 0.141411,0.09803 0.17108,0.05003 z m -0.771004,-2.50443 c -0.0043,-0.02202 0.0183,-0.08917 0.05025,-0.149197 0.03194,-0.06003 0.05808,-0.149179 0.05808,-0.198109 0,-0.05436 0.01416,-0.08021 0.0364,-0.06647 0.03025,0.01869 0.09496,-0.116002 0.0709,-0.147575 -0.004,-0.0054 0.01613,-0.03331 0.04495,-0.06211 0.02881,-0.02881 0.05237,-0.08874 0.05237,-0.133183 0,-0.04445 0.01414,-0.08955 0.03142,-0.100225 0.01728,-0.01069 0.05839,-0.09215 0.09136,-0.181054 0.03297,-0.08891 0.08744,-0.201739 0.12104,-0.250748 0.0336,-0.04901 0.05132,-0.09889 0.03937,-0.110837 -0.01194,-0.01194 -0.0038,-0.02173 0.01806,-0.02173 0.02189,0 0.03955,-0.02686 0.03927,-0.05968 -6.73e-4,-0.05155 -0.0055,-0.05271 -0.03706,-0.0085 -0.03005,0.04207 -0.03367,0.03904 -0.02039,-0.01705 0.0089,-0.03751 0.02822,-0.09773 0.04298,-0.13381 0.02151,-0.05253 0.01548,-0.06124 -0.03023,-0.0437 -0.07092,0.02721 -0.07416,-0.02222 -0.0059,-0.09045 0.02814,-0.02813 0.05065,-0.07911 0.05002,-0.113272 -8.75e-4,-0.05383 -0.01019,-0.05124 -0.06906,0.01945 -0.03736,0.04486 -0.07781,0.07168 -0.08988,0.0596 -0.01208,-0.01207 -0.05363,0.0049 -0.09234,0.0378 -0.06688,0.05679 -0.06809,0.05679 -0.02417,0 0.02827,-0.0365 0.03201,-0.05968 0.0096,-0.05968 -0.02012,0 -0.04886,0.01918 -0.06386,0.04263 -0.01501,0.02344 -0.057,0.06565 -0.09334,0.09379 -0.06006,0.0465 -0.06403,0.04573 -0.0437,-0.0085 0.0123,-0.03282 0.0081,-0.05969 -0.0093,-0.05969 -0.01746,0 -0.04841,0.06522 -0.06882,0.144939 -0.02042,0.07972 -0.04562,0.167959 -0.05602,0.196096 -0.04849,0.131129 -0.111834,0.499144 -0.09503,0.552109 0.01033,0.03255 0.0018,0.09092 -0.01898,0.129723 -0.04485,0.08379 -0.0079,0.827525 0.03967,0.798134 0.01662,-0.01026 0.02669,-0.0367 0.02239,-0.05873 z m 0.415265,-1.487433 c 0,-0.01986 0.01535,-0.03611 0.0341,-0.03611 0.01875,0 0.03411,0.0068 0.03411,0.01503 0,0.0083 -0.01535,0.02453 -0.03411,0.03611 -0.01875,0.01158 -0.0341,0.0048 -0.0341,-0.01503 z m 0.06821,-0.102309 c 0,-0.01985 0.01535,-0.03611 0.0341,-0.03611 0.01875,0 0.0341,0.0068 0.0341,0.01503 0,0.0083 -0.01535,0.02452 -0.0341,0.03611 -0.01875,0.01158 -0.0341,0.0048 -0.0341,-0.01503 z M 50.350048,2.911456 c -0.04024,-0.04024 -0.0851,-0.060404 -0.09969,-0.044811 -0.01458,0.015594 -0.0073,0.035235 0.01633,0.043647 0.02355,0.00841 0.03614,0.026146 0.02793,0.039407 -0.0082,0.013261 0.01737,0.026543 0.05685,0.029515 l 0.07175,0.0054 -0.07316,-0.073163 z M 28.551232,31.653751 c 0,-0.0083 0.01534,-0.02453 0.0341,-0.03611 0.01875,-0.01158 0.0341,-0.0048 0.0341,0.01503 0,0.01987 -0.01534,0.03611 -0.0341,0.03611 -0.01875,0 -0.0341,-0.0067 -0.0341,-0.01503 z M 47.469354,1.6014697 c 0.0231,-0.00934 0.06912,-0.00991 0.102307,-0.00127 0.03317,0.00865 0.01431,0.016289 -0.04196,0.016985 -0.05627,6.93e-4 -0.08342,-0.00638 -0.06032,-0.015721 z"
-     style="fill:#000000" />
-</svg>
diff --git a/Images/meter.svg b/Images/meter.svg
deleted file mode 100755 (executable)
index cc3d4e9..0000000
+++ /dev/null
@@ -1,584 +0,0 @@
-<?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"
-   width="358.84189"
-   height="213.71251"
-   id="svg5482"
-   version="1.1"
-   inkscape:version="0.91 r13725"
-   sodipodi:docname="meter.svg">
-  <defs
-     id="defs5484">
-    <inkscape:path-effect
-       effect="bend_path"
-       id="path-effect5049"
-       is_visible="true"
-       bendpath="m 2212.9341,609.06371 c 56.0922,-68.23166 186.5294,-57.7916 231.5248,0"
-       prop_scale="1"
-       scale_y_rel="false"
-       vertical="false"
-       bendpath-nodetypes="cc" />
-    <linearGradient
-       id="linearGradient5562">
-      <stop
-         style="stop-color:#090909;stop-opacity:1;"
-         offset="0"
-         id="stop5564" />
-      <stop
-         style="stop-color:#444444;stop-opacity:1"
-         offset="1"
-         id="stop5566" />
-    </linearGradient>
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="1"
-     inkscape:cx="161.38816"
-     inkscape:cy="62.457854"
-     inkscape:document-units="px"
-     inkscape:current-layer="background"
-     showgrid="false"
-     fit-margin-top="0"
-     fit-margin-left="0"
-     fit-margin-right="0"
-     fit-margin-bottom="0"
-     inkscape:window-width="1214"
-     inkscape:window-height="816"
-     inkscape:window-x="64"
-     inkscape:window-y="33"
-     inkscape:window-maximized="0" />
-  <metadata
-     id="metadata5487">
-    <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>
-  <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="background"
-     transform="translate(0.49098801,0.49175768)">
-    <path
-       style="display:inline;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.79999989;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
-       d="m 3.580112,-0.09175773 350.699898,0 c 2.0337,0 3.6709,1.98745993 3.6709,4.45612993 l 0,203.8363478 c 0,2.46871 -1.6372,4.45615 -3.6709,4.45615 -260.867099,0.36873 -182.3838,0 -350.699898,0 -2.0338,0 -3.67110006,-1.98744 -3.67110006,-4.45615 l 0,-203.8363478 c 0,-2.46867 1.63730006,-4.45612993 3.67110006,-4.45612993 z"
-       id="rect5471-8-1-9-8"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="ssssccsss" />
-    <path
-       style="display:inline;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.79999995;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
-       d="m 16.535111,11.100601 324.789899,0 c 1.8834,0 3.3997,1.7785 3.3997,3.98763 l 0,182.405869 c 0,2.20916 -1.5163,3.98765 -3.3997,3.98765 -241.593999,0.32996 -168.9091,0 -324.789899,0 -1.8835,0 -3.3998,-1.77849 -3.3998,-3.98765 l 0,-182.405869 c 0,-2.20913 1.5163,-3.98763 3.3998,-3.98763 z"
-       id="rect5471-8-1-9"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="ssssccsss" />
-    <path
-       style="display:inline;fill:none;fill-opacity:1;stroke:none;stroke-width:10;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;stroke-dasharray:none"
-       d="m 20.798511,15.453201 316.263299,0 c 1.8339,0 3.3104,1.69724 3.3104,3.80544 l 0,174.071799 c 0,2.10822 -1.4765,3.80545 -3.3104,3.80545 -235.2515,0.31489 -164.4748,0 -316.263299,0 -1.834,0 -3.3105,-1.69723 -3.3105,-3.80545 l 0,-174.071799 c 0,-2.1082 1.4765,-3.80544 3.3105,-3.80544 z"
-       id="rect5471-8-1"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="ssssccsss" />
-    <g
-       id="g4984"
-       inkscape:path-effect="#path-effect5049"
-       transform="matrix(1.0315417,0,0,1.1956775,-2225.4304,-607.66273)">
-      <g
-         id="g4913">
-        <path
-           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-           d="m 2328.6578,555.28595 -0.095,12.8839"
-           id="path4662"
-           inkscape:connector-curvature="0"
-           inkscape:original-d="m 2332.9084,545.46229 0,12.87806" />
-        <path
-           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-           d="m 2333.776,561.83359 -0.2149,6.43605"
-           id="path4662-9"
-           inkscape:connector-curvature="0"
-           inkscape:original-d="m 2338.0163,551.90135 0,6.439" />
-        <path
-           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-           d="m 2338.938,562.0725 -0.381,6.4311"
-           id="path4662-9-8"
-           inkscape:connector-curvature="0"
-           inkscape:original-d="m 2343.1241,551.90135 0,6.439" />
-        <path
-           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-           d="m 2344.0935,562.44544 -0.5491,6.42037"
-           id="path4662-9-4"
-           inkscape:connector-curvature="0"
-           inkscape:original-d="m 2348.2318,551.90135 0,6.439" />
-        <path
-           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-           d="m 2349.2383,562.95413 -0.7193,6.40384"
-           id="path4662-9-0"
-           inkscape:connector-curvature="0"
-           inkscape:original-d="m 2353.3397,551.90135 0,6.439" />
-        <path
-           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-           d="m 2355.2592,557.21866 -1.7833,12.76309"
-           id="path4662-7"
-           inkscape:connector-curvature="0"
-           inkscape:original-d="m 2358.4476,545.46229 0,12.87806" />
-        <path
-           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-           d="m 2355.2592,557.21866 -1.7833,12.76309"
-           id="path4662-6"
-           inkscape:connector-curvature="0"
-           inkscape:original-d="m 2358.4476,545.46229 0,12.87806" />
-        <path
-           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-           d="m 2359.4766,564.38544 -1.0661,6.3534"
-           id="path4662-9-3"
-           inkscape:connector-curvature="0"
-           inkscape:original-d="m 2363.5555,551.90135 0,6.439" />
-        <path
-           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-           d="m 2364.5606,565.31142 -1.2426,6.31948"
-           id="path4662-9-8-6"
-           inkscape:connector-curvature="0"
-           inkscape:original-d="m 2368.6633,551.90135 0,6.439" />
-        <path
-           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-           d="m 2369.615,566.37983 -1.4212,6.27979"
-           id="path4662-9-4-1"
-           inkscape:connector-curvature="0"
-           inkscape:original-d="m 2373.771,551.90135 0,6.439" />
-        <path
-           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-           d="m 2374.6354,567.59244 -1.6019,6.23429"
-           id="path4662-9-0-5"
-           inkscape:connector-curvature="0"
-           inkscape:original-d="m 2378.8789,551.90135 0,6.439" />
-        <path
-           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-           d="m 2381.4018,562.76784 -3.5696,12.36605"
-           id="path4662-7-4"
-           inkscape:connector-curvature="0"
-           inkscape:original-d="m 2383.9868,545.46229 0,12.87806" />
-        <path
-           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-           d="m 2381.4018,562.76784 -3.5696,12.36605"
-           id="path4662-2"
-           inkscape:connector-curvature="0"
-           inkscape:original-d="m 2383.9868,545.46229 0,12.87806" />
-        <path
-           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-           d="m 2384.5551,570.45687 -1.9697,6.12592"
-           id="path4662-9-09"
-           inkscape:connector-curvature="0"
-           inkscape:original-d="m 2389.0947,551.90135 0,6.439" />
-        <path
-           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-           d="m 2389.445,572.11202 -2.1567,6.06304"
-           id="path4662-9-8-7"
-           inkscape:connector-curvature="0"
-           inkscape:original-d="m 2394.2025,551.90135 0,6.439" />
-        <path
-           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-           d="m 2394.2821,573.91802 -2.3459,5.99437"
-           id="path4662-9-4-3"
-           inkscape:connector-curvature="0"
-           inkscape:original-d="m 2399.3102,551.90135 0,6.439" />
-        <path
-           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-           d="m 2399.0617,575.87705 -2.5397,5.91841"
-           id="path4662-9-0-7"
-           inkscape:connector-curvature="0"
-           inkscape:original-d="m 2404.4181,551.90135 0,6.439" />
-        <path
-           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-           d="m 2406.5173,572.1671 -5.4849,11.65685"
-           id="path4662-7-2"
-           inkscape:connector-curvature="0"
-           inkscape:original-d="m 2409.526,545.46229 0,12.87806" />
-        <path
-           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-           d="m 2406.5173,572.1671 -5.4849,11.65685"
-           id="path4662-60"
-           inkscape:connector-curvature="0"
-           inkscape:original-d="m 2409.526,545.46229 0,12.87806" />
-        <path
-           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-           d="m 2408.4101,580.27926 -2.9515,5.72413"
-           id="path4662-9-1"
-           inkscape:connector-curvature="0"
-           inkscape:original-d="m 2414.6339,551.90135 0,6.439" />
-        <path
-           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-           d="m 2412.9559,582.73313 -3.1667,5.60561"
-           id="path4662-9-8-65"
-           inkscape:connector-curvature="0"
-           inkscape:original-d="m 2419.7417,551.90135 0,6.439" />
-        <path
-           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-           d="m 2417.4008,585.36218 -3.3883,5.47283"
-           id="path4662-9-4-7"
-           inkscape:connector-curvature="0"
-           inkscape:original-d="m 2424.8494,551.90135 0,6.439" />
-        <path
-           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-           d="m 2421.7336,588.17159 -3.6161,5.32576"
-           id="path4662-9-0-54"
-           inkscape:connector-curvature="0"
-           inkscape:original-d="m 2429.9573,551.90135 0,6.439" />
-        <path
-           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-           d="m 2429.7946,586.00329 -7.704,10.32666"
-           id="path4662-7-1"
-           inkscape:connector-curvature="0"
-           inkscape:original-d="m 2435.0652,545.46229 0,12.87806" />
-        <path
-           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-           d="m 2429.7946,586.00329 -7.704,10.32666"
-           id="path4662-20"
-           inkscape:connector-curvature="0"
-           inkscape:original-d="m 2435.0652,545.46229 0,12.87806" />
-        <path
-           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-           d="m 2430.0118,594.35366 -4.0931,4.97586"
-           id="path4662-9-01"
-           inkscape:connector-curvature="0"
-           inkscape:original-d="m 2440.1731,551.90135 0,6.439" />
-        <path
-           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-           d="m 2433.9196,597.73496 -4.3365,4.76139"
-           id="path4662-9-8-4"
-           inkscape:connector-curvature="0"
-           inkscape:original-d="m 2445.2809,551.90135 0,6.439" />
-        <path
-           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-           d="m 2437.6444,601.31242 -4.5822,4.51988"
-           id="path4662-9-4-6"
-           inkscape:connector-curvature="0"
-           inkscape:original-d="m 2450.3886,551.90135 0,6.439" />
-        <path
-           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-           d="m 2441.1648,605.0881 -4.8303,4.25131"
-           id="path4662-9-0-0"
-           inkscape:connector-curvature="0"
-           inkscape:original-d="m 2455.4965,551.90135 0,6.439" />
-        <path
-           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-           d="m 2449.5396,605.10799 -10.1614,7.91144"
-           id="path4662-7-7"
-           inkscape:connector-curvature="0"
-           inkscape:original-d="m 2460.6044,545.46229 0,12.87806" />
-        <path
-           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-           d="m 2301.9948,556.88956 1.664,12.77523"
-           id="path4662-1"
-           inkscape:connector-curvature="0"
-           inkscape:original-d="m 2307.3692,545.46229 0,12.87806" />
-        <path
-           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-           d="m 2307.9612,562.68275 0.6504,6.41059"
-           id="path4662-9-7"
-           inkscape:connector-curvature="0"
-           inkscape:original-d="m 2312.4771,551.90135 0,6.439" />
-        <path
-           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-           d="m 2313.1115,562.23287 0.4716,6.42754"
-           id="path4662-9-8-77"
-           inkscape:connector-curvature="0"
-           inkscape:original-d="m 2317.5849,551.90135 0,6.439" />
-        <path
-           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-           d="m 2318.2729,561.9253 0.2957,6.4384"
-           id="path4662-9-4-73"
-           inkscape:connector-curvature="0"
-           inkscape:original-d="m 2322.6926,551.90135 0,6.439" />
-        <path
-           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-           d="m 2323.4408,561.75774 0.1225,6.44319"
-           id="path4662-9-0-3"
-           inkscape:connector-curvature="0"
-           inkscape:original-d="m 2327.8005,551.90135 0,6.439" />
-        <path
-           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-           d="m 2328.6578,555.28595 -0.095,12.8839"
-           id="path4662-7-5"
-           inkscape:connector-curvature="0"
-           inkscape:original-d="m 2332.9084,545.46229 0,12.87806" />
-        <path
-           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-           d="m 2275.7834,562.31605 3.5651,12.36297"
-           id="path4662-99"
-           inkscape:connector-curvature="0"
-           inkscape:original-d="m 2281.83,545.46229 0,12.87806" />
-        <path
-           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-           d="m 2282.5472,567.14615 1.5867,6.23483"
-           id="path4662-9-81"
-           inkscape:connector-curvature="0"
-           inkscape:original-d="m 2286.9379,551.90135 0,6.439" />
-        <path
-           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-           d="m 2287.5686,565.9507 1.3939,6.28213"
-           id="path4662-9-8-8"
-           inkscape:connector-curvature="0"
-           inkscape:original-d="m 2292.0457,551.90135 0,6.439" />
-        <path
-           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-           d="m 2292.6255,564.90893 1.2038,6.32335"
-           id="path4662-9-4-2"
-           inkscape:connector-curvature="0"
-           inkscape:original-d="m 2297.1534,551.90135 0,6.439" />
-        <path
-           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-           d="m 2297.7133,564.01851 1.0164,6.3585"
-           id="path4662-9-0-6"
-           inkscape:connector-curvature="0"
-           inkscape:original-d="m 2302.2613,551.90135 0,6.439" />
-        <path
-           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-           d="m 2301.9948,556.88956 1.664,12.77523"
-           id="path4662-7-6"
-           inkscape:connector-curvature="0"
-           inkscape:original-d="m 2307.3692,545.46229 0,12.87806" />
-        <path
-           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-           d="m 2250.6482,571.8947 5.6313,11.5831"
-           id="path4662-0"
-           inkscape:connector-curvature="0"
-           inkscape:original-d="m 2256.2908,545.46229 0,12.87806" />
-        <path
-           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-           d="m 2258.1514,575.51331 2.6016,5.89185"
-           id="path4662-9-38"
-           inkscape:connector-curvature="0"
-           inkscape:original-d="m 2261.3987,551.90135 0,6.439" />
-        <path
-           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-           d="m 2262.9147,573.51105 2.3902,5.98047"
-           id="path4662-9-8-0"
-           inkscape:connector-curvature="0"
-           inkscape:original-d="m 2266.5065,551.90135 0,6.439" />
-        <path
-           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-           d="m 2267.7442,571.67729 2.1826,6.05649"
-           id="path4662-9-4-12"
-           inkscape:connector-curvature="0"
-           inkscape:original-d="m 2271.6142,551.90135 0,6.439" />
-        <path
-           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-           d="m 2272.63,570.00718 1.9812,6.12201"
-           id="path4662-9-0-50"
-           inkscape:connector-curvature="0"
-           inkscape:original-d="m 2276.7221,551.90135 0,6.439" />
-        <path
-           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-           d="m 2275.7834,562.31605 3.5651,12.36297"
-           id="path4662-7-9"
-           inkscape:connector-curvature="0"
-           inkscape:original-d="m 2281.83,545.46229 0,12.87806" />
-        <path
-           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-           d="m 2227.5729,586.07497 7.844,10.21712"
-           id="path4662-4"
-           inkscape:connector-curvature="0"
-           inkscape:original-d="m 2230.7516,545.46229 0,12.87806" />
-        <path
-           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-           d="m 2235.66,588.12641 3.6982,5.27188"
-           id="path4662-9-78"
-           inkscape:connector-curvature="0"
-           inkscape:original-d="m 2235.8595,551.90135 0,6.439" />
-        <path
-           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-           d="m 2239.9501,585.24991 3.4733,5.42021"
-           id="path4662-9-8-3"
-           inkscape:connector-curvature="0"
-           inkscape:original-d="m 2240.9673,551.90135 0,6.439" />
-        <path
-           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-           d="m 2244.3537,582.55255 3.2515,5.5557"
-           id="path4662-9-4-5"
-           inkscape:connector-curvature="0"
-           inkscape:original-d="m 2246.075,551.90135 0,6.439" />
-        <path
-           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-           d="m 2248.8615,580.032 3.0322,5.67947"
-           id="path4662-9-0-1"
-           inkscape:connector-curvature="0"
-           inkscape:original-d="m 2251.1829,551.90135 0,6.439" />
-        <path
-           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-           d="m 2250.6482,571.8947 5.6313,11.5831"
-           id="path4662-7-20"
-           inkscape:connector-curvature="0"
-           inkscape:original-d="m 2256.2908,545.46229 0,12.87806" />
-        <path
-           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-           d="m 2207.9601,604.97466 9.948,8.1781"
-           id="path4662-16"
-           inkscape:connector-curvature="0"
-           inkscape:original-d="m 2205.2124,545.46229 0,12.87806" />
-        <path
-           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-           d="m 2216.3083,605.15362 4.7725,4.31998"
-           id="path4662-9-40"
-           inkscape:connector-curvature="0"
-           inkscape:original-d="m 2210.3203,551.90135 0,6.439" />
-        <path
-           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-           d="m 2219.8623,601.40703 4.5665,4.53739"
-           id="path4662-9-8-61"
-           inkscape:connector-curvature="0"
-           inkscape:original-d="m 2215.4281,551.90135 0,6.439" />
-        <path
-           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-           d="m 2223.5852,597.82751 4.3562,4.74129"
-           id="path4662-9-4-8"
-           inkscape:connector-curvature="0"
-           inkscape:original-d="m 2220.5358,551.90135 0,6.439" />
-        <path
-           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-           d="m 2227.4664,594.41845 4.1413,4.93167"
-           id="path4662-9-0-9"
-           inkscape:connector-curvature="0"
-           inkscape:original-d="m 2225.6437,551.90135 0,6.439" />
-        <path
-           style="fill:none;stroke:#000000;stroke-width:0.90042925px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-           d="m 2227.5729,586.07497 7.844,10.21712"
-           id="path4662-7-8"
-           inkscape:connector-curvature="0"
-           inkscape:original-d="m 2230.7516,545.46229 0,12.87806" />
-      </g>
-    </g>
-    <g
-       id="g3220"
-       transform="translate(-196.07004,-425.99769)">
-      <g
-         id="g3196">
-        <path
-           inkscape:connector-curvature="0"
-           id="path3170"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:100%;font-family:'Arial Rounded MT Bold';-inkscape-font-specification:'Arial Rounded MT Bold,';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
-           d="m 371.8461,471.78022 -2.7832,0 -0.334,1.89843 c 0.5547,-0.29686 1.0664,-0.4453 1.5352,-0.44531 0.375,10e-6 0.7255,0.0703 1.0517,0.21094 0.3262,0.14063 0.6123,0.33497 0.8584,0.58301 0.2461,0.24805 0.4395,0.54199 0.5801,0.88183 0.1406,0.33985 0.2109,0.70509 0.2109,1.09571 0,0.56641 -0.1269,1.08203 -0.3808,1.54687 -0.2539,0.46485 -0.6202,0.83399 -1.0987,1.10742 -0.4785,0.27344 -1.0302,0.41016 -1.6552,0.41016 -0.6993,0 -1.2666,-0.12891 -1.7022,-0.38672 -0.4355,-0.25781 -0.7441,-0.55371 -0.9258,-0.88769 -0.1816,-0.33399 -0.2724,-0.62598 -0.2724,-0.87598 0,-0.15234 0.063,-0.29687 0.1904,-0.43359 0.127,-0.13672 0.2861,-0.20508 0.4775,-0.20508 0.3282,0 0.5723,0.18945 0.7325,0.56836 0.1562,0.34765 0.3671,0.61816 0.6328,0.81152 0.2656,0.19336 0.5625,0.29004 0.8906,0.29004 0.3008,0 0.5644,-0.0781 0.791,-0.23438 0.2266,-0.15624 0.4014,-0.37109 0.5244,-0.64453 0.1231,-0.27343 0.1846,-0.58398 0.1846,-0.93164 0,-0.37499 -0.066,-0.69531 -0.1992,-0.96094 -0.1328,-0.26562 -0.3106,-0.46386 -0.5332,-0.59472 -0.2227,-0.13086 -0.4707,-0.19629 -0.7442,-0.19629 -0.3359,0 -0.5761,0.041 -0.7207,0.12305 -0.1445,0.082 -0.3525,0.22559 -0.624,0.43066 -0.2715,0.20508 -0.4951,0.30762 -0.6709,0.30762 -0.1914,0 -0.3613,-0.0693 -0.5098,-0.20801 -0.1484,-0.13867 -0.2226,-0.29589 -0.2226,-0.47168 0,-0.0195 0.021,-0.15234 0.064,-0.39844 l 0.4922,-2.80664 c 0.055,-0.33593 0.1563,-0.58007 0.3047,-0.73242 0.1485,-0.15234 0.3906,-0.22851 0.7266,-0.22852 l 3.0937,0 c 0.6094,1e-5 0.9141,0.23243 0.9141,0.69727 0,0.20313 -0.074,0.36719 -0.2227,0.49219 -0.1484,0.125 -0.3672,0.1875 -0.6562,0.1875 z" />
-        <path
-           inkscape:connector-curvature="0"
-           id="path3172"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:100%;font-family:'Arial Rounded MT Bold';-inkscape-font-specification:'Arial Rounded MT Bold,';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
-           d="m 379.9789,474.7099 c 0,0.64063 -0.039,1.19141 -0.1172,1.65235 -0.078,0.46094 -0.2226,0.87891 -0.4336,1.2539 -0.2656,0.46094 -0.6094,0.81641 -1.0312,1.06641 -0.4219,0.25 -0.8907,0.375 -1.4063,0.375 -0.5937,0 -1.126,-0.16797 -1.5967,-0.50391 -0.4707,-0.33593 -0.8252,-0.80078 -1.0634,-1.39453 -0.1211,-0.32421 -0.21,-0.68261 -0.2666,-1.07519 -0.057,-0.39258 -0.085,-0.81738 -0.085,-1.27442 0,-0.58983 0.031,-1.12108 0.094,-1.59375 0.062,-0.47265 0.1601,-0.8789 0.2929,-1.21875 0.2305,-0.56249 0.5654,-0.9912 1.0049,-1.28613 0.4395,-0.29491 0.9639,-0.44237 1.5732,-0.44238 0.4024,10e-6 0.7676,0.0654 1.0957,0.19629 0.3282,0.13087 0.6163,0.32227 0.8643,0.57422 0.248,0.25196 0.458,0.56348 0.6299,0.93457 0.2969,0.64453 0.4453,1.55664 0.4453,2.73632 z m -1.6055,-0.11718 c 0,-0.71484 -0.043,-1.2998 -0.1289,-1.75489 -0.086,-0.45507 -0.2304,-0.79882 -0.4336,-1.03125 -0.2031,-0.23241 -0.4843,-0.34862 -0.8437,-0.34863 -0.5156,1e-5 -0.874,0.25977 -1.0752,0.7793 -0.2012,0.51954 -0.3018,1.32032 -0.3018,2.40234 0,0.73438 0.043,1.33594 0.1289,1.80469 0.086,0.46875 0.2305,0.82324 0.4336,1.06348 0.2032,0.24023 0.4785,0.36035 0.8262,0.36035 0.3594,0 0.6406,-0.125 0.8438,-0.375 0.2031,-0.25 0.3456,-0.60742 0.4277,-1.07227 0.082,-0.46484 0.123,-1.07421 0.123,-1.82812 z" />
-        <path
-           inkscape:connector-curvature="0"
-           id="path3165"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:100%;font-family:'Arial Rounded MT Bold';-inkscape-font-specification:'Arial Rounded MT Bold,';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
-           d="m 395.705,475.8873 c 0.2657,-0.3164 0.5547,-0.55077 0.8672,-0.70312 0.3125,-0.15234 0.6621,-0.22851 1.0488,-0.22852 0.3711,10e-6 0.7139,0.0693 1.0284,0.20801 0.3144,0.13868 0.5898,0.33594 0.8261,0.5918 0.2364,0.25586 0.419,0.55762 0.5479,0.90527 0.1289,0.34766 0.1933,0.71094 0.1933,1.08984 0,0.55079 -0.1259,1.05079 -0.3779,1.5 -0.2519,0.44922 -0.6035,0.79981 -1.0547,1.05176 -0.4511,0.25195 -0.9619,0.37793 -1.5322,0.37793 -0.6562,0 -1.2227,-0.16016 -1.6992,-0.48047 -0.4766,-0.32031 -0.8408,-0.79394 -1.0928,-1.4209 -0.2519,-0.62695 -0.3779,-1.39355 -0.3779,-2.2998 0,-0.73828 0.076,-1.39843 0.2285,-1.98047 0.1523,-0.58203 0.3711,-1.06445 0.6562,-1.44727 0.2852,-0.3828 0.6309,-0.67186 1.0372,-0.86718 0.4062,-0.19531 0.8691,-0.29296 1.3886,-0.29297 0.5,10e-6 0.9405,0.0977 1.3213,0.29297 0.3809,0.19532 0.668,0.4375 0.8613,0.72656 0.1934,0.28907 0.2901,0.56641 0.2901,0.83203 0,0.16016 -0.061,0.30567 -0.1817,0.43652 -0.1211,0.13087 -0.2754,0.1963 -0.4628,0.19629 -0.1641,10e-6 -0.3165,-0.0518 -0.4571,-0.15527 -0.1406,-0.10351 -0.2441,-0.24706 -0.3105,-0.43067 -0.09,-0.23436 -0.2325,-0.42284 -0.4278,-0.56542 -0.1953,-0.14258 -0.4218,-0.21386 -0.6796,-0.21387 -0.2071,10e-6 -0.4131,0.0596 -0.6182,0.17871 -0.2051,0.11915 -0.3779,0.28028 -0.5186,0.4834 -0.2851,0.41407 -0.4531,1.15235 -0.5039,2.21484 z m 1.5821,3.63867 c 0.3945,0 0.7207,-0.16113 0.9785,-0.4834 0.2578,-0.32226 0.3867,-0.74511 0.3867,-1.26855 0,-0.35547 -0.061,-0.66113 -0.1816,-0.91699 -0.1211,-0.25586 -0.2872,-0.45117 -0.4981,-0.58594 -0.2109,-0.13476 -0.4434,-0.20214 -0.6973,-0.20215 -0.2422,10e-6 -0.4736,0.0645 -0.6943,0.19336 -0.2207,0.12891 -0.3984,0.31543 -0.5332,0.55957 -0.1348,0.24415 -0.2021,0.53028 -0.2021,0.8584 0,0.52735 0.1367,0.9668 0.4101,1.31836 0.2734,0.35156 0.6172,0.52734 1.0313,0.52734 z" />
-        <path
-           inkscape:connector-curvature="0"
-           id="path3167"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:100%;font-family:'Arial Rounded MT Bold';-inkscape-font-specification:'Arial Rounded MT Bold,';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
-           d="m 407.2187,476.32089 c 0,0.64063 -0.039,1.19141 -0.1172,1.65235 -0.078,0.46094 -0.2226,0.87891 -0.4336,1.2539 -0.2656,0.46094 -0.6094,0.81641 -1.0312,1.06641 -0.4219,0.25 -0.8907,0.375 -1.4063,0.375 -0.5937,0 -1.126,-0.16797 -1.5967,-0.50391 -0.4707,-0.33593 -0.8252,-0.80078 -1.0634,-1.39453 -0.1211,-0.32421 -0.21,-0.68261 -0.2666,-1.07519 -0.057,-0.39258 -0.085,-0.81738 -0.085,-1.27442 0,-0.58983 0.031,-1.12108 0.094,-1.59375 0.062,-0.47265 0.1601,-0.8789 0.2929,-1.21875 0.2305,-0.56249 0.5654,-0.9912 1.0049,-1.28613 0.4395,-0.29491 0.9639,-0.44237 1.5732,-0.44238 0.4024,1e-5 0.7676,0.0654 1.0957,0.19629 0.3282,0.13087 0.6163,0.32227 0.8643,0.57422 0.248,0.25196 0.458,0.56348 0.6299,0.93457 0.2969,0.64453 0.4453,1.55664 0.4453,2.73632 z m -1.6055,-0.11718 c 0,-0.71484 -0.043,-1.2998 -0.1289,-1.75489 -0.086,-0.45507 -0.2304,-0.79882 -0.4336,-1.03125 -0.2031,-0.23241 -0.4843,-0.34862 -0.8437,-0.34863 -0.5156,10e-6 -0.874,0.25977 -1.0752,0.7793 -0.2012,0.51954 -0.3018,1.32032 -0.3018,2.40234 0,0.73438 0.043,1.33594 0.1289,1.80469 0.086,0.46875 0.2305,0.82324 0.4336,1.06348 0.2032,0.24023 0.4785,0.36035 0.8262,0.36035 0.3594,0 0.6406,-0.125 0.8438,-0.375 0.2031,-0.25 0.3456,-0.60742 0.4277,-1.07227 0.082,-0.46484 0.123,-1.07421 0.123,-1.82812 z" />
-        <path
-           inkscape:connector-curvature="0"
-           id="path3160"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:100%;font-family:'Arial Rounded MT Bold';-inkscape-font-specification:'Arial Rounded MT Bold,';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
-           d="m 423.0055,478.82111 3.9024,0 c 0.375,1e-5 0.6465,0.0586 0.8144,0.17578 0.168,0.1172 0.252,0.31056 0.252,0.58008 0,0.16407 -0.099,0.38087 -0.2959,0.65039 -0.1973,0.26954 -0.4219,0.56739 -0.6738,0.89356 -0.252,0.32618 -0.5118,0.73145 -0.7793,1.21582 -0.2676,0.48438 -0.5127,1.07617 -0.7354,1.77539 -0.094,0.3086 -0.1601,0.56445 -0.1992,0.76758 -0.039,0.20312 -0.082,0.4668 -0.1289,0.79101 -0.047,0.32422 -0.088,0.57227 -0.1231,0.74414 -0.082,0.39844 -0.1982,0.67481 -0.3486,0.8291 -0.1504,0.1543 -0.3506,0.23145 -0.6006,0.23145 -0.2383,0 -0.4297,-0.083 -0.5742,-0.24902 -0.1445,-0.16602 -0.2168,-0.41114 -0.2168,-0.73536 0,-0.24999 0.053,-0.58984 0.1582,-1.01953 0.1055,-0.42968 0.2774,-0.94433 0.5156,-1.54394 0.2383,-0.59961 0.5362,-1.21484 0.8936,-1.8457 0.3574,-0.63086 0.7822,-1.25879 1.2744,-1.88379 l -3.1348,0 c -0.3281,0 -0.5732,-0.0596 -0.7353,-0.17871 -0.1621,-0.11914 -0.2432,-0.30566 -0.2432,-0.55958 0,-0.26952 0.086,-0.44335 0.2578,-0.52148 0.1719,-0.0781 0.4121,-0.11718 0.7207,-0.11719 z" />
-        <path
-           inkscape:connector-curvature="0"
-           id="path3162"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:100%;font-family:'Arial Rounded MT Bold';-inkscape-font-specification:'Arial Rounded MT Bold,';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
-           d="m 434.8239,483.11603 c 0,0.64063 -0.039,1.19141 -0.1172,1.65235 -0.078,0.46094 -0.2226,0.87891 -0.4336,1.2539 -0.2656,0.46094 -0.6094,0.81641 -1.0312,1.06641 -0.4219,0.25 -0.8907,0.375 -1.4063,0.375 -0.5937,0 -1.126,-0.16797 -1.5967,-0.50391 -0.4707,-0.33593 -0.8252,-0.80078 -1.0634,-1.39453 -0.1211,-0.32421 -0.21,-0.68261 -0.2666,-1.07519 -0.057,-0.39258 -0.085,-0.81738 -0.085,-1.27442 0,-0.58983 0.031,-1.12108 0.094,-1.59375 0.062,-0.47265 0.1601,-0.8789 0.2929,-1.21875 0.2305,-0.56249 0.5654,-0.9912 1.0049,-1.28613 0.4395,-0.29491 0.9639,-0.44237 1.5732,-0.44238 0.4024,1e-5 0.7676,0.0654 1.0957,0.19629 0.3282,0.13087 0.6163,0.32227 0.8643,0.57422 0.248,0.25196 0.458,0.56348 0.6299,0.93457 0.2969,0.64453 0.4453,1.55664 0.4453,2.73632 z m -1.6055,-0.11718 c 0,-0.71484 -0.043,-1.2998 -0.1289,-1.75489 -0.086,-0.45507 -0.2304,-0.79882 -0.4336,-1.03125 -0.2031,-0.23241 -0.4843,-0.34862 -0.8437,-0.34863 -0.5156,10e-6 -0.874,0.25977 -1.0752,0.7793 -0.2012,0.51954 -0.3018,1.32032 -0.3018,2.40234 0,0.73438 0.043,1.33594 0.1289,1.80469 0.086,0.46875 0.2305,0.82324 0.4336,1.06348 0.2032,0.24023 0.4785,0.36035 0.8262,0.36035 0.3594,0 0.6406,-0.125 0.8438,-0.375 0.2031,-0.25 0.3456,-0.60742 0.4277,-1.07227 0.082,-0.46484 0.123,-1.07421 0.123,-1.82812 z" />
-        <path
-           inkscape:connector-curvature="0"
-           id="path3155"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:100%;font-family:'Arial Rounded MT Bold';-inkscape-font-specification:'Arial Rounded MT Bold,';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
-           d="m 447.4209,492.81026 c 0,-0.39062 0.1065,-0.75878 0.3194,-1.10449 0.2129,-0.3457 0.5254,-0.62207 0.9375,-0.8291 0.4121,-0.20703 0.8935,-0.31054 1.4443,-0.31055 0.4648,10e-6 0.873,0.0606 1.2246,0.18164 0.3516,0.1211 0.6445,0.28809 0.8789,0.50098 0.2344,0.21289 0.4082,0.45313 0.5215,0.7207 0.1133,0.26758 0.1699,0.55176 0.1699,0.85254 0,0.38282 -0.099,0.72461 -0.2959,1.02539 -0.1972,0.30078 -0.4912,0.54688 -0.8818,0.73828 0.332,0.12891 0.6074,0.29786 0.8262,0.50684 0.2187,0.20898 0.3837,0.45117 0.4951,0.72656 0.1113,0.27539 0.167,0.58106 0.167,0.91699 0,0.49219 -0.1192,0.93848 -0.3574,1.33887 -0.2383,0.40039 -0.5879,0.71387 -1.0489,0.94043 -0.4609,0.22656 -1.0039,0.33984 -1.6289,0.33984 -0.6484,0 -1.2031,-0.11328 -1.664,-0.33984 -0.461,-0.22656 -0.8086,-0.53809 -1.043,-0.93457 -0.2344,-0.39649 -0.3516,-0.84082 -0.3516,-1.33301 0,-1.05078 0.4961,-1.77148 1.4883,-2.16211 -0.8008,-0.375 -1.2012,-0.96679 -1.2012,-1.77539 z m 4.2012,3.87891 c 0,-0.30469 -0.062,-0.57031 -0.1875,-0.79688 -0.125,-0.22656 -0.3008,-0.40039 -0.5273,-0.52148 -0.2266,-0.12109 -0.4805,-0.18164 -0.7618,-0.18164 -0.3984,0 -0.7324,0.13281 -1.0019,0.39843 -0.2695,0.26563 -0.4043,0.63672 -0.4043,1.11328 0,0.30469 0.064,0.57325 0.1904,0.80567 0.127,0.23242 0.2998,0.41211 0.5186,0.53906 0.2187,0.12695 0.4629,0.19043 0.7324,0.19043 0.2734,0 0.5195,-0.0644 0.7383,-0.19336 0.2187,-0.1289 0.3906,-0.31054 0.5156,-0.54492 0.125,-0.23437 0.1875,-0.5039 0.1875,-0.80859 z m -1.4648,-5.00391 c -0.3672,10e-6 -0.6631,0.11426 -0.8877,0.34277 -0.2246,0.22853 -0.3369,0.52247 -0.3369,0.88184 0,0.33204 0.1152,0.6084 0.3457,0.8291 0.2304,0.22071 0.5273,0.33106 0.8906,0.33105 0.1836,10e-6 0.3506,-0.0293 0.501,-0.0879 0.1503,-0.0586 0.2793,-0.13964 0.3867,-0.24316 0.1074,-0.10351 0.1904,-0.22656 0.249,-0.36914 0.059,-0.14257 0.088,-0.2998 0.088,-0.47168 0,-0.23046 -0.052,-0.43749 -0.1553,-0.62109 -0.1035,-0.18359 -0.249,-0.32812 -0.4365,-0.4336 -0.1875,-0.10546 -0.4024,-0.15819 -0.6445,-0.1582 z" />
-        <path
-           inkscape:connector-curvature="0"
-           id="path3157"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:100%;font-family:'Arial Rounded MT Bold';-inkscape-font-specification:'Arial Rounded MT Bold,';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
-           d="m 460.3057,495.00752 c 0,0.64063 -0.039,1.19141 -0.1172,1.65235 -0.078,0.46094 -0.2226,0.87891 -0.4336,1.2539 -0.2656,0.46094 -0.6094,0.81641 -1.0312,1.06641 -0.4219,0.25 -0.8907,0.375 -1.4063,0.375 -0.5937,0 -1.126,-0.16797 -1.5967,-0.50391 -0.4707,-0.33593 -0.8252,-0.80078 -1.0634,-1.39453 -0.1211,-0.32421 -0.21,-0.68261 -0.2666,-1.07519 -0.057,-0.39258 -0.085,-0.81738 -0.085,-1.27442 0,-0.58983 0.031,-1.12108 0.094,-1.59375 0.062,-0.47265 0.1601,-0.8789 0.2929,-1.21875 0.2305,-0.56249 0.5654,-0.9912 1.0049,-1.28613 0.4395,-0.29491 0.9639,-0.44237 1.5732,-0.44238 0.4024,10e-6 0.7676,0.0654 1.0957,0.19629 0.3282,0.13087 0.6163,0.32227 0.8643,0.57422 0.248,0.25196 0.458,0.56348 0.6299,0.93457 0.2969,0.64453 0.4453,1.55664 0.4453,2.73632 z m -1.6055,-0.11718 c 0,-0.71484 -0.043,-1.2998 -0.1289,-1.75489 -0.086,-0.45507 -0.2304,-0.79882 -0.4336,-1.03125 -0.2031,-0.23241 -0.4843,-0.34862 -0.8437,-0.34863 -0.5156,1e-5 -0.874,0.25977 -1.0752,0.7793 -0.2012,0.51954 -0.3018,1.32032 -0.3018,2.40234 0,0.73438 0.043,1.33594 0.1289,1.80469 0.086,0.46875 0.2305,0.82324 0.4336,1.06348 0.2032,0.24023 0.4785,0.36035 0.8262,0.36035 0.3594,0 0.6406,-0.125 0.8438,-0.375 0.2031,-0.25 0.3456,-0.60742 0.4277,-1.07227 0.082,-0.46484 0.123,-1.07421 0.123,-1.82812 z" />
-        <path
-           inkscape:connector-curvature="0"
-           id="path3150"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:100%;font-family:'Arial Rounded MT Bold';-inkscape-font-specification:'Arial Rounded MT Bold,';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
-           d="m 476.5619,510.65987 c -0.2578,0.30469 -0.5459,0.53418 -0.8642,0.68847 -0.3184,0.1543 -0.6709,0.23145 -1.0577,0.23145 -0.3671,0 -0.7099,-0.0713 -1.0283,-0.21387 -0.3183,-0.14257 -0.5937,-0.34179 -0.8261,-0.59766 -0.2325,-0.25585 -0.4112,-0.55468 -0.5362,-0.89648 -0.125,-0.34179 -0.1875,-0.70019 -0.1875,-1.0752 0,-0.40233 0.07,-0.78417 0.211,-1.1455 0.1406,-0.36132 0.3418,-0.6748 0.6035,-0.94043 0.2617,-0.26562 0.5732,-0.47265 0.9345,-0.6211 0.3614,-0.14843 0.7608,-0.22264 1.1983,-0.22265 0.5039,1e-5 0.9531,0.0918 1.3476,0.27539 0.3946,0.1836 0.7266,0.4502 0.9961,0.7998 0.2696,0.34962 0.4766,0.79005 0.6211,1.32129 0.1446,0.53126 0.2168,1.13282 0.2168,1.80469 0,0.75 -0.076,1.41114 -0.2285,1.9834 -0.1523,0.57227 -0.374,1.05273 -0.665,1.4414 -0.2911,0.38868 -0.6397,0.67774 -1.0459,0.86719 -0.4063,0.18945 -0.8672,0.28418 -1.3828,0.28418 -0.5079,0 -0.9493,-0.0967 -1.3243,-0.29004 -0.375,-0.19336 -0.6601,-0.43359 -0.8554,-0.7207 -0.1953,-0.28711 -0.293,-0.56348 -0.293,-0.8291 0,-0.16406 0.061,-0.31055 0.1816,-0.43946 0.1211,-0.1289 0.2754,-0.19335 0.4629,-0.19336 0.1719,1e-5 0.3262,0.0479 0.4629,0.14356 0.1367,0.0957 0.2403,0.23926 0.3106,0.43066 0.086,0.23438 0.2285,0.42286 0.4277,0.56543 0.1992,0.14258 0.4238,0.21387 0.6738,0.21387 0.2227,0 0.4336,-0.0566 0.6328,-0.16992 0.1993,-0.11328 0.3692,-0.27344 0.5098,-0.48047 0.2813,-0.41797 0.4492,-1.15625 0.5039,-2.21484 z m -0.1347,-1.79297 c -1e-4,-0.26562 -0.036,-0.51074 -0.1084,-0.73535 -0.072,-0.22461 -0.1739,-0.41894 -0.3047,-0.58301 -0.1309,-0.16406 -0.2871,-0.29296 -0.4688,-0.38672 -0.1816,-0.0937 -0.3799,-0.14062 -0.5947,-0.14063 -0.3711,1e-5 -0.6856,0.15919 -0.9434,0.47754 -0.2578,0.31837 -0.3867,0.73927 -0.3867,1.2627 0,0.51954 0.1289,0.9336 0.3867,1.24219 0.2578,0.30859 0.584,0.46289 0.9785,0.46289 0.2422,0 0.4737,-0.0635 0.6944,-0.19043 0.2207,-0.12695 0.4004,-0.31152 0.539,-0.55371 0.1387,-0.24219 0.208,-0.52734 0.2081,-0.85547 z" />
-        <path
-           inkscape:connector-curvature="0"
-           id="path3152"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:100%;font-family:'Arial Rounded MT Bold';-inkscape-font-specification:'Arial Rounded MT Bold,';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
-           d="m 485.3627,510.29658 c 0,0.64063 -0.039,1.19141 -0.1172,1.65235 -0.078,0.46094 -0.2226,0.87891 -0.4336,1.2539 -0.2656,0.46094 -0.6094,0.81641 -1.0312,1.06641 -0.4219,0.25 -0.8907,0.375 -1.4063,0.375 -0.5937,0 -1.126,-0.16797 -1.5967,-0.50391 -0.4707,-0.33593 -0.8252,-0.80078 -1.0634,-1.39453 -0.1211,-0.32421 -0.21,-0.68261 -0.2666,-1.07519 -0.057,-0.39258 -0.085,-0.81738 -0.085,-1.27442 0,-0.58983 0.031,-1.12108 0.094,-1.59375 0.062,-0.47265 0.1601,-0.8789 0.2929,-1.21875 0.2305,-0.56249 0.5654,-0.9912 1.0049,-1.28613 0.4395,-0.29491 0.9639,-0.44237 1.5732,-0.44238 0.4024,10e-6 0.7676,0.0654 1.0957,0.19629 0.3282,0.13087 0.6163,0.32227 0.8643,0.57422 0.248,0.25196 0.458,0.56348 0.6299,0.93457 0.2969,0.64453 0.4453,1.55664 0.4453,2.73632 z m -1.6055,-0.11718 c 0,-0.71484 -0.043,-1.2998 -0.1289,-1.75489 -0.086,-0.45507 -0.2304,-0.79882 -0.4336,-1.03125 -0.2031,-0.23241 -0.4843,-0.34862 -0.8437,-0.34863 -0.5156,1e-5 -0.874,0.25977 -1.0752,0.7793 -0.2012,0.51954 -0.3018,1.32032 -0.3018,2.40234 0,0.73438 0.043,1.33594 0.1289,1.80469 0.086,0.46875 0.2305,0.82324 0.4336,1.06348 0.2032,0.24023 0.4785,0.36035 0.8262,0.36035 0.3594,0 0.6406,-0.125 0.8438,-0.375 0.2031,-0.25 0.3456,-0.60742 0.4277,-1.07227 0.082,-0.46484 0.123,-1.07421 0.123,-1.82812 z" />
-        <path
-           inkscape:connector-curvature="0"
-           id="path3143"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:100%;font-family:'Arial Rounded MT Bold';-inkscape-font-specification:'Arial Rounded MT Bold,';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
-           d="m 495.8721,535.36624 0,-5.33203 c -0.9922,0.76172 -1.6601,1.14258 -2.0039,1.14258 -0.1641,0 -0.3096,-0.0654 -0.4365,-0.19629 -0.127,-0.13086 -0.1904,-0.28222 -0.1904,-0.4541 0,-0.19922 0.062,-0.3457 0.1875,-0.43946 0.125,-0.0937 0.3457,-0.21483 0.6621,-0.36328 0.4726,-0.22265 0.8506,-0.45702 1.1338,-0.70312 0.2832,-0.24609 0.5341,-0.52148 0.7529,-0.82617 0.2187,-0.30468 0.3613,-0.49218 0.4277,-0.5625 0.066,-0.0703 0.1914,-0.10546 0.375,-0.10547 0.207,1e-5 0.3731,0.0801 0.4981,0.24023 0.125,0.16017 0.1875,0.38087 0.1875,0.66211 l 0,6.70899 c 0,0.78515 -0.2676,1.17773 -0.8028,1.17773 -0.2383,0 -0.4297,-0.0801 -0.5742,-0.24023 -0.1445,-0.16016 -0.2168,-0.39649 -0.2168,-0.70899 z" />
-        <path
-           inkscape:connector-curvature="0"
-           id="path3145"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:100%;font-family:'Arial Rounded MT Bold';-inkscape-font-specification:'Arial Rounded MT Bold,';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
-           d="m 506.1729,531.95608 c 0,0.64063 -0.039,1.19141 -0.1172,1.65235 -0.078,0.46094 -0.2226,0.87891 -0.4336,1.2539 -0.2656,0.46094 -0.6094,0.81641 -1.0312,1.06641 -0.4219,0.25 -0.8907,0.375 -1.4063,0.375 -0.5937,0 -1.126,-0.16797 -1.5967,-0.50391 -0.4707,-0.33593 -0.8252,-0.80078 -1.0634,-1.39453 -0.1211,-0.32421 -0.21,-0.68261 -0.2666,-1.07519 -0.057,-0.39258 -0.085,-0.81738 -0.085,-1.27442 0,-0.58983 0.031,-1.12108 0.094,-1.59375 0.062,-0.47265 0.1601,-0.8789 0.2929,-1.21875 0.2305,-0.56249 0.5654,-0.9912 1.0049,-1.28613 0.4395,-0.29491 0.9639,-0.44237 1.5732,-0.44238 0.4024,10e-6 0.7676,0.0654 1.0957,0.19629 0.3282,0.13087 0.6163,0.32227 0.8643,0.57422 0.248,0.25196 0.458,0.56348 0.6299,0.93457 0.2969,0.64453 0.4453,1.55664 0.4453,2.73632 z m -1.6055,-0.11718 c 0,-0.71484 -0.043,-1.2998 -0.1289,-1.75489 -0.086,-0.45507 -0.2304,-0.79882 -0.4336,-1.03125 -0.2031,-0.23241 -0.4843,-0.34862 -0.8437,-0.34863 -0.5156,1e-5 -0.874,0.25977 -1.0752,0.7793 -0.2012,0.51954 -0.3018,1.32032 -0.3018,2.40234 0,0.73438 0.043,1.33594 0.1289,1.80469 0.086,0.46875 0.2305,0.82324 0.4336,1.06348 0.2032,0.24023 0.4785,0.36035 0.8262,0.36035 0.3594,0 0.6406,-0.125 0.8438,-0.375 0.2031,-0.25 0.3456,-0.60742 0.4277,-1.07227 0.082,-0.46484 0.123,-1.07421 0.123,-1.82812 z" />
-        <path
-           inkscape:connector-curvature="0"
-           id="path3147"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:100%;font-family:'Arial Rounded MT Bold';-inkscape-font-specification:'Arial Rounded MT Bold,';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
-           d="m 513.2979,531.95608 c 0,0.64063 -0.039,1.19141 -0.1172,1.65235 -0.078,0.46094 -0.2226,0.87891 -0.4336,1.2539 -0.2656,0.46094 -0.6094,0.81641 -1.0312,1.06641 -0.4219,0.25 -0.8907,0.375 -1.4063,0.375 -0.5937,0 -1.126,-0.16797 -1.5967,-0.50391 -0.4707,-0.33593 -0.8252,-0.80078 -1.0634,-1.39453 -0.1211,-0.32421 -0.21,-0.68261 -0.2666,-1.07519 -0.057,-0.39258 -0.085,-0.81738 -0.085,-1.27442 0,-0.58983 0.031,-1.12108 0.094,-1.59375 0.062,-0.47265 0.1601,-0.8789 0.2929,-1.21875 0.2305,-0.56249 0.5654,-0.9912 1.0049,-1.28613 0.4395,-0.29491 0.9639,-0.44237 1.5732,-0.44238 0.4024,10e-6 0.7676,0.0654 1.0957,0.19629 0.3282,0.13087 0.6163,0.32227 0.8643,0.57422 0.248,0.25196 0.458,0.56348 0.6299,0.93457 0.2969,0.64453 0.4453,1.55664 0.4453,2.73632 z m -1.6055,-0.11718 c 0,-0.71484 -0.043,-1.2998 -0.1289,-1.75489 -0.086,-0.45507 -0.2304,-0.79882 -0.4336,-1.03125 -0.2031,-0.23241 -0.4843,-0.34862 -0.8437,-0.34863 -0.5156,1e-5 -0.874,0.25977 -1.0752,0.7793 -0.2012,0.51954 -0.3018,1.32032 -0.3018,2.40234 0,0.73438 0.043,1.33594 0.1289,1.80469 0.086,0.46875 0.2305,0.82324 0.4336,1.06348 0.2032,0.24023 0.4785,0.36035 0.8262,0.36035 0.3594,0 0.6406,-0.125 0.8438,-0.375 0.2031,-0.25 0.3456,-0.60742 0.4277,-1.07227 0.082,-0.46484 0.123,-1.07421 0.123,-1.82812 z" />
-        <path
-           inkscape:connector-curvature="0"
-           id="path3138"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:100%;font-family:'Arial Rounded MT Bold';-inkscape-font-specification:'Arial Rounded MT Bold,';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
-           d="m 341.6725,479.78964 0,-1.08984 -2.9414,0 c -0.3711,0 -0.6494,-0.084 -0.835,-0.25195 -0.1855,-0.16797 -0.2783,-0.39648 -0.2783,-0.68555 0,-0.0742 0.014,-0.14941 0.041,-0.22558 0.027,-0.0762 0.068,-0.15625 0.123,-0.24024 0.055,-0.084 0.1114,-0.16503 0.17,-0.24316 0.059,-0.0781 0.1308,-0.17383 0.2168,-0.28711 l 3.1054,-4.1543 c 0.2032,-0.27343 0.3701,-0.47167 0.501,-0.59473 0.1309,-0.12303 0.2881,-0.18456 0.4717,-0.18457 0.5937,1e-5 0.8906,0.33986 0.8906,1.01953 l 0,4.53516 0.252,0 c 0.3007,0 0.542,0.041 0.7236,0.12305 0.1816,0.082 0.2725,0.26172 0.2725,0.53906 0,0.22657 -0.074,0.3916 -0.2227,0.49512 -0.1484,0.10352 -0.3711,0.15527 -0.668,0.15527 l -0.3574,0 0,1.08984 c 0,0.30079 -0.066,0.52442 -0.1992,0.6709 -0.1328,0.14649 -0.3106,0.21973 -0.5332,0.21973 -0.2188,0 -0.3955,-0.0752 -0.5303,-0.22559 -0.1347,-0.15039 -0.2021,-0.37207 -0.2021,-0.66504 z m -2.5196,-2.40234 2.5196,0 0,-3.4043 z" />
-        <path
-           inkscape:connector-curvature="0"
-           id="path3140"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:100%;font-family:'Arial Rounded MT Bold';-inkscape-font-specification:'Arial Rounded MT Bold,';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
-           d="m 351.1588,476.32089 c 0,0.64063 -0.039,1.19141 -0.1172,1.65235 -0.078,0.46094 -0.2226,0.87891 -0.4336,1.2539 -0.2656,0.46094 -0.6094,0.81641 -1.0312,1.06641 -0.4219,0.25 -0.8907,0.375 -1.4063,0.375 -0.5937,0 -1.126,-0.16797 -1.5967,-0.50391 -0.4707,-0.33593 -0.8252,-0.80078 -1.0634,-1.39453 -0.1211,-0.32421 -0.21,-0.68261 -0.2666,-1.07519 -0.057,-0.39258 -0.085,-0.81738 -0.085,-1.27442 0,-0.58983 0.031,-1.12108 0.094,-1.59375 0.062,-0.47265 0.1601,-0.8789 0.2929,-1.21875 0.2305,-0.56249 0.5654,-0.9912 1.0049,-1.28613 0.4395,-0.29491 0.9639,-0.44237 1.5732,-0.44238 0.4024,1e-5 0.7676,0.0654 1.0957,0.19629 0.3282,0.13087 0.6163,0.32227 0.8643,0.57422 0.248,0.25196 0.458,0.56348 0.6299,0.93457 0.2969,0.64453 0.4453,1.55664 0.4453,2.73632 z m -1.6055,-0.11718 c 0,-0.71484 -0.043,-1.2998 -0.1289,-1.75489 -0.086,-0.45507 -0.2304,-0.79882 -0.4336,-1.03125 -0.2031,-0.23241 -0.4843,-0.34862 -0.8437,-0.34863 -0.5156,10e-6 -0.874,0.25977 -1.0752,0.7793 -0.2012,0.51954 -0.3018,1.32032 -0.3018,2.40234 0,0.73438 0.043,1.33594 0.1289,1.80469 0.086,0.46875 0.2305,0.82324 0.4336,1.06348 0.2032,0.24023 0.4785,0.36035 0.8262,0.36035 0.3594,0 0.6406,-0.125 0.8438,-0.375 0.2031,-0.25 0.3456,-0.60742 0.4277,-1.07227 0.082,-0.46484 0.123,-1.07421 0.123,-1.82812 z" />
-        <path
-           inkscape:connector-curvature="0"
-           id="path3133"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:100%;font-family:'Arial Rounded MT Bold';-inkscape-font-specification:'Arial Rounded MT Bold,';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
-           d="m 313.5778,482.14338 c 0.3594,0 0.669,-0.10546 0.9287,-0.31641 0.2598,-0.21093 0.3897,-0.51366 0.3897,-0.9082 0,-0.30078 -0.1036,-0.55956 -0.3106,-0.77637 -0.207,-0.21679 -0.4863,-0.32519 -0.8379,-0.32519 -0.2383,0 -0.4345,0.0332 -0.5888,0.0996 -0.1543,0.0664 -0.2764,0.1543 -0.3662,0.26367 -0.09,0.10938 -0.1749,0.25 -0.2549,0.42187 -0.08,0.17188 -0.1534,0.33399 -0.2198,0.48633 -0.039,0.082 -0.1093,0.14649 -0.2109,0.19336 -0.1016,0.0469 -0.2187,0.0703 -0.3516,0.0703 -0.1562,10e-6 -0.2998,-0.0635 -0.4306,-0.19043 -0.1309,-0.12694 -0.1963,-0.29589 -0.1963,-0.50683 0,-0.20312 0.061,-0.41699 0.1846,-0.6416 0.123,-0.22461 0.3027,-0.43847 0.539,-0.64161 0.2363,-0.20311 0.5303,-0.3662 0.8819,-0.48925 0.3515,-0.12304 0.7441,-0.18457 1.1777,-0.18457 0.3789,0 0.7246,0.0518 1.0371,0.15527 0.3125,0.10352 0.584,0.25294 0.8145,0.44824 0.2304,0.19532 0.4042,0.42188 0.5214,0.67969 0.1172,0.25782 0.1758,0.53516 0.1758,0.83203 0,0.39063 -0.085,0.72559 -0.2549,1.00488 -0.1699,0.27931 -0.4131,0.55177 -0.7295,0.81739 0.3047,0.16406 0.5616,0.35156 0.7706,0.5625 0.2089,0.21094 0.3662,0.44434 0.4716,0.70019 0.1055,0.25586 0.1582,0.53223 0.1582,0.8291 0,0.35547 -0.071,0.69922 -0.2138,1.03125 -0.1426,0.33204 -0.3526,0.62793 -0.6299,0.8877 -0.2774,0.25976 -0.6065,0.46289 -0.9873,0.60937 -0.3809,0.14649 -0.8018,0.21973 -1.2627,0.21973 -0.4688,0 -0.8887,-0.084 -1.2598,-0.25195 -0.3711,-0.16797 -0.6767,-0.37793 -0.917,-0.62989 -0.2402,-0.25195 -0.4218,-0.51269 -0.5449,-0.78222 -0.123,-0.26953 -0.1846,-0.49219 -0.1846,-0.66797 0,-0.22656 0.073,-0.40918 0.2198,-0.54785 0.1464,-0.13867 0.3291,-0.20801 0.5478,-0.20801 0.1094,0 0.2149,0.0322 0.3164,0.0967 0.1016,0.0645 0.168,0.1416 0.1992,0.23144 0.2032,0.54298 0.4209,0.94629 0.6534,1.20997 0.2324,0.26367 0.5595,0.3955 0.9814,0.3955 0.2422,0 0.4756,-0.0596 0.7002,-0.17871 0.2246,-0.11914 0.4102,-0.29589 0.5566,-0.53027 0.1465,-0.23437 0.2198,-0.50586 0.2198,-0.81445 0,-0.45703 -0.125,-0.81543 -0.375,-1.0752 -0.25,-0.25976 -0.5977,-0.38964 -1.043,-0.38965 -0.078,10e-6 -0.1992,0.008 -0.3633,0.0234 -0.164,0.0156 -0.2695,0.0234 -0.3164,0.0234 -0.2148,0 -0.3808,-0.0537 -0.498,-0.16114 -0.1172,-0.10741 -0.1758,-0.25683 -0.1758,-0.44824 0,-0.18749 0.07,-0.33886 0.2109,-0.4541 0.1406,-0.11523 0.3496,-0.17285 0.627,-0.17285 z" />
-        <path
-           inkscape:connector-curvature="0"
-           id="path3135"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:100%;font-family:'Arial Rounded MT Bold';-inkscape-font-specification:'Arial Rounded MT Bold,';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
-           d="m 323.9782,483.11603 c 0,0.64063 -0.039,1.19141 -0.1172,1.65235 -0.078,0.46094 -0.2226,0.87891 -0.4336,1.2539 -0.2656,0.46094 -0.6094,0.81641 -1.0312,1.06641 -0.4219,0.25 -0.8907,0.375 -1.4063,0.375 -0.5937,0 -1.126,-0.16797 -1.5967,-0.50391 -0.4707,-0.33593 -0.8252,-0.80078 -1.0634,-1.39453 -0.1211,-0.32421 -0.21,-0.68261 -0.2666,-1.07519 -0.057,-0.39258 -0.085,-0.81738 -0.085,-1.27442 0,-0.58983 0.031,-1.12108 0.094,-1.59375 0.062,-0.47265 0.1601,-0.8789 0.2929,-1.21875 0.2305,-0.56249 0.5654,-0.9912 1.0049,-1.28613 0.4395,-0.29491 0.9639,-0.44237 1.5732,-0.44238 0.4024,1e-5 0.7676,0.0654 1.0957,0.19629 0.3282,0.13087 0.6163,0.32227 0.8643,0.57422 0.248,0.25196 0.458,0.56348 0.6299,0.93457 0.2969,0.64453 0.4453,1.55664 0.4453,2.73632 z m -1.6055,-0.11718 c 0,-0.71484 -0.043,-1.2998 -0.1289,-1.75489 -0.086,-0.45507 -0.2304,-0.79882 -0.4336,-1.03125 -0.2031,-0.23241 -0.4843,-0.34862 -0.8437,-0.34863 -0.5156,10e-6 -0.874,0.25977 -1.0752,0.7793 -0.2012,0.51954 -0.3018,1.32032 -0.3018,2.40234 0,0.73438 0.043,1.33594 0.1289,1.80469 0.086,0.46875 0.2305,0.82324 0.4336,1.06348 0.2032,0.24023 0.4785,0.36035 0.8262,0.36035 0.3594,0 0.6406,-0.125 0.8438,-0.375 0.2031,-0.25 0.3456,-0.60742 0.4277,-1.07227 0.082,-0.46484 0.123,-1.07421 0.123,-1.82812 z" />
-        <path
-           inkscape:connector-curvature="0"
-           id="path3128"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:100%;font-family:'Arial Rounded MT Bold';-inkscape-font-specification:'Arial Rounded MT Bold,';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
-           d="m 286.2126,496.56351 3.0586,0 c 0.3047,0 0.5371,0.0625 0.6973,0.1875 0.1601,0.125 0.2402,0.29493 0.2402,0.50977 0,0.19141 -0.064,0.35351 -0.1904,0.48633 -0.127,0.13281 -0.3193,0.19922 -0.5771,0.19922 l -4.3125,0 c -0.293,0 -0.5215,-0.0811 -0.6856,-0.24317 -0.1641,-0.16211 -0.2461,-0.35254 -0.2461,-0.57129 0,-0.14062 0.053,-0.32714 0.1582,-0.55957 0.1055,-0.23242 0.2207,-0.41504 0.3457,-0.54785 0.5195,-0.53906 0.9883,-1.00097 1.4063,-1.38574 0.4179,-0.38476 0.7168,-0.63769 0.8965,-0.75879 0.3203,-0.22656 0.5869,-0.4541 0.7998,-0.68262 0.2128,-0.22851 0.375,-0.46288 0.4863,-0.70312 0.1113,-0.24023 0.167,-0.47558 0.167,-0.70606 0,-0.24999 -0.06,-0.47362 -0.1787,-0.6709 -0.1192,-0.19725 -0.2813,-0.35057 -0.4864,-0.45996 -0.205,-0.10936 -0.4287,-0.16405 -0.6709,-0.16406 -0.5117,10e-6 -0.914,0.22462 -1.207,0.67383 -0.039,0.0586 -0.1045,0.21876 -0.1963,0.48047 -0.092,0.26172 -0.1953,0.46289 -0.3105,0.60351 -0.1153,0.14063 -0.2842,0.21095 -0.5069,0.21094 -0.1953,10e-6 -0.3574,-0.0644 -0.4863,-0.19336 -0.1289,-0.1289 -0.1934,-0.30468 -0.1934,-0.52734 0,-0.26953 0.061,-0.55078 0.1817,-0.84375 0.1211,-0.29296 0.3017,-0.55859 0.542,-0.79688 0.2402,-0.23827 0.5449,-0.43065 0.914,-0.57715 0.3692,-0.14647 0.8018,-0.21971 1.2979,-0.21972 0.5976,1e-5 1.1074,0.0938 1.5293,0.28125 0.2734,0.12501 0.5137,0.29688 0.7207,0.51562 0.207,0.21876 0.3682,0.47169 0.4834,0.75879 0.1152,0.28712 0.1728,0.58497 0.1728,0.89356 0,0.48438 -0.1201,0.92481 -0.3603,1.32129 -0.2402,0.39648 -0.4854,0.70703 -0.7354,0.93164 -0.25,0.22461 -0.6689,0.57715 -1.2568,1.05761 -0.5879,0.48047 -0.9912,0.85352 -1.21,1.11914 -0.094,0.10547 -0.1894,0.23243 -0.2871,0.38086 z" />
-        <path
-           inkscape:connector-curvature="0"
-           id="path3130"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:100%;font-family:'Arial Rounded MT Bold';-inkscape-font-specification:'Arial Rounded MT Bold,';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
-           d="m 297.2224,493.73343 c 0,0.64063 -0.039,1.19141 -0.1172,1.65235 -0.078,0.46094 -0.2226,0.87891 -0.4336,1.2539 -0.2656,0.46094 -0.6094,0.81641 -1.0312,1.06641 -0.4219,0.25 -0.8907,0.375 -1.4063,0.375 -0.5937,0 -1.126,-0.16797 -1.5967,-0.50391 -0.4707,-0.33593 -0.8252,-0.80078 -1.0634,-1.39453 -0.1211,-0.32421 -0.21,-0.68261 -0.2666,-1.07519 -0.057,-0.39258 -0.085,-0.81738 -0.085,-1.27442 0,-0.58983 0.031,-1.12108 0.094,-1.59375 0.062,-0.47265 0.1601,-0.8789 0.2929,-1.21875 0.2305,-0.56249 0.5654,-0.9912 1.0049,-1.28613 0.4395,-0.29491 0.9639,-0.44237 1.5732,-0.44238 0.4024,10e-6 0.7676,0.0654 1.0957,0.19629 0.3282,0.13087 0.6163,0.32227 0.8643,0.57422 0.248,0.25196 0.458,0.56348 0.6299,0.93457 0.2969,0.64453 0.4453,1.55664 0.4453,2.73632 z m -1.6055,-0.11718 c 0,-0.71484 -0.043,-1.2998 -0.1289,-1.75489 -0.086,-0.45507 -0.2304,-0.79882 -0.4336,-1.03125 -0.2031,-0.23241 -0.4843,-0.34862 -0.8437,-0.34863 -0.5156,1e-5 -0.874,0.25977 -1.0752,0.7793 -0.2012,0.51954 -0.3018,1.32032 -0.3018,2.40234 0,0.73438 0.043,1.33594 0.1289,1.80469 0.086,0.46875 0.2305,0.82324 0.4336,1.06348 0.2032,0.24023 0.4785,0.36035 0.8262,0.36035 0.3594,0 0.6406,-0.125 0.8438,-0.375 0.2031,-0.25 0.3456,-0.60742 0.4277,-1.07227 0.082,-0.46484 0.123,-1.07421 0.123,-1.82812 z" />
-        <path
-           inkscape:connector-curvature="0"
-           id="path3123"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:100%;font-family:'Arial Rounded MT Bold';-inkscape-font-specification:'Arial Rounded MT Bold,';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
-           d="m 263.1386,514.13143 0,-5.33203 c -0.9922,0.76172 -1.6601,1.14258 -2.0039,1.14258 -0.1641,0 -0.3096,-0.0654 -0.4365,-0.19629 -0.127,-0.13086 -0.1904,-0.28222 -0.1904,-0.4541 0,-0.19922 0.062,-0.3457 0.1875,-0.43946 0.125,-0.0937 0.3457,-0.21483 0.6621,-0.36328 0.4726,-0.22265 0.8506,-0.45702 1.1338,-0.70312 0.2832,-0.24609 0.5341,-0.52148 0.7529,-0.82617 0.2187,-0.30468 0.3613,-0.49218 0.4277,-0.5625 0.066,-0.0703 0.1914,-0.10546 0.375,-0.10547 0.207,1e-5 0.3731,0.0801 0.4981,0.24023 0.125,0.16017 0.1875,0.38087 0.1875,0.66211 l 0,6.70899 c 0,0.78515 -0.2676,1.17773 -0.8028,1.17773 -0.2383,0 -0.4297,-0.0801 -0.5742,-0.24023 -0.1445,-0.16016 -0.2168,-0.39649 -0.2168,-0.70899 z" />
-        <path
-           inkscape:connector-curvature="0"
-           id="path3125"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:100%;font-family:'Arial Rounded MT Bold';-inkscape-font-specification:'Arial Rounded MT Bold,';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
-           d="m 273.4394,510.72127 c 0,0.64063 -0.039,1.19141 -0.1172,1.65235 -0.078,0.46094 -0.2226,0.87891 -0.4336,1.2539 -0.2656,0.46094 -0.6094,0.81641 -1.0312,1.06641 -0.4219,0.25 -0.8907,0.375 -1.4063,0.375 -0.5937,0 -1.126,-0.16797 -1.5967,-0.50391 -0.4707,-0.33593 -0.8252,-0.80078 -1.0634,-1.39453 -0.1211,-0.32421 -0.21,-0.68261 -0.2666,-1.07519 -0.057,-0.39258 -0.085,-0.81738 -0.085,-1.27442 0,-0.58983 0.031,-1.12108 0.094,-1.59375 0.062,-0.47265 0.1601,-0.8789 0.2929,-1.21875 0.2305,-0.56249 0.5654,-0.9912 1.0049,-1.28613 0.4395,-0.29491 0.9639,-0.44237 1.5732,-0.44238 0.4024,10e-6 0.7676,0.0654 1.0957,0.19629 0.3282,0.13087 0.6163,0.32227 0.8643,0.57422 0.248,0.25196 0.458,0.56348 0.6299,0.93457 0.2969,0.64453 0.4453,1.55664 0.4453,2.73632 z m -1.6055,-0.11718 c 0,-0.71484 -0.043,-1.2998 -0.1289,-1.75489 -0.086,-0.45507 -0.2304,-0.79882 -0.4336,-1.03125 -0.2031,-0.23241 -0.4843,-0.34862 -0.8437,-0.34863 -0.5156,1e-5 -0.874,0.25977 -1.0752,0.7793 -0.2012,0.51954 -0.3018,1.32032 -0.3018,2.40234 0,0.73438 0.043,1.33594 0.1289,1.80469 0.086,0.46875 0.2305,0.82324 0.4336,1.06348 0.2032,0.24023 0.4785,0.36035 0.8262,0.36035 0.3594,0 0.6406,-0.125 0.8438,-0.375 0.2031,-0.25 0.3456,-0.60742 0.4277,-1.07227 0.082,-0.46484 0.123,-1.07421 0.123,-1.82812 z" />
-        <path
-           inkscape:connector-curvature="0"
-           id="path3120"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:100%;font-family:'Arial Rounded MT Bold';-inkscape-font-specification:'Arial Rounded MT Bold,';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
-           d="m 244.408,533.10669 c 0,0.64063 -0.039,1.19141 -0.1172,1.65235 -0.078,0.46094 -0.2226,0.87891 -0.4336,1.2539 -0.2656,0.46094 -0.6094,0.81641 -1.0312,1.06641 -0.4219,0.25 -0.8907,0.375 -1.4063,0.375 -0.5937,0 -1.126,-0.16797 -1.5967,-0.50391 -0.4707,-0.33593 -0.8252,-0.80078 -1.0634,-1.39453 -0.1211,-0.32421 -0.21,-0.68261 -0.2666,-1.07519 -0.057,-0.39258 -0.085,-0.81738 -0.085,-1.27442 0,-0.58983 0.031,-1.12108 0.094,-1.59375 0.062,-0.47265 0.1601,-0.8789 0.2929,-1.21875 0.2305,-0.56249 0.5654,-0.9912 1.0049,-1.28613 0.4395,-0.29491 0.9639,-0.44237 1.5732,-0.44238 0.4024,10e-6 0.7676,0.0654 1.0957,0.19629 0.3282,0.13087 0.6163,0.32227 0.8643,0.57422 0.248,0.25196 0.458,0.56348 0.6299,0.93457 0.2969,0.64453 0.4453,1.55664 0.4453,2.73632 z m -1.6055,-0.11718 c 0,-0.71484 -0.043,-1.2998 -0.1289,-1.75489 -0.086,-0.45507 -0.2304,-0.79882 -0.4336,-1.03125 -0.2031,-0.23241 -0.4843,-0.34862 -0.8437,-0.34863 -0.5156,10e-6 -0.874,0.25977 -1.0752,0.7793 -0.2012,0.51954 -0.3018,1.32032 -0.3018,2.40234 0,0.73438 0.043,1.33594 0.1289,1.80469 0.086,0.46875 0.2305,0.82324 0.4336,1.06348 0.2032,0.24023 0.4785,0.36035 0.8262,0.36035 0.3594,0 0.6406,-0.125 0.8438,-0.375 0.2031,-0.25 0.3456,-0.60742 0.4277,-1.07227 0.082,-0.46484 0.123,-1.07421 0.123,-1.82812 z" />
-      </g>
-    </g>
-  </g>
-</svg>
diff --git a/Images/screenshot.png b/Images/screenshot.png
deleted file mode 100644 (file)
index 3540d6b..0000000
Binary files a/Images/screenshot.png and /dev/null differ
diff --git a/Images/screenshot2.png b/Images/screenshot2.png
deleted file mode 100644 (file)
index 46a7bec..0000000
Binary files a/Images/screenshot2.png and /dev/null differ
index a799c754857b1154d65d11f3ec21ee21a2d57194..8b7d2a285387c4098385f35a1807c2167d844f59 100755 (executable)
@@ -43,7 +43,7 @@ using System.Runtime.CompilerServices;
 // The form "{Major}.{Minor}.*" will automatically update the build and revision,
 // and "{Major}.{Minor}.{Build}.*" will update just the revision.
 
-[assembly: AssemblyVersion ("0.7.1.*")]
+[assembly: AssemblyVersion ("0.7.1")]
 
 // The following attributes are used to specify the signing key for the assembly,
 // if desired. See the Mono documentation for more information about signing.
diff --git a/Templates/ArrowBut.template b/Templates/ArrowBut.template
deleted file mode 100755 (executable)
index 2d3bb29..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0"?>
-<Border Name="Content"
-       Background="vgradient|0:White|0.1:LightGrey|0.9:LightGrey|1:Black" Foreground="DarkGrey" 
-       MouseEnter="{Foreground=White}"
-       MouseLeave="{Foreground=DarkGrey}"
-       MouseDown="{Background=vgradient|0:Black|0.1:LightGrey|0.9:LightGrey|1:White}"
-       MouseUp="{Background=vgradient|0:White|0.1:LightGrey|0.9:LightGrey|1:Black}"
-       >
-</Border>
diff --git a/Templates/Button.template b/Templates/Button.template
deleted file mode 100755 (executable)
index d2f6c60..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0"?>
-<Border Background="{./Background}" MinimumSize="50,20" Name="Content"
-       Foreground="Transparent" CornerRadius="{../CornerRadius}" BorderWidth="1"
-       MouseEnter="{Foreground=vgradient|0:White|0.2:Grey|0.9:Grey|1:Black;caption.Foreground=White}"
-       MouseLeave="{Foreground=Transparent;caption.Foreground=LightGrey}"
-       MouseDown="{Foreground=vgradient|0:Black|0.05:Grey|0.85:Grey|1:White}"
-       MouseUp="{Foreground=vgradient|0:White|0.2:Grey|0.9:Grey|1:Black}"                  
-       >
-       <Label Font="{./Font}" Name="caption" Margin="3" Foreground="LightGrey" Text="{./Caption}"/>
-</Border>
diff --git a/Templates/CheckBox.template b/Templates/CheckBox.template
deleted file mode 100755 (executable)
index a9a62a4..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0"?>
-<HorizontalStack Style="Control" Background="{./Background}">
-       <Image Style="Icon" Path="#Crow.Images.Icons.checkbox.svg"
-               SvgSub="{./IsChecked}"/>
-       <Label Font="{./Font}" Text="{./Caption}" Foreground="{./Foreground}"/>
-</HorizontalStack>
\ No newline at end of file
diff --git a/Templates/CheckBox2.template b/Templates/CheckBox2.template
deleted file mode 100644 (file)
index 0fa0ffe..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-<Border Foreground="Transparent" MouseEnter="{Foreground=Grey}" MouseLeave="{Foreground=Transparent}">
-       <Label Font="{./Font}" Text="{./Caption}"
-               Margin="1"
-               Background="{./Background}"
-               Foreground="{./Foreground}"
-               TextAlignment="Center"/>
-</Border>
\ No newline at end of file
diff --git a/Templates/ColorPicker.template b/Templates/ColorPicker.template
deleted file mode 100755 (executable)
index 7196585..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0"?>
-<Border Background="{./Background}"    Foreground="{./Foreground}"
-               CornerRadius="{./CornerRadius}" BorderWidth="1">
-               <HorizontalStack Spacing="0">
-                       <VerticalStack Margin="5">
-                               <SaturationValueSelector S="{²./S}" V="{²./V}" Focusable="true" Name="colorSelector" Margin="0"
-                                       Foreground="{../hueSelector.HueColor}"
-                                       Width="128" Height="128"/>
-                               <HueSelector Hue="{²./H}" Focusable="true" Name="hueSelector" Margin="0" Width="128" Height="20"/>
-                       </VerticalStack>
-                       <VerticalStack Margin="5" Spacing="1">
-                               <GraphicObject Width="34" Height="21" Background="{./SelectedColor}"/>
-                               <Label Focusable="true" Selectable="true" Text="{./SelectedColor}" />                           
-                               <HorizontalStack Height="Fit">
-                                       <Label Text="R" Width="Fit"/>
-                                       <Spinner Style="ColorSpinner" Value="{²./R}" Width="40"  />
-                               </HorizontalStack>
-                               <HorizontalStack Height="Fit">
-                                       <Label Text="G" Width="Fit"/>
-                                       <Spinner Style="ColorSpinner" Value="{²./G}" Width="40"  />
-                               </HorizontalStack>
-                               <HorizontalStack Height="Fit">
-                                       <Label Text="B" Width="Fit"/>
-                                       <Spinner Style="ColorSpinner" Value="{²./B}" Width="40"  />
-                               </HorizontalStack>
-                               <HorizontalStack Height="Fit">
-                                       <Label Text="A" Width="Fit"/>
-                                       <Spinner Style="ColorSpinner" Value="{²./A}" Width="40"  />
-                               </HorizontalStack>
-                               <HorizontalStack Height="Fit">
-                                       <Label Text="H" Width="Fit"/>
-                                       <Spinner Style="HSVSpinner" Value="{²./H}" Width="40"  />
-                               </HorizontalStack>
-                               <HorizontalStack Height="Fit">
-                                       <Label Text="S" Width="Fit"/>
-                                       <Spinner Style="HSVSpinner" Value="{²./S}" Width="40"  />
-                               </HorizontalStack>
-                               <HorizontalStack Height="Fit">
-                                       <Label Text="V" Width="Fit"/>
-                                       <Spinner Style="HSVSpinner" Value="{²./V}" Width="40"  />
-                               </HorizontalStack>
-                       </VerticalStack>
-               </HorizontalStack>
-</Border>
diff --git a/Templates/ComboBox.template b/Templates/ComboBox.template
deleted file mode 100755 (executable)
index a6286a0..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0"?>
-<Popper Caption="{./SelectedItem}" Name="popper" PopDirection="Bottom" Foreground="{./Foreground}" Background="{./Background}">
-       <Template>
-               <CheckBox Caption="{./Caption}" IsChecked="{²./IsPopped}" Foreground="{./Foreground}" Background="{./Background}">
-                       <Template>
-                               <Border CornerRadius="0" Foreground="LightGrey">
-                                       <HorizontalStack Margin="0" Spacing="1">
-                                               <TextBox MinimumSize="80,10" Margin="1" Foreground="Black" Background="White"
-                                                       Text="{./Caption}"/>
-                                               <Button Width="14" Height="14" Focusable="false"
-                                                       Template="#Crow.Templates.ArrowBut.template">
-                                                       <Image Margin="0"  Path="#Crow.Images.Icons.updown.svg" SvgSub="down"/>
-                                               </Button>
-                                       </HorizontalStack>
-                               </Border>
-                       </Template>
-               </CheckBox>
-       </Template>
-       <Border Background="DimGrey" BorderWidth="1" Margin="1"
-               MinimumSize="{../../MinimumPopupSize}" Fit="true">
-               <Scroller Name="scroller1" Margin="2" 
-                       MaximumSize="0,200"
-                       HorizontalAlignment="Left">
-                       <VerticalStack
-                               Height="Fit" Name="ItemsContainer" Margin="0"
-                               HorizontalAlignment="Left"
-                               VerticalAlignment="Top"/>
-               </Scroller>
-       </Border>
-</Popper>
diff --git a/Templates/ContextMenu.template b/Templates/ContextMenu.template
deleted file mode 100644 (file)
index 7fc8dcc..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<MenuItem MinimumSize="20,20" Height="Fit" Width="160" Caption="Context Menu" Data="{ContextCommands}" Orientation="Vertical"
-       IsOpened ="true" Visible="{/IsOpened}" SelectionBackground="Transparent"
-       Background="Red">
-       <Template>
-               <HorizontalStack>
-                       <Border Background="DimGrey" Foreground="DimGrey" CornerRadius="5">
-                       <GenericStack Orientation="{./Orientation}" Name="ItemsContainer"
-                               Margin="2"/>
-                       </Border>
-               </HorizontalStack>
-       </Template>
-       <ItemTemplate>
-               <MenuItem Command="{}" Width="150" PopWidth="120" SelectionBackground="Transparent" IsEnabled="{CanExecute}">
-                       <Template>
-                               <Popper Font="{./Font}" Caption="{./Caption}"  Background="{./Background}" PopDirection="{./PopDirection}"
-                                       Foreground = "{./Foreground}" CanPop="{./HasChildren}" MouseDown="./onMI_Click"
-                                       IsPopped="{²./IsOpened}" PopWidth="{./PopWidth}" PopHeight="{./PopHeight}">
-                                       <Template>
-                                               <Border Name="border1"
-                                                               CornerRadius="2"
-                                                               MouseEnter="{Foreground=vgradient|0:White|0.2:Grey|0.9:Grey|1:Black}"
-                                                               MouseLeave="{Foreground=Transparent}"
-                                                               MouseDown="{Foreground=vgradient|0:Black|0.05:Grey|0.85:Grey|1:White}"
-                                                               MouseUp="{Foreground=vgradient|0:White|0.2:Grey|0.9:Grey|1:Black}"
-                                                               MinimumSize = "60,0"
-                                                               Foreground="Transparent"
-                                                               Background="{./Background}">
-                                                               <Label Text="{./Caption}"
-                                                                       Foreground="{./Foreground}"
-                                                                       Margin="3" HorizontalAlignment="Left"
-                                                                       Font="{./Font}" />
-                                               </Border>
-                                       </Template>
-                                       <Border Foreground="DimGrey" Width="{../PopWidth}" Height="{../PopHeight}" Background="DimGrey">
-                                               <VerticalStack Name="ItemsContainer"/>
-                                       </Border>
-                               </Popper>
-                       </Template>
-               </MenuItem>
-       </ItemTemplate>
-</MenuItem>
-
diff --git a/Templates/DefaultItem.template b/Templates/DefaultItem.template
deleted file mode 100755 (executable)
index fc13ab4..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0"?>
-<Container Fit="true" Margin="0" Focusable="true"
-               HorizontalAlignment="Left"
-               MouseEnter="{Background=SteelBlue}"
-               MouseLeave="{Background=Transparent}">
-       <Label Text="{}"/>
-</Container>
-
diff --git a/Templates/DirectoryView.template b/Templates/DirectoryView.template
deleted file mode 100755 (executable)
index 9faab17..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0"?>
-<TreeView IsRoot="true" Name="treeView" Data="{./FileSystemEntries}" Background="{./Background}"
-               SelectedItemChanged="./onSelectedItemChanged">
-       <ItemTemplate DataType="System.IO.FileInfo">
-               <Border CornerRadius="2" Margin="0" Focusable="true"  Height="Fit" Width="Stretched" Foreground="Transparent"
-                               MouseEnter="{Foreground=DimGrey}"
-                               MouseLeave="{Foreground=Transparent}">
-                       <HorizontalStack>
-                               <Image Margin="1" Width="14" Height="14"
-                                       Path="#Crow.Icons.file.svg"/>
-                               <Label Text="{Name}" Width="Stretched"/>
-                       </HorizontalStack>
-               </Border>
-       </ItemTemplate>
-       <ItemTemplate DataType="System.IO.DirectoryInfo" Data="GetFileSystemInfos">
-               <Expandable Caption="{Name}" >
-                       <Template>
-                               <VerticalStack>
-                                       <Border CornerRadius="2" Margin="0" Height="Fit" MouseDoubleClick="./onClickForExpand"
-                                                       Foreground="Transparent"
-                                                       MouseEnter="{Foreground=DimGrey}"
-                                                       MouseLeave="{Foreground=Transparent}">
-                                               <HorizontalStack Spacing="1">
-                                                       <Image Margin="1" Width="9" Height="9" Focusable="true" MouseDown="./onClickForExpand"
-                                                               Path="{./Image}"
-                                                               Visible="{./IsExpandable}"
-                                                               SvgSub="{./IsExpanded}"
-                                                               MouseEnter="{Background=LightGrey}"
-                                                               MouseLeave="{Background=Transparent}"/>
-                                                       <Image Margin="1" Width="14" Height="14"
-                                                               Path="#Crow.Icons.folder.svg"/>
-                                                       <Label Text="{./Caption}"/>
-                                               </HorizontalStack>
-                                       </Border>
-                                       <Container Name="Content" Visible="false"/>
-                               </VerticalStack>
-                       </Template>
-                       <HorizontalStack Height="Fit">
-                               <GraphicObject Width="12" Height="10"/>
-                               <VerticalStack Height="Fit" Name="ItemsContainer"/>
-                       </HorizontalStack>
-               </Expandable>
-       </ItemTemplate>
-</TreeView>
diff --git a/Templates/DockWindow.template b/Templates/DockWindow.template
deleted file mode 100755 (executable)
index d69b471..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0"?>
-<!--<GraphicObject Background="{./Background}"/>-->
-<Border BorderWidth="1" Foreground="Black" CornerRadius="{./CornerRadius}"
-                               Background="{./Background}"
-                               MouseEnter="./onBorderMouseEnter"
-                               MouseLeave="./onBorderMouseLeave">
-       <VerticalStack Spacing="0">
-               <HorizontalStack Visible="{./IsDocked}" Height="Fit" Margin="1" Background="vgradient|0:0.3,0.5,0.8,0.9|1:0.1,0.1,0.1,0.9">
-                       <Label  Text="{./Caption}" TextAlignment="Left" Width="Stretched"
-                                        Foreground="White" />
-                       <Border CornerRadius="6" BorderWidth="1" Foreground="Transparent"  Height="10" Width="10"
-                               MouseEnter="{Foreground=White}" MouseLeave="{Foreground=Transparent}">
-                               <Image Focusable="true" Name="Image" Margin="0" Path="#Crow.Images.Icons.exit2.svg"
-                                        MouseClick="./butQuitPress"/>
-                       </Border>
-               </HorizontalStack>
-               <HorizontalStack Background="vgradient|0:0.5,0.6,0.5,0.5|1:0.2,0.3,0.3,0.7"
-                               Name="hs" Margin="0" Spacing="0" Height="Fit" Visible="{./IsFloating}">
-                       <GraphicObject Width="5"/>
-                       <Image Margin="1" Width="10" Height="10" Path="{./Icon}"/>
-                       <Label Width="Stretched" Foreground="White" Margin="1" TextAlignment="Left" Text="{./Caption}" />
-                       <Border CornerRadius="6" BorderWidth="1" Foreground="Transparent"  Height="10" Width="10"
-                               MouseEnter="{Foreground=White}" MouseLeave="{Foreground=Transparent}">
-                               <Image Focusable="true" Name="Image" Margin="0" Path="#Crow.Images.Icons.exit2.svg"
-                                        MouseClick="./butQuitPress"/>
-                       </Border>
-                       <GraphicObject Width="5"/>
-               </HorizontalStack>
-               <Container Name="Content" MinimumSize="50,50" Background="0.1,0.1,0.1,0.4"/>
-       </VerticalStack>
-</Border>
diff --git a/Templates/Expandable.template b/Templates/Expandable.template
deleted file mode 100755 (executable)
index 1dbb077..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0"?>
-<Border Style="ControlBorder" Foreground="{./Foreground}" Background="{./Background}">
-       <VerticalStack>
-               <HorizontalStack Spacing="1" Height="Fit" Focusable="true" MouseDoubleClick="./onClickForExpand">
-                       <Container Margin="1" Width="9" Height="9" MouseDown="./onClickForExpand"
-                                                                                                               MouseEnter="{Background=LightGrey}"
-                                                                                                               MouseLeave="{Background=Transparent}">
-                               <Image
-                                       Path="#Crow.Images.Icons.expandable.svg"
-                                       Visible="{./IsExpandable}"
-                                       SvgSub="{./IsExpanded}"/>
-                       </Container>
-                       <Label Style="ControlCaption" Text="{./Caption}"/>
-               </HorizontalStack>
-               <Container Name="Content" Visible="false"/>
-       </VerticalStack>
-</Border>
diff --git a/Templates/FileDialog.template b/Templates/FileDialog.template
deleted file mode 100644 (file)
index 42b5ec0..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-<?xml version="1.0"?>
-<Border BorderWidth="1" Foreground="White" CornerRadius="{./CornerRadius}"
-                               Background="{./Background}"
-                               MouseEnter="./onBorderMouseEnter"
-                               MouseLeave="./onBorderMouseLeave">
-       <VerticalStack Spacing="0">
-               <HorizontalStack Background="{./TitleBarBackground}"
-                               Name="hs" Margin="2" Spacing="0" Height="Fit">
-                       <GraphicObject Width="5"/>
-                       <Image Margin="1" Width="12" Height="12" Path="{./Icon}"/>
-                       <Label Width="Stretched" Foreground="{./TitleBarForeground}" Margin="1" TextAlignment="Center" Text="{./Caption}" />
-                       <Border CornerRadius="0" BorderWidth="1" Foreground="Transparent"  Height="12" Width="12"
-                               MouseEnter="{Foreground=White}" MouseLeave="{Foreground=Transparent}">
-                               <Image Focusable="true" Name="Image" Margin="0" Width="Stretched" Height="Stretched" Path="#Crow.Images.Icons.exit2.svg"
-                                        MouseClick="./butQuitPress"/>
-                       </Border>
-                       <GraphicObject Width="5"/>
-               </HorizontalStack>
-               <Container Name="Content" MinimumSize="50,50" Background="Jet">
-                       <VerticalStack Margin="1">
-                               <HorizontalStack Height="Fit">
-                                       <Button Fit="true" Caption="Up" MouseClick="./goUpDirClick">
-                                               <Image Margin="2" Width="14" Height="14"
-                                                       Path="#Crow.Icons.level-up.svg"/>
-                                       </Button>
-                                       <TextBox Style="TxtInFileDialog" Text="{²./CurrentDirectory}"/>
-                               </HorizontalStack>
-                               <DirectoryView ShowHidden="{²../cbShowHidden.IsChecked}" FileMask="{²../txtFileMask.Text}" ShowFiles="{²../cbShowFiles.IsChecked}" Name="fv" CurrentDirectory="{./CurrentDirectory}" SelectedItemChanged="./onFVSelectedItemChanged"
-                                               Width="100%" Margin="0" MouseDoubleClick="./onFileSelect">
-                                       <Template>
-                                               <ListBox ItemTemplate="#Crow.Templates.FileItems.template" Name="fileView" Data="{./FileSystemEntries}"
-                                                       SelectedItemChanged="./onSelectedItemChanged">
-                                                       <Template>
-                                                               <HorizontalStack>
-                                                                       <Scroller Name="scroller1">
-                                                                               <VerticalStack Height="Fit" VerticalAlignment="Top"
-                                                                                       Name="ItemsContainer" Margin="0" Spacing="1"/>
-                                                                       </Scroller>
-                                                                       <ScrollBar Name="scrollbar1" Orientation="Vertical"
-                                                                               Value="{²../scroller1.ScrollY}"        Maximum="{../scroller1.MaxScrollY}" 
-                                                                               CursorSize="{../scroller1.ChildHeightRatio}"
-                                                                               LargeIncrement="{../scroller1.PageHeight}" SmallIncrement="30"
-                                                                               Width="14" />
-                                                               </HorizontalStack>
-                                                       </Template>
-                                               </ListBox>
-                                       </Template>
-                               </DirectoryView>
-                               <HorizontalStack Height="Fit">
-                                       <TextBox Style="TxtInFileDialog" Text="{²./SelectedFile}"/>
-                                       <TextBox Style="TxtInFileDialog" Width="50" Name="txtFileMask" Text="{²./SearchPattern}"/>
-                               </HorizontalStack>
-                               <HorizontalStack Margin="5" Fit="true" HorizontalAlignment="Right">
-                                       <CheckBox Style="CheckBoxAlt" Name="cbShowFiles" Caption="Show Files" IsChecked="{²./ShowFiles}"/>
-                                       <CheckBox Style="CheckBoxAlt" Name="cbShowHidden" Caption="Show Hidden" IsChecked="{²./ShowHidden}"/>
-                               </HorizontalStack>
-                               <HorizontalStack Fit="true" HorizontalAlignment="Right">
-                                       <Button Caption="Ok" MouseClick="./onFileSelect"/>
-                                       <Button Caption="Cancel" MouseClick="./onCancel"/>
-                               </HorizontalStack>
-                       </VerticalStack>
-               </Container>
-       </VerticalStack>
-</Border>
diff --git a/Templates/FileItems.template b/Templates/FileItems.template
deleted file mode 100644 (file)
index 452a402..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-<ItemTemplate>
-       <GraphicObject Height="16" Background="Red"/>
-</ItemTemplate>
-<ItemTemplate DataType="System.IO.FileInfo">
-       <HorizontalStack Focusable="true"  Height="Fit">
-               <Image Margin="2" Width="16" Height="16"
-                       Path="#Crow.Icons.file.svg"/>
-                       <Label Text="{Name}" Width="Stretched"
-                               MouseEnter="{Background=RoyalBlue}"
-                               MouseLeave="{Background=Transparent}"/>
-       </HorizontalStack>
-</ItemTemplate>
-<ItemTemplate DataType="System.IO.DirectoryInfo">
-       <Border Foreground="Transparent" Focusable="true" Height="Fit">
-               <HorizontalStack
-                               MouseEnter="{Background=RoyalBlue}"
-                               MouseLeave="{Background=Transparent}">
-                       <Image Margin="2" Width="16" Height="16"
-                               Path="#Crow.Icons.folder.svg"/>
-                       <Label Text="{Name}" Width="Stretched"/>
-                       <Label Text="{LastAccessTime}" />
-               </HorizontalStack>
-       </Border>
-</ItemTemplate>
-
diff --git a/Templates/GroupBox.template b/Templates/GroupBox.template
deleted file mode 100755 (executable)
index 199cfe9..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0"?>
-<Container Background="{./Background}">
-       <Group>
-               <VerticalStack Spacing="0">
-                       <GraphicObject Height="6"/>
-                       <Border  CornerRadius="5" BorderWidth="1" Margin="10" Foreground="{./Foreground}">
-                               <Container Name="Content" Margin="0" MinimumSize="70,10"/>
-                       </Border>
-               </VerticalStack>
-               <Label Text="{./Caption}" VerticalAlignment="Top" Left="8"
-                       Background="Clear" Margin="1"/>
-       </Group>
-</Container>
\ No newline at end of file
diff --git a/Templates/HScrollBar.template b/Templates/HScrollBar.template
deleted file mode 100755 (executable)
index 94995c8..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0"?>
-<Border BorderWidth="1" Foreground="DimGrey">
-       <GenericStack Orientation="{./Orientation}" Spacing="0">
-               <Shape Style="HArrowBut"        MouseDown="./onScrollBack" Path="M 0.5,5.5 L 10.5,0.5 L 10.5,10.5 Z"/>
-               <Slider Name="Slider"                   
-                       Orientation="{./Orientation}"
-                       Value="{²./Value}"
-                       Maximum="{./Maximum}"
-                       CursorSize="{./CursorSize}"
-                       Height="{./HeightPolicy}" Width="{./WidthPolicy}"
-                       LargeIncrement="{./LargeIncrement}"
-                       SmallIncrement="{./SmallIncrement}"
-                       CursorColor="vgradient|0:Grey|1:DimGrey"
-                       Foreground="DimGrey"
-                       Background="vgradient|0:DimGrey|0.1:Grey|0.95:Grey|1:White"/>
-               <Shape Style="HArrowBut" MouseDown="./onScrollForth" Path="M 0.5,0.5 L 10.5,5.5 L 0.5,10.5 Z"/>
-       </GenericStack>
-</Border>
\ No newline at end of file
diff --git a/Templates/ListBox.template b/Templates/ListBox.template
deleted file mode 100755 (executable)
index a1aea50..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0"?>
-<Border BorderWidth="1" Margin="1" MinimumSize="10,10">
-       <Scroller  Name="scroller1" Margin="1" >
-               <VerticalStack
-                       Height="Fit" Name="ItemsContainer" Margin="0" VerticalAlignment="Top"/>
-       </Scroller>
-</Border>
diff --git a/Templates/Menu.template b/Templates/Menu.template
deleted file mode 100644 (file)
index 99ae554..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0"?>
-<GenericStack Orientation="{./Orientation}" Name="ItemsContainer" Margin="0" Background="{./Background}"/>
diff --git a/Templates/MenuItem.template b/Templates/MenuItem.template
deleted file mode 100644 (file)
index 4f77fb4..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0"?>
-<HorizontalStack>
-<Popper Font="{./Font}" Caption="{./Caption}"  Background="{./Background}" PopDirection="{./PopDirection}"
-       Foreground = "{./Foreground}" CanPop="{./HasChildren}" MouseClick="./onMI_Click"
-       IsPopped="{²./IsOpened}" PopWidth="{./PopWidth}" PopHeight="{./PopHeight}">
-       <Template>
-               <CheckBox IsChecked="{²./IsPopped}" Caption="{./Caption}" Background="{./Background}" Foreground="{./Foreground}">
-                       <Template>              
-                               <Border Name="border1"
-                                               MinimumSize = "60,0"
-                                               Foreground="Transparent"
-                                               Background="{./Background}">
-                                               <Label Text="{./Caption}"
-                                                       Foreground="{./Foreground}"
-                                                       Margin="2" HorizontalAlignment="Left"
-                                                       Font="{./Font}" />
-                               </Border>
-                       </Template>             
-               </CheckBox>
-       </Template>
-       <Border Foreground="DimGrey" Width="{../PopWidth}" Height="{../PopHeight}" Background="vgradient|0:DimGrey|1:Black">
-               <VerticalStack Name="ItemsContainer"/>
-       </Border>
-</Popper>
-<GraphicObject Background="Green" Width="5" Height="5" Visible="{./AutomaticOpening}"/>
-</HorizontalStack>
diff --git a/Templates/MessageBox.template b/Templates/MessageBox.template
deleted file mode 100644 (file)
index e8b58ad..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0"?>
-<Border        CornerRadius="0"
-                               MouseEnter="./onBorderMouseEnter"
-                               MouseLeave="./onBorderMouseLeave">
-       <VerticalStack Background="{./Background}">
-               <Border BorderWidth="0" Foreground="White" Height="Fit" Width="Stretched" MinimumSize="200,0"
-                               Background="{./TitleBarBackground}">
-                       <HorizontalStack Name="hs" Margin="2" Spacing="1" Height="Fit" >
-                               <GraphicObject Width="5" Height="5"/>
-                               <Image Margin="1" Width="12" Height="12" Path="{./Icon}"/>
-                               <Label Width="Stretched" Foreground="{./TitleBarForeground}" Margin="1" TextAlignment="Center" Text="{./Caption}" />
-                               <Border CornerRadius="3" BorderWidth="1" Foreground="Transparent"  Height="12" Width="12"
-                                       MouseEnter="{Foreground=White}" MouseLeave="{Foreground=Transparent}">
-                                       <Image Focusable="true" Name="Image" Path="#Crow.Images.Icons.exit2.svg"
-                                                MouseClick="./butQuitPress"/>
-                               </Border>
-                               <GraphicObject Width="5" Height="5"/>
-                       </HorizontalStack>
-               </Border>
-               <HorizontalStack Margin="5" >
-                       <Image Name="Image" Width="50" Height="30" Path="{./MsgIcon}" />
-                       <Label Margin="5" Font="{./Font}" Width="Fit" Text="{./Message}"                                
-                               TextAlignment="Center"
-                               Multiline="true" />             
-               </HorizontalStack>
-               <HorizontalStack Margin="4" Spacing="0" Width="Fit" Height="Fit" HorizontalAlignment="Right">
-                       <Button Width="Fit" Caption="{./OkMessage}" MouseClick="./onOkButtonClick" />
-                       <Button Width="Fit" Visible="{./NoButIsVisible}"
-                               Caption="{./NoMessage}" MouseClick="./onNoButtonClick" />
-                       <Button Width="Fit" Visible="{./CancelButIsVisible}"
-                               Caption="{./CancelMessage}" MouseClick="./onCancelButtonClick" />
-               </HorizontalStack>
-       </VerticalStack>
-</Border>
diff --git a/Templates/Popper.template b/Templates/Popper.template
deleted file mode 100755 (executable)
index 78a6084..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0"?>
-<CheckBox Caption="{./Caption}" IsChecked="{²./IsPopped}" Foreground="{./Foreground}" Background="{./Background}">
-       <Template>
-               <Border Style="ControlBorder" Foreground="{./Foreground}" Background="{./Background}">
-                       <HorizontalStack Spacing="1">
-                               <Image Style="Icon" Margin="1" Width="9" Height="9"     
-                                       MouseEnter="{Background=White}" MouseLeave="{Background=Transparent}"
-                                       Background="{./Background}"
-                                       Path="#Crow.Images.Icons.expandable.svg" SvgSub="{./IsChecked}"/>
-                               <Label Style="ControlCaption" Text="{./Caption}" />
-                       </HorizontalStack>
-               </Border>
-       </Template>
-</CheckBox>
diff --git a/Templates/RadioButton.template b/Templates/RadioButton.template
deleted file mode 100755 (executable)
index b96eec2..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0"?>
-<HorizontalStack Style="Control" Background="{./Background}">
-       <Image Style="Icon" Path="#Crow.Images.Icons.radiobutton.svg"
-               SvgSub="{./IsChecked}"/>
-       <Label Text="{./Caption}"/>
-</HorizontalStack>
\ No newline at end of file
diff --git a/Templates/ScrollBar.template b/Templates/ScrollBar.template
deleted file mode 100755 (executable)
index de1eaf3..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0"?>
-<Border BorderWidth="1" Foreground="DimGrey" >
-       <GenericStack Orientation="{./Orientation}" Spacing="0">
-               <Shape Style="ArrowBut" MouseDown="./onScrollBack" Path="{./ScrollBackShape}"/>
-               <Slider Name="Slider"                   
-                       Orientation="{./Orientation}"
-                       Value="{²./Value}"
-                       Maximum="{./Maximum}"
-                       CursorSize="{./CursorSize}"
-                       Height="{./HeightPolicy}" Width="{./WidthPolicy}"
-                       LargeIncrement="{./LargeIncrement}"
-                       SmallIncrement="{./SmallIncrement}"
-                       CursorColor="hgradient|0:Grey|1:DimGrey"
-                       Foreground="DimGrey"
-                       Background="hgradient|0:DimGrey|0.1:Grey|0.95:Grey|1:White"/>
-               <Shape Style="ArrowBut" MouseDown="./onScrollForth" Path="M 0.5,0.5 L 10.5,0.5 L 5.5,10.5 Z"/>
-       </GenericStack>
-</Border>
\ No newline at end of file
diff --git a/Templates/ScrollingListBox.template b/Templates/ScrollingListBox.template
deleted file mode 100644 (file)
index 1e7304f..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0"?>
-<Border BorderWidth="1" Background="{./Background}">
-       <HorizontalStack Margin="1">
-               <Scroller Name="scroller1" 
-                               Margin="2">
-                       <VerticalStack Height="Fit" MinimumSize="10,10"
-                               Name="ItemsContainer" Margin="0" VerticalAlignment="Top"/>
-               </Scroller>
-               <ScrollBar Name="scrollbar1" Value="{²../scroller1.ScrollY}"
-                       LargeIncrement="{../scroller1.PageHeight}" SmallIncrement="30" CursorSize="{../scroller1.ChildHeightRatio}"
-                       Maximum="{../scroller1.MaxScrollY}" Orientation="Vertical" 
-                       Width="14" />
-       </HorizontalStack>
-</Border>
diff --git a/Templates/Slider.template b/Templates/Slider.template
deleted file mode 100755 (executable)
index 9c7bb70..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0"?>
diff --git a/Templates/Spinner.template b/Templates/Spinner.template
deleted file mode 100755 (executable)
index 60d7ccf..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0"?>
-<HorizontalStack MinimumSize="40,13" Name="hstack" Margin="0" Spacing="0">
-       <Border BorderWidth="1" Width="75%"  Background="White" 
-               Foreground="{./Foreground}" Margin="0">
-               <TextBox Foreground="{./Foreground}" Font="{./Font}" Width="Stretched"
-                       Text="{²./Value}" TextAlignment="Right" Margin="0"/>
-       </Border>
-       <VerticalStack MinimumSize="13,13" Width="25%" Height="Stretched" Spacing="0" Margin="0">
-               <Shape Style="ArrowBut" Height="50%" MouseDown="./onUp" Path="M 5.5,0.5 L 10.5,6.5 L 0.5,6.5 Z"/>                       
-               <Shape Style="ArrowBut" Height="50%" MouseDown="./onDown" Path="M 0.5,0.5 L 10.5,0.5 L 5.5,6.5 Z"/>                     
-       </VerticalStack>
-</HorizontalStack>
diff --git a/Templates/TabItem.template b/Templates/TabItem.template
deleted file mode 100644 (file)
index 574653b..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0"?>
-<GenericStack Orientation="Vertical" Spacing="0"
-               Background="{./Background}"
-               MouseEnter="{/caption.Foreground=White}"
-               MouseLeave="{/caption.Foreground=Grey}">
-       <HorizontalStack Margin="2" Left="{./TabOffset}"
-               Name="TabTitle"
-               HorizontalAlignment="Left"
-               Height="{./TabHeight}"
-               Width="{./TabWidth}">
-               <Label Name="caption" Text="{./Caption}" Foreground="Grey"/>
-               <Border CornerRadius="5" BorderWidth="1" Foreground="Transparent"  Height="12" Width="12"
-                                       MouseEnter="{Foreground=White}" MouseLeave="{Foreground=Transparent}">
-                       <Image Focusable="true" Name="Image" Margin="0" Width="Stretched" Height="Stretched" Path="#Crow.Images.Icons.exit2.svg"
-                                MouseClick="./butCloseTabClick"/>
-               </Border>
-       </HorizontalStack>
-       <Container Name="Content"/>
-</GenericStack>
-
diff --git a/Templates/ToolWindow.template b/Templates/ToolWindow.template
deleted file mode 100755 (executable)
index 2fcb730..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0"?>
-<Border BorderWidth="1" Foreground="White" CornerRadius="{./CornerRadius}"
-                               Background="{./Background}"
-                               MouseEnter="./onBorderMouseEnter"
-                               MouseLeave="./onBorderMouseLeave">
-       <VerticalStack Spacing="0">
-<!--           <Border Name="TitleBar" BorderWidth="1" Foreground="White" Width="{./WidthPolicy}" Height="Fit"
-                               Background="vgradient|0:0.4,0.6,0.0,0.5|1:0.0,0.8,0.8,0.9">-->
-                       <HorizontalStack Background="{./TitleBarBackground}"
-                                       Name="hs" Margin="2" Spacing="0" Height="Fit">
-                               <GraphicObject Width="5"/>
-                               <Image Margin="1" Width="12" Height="12" Path="{./Icon}"/>
-                               <Label Width="Stretched" Foreground="{./TitleBarForeground}" Margin="1" TextAlignment="Center" Text="{./Caption}" />
-                               <Border CornerRadius="6" BorderWidth="1" Foreground="Transparent"  Height="12" Width="12"
-                                       MouseEnter="{Foreground=White}" MouseLeave="{Foreground=Transparent}">
-                                       <Image Focusable="true" Name="Image" Margin="0" Width="Stretched" Height="Stretched" Path="#Crow.Images.Icons.exit2.svg"
-                                                MouseClick="./butQuitPress"/>
-                               </Border>
-                               <GraphicObject Width="5"/>
-                       </HorizontalStack>
-<!--           </Border>-->
-               <Container Name="Content" MinimumSize="50,50" Background="0.5,0.5,0.5,0.5"/>
-       </VerticalStack>
-</Border>
diff --git a/Templates/Tooltip.template b/Templates/Tooltip.template
deleted file mode 100644 (file)
index 277ac7c..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<Border Fit="true" Foreground="DimGrey" Background="Khaki">
-       <Label Margin="3" Foreground="DimGrey" Multiline="true" Text="{Tooltip}"/>
-</Border>
diff --git a/Templates/TreeView.template b/Templates/TreeView.template
deleted file mode 100644 (file)
index b8603d9..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-<?xml version="1.0"?>
-<HorizontalStack>
-       <Scroller  Name="scroller1" Margin="1"
-               Background="{./Background}"
-               ScrollY="{../scrollbar1.Value}">
-               <VerticalStack
-                       Height="Fit" Name="ItemsContainer" Margin="0" VerticalAlignment="Top"/>
-       </Scroller>
-       <ScrollBar
-               Name="scrollbar1"
-               LargeIncrement="{../scroller1.PageHeight}" SmallIncrement="30"
-               CursorSize="{../scroller1.ChildHeightRatio}"
-               Value="{²../scroller1.ScrollY}"
-               Maximum="{../scroller1.MaxScrollY}"
-               Width="12" Orientation="Vertical"/>
-</HorizontalStack>
diff --git a/Templates/Window.template b/Templates/Window.template
deleted file mode 100755 (executable)
index 7a2991c..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0"?>
-<Border BorderWidth="1" Foreground="Grey" CornerRadius="{./CornerRadius}"
-                               Background="{./Background}"
-                               MouseEnter="./onBorderMouseEnter"
-                               MouseLeave="./onBorderMouseLeave">
-       <VerticalStack Spacing="0">
-<!--           <Border Name="TitleBar" BorderWidth="1" Foreground="White" Width="{./WidthPolicy}" Height="Fit"
-                               Background="vgradient|0:0.4,0.6,0.0,0.5|1:0.0,0.8,0.8,0.9">-->
-                       <HorizontalStack Background="{./TitleBarBackground}"
-                                       Name="hs" Margin="2" Spacing="0" Height="Fit">
-                               <GraphicObject Width="5"/>
-                               <Image Margin="1" Width="12" Height="12" Path="{./Icon}"/>
-                               <Label Width="Stretched" Foreground="{./TitleBarForeground}" Margin="2" TextAlignment="Center" Text="{./Caption}" />
-                               <Border Visible="{./ShowMinimize}" BorderWidth="1" Foreground="Transparent"  Height="12" Width="12"
-                                       MouseEnter="{Foreground=White}" MouseLeave="{Foreground=Transparent}">
-                                       <Image Focusable="true" Path="#Crow.Images.Icons.minimize.svg"
-                                                MouseClick="./onMinimized"/>
-                               </Border>
-                               <Border Visible="{./ShowNormal}" BorderWidth="1" Foreground="Transparent"  Height="12" Width="12"
-                                       MouseEnter="{Foreground=White}" MouseLeave="{Foreground=Transparent}">
-                                       <Image Focusable="true" Path="#Crow.Images.Icons.normalize.svg"
-                                                MouseClick="./onUnmaximized"/>
-                               </Border>
-                               <Border Visible="{./ShowMaximize}" BorderWidth="1" Foreground="Transparent"  Height="12" Width="12"
-                                       MouseEnter="{Foreground=White}" MouseLeave="{Foreground=Transparent}">
-                                       <Image Focusable="true" Path="#Crow.Images.Icons.maximize.svg"
-                                                MouseClick="./onMaximized"/>
-                               </Border>
-                               <Border BorderWidth="1" Foreground="Transparent"  Height="14" Width="14"
-                                       MouseEnter="{Foreground=White}" MouseLeave="{Foreground=Transparent}">
-                                       <Image Focusable="true" Path="#Crow.Images.Icons.exit2.svg"
-                                                MouseClick="./butQuitPress"/>
-                               </Border>
-                               <GraphicObject Width="5"/>
-                       </HorizontalStack>
-<!--           </Border>-->
-               <Container Name="Content" MinimumSize="0,0" Background="0.5,0.5,0.5,0.5"/>
-       </VerticalStack>
-</Border>
diff --git a/Templates/imgItem.template b/Templates/imgItem.template
deleted file mode 100755 (executable)
index 9dbf23d..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0"?>
-       <VerticalStack Width="0" Height="-1" Focusable="true"                   
-                       MouseEnter="{Background=RoyalBlue}"
-                       MouseLeave="{Background=Transparent}">
-               <Image Width="-1" Height="-1" Path="{FullName}" MaximumSize="80,80"/>
-               <Label Text="{Name}" Width="-1" Height="-1" Margin="0" MaximumSize="100,0"/>
-       </VerticalStack>
-
diff --git a/Templates/treeList.template b/Templates/treeList.template
deleted file mode 100755 (executable)
index d47621a..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<?xml version="1.0"?>
-<VerticalStack
-       Height="Fit" Name="ItemsContainer"/>
index 43b4da946c5bef8b0a09caa8ad2cb040866f2f47..63336d41c98f59ee00d1d4ea924913143b2f5660 100644 (file)
@@ -90,19 +90,23 @@ namespace tests
                }
                public static void Main(string[] args)
                {
-                       //IntPtr cairoLib = dlopen (cairoLibPath, dlmode.RTLD_LAZY);
+            //IntPtr cairoLib = dlopen (cairoLibPath, dlmode.RTLD_LAZY);
 
 
 
-                       //mono_add_internal_call ("tests.MainClass:cairo_stroke_icall(IntPtr cr)", strokeFuncPtr);
+            //mono_add_internal_call ("tests.MainClass:cairo_stroke_icall(IntPtr cr)", strokeFuncPtr);
 
-                       /*cairo_stroke_func = Marshal.GetDelegateForFunctionPointer<Stroke>(dlsym (cairoLib, "cairo_stroke"));
+            /*cairo_stroke_func = Marshal.GetDelegateForFunctionPointer<Stroke>(dlsym (cairoLib, "cairo_stroke"));
                        cairo_rect_func = Marshal.GetDelegateForFunctionPointer<Cairo4Doubles>(dlsym (cairoLib, "cairo_rectangle"));
                        cairo_set_rgba_func = Marshal.GetDelegateForFunctionPointer<Cairo4Doubles>(dlsym (cairoLib, "cairo_set_source_rgba"));
 */
+            foreach (string s in System.Reflection.Assembly.GetEntryAssembly().GetManifestResourceNames())
+            {
+                Console.WriteLine(s);
+            }
+            
 
-
-                       using (app = new MainClass ()) {
+            using (app = new MainClass ()) {
                                //                              XWindow win = new XWindow (app);
                                //                              win.Show ();
                                //app.LoadIMLFragment (@"<SimpleGauge Level='40' Margin='5' Background='Jet' Foreground='Grey' Width='30' Height='50%'/>");
@@ -111,9 +115,9 @@ namespace tests
                                //app.AddWidget (@"Interfaces/Divers/testFocus.crow").DataSource = app;
                                //app.AddWidget (@"Interfaces/Divers/testMenu.crow").DataSource = app;
                                //app.AddWidget (@"Interfaces/Divers/testVisibility.crow").DataSource = app;
-                               //app.AddWidget (@"Interfaces/Divers/0.crow").DataSource = app;
+                               app.AddWidget (@"Interfaces/Divers/0.crow").DataSource = app;
                                //app.AddWidget (@"Interfaces/Splitter/1.crow").DataSource = app;
-                               app.AddWidget (@"Interfaces/GraphicObject/0.crow").DataSource = app;
+                               //app.AddWidget (@"Interfaces/GraphicObject/0.crow").DataSource = app;
                                //app.AddWidget (@"Interfaces/TemplatedContainer/test_Listbox.crow").DataSource = app;
 
                                /*app.instFileDlg = Crow.IML.Instantiator.CreateFromImlFragment
diff --git a/Tests/GOLIBTest_DirViewer.cs b/Tests/GOLIBTest_DirViewer.cs
deleted file mode 100644 (file)
index f17afb9..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-#define MONO_CAIRO_DEBUG_DISPOSE
-
-
-using System;
-using System.Runtime.InteropServices;
-using OpenTK;
-using OpenTK.Graphics.OpenGL;
-
-using System.Diagnostics;
-
-//using GGL;
-using Crow;
-using System.Threading;
-using System.Reflection;
-using System.Linq;
-using System.IO;
-using System.Collections.Generic;
-
-
-namespace test2
-{
-       class GOLIBTest_DirViewer : OpenTKGameWindow
-       {
-               public GOLIBTest_DirViewer ()
-                       : base(1024, 600,"test")
-               {}
-
-               public DirContainer CurDir;
-               FileDialog dialog;
-
-               protected override void OnLoad (EventArgs e)
-               {
-                       base.OnLoad (e);
-
-                       CurDir = new DirContainer(new DirectoryInfo ("/home/jp/"));
-
-//                     GraphicObject dv = Interface.Load ("Interfaces/testDirViewer.goml");
-//                     this.AddWidget(dv);
-//                     dv.DataSource = CurDir;
-                       dialog = new FileDialog();
-                       dialog.SearchPattern = ".png|.jpg|.jpeg|.gif|.svg";
-                       dialog.Show ();
-
-                       //LoadInterface("Interfaces/testTypeViewer.goml", out g);
-               }
-                       
-
-               [STAThread]
-               static void Main ()
-               {
-                       Console.WriteLine ("starting example");
-
-                       using (GOLIBTest_DirViewer win = new GOLIBTest_DirViewer( )) {
-                               win.Run (30.0);
-                       }
-               }
-       }
-       public class DirContainer: IValueChange
-       {
-               #region IValueChange implementation
-               public event EventHandler<ValueChangeEventArgs> ValueChanged;
-               public void NotifyValueChanged(string name, object value)
-               {
-                       ValueChanged.Raise (this, new ValueChangeEventArgs (name, value));
-               }
-               #endregion
-
-               public DirectoryInfo CurDir;
-               public DirContainer(DirectoryInfo _dir){
-                       CurDir = _dir;
-               }
-               public string Name {
-                       get { return CurDir.Name; }
-               }
-               public FileSystemInfo[] GetFileSystemInfos
-               {
-                       get {
-                               List<FileSystemInfo> tmp = CurDir.GetFileSystemInfos ().Where(fi => !fi.Attributes.HasFlag(FileAttributes.Hidden)).ToList();
-                               if (CurDir.Parent != null)
-                                       tmp.Insert (0, CurDir.Parent);
-                               return tmp.ToArray ();
-                       }
-               }
-               void onDirUp(object sender, MouseButtonEventArgs e)
-               {
-                       
-               }
-               public void onMouseDown(object sender, MouseButtonEventArgs e)
-               {
-                       Debug.WriteLine (sender.ToString ());
-               }
-               void OnSelectedItemChanged (object sender, SelectionChangeEventArgs e)
-               {
-                       CurDir = e.NewValue as DirectoryInfo;
-                       NotifyValueChanged ("GetFileSystemInfos", GetFileSystemInfos);
-                       NotifyValueChanged ("Name", Name);
-
-               }
-       }
-
-}
\ No newline at end of file
diff --git a/Tests/GOLIBTest_Listbox.cs b/Tests/GOLIBTest_Listbox.cs
deleted file mode 100644 (file)
index 7663102..0000000
+++ /dev/null
@@ -1,127 +0,0 @@
-#define MONO_CAIRO_DEBUG_DISPOSE
-
-
-using System;
-using System.Runtime.InteropServices;
-using OpenTK;
-using OpenTK.Graphics.OpenGL;
-
-using System.Diagnostics;
-
-//using GGL;
-using Crow;
-using System.Threading;
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
-
-
-namespace test
-{
-       public class ClsItem
-       {
-//             #region IValueChange implementation
-//
-//             public event EventHandler<ValueChangeEventArgs> ValueChanged;
-//
-//             #endregion
-
-               public string field;
-
-               public string Field {
-                       get {
-                               return field;
-                       }
-                       set {
-                               field = value;
-                               //ValueChanged.Raise(this, new ValueChangeEventArgs ("Field", null, field));
-                       }
-               }
-
-               public ClsItem(){
-               }
-               public ClsItem(string str){
-                       Field = str;
-               }
-       }
-       
-       class GOLIBTest_Listbox : OpenTKGameWindow, IValueChange
-       {
-               #region IValueChange implementation
-
-               public event EventHandler<ValueChangeEventArgs> ValueChanged;
-
-               #endregion
-       
-               public GOLIBTest_Listbox ()
-                       : base(1024, 600,"test")
-               {}
-
-//             public List<ClsItem> TestList = new List<ClsItem>(new ClsItem[] 
-//                     {
-//                             new ClsItem("string 1"),
-//                             new ClsItem("string 2"),
-//                             new ClsItem("string 3")
-//                     });
-               public List<string> TestList;/* = new List<string>( new string[] 
-                       {
-                               "string 1",
-                               "string 2",
-                               "string 3"
-                       });     */
-
-               public String Hover {
-                       get { return hoverWidget == null ? "None" : hoverWidget.ToString(); }
-               }
-               Point mPos;
-               public string MousePos {
-                       get { return mPos.ToString(); }
-               }
-               protected override void OnLoad (EventArgs e)
-               {
-                       base.OnLoad (e);
-
-                       //TestList = Directory.GetFileSystemEntries("/home/jp/tmp/mtgdata/a", "*.txt",SearchOption.AllDirectories).ToList();
-                       GraphicObject tlb = LoadInterface("Interfaces/test_Listbox.goml");
-                       tlb.DataSource = this;
-
-//                     TestList [1].Field = "test string";
-//                     ValueChanged.Raise(this, new ValueChangeEventArgs ("TestList", TestList));
-               }
-               void OnClear (object sender, MouseButtonEventArgs e){
-                       TestList = null;
-                       ValueChanged.Raise(this, new ValueChangeEventArgs ("TestList", TestList));
-               }
-               void OnLoadList (object sender, MouseButtonEventArgs e){
-                       TestList = Directory.GetFileSystemEntries("/home/jp/tmp/mtgdata/a", "*.txt",SearchOption.AllDirectories).ToList();
-                       ValueChanged.Raise(this, new ValueChangeEventArgs ("TestList", TestList));
-               }
-//             protected override void OnMouseMove (MouseMoveEventArgs e)
-//             {
-//                     base.OnMouseMove (e);
-//                     ValueChanged.Raise (this, new ValueChangeEventArgs ("Hover", Hover));
-//                     ValueChanged.Raise (this, new ValueChangeEventArgs ("MousePos", e.Position.ToString()));
-//             }
-
-               protected override void OnUpdateFrame (FrameEventArgs e)
-               {
-                       base.OnUpdateFrame (e);
-               }
-//             protected override void OnKeyDown (KeyboardKeyEventArgs e)
-//             {
-//                     TestList = Directory.GetFileSystemEntries("/home/jp/tmp/mtgdata/a", "*.txt",SearchOption.AllDirectories).ToList();
-//                     //TestList.Add ("newly added list item");
-//                     ValueChanged.Raise(this, new ValueChangeEventArgs ("TestList", TestList));
-//             }
-
-               [STAThread]
-               static void Main ()
-               {
-                       Console.WriteLine ("starting example");
-
-                       using (GOLIBTest_Listbox win = new GOLIBTest_Listbox( )) {
-                               win.Run (30.0);
-                       }
-               }
-       }
-}
\ No newline at end of file
diff --git a/Tests/GOLIBTest_TypeViewer.cs b/Tests/GOLIBTest_TypeViewer.cs
deleted file mode 100644 (file)
index 39e5a52..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-#define MONO_CAIRO_DEBUG_DISPOSE
-
-
-using System;
-using System.Runtime.InteropServices;
-using OpenTK;
-using OpenTK.Graphics.OpenGL;
-
-using System.Diagnostics;
-
-//using GGL;
-using Crow;
-using System.Threading;
-using System.Reflection;
-using System.Linq;
-
-
-namespace test
-{
-       class GOLIBTest_TypeViewer : OpenTKGameWindow
-       {
-               public GOLIBTest_TypeViewer ()
-                       : base(1024, 600,"test")
-               {}
-
-               VerticalStack g;
-               TypeContainer type;
-
-               protected override void OnLoad (EventArgs e)
-               {
-                       base.OnLoad (e);
-                       type = new TypeContainer(typeof (GraphicObject));
-
-                       //this.AddWidget(Interface.Load ("Interfaces/testTypeViewer.goml", type));
-                       GraphicObject go = LoadInterface("Interfaces/testTypeViewer.goml");
-                       go.DataSource = type;
-               }
-
-               protected override void OnRenderFrame (FrameEventArgs e)
-               {
-                       GL.Clear (ClearBufferMask.ColorBufferBit);
-                       base.OnRenderFrame (e);
-                       SwapBuffers ();
-
-                       MemberInfo mi;
-
-
-               }
-
-               [STAThread]
-               static void Main ()
-               {
-                       Console.WriteLine ("starting example");
-
-                       using (GOLIBTest_TypeViewer win = new GOLIBTest_TypeViewer( )) {
-                               win.Run (30.0);
-                       }
-               }
-       }
-       public class TypeContainer
-       {
-               public Type Type;
-               public TypeContainer(Type _type){
-                       Type = _type;
-               }
-               public string Name {
-                       get { return Type.Name; }
-               }
-               public MemberInfo[] Members {
-                       get {
-                               MemberInfo[] mi = Properties.Cast<MemberInfo> ().Concat (Methods.Cast<MemberInfo> ()).ToArray(); 
-                               return mi;
-                       }
-               }
-               public MethodInfo[] Methods {
-                       get { return Type.GetMethods (BindingFlags.Public | BindingFlags.Instance).Where (m => !m.IsSpecialName).ToArray(); }
-               }
-               public PropertyInfo[] Properties {
-                       get { return Type.GetProperties (); }
-               }
-                               
-       }
-
-}
\ No newline at end of file
diff --git a/Tests/GOLIBTest_Window.cs b/Tests/GOLIBTest_Window.cs
deleted file mode 100644 (file)
index e2a96e9..0000000
+++ /dev/null
@@ -1,125 +0,0 @@
-#define MONO_CAIRO_DEBUG_DISPOSE
-
-
-using System;
-using System.Runtime.InteropServices;
-using OpenTK;
-using OpenTK.Graphics.OpenGL;
-using OpenTK.Input;
-
-using System.Diagnostics;
-
-//using GGL;
-using go;
-using System.Threading;
-
-
-namespace test
-{
-       class GOLIBTest_Window : OpenTKGameWindow , IValueChange
-       {
-               #region IValueChange implementation
-               public event EventHandler<ValueChangeEventArgs> ValueChanged;
-               #endregion
-
-               #region FPS
-               int _fps = 0;
-
-               public int fps {
-                       get { return _fps; }
-                       set {
-                               if (_fps == value)
-                                       return;
-                               
-                               _fps = value;
-
-                               if (_fps > fpsMax) {
-                                       fpsMax = _fps;
-                                       ValueChanged.Raise(this, new ValueChangeEventArgs ("fpsMax", fpsMax));
-                               } else if (_fps < fpsMin) {
-                                       fpsMin = _fps;
-                                       ValueChanged.Raise(this, new ValueChangeEventArgs ("fpsMin", fpsMin));
-                               }
-
-                               if (ValueChanged != null)
-                                       ValueChanged.Raise(this, new ValueChangeEventArgs ("fps", _fps));
-                       }
-               }
-               string name = "testName";
-
-               public string Name {
-                       get {
-                               return name;
-                       }
-                       set {
-                               name = value;
-                       }
-               }
-
-               public int fpsMin = int.MaxValue;
-               public int fpsMax = 0;
-
-               void resetFps ()
-               {
-                       fpsMin = int.MaxValue;
-                       fpsMax = 0;
-                       _fps = 0;
-               }
-               #endregion
-
-               public GOLIBTest_Window ()
-                       : base(800, 600,"test")
-               {}
-
-
-               protected override void OnLoad (EventArgs e)
-               {
-                       base.OnLoad (e);
-                       LoadInterface("Interfaces/testWindow.goml");
-                       LoadInterface("Interfaces/testWindow.goml");
-//                     LoadInterface("Interfaces/testWindow.goml", out g);
-//                     LoadInterface("Interfaces/testWindow.goml", out g);
-//                     LoadInterface("Interfaces/testWindow.goml", out g);
-//                     LoadInterface("Interfaces/testWindow.goml", out g);
-//                     LoadInterface("Interfaces/testWindow.goml", out g);
-                       CursorVisible = true;
-               }
-
-
-               private int frameCpt = 0;
-               protected override void OnUpdateFrame (FrameEventArgs e)
-               {
-                       base.OnUpdateFrame (e);
-
-                       fps = (int)RenderFrequency;
-
-                       if (frameCpt > 200) {
-                               resetFps ();
-                               frameCpt = 0;
-
-                       }
-                       frameCpt++;
-               }
-
-               protected override void OnKeyDown (KeyboardKeyEventArgs e)
-               {
-                       base.OnKeyDown (e);
-                       this.Quit ();
-               }
-
-               void butQuitPress (object sender, MouseButtonEventArgs e)
-               {
-                       DeleteWidget (sender as GraphicObject);
-               }
-
-               [STAThread]
-               static void Main ()
-               {
-                       Console.WriteLine ("starting example");
-
-                       using (GOLIBTest_Window win = new GOLIBTest_Window( )) {
-                               win.Run (30.0);
-                       }
-               }
-       }
-}
\ No newline at end of file
diff --git a/Tests/GOLIBTest_deviceOffset.cs b/Tests/GOLIBTest_deviceOffset.cs
deleted file mode 100644 (file)
index 96486db..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-#define MONO_CAIRO_DEBUG_DISPOSE
-
-
-using System;
-using System.Runtime.InteropServices;
-using OpenTK;
-using OpenTK.Graphics.OpenGL;
-using OpenTK.Input;
-
-using System.Diagnostics;
-
-//using GGL;
-using go;
-using System.Threading;
-
-
-namespace test6
-{
-       class GOLIBTest_0 : OpenTKGameWindow
-       {
-               public GOLIBTest_0 ()
-                       : base(1024, 600,"test")
-               {}
-
-               GraphicObject g;
-               Label l;
-
-               protected override void OnLoad (EventArgs e)
-               {
-                       base.OnLoad (e);
-                       g = LoadInterface("Interfaces/test0.goml");
-                       l = g.FindByName ("labCpt") as Label;
-               }
-
-               void onUp (object sender, MouseButtonEventArgs e)
-               {
-                       decimal tmp = 0;
-                       if (!decimal.TryParse (l.Text, out tmp))
-                               return;
-                       
-                       tmp += 1;
-                       l.Text = tmp.ToString ();
-               }
-               void onDown (object sender, MouseButtonEventArgs e)
-               {
-                       decimal tmp = 0;
-                       if (!decimal.TryParse (l.Text, out tmp))
-                               return;
-
-                       tmp -= 1;
-                       l.Text = tmp.ToString ();
-               }
-
-               protected override void OnKeyDown (KeyboardKeyEventArgs e)
-               {
-                       switch (e.Key) {
-                       case Key.Left:
-                               g.Left++;
-                               break;
-                       case Key.Right:
-                               g.Left--;
-                               break;
-                       case Key.Up:
-                               g.Top--;
-                               break;
-                       case Key.Down:
-                               g.Top++;
-                               break;
-                       default:
-                               break;
-                       }
-               }
-               protected override void OnUpdateFrame (FrameEventArgs e)
-               {
-                       base.OnUpdateFrame (e);
-               }
-
-               [STAThread]
-               static void Main ()
-               {
-                       Console.WriteLine ("starting example");
-
-                       using (GOLIBTest_0 win = new GOLIBTest_0( )) {
-                               win.Run (30.0);
-                       }
-               }
-       }
-}
\ No newline at end of file
diff --git a/Tests/IValueChange.cs b/Tests/IValueChange.cs
deleted file mode 100644 (file)
index 21d3c45..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-#define MONO_CAIRO_DEBUG_DISPOSE
-
-
-using System;
-using System.Runtime.InteropServices;
-using OpenTK;
-using OpenTK.Graphics.OpenGL;
-using OpenTK.Input;
-
-using System.Diagnostics;
-
-//using GGL;
-using go;
-using System.Threading;
-
-
-namespace test
-{
-       interface IValueChange
-       {
-       }
-
-}
\ No newline at end of file
index ee5ccdcf214f5bc3ea65fef6a6ac73c7421319a0..df2f4733ba92f1a9a088dc1a57b8ca969dd2482a 100755 (executable)
@@ -1,6 +1,5 @@
 <?xml version="1.0"?>
-<VerticalStack Margin="10" Background="Jet" >  
-       <LaggingGraphicObject Name="lagging" Margin="10"  Background="{TestColor}"/>
-</VerticalStack>
-               
-
+<Container Background="DimGrey" Margin="10" Width="90%" Height="90%">
+       <GraphicObject Margin="10"  Background="SeaGreen"
+                       MinimumSize="50,50"/>
+</Container>
\ No newline at end of file
index b37fdb6a294968bc3d9432c13e7d946eba57ca96..16ec90f90a5e804cf7ed657a8200cf9789dfc4e6 100755 (executable)
                <Splitter/>
                <VerticalStack Width="40%" Margin="5" Spacing="5">
                        <Expandable>
-                               <Image Path="#Crow.Images.Icons.crow.svg"/>
+                               <Image Path="#Crow.Icons.crow.svg"/>
                        </Expandable>
                        <Popper>
                                <Border Fit="True" Background="DimGrey" CornerRadius="0" BorderWidth="1">
-                                       <Image Path="#Crow.Images.Icons.crow.svg" Width="100" Height="100" Margin="10"
+                                       <Image Path="#Crow.Icons.crow.svg" Width="100" Height="100" Margin="10"
                                                MouseEnter="{Background=LightGrey}"
                                                MouseLeave="{Background=Transparent}"/>
                                </Border>
                        <Container Height="Fit" Width="200" Background="DimGrey" Margin="2" CornerRadius="5">
                                <ProgressBar Background="DimGrey" Height="10" Value="50"/>
                        </Container>
-                       <Image Path="#Crow.Images.Icons.crow.svg" Width="60" Height="60" Background="LightGrey" />
+                       <Image Path="#Crow.Icons.crow.svg" Width="60" Height="60" Background="LightGrey" />
 <!--                   <TabView Name="tabview1"
                                Height="120" Orientation="Horizontal" Spacing="15">
                                <TabItem Name="TabItem1" Caption="Tab 1" Margin="0">
                        </Border>
                        <Splitter/>-->
                        <ListBox Name="colorList" Data="{TestList}" Margin="5"
-                                        ItemTemplate="#Tests.Interfaces.colorItem.crow"
-                                        Template="#Crow.Templates.ScrollingListBox.template"
+                                        ItemTemplate="Interfaces/colorItem.crow"
+                                        Template="#Crow.ScrollingListBox.template"
                                         />
                </VerticalStack>
        </HorizontalStack>
index eddea8aa7e31abf1df2b495fb65a6581e47a6352..ccdd87c02ac52ee2d44908bda6c5dcfa574817ad 100755 (executable)
        </HorizontalStack>
        <HorizontalStack Fit="true" Background="hgradient|0:DarkRed|1:Transparent" Margin="5">
                <Label Text="SCALED PROPORTIONNAL" Width="150"/>
-               <Image Background="Blue" Path="#Crow.Images.Icons.tetra.png"/>
-               <Image Margin="10" Background="Blue" Path="#Crow.Images.Icons.tetra.png"/>
-               <Image Background="Blue" Width="20" Height="20" Path="#Crow.Images.Icons.tetra.png"/>
-               <Image Margin="2" Background="Blue" Width="20" Height="20" Path="#Crow.Images.Icons.tetra.png"/>
-               <Image Background="Blue" Width="50" Height="100" Path="#Crow.Images.Icons.tetra.png"/>
+               <Image Background="Blue" Path="#Crow.Icons.tetra.png"/>
+               <Image Margin="10" Background="Blue" Path="#Crow.Icons.tetra.png"/>
+               <Image Background="Blue" Width="20" Height="20" Path="#Crow.Icons.tetra.png"/>
+               <Image Margin="2" Background="Blue" Width="20" Height="20" Path="#Crow.Icons.tetra.png"/>
+               <Image Background="Blue" Width="50" Height="100" Path="#Crow.Icons.tetra.png"/>
                <Image Margin="10" Background="Blue" Width="50" Height="100" Path="#Crow.Images.Icons.tetra.png"/>
-               <Image Background="Blue" Width="100" Height="50" Path="#Crow.Images.Icons.tetra.png"/>
-               <Image Margin="10" Background="Blue" Width="100" Height="50" Path="#Crow.Images.Icons.tetra.png"/>
-               <Image Background="Blue" Width="50" Height="Fit" Path="#Crow.Images.Icons.tetra.png"/>
-               <Image Margin="10" Background="Blue" Width="50" Height="Fit" Path="#Crow.Images.Icons.tetra.png"/>
+               <Image Background="Blue" Width="100" Height="50" Path="#Crow.Icons.tetra.png"/>
+               <Image Margin="10" Background="Blue" Width="100" Height="50" Path="#Crow.Icons.tetra.png"/>
+               <Image Background="Blue" Width="50" Height="Fit" Path="#Crow.Icons.tetra.png"/>
+               <Image Margin="10" Background="Blue" Width="50" Height="Fit" Path="#Crow.Icons.tetra.png"/>
        </HorizontalStack>
        <HorizontalStack Fit="true" Background="hgradient|0:DarkRed|1:Transparent" Margin="5">
                <Label Text="SCALED NOT PROPORTIONNAL" Width="150"/>
-               <Image KeepProportions="false" Background="Blue" Path="#Crow.Images.Icons.tetra.png"/>
-               <Image KeepProportions="false" Margin="10" Background="Blue" Path="#Crow.Images.Icons.tetra.png"/>
-               <Image KeepProportions="false" Background="Blue" Width="20" Height="20" Path="#Crow.Images.Icons.tetra.png"/>
-               <Image KeepProportions="false" Margin="2" Background="Blue" Width="20" Height="20" Path="#Crow.Images.Icons.tetra.png"/>
-               <Image KeepProportions="false" Background="Blue" Width="50" Height="100" Path="#Crow.Images.Icons.tetra.png"/>
+               <Image KeepProportions="false" Background="Blue" Path="#Crow.Icons.tetra.png"/>
+               <Image KeepProportions="false" Margin="10" Background="Blue" Path="#Crow.Icons.tetra.png"/>
+               <Image KeepProportions="false" Background="Blue" Width="20" Height="20" Path="#Crow.Icons.tetra.png"/>
+               <Image KeepProportions="false" Margin="2" Background="Blue" Width="20" Height="20" Path="#Crow.Icons.tetra.png"/>
+               <Image KeepProportions="false" Background="Blue" Width="50" Height="100" Path="#Crow.Icons.tetra.png"/>
                <Image KeepProportions="false" Margin="10" Background="Blue" Width="50" Height="100" Path="#Crow.Images.Icons.tetra.png"/>
                <Image KeepProportions="false" Background="Blue" Width="100" Height="50" Path="#Crow.Images.Icons.tetra.png"/>
                <Image KeepProportions="false" Margin="10" Background="Blue" Width="100" Height="50" Path="#Crow.Images.Icons.tetra.png"/>
index 61e79a2837a6d16ecb42bf46f812760d342856da..fb251487c63f7053ed3fa37af2d789065e30d15b 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0"?>
 <Border BorderStyle="Sunken" Fit="true" Background="0.7,0.7,0.7,0.5" CornerRadius="10">
        <VerticalStack Margin="20">
-               <Image Path="#Crow.Images.Icons.crow.svg"/>
+               <Image Path="#Crow.Icons.crow.svg"/>
 <!--           <Label Font="Times bold, 60" Text="C.R.O.W"/>-->
                <HorizontalStack Fit="true" DataSource="{CrowVersion}" Spacing="0">
                        <Label Foreground="Black" Font="mono, 12" Text="version: "/>            
index ab518ad9b1ed032310b51bf5b8b08144d5e98131..42f51163162b92e38ec1bb61c1b4043d7dcf6346 100755 (executable)
@@ -19,7 +19,7 @@
                <HorizontalStack Visible="{./IsDocked}" Height="Fit" Margin="1" Background="Grey">
                        <Label  Text="{./Caption}" TextAlignment="Left" Width="Stretched"
                                         Foreground="Jet" />
-                       <Image Width="8" Height="8" Focusable="true" Margin="0" Path="#Crow.Images.Icons.exit2.svg"
+                       <Image Width="8" Height="8" Focusable="true" Margin="0" Path="#Crow.Icons.exit2.svg"
                                         MouseClick="./butQuitPress"/>
                </HorizontalStack>
                <HorizontalStack Background="vgradient|0:0.5,0.6,0.5,0.5|1:0.2,0.3,0.3,0.7"
@@ -29,7 +29,7 @@
                        <Label Width="Stretched" Foreground="White" Margin="1" TextAlignment="Left" Text="{./Caption}" />
                        <Border CornerRadius="6" BorderWidth="1" Foreground="Transparent"  Height="10" Width="10"
                                MouseEnter="{Foreground=White}" MouseLeave="{Foreground=Transparent}">
-                               <Image Focusable="true" Name="Image" Margin="0" Path="#Crow.Images.Icons.exit2.svg"
+                               <Image Focusable="true" Name="Image" Margin="0" Path="#Crow.Icons.exit2.svg"
                                         MouseClick="./butQuitPress"/>
                        </Border>
                        <GraphicObject Width="5"/>
index 8dd0d0495d4bbf491796891087c82b18067de03a..fd0f310d6e9e5a5a0075287b0d4c1bbf3b7a69f1 100644 (file)
@@ -13,7 +13,7 @@
                <Label Text="{./TabOffset}" Foreground="Red"/>
                <Border CornerRadius="5" BorderWidth="1" Foreground="Transparent"  Height="12" Width="12"
                                        MouseEnter="{Foreground=White}" MouseLeave="{Foreground=Transparent}">
-                       <Image Focusable="true" Name="Image" Margin="0" Width="Stretched" Height="Stretched" Path="#Crow.Images.Icons.exit2.svg"
+                       <Image Focusable="true" Name="Image" Margin="0" Width="Stretched" Height="Stretched" Path="#Crow.Icons.exit2.svg"
                                 MouseClick="./butCloseTabClick"/>
                </Border>
        </HorizontalStack>
index 8df18346eea3ac1f45150f1cdd5614e40b01a3d7..8d1e441c3735c72e4ac8c8d69b737c5fc332b31f 100755 (executable)
                </VerticalStack>
                <VerticalStack Width="33%" Margin="5" Spacing="5">
                        <Expandable Background="DimGray">
-                               <Image Path="#Crow.Images.Icons.crow.svg"/>
+                               <Image Path="#Crow.Icons.crow.svg"/>
                        </Expandable>
                        <Popper Background="DimGray" PopDirection="Bottom">
                                <Border Fit="True" Background="DimGray" CornerRadius="0" BorderWidth="1">
-                                       <Image Path="#Crow.Images.Icons.crow.svg" Width="100" Height="100" Margin="10"
+                                       <Image Path="#Crow.Icons.crow.svg" Width="100" Height="100" Margin="10"
                                                MouseEnter="{Background=LightGray}"
                                                MouseLeave="{Background=Transparent}"/>
                                </Border>
                        <Container Height="Fit" Background="Onyx" Margin="2" CornerRadius="5">
                                <ProgressBar Background="DimGray" Height="10" Value="50"/>
                        </Container>
-                       <Image Path="#Crow.Images.Icons.crow.svg" Width="60" Height="60" Background="LightGray" />
+                       <Image Path="#Crow.Icons.crow.svg" Width="60" Height="60" Background="LightGray" />
                        <TabView Name="tabview1"
                                Height="120" Orientation="Horizontal" Spacing="15">
                                <TabItem Name="TabItem1" Caption="Tab 1" Margin="0">
diff --git a/Tests/Interfaces/testBorder.goml.cs b/Tests/Interfaces/testBorder.goml.cs
deleted file mode 100644 (file)
index 8c7663a..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-// ------------------------------------------------------------------------------
-//  <autogenerated>
-//      This code was generated by a tool.
-//      Mono Runtime Version: 4.0.30319.17020
-// 
-//      Changes to this file may cause incorrect behavior and will be lost if 
-//      the code is regenerated.
-//  </autogenerated>
-// ------------------------------------------------------------------------------
-
-using System;
-
-
-namespace Crow {
-    
-    public partial class testBorder : Border {
-        public testBorder() {
-            this.BorderWidth = 5;
-            this.Width = 200;
-            this.Height = 200;
-            this.CornerRadius = 20;
-            this.Margin = 0;
-            this.Background = Crow.Color.Mantis;
-            this.SetChild(new Crow.GraphicObject());
-            this.Child.CornerRadius = 0;
-            this.Child.Background = Crow.Color.CornflowerBlue;
-            this.Child.Height = 100;
-            this.Child.Width = 100;
-        }
-    }
-}
index 17c0bfc09699b11594618bd4904845d856a96dac..46a91ed400c124c03ee1039caa93b2b7ef3f285c 100644 (file)
@@ -33,7 +33,7 @@ using System.Linq;
 using System.Text;
 using Crow.IML;
 
-namespace Tests
+namespace tests
 {
        class Showcase : Interface
        {
@@ -53,8 +53,7 @@ namespace Tests
                                app.crowContainer.DataSource = new object ();
                                app.hideError ();
 
-                               while (true)
-                                       System.Threading.Thread.Sleep (10);
+                app.Run();
 
                        }
                }
@@ -85,16 +84,21 @@ namespace Tests
                                return;
                        hideError();
                        lock (UpdateMutex) {
-                               try {
-                                       GraphicObject g = Load (fi.FullName);
-                                       crowContainer.SetChild (g);
-                                       g.DataSource = this;
-                               } catch (InstantiatorException ex) {
-                                       showError (ex);
-                               }
-                       }
-
-                       string source = "";
+                try
+                {
+                    GraphicObject g = Load(fi.FullName);
+                    crowContainer.SetChild(g);
+                    g.DataSource = this;
+                }
+                catch (Exception ex)
+                {
+                    Console.WriteLine(ex.ToString());
+                    if (ex is InstantiatorException)
+                        showError((InstantiatorException)ex);
+                }
+            }
+
+            string source = "";
                        using (Stream s = new FileStream (fi.FullName, FileMode.Open)) {
                                using (StreamReader sr = new StreamReader (s)) {
                                        source = sr.ReadToEnd ();
@@ -125,11 +129,12 @@ namespace Tests
                                        crowContainer.SetChild (g);
                                        g.DataSource = this;
                                }
-                       } catch (InstantiatorException ex) {
-                               System.Diagnostics.Debug.WriteLine (ex.ToString ());
-                               showError (ex);
+                       } catch (Exception ex) {
+                               Console.WriteLine (ex.ToString ());
+                if (ex is InstantiatorException)
+                                   showError ((InstantiatorException)ex);
                        }
-               }
+        }
 
 
                #region Test values for Binding
diff --git a/Tests/Tests.NetStd.csproj b/Tests/Tests.NetStd.csproj
new file mode 100644 (file)
index 0000000..2023931
--- /dev/null
@@ -0,0 +1,39 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <TargetFramework>netcoreapp2.0</TargetFramework>
+
+    <OutputType>Exe</OutputType>
+    <StartupObject>tests.Showcase</StartupObject>
+        
+    <OutputPath>$(SolutionDir)build/$(Configuration)</OutputPath>
+    <IntermediateOutputPath>$(SolutionDir)build/obj/$(Configuration)</IntermediateOutputPath>  
+    
+    <EnableDefaultItems>false</EnableDefaultItems>
+    <EnableDefaultCompileItems>false</EnableDefaultCompileItems>
+  </PropertyGroup>
+
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugType>portable</DebugType>
+  </PropertyGroup>
+  <ItemGroup>
+    <Compile Include="*.cs" />  
+        
+    <ProjectReference Include="..\Crow\Crow.NetStd.csproj" />
+        
+    <EmbeddedResource Include="image\**\*.*">
+      <LogicalName>Tests.image.%(Filename)%(Extension)</LogicalName>
+    </EmbeddedResource>
+
+    <EmbeddedResource Include="ui\**\*.*">
+      <LogicalName>Tests.ui.%(Filename)%(Extension)</LogicalName>
+    </EmbeddedResource>
+        
+    <EmbeddedResource Include="test.style" />
+        
+    <None Include="Interfaces\**\*.*">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+  </ItemGroup>
+    
+</Project>
index a6c010315bbd8286e8714e6f8a7549119c773413..44888058e1a7c33521f920f358d2248e92d76782 100644 (file)
@@ -8,8 +8,7 @@
     <OutputType>Exe</OutputType>
     <RootNamespace>Tests</RootNamespace>
     <AssemblyName>Tests</AssemblyName>
-    <StartupObject>tests.MainClass</StartupObject>
-    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
+    <StartupObject>tests.Showcase</StartupObject>
     <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
     <ReleaseVersion>0.5</ReleaseVersion>
     <OutputPath>$(SolutionDir)build/$(Configuration)</OutputPath>
     <None Include="Interfaces\Divers\testVisibility.crow">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </None>
+    <None Include="Interfaces\CheckBox2.imlt">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
   </ItemGroup>
   <ItemGroup>
     <Folder Include="Interfaces\" />
     <EmbeddedResource Include="ui\MenuItem.style" />
     <EmbeddedResource Include="test.style" />
     <EmbeddedResource Include="Interfaces\treeList.crow" />
-    <EmbeddedResource Include="Interfaces\CheckBox2.imlt" />
     <EmbeddedResource Include="Interfaces\perfMsr.crow" />
     <EmbeddedResource Include="ui\showcase.crow" />
     <EmbeddedResource Include="Interfaces\TabItem.template">
     </EmbeddedResource>
   </ItemGroup>
   <ItemGroup>
-    <ProjectReference Include="..\Crow.csproj">
+    <ProjectReference Include="..\Crow\Crow.csproj">
       <Project>{C2980F9B-4798-4C05-99E2-E174810F7C7B}</Project>
       <Name>Crow</Name>
     </ProjectReference>
index e650a05b753531b2618df07b8623fb8129e70a0b..14971b88803972daf47f7b68019f529c64fa2490 100644 (file)
@@ -13,13 +13,13 @@ FpsDisp {
        Background = "MediumSeaGreen";
 }
 CheckBox2 {
-       Template= "#Tests.Interfaces.CheckBox2.imlt";
+       Template= "Interfaces/CheckBox2.imlt";
        Background = "Jet";
        Checked="{Background=MediumSeaGreen}";
        Unchecked = "{Background=Jet}";
 }
 RadioButton2 {
-       Template="#Tests.Interfaces.CheckBox2.imlt";
+       Template="Interfaces/CheckBox2.imlt";
        Background = "Jet";
        Checked = "{Background=MediumSeaGreen}";
        Unchecked = "{Background=Jet}";
diff --git a/Tests/testCairoXLib.cs b/Tests/testCairoXLib.cs
deleted file mode 100644 (file)
index cb18d65..0000000
+++ /dev/null
@@ -1,143 +0,0 @@
-using System;
-using System.Runtime.InteropServices;
-using Crow;
-using Mono.Unix.Native;
-using System.Diagnostics;
-using System.Threading;
-
-namespace testsCairoXLib
-{
-       class MainClass
-       {
-               static internal IntPtr xHandle, xwinHnd;
-               static internal Int32 xScreen;
-               static IntPtr xLastEvent;
-               static XErrorHandler errorHnd;
-
-               static Pollfd[] pollfds;
-
-               static Cairo.Surface surf;
-
-               static void init() {
-                       XLib.NativeMethods.XInitThreads ();
-                       xHandle = XLib.NativeMethods.XOpenDisplay(IntPtr.Zero);
-                       if (xHandle == IntPtr.Zero)
-                               throw new NotSupportedException("[XLib] Failed to open display.");
-
-                       xScreen = XLib.NativeMethods.XDefaultScreen(xHandle);
-                       xLastEvent = Marshal.AllocHGlobal(96);
-
-                       int x = 0, y = 0;
-                       int width = 800, height = 600;
-
-                       xwinHnd = XLib.NativeMethods.XCreateSimpleWindow (xHandle, XLib.NativeMethods.XDefaultRootWindow(xHandle),
-                               x, y, (uint)width, (uint)height, 0, IntPtr.Zero, IntPtr.Zero);
-                       if (xwinHnd == IntPtr.Zero)
-                               throw new NotSupportedException("[XLib] Failed to create window.");
-
-                       XLib.NativeMethods.XSelectInput (xHandle, xwinHnd, XLib.EventMask.ExposureMask | XLib.EventMask.KeyPressMask
-                               | XLib.EventMask.PointerMotionMask | XLib.EventMask.ButtonPressMask | XLib.EventMask.ButtonReleaseMask);
-
-                       XLib.NativeMethods.XMapWindow (xHandle, xwinHnd);
-
-                       surf = new Cairo.XlibSurface (xHandle, xwinHnd, XLib.NativeMethods.XDefaultVisual (xHandle, xScreen), (int)width, (int)height);
-
-                       pollfds = new Pollfd [1];
-                       pollfds [0] = new Pollfd ();
-                       pollfds [0].fd = XLib.NativeMethods.XConnectionNumber (xHandle);
-                       pollfds [0].events = PollEvents.POLLIN;
-
-                       errorHnd = new XLib.XErrorHandler (HandleError);
-                       XLib.NativeMethods.XSetErrorHandler (errorHnd);
-               }
-               static int HandleError (IntPtr display, ref XLib.XErrorEvent error_event)
-               {
-                       /*if (ErrorExceptions)
-                               throw new X11Exception (error_event.display, error_event.resourceid,
-                                       error_event.serial, error_event.error_code,
-                                       error_event.request_code, error_event.minor_code);
-                       else
-                               Console.WriteLine ("X11 Error encountered: {0}{1}\n",
-                                       X11Exception.GetMessage(error_event.display, error_event.resourceid,
-                                               error_event.serial, error_event.error_code,
-                                               error_event.request_code, error_event.minor_code),
-                                       WhereString());*/
-                       Debug.WriteLine ("XERROR {0}", error_event.error_code);
-                       return 0;
-               }
-
-               static Stopwatch timer;
-
-               static Point mousePos;
-
-               static void draw() {
-                       using (Cairo.Context ctx = new Cairo.Context (surf)) {
-                               ctx.SetSourceRGBA (1, 0, 0, 1);
-                               ctx.Paint ();
-                               ctx.MoveTo (100, 100);
-                               ctx.SetSourceRGBA (1, 1, 1, 1);
-                               ctx.SetFontSize (20);
-                               ctx.ShowText (string.Format("{0,10}",timer.ElapsedMilliseconds.ToString()));
-                               ctx.MoveTo (mousePos + new Point(10,0));
-                               ctx.Arc (mousePos.X, mousePos.Y, 10, 0, Math.PI * 2.0);
-                               ctx.Stroke ();
-                       }
-                       XLib.NativeMethods.XSync (xHandle, 0);
-               }
-
-               static void interfaceThread()
-               {
-                       timer = Stopwatch.StartNew ();
-
-                       while (true) {
-                               //pollfds [0].fd = XLib.NativeMethods.XConnectionNumber (xHandle);
-                               //Syscall.poll (pollfds, 1U, 0);
-
-                               draw ();
-
-                               if (XLib.NativeMethods.XPending (xHandle) > 0) {
-                                       XLib.XEvent xevent = new XLib.XEvent ();
-                                       XLib.NativeMethods.XNextEvent (xHandle, ref xevent);
-
-                                       switch (xevent.type) {
-                                       case XLib.XEventName.KeyPress:
-                                               Debug.WriteLine ("keypress: {0}", xevent.KeyEvent.keycode);
-                                               break;
-                                       case XLib.XEventName.MotionNotify:
-                                               Debug.WriteLine ("motion: ({0},{1})", xevent.MotionEvent.x, xevent.MotionEvent.y);
-                                               mousePos = new Point(xevent.MotionEvent.x, xevent.MotionEvent.y);
-                                               break;
-                                       case XLib.XEventName.ButtonPress:
-                                               Debug.WriteLine ("button press: {0}", xevent.ButtonEvent.button);
-                                               break;
-                                       case XLib.XEventName.ButtonRelease:
-                                               Debug.WriteLine ("button release: {0}", xevent.ButtonEvent.button);
-                                               break;
-
-                                       }
-                               }
-                       }
-               }
-
-               public static void Main(string[] args)
-               {
-                       /*using (Interface app = new Interface ()) {
-                                                               XWindow win = new XWindow (app);
-                                                               win.Show ();
-                               app.LoadIMLFragment (@"<SimpleGauge Level='40' Margin='5' Background='Jet' Foreground='Grey' Width='30' Height='50%'/>");
-                               app.AddWidget(@"Interfaces/Divers/0.crow");
-                               System.Threading.Thread.Sleep (10000);
-                       }*/
-
-                       init ();
-
-                       Thread t = new Thread (interfaceThread);
-                       t.IsBackground = true;
-                       t.Start ();
-
-                       while (true)
-                               continue;
-               }
-
-       }
-}
index fe85d912b9a0159fd568f8048ff8a70ac5b31326..932fb6b78ddf7e73761c40505894e94b7602b74d 100644 (file)
@@ -1,3 +1,3 @@
 BlueLabel {
-       Background = Blue;
+       Background = "Blue";
 }
diff --git a/crow.key b/crow.key
deleted file mode 100644 (file)
index b69aa3e..0000000
Binary files a/crow.key and /dev/null differ
diff --git a/libs/OpenTK.dll b/libs/OpenTK.dll
deleted file mode 100644 (file)
index 370a45e..0000000
Binary files a/libs/OpenTK.dll and /dev/null differ
diff --git a/libs/OpenTK.dll.config b/libs/OpenTK.dll.config
deleted file mode 100644 (file)
index 7098d39..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-<configuration>
-  <dllmap os="linux" dll="opengl32.dll" target="libGL.so.1"/>
-  <dllmap os="linux" dll="glu32.dll" target="libGLU.so.1"/>
-  <dllmap os="linux" dll="openal32.dll" target="libopenal.so.1"/>
-  <dllmap os="linux" dll="alut.dll" target="libalut.so.0"/>
-  <dllmap os="linux" dll="opencl.dll" target="libOpenCL.so"/>
-  <dllmap os="linux" dll="libX11" target="libX11.so.6"/>
-  <dllmap os="linux" dll="libXi" target="libXi.so.6"/>
-  <dllmap os="linux" dll="SDL2.dll" target="libSDL2-2.0.so.0"/>
-  <dllmap os="osx" dll="opengl32.dll" target="/System/Library/Frameworks/OpenGL.framework/OpenGL"/>
-  <dllmap os="osx" dll="openal32.dll" target="/System/Library/Frameworks/OpenAL.framework/OpenAL" />
-  <dllmap os="osx" dll="alut.dll" target="/System/Library/Frameworks/OpenAL.framework/OpenAL" />
-  <dllmap os="osx" dll="libGLES.dll" target="/System/Library/Frameworks/OpenGLES.framework/OpenGLES" />
-  <dllmap os="osx" dll="libGLESv1_CM.dll" target="/System/Library/Frameworks/OpenGLES.framework/OpenGLES" />
-  <dllmap os="osx" dll="libGLESv2.dll" target="/System/Library/Frameworks/OpenGLES.framework/OpenGLES" />
-  <dllmap os="osx" dll="opencl.dll" target="/System/Library/Frameworks/OpenCL.framework/OpenCL"/>
-  <dllmap os="osx" dll="SDL2.dll" target="libSDL2.dylib"/>
-  <!-- XQuartz compatibility (X11 on Mac) -->
-  <dllmap os="osx" dll="libGL.so.1" target="/usr/X11/lib/libGL.dylib"/>
-  <dllmap os="osx" dll="libX11" target="/usr/X11/lib/libX11.dylib"/>
-  <dllmap os="osx" dll="libXcursor.so.1" target="/usr/X11/lib/libXcursor.dylib"/>
-  <dllmap os="osx" dll="libXi" target="/usr/X11/lib/libXi.dylib"/>
-  <dllmap os="osx" dll="libXinerama" target="/usr/X11/lib/libXinerama.dylib"/>
-  <dllmap os="osx" dll="libXrandr.so.2" target="/usr/X11/lib/libXrandr.dylib"/>
-</configuration>
diff --git a/src/BmpPicture.cs b/src/BmpPicture.cs
deleted file mode 100644 (file)
index 98c2a01..0000000
+++ /dev/null
@@ -1,168 +0,0 @@
-//
-// BmpPicture.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-using System.IO;
-using Cairo;
-
-namespace Crow
-{
-
-       /// <summary>
-       /// Derived from FILL for loading and drawing bitmaps in the interface
-       /// </summary>
-       public class BmpPicture : Picture
-       {
-               byte[] image = null;
-
-               #region CTOR
-               /// <summary>
-               /// Initializes a new instance of BmpPicture.
-               /// </summary>
-               public BmpPicture ()
-               {}
-               /// <summary>
-               /// Initializes a new instance of BmpPicture by loading the image pointed by the path argument
-               /// </summary>
-               /// <param name="path">image path, may be embedded</param>
-               public BmpPicture (string path) : base(path)
-               {}
-               #endregion
-               /// <summary>
-               /// load the image for rendering from the path given as argument
-               /// </summary>
-               /// <param name="path">image path, may be embedded</param>
-               void Load ()
-               {                       
-                       if (sharedResources.ContainsKey (Path)) {
-                               sharedPicture sp = sharedResources [Path];
-                               image = (byte[])sp.Data;
-                               Dimensions = sp.Dims;
-                               return;
-                       }
-                       using (Stream stream = Interface.StaticGetStreamFromPath (Path)) {                              
-                               //loadBitmap (new System.Drawing.Bitmap (stream));      
-                       }
-                       sharedResources [Path] = new sharedPicture (image, Dimensions);
-               }
-
-               //load image via System.Drawing.Bitmap, cairo load png only
-               /*void loadBitmap (System.Drawing.Bitmap bitmap)
-               {
-                       if (bitmap == null)
-                               return;
-
-                       System.Drawing.Imaging.BitmapData data = bitmap.LockBits
-                               (new System.Drawing.Rectangle (0, 0, bitmap.Width, bitmap.Height),
-                                       System.Drawing.Imaging.ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
-
-                       Dimensions = new Size (bitmap.Width, bitmap.Height);
-
-                       int stride = data.Stride;
-                       int bitmapSize = Math.Abs (data.Stride) * bitmap.Height;
-
-                       image = new byte[bitmapSize];
-                       System.Runtime.InteropServices.Marshal.Copy (data.Scan0, image, 0, bitmapSize);
-
-                       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 (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
-
-               /// <summary>
-               /// paint the image in the rectangle given in arguments according
-               /// to the Scale and keepProportion parameters.
-               /// </summary>
-               /// <param name="gr">drawing Backend context</param>
-               /// <param name="rect">bounds of the target surface to paint</param>
-               /// <param name="subPart">used for svg only</param>
-               public override void Paint (Context gr, Rectangle rect, string subPart = "")
-               {
-                       float widthRatio = 1f;
-                       float heightRatio = 1f;
-
-                       if (Scaled){
-                               widthRatio = (float)rect.Width / Dimensions.Width;
-                               heightRatio = (float)rect.Height / Dimensions.Height;
-                       }
-
-                       if (KeepProportions) {
-                               if (widthRatio < heightRatio)
-                                       heightRatio = widthRatio;
-                               else
-                                       widthRatio = heightRatio;
-                       }
-
-                       gr.Save ();
-
-                       gr.Translate (rect.Left,rect.Top);
-                       gr.Scale (widthRatio, heightRatio);
-                       gr.Translate ((rect.Width/widthRatio - Dimensions.Width)/2, (rect.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 ();
-                       }
-                       gr.Restore ();
-               }
-       }
-}
-
diff --git a/src/BubblingMouseButtonEventArgs.cs b/src/BubblingMouseButtonEventArgs.cs
deleted file mode 100644 (file)
index e81a6f7..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-//
-// BubblingMouseButtonEventArgs.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-
-namespace Crow
-{
-       /// <summary>
-       /// Store focused widget while bubbling mouse down event to the top
-       /// </summary>
-       public class BubblingMouseButtonEventArg: MouseButtonEventArgs
-       {
-               public GraphicObject Focused;
-               public BubblingMouseButtonEventArg(MouseButtonEventArgs mbe) : base(mbe){}
-               public BubblingMouseButtonEventArg(int x, int y, MouseButton button, bool pressed)
-                       : base (x,y,button,pressed){}
-
-       }
-}
-
diff --git a/src/Cairo/CairoHelpers.cs b/src/Cairo/CairoHelpers.cs
deleted file mode 100644 (file)
index 032980d..0000000
+++ /dev/null
@@ -1,137 +0,0 @@
-//
-// CairoHelpers.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-
-namespace Crow
-{
-    public static class CairoHelpers
-    {
-               public static T Clamp<T>(this T val, T min, T max) where T : IComparable<T>
-               {
-                   if (val.CompareTo(min) < 0) return min;
-                   else if(val.CompareTo(max) > 0) return max;
-                   else return val;
-               }
-               /// <summary>
-               /// Convert string to utf8 (extension method)
-               /// </summary>
-               /// <returns>byte array with utf8 encoding</returns>
-               public static byte[] ToUtf8(this String str)
-               {
-                       return System.Text.UTF8Encoding.UTF8.GetBytes (str);
-               }
-
-        public static double min(params double[] arr)
-        {
-            int minp = 0;
-            for (int i = 1; i < arr.Length; i++)
-                if (arr[i] < arr[minp])
-                    minp = i;
-
-            return arr[minp];
-        }
-               public static void CairoRectangle(Cairo.Context gr, Rectangle r, double radius, double stroke = 0.0)
-               {
-                       if (radius > 0)
-                               CairoHelpers.DrawRoundedRectangle (gr, r, radius, stroke);
-                       else
-                               gr.Rectangle (r, stroke);
-               }
-               public static void CairoCircle(Cairo.Context gr, Rectangle r)
-               {
-                       gr.Arc(r.X + r.Width/2, r.Y + r.Height/2, Math.Min(r.Width,r.Height)/2, 0, 2*Math.PI);
-               }
-               public static void DrawRoundedRectangle(Cairo.Context gr, Rectangle r, double radius, double stroke = 0.0)
-        {
-                       if (stroke>0.0) {
-                               gr.LineWidth = stroke;
-                               double hsw = stroke / 2.0;
-                               DrawRoundedRectangle (gr, hsw + r.X, hsw + r.Y, (double)r.Width - stroke, (double)r.Height - stroke, radius);
-                               gr.Stroke ();
-                       }else
-                               DrawRoundedRectangle(gr, r.X, r.Y, r.Width, r.Height, radius);
-        }
-        public static void DrawRoundedRectangle(Cairo.Context gr, double x, double y, double width, double height, double radius)
-        {
-            gr.Save();
-
-            if ((radius > height / 2) || (radius > width / 2))
-                radius = min(height / 2, width / 2);
-
-            gr.MoveTo(x, y + radius);
-            gr.Arc(x + radius, y + radius, radius, Math.PI, -Math.PI / 2);
-            gr.LineTo(x + width - radius, y);
-            gr.Arc(x + width - radius, y + radius, radius, -Math.PI / 2, 0);
-            gr.LineTo(x + width, y + height - radius);
-            gr.Arc(x + width - radius, y + height - radius, radius, 0, Math.PI / 2);
-            gr.LineTo(x + radius, y + height);
-            gr.Arc(x + radius, y + height - radius, radius, Math.PI / 2, Math.PI);
-            gr.ClosePath();
-            gr.Restore();
-        }
-        public static void StrokeRaisedRectangle(Cairo.Context gr, Rectangle r, double width = 1)
-        {
-            gr.Save();
-            r.Inflate((int)-width / 2, (int)-width / 2);
-            gr.LineWidth = width;
-                       gr.SetSourceColor(Color.White);
-            gr.MoveTo(r.BottomLeft);
-            gr.LineTo(r.TopLeft);
-            gr.LineTo(r.TopRight);
-            gr.Stroke();
-
-                       gr.SetSourceColor(Color.DarkGrey);
-            gr.MoveTo(r.TopRight);
-            gr.LineTo(r.BottomRight);
-            gr.LineTo(r.BottomLeft);
-            gr.Stroke();
-
-            gr.Restore();
-        }
-        public static void StrokeLoweredRectangle(Cairo.Context gr, Rectangle r, double width = 1)
-        {
-            gr.Save();
-            r.Inflate((int)-width / 2, (int)-width / 2);
-            gr.LineWidth = width;
-                       gr.SetSourceColor(Color.DarkGrey);
-            gr.MoveTo(r.BottomLeft);
-            gr.LineTo(r.TopLeft);
-            gr.LineTo(r.TopRight);
-            gr.Stroke();
-                       gr.SetSourceColor(Color.White);
-            gr.MoveTo(r.TopRight);
-            gr.LineTo(r.BottomRight);
-            gr.LineTo(r.BottomLeft);
-            gr.Stroke();
-
-            gr.Restore();
-        }
-    }
-}
diff --git a/src/Colors.cs b/src/Colors.cs
deleted file mode 100644 (file)
index 1da9913..0000000
+++ /dev/null
@@ -1,482 +0,0 @@
-//
-// Colors.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Xml.Serialization;
-using System.Reflection;
-using System.Diagnostics;
-
-
-
-namespace Crow
-{
-       /// <summary>
-       /// Universal Color structure
-       /// </summary>
-       public struct Color
-    {
-               internal static Type TColor = typeof(Color);
-
-               #region CTOR
-               public Color(double _R, double _G, double _B, double _A)
-               {
-                       A = _A.Clamp(0,1);
-                       R = _R.Clamp(0,1);
-                       G = _G.Clamp(0,1);
-                       B = _B.Clamp(0,1);
-                       predefinied = false;
-                       htmlCode = "";
-                       Name = "";
-               }
-               internal Color(double _R, double _G, double _B, double _A, string _name)
-               {
-                       A = _A;
-                       R = _R;
-                       G = _G;
-                       B = _B;
-                       predefinied = false;
-                       Name = _name;
-                       htmlCode = "";
-                       ColorDic.Add(_name,this);
-               }
-               internal Color(int _R, int _G, int _B, string _name, string _code)
-               {
-                       A = 1.0;
-                       R = _R / 255.0;
-                       G = _G / 255.0;
-                       B = _B / 255.0;
-                       Name = _name;
-                       htmlCode = _code;
-                       predefinied = true;
-                       ColorDic.Add(_name,this);
-               }
-               #endregion
-
-               /// <summary>
-               /// color names dictionary
-               /// </summary>
-               public static Dictionary<string, Color> ColorDic = new Dictionary<string, Color>();
-
-               public string Name;
-               public string htmlCode;
-               internal bool predefinied;
-
-               #region public fields
-        public double A;
-        public double R;
-        public double G;
-               public double B;
-               #endregion
-
-               #region Operators
-        public static implicit operator string(Color c)
-        {
-            return c.ToString();
-        }
-               public static implicit operator Color(string s)
-               {
-                       if (string.IsNullOrEmpty(s))
-                               return White;
-                       Color cc = default(Color);
-                       if (s.StartsWith ("#")) {
-                               cc.R = int.Parse (s.Substring (1, 2), System.Globalization.NumberStyles.HexNumber) / 255.0;
-                               cc.G = int.Parse (s.Substring (3, 2), System.Globalization.NumberStyles.HexNumber) / 255.0;
-                               cc.B = int.Parse (s.Substring (5, 2), System.Globalization.NumberStyles.HexNumber) / 255.0;
-                               if (s.Length > 7)
-                                       cc.A = int.Parse (s.Substring (7, 2), System.Globalization.NumberStyles.HexNumber) / 255.0;
-                               else
-                                       cc.A = 1.0;
-                               return cc;
-                       }
-
-                       if (char.IsLetter(s[0])){
-                               if (ColorDic.ContainsKey (s))
-                                       return ColorDic[s];
-                               throw new Exception ("Unknown color name: " + s);
-                       }
-
-                       string[] c = s.Split(new char[] { ',' });
-                                                       
-                       return new Color(
-                               double.Parse(c[0]),
-                               double.Parse(c[1]),
-                               double.Parse(c[2]),
-                               double.Parse(c[3]));
-               }
-
-               public static bool operator ==(Color left, Color right)
-               {
-                       if (left.predefinied & right.predefinied)
-                               return left.htmlCode == right.htmlCode;
-                       return left.A != right.A ? false :
-                               left.R != right.R ? false :
-                               left.G != right.G ? false :
-                               left.B != right.B ? false : true;
-               }
-               public static bool operator !=(Color left, Color right)
-               {
-                       if (left.predefinied & right.predefinied)
-                               return left.htmlCode != right.htmlCode;
-                       return left.A == right.A ? false :
-                               left.R == right.R ? false :
-                               left.G == right.G ? false :
-                               left.B == right.B ? false : true;
-
-               }
-               public static bool operator ==(Color c, string n)
-               {
-                       return n.StartsWith("#") ?
-                               string.Equals(c.HtmlCode, n, StringComparison.Ordinal) :
-                               string.Equals(c.Name, n, StringComparison.Ordinal);
-               }
-               public static bool operator !=(Color c, string n)
-               {
-                       return n.StartsWith("#") ?
-                               !string.Equals(c.HtmlCode, n, StringComparison.Ordinal) :
-                               !string.Equals(c.Name, n, StringComparison.Ordinal);
-               }
-               public static bool operator ==(string n, Color c)
-               {
-                       return string.Equals (c.Name, n, StringComparison.Ordinal);
-               }
-               public static bool operator !=(string n, Color c)
-               {
-                       return !string.Equals (c.Name, n, StringComparison.Ordinal);
-               }
-               public static Color operator *(Color c, Double f)
-               {
-                       return new Color(c.R,c.G,c.B,c.A * f);
-               }
-               public static Color operator +(Color c1, Color c2)
-               {
-                       return new Color(c1.R + c2.R,c1.G + c2.G,c1.B + c2.B,c1.A + c2.A);
-               }
-               public static Color operator -(Color c1, Color c2)
-               {
-                       return new Color(c1.R - c2.R,c1.G - c2.G,c1.B - c2.B,c1.A - c2.A);
-               }
-               #endregion
-
-               /// <summary>
-               /// compute the hue of the color
-               /// </summary>
-               public double Hue {
-                       get {
-                               double min = Math.Min (R, Math.Min (G, B));     //Min. value of RGB
-                               double max = Math.Max (R, Math.Max (G, B));     //Max. value of RGB
-                               double diff = max - min;                                                        //Delta RGB value
-
-                               if ( diff == 0 )//This is a grey, no chroma...
-                                       return 0;
-
-                               double h = 0.0, s = diff / max;
-
-                               double diffR = (((max - R) / 6.0) + (diff / 2.0)) / diff;
-                               double diffG = (((max - G) / 6.0) + (diff / 2.0)) / diff;
-                               double diffB = (((max - B) / 6.0) + (diff / 2.0)) / diff;
-
-                               if (R == max)
-                                       h = diffB - diffG;
-                               else if (G == max)
-                                       h = (1.0 / 3.0) + diffR - diffB;
-                               else if (B == max)
-                                       h = (2.0 / 3.0) + diffG - diffR;
-
-                               if (h < 0)
-                                       h += 1;
-                               if (h > 1)
-                                       h -= 1;
-
-                               return h;
-                       }
-               }
-               /// <summary>
-               /// compute the saturation of the color
-               /// </summary>
-               public double Saturation {
-                       get {
-                               return Math.Max (R, Math.Max (G, B));   //Max. value of RGB
-                       }
-               }
-               /// <summary>
-               /// compute the RGB intensity of the color
-               /// </summary>
-               /// <value>The value.</value>
-               public double Value {
-                       get {
-                               double min = Math.Min (R, Math.Min (G, B));     //Min. value of RGB
-                               double max = Math.Max (R, Math.Max (G, B));     //Max. value of RGB
-                               double diff = max - min;                                                        //Delta RGB value
-                               return diff == 0 ? 0 : diff / max;
-                       }
-               }
-               public string HtmlCode {
-                       get { 
-                               string tmp = "#" +
-                                       ((int)Math.Round (R * 255.0)).ToString ("X2") +
-                                       ((int)Math.Round (G * 255.0)).ToString ("X2") +
-                                       ((int)Math.Round (B * 255.0)).ToString ("X2");
-                               if (A < 1.0)
-                                       tmp += ((int)Math.Round(A * 255.0)).ToString ("X2");
-                               return tmp;
-                       }
-               }
-               public float[] floatArray
-               {
-                       get { return new float[]{ (float)R, (float)G, (float)B, (float)A }; }
-               }
-               /// <summary>
-               /// return a copy of the color with the alpha component modified
-               /// </summary>
-               /// <returns>new modified color</returns>
-               /// <param name="_A">normalized alpha component</param>
-               public Color AdjustAlpha(double _A)
-               {
-                       return new Color (this.R, this.G, this.B, _A);
-               }
-               public void ResetName(){
-                       Name = "";
-                       htmlCode = "";
-               }
-
-               #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");
-               public static readonly Color AliceBlue = new Color(240,248,255,"AliceBlue","#F0F8FF");
-               public static readonly Color AntiqueWhite = new Color(250,235,215,"AntiqueWhite","#FAEBD7");
-               public static readonly Color Aqua = new Color(0,255,255,"Aqua","#00FFFF");
-               public static readonly Color Aquamarine = new Color(127,255,212,"Aquamarine","#7FFFD4");
-               public static readonly Color Azure = new Color(240,255,255,"Azure","#F0FFFF");
-               public static readonly Color Beige = new Color(245,245,220,"Beige","#F5F5DC");
-               public static readonly Color Bisque = new Color(255,228,196,"Bisque","#FFE4C4");
-               public static readonly Color Black = new Color(0,0,0,"Black","#000000");
-               public static readonly Color BlanchedAlmond = new Color(255,235,205,"BlanchedAlmond","#FFEBCD");
-               public static readonly Color Blue = new Color(0,0,255,"Blue","#0000FF");
-               public static readonly Color BlueViolet = new Color(138,43,226,"BlueViolet","#8A2BE2");
-               public static readonly Color Brown = new Color(165,42,42,"Brown","#A52A2A");
-               public static readonly Color BurlyWood = new Color(222,184,135,"BurlyWood","#DEB887");
-               public static readonly Color CadetBlue = new Color(95,158,160,"CadetBlue","#5F9EA0");
-               public static readonly Color Chartreuse = new Color(127,255,0,"Chartreuse","#7FFF00");
-               public static readonly Color Chocolate = new Color(210,105,30,"Chocolate","#D2691E");
-               public static readonly Color Coral = new Color(255,127,80,"Coral","#FF7F50");
-               public static readonly Color CornflowerBlue = new Color(100,149,237,"CornflowerBlue","#6495ED");
-               public static readonly Color Cornsilk = new Color(255,248,220,"Cornsilk","#FFF8DC");
-               public static readonly Color Crimson = new Color(220,20,60,"Crimson","#DC143C");
-               public static readonly Color Cyan = new Color(0,255,255,"Cyan","#00FFFF");
-               public static readonly Color DarkBlue = new Color(0,0,139,"DarkBlue","#00008B");
-               public static readonly Color DarkCyan = new Color(0,139,139,"DarkCyan","#008B8B");
-               public static readonly Color DarkGoldenRod = new Color(184,134,11,"DarkGoldenRod","#B8860B");
-               public static readonly Color DarkGrey = new Color(169,169,169,"DarkGrey","#A9A9A9");
-               public static readonly Color DarkGreen = new Color(0,100,0,"DarkGreen","#006400");
-               public static readonly Color DarkKhaki = new Color(189,183,107,"DarkKhaki","#BDB76B");
-               public static readonly Color DarkMagenta = new Color(139,0,139,"DarkMagenta","#8B008B");
-               public static readonly Color DarkOliveGreen = new Color(85,107,47,"DarkOliveGreen","#556B2F");
-               public static readonly Color DarkOrange = new Color(255,140,0,"DarkOrange","#FF8C00");
-               public static readonly Color DarkOrchid = new Color(153,50,204,"DarkOrchid","#9932CC");
-               public static readonly Color DarkRed = new Color(139,0,0,"DarkRed","#8B0000");
-               public static readonly Color DarkSalmon = new Color(233,150,122,"DarkSalmon","#E9967A");
-               public static readonly Color DarkSeaGreen = new Color(143,188,143,"DarkSeaGreen","#8FBC8F");
-               public static readonly Color DarkSlateBlue = new Color(72,61,139,"DarkSlateBlue","#483D8B");
-               public static readonly Color DarkSlateGrey = new Color(47,79,79,"DarkSlateGrey","#2F4F4F");
-               public static readonly Color DarkTurquoise = new Color(0,206,209,"DarkTurquoise","#00CED1");
-               public static readonly Color DarkViolet = new Color(148,0,211,"DarkViolet","#9400D3");
-               public static readonly Color DeepPink = new Color(255,20,147,"DeepPink","#FF1493");
-               public static readonly Color DeepSkyBlue = new Color(0,191,255,"DeepSkyBlue","#00BFFF");
-               public static readonly Color DimGrey = new Color(105,105,105,"DimGrey","#696969");
-               public static readonly Color DodgerBlue = new Color(30,144,255,"DodgerBlue","#1E90FF");
-               public static readonly Color FireBrick = new Color(178,34,34,"FireBrick","#B22222");
-               public static readonly Color FloralWhite = new Color(255,250,240,"FloralWhite","#FFFAF0");
-               public static readonly Color ForestGreen = new Color(34,139,34,"ForestGreen","#228B22");
-               public static readonly Color Fuchsia = new Color(255,0,255,"Fuchsia","#FF00FF");
-               public static readonly Color Gainsboro = new Color(220,220,220,"Gainsboro","#DCDCDC");
-               public static readonly Color GhostWhite = new Color(248,248,255,"GhostWhite","#F8F8FF");
-               public static readonly Color Gold = new Color(255,215,0,"Gold","#FFD700");
-               public static readonly Color GoldenRod = new Color(218,165,32,"GoldenRod","#DAA520");
-               public static readonly Color Grey = new Color(128,128,128,"Grey","#808080");
-               public static readonly Color Green = new Color(0,128,0,"Green","#008000");
-               public static readonly Color GreenYellow = new Color(173,255,47,"GreenYellow","#ADFF2F");
-               public static readonly Color HoneyDew = new Color(240,255,240,"HoneyDew","#F0FFF0");
-               public static readonly Color HotPink = new Color(255,105,180,"HotPink","#FF69B4");
-               public static readonly Color IndianRed = new Color(205,92,92,"IndianRed","#CD5C5C");
-               public static readonly Color Indigo = new Color(75,0,130,"Indigo","#4B0082");
-               public static readonly Color Ivory = new Color(255,255,240,"Ivory","#FFFFF0");
-               public static readonly Color Jet = new Color(52,52,52,"Jet","#343434");
-               public static readonly Color Khaki = new Color(240,230,140,"Khaki","#F0E68C");
-               public static readonly Color Lavender = new Color(230,230,250,"Lavender","#E6E6FA");
-               public static readonly Color LavenderBlush = new Color(255,240,245,"LavenderBlush","#FFF0F5");
-               public static readonly Color LawnGreen = new Color(124,252,0,"LawnGreen","#7CFC00");
-               public static readonly Color LemonChiffon = new Color(255,250,205,"LemonChiffon","#FFFACD");
-               public static readonly Color LightBlue = new Color(173,216,230,"LightBlue","#ADD8E6");
-               public static readonly Color LightCoral = new Color(240,128,128,"LightCoral","#F08080");
-               public static readonly Color LightCyan = new Color(224,255,255,"LightCyan","#E0FFFF");
-               public static readonly Color LightGoldenRodYellow = new Color(250,250,210,"LightGoldenRodYellow","#FAFAD2");
-               public static readonly Color LightGrey = new Color(211,211,211,"LightGrey","#D3D3D3");
-               public static readonly Color LightGreen = new Color(144,238,144,"LightGreen","#90EE90");
-               public static readonly Color LightPink = new Color(255,182,193,"LightPink","#FFB6C1");
-               public static readonly Color LightSalmon = new Color(255,160,122,"LightSalmon","#FFA07A");
-               public static readonly Color LightSeaGreen = new Color(32,178,170,"LightSeaGreen","#20B2AA");
-               public static readonly Color LightSkyBlue = new Color(135,206,250,"LightSkyBlue","#87CEFA");
-               public static readonly Color LightSlateGrey = new Color(119,136,153,"LightSlateGrey","#778899");
-               public static readonly Color LightSteelBlue = new Color(176,196,222,"LightSteelBlue","#B0C4DE");
-               public static readonly Color LightYellow = new Color(255,255,224,"LightYellow","#FFFFE0");
-               public static readonly Color Lime = new Color(0,255,0,"Lime","#00FF00");
-               public static readonly Color LimeGreen = new Color(50,205,50,"LimeGreen","#32CD32");
-               public static readonly Color Linen = new Color(250,240,230,"Linen","#FAF0E6");
-               public static readonly Color Magenta = new Color(255,0,255,"Magenta","#FF00FF");
-               public static readonly Color Maroon = new Color(128,0,0,"Maroon","#800000");
-               public static readonly Color MediumAquaMarine = new Color(102,205,170,"MediumAquaMarine","#66CDAA");
-               public static readonly Color MediumBlue = new Color(0,0,205,"MediumBlue","#0000CD");
-               public static readonly Color MediumOrchid = new Color(186,85,211,"MediumOrchid","#BA55D3");
-               public static readonly Color MediumPurple = new Color(147,112,219,"MediumPurple","#9370DB");
-               public static readonly Color MediumSeaGreen = new Color(60,179,113,"MediumSeaGreen","#3CB371");
-               public static readonly Color MediumSlateBlue = new Color(123,104,238,"MediumSlateBlue","#7B68EE");
-               public static readonly Color MediumSpringGreen = new Color(0,250,154,"MediumSpringGreen","#00FA9A");
-               public static readonly Color MediumTurquoise = new Color(72,209,204,"MediumTurquoise","#48D1CC");
-               public static readonly Color MediumVioletRed = new Color(199,21,133,"MediumVioletRed","#C71585");
-               public static readonly Color MidnightBlue = new Color(25,25,112,"MidnightBlue","#191970");
-               public static readonly Color MintCream = new Color(245,255,250,"MintCream","#F5FFFA");
-               public static readonly Color MistyRose = new Color(255,228,225,"MistyRose","#FFE4E1");
-               public static readonly Color Moccasin = new Color(255,228,181,"Moccasin","#FFE4B5");
-               public static readonly Color NavajoWhite = new Color(255,222,173,"NavajoWhite","#FFDEAD");
-               public static readonly Color Navy = new Color(0,0,128,"Navy","#000080");
-               public static readonly Color OldLace = new Color(253,245,230,"OldLace","#FDF5E6");
-               public static readonly Color Olive = new Color(128,128,0,"Olive","#808000");
-               public static readonly Color OliveDrab = new Color(107,142,35,"OliveDrab","#6B8E23");
-               public static readonly Color Onyx = new Color(53,56,57,"Onyx","#353839");
-               public static readonly Color Orange = new Color(255,165,0,"Orange","#FFA500");
-               public static readonly Color OrangeRed = new Color(255,69,0,"OrangeRed","#FF4500");
-               public static readonly Color Orchid = new Color(218,112,214,"Orchid","#DA70D6");
-               public static readonly Color PaleGoldenRod = new Color(238,232,170,"PaleGoldenRod","#EEE8AA");
-               public static readonly Color PaleGreen = new Color(152,251,152,"PaleGreen","#98FB98");
-               public static readonly Color PaleTurquoise = new Color(175,238,238,"PaleTurquoise","#AFEEEE");
-               public static readonly Color PaleVioletRed = new Color(219,112,147,"PaleVioletRed","#DB7093");
-               public static readonly Color PapayaWhip = new Color(255,239,213,"PapayaWhip","#FFEFD5");
-               public static readonly Color PeachPuff = new Color(255,218,185,"PeachPuff","#FFDAB9");
-               public static readonly Color Peru = new Color(205,133,63,"Peru","#CD853F");
-               public static readonly Color Pink = new Color(255,192,203,"Pink","#FFC0CB");
-               public static readonly Color Plum = new Color(221,160,221,"Plum","#DDA0DD");
-               public static readonly Color PowderBlue = new Color(176,224,230,"PowderBlue","#B0E0E6");
-               public static readonly Color Purple = new Color(128,0,128,"Purple","#800080");
-               public static readonly Color RebeccaPurple = new Color(102,51,153,"RebeccaPurple","#663399");
-               public static readonly Color Red = new Color(255,0,0,"Red","#FF0000");
-               public static readonly Color RosyBrown = new Color(188,143,143,"RosyBrown","#BC8F8F");
-               public static readonly Color RoyalBlue = new Color(65,105,225,"RoyalBlue","#4169E1");
-               public static readonly Color SaddleBrown = new Color(139,69,19,"SaddleBrown","#8B4513");
-               public static readonly Color Salmon = new Color(250,128,114,"Salmon","#FA8072");
-               public static readonly Color SandyBrown = new Color(244,164,96,"SandyBrown","#F4A460");
-               public static readonly Color SeaGreen = new Color(46,139,87,"SeaGreen","#2E8B57");
-               public static readonly Color SeaShell = new Color(255,245,238,"SeaShell","#FFF5EE");
-               public static readonly Color Sienna = new Color(160,82,45,"Sienna","#A0522D");
-               public static readonly Color Silver = new Color(192,192,192,"Silver","#C0C0C0");
-               public static readonly Color SkyBlue = new Color(135,206,235,"SkyBlue","#87CEEB");
-               public static readonly Color SlateBlue = new Color(106,90,205,"SlateBlue","#6A5ACD");
-               public static readonly Color SlateGrey = new Color(112,128,144,"SlateGrey","#708090");
-               public static readonly Color Snow = new Color(255,250,250,"Snow","#FFFAFA");
-               public static readonly Color SpringGreen = new Color(0,255,127,"SpringGreen","#00FF7F");
-               public static readonly Color SteelBlue = new Color(70,130,180,"SteelBlue","#4682B4");
-               public static readonly Color Tan = new Color(210,180,140,"Tan","#D2B48C");
-               public static readonly Color Teal = new Color(0,128,128,"Teal","#008080");
-               public static readonly Color Thistle = new Color(216,191,216,"Thistle","#D8BFD8");
-               public static readonly Color Tomato = new Color(255,99,71,"Tomato","#FF6347");
-               public static readonly Color Turquoise = new Color(64,224,208,"Turquoise","#40E0D0");
-               public static readonly Color Violet = new Color(238,130,238,"Violet","#EE82EE");
-               public static readonly Color Wheat = new Color(245,222,179,"Wheat","#F5DEB3");
-               public static readonly Color White = new Color(255,255,255,"White","#FFFFFF");
-               public static readonly Color WhiteSmoke = new Color(245,245,245,"WhiteSmoke","#F5F5F5");
-               public static readonly Color Yellow = new Color(255,255,0,"Yellow","#FFFF00");
-               public static readonly Color YellowGreen = new Color(154,205,50,"YellowGreen","#9ACD32");
-
-               #endregion
-
-               public override int GetHashCode ()
-               {
-                       unchecked // Overflow is fine, just wrap
-                       {
-                               int hash = 17;
-                               // Suitable nullity checks etc, of course :)
-                               hash = hash * 23 + A.GetHashCode();
-                               hash = hash * 23 + R.GetHashCode();
-                               hash = hash * 23 + G.GetHashCode();
-                               hash = hash * 23 + B.GetHashCode();
-                               return hash;
-                       }
-               }
-               public override bool Equals (object obj)
-               {
-                       return (obj == null || obj.GetType() != TColor) ?
-                               false :
-                               this == (Color)obj;
-               }
-               public override string ToString()
-               {
-                       if (!string.IsNullOrEmpty(Name))
-                               return Name;
-                       if (!string.IsNullOrEmpty (htmlCode))
-                               return htmlCode;
-                       string hc = HtmlCode;
-                       Color pc = ColorDic.Values.FirstOrDefault (c => c.htmlCode == hc);
-                       return pc.predefinied ? pc.Name : hc;
-               }
-
-        public static object Parse(string s)
-        {
-            return (Color)s;
-        }
-               public static Color FromHSV(double _h, double _v = 1.0, double _s = 1.0, double _alpha = 1.0){
-                       Color c = Color.Black;
-                       c.ResetName ();
-                       c.A = _alpha;
-                       if (_s == 0) {//HSV from 0 to 1
-                               c.R = _v;
-                               c.G = _v;
-                               c.B = _v;
-                       }else{
-                               double var_h = _h * 6.0;
-
-                               if (var_h == 6.0)
-                                       var_h = 0;      //H must be < 1
-                               double var_i = Math.Floor( var_h );     //Or ... var_i = floor( var_h )
-                               double var_1 = _v * ( 1.0 - _s );
-                               double var_2 = _v * (1.0 - _s * (var_h - var_i));
-                               double var_3 = _v * (1.0 - _s * (1.0 - (var_h - var_i)));
-
-                               if (var_i == 0.0) {
-                                       c.R = _v;
-                                       c.G = var_3;
-                                       c.B = var_1;
-                               }else if ( var_i == 1.0 ) { c.R = var_2 ; c.G = _v     ; c.B = var_1; }
-                               else if ( var_i == 2 ) { c.R = var_1 ; c.G = _v     ; c.B = var_3; }
-                               else if ( var_i == 3 ) { c.R = var_1 ; c.G = var_2 ; c.B = _v;     }
-                               else if ( var_i == 4 ) { c.R = var_3 ; c.G = var_1 ; c.B = _v;    }
-                               else                   { c.R = _v     ; c.G = var_1 ; c.B = var_2; }
-                       }
-                       return c;
-               }
-    }
-}
diff --git a/src/Command.cs b/src/Command.cs
deleted file mode 100644 (file)
index 5d5f85e..0000000
+++ /dev/null
@@ -1,120 +0,0 @@
-//
-// Command.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-using System.Xml.Serialization;
-using System.ComponentModel;
-
-namespace Crow
-{
-       /// <summary>
-       /// helper class to bind in one step icon, caption, action, and validity tests to a controls 
-       /// </summary>
-       public class Command : IValueChange
-       {
-               #region IValueChange implementation
-               public event EventHandler<ValueChangeEventArgs> ValueChanged;
-               public virtual void NotifyValueChanged(string MemberName, object _value)
-               {
-                       ValueChanged.Raise(this, new ValueChangeEventArgs(MemberName, _value));
-               }
-               #endregion
-
-               #region CTOR
-               /// <summary>
-               /// Initializes a new instance of Command with the action pass as argument.
-               /// </summary>
-               /// <param name="_executeAction">action to excecute when command is triggered</param>
-               public Command (Action _executeAction)
-               {
-                       execute = _executeAction;
-               }
-               #endregion
-
-               Action execute;
-
-               string caption;
-               Picture icon;
-               bool canExecute = true;
-
-               #region Public properties
-               /// <summary>
-               /// if true, action defined in this command may be executed,
-               /// </summary>
-               [DefaultValue(true)]
-               public virtual bool CanExecute {
-                       get { return canExecute; }
-                       set {
-                               if (canExecute == value)
-                                       return;
-                               canExecute = value;
-                               NotifyValueChanged ("CanExecute", canExecute);
-                       }
-               }
-               /// <summary>
-               /// label to display in the bound control
-               /// </summary>
-               [DefaultValue("Unamed Command")]
-               public virtual string Caption {
-                       get { return caption; }
-                       set {
-                               if (caption == value)
-                                       return;
-                               caption = value;
-                               NotifyValueChanged ("Caption", caption);
-
-                       }
-               }
-               /// <summary>
-               /// Icon to display in the bound control
-               /// </summary>
-               
-               public Picture Icon {
-                       get { return icon; }
-                       set {
-                               if (icon == value)
-                                       return;
-                               icon = value;
-                               NotifyValueChanged ("Icon", icon);
-                       }
-               }
-               #endregion
-
-               /// <summary>
-               /// trigger the execution of the command
-               /// </summary>
-               public void Execute(){
-                       if (execute != null && CanExecute)
-                               execute ();
-               }
-               internal void raiseAllValuesChanged(){
-                       NotifyValueChanged ("CanExecute", canExecute);
-                       NotifyValueChanged ("Icon", icon);
-                       NotifyValueChanged ("Caption", caption);
-               }
-
-       }
-}
diff --git a/src/CompilerServices/CompilerServices.cs b/src/CompilerServices/CompilerServices.cs
deleted file mode 100644 (file)
index 5112fb1..0000000
+++ /dev/null
@@ -1,931 +0,0 @@
-//
-// CompilerServices.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-using System.Reflection.Emit;
-using System.Reflection;
-using System.Diagnostics;
-using System.Linq;
-using System.Collections.Generic;
-using System.Runtime.CompilerServices;
-using System.Xml;
-using Crow.IML;
-
-
-namespace Crow.IML
-{
-       public static class CompilerServices
-       {
-               internal static Type TObject = typeof(object);
-               internal static MethodInfo stringEquals = typeof (string).GetMethod("Equals", new Type [3] { typeof (string), typeof (string), typeof (StringComparison) });
-               internal static MethodInfo miObjToString = typeof(object).GetMethod("ToString");
-               internal static MethodInfo miGetType = typeof(object).GetMethod("GetType");
-               internal static MethodInfo miParseEnum = typeof(Enum).GetMethod("Parse", BindingFlags.Static | BindingFlags.Public,
-                       Type.DefaultBinder, new Type [] {typeof (Type), typeof (string), typeof (bool)}, null);
-
-               internal static MethodInfo miGetTypeFromHandle = typeof(Type).GetMethod("GetTypeFromHandle");
-               internal static MethodInfo miGetEvent = typeof(Type).GetMethod("GetEvent", new Type[] {typeof(string)});
-
-               internal static MethodInfo miMIInvoke = typeof(MethodInfo).GetMethod ("Invoke", new Type[] {
-                       typeof(object),
-                       typeof(object[])
-               });
-
-               internal static MethodInfo miCreateBoundDel = typeof(Delegate).GetMethod ("CreateDelegate", new Type[] { typeof(Type), typeof(object), typeof(MethodInfo) });//create bound delegate
-               internal static MethodInfo miGetColCount = typeof(System.Collections.ICollection).GetProperty("Count").GetGetMethod();
-               internal static MethodInfo miGetDelegateListItem = typeof(List<Delegate>).GetMethod("get_Item", new Type[] { typeof(Int32) });
-
-               internal static MethodInfo miCompileDynEventHandler = typeof(CompilerServices).GetMethod ("compileDynEventHandler", BindingFlags.Static | BindingFlags.NonPublic);
-               internal static MethodInfo miRemEvtHdlByName = typeof(CompilerServices).GetMethod("removeEventHandlerByName", BindingFlags.Static | BindingFlags.NonPublic);
-               internal static MethodInfo miRemEvtHdlByTarget = typeof(CompilerServices).GetMethod("removeEventHandlerByTarget", BindingFlags.Static | BindingFlags.NonPublic);
-               internal static MethodInfo miGetMethInfoWithRefx = typeof(CompilerServices).GetMethod ("getMethodInfoWithReflexion", BindingFlags.Static | BindingFlags.NonPublic);
-               internal static MethodInfo miGetMembIinfoWithRefx = typeof(CompilerServices).GetMethod("getMemberInfoWithReflexion", BindingFlags.Static | BindingFlags.NonPublic);
-               internal static MethodInfo miSetValWithRefx = typeof(CompilerServices).GetMethod("setValueWithReflexion", BindingFlags.Static | BindingFlags.NonPublic);
-               internal static MethodInfo miGetValWithRefx = typeof(CompilerServices).GetMethod("getValueWithReflexion", BindingFlags.Static | BindingFlags.NonPublic);
-               internal static MethodInfo miCreateDel = typeof(CompilerServices).GetMethod ("createDel", BindingFlags.Static | BindingFlags.NonPublic);
-               internal static MethodInfo miGetImplOp = typeof(CompilerServices).GetMethod ("getImplicitOp", BindingFlags.Static | BindingFlags.NonPublic);
-               internal static MethodInfo miGetDataTypeAndFetch = typeof(CompilerServices).GetMethod("getDataTypeAndFetch", BindingFlags.Static | BindingFlags.NonPublic);
-
-
-               internal static MethodInfo miGoUpLevels = typeof(CompilerServices).GetMethod("goUpNbLevels", BindingFlags.Static | BindingFlags.NonPublic);
-
-               internal static FieldInfo fiCachedDel = typeof(Instantiator).GetField("cachedDelegates", BindingFlags.Instance | BindingFlags.NonPublic);
-               internal static FieldInfo fiTemplateBinding = typeof(Instantiator).GetField("templateBinding", BindingFlags.Instance | BindingFlags.NonPublic);
-               internal static MethodInfo miDSChangeEmitHelper = typeof(Instantiator).GetMethod("dataSourceChangedEmitHelper", BindingFlags.Instance | BindingFlags.NonPublic);
-               internal static MethodInfo miDSReverseBinding = typeof(Instantiator).GetMethod("dataSourceReverseBinding", BindingFlags.Static | BindingFlags.NonPublic);
-
-               internal static FieldInfo miSetCurIface = typeof(GraphicObject).GetField ("IFace", BindingFlags.Public | BindingFlags.Instance);
-               internal static MethodInfo miFindByName = typeof (GraphicObject).GetMethod ("FindByName");
-               internal static MethodInfo miGetGObjItem = typeof(List<GraphicObject>).GetMethod("get_Item", new Type[] { typeof(Int32) });
-               internal static MethodInfo miLoadDefaultVals = typeof (GraphicObject).GetMethod ("loadDefaultValues");
-               internal static PropertyInfo piStyle = typeof (GraphicObject).GetProperty ("Style");
-               internal static MethodInfo miGetLogicalParent = typeof(GraphicObject).GetProperty("LogicalParent").GetGetMethod();
-               internal static MethodInfo miGetDataSource = typeof(GraphicObject).GetProperty("DataSource").GetGetMethod ();
-               internal static EventInfo eiLogicalParentChanged = typeof(GraphicObject).GetEvent("LogicalParentChanged");
-
-               internal static MethodInfo miIFaceLoad = typeof(Interface).GetMethod ("Load", BindingFlags.Instance | BindingFlags.Public);
-               internal static MethodInfo miGetITemp = typeof(Interface).GetMethod ("GetItemTemplate", BindingFlags.Instance | BindingFlags.Public);
-
-               internal static MethodInfo miAddITemp = typeof(Dictionary<string, ItemTemplate>).GetMethod ("set_Item", new Type[] { typeof(string), typeof(ItemTemplate) });
-               internal static MethodInfo miGetITempFromDic = typeof(Dictionary<string, ItemTemplate>).GetMethod ("get_Item", new Type[] { typeof(string) });
-               internal static FieldInfo fldItemTemplates = typeof(TemplatedGroup).GetField("ItemTemplates");
-               internal static MethodInfo miLoadPage = typeof(TemplatedGroup).GetMethod ("loadPage", BindingFlags.Instance | BindingFlags.NonPublic| BindingFlags.Public);
-               internal static MethodInfo miIsAlreadyExpanded = typeof(TemplatedGroup).GetMethod("emitHelperIsAlreadyExpanded", BindingFlags.Instance | BindingFlags.NonPublic);
-               
-               internal static MethodInfo miCreateExpDel = typeof(ItemTemplate).GetMethod ("CreateExpandDelegate");
-               internal static FieldInfo fiFetchMethodName = typeof(ItemTemplate).GetField("fetchMethodName", BindingFlags.Instance | BindingFlags.NonPublic);
-
-               #if DESIGN_MODE
-               internal static MethodInfo miDicStrStrAdd = typeof(Dictionary<string, string>).GetMethod ("set_Item", new Type[] { typeof(string), typeof(string) });
-               #endif
-
-               #region tree handling methods
-               internal static FieldInfo fiChild = typeof(PrivateContainer).GetField ("child", BindingFlags.Instance | BindingFlags.NonPublic);
-               internal static MethodInfo miSetChild = typeof (Container).GetMethod ("SetChild");
-               internal static MethodInfo miAddChild = typeof (Group).GetMethod ("AddChild");
-               internal static FieldInfo fiChildren = typeof(Group).GetField ("children", BindingFlags.Instance | BindingFlags.NonPublic);
-               internal static MethodInfo miLoadTmp = typeof (TemplatedControl).GetMethod ("loadTemplate", BindingFlags.Instance | BindingFlags.NonPublic);
-               internal static PropertyInfo piContent = typeof(TemplatedContainer).GetProperty ("Content");
-               internal static MethodInfo miAddItem = typeof (TemplatedGroup).GetMethod ("AddItem", BindingFlags.Instance | BindingFlags.Public);
-               internal static MethodInfo miGetItems = typeof(TemplatedGroup).GetProperty ("Items").GetGetMethod ();
-               #endregion
-
-               #region ValueChange & DSChange Reflexion member info
-               internal static EventInfo eiValueChange = typeof (IValueChange).GetEvent ("ValueChanged");
-               internal static MethodInfo miInvokeValueChange = eiValueChange.EventHandlerType.GetMethod ("Invoke");
-               internal static Type [] argsBoundValueChange = { typeof (object), typeof (object), miInvokeValueChange.GetParameters () [1].ParameterType };
-               internal static Type [] argsValueChange = { typeof (object), miInvokeValueChange.GetParameters () [1].ParameterType };
-               internal static FieldInfo fiVCNewValue = typeof (ValueChangeEventArgs).GetField ("NewValue");
-               internal static FieldInfo fiVCMbName = typeof (ValueChangeEventArgs).GetField ("MemberName");
-               internal static MethodInfo miValueChangeAdd = eiValueChange.GetAddMethod ();
-
-               internal static EventInfo eiDSChange = typeof (GraphicObject).GetEvent ("DataSourceChanged");
-               internal static MethodInfo miInvokeDSChange = eiDSChange.EventHandlerType.GetMethod ("Invoke");
-               internal static Type [] argsBoundDSChange = {typeof (object), typeof (object), miInvokeDSChange.GetParameters () [1].ParameterType };
-               internal static FieldInfo fiDSCNewDS = typeof (DataSourceChangeEventArgs).GetField ("NewDataSource");
-               internal static FieldInfo fiDSCOldDS = typeof (DataSourceChangeEventArgs).GetField ("OldDataSource");
-               internal static Type ehTypeDSChange = eiDSChange.EventHandlerType;
-               #endregion
-
-               /// <summary>
-               /// Loc0 is the current graphic object and arg2 of loader is the current interface
-               /// </summary>
-               /// <param name="il">Il.</param>
-               public static void emitSetCurInterface(ILGenerator il){
-                       il.Emit (OpCodes.Ldloc_0);
-                       il.Emit (OpCodes.Ldarg_1);
-                       il.Emit (OpCodes.Stfld, miSetCurIface);
-               }
-
-               public static void EmitSetValue(ILGenerator il, PropertyInfo pi, object val){
-                       il.Emit (OpCodes.Ldloc_0);
-
-                       if (val == null) {
-                               il.Emit (OpCodes.Ldnull);
-                               il.Emit (OpCodes.Callvirt, pi.GetSetMethod ());
-                               return;
-                       }
-                       Type dvType = val.GetType ();
-
-            if (dvType.IsValueType) {
-                               if (pi.PropertyType.IsValueType) {
-                    if (pi.PropertyType.IsEnum) {
-                                               if (pi.PropertyType != dvType)
-                                                       throw new Exception ("Enum mismatch in default values: " + pi.PropertyType.FullName);
-                                               il.Emit (OpCodes.Ldc_I4, Convert.ToInt32 (val));
-                                       } else {
-                                               switch (Type.GetTypeCode (dvType)) {
-                                               case TypeCode.Boolean:
-                                                       if ((bool)val == true)
-                                                               il.Emit (OpCodes.Ldc_I4_1);
-                                                       else
-                                                               il.Emit (OpCodes.Ldc_I4_0);
-                                                       break;
-//                                             case TypeCode.Empty:
-//                                                     break;
-//                                             case TypeCode.Object:
-//                                                     break;
-//                                             case TypeCode.DBNull:
-//                                                     break;
-//                                             case TypeCode.SByte:
-//                                                     break;
-//                                             case TypeCode.Decimal:
-//                                                     break;
-//                                             case TypeCode.DateTime:
-//                                                     break;
-                                               case TypeCode.Char:
-                                                       il.Emit (OpCodes.Ldc_I4, Convert.ToChar (val));
-                                                       break;
-                                               case TypeCode.Byte:
-                                               case TypeCode.Int16:
-                                               case TypeCode.Int32:
-                                                       il.Emit (OpCodes.Ldc_I4, Convert.ToInt32 (val));
-                                                       break;
-                                               case TypeCode.UInt16:
-                                               case TypeCode.UInt32:
-                                                       il.Emit (OpCodes.Ldc_I4, Convert.ToUInt32 (val));
-                                                       break;
-                                               case TypeCode.Int64:
-                                                       il.Emit (OpCodes.Ldc_I8, Convert.ToInt64 (val));
-                                                       break;
-                                               case TypeCode.UInt64:
-                                                       il.Emit (OpCodes.Ldc_I8, Convert.ToUInt64 (val));
-                                                       break;
-                                               case TypeCode.Single:
-                                                       il.Emit (OpCodes.Ldc_R4, Convert.ToSingle (val));
-                                                       break;
-                                               case TypeCode.Double:
-                                                       il.Emit (OpCodes.Ldc_R8, Convert.ToDouble (val));
-                                                       break;
-                                               case TypeCode.String:
-                                                       il.Emit (OpCodes.Ldstr, Convert.ToString (val));
-                                                       break;
-                                               default:
-                                                       il.Emit (OpCodes.Pop);
-                                                       return;
-                                               }
-                                       }
-                               } else
-                                       throw new Exception ("Expecting valuetype in default values for: " + pi.Name);
-                       }else{
-                               //surely a class or struct
-                               if (dvType != typeof(string))
-                                       throw new Exception ("Expecting String in default values for: " + pi.Name);
-                               if (pi.PropertyType == typeof(string))
-                                       il.Emit (OpCodes.Ldstr, Convert.ToString (val));
-                               else if (pi.PropertyType.IsEnum) {
-                                       //load type of enum
-                                       il.Emit(OpCodes.Ldtoken, pi.PropertyType);
-                                       il.Emit(OpCodes.Call, CompilerServices.miGetTypeFromHandle);
-                                       //load enum value name
-                                       il.Emit (OpCodes.Ldstr, Convert.ToString (val));//TODO:implement here string format?
-                                       //load false
-                                       il.Emit (OpCodes.Ldc_I4_0);
-                                       il.Emit (OpCodes.Call, CompilerServices.miParseEnum);
-
-                                       if (CompilerServices.miParseEnum.ReturnType != pi.PropertyType)
-                                               il.Emit (OpCodes.Unbox_Any, pi.PropertyType);
-                               } else {
-                                       MethodInfo miParse = pi.PropertyType.GetMethod
-                                               ("Parse", BindingFlags.Static | BindingFlags.Public,
-                                                       Type.DefaultBinder, new Type [] {typeof (string)},null);
-                                       if (miParse == null)
-                                               throw new Exception ("no Parse method found for: " + pi.PropertyType.FullName);
-
-                                       il.Emit (OpCodes.Ldstr, Convert.ToString (val));//TODO:is this convert required?
-                                       il.Emit (OpCodes.Call, miParse);
-
-                                       if (miParse.ReturnType != pi.PropertyType)
-                                               il.Emit (OpCodes.Unbox_Any, pi.PropertyType);
-                               }
-                       }
-            il.Emit (OpCodes.Callvirt, pi.GetSetMethod ());
-               }
-
-               #region conversions
-
-               internal static MethodInfo GetConvertMethod (Type targetType)
-               {
-                       string name;
-
-                       if (targetType == typeof (bool))
-                               name = "ToBoolean";
-                       else if (targetType == typeof (byte))
-                               name = "ToByte";
-                       else if (targetType == typeof (short))
-                               name = "ToInt16";
-                       else if (targetType == typeof (int))
-                               name = "ToInt32";
-                       else if (targetType == typeof (long))
-                               name = "ToInt64";
-                       else if (targetType == typeof (double))
-                               name = "ToDouble";
-                       else if (targetType == typeof (float))
-                               name = "ToSingle";
-                       else if (targetType == typeof (string))
-                               return typeof (object).GetMethod ("ToString", Type.EmptyTypes);
-                       else //try to find implicit convertion
-                               throw new NotImplementedException (string.Format ("Conversion to {0} is not implemented.", targetType.Name));
-
-                       return typeof (Convert).GetMethod (name, BindingFlags.Static | BindingFlags.Public, null, new Type [] { typeof (object) }, null);
-               }
-               #endregion
-
-               #region Reflexion helpers
-               static MemberInfo getMemberInfoWithReflexion(object instance, string member){
-                       Type t = instance.GetType();
-                       MemberInfo mi = t.GetMember (member)?.FirstOrDefault();
-                       if (mi == null)
-                               mi = CompilerServices.SearchExtMethod (t, member);
-                       return mi;
-               }
-               static MethodInfo getMethodInfoWithReflexion(object instance, string method){
-                       return instance.GetType ().GetMethod (method, BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);
-               }
-               /// <summary>
-               /// set value, convert if required
-               /// </summary>
-               /// <param name="dest">Destination instance</param>
-               /// <param name="value">Value</param>
-               /// <param name="destMember">Destination member</param>
-               static void setValueWithReflexion(object dest, object value, string destMember){
-                       Type destType = null;
-                       Type origType = null;
-                       object convertedVal = null;
-
-                       MemberInfo miDest = getMemberInfoWithReflexion (dest, destMember);
-
-                       if (miDest == null) {
-                               Debug.WriteLine ("Reverse template binding error: " + destMember + " not found in " + dest);
-                               return;
-                       }
-
-                       if (miDest.MemberType == MemberTypes.Property)
-                               destType =(miDest as PropertyInfo).PropertyType;
-                       else if (miDest.MemberType == MemberTypes.Field)
-                               destType =(miDest as FieldInfo).FieldType;
-
-                       try {
-                               if (value != null) {
-                                       if (destType == TObject)//TODO: check that test of destType is not causing problems
-                                               convertedVal = value;
-                                       else {
-                                               origType = value.GetType ();
-                                               if (destType.IsAssignableFrom (origType))
-                                                       convertedVal = Convert.ChangeType (value, destType);
-                                               else if (origType == typeof(string) & destType.IsPrimitive)
-                                                       convertedVal = Convert.ChangeType(value, destType);
-                                               else if (origType.IsPrimitive & destType.IsPrimitive)
-                                                       convertedVal = GetConvertMethod (destType).Invoke (null, new Object[] { value });
-                                               else
-                                                       convertedVal = getImplicitOp (origType, destType).Invoke (value, null);
-                                       }
-                               }
-                       } catch (Exception ex) {
-                               Debug.WriteLine (ex.ToString ());
-                               return;
-                       }
-
-                       if (miDest.MemberType == MemberTypes.Property)
-                               (miDest as PropertyInfo).SetValue (dest, convertedVal);
-                       else if (miDest.MemberType == MemberTypes.Field)
-                               (miDest as FieldInfo).SetValue (dest, convertedVal);
-               }
-               /// <summary>
-               /// Gets value with reflexion, return empty string ("") for string and object and return
-               /// default value for valueType data.
-               /// </summary>
-               static object getValueWithReflexion(object instance, MemberInfo mi){
-                       object tmp = null;
-                       Type dstType = null;
-                       if (mi == null)
-                               return null;
-                       try {
-                               if (mi.MemberType == MemberTypes.Property) {
-                                       PropertyInfo pi = mi as PropertyInfo;
-                                       tmp = pi.GetValue (instance);
-                                       dstType = pi.PropertyType;
-                               }else if (mi.MemberType == MemberTypes.Field) {
-                                       FieldInfo fi = mi as FieldInfo;
-                                       tmp = fi.GetValue (instance);
-                                       dstType = fi.FieldType;
-                               }else if (mi.MemberType == MemberTypes.Method) {
-                                       MethodInfo gi = mi as MethodInfo;
-                                       if (gi.IsStatic)
-                                               tmp = gi.Invoke(null, new object[] {instance});
-                                       else
-                                               tmp = gi.Invoke(instance, null);
-                                       dstType = gi.ReturnType;
-                               }
-
-
-                               if (tmp != null)
-                                       return tmp;
-                               if (dstType == typeof(string) || dstType == CompilerServices.TObject)//TODO:object should be allowed to return null and not ""
-                                       return "";
-                               if (dstType.IsValueType)
-                                       return Activator.CreateInstance (dstType);                              
-                       } catch (Exception ex) {
-                               Debug.WriteLine (ex.ToString ());
-                               return "";
-                       }
-
-                       return null;
-               }
-               /// <summary>
-               /// Gets all extension methods defined in assembly for Type
-               /// </summary>
-               /// <returns>Extension methods enumerable</returns>
-               /// <param name="assembly">Assembly</param>
-               /// <param name="extendedType">Extended type to search for</param>
-               internal static IEnumerable<MethodInfo> GetExtensionMethods (Assembly assembly,
-                       Type extendedType)
-               {
-                       IEnumerable<MethodInfo> query = null;
-                       Type curType = extendedType;
-
-                       do {
-                               query = from type in assembly.GetTypes ()
-                                               where type.IsSealed && !type.IsGenericType && !type.IsNested
-                                       from method in type.GetMethods (BindingFlags.Static
-                                               | BindingFlags.Public | BindingFlags.NonPublic)
-                                               where method.IsDefined (typeof (ExtensionAttribute), false)
-                                               where method.GetParameters () [0].ParameterType == curType
-                                       select method;
-
-                               if (query.Count () > 0)
-                                       break;
-
-                               curType = curType.BaseType;
-                       } while (curType != null);
-
-                       return query;
-               }
-               /// <summary>
-               /// search for extentions method in entry assembly then in crow assembly
-               /// </summary>
-               /// <returns>Extention MethodInfo</returns>
-               /// <param name="t">Extended type</param>
-               /// <param name="methodName">Extention method name</param>
-               internal static MethodInfo SearchExtMethod(Type t, string methodName){
-                       MethodInfo mi = null;
-                       mi = GetExtensionMethods (Assembly.GetEntryAssembly(), t)
-                               .Where (em => em.Name == methodName).FirstOrDefault ();
-                       if (mi != null)
-                               return mi;
-
-                       return GetExtensionMethods (Assembly.GetExecutingAssembly(), t)
-                               .Where (em => em.Name == methodName).FirstOrDefault ();
-               }
-               /// <summary>
-               /// retrieve event handler in class or ancestors
-               /// </summary>
-               static FieldInfo getEventHandlerField (Type type, string eventName)
-               {
-                       FieldInfo fi;
-                       Type ty = type;
-                       do {
-                               fi = ty.GetField (eventName,
-                                       BindingFlags.NonPublic |
-                                       BindingFlags.Instance |
-                                       BindingFlags.GetField);
-                               ty = ty.BaseType;
-                               if (ty == null)
-                                       break;
-                       } while (fi == null);
-                       return fi;
-               }
-               /// <summary>
-               /// search for an implicit conversion method in origine or destination classes
-               /// </summary>
-               static MethodInfo getImplicitOp(Type origType, Type dstType){
-                       foreach(MethodInfo mi in origType.GetMethods(BindingFlags.Public|BindingFlags.Static)){
-                               if (mi.Name == "op_Implicit") {
-                                       if (mi.ReturnType == dstType && mi.GetParameters ().FirstOrDefault ().ParameterType == origType)
-                                               return mi;
-                               }
-                       }
-                       foreach(MethodInfo mi in dstType.GetMethods(BindingFlags.Public|BindingFlags.Static)){
-                               if (mi.Name == "op_Implicit") {
-                                       if (mi.ReturnType == dstType && mi.GetParameters ().FirstOrDefault ().ParameterType == origType)
-                                               return mi;
-                               }
-                       }
-                       return null;
-               }
-               #endregion
-
-               /// <summary>
-               /// Emits tree parsing command to fetch dest instance starting from orig node
-               /// </summary>
-               internal static void emitGetInstance (ILGenerator il, NodeAddress orig, NodeAddress dest){
-                       int ptr = 0;
-                       while (orig [ptr] == dest [ptr]) {
-                               ptr++;
-                               if (ptr == orig.Count || ptr == dest.Count)
-                                       break;
-                       }
-                       for (int i = 0; i < orig.Count - ptr; i++)
-                               il.Emit (OpCodes.Callvirt, CompilerServices.miGetLogicalParent);
-                       while (ptr < dest.Count) {
-                               emitGetChild (il, dest [ptr-1].CrowType, dest [ptr].Index);
-                               ptr++;
-                       }
-               }
-               /// <summary>
-               /// Emits tree parsing commands to get child starting at root node
-               /// </summary>
-               /// <param name="il">MSIL generator</param>
-               /// <param name="dest">Absolute Node Address of the instance to get</param>
-               internal static void emitGetInstance (ILGenerator il, NodeAddress dest){
-                       if (dest == null)
-                               return;
-                       for (int i = 0; i < dest.Count - 1; i++)
-                               emitGetChild (il, dest [i].CrowType, dest [i + 1].Index);
-               }
-               /// <summary>
-               /// Emits msil to fetch chil instance of current GraphicObject on the stack
-               /// </summary>
-               /// <param name="il">Il generator</param>
-               /// <param name="parentType">Parent type</param>
-               /// <param name="index">Index of child, -1 for template root</param>
-               internal static void emitGetChild(ILGenerator il, Type parentType, int index){
-                       if (typeof (Group).IsAssignableFrom (parentType)) {
-                               il.Emit (OpCodes.Ldfld, fiChildren);
-                               il.Emit(OpCodes.Ldc_I4, index);
-                               il.Emit (OpCodes.Callvirt, miGetGObjItem);
-                               return;
-                       }
-                       if (typeof(Container).IsAssignableFrom (parentType) || index < 0) {
-                               il.Emit (OpCodes.Ldfld, fiChild);
-                               return;
-                       }
-                       if (typeof(TemplatedContainer).IsAssignableFrom (parentType)) {
-                               il.Emit (OpCodes.Callvirt, piContent.GetGetMethod());
-                               return;
-                       }
-                       if (typeof(TemplatedGroup).IsAssignableFrom (parentType)) {
-                               il.Emit (OpCodes.Callvirt, miGetItems);
-                               il.Emit(OpCodes.Ldc_I4, index);
-                               il.Emit (OpCodes.Callvirt, miGetGObjItem);
-                               return;
-                       }
-               }
-
-               /// <summary>
-               /// Emit MSIL for conversion from orig type to dest type
-               /// </summary>
-               internal static void emitConvert(ILGenerator il, Type origType, Type destType){
-                       if (destType == CompilerServices.TObject)
-                               return;
-                       if (destType == typeof(string)) {
-                               System.Reflection.Emit.Label emitNullStr = il.DefineLabel ();
-                               System.Reflection.Emit.Label endConvert = il.DefineLabel ();
-                               il.Emit (OpCodes.Dup);
-                               il.Emit (OpCodes.Brfalse, emitNullStr);
-                               il.Emit (OpCodes.Callvirt, CompilerServices.miObjToString);
-                               il.Emit (OpCodes.Br, endConvert);
-                               il.MarkLabel (emitNullStr);
-                               il.Emit (OpCodes.Pop);//remove null string from stack
-                               il.Emit (OpCodes.Ldstr, "");//replace with empty string
-                               il.MarkLabel (endConvert);
-                       }else if (origType.IsValueType) {
-                               if (destType != origType) {
-                                       MethodInfo miIO = getImplicitOp (origType, destType);
-                    if (miIO != null)
-                    {
-                        System.Reflection.Emit.Label emitCreateDefault = il.DefineLabel();
-                        System.Reflection.Emit.Label emitContinue = il.DefineLabel();
-                        LocalBuilder lbStruct = il.DeclareLocal(origType);
-                        il.Emit(OpCodes.Dup);
-                        il.Emit(OpCodes.Brfalse, emitCreateDefault);
-                        il.Emit(OpCodes.Unbox_Any, origType);
-                        il.Emit(OpCodes.Br, emitContinue);
-                        il.MarkLabel(emitCreateDefault);
-                        il.Emit(OpCodes.Pop);//pop null value
-                        il.Emit(OpCodes.Ldloca, lbStruct);
-                        il.Emit(OpCodes.Initobj, origType);
-                        il.Emit(OpCodes.Ldloc, lbStruct);
-                        il.MarkLabel(emitContinue);
-                        il.Emit(OpCodes.Call, miIO);
-                    }
-                    else
-                    {
-                        MethodInfo miconv = CompilerServices.GetConvertMethod(destType);
-                        if (miconv.IsStatic)
-                            il.Emit(OpCodes.Call, miconv);
-                        else
-                            il.Emit(OpCodes.Callvirt, miconv);
-                    }
-                               }else
-                                       il.Emit (OpCodes.Unbox_Any, destType);//TODO:double check this
-                       } else {
-                               if (destType.IsAssignableFrom(origType))
-                                       il.Emit (OpCodes.Castclass, destType);
-                               else {
-                                       //implicit conversion can't be defined from or to object base class,
-                                       //so we will check if object underlying type is one of the implicit converter of destType
-                                       if (origType == TObject) {//test all implicit converter to destType on obj
-                                               System.Reflection.Emit.Label emitTestNextImpOp;
-                                               System.Reflection.Emit.Label emitImpOpFound = il.DefineLabel ();
-                                               foreach (MethodInfo mi in destType.GetMethods(BindingFlags.Public|BindingFlags.Static)) {
-                                                       if (mi.Name == "op_Implicit") {
-                                                               if (mi.GetParameters () [0].ParameterType == destType)
-                                                                       continue;
-                                                               emitTestNextImpOp = il.DefineLabel ();
-                                                               il.Emit (OpCodes.Dup);
-                                                               il.Emit (OpCodes.Isinst, mi.GetParameters () [0].ParameterType);
-                                                               il.Emit (OpCodes.Brfalse, emitTestNextImpOp);
-                                                               if (mi.GetParameters () [0].ParameterType.IsValueType)
-                                                                       il.Emit (OpCodes.Unbox_Any, mi.GetParameters () [0].ParameterType);
-                                                               else
-                                                                       il.Emit (OpCodes.Isinst, mi.GetParameters () [0].ParameterType);
-
-                                                               il.Emit (OpCodes.Call, mi);
-                                                               il.Emit (OpCodes.Br, emitImpOpFound);
-
-                                                               il.MarkLabel (emitTestNextImpOp);
-                                                       }
-                                               }
-                                               //il.Emit (OpCodes.Br, emitImpOpNotFound);
-                                               il.MarkLabel (emitImpOpFound);
-                                       } else {//search both orig and dest types for implicit operators
-                                               MethodInfo miIO = getImplicitOp (origType, destType);
-                                               if (miIO != null)
-                                                       il.Emit (OpCodes.Call, miIO);
-                                       }
-                               }
-                       }
-               }
-               /// <summary>
-               /// check type of current object on the stack and convert to dest type,
-               /// use loc_0 so store it as object!!!
-               /// </summary>
-               internal static void emitConvert(ILGenerator il, Type dstType){
-                       System.Reflection.Emit.Label endConvert = il.DefineLabel ();
-                       System.Reflection.Emit.Label convert = il.DefineLabel ();
-
-                       il.Emit (OpCodes.Dup);
-                       il.Emit (OpCodes.Isinst, dstType);
-                       il.Emit (OpCodes.Brfalse, convert);
-
-                       if (dstType.IsValueType)
-                               il.Emit (OpCodes.Unbox_Any, dstType);
-                       else
-                               il.Emit (OpCodes.Isinst, dstType);
-                       il.Emit (OpCodes.Br, endConvert);
-
-                       il.MarkLabel (convert);
-
-                       if (dstType == typeof(string)) {
-                               System.Reflection.Emit.Label emitNullStr = il.DefineLabel ();
-                               il.Emit (OpCodes.Dup);
-                               il.Emit (OpCodes.Brfalse, emitNullStr);
-                               il.Emit (OpCodes.Callvirt, CompilerServices.miObjToString);
-                               il.Emit (OpCodes.Br, endConvert);
-                               il.MarkLabel (emitNullStr);
-                               il.Emit (OpCodes.Pop);//remove null string from stack
-                               il.Emit (OpCodes.Ldstr, "");//replace with empty string
-                       } else if (dstType.IsPrimitive) {
-                //il.Emit (OpCodes.Unbox_Any, dstType);
-                MethodInfo miconv = CompilerServices.GetConvertMethod(dstType);
-                if (miconv.IsStatic)
-                    il.Emit(OpCodes.Call, miconv);
-                else
-                    il.Emit(OpCodes.Callvirt, miconv);
-                       } else if (dstType.IsValueType) {
-                               il.Emit (OpCodes.Unbox_Any, dstType);
-                       } else{
-                               il.Emit (OpCodes.Stloc_0); //save orig value in loc0
-                               //first check if not null
-                               il.Emit (OpCodes.Ldloc_0);
-                               il.Emit (OpCodes.Dup);
-                               il.Emit (OpCodes.Brfalse, endConvert);
-                               il.Emit (OpCodes.Callvirt, miGetType);
-                               il.Emit (OpCodes.Ldtoken, dstType);//push destination property type for testing
-                               il.Emit (OpCodes.Call, CompilerServices.miGetTypeFromHandle);
-                               il.Emit (OpCodes.Call, miGetImplOp);
-                               il.Emit (OpCodes.Dup);
-                               convert = il.DefineLabel ();
-                               il.Emit (OpCodes.Brtrue, convert);
-                               il.Emit (OpCodes.Pop);
-                               il.Emit (OpCodes.Ldloc_0);
-                               il.Emit (OpCodes.Isinst, dstType);
-                               il.Emit (OpCodes.Br, endConvert);
-
-                               il.MarkLabel (convert);
-                               il.Emit (OpCodes.Ldnull);//null instance for invoke
-                               il.Emit (OpCodes.Ldc_I4_1);
-                               il.Emit(OpCodes.Newarr, CompilerServices.TObject);
-                               il.Emit (OpCodes.Dup);//duplicate the array ref
-                               il.Emit (OpCodes.Ldc_I4_0);//push the index 0
-                               il.Emit (OpCodes.Ldloc_0);//push the orig value to convert
-                               il.Emit (OpCodes.Stelem, CompilerServices.TObject);//set the array element at index 0
-                               il.Emit (OpCodes.Callvirt, miMIInvoke);
-                       }
-
-                       il.MarkLabel (endConvert);
-               }
-
-               /// <summary>
-               /// Removes delegate from event handler by name
-               /// </summary>
-               static void removeEventHandlerByName(object instance, string eventName, string delegateName){
-                       Type t = instance.GetType ();
-                       FieldInfo fiEvt = getEventHandlerField (t, eventName);
-                       if (fiEvt == null) {
-                               #if DEBUG_BINDING
-                               Debug.WriteLine ("RemoveHandlerByName: Event '" + eventName + "' not found in " + instance);
-                               #endif
-                               return;
-                       }
-                       EventInfo eiEvt = t.GetEvent (eventName);
-                       MulticastDelegate multiDel = fiEvt.GetValue (instance) as MulticastDelegate;
-                       if (multiDel != null) {
-                               foreach (Delegate d in multiDel.GetInvocationList()) {
-                                       if (d.Method.Name == delegateName) {
-                                               eiEvt.RemoveEventHandler (instance, d);
-                                               #if DEBUG_BINDING
-                                               Debug.WriteLine ("\t{0} handler removed in {1} for: {2}", d.Method.Name,instance, eventName);
-                                               #endif
-                                       }
-                               }
-                       }
-               }
-               /// <summary>
-               /// Removes delegate from event handler by searching for the object they are bond to
-               /// </summary>
-               static void removeEventHandlerByTarget(object instance, string eventName, object target){
-                       Type t = instance.GetType ();
-                       FieldInfo fiEvt = getEventHandlerField (t, eventName);
-                       EventInfo eiEvt = t.GetEvent (eventName);
-                       MulticastDelegate multiDel = fiEvt.GetValue (instance) as MulticastDelegate;
-                       if (multiDel != null) {
-                               foreach (Delegate d in multiDel.GetInvocationList()) {
-                                       if (d.Target == target) {
-                                               eiEvt.RemoveEventHandler (instance, d);
-                                               #if DEBUG_BINDING
-                                               Debug.WriteLine ("\t{0} handler removed in {1} for: {2}", d.Method.Name,instance, eventName);
-                                               #endif
-                                       }
-                               }
-                       }
-               }
-               /// <summary>
-               /// create delegate helper
-               /// </summary>
-               static Delegate createDel(object instance, Type eventType, string method){
-                       Type t = instance.GetType ();
-                       MethodInfo mi = t.GetMethod (method, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
-                       if (mi == null) {
-                               Debug.WriteLine ("Handler Method '{0}' not found in '{1}'", method, t);
-                               return null;
-                       }
-                       return Delegate.CreateDelegate (eventType, instance, mi);
-               }
-
-               internal static Delegate compileDynEventHandler(EventInfo sourceEvent, string expression, NodeAddress currentNode = null){
-                       #if DEBUG_BINDING
-                       Debug.WriteLine ("\tCompile Event {0}: {1}", sourceEvent.Name, expression);
-                       #endif
-
-                       Type lopType = null;
-
-                       if (currentNode == null)
-                               lopType = sourceEvent.DeclaringType;
-                       else
-                               lopType = currentNode.NodeType;
-
-                       #region Retrieve EventHandler parameter type
-                       MethodInfo evtInvoke = sourceEvent.EventHandlerType.GetMethod ("Invoke");
-                       ParameterInfo [] evtParams = evtInvoke.GetParameters ();
-                       Type handlerArgsType = evtParams [1].ParameterType;
-                       #endregion
-
-                       Type [] args = { CompilerServices.TObject, handlerArgsType };
-                       DynamicMethod dm = new DynamicMethod ("dyn_eventHandler",
-                               typeof(void),
-                               args, true);
-                       ILGenerator il = dm.GetILGenerator (256);
-                       il.Emit (OpCodes.Nop);
-
-                       string [] srcLines = expression.Trim ().Split (new char [] { ';' });
-
-                       foreach (string srcLine in srcLines) {
-                               if (string.IsNullOrEmpty (srcLine))
-                                       continue;
-                               string [] operandes = srcLine.Trim ().Split (new char [] { '=' });
-                               if (operandes.Length != 2) //not an affectation
-                                       throw new NotSupportedException ();
-
-                               System.Reflection.Emit.Label cancel = il.DefineLabel ();
-                               System.Reflection.Emit.Label cancelFinalSet = il.DefineLabel ();
-                               System.Reflection.Emit.Label success = il.DefineLabel ();
-
-                               BindingMember lop = new BindingMember (operandes [0].Trim ());
-                               BindingMember rop = new BindingMember (operandes [1].Trim ());
-
-                               il.Emit (OpCodes.Ldarg_0);  //load sender ref onto the stack, the current node
-
-                               #region Left operande
-                               PropertyInfo lopPI = null;
-
-                               //in dyn handler, no datasource binding, so single name in expression are also handled as current node property
-                               if (lop.IsSingleName)
-                                       lopPI = lopType.GetProperty (lop.Tokens [0]);
-                               else if (lop.IsCurrentNodeProperty)
-                                       lopPI = lopType.GetProperty (lop.Tokens [1]);
-                               else
-                                       lop.emitGetTarget (il, cancel);
-                               #endregion
-
-                               #region RIGHT OPERANDES
-                               if (rop.IsStringConstant){
-                                       il.Emit (OpCodes.Ldstr, rop.Tokens[0]);
-                                       lop.emitSetProperty (il);
-                               }else if (rop.IsSingleName && rop.Tokens[0] == "this"){
-                                       il.Emit (OpCodes.Ldarg_0);  //load sender ref onto the stack, the current node
-                                       lop.emitSetProperty (il);
-                               }else if (rop.LevelsUp ==0 && !string.IsNullOrEmpty(rop.Tokens[0])) {//parsable constant depending on lop type
-                                       //if left operand is member of current node, it's easy to fetch type, else we should use reflexion in msil
-                                       if (lopPI == null){//accept GraphicObj members, but it's restricive
-                                               //TODO: we should get the parse method by reflexion, or something else
-                                               lopPI = typeof(GraphicObject).GetProperty (lop.Tokens [lop.Tokens.Length-1]);
-                                               if (lopPI == null)
-                                                       throw new NotSupportedException ();
-                                       }
-
-                                       MethodInfo lopParseMi = CompilerServices.miParseEnum;
-                                       if (lopPI.PropertyType.IsEnum){
-                                               //load type of enum
-                                               il.Emit(OpCodes.Ldtoken, lopPI.PropertyType);
-                                               il.Emit(OpCodes.Call, CompilerServices.miGetTypeFromHandle);
-                                               //load enum value name
-                                               il.Emit (OpCodes.Ldstr, operandes [1].Trim ());
-                                               //load false
-                                               il.Emit (OpCodes.Ldc_I4_0);
-                                       }else{
-                                               lopParseMi = lopPI.PropertyType.GetMethod ("Parse");
-                                               if (lopParseMi == null)
-                                                       throw new Exception (string.Format
-                                                               ("IML: no static 'Parse' method found in: {0}", lopPI.PropertyType.Name));
-
-                                               il.Emit (OpCodes.Ldstr, operandes [1].Trim ());
-                                       }
-                    if (lopParseMi.IsStatic)
-                                           il.Emit (OpCodes.Call, lopParseMi);
-                    else
-                        il.Emit(OpCodes.Callvirt, lopParseMi);
-                    //il.Emit (OpCodes.Unbox_Any, lopPI.PropertyType);
-                    //emit left operand assignment
-                    il.Emit (OpCodes.Callvirt, lopPI.GetSetMethod());
-                               } else {//tree parsing and propert gets
-                                       il.Emit (OpCodes.Ldarg_0);  //load sender ref onto the stack, the current node
-
-                                       rop.emitGetTarget (il, cancelFinalSet);
-                                       rop.emitGetProperty (il, cancelFinalSet);
-                                       lop.emitSetProperty (il);
-                               }
-                               #endregion
-
-                               il.Emit (OpCodes.Br, success);
-
-                               il.MarkLabel (cancelFinalSet);
-                               il.Emit (OpCodes.Pop);  //pop null MemberInfo on the stack causing cancelation
-                               il.MarkLabel (cancel);
-                               il.Emit (OpCodes.Pop);  //pop null instance on the stack causing cancelation
-                               il.MarkLabel (success);
-                       }
-
-                       il.Emit (OpCodes.Ret);
-
-                       return dm.CreateDelegate (sourceEvent.EventHandlerType);
-               }
-
-               /// <summary>
-               /// MSIL helper, go n levels up
-               /// </summary>
-               /// <returns><c>true</c>, if logical parents are not null</returns>
-               /// <param name="instance">Start Instance</param>
-               /// <param name="levelCount">Levels to go upward</param>
-               internal static ILayoutable goUpNbLevels(ILayoutable instance, int levelCount){
-                       ILayoutable tmp = instance;
-                       int i = 0;
-                       while (tmp != null && i < levelCount) {
-                               tmp = tmp.LogicalParent;
-                               i++;
-                       }
-                       return tmp;
-               }
-               /// <summary>
-               /// Splits expression on semicolon but ignore those between accolades
-               /// </summary>
-               internal static string[] splitOnSemiColumnOutsideAccolades (string expression){
-                       List<String> exps = new List<string>();
-                       int accCount = 0;
-                       int expPtr = 0;
-                       for (int c = 0; c < expression.Length; c++) {
-                               switch (expression[c]){
-                               case '{':
-                                       accCount++;
-                                       break;
-                               case '}':
-                                       accCount--;
-                                       break;
-                               case ';':
-                                       if (accCount > 0)
-                                               break;
-                                       exps.Add(expression.Substring(expPtr, c - expPtr - 1));
-                                       expPtr = c + 1;
-                                       break;
-                               }
-                       }
-                       if (exps.Count == 0)
-                               exps.Add(expression);
-                       return exps.ToArray ();
-               }
-               /// <summary>
-               /// Try to get the type named strDataType, search first in crow assembly then in
-               /// entry assembly.
-               /// </summary>
-               /// <returns>the corresponding type object if found</returns>
-               /// <param name="strDataType">type name</param>
-               internal static Type tryGetType (string strDataType){
-                       Type dataType = Type.GetType(strDataType);
-                       if (dataType != null)
-                               return dataType;
-                       Assembly a = Assembly.GetEntryAssembly ();
-                       foreach (Type expT in a.GetExportedTypes ()) {
-                               if (expT.Name == strDataType)
-                                       return dataType;
-                       }
-                       return null;
-               }
-
-               internal static object getDataTypeAndFetch (object data, string fetchMethod){
-                       Type dataType = data.GetType();
-                       MethodInfo miGetDatas = dataType.GetMethod (fetchMethod, new Type[] {});
-                       if (miGetDatas == null)
-                               miGetDatas = CompilerServices.SearchExtMethod (dataType, fetchMethod);
-
-                       if (miGetDatas == null) {//in last resort, search among properties
-                               PropertyInfo piDatas = dataType.GetProperty (fetchMethod);
-                               if (piDatas == null) {
-                                       FieldInfo fiDatas = dataType.GetField (fetchMethod);
-                                       if (fiDatas == null)//and among fields
-                                               throw new Exception ("Fetch data member not found in ItemTemplate: " + fetchMethod);
-                                       return fiDatas.GetValue (data);
-                               }
-                               miGetDatas = piDatas.GetGetMethod ();
-                               if (miGetDatas == null)
-                                       throw new Exception ("Read only property for fetching data in ItemTemplate: " + fetchMethod);
-                       }
-                       object tmp = miGetDatas.Invoke (data, null);
-                       return tmp;
-               }
-       }
-}
-
diff --git a/src/Configuration.cs b/src/Configuration.cs
deleted file mode 100644 (file)
index b8112be..0000000
+++ /dev/null
@@ -1,203 +0,0 @@
-//
-// Configuration.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-using System.Reflection;
-using System.IO;
-using System.Collections.Generic;
-using System.Threading;
-using System.Linq;
-
-namespace Crow
-{
-       /// <summary>
-       /// single element of configuration
-       /// </summary>
-       public class ConfigItem {
-               Type type;
-               internal object curVal;
-               bool parsingNeeded = false;
-               public ConfigItem(object newVal){
-                       curVal = newVal;
-               }
-               public ConfigItem(string newVal){
-                       curVal = newVal;
-                       parsingNeeded = true;
-               }
-               public T GetValue<T>(){
-                       if (type == null)
-                               type = typeof(T);
-                       if (parsingNeeded) {
-                               MethodInfo miParse = type.GetMethod ("Parse", new Type[] {typeof(string)});
-                               if (miParse != null)
-                                       curVal = miParse.Invoke (null, new object[]{ curVal });
-                               parsingNeeded = false;
-                       }
-                       return (T)Convert.ChangeType (curVal, type);
-               }
-               public void Set(object value){
-                       curVal = value;
-               }
-       }
-       /// <summary>
-       /// Application wide Configuration store utility
-       /// 
-       /// configuration files are automatically stored in **_user/.config/appname/app.config_** on close and every minutes
-       /// if some items have changed.
-       /// New items are automaticaly added on first use. Configuration class expose one templated Get and one Templated Set, so
-       /// creating, storing and retrieving config items is simple as:
-       /// 
-       /// ```csharp\n
-       ///     //storing\n
-       ///     Configuration.Global.Set ("Option1", 42);\n
-       ///     //loading\n
-       ///     int op1 = Configuration.Global.Get<int> ("Option1");\n
-       /// ```\n
-       /// </summary>
-       /// 
-       /// **.config**  file are simple text files with per line, a key/value pair of the form `option=value`. Keys have to be unique
-       /// in the application scope.
-       /// 
-       /// When running the application for the first time, some default options may be necessary. Their can be defined
-       /// in a special embedded resource text file with the key '**appname.default.config**'
-       public class Configuration
-       {
-               volatile bool isDirty = false;
-               string configPath;
-               Dictionary<string, ConfigItem> items = new Dictionary<string, ConfigItem> ();
-               static Configuration  globalConfig;
-
-               public static Configuration Global { get { return globalConfig; } }
-
-               public Configuration (string path, Stream defaultConf = null) {
-                       configPath = path;
-                       if (File.Exists (configPath)) {
-                               using (Stream s = new FileStream (configPath, FileMode.Open))
-                                       load (s);
-                               
-                       } else if (defaultConf != null) {                               
-                               load (defaultConf);
-                       }
-                       startSavingThread ();
-               }
-
-               static Configuration ()
-               {
-                       string configRoot =
-                               Path.Combine(
-                    
-                                       Environment.GetFolderPath(Environment.SpecialFolder.UserProfile),
-                                       ".config");
-
-                       Assembly a = Assembly.GetEntryAssembly ();
-                       string appName = a.GetName().Name;
-                       string globalConfigPath = Path.Combine (configRoot, appName);
-
-                       if (!Directory.Exists (globalConfigPath))
-                               Directory.CreateDirectory (globalConfigPath);
-
-                       globalConfigPath = Path.Combine (globalConfigPath, "global.config");
-
-                       string defaultConfigResID = appName + ".default.config";
-                       foreach (string resIds in a.GetManifestResourceNames()) {
-                               if (string.Equals (defaultConfigResID, resIds, StringComparison.OrdinalIgnoreCase)) {
-                               using (Stream s = a.GetManifestResourceStream (defaultConfigResID))
-                                       globalConfig = new Configuration (globalConfigPath, s);
-                                       return;
-                               }
-                       }
-                       globalConfig = new Configuration (globalConfigPath);
-               }
-
-               public string[] Names {
-                       get {
-                               return items.Keys.ToArray ();
-                       }
-               }
-
-               void startSavingThread(){
-                       Thread t = new Thread (savingThread);
-                       t.IsBackground = true;
-                       t.Start ();
-               }
-               void savingThread(){
-                       while(true){
-                               if (isDirty)
-                                       Save ();                                
-                               Thread.Sleep (100);
-                       }
-               }
-               /// <summary>
-               /// retrive the value of the configuration key given in parameter
-               /// </summary>
-               /// <param name="key">option name</param>
-               public T Get<T>(string key)
-               {
-                       return !items.ContainsKey (key) ? default(T) : items [key].GetValue<T> ();
-               }
-               /// <summary>
-               /// store the value of the configuration key given in parameter
-               /// </summary>
-               /// <param name="key">option name</param>
-               /// <param name="value">value for that option</param>
-               public void Set<T>(string key, T value)
-               {
-                       if (!items.ContainsKey (key)) {
-                               lock(items)
-                                       items[key] = new ConfigItem (value);
-                       }else
-                               items[key].Set (value);
-                       isDirty = true;
-               }
-               public void Save(){
-                       using (Stream s = new FileStream(configPath,FileMode.Create)){
-                               using (StreamWriter sw = new StreamWriter (s)) {
-                                       lock (items) {
-                                               foreach (string key in items.Keys) {
-                                                       if (items [key].curVal != null)
-                                                               sw.WriteLine (key + "=" + (string)items [key].curVal.ToString ());
-                                               }
-                                       }
-                               }
-                       }
-                       isDirty = false;
-               }
-               void load(Stream s){
-                       using (StreamReader sr = new StreamReader (s)) {
-                               while (!sr.EndOfStream) {
-                                       string l = sr.ReadLine();
-                                       if (string.IsNullOrEmpty (l.Trim ()))
-                                               continue;
-                                       string[] tmp = l.Trim ().Split ('=');
-                                       if (tmp.Length != 2)
-                                               continue;
-                                       items[tmp [0].Trim ()] = new ConfigItem(tmp [1].Trim ());
-                               }
-                       }
-               }
-       }
-}
-
diff --git a/src/CrowThread.cs b/src/CrowThread.cs
deleted file mode 100644 (file)
index a1b4c38..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-//
-// CrowThread.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-using System.Threading;
-
-namespace Crow
-{
-       /// <summary>
-       /// Thread monitored by current interface with Finished event when state==Stopped
-       /// </summary>
-       public class CrowThread {
-               public bool cancelRequested = false;
-               Thread thread;
-               public event EventHandler Finished;
-               public GraphicObject Host;
-               public CrowThread (GraphicObject host, ThreadStart start){
-                       thread = new Thread (start);
-                       thread.IsBackground = true;
-                       Host = host;
-                       lock (Host.IFace.CrowThreads)
-                               Host.IFace.CrowThreads.Add (this);
-               }
-               public void CheckState(){
-                       if (thread.ThreadState != ThreadState.Stopped)
-                               return;
-                       Finished.Raise (Host, null);
-                       lock (Host.IFace.CrowThreads)
-                               Host.IFace.CrowThreads.Remove (this);
-               }
-               public void Start() { thread.Start();}
-               public void Cancel(){
-                       if (thread.IsAlive & !cancelRequested){
-                               cancelRequested = true;
-                               thread.Join ();
-                       }
-                       lock (Host.IFace.CrowThreads)
-                               Host.IFace.CrowThreads.Remove (this);
-               }
-       }
-}
-
diff --git a/src/DragDropEventArgs.cs b/src/DragDropEventArgs.cs
deleted file mode 100644 (file)
index 428a736..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-//
-// LayoutingEventArgs.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-
-namespace Crow
-{
-       public class DragDropEventArgs: EventArgs
-       {
-               /// <summary>
-               /// Source of the drag and drop operation
-               /// </summary>
-               public GraphicObject DragSource;
-               /// <summary>
-               /// Target of the drag and drop operation
-               /// </summary>
-               public GraphicObject DropTarget;
-
-               //public DragDropEventArgs (GraphicObject source, GraphicObject target = null) : base()
-               public DragDropEventArgs (GraphicObject source = null, GraphicObject target = null) : base()
-               {
-                       DragSource = source;
-                       DropTarget = target;
-               }
-
-               public override string ToString ()
-               {
-                       return string.Format ("{0} => {1}", DragSource,DropTarget);
-               }
-       }
-}
-
diff --git a/src/DynAttribute.cs b/src/DynAttribute.cs
deleted file mode 100644 (file)
index 174eec2..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-//
-// DynAttribute.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-
-namespace Crow
-{
-       public class DynAttribute
-    {
-        public GraphicObject Source;
-        public string MemberName;
-        public String Value;
-    }
-}
diff --git a/src/Enums.cs b/src/Enums.cs
deleted file mode 100644 (file)
index 8b90d6e..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-//
-// Enums.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-
-namespace Crow
-{
-    public enum Orientation
-    {
-        Horizontal,
-        Vertical
-    }
-
-       public enum Alignment 
-    {
-        Top = 0x01,
-        Left = 0x02,
-               TopLeft = 0x03,
-               Right = 0x04,
-               TopRight = 0x05,
-               Bottom = 0x08,
-        BottomLeft = 0x0a,
-        BottomRight = 0x0c,
-               Center = 0x10,
-               Undefined = 0x40
-    }
-    public enum HorizontalAlignment
-    {
-        Left,
-        Right,
-        Center,
-    }
-    public enum VerticalAlignment
-    {
-        Top,
-        Bottom,
-        Center,
-    }
-}
diff --git a/src/ExtensionsMethods.cs b/src/ExtensionsMethods.cs
deleted file mode 100644 (file)
index ecbc8a7..0000000
+++ /dev/null
@@ -1,225 +0,0 @@
-//
-// ExtensionsMethods.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-using System.Linq.Expressions;
-
-namespace Crow
-{
-       public static class ExtensionsMethods
-       {
-               #region Cairo extensions
-
-               public static void Rectangle(this Cairo.Context ctx, Rectangle r, double stroke = 0.0)
-               {
-                       if (stroke > 0.0) {
-                               ctx.LineWidth = stroke;
-                               double shw = stroke / 2.0;
-                               ctx.Rectangle (r.X + shw, r.Y + shw, r.Width - stroke, r.Height - stroke);
-                               ctx.Stroke ();
-                       }else
-                               ctx.Rectangle (r.X, r.Y, r.Width, r.Height);
-               }
-               public static double GetLength(this Cairo.PointD p){
-                       return Math.Sqrt (Math.Pow (p.X, 2) + Math.Pow (p.Y, 2));
-               }
-               public static Cairo.PointD GetPerp(this Cairo.PointD p){
-                       return new Cairo.PointD(-p.Y, p.X);
-               }
-               public static Cairo.PointD GetNormalized(this Cairo.PointD p){
-                       double length = p.GetLength();
-                       p.X /= length;
-                       p.Y /= length;
-                       return p;
-               }
-               public static Cairo.PointD Substract(this Cairo.PointD p1, Cairo.PointD p2){
-                       return new Cairo.PointD(p1.X - p2.X, p1.Y - p2.Y);
-               }
-               public static Cairo.PointD Divide(this Cairo.PointD p1, double d){
-                       return new Cairo.PointD(p1.X / d, p1.Y / d);
-               }
-               public static Cairo.PointD Add(this Cairo.PointD p1, Cairo.PointD p2){
-                       return new Cairo.PointD(p1.X + p2.X, p1.Y + p2.Y);
-               }
-               public static Cairo.PointD Multiply(this Cairo.PointD p1, double v){
-                       return new Cairo.PointD(p1.X * v, p1.Y * v);
-               }
-               public static void DrawCote(this Cairo.Context ctx, Cairo.PointD p1, Cairo.PointD p2,
-                       double stroke = 1.0, bool fill = false, double arrowWidth = 3.0, double arrowLength = 7.0)
-               {                       
-                       Cairo.PointD vDir = p2.Substract(p1);
-                       vDir = vDir.GetNormalized ();
-                       Cairo.PointD vPerp = vDir.GetPerp ();
-
-                       Cairo.PointD pA0 = p1.Add(vDir.Multiply(arrowLength));
-                       Cairo.PointD pA1 = p2.Substract(vDir.Multiply(arrowLength));
-
-                       Cairo.PointD vA = vPerp.Multiply (arrowWidth);
-
-                       ctx.MoveTo (p1);
-                       ctx.LineTo (pA0.Add (vA));
-                       if (fill)
-                               ctx.LineTo (pA0.Substract (vA));
-                       else
-                               ctx.MoveTo (pA0.Substract (vA));
-                       
-                       ctx.LineTo (p1);
-
-                       ctx.MoveTo (p2);
-                       ctx.LineTo (pA1.Add (vA));
-                       if (fill)
-                               ctx.LineTo (pA1.Substract (vA));
-                       else
-                               ctx.MoveTo (pA1.Substract (vA));
-                       ctx.LineTo (p2);
-
-                       if (fill)
-                               ctx.Fill ();
-
-                       ctx.MoveTo (p1);
-                       ctx.LineTo (p2);
-                       ctx.LineWidth = stroke;
-                       ctx.Stroke ();
-               }
-               public static void DrawCoteInverse(this Cairo.Context ctx, Cairo.PointD p1, Cairo.PointD p2,
-                       double stroke = 1.0, bool fill = false, double arrowWidth = 3.0, double arrowLength = 7.0)
-               {                       
-                       Cairo.PointD vDir = p2.Substract(p1);
-                       vDir = vDir.GetNormalized ();
-                       Cairo.PointD vPerp = vDir.GetPerp ();
-
-                       Cairo.PointD pA0 = p1.Add(vDir.Multiply(arrowLength));
-                       Cairo.PointD pA1 = p2.Substract(vDir.Multiply(arrowLength));
-
-                       Cairo.PointD vA = vPerp.Multiply (arrowWidth);
-
-                       ctx.MoveTo (p1.Add (vA));
-                       ctx.LineTo (pA0);
-                       ctx.LineTo (p1.Substract (vA));
-                       if (fill)
-                               ctx.LineTo (p1.Add (vA));
-
-                       ctx.MoveTo (p2.Add (vA));
-                       ctx.LineTo (pA1);
-                       ctx.LineTo (p2.Substract (vA));
-
-                       if (fill) {
-                               ctx.LineTo (p2.Add (vA));
-                               ctx.Fill ();
-                       }
-
-                       ctx.MoveTo (pA0);
-                       ctx.LineTo (pA1);
-                       ctx.LineWidth = stroke;
-                       ctx.Stroke ();
-               }
-               public static void DrawCoteFixed(this Cairo.Context ctx, Cairo.PointD p1, Cairo.PointD p2,
-                       double stroke = 1.0, double coteWidth = 3.0)
-               {                       
-                       Cairo.PointD vDir = p2.Substract(p1);
-                       vDir = vDir.GetNormalized ();
-                       Cairo.PointD vPerp = vDir.GetPerp ();
-                       Cairo.PointD vA = vPerp.Multiply (coteWidth);
-
-                       ctx.MoveTo (p1.Add (vA));
-                       ctx.LineTo (p1.Substract (vA));
-                       ctx.MoveTo (p2.Add (vA));
-                       ctx.LineTo (p2.Substract (vA));
-                       ctx.MoveTo (p1);
-                       ctx.LineTo (p2);
-                       ctx.LineWidth = stroke;
-                       ctx.Stroke ();
-               }
-
-               public static void SetSourceColor(this Cairo.Context ctx, Color c)
-               {
-                       ctx.SetSourceRGBA(c.R,c.G,c.B,c.A);
-               }
-               public static void AddColorStop(this Cairo.Gradient grad, double offset, Color c)
-               {
-                       grad.AddColorStop (offset, c);
-               }
-               #endregion
-
-               public static Orientation GetOrientation(this Alignment a){
-                       return (a==Alignment.Left) ||(a==Alignment.Right) ? Orientation.Horizontal : Orientation.Vertical;
-               }
-               public static Alignment GetOpposite(this Alignment a){
-                       switch (a) {
-                       case Alignment.Left:
-                               return Alignment.Right;
-                       case Alignment.Right:
-                               return Alignment.Left;
-                       case Alignment.Top:
-                               return Alignment.Bottom;
-                       case Alignment.Bottom:
-                               return Alignment.Top;
-                       case Alignment.TopLeft:
-                               return Alignment.BottomRight;
-                       case Alignment.TopRight:
-                               return Alignment.BottomLeft;
-                       case Alignment.BottomLeft:
-                               return Alignment.TopRight;
-                       case Alignment.BottomRight:
-                               return Alignment.TopLeft;                       
-                       }
-                       return Alignment.Center;
-               }
-               public static void Raise(this EventHandler handler, object sender, EventArgs e)
-               {
-                       if(handler != null)
-                       {
-                               handler(sender, e);
-                       }
-               }
-               public static void Raise<T>(this EventHandler<T> handler, object sender, T e)
-               {
-                       if(handler != null)
-                       {
-                               handler(sender, e);
-                       }
-               }
-               public static byte[] GetBytes(this string str)
-               {
-                       byte[] bytes = new byte[str.Length * sizeof(char)];
-                       System.Buffer.BlockCopy(str.ToCharArray(), 0, bytes, 0, bytes.Length);
-                       return bytes;
-               }
-               public static bool IsWhiteSpaceOrNewLine (this char c)
-               {
-                       return c == '\t' || c == '\r' || c == '\n' || char.IsWhiteSpace (c);
-               }
-               public static object GetDefaultValue(this object obj)
-               {                       
-                       Type t = obj.GetType ();
-                       if (t.IsValueType)
-                               return Activator.CreateInstance (t);
-                       
-                       return null;
-               }
-       }
-}
-
diff --git a/src/Fill/Fill.cs b/src/Fill/Fill.cs
deleted file mode 100644 (file)
index d98e47c..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-//
-// Fill.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-using System.Collections.Generic;
-using Cairo;
-
-namespace Crow
-{
-       /// <summary>
-       /// base class for drawing content to paint on backend
-       /// </summary>
-       public abstract class Fill
-       {
-               /// <summary>
-               /// set content of fill as source for drawing operations on the backend context
-               /// </summary>
-               /// <param name="ctx">backend context</param>
-               /// <param name="bounds">paint operation bounding box, unused for SolidColor</param>
-               public abstract void SetAsSource (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 Color(Fill c){
-                       SolidColor sc = c as SolidColor;
-                       return sc == null ? default(Color) : sc.color;
-               }
-               public static implicit operator Fill(Color c){
-                       return new SolidColor (c);
-               }
-
-       }
-}
-
diff --git a/src/Font.cs b/src/Font.cs
deleted file mode 100644 (file)
index bab2c85..0000000
+++ /dev/null
@@ -1,130 +0,0 @@
-//
-// Font.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-using Cairo;
-
-namespace Crow
-{
-       public enum FontStyle
-       {
-               Normal,
-               Bold,
-               Italic,
-               Underlined
-       }
-       public class Font
-       {
-               #region CTOR
-               public Font ()
-               {
-               }
-               #endregion
-
-               string _name = "droid";
-               int _size = 12;
-               FontStyle _style = FontStyle.Normal;
-
-               public string Name {
-                       get { return _name; }
-                       set { _name = value; }
-               }
-               public int Size {
-                       get { return _size; }
-                       set { _size = value; }
-               }
-               public FontStyle Style {
-                       get { return _style; }
-                       set { _style = value; }
-               }
-
-               public FontSlant Slant {
-                       get{ 
-                               switch (Style) {
-                               case FontStyle.Normal:
-                               default:
-                                       return FontSlant.Normal;
-                               case FontStyle.Italic:
-                                       return FontSlant.Italic;
-                               }                       
-                       }
-               }
-               public FontWeight Wheight {
-                       get{ 
-                               switch (Style) {
-                               case FontStyle.Bold:
-                                       return FontWeight.Bold;
-                               case FontStyle.Italic:
-                               case FontStyle.Normal:
-                               default:
-                                       return FontWeight.Normal;
-                               }                       
-                       }
-               }
-
-               #region Operators
-               public static implicit operator string(Font c)
-               {
-                       return c.ToString();
-               }
-               public static implicit operator Font(string s)
-               {
-                       Font f = new Font ();
-
-                       if (!string.IsNullOrEmpty (s)) {
-                               string[] c = s.TrimStart().TrimEnd().Split (new char[] { ',' });
-
-                               if (c.Length == 2)
-                                       f.Size = int.Parse (c [1].TrimStart());
-
-                               string[] n = c [0].TrimEnd().Split (new char[] { ' ' });
-
-                               f.Name = n [0];
-
-                               if (n.Length > 1)
-                                       f.Style = (FontStyle)Enum.Parse (typeof(FontStyle), n[n.Length-1], true);
-                       }
-
-                       return f;
-               }
-               #endregion
-
-               public override string ToString()
-               {
-                       if (_style == FontStyle.Normal)
-                               return string.Format("{0},{1}", _name, _size);
-                       else
-                               return string.Format("{0} {1},{2}", _name, _style, _size);
-
-               }
-
-               public static object Parse(string s)
-               {
-                       return (Font)s;
-               }
-       }
-}
-
diff --git a/src/Gradient.cs b/src/Gradient.cs
deleted file mode 100644 (file)
index 2630c42..0000000
+++ /dev/null
@@ -1,140 +0,0 @@
-//
-// Gradient.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-using System.Collections.Generic;
-using Cairo;
-
-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 (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) {
-                               if (cs == null)
-                                       continue;
-                               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/Border.cs b/src/GraphicObjects/Border.cs
deleted file mode 100644 (file)
index 9379c26..0000000
+++ /dev/null
@@ -1,273 +0,0 @@
-//
-// Border.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-using System.Xml.Serialization;
-using System.ComponentModel;
-using System.Diagnostics;
-using Cairo;
-
-namespace Crow
-{
-       /// <summary>
-       /// provide an easy way to get 3d border for buttons
-       /// </summary>
-       public enum BorderStyle {
-               Normal,
-               Raised,
-               Sunken
-       };
-
-       /// <summary>
-       /// simple container with border
-       /// </summary>
-       public class Border : Container
-       {
-               #region CTOR
-               protected Border () : base(){}
-               public Border (Interface iface) : base(iface){}
-               #endregion
-
-               #region private fields
-               int _borderWidth;
-               BorderStyle _borderStyle;
-               Fill raisedColor = Color.Grey;
-               Fill sunkenColor = Color.DimGrey;
-               #endregion
-
-               #region public properties
-               /// <summary>
-               /// use to define the colors of the 3d border
-               /// </summary>
-               
-               public virtual Fill RaisedColor {
-                       get { return raisedColor; }
-                       set {
-                               if (raisedColor == value)
-                                       return;
-                               raisedColor = value;
-                               NotifyValueChanged ("RaisedColor", raisedColor);
-                               RegisterForRedraw ();
-                       }
-               }
-               /// <summary>
-               /// use to define the colors of the 3d border
-               /// </summary>
-               
-               public virtual Fill SunkenColor {
-                       get { return sunkenColor; }
-                       set {
-                               if (sunkenColor == value)
-                                       return;
-                               sunkenColor = value;
-                               NotifyValueChanged ("SunkenColor", sunkenColor);
-                               RegisterForRedraw ();
-                       }
-               }
-               /// <summary>
-               /// border width in pixels
-               /// </summary>
-               [DefaultValue(1)]
-               public virtual int BorderWidth {
-                       get { return _borderWidth; }
-                       set {
-                               _borderWidth = value;
-                               RegisterForGraphicUpdate ();
-                       }
-               }
-               /// <summary>
-               /// allow 3d border effects
-               /// </summary>
-               [DefaultValue(BorderStyle.Normal)]
-               public virtual BorderStyle BorderStyle {
-                       get { return _borderStyle; }
-                       set {
-                               if (_borderStyle == value)
-                                       return;
-                               _borderStyle = value;
-                               RegisterForGraphicUpdate ();
-                       }
-               }
-               #endregion
-
-               #region GraphicObject override
-               [XmlIgnore]public override Rectangle ClientRectangle {
-                       get {
-                               Rectangle cb = base.ClientRectangle;
-                               cb.Inflate (- BorderWidth);
-                               return cb;
-                       }
-               }
-
-               protected override int measureRawSize (LayoutingType lt)
-               {
-                       int tmp = base.measureRawSize (lt);
-                       return tmp < 0 ? tmp : tmp + 2 * BorderWidth;
-               }
-               protected override void onDraw (Context gr)
-               {
-                       drawborder2 (gr);
-
-                       gr.Save ();
-                       if (ClipToClientRect) {
-                               //clip to client zone
-                               CairoHelpers.CairoRectangle (gr, ClientRectangle,Math.Max(0.0, CornerRadius-Margin));
-                               gr.Clip ();
-                       }
-
-                       if (child != null)
-                               child.Paint (ref gr);
-                       gr.Restore ();
-               }
-               void drawborder2(Context gr){
-                       Rectangle rBack = new Rectangle (Slot.Size);
-
-                       //rBack.Inflate (-Margin);
-                       //                      if (BorderWidth > 0)
-                       //                              rBack.Inflate (-BorderWidth / 2);
-
-                       Background.SetAsSource (gr, rBack);
-                       CairoHelpers.CairoRectangle(gr, rBack, CornerRadius);
-                       gr.Fill ();
-
-
-                       if (BorderStyle == BorderStyle.Normal) {
-                               if (BorderWidth > 0) {
-                                       Foreground.SetAsSource (gr, rBack);
-                                       CairoHelpers.CairoRectangle (gr, rBack, CornerRadius, BorderWidth);
-                               }
-                       } else {
-                               gr.LineWidth = 1.0;
-                               if (CornerRadius > 0.0) {
-                                       double radius = CornerRadius;
-                                       if ((radius > rBack.Height / 2.0) || (radius > rBack.Width / 2.0))
-                                               radius = Math.Min (rBack.Height / 2.0, rBack.Width / 2.0);
-                                       gr.SetSourceColor (sunkenColor);
-                                       gr.MoveTo (0.5 + rBack.Left, -0.5 + rBack.Bottom - radius);
-                                       gr.ArcNegative (0.5 + rBack.Left + radius, -0.5 + rBack.Bottom - radius, radius, Math.PI, Math.PI * 0.75);
-                                       gr.MoveTo (0.5 + rBack.Left, -0.5 + rBack.Bottom - radius);
-                                       gr.LineTo (0.5 + rBack.Left, 0.5 + rBack.Top + radius);
-                                       gr.Arc (0.5 + rBack.Left + radius, 0.5 + rBack.Top + radius, radius, Math.PI, Math.PI * 1.5);
-                                       gr.LineTo (-0.5 + rBack.Right - radius, 0.5 + rBack.Top);
-                                       gr.Arc (-0.5 + rBack.Right - radius, 0.5 + rBack.Top + radius, radius, Math.PI * 1.5, Math.PI * 1.75);
-                                       gr.Stroke ();
-                                       if (BorderStyle == BorderStyle.Raised) {
-                                               gr.MoveTo (-1.5 + rBack.Right, 1.5 + rBack.Top + radius);
-                                               gr.ArcNegative (-0.5 + rBack.Right - radius, 0.5 + rBack.Top + radius, radius - 1.0, 0, -Math.PI * 0.25);
-                                               gr.MoveTo (-1.5 + rBack.Right, 1.5 + rBack.Top + radius);
-                                               gr.LineTo (-1.5 + rBack.Right, -1.5 + rBack.Bottom - radius);
-                                               gr.Arc (-0.5 + rBack.Right - radius, -0.5 + rBack.Bottom - radius, radius - 1.0, 0, Math.PI / 2.0);
-                                               gr.LineTo (1.5 + rBack.Left + radius, -1.5 + rBack.Bottom);
-                                               gr.Arc (0.5 + rBack.Left + radius, -0.5 + rBack.Bottom - radius, radius - 1.0, Math.PI / 2.0, Math.PI * 0.75);
-                                               gr.Stroke ();
-
-                                               gr.SetSourceColor (raisedColor);
-                                               gr.MoveTo (1.5 + rBack.Left, -1.5 + rBack.Bottom - radius);
-                                               gr.ArcNegative (0.5 + rBack.Left + radius, -0.5 + rBack.Bottom - radius, radius - 1.0, Math.PI, Math.PI * 0.75);
-                                               gr.MoveTo (1.5 + rBack.Left, -1.5 + rBack.Bottom - radius);
-                                               gr.LineTo (1.5 + rBack.Left, 1.5 + rBack.Top + radius);
-                                               gr.Arc (0.5 + rBack.Left + radius, 0.5 + rBack.Top + radius, radius - 1.0, Math.PI, Math.PI * 1.5);
-                                               gr.LineTo (-1.5 + rBack.Right - radius, 1.5 + rBack.Top);
-                                               gr.Arc (-0.5 + rBack.Right - radius, 0.5 + rBack.Top + radius, radius - 1.0, Math.PI * 1.5, Math.PI * 1.75);
-                                       } else {
-                                               gr.Stroke ();
-                                               gr.SetSourceColor (raisedColor);
-                                       }
-                                       gr.MoveTo (-0.5 + rBack.Right, 0.5 + rBack.Top + radius);
-                                       gr.ArcNegative (-0.5 + rBack.Right - radius, 0.5 + rBack.Top + radius, radius, 0, -Math.PI * 0.25);
-                                       gr.MoveTo (-0.5 + rBack.Right, 0.5 + rBack.Top + radius);
-                                       gr.LineTo (-0.5 + rBack.Right, -0.5 + rBack.Bottom - radius);
-                                       gr.Arc (-0.5 + rBack.Right - radius, -0.5 + rBack.Bottom - radius, radius, 0, Math.PI / 2.0);
-                                       gr.LineTo (0.5 + rBack.Left + radius, -0.5 + rBack.Bottom);
-                                       gr.Arc (0.5 + rBack.Left + radius, -0.5 + rBack.Bottom - radius, radius, Math.PI / 2.0, Math.PI * 0.75);
-                                       gr.Stroke ();
-                               } else {
-                                       gr.SetSourceColor (sunkenColor);
-                                       gr.MoveTo (0.5 + rBack.Left, rBack.Bottom);
-                                       gr.LineTo (0.5 + rBack.Left, 0.5 + rBack.Y);
-                                       gr.LineTo (rBack.Right, 0.5 + rBack.Y);
-                                       if (BorderStyle == BorderStyle.Raised) {
-                                               gr.MoveTo (-1.5 + rBack.Right, 2.0 + rBack.Y);
-                                               gr.LineTo (-1.5 + rBack.Right, -1.5 + rBack.Bottom);
-                                               gr.LineTo (2.0 + rBack.Left, -1.5 + rBack.Bottom);
-                                               gr.Stroke ();
-                                               gr.SetSourceColor (raisedColor);
-                                               gr.MoveTo (1.5 + rBack.Left, -1.0 + rBack.Bottom);
-                                               gr.LineTo (1.5 + rBack.Left, 1.5 + rBack.Y);
-                                               gr.LineTo (rBack.Right, 1.5 + rBack.Y);
-                                       } else {
-                                               gr.Stroke ();
-                                               gr.SetSourceColor (raisedColor);
-                                       }
-                                       gr.MoveTo (-0.5 + rBack.Right, 1.5 + rBack.Y);
-                                       gr.LineTo (-0.5 + rBack.Right, -0.5 + rBack.Bottom);
-                                       gr.LineTo (1.0 + rBack.Left, -0.5 + rBack.Bottom);
-                                       gr.Stroke ();
-                               }
-                       }
-               }
-               void drawborder1(Context gr){
-                       Rectangle rBack = new Rectangle (Slot.Size);
-
-                       //rBack.Inflate (-Margin);
-                       //                      if (BorderWidth > 0)
-                       //                              rBack.Inflate (-BorderWidth / 2);
-
-                       Background.SetAsSource (gr, rBack);
-                       CairoHelpers.CairoRectangle(gr, rBack, CornerRadius);
-                       gr.Fill ();
-
-                       double bw = _borderWidth;
-                       double crad = CornerRadius;
-
-                       if (bw > 0) {
-                               if (BorderStyle == BorderStyle.Normal)
-                                       Foreground.SetAsSource (gr, rBack);
-                               else {
-                                       if (BorderStyle == BorderStyle.Sunken)
-                                               gr.SetSourceColor (raisedColor);
-                                       else
-                                               gr.SetSourceColor (sunkenColor);
-
-                                       CairoHelpers.CairoRectangle (gr, rBack, crad, bw);
-
-                                       if (BorderStyle == BorderStyle.Sunken)
-                                               gr.SetSourceColor (sunkenColor);
-                                       else
-                                               gr.SetSourceColor (raisedColor);
-
-                                       bw /= 2.0;
-                                       rBack.Width -= (int)Math.Round(bw);
-                                       rBack.Height -= (int)Math.Round(bw);
-                               }
-
-                               CairoHelpers.CairoRectangle (gr, rBack, crad, bw);
-                       }
-               }
-               #endregion
-       }
-}
-
diff --git a/src/GraphicObjects/Button.cs b/src/GraphicObjects/Button.cs
deleted file mode 100644 (file)
index 3061251..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
-//
-// Button.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-//using OpenTK.Graphics.OpenGL;
-
-using System.Diagnostics;
-
-using System.Xml.Serialization;
-using Cairo;
-using System.ComponentModel;
-
-namespace Crow
-{
-       /// <summary>
-       /// templated button control
-       /// </summary>
-    public class Button : TemplatedContainer
-    {
-               #region CTOR
-               protected Button() : base() {}
-               public Button (Interface iface) : base(iface){}
-               #endregion
-
-               string image;
-               bool isPressed;
-
-               public event EventHandler Pressed;
-               public event EventHandler Released;
-
-               #region GraphicObject Overrides
-               public override void onMouseDown (object sender, MouseButtonEventArgs e)
-               {
-                       IsPressed = true;
-
-                       base.onMouseDown (sender, e);
-
-                       //TODO:remove
-                       NotifyValueChanged ("State", "pressed");
-               }
-               public override void onMouseUp (object sender, MouseButtonEventArgs e)
-               {
-                       IsPressed = false;
-
-                       base.onMouseUp (sender, e);
-
-                       //TODO:remove
-                       NotifyValueChanged ("State", "normal");
-               }
-               #endregion
-
-               [DefaultValue("#Crow.Images.button.svg")]
-               public string Image {
-                       get { return image; }
-                       set {
-                               if (image == value)
-                                       return;
-                               image = value;
-                               NotifyValueChanged ("Image", image);
-                       }
-               }
-               [DefaultValue(false)]
-               public bool IsPressed
-               {
-                       get { return isPressed; }
-                       set
-                       {
-                               if (isPressed == value)
-                                       return;
-
-                               isPressed = value;
-
-                               NotifyValueChanged ("IsPressed", isPressed);
-
-                               if (isPressed)
-                                       Pressed.Raise (this, null);
-                               else
-                                       Released.Raise (this, null);
-                       }
-               }
-       }
-}
diff --git a/src/GraphicObjects/CheckBox.cs b/src/GraphicObjects/CheckBox.cs
deleted file mode 100644 (file)
index 4860d60..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-//
-// CheckBox.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-using System.ComponentModel;
-using System.Xml.Serialization;
-
-namespace Crow
-{
-       /// <summary>
-       /// templated checkbox control
-       /// </summary>
-       public class CheckBox : TemplatedControl
-       {
-               #region CTOR
-               protected CheckBox() : base(){}
-               public CheckBox (Interface iface) : base(iface){}
-               #endregion
-
-               bool isChecked;
-
-               public event EventHandler Checked;
-               public event EventHandler Unchecked;
-
-               [DefaultValue(false)]
-               public bool IsChecked
-               {
-                       get { return isChecked; }
-                       set
-                       {
-                               if (isChecked == value)
-                                       return;
-
-                               isChecked = value;
-
-                               NotifyValueChanged ("IsChecked", value);
-
-                               if (isChecked)
-                                       Checked.Raise (this, null);
-                               else
-                                       Unchecked.Raise (this, null);
-                       }
-               }
-
-               public override void onMouseDown (object sender, MouseButtonEventArgs e)
-               {
-                       IsChecked = !IsChecked;
-                       base.onMouseDown (sender, e);
-               }
-       }
-}
diff --git a/src/GraphicObjects/ColorPicker.cs b/src/GraphicObjects/ColorPicker.cs
deleted file mode 100644 (file)
index dd45023..0000000
+++ /dev/null
@@ -1,228 +0,0 @@
-//
-// ColorPicker.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-using System.Xml.Serialization;
-using System.ComponentModel;
-
-namespace Crow
-{
-       /// <summary>
-       /// templated color selector control
-       /// </summary>
-       public class ColorPicker : TemplatedControl
-       {
-               #region CTOR
-               protected ColorPicker() : base(){}
-               public ColorPicker (Interface iface) : base(iface){}
-               #endregion
-
-               const double div = 255.0;
-               const double colDiv = 1.0 / div;
-
-               Color curColor;
-               double h,s,v;
-
-               
-               public virtual double R {
-                       get { return Math.Round(curColor.R * div); }
-                       set {
-                               if (R == value)
-                                       return;
-                               curColor.R = value * colDiv;
-                               NotifyValueChanged ("R", R);
-                               hsvFromRGB ();
-                               notifyCurColorHasChanged ();
-                       }
-               }
-               
-               public virtual double G {
-                       get { return Math.Round(curColor.G * div); }
-                       set {
-                               if (G == value)
-                                       return;
-                               curColor.G = value * colDiv;
-                               NotifyValueChanged ("G", G);
-                               notifyCurColorHasChanged ();
-                               hsvFromRGB ();
-                       }
-               }
-               
-               public virtual double B {
-                       get { return Math.Round(curColor.B * div); }
-                       set {
-                               if (B == value)
-                                       return;
-                               curColor.B = value * colDiv;
-                               NotifyValueChanged ("B", B);
-                               notifyCurColorHasChanged ();
-                               hsvFromRGB ();
-                       }
-               }
-               
-               public virtual double A {
-                       get { return Math.Round(curColor.A * div); }
-                       set {
-                               if (A == value)
-                                       return;
-                               curColor.A = value * colDiv;
-                               NotifyValueChanged ("A", A);
-                               notifyCurColorHasChanged ();
-                               hsvFromRGB ();
-                       }
-               }
-               
-               public virtual double H {
-                       get { return Math.Round (h, 3); }
-                       set {
-                               if (H == value)
-                                       return;
-                               h = value;
-                               NotifyValueChanged ("H", H);
-                               rgbFromHSV ();
-                       }
-               }
-               
-               public virtual double S {
-                       get { return Math.Round (s, 2); }
-                       set {
-                               if (s == value)
-                                       return;
-                               s = value;
-                               NotifyValueChanged ("S", S);
-                               rgbFromHSV ();
-                       }
-               }
-               
-               public virtual double V {
-                       get { return Math.Round (v, 2); }
-                       set {
-                               if (v == value)
-                                       return;
-                               v = value;
-                               NotifyValueChanged ("V", V);
-                               rgbFromHSV ();
-                       }
-               }
-
-               
-               public virtual Fill SelectedColor {
-                       get { return new SolidColor(curColor); }
-                       set {
-                               if (value == null)
-                                       curColor = default(Color);
-                               else if (value is SolidColor) {
-                                       Color c = (value as SolidColor).color;
-                                       if (curColor == c)
-                                               return;
-                                       curColor = c;
-                               }
-                               notifyCurColorHasChanged ();
-                               notifyRGBAHasChanged ();
-                               hsvFromRGB ();
-                       }
-               }
-               
-               public virtual Color SelectedRawColor {
-                       get { return curColor; }
-                       set {
-                               if (curColor == value)
-                                       return;
-                               curColor = value;
-                               notifyCurColorHasChanged ();
-                               notifyRGBAHasChanged ();
-                               hsvFromRGB ();
-                       }
-               }
-               void notifyCurColorHasChanged(){
-                       NotifyValueChanged ("SelectedColor", SelectedColor);
-                       NotifyValueChanged ("SelectedRawColor", curColor);
-                       string n = curColor.ToString ();
-                       if (char.IsLetter(n[0]))
-                               NotifyValueChanged ("SelectedColorName", n);
-                       else
-                               NotifyValueChanged ("SelectedColorName", "-");
-                       string tmp = ((int)Math.Round (R)).ToString ("X2") +
-                                    ((int)Math.Round (G)).ToString ("X2") +
-                                    ((int)Math.Round (B)).ToString ("X2");
-                       if (curColor.A < 1.0)
-                               tmp += ((int)Math.Round (A)).ToString ("X2");
-                       NotifyValueChanged ("HexColor", tmp);
-               }
-               void notifyRGBAHasChanged(){
-                       NotifyValueChanged ("R", R);
-                       NotifyValueChanged ("G", G);
-                       NotifyValueChanged ("B", B);
-                       NotifyValueChanged ("A", A);
-               }
-               void notifyHSVHasChanged(){
-                       NotifyValueChanged ("H", H);
-                       NotifyValueChanged ("S", S);
-                       NotifyValueChanged ("V", V);
-               }
-               void hsvFromRGB(){
-                       Color c = curColor;
-                       c.ResetName ();
-                       double min = Math.Min (c.R, Math.Min (c.G, c.B));       //Min. value of RGB
-                       double max = Math.Max (c.R, Math.Max (c.G, c.B));       //Max. value of RGB
-                       double diff = max - min;                                                        //Delta RGB value
-
-                       v = max;
-
-                       if ( diff == 0 )//This is a gray, no chroma...
-                       {
-                               h = 0;
-                               s = 0;
-                       }else{//Chromatic data...
-                               s = diff / max;
-
-                               double diffR = (((max - c.R) / 6.0) + (diff / 2.0)) / diff;
-                               double diffG = (((max - c.G) / 6.0) + (diff / 2.0)) / diff;
-                               double diffB = (((max - c.B) / 6.0) + (diff / 2.0)) / diff;
-
-                               if (c.R == max)
-                                       h = diffB - diffG;
-                               else if (c.G == max)
-                                       h = (1.0 / 3.0) + diffR - diffB;
-                               else if (c.B == max)
-                                       h = (2.0 / 3.0) + diffG - diffR;
-
-                               if (h < 0)
-                                       h += 1;
-                               if (h > 1)
-                                       h -= 1;
-
-                       }
-                       notifyHSVHasChanged ();
-               }
-               void rgbFromHSV(){
-                       curColor = Color.FromHSV (h, v, s, curColor.A);
-                       notifyCurColorHasChanged ();
-                       notifyRGBAHasChanged ();
-               }
-       }
-}
-
diff --git a/src/GraphicObjects/ColorSelector.cs b/src/GraphicObjects/ColorSelector.cs
deleted file mode 100644 (file)
index ee57a26..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-//
-// ColorSelector.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-using System.Xml.Serialization;
-using System.ComponentModel;
-
-namespace Crow
-{
-       /// <summary>
-       /// simple squarred rgb color selector
-       /// </summary>
-       [DesignIgnore]
-       public class ColorSelector : GraphicObject
-       {
-               #region CTOR
-               protected ColorSelector() : base(){}
-               public ColorSelector (Interface iface) : base(iface){}
-               #endregion
-
-               const double div = 255.0;
-               const double colDiv = 1.0 / div;
-               protected Point mousePos;
-
-               public override void onMouseMove (object sender, MouseMoveEventArgs e)
-               {
-                       base.onMouseMove (sender, e);
-                       if (IFace.Mouse.LeftButton == ButtonState.Released)
-                               return;
-                       updateMouseLocalPos (e.Position);
-               }
-               public override void onMouseDown (object sender, MouseButtonEventArgs e)
-               {
-                       base.onMouseDown (sender, e);
-                       if (e.Button == MouseButton.Left)
-                               updateMouseLocalPos (e.Position);
-               }
-
-               protected virtual void updateMouseLocalPos(Point mPos){
-                       Rectangle r = ScreenCoordinates (Slot);
-                       Rectangle cb = ClientRectangle;
-                       mousePos = mPos - r.Position;
-
-                       mousePos.X = Math.Max(cb.X, mousePos.X);
-                       mousePos.X = Math.Min(cb.Right, mousePos.X);
-                       mousePos.Y = Math.Max(cb.Y, mousePos.Y);
-                       mousePos.Y = Math.Min(cb.Bottom, mousePos.Y);
-               }
-       }
-}
-
diff --git a/src/GraphicObjects/ComboBox.cs b/src/GraphicObjects/ComboBox.cs
deleted file mode 100644 (file)
index 6122705..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-//
-// ComboBox.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-using System.Xml.Serialization;
-
-namespace Crow
-{
-       /// <summary>
-       /// templated control for selecting value in a pop up list
-       /// </summary>
-       public class ComboBox : ListBox
-    {
-               #region CTOR
-               protected ComboBox() : base(){}
-               public ComboBox (Interface iface) : base(iface){}
-               #endregion
-
-               Size minimumPopupSize = "10,10";
-               [XmlIgnore]public Size MinimumPopupSize{
-                       get { return minimumPopupSize; }
-                       set {
-                               minimumPopupSize = value;
-                               NotifyValueChanged ("MinimumPopupSize", minimumPopupSize);
-                       }
-               }
-
-               public override void OnLayoutChanges (LayoutingType layoutType)
-               {
-                       base.OnLayoutChanges (layoutType);
-
-                       if (layoutType == LayoutingType.Width)
-                               MinimumPopupSize = new Size (this.Slot.Width, minimumPopupSize.Height);                 
-               }
-       }
-}
diff --git a/src/GraphicObjects/Container.cs b/src/GraphicObjects/Container.cs
deleted file mode 100644 (file)
index 364bad8..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-//
-// Container.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-using System.Xml.Serialization;
-using System.Reflection;
-using System.ComponentModel;
-using System.Linq;
-using System.Threading;
-
-namespace Crow
-{
-       /// <summary>
-       /// simple container accepting one child
-       /// </summary>
-    public class Container : PrivateContainer
-    {
-               #if DESIGN_MODE
-               public override void getIML (System.Xml.XmlDocument doc, System.Xml.XmlNode parentElem)
-               {
-                       if (this.design_isTGItem)
-                               return;
-                       base.getIML (doc, parentElem);
-                       if (child == null)
-                               return;
-                       child.getIML (doc, parentElem.LastChild);
-               }
-               #endif
-
-               #region CTOR
-               protected Container() : base(){}
-               public Container (Interface iface) : base(iface){}
-               #endregion
-
-               [XmlIgnore]public GraphicObject Child {
-                       get { return child; }
-                       set { base.SetChild(value); }
-               }
-               /// <summary>
-               /// override this to handle specific steps in child addition in derived class,
-               /// and don't forget to call the base.SetChild
-               /// </summary>
-               public virtual void SetChild(GraphicObject _child)
-               {
-                       base.SetChild (_child);
-               }
-       }
-}
-
diff --git a/src/GraphicObjects/DataSourceChangeEventArgs.cs b/src/GraphicObjects/DataSourceChangeEventArgs.cs
deleted file mode 100644 (file)
index a251935..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-//
-// DataSourceChangeEventArgs.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-using System;
-
-namespace Crow
-{
-       public class DataSourceChangeEventArgs : EventArgs
-       {
-               public object OldDataSource;
-               public object NewDataSource;
-
-               public DataSourceChangeEventArgs (object oldDataSource, object newDataSource) : base()
-               {
-                       OldDataSource = oldDataSource;
-                       NewDataSource = newDataSource;
-               }
-               public override string ToString ()
-               {
-                       return string.Format ("DSChangeEA: {0} => {1}", OldDataSource, NewDataSource);
-               }
-       }
-}
-
diff --git a/src/GraphicObjects/DirectoryView.cs b/src/GraphicObjects/DirectoryView.cs
deleted file mode 100644 (file)
index b021789..0000000
+++ /dev/null
@@ -1,136 +0,0 @@
-//
-// DirectoryView.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-using System.Xml.Serialization;
-using System.ComponentModel;
-using System.IO;
-using System.Collections.Generic;
-using System.Linq;
-
-namespace Crow
-{
-       /// <summary>
-       /// templated directory viewer
-       /// </summary>
-       public class DirectoryView : TemplatedControl
-       {
-               #region CTOR
-               protected DirectoryView() : base(){}
-               public DirectoryView (Interface iface) : base(iface){}
-               #endregion
-
-               #region events
-               public event EventHandler<SelectionChangeEventArgs> SelectedItemChanged;
-               #endregion
-
-               string currentDirectory = "/";
-               bool showFiles, showHidden;
-               string fileMask = "*.*";
-
-               object _selectedItem;
-               [XmlIgnore]public object SelectedItem {
-                       get {
-                               return _selectedItem;
-                       }
-                       set { 
-                               if (value == _selectedItem)
-                                       return;
-                               _selectedItem = value;
-                               NotifyValueChanged ("SelectedItem", _selectedItem);
-                       }
-               }
-               [DefaultValue(true)]
-               public virtual bool ShowFiles {
-                       get { return showFiles; }
-                       set {
-                               if (showFiles == value)
-                                       return;
-                               showFiles = value;
-                               NotifyValueChanged ("ShowFiles", showFiles);
-                               NotifyValueChanged ("FileSystemEntries", FileSystemEntries);
-                       }
-               }
-               [DefaultValue(false)]
-               public virtual bool ShowHidden {
-                       get { return showHidden; }
-                       set {
-                               if (showHidden == value)
-                                       return;
-                               showHidden = value;
-                               NotifyValueChanged ("ShowHidden", showHidden);
-                               NotifyValueChanged ("FileSystemEntries", FileSystemEntries);
-                       }
-               }
-               [DefaultValue("*.*")]
-               public virtual string FileMask {
-                       get { return fileMask; }
-                       set {
-                               if (fileMask == value)
-                                       return;
-                               fileMask = value;
-                               NotifyValueChanged ("FileMask", fileMask);
-                               NotifyValueChanged ("FileSystemEntries", FileSystemEntries);
-                       }
-               }
-               [DefaultValue("/")]
-               public virtual string CurrentDirectory {
-                       get { return currentDirectory; }
-                       set {
-                               if (currentDirectory == value)
-                                       return;
-                               currentDirectory = value;
-                               NotifyValueChanged ("CurrentDirectory", currentDirectory);
-                               NotifyValueChanged ("FileSystemEntries", FileSystemEntries);
-                       }
-               }
-               [XmlIgnore]public FileSystemInfo[] FileSystemEntries {
-                       get {
-                               try {
-                                       if (string.IsNullOrEmpty(CurrentDirectory))
-                                               return null;
-                                       DirectoryInfo di = new DirectoryInfo(CurrentDirectory);
-                                       List<FileSystemInfo> fi = new List<FileSystemInfo> (di.GetDirectories());
-                                       if (showFiles && !string.IsNullOrEmpty(fileMask))
-                                               fi.AddRange(di.GetFiles(fileMask));
-                                       return showHidden ?
-                                               fi.ToArray() :
-                                               fi.Where(f=>!f.Attributes.HasFlag (FileAttributes.Hidden)).ToArray();
-                               } catch (Exception ex) {
-                                       Console.WriteLine (ex.ToString ());
-                                       return null;
-                               }
-                       }
-               }
-               public void onSelectedItemChanged (object sender, SelectionChangeEventArgs e){
-                       if (e.NewValue == SelectedItem)
-                               return;
-                       SelectedItem = e.NewValue;
-                       SelectedItemChanged.Raise (this, e);
-               }
-       }
-}
-
diff --git a/src/GraphicObjects/DockStack.cs b/src/GraphicObjects/DockStack.cs
deleted file mode 100644 (file)
index 75f0d2b..0000000
+++ /dev/null
@@ -1,473 +0,0 @@
-//
-// DockStack.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp_bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-using System;
-using Crow.IML;
-using System.Linq;
-using System.Text;
-using System.IO;
-
-namespace Crow
-{
-       [DesignIgnore]
-       public class DockStack : GenericStack
-       {               
-               #region CTor
-               public DockStack ()     {}
-               public DockStack (Interface iface) : base (iface) {}
-               #endregion
-
-               /*static int color = 10;
-
-               protected override void onInitialized (object sender, EventArgs e)
-               {
-                       base.onInitialized (sender, e);
-                       Background = Color.ColorDic.Values.ToList()[color++];
-               }*/
-               public override void AddChild (GraphicObject g)
-               {
-                       base.AddChild (g);
-                       if (localLogicalParentIsNull)
-                               g.LogicalParent = this;
-                       else
-                               g.LogicalParent = this.LogicalParent;
-               }
-               public override void InsertChild (int idx, GraphicObject g)
-               {
-                       base.InsertChild (idx, g);
-                       g.LogicalParent = this.LogicalParent;
-               }
-
-               public override bool PointIsIn (ref Point m)
-               {                       
-                       if (!base.PointIsIn(ref m))
-                               return false;
-
-                       Group p = Parent as Group;
-                       if (p != null) {
-                               childrenRWLock.EnterReadLock ();
-                               for (int i = p.Children.Count - 1; i >= 0; i--) {
-                                       if (p.Children [i] == this)
-                                               break;
-                                       if (p.Children [i].IsDragged)
-                                               continue;
-                                       if (p.Children [i].Slot.ContainsOrIsEqual (m)) {
-                                               childrenRWLock.ExitReadLock ();
-                                               return false;
-                                       }
-                               }
-                               childrenRWLock.ExitReadLock ();
-                       }
-
-                       return Slot.ContainsOrIsEqual(m);
-               }
-
-//             public override void OnLayoutChanges (LayoutingType layoutType)
-//             {
-//                     base.OnLayoutChanges (layoutType);
-//
-//                     if ((layoutType & LayoutingType.Sizing) > 0)
-//                             computeRects();                 
-//             }
-
-               Rectangle rIn = default(Rectangle);
-               double dockThresh = 0.2;
-               GraphicObject focusedChild;
-               internal GraphicObject stretchedChild;
-
-               void getFocusedChild (Point lm) {
-                       Rectangle cb = ClientRectangle;
-
-                       childrenRWLock.EnterReadLock ();
-                       foreach (GraphicObject c in Children) {
-                               Rectangle bounds = c.Slot + cb.Position;
-                               if (!bounds.ContainsOrIsEqual (lm))
-                                       continue;
-                               rIn = bounds;
-                               focusedChild = c;
-                               break;
-                       }
-                       childrenRWLock.ExitReadLock ();                 
-               }
-
-               public override void onMouseMove (object sender, MouseMoveEventArgs e)
-               {
-                       if (IsDropTarget) {                             
-                               DockWindow dw = IFace.DragAndDropOperation.DragSource as DockWindow;
-                               if (dw == null || dw.IsDocked) {
-                                       base.onMouseMove (sender, e);
-                                       return;
-                               }
-
-                               Alignment curDockPos = dw.DockingPosition;
-                               dw.DockingPosition = Alignment.Undefined;
-
-                               Rectangle cb = ClientRectangle;
-                               Point lm = ScreenPointToLocal (e.Position);
-
-                               if (Children.Count == 0) {
-                                       Rectangle r = cb;
-                                       r.Inflate (r.Width / -5, r.Height / -5);
-                                       if (r.ContainsOrIsEqual(lm))
-                                               dw.DockingPosition = Alignment.Center;
-                               } else {
-                                       rIn = cb;
-
-                                       if (Orientation == Orientation.Horizontal || Children.Count == 1) {
-                                               if (lm.Y > cb.Top + cb.Height / 3 && lm.Y < cb.Bottom - cb.Height / 3) {
-                                                       if (lm.X < cb.Left + cb.Width / 3)
-                                                               dw.DockingPosition = Alignment.Left;
-                                                       else if (lm.X > cb.Right - cb.Width / 3)
-                                                               dw.DockingPosition = Alignment.Right;                                                   
-                                               } else {
-                                                       getFocusedChild (lm);
-                                                       if (focusedChild != null) {
-                                                               if (lm.Y < rIn.Top + rIn.Height / 3)
-                                                                       dw.DockingPosition = Alignment.Top;
-                                                               else if (lm.Y > rIn.Bottom - rIn.Height / 3)
-                                                                       dw.DockingPosition = Alignment.Bottom;                                                                          
-                                                       }
-                                               }
-                                       }
-                                       if (Orientation == Orientation.Vertical || Children.Count == 1) {
-                                               if (lm.X > cb.Left + cb.Width / 3 && lm.X < cb.Right - cb.Width / 3) {
-                                                       if (lm.Y < cb.Top + cb.Height / 3)
-                                                               dw.DockingPosition = Alignment.Top;
-                                                       else if (lm.Y > cb.Bottom - cb.Height / 3)
-                                                               dw.DockingPosition = Alignment.Bottom;                                                  
-                                               } else {
-                                                       getFocusedChild (lm);
-                                                       if (focusedChild != null) {
-                                                               if (lm.X < rIn.Left + rIn.Width / 3)
-                                                                       dw.DockingPosition = Alignment.Left;
-                                                               else if (lm.X > rIn.Right - rIn.Width / 3)
-                                                                       dw.DockingPosition = Alignment.Right;                                                                           
-                                                       }
-                                               }
-                                       }
-                               }
-
-                               if (curDockPos != dw.DockingPosition)
-                                       RegisterForGraphicUpdate ();
-                       }
-                       base.onMouseMove (sender, e);
-               }
-
-               protected override void onDragEnter (object sender, DragDropEventArgs e)
-               {
-                       base.onDragEnter (sender, e);
-                       RegisterForGraphicUpdate ();
-               }
-               protected override void onDragLeave (object sender, DragDropEventArgs e)
-               {
-                       DockWindow dw = e.DragSource as DockWindow;
-                       //if (dw != null)
-                       //      dw.DockingPosition = Alignment.Undefined;
-                       base.onDragLeave (sender, e);
-                       RegisterForGraphicUpdate ();
-               }
-
-               protected override void onDraw (Cairo.Context gr)
-               {
-                       gr.Save ();
-
-                       Rectangle rBack = new Rectangle (Slot.Size);
-
-                       Background.SetAsSource (gr, rBack);
-                       CairoHelpers.CairoRectangle (gr, rBack, CornerRadius);
-                       gr.Fill ();
-
-                       if (ClipToClientRect) {
-                               //clip to client zone
-                               CairoHelpers.CairoRectangle (gr, ClientRectangle, CornerRadius);
-                               gr.Clip ();
-                       }
-
-                       childrenRWLock.EnterReadLock ();
-
-                       foreach (GraphicObject g in Children)
-                               g.Paint (ref gr);                       
-
-                       childrenRWLock.ExitReadLock ();
-
-
-                       if (!IsDropTarget) {
-                               gr.Restore ();
-                               return;
-                       }
-
-                       DockWindow dw = IFace.DragAndDropOperation.DragSource as DockWindow;
-                       if (dw == null)
-                               return;
-                       if (!dw.IsDocked) {
-                               Rectangle cb = ClientRectangle;
-                               double minDim = Math.Min (cb.Width, cb.Height);
-
-                               Rectangle r = rIn;
-                               if (Children.Count <= 1 || dw.DockingPosition.GetOrientation()==Orientation )
-                                       r = cb;
-
-                               switch (dw.DockingPosition) {
-                               case Alignment.Top:
-                                       gr.Rectangle (r.Left, r.Top, r.Width, r.Height * dockThresh);
-                                       break;
-                               case Alignment.Bottom:
-                                       gr.Rectangle (r.Left, r.Bottom - r.Height * dockThresh, r.Width, r.Height * dockThresh);
-                                       break;
-                               case Alignment.Left:
-                                       gr.Rectangle (r.Left, r.Top, r.Width * dockThresh, r.Height);
-                                       break;
-                               case Alignment.Right:
-                                       gr.Rectangle (r.Right - r.Width * dockThresh, r.Top, r.Width * dockThresh, r.Height);
-                                       break;
-                               case Alignment.Center:
-                                       r.Inflate ((int)Math.Ceiling (Math.Min (r.Width, r.Height) * -0.05));
-                                       gr.Rectangle (r);
-                                       break;
-                               }
-                               gr.LineWidth = 1;
-                               gr.SetSourceRGBA (0.4, 0.4, 0.9, 0.4);
-                               gr.FillPreserve ();
-                               gr.SetSourceRGBA (0.9, 0.9, 1.0, 0.8);
-                               gr.Stroke ();
-                       }
-                       gr.Restore ();  
-               }
-                       
-               public void Dock(DockWindow dw){
-                       DockStack activeStack = this;
-
-                       if (Children.Count == 1) {
-                               Orientation = dw.DockingPosition.GetOrientation ();
-                               if (Children [0] is DockWindow) {
-                                       (Children [0] as DockWindow).DockingPosition = dw.DockingPosition.GetOpposite ();
-                               }
-                       } else if (Children.Count > 0 && dw.DockingPosition.GetOrientation () != Orientation) {
-                               activeStack = new DockStack (IFace);
-                               activeStack.Orientation = dw.DockingPosition.GetOrientation ();
-                               activeStack.Width = focusedChild.Width;
-                               activeStack.Height = focusedChild.Height;
-                               int idx = Children.IndexOf (focusedChild);
-                               RemoveChild (focusedChild);
-                               focusedChild.Height = Measure.Stretched;
-                               focusedChild.Width = Measure.Stretched;
-                               InsertChild (idx, activeStack);
-                               activeStack.AddChild (focusedChild);
-                               activeStack.stretchedChild = focusedChild;
-                               if (focusedChild is DockWindow)
-                                       (focusedChild as DockWindow).DockingPosition = dw.DockingPosition.GetOpposite ();
-                               focusedChild = null;
-                       }
-
-                       Rectangle r = ClientRectangle;
-                       int vTreshold = (int)(r.Height * dockThresh);
-                       int hTreshold = (int)(r.Width * dockThresh);
-
-                       Console.WriteLine ("Docking {0} as {2} in {1}", dw.Name, activeStack.Name, dw.DockingPosition);
-                       switch (dw.DockingPosition) {
-                       case Alignment.Top:                                             
-                               dw.Height = vTreshold;
-                               dw.Width = Measure.Stretched;
-                               activeStack.InsertChild (0, dw);
-                               activeStack.InsertChild (1, new Splitter(IFace));
-                               break;
-                       case Alignment.Bottom:
-                               dw.Height = vTreshold;
-                               dw.Width = Measure.Stretched;
-                               activeStack.AddChild (new Splitter(IFace));
-                               activeStack.AddChild (dw);
-                               break;
-                       case Alignment.Left:
-                               dw.Width = hTreshold;
-                               dw.Height = Measure.Stretched;
-                               activeStack.InsertChild (0, dw);
-                               activeStack.InsertChild (1, new Splitter(IFace));
-                               break;
-                       case Alignment.Right:
-                               dw.Width = hTreshold;
-                               dw.Height = Measure.Stretched;
-                               activeStack.AddChild (new Splitter(IFace));
-                               activeStack.AddChild (dw);
-                               break;
-                       case Alignment.Center:
-                               dw.Width = dw.Height = Measure.Stretched;
-                               AddChild (dw);
-                               stretchedChild = dw;
-                               break;
-                       }
-               }
-               public void Undock (DockWindow dw){                     
-                       int idx = Children.IndexOf(dw);
-
-                       Console.WriteLine ("undocking child index: {0} ; name={1}; pos:{2} ; childcount:{3}",idx, dw.Name, dw.DockingPosition, Children.Count);
-
-                       RemoveChild(dw);
-
-                       if (Children.Count == 0)
-                               return;
-                       
-                       if (dw.DockingPosition == Alignment.Left || dw.DockingPosition == Alignment.Top) {                              
-                               RemoveChild (idx);
-                               if (stretchedChild == dw) {
-                                       stretchedChild = Children [idx];
-                                       stretchedChild.Width = stretchedChild.Height = Measure.Stretched;
-                               }
-                       } else {
-                               RemoveChild (idx - 1);
-                               if (stretchedChild == dw) {
-                                       stretchedChild = Children [idx-2];
-                                       stretchedChild.Width = stretchedChild.Height = Measure.Stretched;
-                               }
-                       }
-
-                       if (Children.Count == 1) {
-                               DockStack dsp = Parent as DockStack;
-                               if (dsp == null) {
-                                       Children [0].Width = Children [0].Height = Measure.Stretched;
-                                       return;
-                               }                               
-                               //remove level and move remaining obj to level above
-                               GraphicObject g = Children [0];
-                               RemoveChild (g);
-                               idx = dsp.Children.IndexOf (this);
-                               dsp.RemoveChild (this);
-                               dsp.InsertChild (idx, g);
-                               g.Width = this.Width;
-                               g.Height = this.Height;
-                               if (dsp.stretchedChild == this)
-                                       dsp.stretchedChild = g;
-                               dsp.checkAlignments ();
-                       } else
-                               checkAlignments ();
-               }
-
-               internal void checkAlignments () {
-                       DockWindow dw = Children[0] as DockWindow;
-                       if (dw != null)
-                               dw.DockingPosition = (Orientation == Orientation.Horizontal ? Alignment.Left : Alignment.Top);
-                       dw = Children[Children.Count - 1] as DockWindow;
-                       if (dw != null)
-                               dw.DockingPosition = (Orientation == Orientation.Horizontal ? Alignment.Right : Alignment.Bottom);
-               }
-
-               //read next value in config string until next ';'
-               string getConfAttrib (string conf, ref int i) {
-                       int nextI = conf.Substring (i).IndexOf (';');
-                       string tmp = conf.Substring (i, nextI);
-                       i += nextI + 1;
-                       return tmp;
-               }
-               /// <summary>
-               /// Imports the config.
-               /// </summary>
-               /// <param name="conf">Conf.</param>
-               /// <param name="dataSource">Data source for the docked windows</param>
-               public void ImportConfig (string conf, object dataSource = null) {
-                       lock (IFace.UpdateMutex) {
-                               ClearChildren ();
-                               stretchedChild = null;
-                               int i = 0;
-                               Orientation = (Orientation)Enum.Parse (typeof(Orientation), getConfAttrib (conf, ref i));
-                               importConfig (conf, ref i, dataSource);
-                       }
-               }
-               public string ExportConfig () {
-                       return Orientation.ToString() + ";" + exportConfig();
-               }
-               void importConfig (string conf, ref int i, object dataSource) {                                         
-                       if (conf [i++] != '(')
-                               return;                 
-                       while (i < conf.Length - 4) {
-                               string sc = conf.Substring (i, 4);
-                               i += 4;
-                               switch (sc) {
-                               case "WIN;":
-                                       DockWindow dw = null;
-                                       string wName = getConfAttrib (conf, ref i);
-                                       try {
-                                               dw = IFace.Load (wName) as DockWindow;  
-                                       } catch {
-                                               dw = new DockWindow (IFace);
-                                       }
-
-                                       dw.Name = wName;
-                                       dw.Width = Measure.Parse (getConfAttrib (conf, ref i));
-                                       dw.Height = Measure.Parse (getConfAttrib (conf, ref i));
-                                       dw.DockingPosition = (Alignment)Enum.Parse (typeof(Alignment), getConfAttrib (conf, ref i));
-                                       dw.savedSlot = Rectangle.Parse (getConfAttrib (conf, ref i));
-                                       dw.wasResizable = Boolean.Parse (getConfAttrib (conf, ref i));
-
-                                       dw.IsDocked = true;
-                                       dw.DataSource = dataSource;
-                                       this.AddChild (dw);
-
-                                       break;
-                               case "STK;":
-                                       DockStack ds = new DockStack (IFace);
-                                       ds.Width = Measure.Parse (getConfAttrib (conf, ref i));
-                                       ds.Height = Measure.Parse (getConfAttrib (conf, ref i));
-                                       ds.Orientation = (Orientation)Enum.Parse (typeof(Orientation), getConfAttrib (conf, ref i));
-
-                                       this.AddChild (ds);
-
-                                       ds.importConfig (conf, ref i, dataSource);
-                                       break;
-                               case "SPL;":
-                                       Splitter sp = new Splitter (IFace);
-                                       sp.Width = Measure.Parse (getConfAttrib (conf, ref i));
-                                       sp.Height = Measure.Parse (getConfAttrib (conf, ref i));
-                                       sp.Thickness = int.Parse (getConfAttrib (conf, ref i));
-                                       this.AddChild (sp);
-                                       break;
-                               }
-                               char nextC = conf [i++];
-                               if (nextC == ')')
-                                       break;
-                       }
-               }
-               string exportConfig () {
-                       StringBuilder tmp = new StringBuilder("(");
-
-                       for (int i = 0; i < Children.Count; i++) {
-                               if (Children [i] is DockWindow) {
-                                       DockWindow dw = Children [i] as DockWindow;
-                                       tmp.Append (string.Format("WIN;{0};{1};{2};{3};{4};{5};",dw.Name, dw.Width, dw.Height, dw.DockingPosition, dw.savedSlot, dw.wasResizable));
-                               } else if (Children [i] is DockStack) {
-                                       DockStack ds = Children [i] as DockStack;
-                                       tmp.Append (string.Format("STK;{0};{1};{2};{3}", ds.Width, ds.Height, ds.Orientation, ds.exportConfig()));
-                               } else if (Children [i] is Splitter) {
-                                       Splitter sp = Children [i] as Splitter;
-                                       tmp.Append (string.Format("SPL;{0};{1};{2};", sp.Width, sp.Height, sp.Thickness));
-                               }                                       
-                               if (i < Children.Count - 1)
-                                       tmp.Append ("|");                               
-                       }
-
-                       tmp.Append (")");
-                       return tmp.ToString ();
-               }
-       }
-}
-
diff --git a/src/GraphicObjects/DockWindow.cs b/src/GraphicObjects/DockWindow.cs
deleted file mode 100644 (file)
index e368db5..0000000
+++ /dev/null
@@ -1,173 +0,0 @@
-//
-// DockingView.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-using System;
-using System.Xml.Serialization;
-
-namespace Crow
-{
-       public class DockWindow : Window
-       {
-               #region CTOR
-               public DockWindow () {}
-               public DockWindow (Interface iface) : base (iface) {}
-               #endregion
-
-               int undockThreshold = 10;
-               bool isDocked = false;
-               Alignment docking = Alignment.Undefined;
-
-               Point undockingMousePosOrig; //mouse pos when docking was donne, use for undocking on mouse move
-               internal Rectangle savedSlot;   //last undocked slot recalled when view is undocked
-               internal bool wasResizable;
-
-               public bool IsDocked {
-                       get { return isDocked; }
-                       set {
-                               if (isDocked == value)
-                                       return;
-                               isDocked = value;
-                               NotifyValueChanged ("IsDocked", isDocked);
-                               NotifyValueChanged ("IsFloating", !isDocked);
-                       }
-               }
-               [XmlIgnore] public bool IsFloating { get { return !isDocked; }}
-
-               public Alignment DockingPosition {
-                       get { return docking; }
-                       set {
-                               if (docking == value)
-                                       return;
-                               docking = value;
-                               NotifyValueChanged ("DockingPosition", DockingPosition);
-                       }
-               }
-               public override bool PointIsIn (ref Point m)
-               {                       
-                       if (!base.PointIsIn(ref m))
-                               return false;
-
-                       Group p = Parent as Group;
-                       if (p != null) {
-                               lock (p.Children) {
-                                       for (int i = p.Children.Count - 1; i >= 0; i--) {
-                                               if (p.Children [i] == this)
-                                                       break;
-                                               if (p.Children [i].IsDragged)
-                                                       continue;
-                                               if (p.Children [i].Slot.ContainsOrIsEqual (m)) {                                                
-                                                       return false;
-                                               }
-                                       }
-                               }
-                       }
-                       return Slot.ContainsOrIsEqual(m);
-               }
-
-               public override void onMouseMove (object sender, MouseMoveEventArgs e)
-               {
-//                     if (this.HasFocus && e.Mouse.IsButtonDown (MouseButton.Left) && IsDocked) {
-//                             if (Math.Abs (e.Position.X - undockingMousePosOrig.X) > 10 ||
-//                                 Math.Abs (e.Position.X - undockingMousePosOrig.X) > 10)
-//                                     Undock ();
-//                     }
-
-                       if (this.HasFocus && e.Mouse.IsButtonDown (MouseButton.Left) && IsDocked)
-                               CheckUndock (e.Position);
-
-                       base.onMouseMove (sender, e);
-               }
-               public override void onMouseDown (object sender, MouseButtonEventArgs e)
-               {
-                       base.onMouseDown (sender, e);
-
-                       if (this.HasFocus && IsDocked && e.Button == MouseButton.Left)
-                               undockingMousePosOrig = e.Position;
-               }
-               public bool CheckUndock (Point mousePos) {
-                       //if (DockingPosition == Alignment.Center)
-                       //      return false;
-                       if (Math.Abs (mousePos.X - undockingMousePosOrig.X) < undockThreshold ||
-                           Math.Abs (mousePos.X - undockingMousePosOrig.X) < undockThreshold)
-                               return false;
-                       Undock ();
-                       return true;
-               }
-
-               protected override void onStartDrag (object sender, DragDropEventArgs e)
-               {
-                       base.onStartDrag (sender, e);
-
-                       undockingMousePosOrig = IFace.Mouse.Position;
-               }
-               protected override void onDrop (object sender, DragDropEventArgs e)
-               {
-                       if (!isDocked && DockingPosition != Alignment.Undefined && e.DropTarget is DockStack)
-                               Dock (e.DropTarget as DockStack);
-                       base.onDrop (sender, e);
-               }
-               public void Undock () {
-                       lock (IFace.UpdateMutex) {
-                               DockStack ds = Parent as DockStack;
-                               ds.Undock (this);
-
-                               IFace.AddWidget (this);
-
-                               Left = savedSlot.Left;
-                               Top = savedSlot.Top;
-                               Width = savedSlot.Width;
-                               Height = savedSlot.Height;
-
-                               IsDocked = false;
-                               DockingPosition = Alignment.Undefined;
-                               Resizable = wasResizable;
-                       }
-               }
-
-               public void Dock (DockStack target){
-                       lock (IFace.UpdateMutex) {
-                               IsDocked = true;
-                               //undockingMousePosOrig = lastMousePos;
-                               savedSlot = this.LastPaintedSlot;
-                               wasResizable = Resizable;
-                               Resizable = false;
-                               LastSlots = LastPaintedSlot = Slot = default(Rectangle);
-                               Left = Top = 0;
-
-                               IFace.RemoveWidget (this);
-
-                               target.Dock (this);
-                       }
-               }
-
-               protected override void close ()
-               {
-                       if (isDocked)
-                               Undock ();
-                       base.close ();
-               }
-       }
-}
-
diff --git a/src/GraphicObjects/Expandable.cs b/src/GraphicObjects/Expandable.cs
deleted file mode 100644 (file)
index 89bec19..0000000
+++ /dev/null
@@ -1,131 +0,0 @@
-//
-// Expandable.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-using System.ComponentModel;
-using System.Xml.Serialization;
-
-namespace Crow
-{
-       /// <summary>
-       /// templated control whose content can be hidden and shown on demand
-       /// </summary>
-    public class Expandable : TemplatedContainer
-    {
-               #region CTOR
-               protected Expandable() : base(){}
-               public Expandable (Interface iface) : base(iface){}
-               #endregion
-
-               #region Private fields
-               bool _isExpanded;
-               string image;
-               #endregion
-
-               #region Event Handlers
-               /// <summary>
-               /// Occurs when control is expanded.
-               /// </summary>
-               public event EventHandler Expand;
-               /// <summary>
-               /// Occurs when control is collapsed.
-               /// </summary>
-               public event EventHandler Collapse;
-               #endregion
-
-               public BooleanTestOnInstance GetIsExpandable;
-
-               /// <summary>
-               /// mouse click event handler for easy expand triggering in IML
-               /// </summary>
-               public void onClickForExpand (object sender, MouseButtonEventArgs e)
-               {
-                       IsExpanded = !IsExpanded;
-               }
-
-               #region Public properties
-               [DefaultValue("#Crow.Images.Icons.expandable.svg")]
-               public string Image {
-                       get { return image; }
-                       set {
-                               if (image == value)
-                                       return;
-                               image = value;
-                               NotifyValueChanged ("Image", image);
-                       }
-               }
-               [DefaultValue(false)]
-        public bool IsExpanded
-        {
-                       get { return _isExpanded; }
-            set
-            {
-                               if (value == _isExpanded)
-                                       return;
-
-                               _isExpanded = value;
-
-                               bool isExp = IsExpandable;
-                               NotifyValueChanged ("IsExpandable", isExp);
-                               if (!isExp)
-                                       _isExpanded = false;
-
-                               NotifyValueChanged ("IsExpanded", _isExpanded);
-
-                               if (_isExpanded)
-                                       onExpand (this, null);
-                               else
-                                       onCollapse (this, null);
-            }
-        }
-               [XmlIgnore]public bool IsExpandable {
-                       get {
-                               try {
-                                       return GetIsExpandable == null ? true : GetIsExpandable (this);
-                               } catch (Exception ex) {
-                                       System.Diagnostics.Debug.WriteLine ("Not Expandable error: " + ex.ToString ());
-                                       return false;
-                               }
-                       }
-               }
-               #endregion
-
-               public virtual void onExpand(object sender, EventArgs e)
-               {
-                       if (_contentContainer != null)
-                               _contentContainer.Visible = true;
-
-                       Expand.Raise (this, e);
-               }
-               public virtual void onCollapse(object sender, EventArgs e)
-               {
-                       if (_contentContainer != null)
-                               _contentContainer.Visible = false;
-
-                       Collapse.Raise (this, e);
-               }
-       }
-}
diff --git a/src/GraphicObjects/FileDialog.cs b/src/GraphicObjects/FileDialog.cs
deleted file mode 100644 (file)
index db66ae9..0000000
+++ /dev/null
@@ -1,155 +0,0 @@
-//
-// FileDialog.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-using System.Xml.Serialization;
-using System.ComponentModel;
-using System.IO;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.Linq;
-using System.Text.RegularExpressions;
-
-namespace Crow
-{
-       /// <summary>
-       /// templated control for selecting files
-       /// </summary>
-       public class FileDialog: Window
-       {
-               #region CTOR
-               protected FileDialog() : base(){}
-               public FileDialog (Interface iface) : base(iface){}
-               #endregion
-
-               string searchPattern, curDir, _selectedFile, _selectedDir;
-               bool showHidden, showFiles;
-
-               #region events
-               public event EventHandler OkClicked;
-               #endregion
-
-               public string SelectedFileFullPath {
-                       get { return Path.Combine (SelectedDirectory, SelectedFile); }
-               }
-               [DefaultValue("/home")]
-               public virtual string CurrentDirectory {
-                       get { return curDir; }
-                       set {
-                               if (curDir == value)
-                                       return;
-                               curDir = value;
-                               NotifyValueChanged ("CurrentDirectory", curDir);
-                               SelectedDirectory = curDir;
-                       }
-               }
-
-               [DefaultValue("*")]
-               public virtual string SearchPattern {
-                       get { return searchPattern; }
-                       set {
-                               if (searchPattern == value)
-                                       return;
-                               searchPattern = value;
-                               NotifyValueChanged ("SearchPattern", searchPattern);
-
-                       }
-               }
-               [DefaultValue(false)]
-               public virtual bool ShowHidden {
-                       get { return showHidden; }
-                       set {
-                               if (showHidden == value)
-                                       return;
-                               showHidden = value;
-                               NotifyValueChanged ("ShowHidden", showHidden);
-                       }
-               }
-               [DefaultValue(true)]
-               public virtual bool ShowFiles {
-                       get { return showFiles; }
-                       set {
-                               if (showFiles == value)
-                                       return;
-                               showFiles = value;
-                               NotifyValueChanged ("ShowFiles", showFiles);
-                       }
-               }
-               public string SelectedFile {
-                       get { return _selectedFile; }
-                       set {
-                               if (value == _selectedFile)
-                                       return;
-                               _selectedFile = value;
-                               NotifyValueChanged ("SelectedFile", _selectedFile);
-                       }
-               }
-               public string SelectedDirectory {
-                       get { return _selectedDir; }
-                       set {
-                               if (value == _selectedDir)
-                                       return;
-                               _selectedDir = value;
-                               NotifyValueChanged ("SelectedDirectory", _selectedDir);
-                       }
-               }
-
-               public void onFVSelectedItemChanged (object sender, SelectionChangeEventArgs e){
-                       if (e.NewValue != null) {
-                               if (File.GetAttributes (e.NewValue.ToString ()).HasFlag (FileAttributes.Directory)) {
-                                       SelectedDirectory = e.NewValue.ToString ();
-                                       SelectedFile = "";
-                               } else {
-                                       SelectedDirectory = Path.GetDirectoryName (e.NewValue.ToString ());
-                                       SelectedFile = Path.GetFileName (e.NewValue.ToString ());
-                               }
-                       }
-               }
-               public void onDVSelectedItemChanged (object sender, SelectionChangeEventArgs e){
-                       if (e.NewValue != null)
-                               SelectedDirectory = e.NewValue.ToString();
-               }
-               public void goUpDirClick (object sender, MouseButtonEventArgs e){
-                       string root = Directory.GetDirectoryRoot(CurrentDirectory);
-                       if (CurrentDirectory == root)
-                               return;
-                       CurrentDirectory = Directory.GetParent(CurrentDirectory).FullName;
-               }
-               void onFileSelect(object sender, MouseButtonEventArgs e){
-                       if (string.IsNullOrEmpty (SelectedFile))
-                               CurrentDirectory = SelectedDirectory;
-                       else {
-                               OkClicked.Raise (this, null);
-                               IFace.DeleteWidget (this);
-                       }
-               }
-               void onCancel(object sender, MouseButtonEventArgs e){
-                       IFace.DeleteWidget (this);
-               }
-
-       }
-}
-
diff --git a/src/GraphicObjects/GenericStack.cs b/src/GraphicObjects/GenericStack.cs
deleted file mode 100644 (file)
index 50c66c3..0000000
+++ /dev/null
@@ -1,252 +0,0 @@
-//
-// GenericStack.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System.ComponentModel;
-using System.Diagnostics;
-using System.Xml.Serialization;
-using System;
-using System.Linq;
-
-namespace Crow
-{
-       /// <summary>
-       /// group container that stacked its children horizontally or vertically
-       /// </summary>
-       public class GenericStack : Group
-    {
-               #region CTOR
-               protected GenericStack() : base(){}
-               public GenericStack(Interface iface) : base(iface){}
-               #endregion
-
-               #region Private fields
-        int _spacing;
-        Orientation _orientation;
-               #endregion
-
-               #region Public Properties
-        [DefaultValue(2)]
-        public int Spacing
-        {
-                       get { return _spacing; }
-            set { 
-                               if (_spacing == value)
-                                       return;
-                               _spacing = value; 
-                               NotifyValueChanged ("Spacing", Spacing);
-                               RegisterForLayouting (LayoutingType.Sizing|LayoutingType.ArrangeChildren);
-                       }
-        }
-        [DefaultValue(Orientation.Horizontal)]
-        public virtual Orientation Orientation
-        {
-            get { return _orientation; }
-            set { _orientation = value; }
-        }
-               #endregion
-
-               #region GraphicObject Overrides
-               public override bool ArrangeChildren { get { return true; } }
-               public override void ChildrenLayoutingConstraints (ref LayoutingType layoutType)
-               {
-                       //Prevent child repositionning in the direction of stacking
-                       if (Orientation == Orientation.Horizontal)
-                               layoutType &= (~LayoutingType.X);
-                       else
-                               layoutType &= (~LayoutingType.Y);                       
-               }
-               protected override int measureRawSize (LayoutingType lt)
-               {
-                       int totSpace = Math.Max(0, Spacing * (Children.Count (c => c.Visible) - 1));
-                       if (lt == LayoutingType.Width) {
-                               if (Orientation == Orientation.Horizontal)
-                                       return contentSize.Width + totSpace + 2 * Margin;
-                       }else if (Orientation == Orientation.Vertical)
-                               return contentSize.Height + totSpace + 2 * Margin;                                                      
-                       
-                       return base.measureRawSize (lt);
-               }
-               public virtual void ComputeChildrenPositions()
-               {
-                       int d = 0;
-                       if (Orientation == Orientation.Horizontal) {
-                               foreach (GraphicObject c in Children) {
-                                       if (!c.Visible)
-                                               continue;
-                                       c.Slot.X = d;
-                                       d += c.Slot.Width + Spacing;
-                               }
-                       } else {
-                               foreach (GraphicObject c in Children) {
-                                       if (!c.Visible)
-                                               continue;                                       
-                                       c.Slot.Y = d;
-                                       d += c.Slot.Height + Spacing;
-                               }
-                       }
-                       IsDirty = true;
-               }
-               GraphicObject stretchedGO = null;
-               public override bool UpdateLayout (LayoutingType layoutType)
-        {
-                       RegisteredLayoutings &= (~layoutType);
-
-                       if (layoutType == LayoutingType.ArrangeChildren) {
-                               //allow 1 child to have size to 0 if stack has fixed or streched size policy,
-                               //this child will occupy remaining space
-                               //if stack size policy is Fit, no child may have stretch enabled
-                               //in the direction of stacking.
-                               ComputeChildrenPositions ();
-
-                               //if no layouting remains in queue for item, registre for redraw
-                               if (RegisteredLayoutings == LayoutingType.None && IsDirty)
-                                       IFace.EnqueueForRepaint (this);
-
-                               return true;
-                       }
-
-                       return base.UpdateLayout(layoutType);
-        }
-
-               void adjustStretchedGo (LayoutingType lt){
-                       if (stretchedGO == null)
-                               return;
-                       if (lt == LayoutingType.Width) {
-                               int newW = Math.Max (
-                                                  this.ClientRectangle.Width - contentSize.Width - Spacing * (Children.Count - 1),
-                                                  stretchedGO.MinimumSize.Width);
-                               if (stretchedGO.MaximumSize.Width > 0)
-                                       newW = Math.Min (newW, stretchedGO.MaximumSize.Width);
-                               if (newW != stretchedGO.Slot.Width) {                                                   
-                                       stretchedGO.Slot.Width = newW;
-                                       stretchedGO.IsDirty = true;
-                                       #if DEBUG_LAYOUTING
-                               Debug.WriteLine ("\tAdjusting Width of " + stretchedGO.ToString());
-                                       #endif
-                                       stretchedGO.LayoutChanged -= OnChildLayoutChanges;
-                                       stretchedGO.OnLayoutChanges (LayoutingType.Width);
-                                       stretchedGO.LayoutChanged += OnChildLayoutChanges;
-                                       stretchedGO.LastSlots.Width = stretchedGO.Slot.Width;
-                               }
-                       } else {
-                               int newH = Math.Max (
-                                       this.ClientRectangle.Height - contentSize.Height - Spacing * (Children.Count - 1),
-                                       stretchedGO.MinimumSize.Height);
-                               if (stretchedGO.MaximumSize.Height > 0)
-                                       newH = Math.Min (newH, stretchedGO.MaximumSize.Height);
-                               if (newH != stretchedGO.Slot.Height) {
-                                       stretchedGO.Slot.Height = newH;
-                                       stretchedGO.IsDirty = true;
-                                       #if DEBUG_LAYOUTING
-                                       Debug.WriteLine ("\tAdjusting Height of " + stretchedGO.ToString());
-                                       #endif
-                                       stretchedGO.LayoutChanged -= OnChildLayoutChanges;
-                                       stretchedGO.OnLayoutChanges (LayoutingType.Height);
-                                       stretchedGO.LayoutChanged += OnChildLayoutChanges;
-                                       stretchedGO.LastSlots.Height = stretchedGO.Slot.Height;
-                               }                               
-                       }
-               }
-
-               public override void OnChildLayoutChanges (object sender, LayoutingEventArgs arg)
-               {
-                       GraphicObject go = sender as GraphicObject;
-                       //Debug.WriteLine ("child layout change: " + go.LastSlots.ToString() + " => " + go.Slot.ToString());
-                       switch (arg.LayoutType) {
-                       case LayoutingType.Width:
-                               if (Orientation == Orientation.Horizontal) {
-                                       if (go.Width == Measure.Stretched) {
-                                               if (stretchedGO == null && Width != Measure.Fit)
-                                                       stretchedGO = go;
-                                               else if (stretchedGO != go) {
-                                                       go.Slot.Width = 0;
-                                                       go.Width = Measure.Fit;
-                                                       return;
-                                               }
-                                       } else
-                                               contentSize.Width += go.Slot.Width - go.LastSlots.Width;
-
-                                       adjustStretchedGo (LayoutingType.Width);                                        
-                                       
-                                       if (Width == Measure.Fit)
-                                               this.RegisterForLayouting (LayoutingType.Width);
-                                       
-                                       this.RegisterForLayouting (LayoutingType.ArrangeChildren);
-                                       return;
-                               }
-                               break;
-                       case LayoutingType.Height:
-                               if (Orientation == Orientation.Vertical) {
-                                       if (go.Height == Measure.Stretched) {
-                                               if (stretchedGO == null && Height != Measure.Fit)
-                                                       stretchedGO = go;
-                                               else if (stretchedGO != go){
-                                                       go.Slot.Height = 0;
-                                                       go.Height = Measure.Fit;
-                                                       return;
-                                               }
-                                       } else
-                                               contentSize.Height += go.Slot.Height - go.LastSlots.Height;
-                                       
-                                       adjustStretchedGo (LayoutingType.Height);
-
-                                       if (Height == Measure.Fit)
-                                               this.RegisterForLayouting (LayoutingType.Height);
-
-                                       this.RegisterForLayouting (LayoutingType.ArrangeChildren);
-                                       return;
-                               }
-                               break;
-                       }
-                       base.OnChildLayoutChanges (sender, arg);
-               }
-               #endregion
-
-       public override void RemoveChild (GraphicObject child)
-               {
-                       if (child != stretchedGO) {
-                               if (Orientation == Orientation.Horizontal)
-                                       contentSize.Width -= child.LastSlots.Width;
-                               else 
-                                       contentSize.Height -= child.LastSlots.Height;                           
-                       }
-                       base.RemoveChild (child);
-                       if (child == stretchedGO) {
-                               stretchedGO = null;
-                               RegisterForLayouting (LayoutingType.Sizing);
-                       }else if (Orientation == Orientation.Horizontal)                                
-                               adjustStretchedGo (LayoutingType.Width);
-                       else                            
-                               adjustStretchedGo (LayoutingType.Height);                       
-               }
-
-               public override void ClearChildren ()
-               {
-                       base.ClearChildren ();
-                       stretchedGO = null;
-               }
-       }
-}
diff --git a/src/GraphicObjects/GraduatedSlider.cs b/src/GraphicObjects/GraduatedSlider.cs
deleted file mode 100644 (file)
index e1d4dd4..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-//
-// GraduatedSlider.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using Cairo;
-using System.Xml.Serialization;
-
-namespace Crow
-{
-       [DesignIgnore]
-       public class GraduatedSlider : Slider
-    {     
-               #region CTOR
-               protected GraduatedSlider() : base(){}
-               public GraduatedSlider(Interface iface) : base(iface)
-               {}
-//             public GraduatedSlider(double minimum, double maximum, double step)
-//            : base()
-//        {
-//                     Minimum = minimum;
-//                     Maximum = maximum;
-//                     SmallIncrement = step;
-//                     LargeIncrement = step * 5;
-//        }
-               #endregion
-
-               protected override void DrawGraduations(Context gr, PointD pStart, PointD pEnd)
-               {
-                       Rectangle r = ClientRectangle;
-                       Foreground.SetAsSource (gr);
-
-                       gr.LineWidth = 2;
-                       gr.MoveTo(pStart);
-                       gr.LineTo(pEnd);
-
-                       gr.Stroke();
-                       gr.LineWidth = 1;
-
-                       double sst = unity * SmallIncrement;
-                       double bst = unity * LargeIncrement;
-
-
-                       PointD vBar = new PointD(0, sst);
-                       for (double x = Minimum; x <= Maximum - Minimum; x += SmallIncrement)
-                       {
-                               double lineLength = r.Height / 3;
-                               if (x % LargeIncrement != 0)
-                                       lineLength /= 3;
-                               PointD p = new PointD(pStart.X + x * unity, pStart.Y);
-                               gr.MoveTo(p);
-                               gr.LineTo(new PointD(p.X, p.Y + lineLength));
-                       }
-                       gr.Stroke();
-               }
-    }
-}
diff --git a/src/GraphicObjects/GraphicObject.cs b/src/GraphicObjects/GraphicObject.cs
deleted file mode 100644 (file)
index f90e06e..0000000
+++ /dev/null
@@ -1,1996 +0,0 @@
-//
-// GraphicObject.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Xml.Serialization;
-using System.Reflection;
-using System.Reflection.Emit;
-using System.Runtime.CompilerServices;
-using Cairo;
-using System.Diagnostics;
-using Crow.IML;
-using System.Threading;
-
-
-#if DESIGN_MODE
-using System.Xml;
-using System.IO;
-#endif
-
-namespace Crow
-{
-       /// <summary>
-       /// The base class for all the graphic tree elements.
-       /// </summary>
-       public class GraphicObject : ILayoutable, IValueChange, IDisposable
-       {
-               internal ReaderWriterLockSlim parentRWLock = new ReaderWriterLockSlim();
-               #if DEBUG_LOG
-               //0 is the main graphic tree, for other obj tree not added to main tree, it range from 1->n
-               //useful to track events for obj shown later, not on start, or never added to main tree
-               public int treeIndex;
-               public int yIndex;//absolute index in the graphic tree for debug draw
-               public int xLevel;//x increment for debug draw
-               #endif
-               #if DESIGN_MODE
-               static MethodInfo miDesignAddDefLoc = typeof(GraphicObject).GetMethod("design_add_style_location",
-                       BindingFlags.Instance | BindingFlags.NonPublic);
-               static MethodInfo miDesignAddValLoc = typeof(GraphicObject).GetMethod("design_add_iml_location",
-                       BindingFlags.Instance | BindingFlags.NonPublic);
-               
-               public volatile bool design_HasChanged = false;
-               public string design_id;
-               public int design_line;
-               public int design_column;
-               public string design_imlPath;
-               public bool design_isTGItem = false;//true if this is a templated item's root
-               public Dictionary<string,string> design_iml_values = new Dictionary<string, string>();
-               public Dictionary<string,string> design_style_values = new Dictionary<string, string>();
-               //public Dictionary<string,FileLocation> design_iml_locations = new Dictionary<string, FileLocation>();
-               public Dictionary<string,FileLocation> design_style_locations = new Dictionary<string, FileLocation>();
-
-               internal void design_add_style_location (string memberName, string path, int line, int col) {
-                       if (design_style_locations.ContainsKey(memberName)){
-                               Console.WriteLine ("default value localtion already set for {0}{1}.{2}", this.GetType().Name, this.design_id, memberName);
-                               return;
-                       }
-                       design_style_locations.Add(memberName, new FileLocation(path,line,col));
-               }
-//             internal void design_add_iml_location (string memberName, string path, int line, int col) {
-//                     if (design_iml_locations.ContainsKey(memberName)){
-//                             Console.WriteLine ("IML value localtion already set for {0}{1}.{2}", this.GetType().Name, this.design_id, memberName);
-//                             return;
-//                     }
-//                     design_iml_locations.Add(memberName, new FileLocation(path,line,col));
-//             }
-                       
-               public virtual bool FindByDesignID(string designID, out GraphicObject go){
-                       go = null;
-                       if (this.design_id == designID){
-                               go = this;
-                               return true;
-                       }
-                       return false;
-               }
-
-               public string GetIML(){
-                       XmlDocument doc = new XmlDocument( );
-
-                       using (StringWriter sw = new StringWriter ()) {
-                               XmlWriterSettings settings = new XmlWriterSettings {
-                                       Indent = true,
-                                       IndentChars = "\t",
-                               };
-                               using (XmlWriter xtw = XmlWriter.Create (sw, settings)) {
-                                       //(1) the xml declaration is recommended, but not mandatory
-                                       XmlDeclaration xmlDeclaration = doc.CreateXmlDeclaration ("1.0", "UTF-8", null);
-                                       doc.InsertBefore (xmlDeclaration, null);
-                                       getIML (doc, (XmlNode)doc);
-                                       doc.WriteTo (xtw);
-                               }
-                               this.design_HasChanged = false;
-                               return sw.ToString ();
-                       }
-               }
-
-               public virtual void getIML(XmlDocument doc, XmlNode parentElem) {
-                       if (this.design_isTGItem)
-                               return;
-                       
-                       XmlElement xe = doc.CreateElement(this.GetType().Name);
-
-                       foreach (KeyValuePair<string,string> kv in design_iml_values) {
-                               XmlAttribute xa = doc.CreateAttribute (kv.Key);
-                               xa.Value = kv.Value;
-                               xe.Attributes.Append (xa);
-                       }
-
-                       parentElem.AppendChild (xe);
-               }
-               public Surface CreateIcon (int dragIconSize = 32) {
-                       ImageSurface di = new ImageSurface (Format.Argb32, dragIconSize, dragIconSize);
-                       using (Context ctx = new Context (di)) {
-                               double div = Math.Max (LastPaintedSlot.Width, LastPaintedSlot.Height);
-                               double s = (double)dragIconSize / div;
-                               ctx.Scale (s, s);
-                               if (bmp == null)
-                                       this.onDraw (ctx);
-                               else {
-                                       if (LastPaintedSlot.Width>LastPaintedSlot.Height)
-                                               ctx.SetSourceSurface (bmp, 0, (LastPaintedSlot.Width-LastPaintedSlot.Height)/2);
-                                       else
-                                               ctx.SetSourceSurface (bmp, (LastPaintedSlot.Height-LastPaintedSlot.Width)/2, 0);
-                                       ctx.Paint ();
-                               }
-                       }
-                       return di;
-               }                       
-               #endif
-
-               #region IDisposable implementation
-               protected bool disposed = false;
-
-               public void Dispose(){  
-                       Dispose(true);  
-                       GC.SuppressFinalize(this);  
-               }  
-               ~GraphicObject(){
-                       Debug.WriteLine(this.ToString() + " not disposed by user");
-                       Dispose(false);
-               }
-               protected virtual void Dispose(bool disposing){
-                       if (disposed){
-                               #if DEBUG_DISPOSE
-                               Debug.WriteLine ("Trying to dispose already disposed obj: {0}", this.ToString());
-                               #endif
-                               return;
-                       }
-
-                       if (disposing) {
-                               #if DEBUG_DISPOSE
-                               Debug.WriteLine ("Disposing: {0}", this.ToString());
-                               if (IsQueueForRedraw)
-                               throw new Exception("Trying to dispose an object queued for Redraw: " + this.ToString());
-                               #endif
-
-                               unshownPostActions ();
-
-                               if (!localDataSourceIsNull)
-                                       DataSource = null;
-
-                               parentRWLock.EnterWriteLock();
-                               parent = null;
-                               parentRWLock.ExitWriteLock();
-                       } else
-                               Debug.WriteLine ("!!! Finalized by GC: {0}", this.ToString ());
-                       Clipping?.Dispose ();
-                       bmp?.Dispose ();
-                       disposed = true;
-               }  
-               #endregion
-
-               #if DEBUG_LOG
-               internal static List<GraphicObject> GraphicObjects = new List<GraphicObject>();
-               #endif
-
-               internal bool isPopup = false;
-               public GraphicObject focusParent {
-                       get { return (isPopup ? LogicalParent : parent) as GraphicObject; }
-               }
-
-               /// <summary>
-               /// interface this widget is bound to, this should not be changed once the instance is created
-               /// </summary>
-               public Interface IFace = null;
-
-               /// <summary>
-               /// contains the dirty rectangles in the coordinate system of the cache. those dirty zones
-               /// are repeated at each cached levels of the tree with correspondig coordinate system. This is done
-               /// in a dedicated step of the update between layouting and drawing.
-               /// </summary>
-               public Region Clipping;
-
-               #region IValueChange implementation
-               /// <summary>
-               /// Raise to notify that the value of a property has changed, the binding system
-               /// rely mainly on this event. the member name may not be present in the class, this is 
-               /// used in **propertyless** bindings, this allow to raise custom named events without needing
-               /// to create an new one in the class or a new property.
-               /// </summary>
-               public event EventHandler<ValueChangeEventArgs> ValueChanged;
-               /// <summary>
-               /// Helper function to raise the value changed event
-               /// </summary>
-               public virtual void NotifyValueChanged(string MemberName, object _value)
-               {
-                       //Debug.WriteLine ("Value changed: {0}->{1} = {2}", this, MemberName, _value);
-                       ValueChanged.Raise(this, new ValueChangeEventArgs(MemberName, _value));
-               }
-               #endregion
-
-               #region CTOR
-               /// <summary>
-               /// default private parameter less constructor use in instantiators, it should not be used
-               /// when creating widget from code because widgets has to be bound to an interface before any other
-               /// action.
-               /// </summary>
-               protected GraphicObject () {
-                       Clipping = new Region ();
-                       #if DEBUG_LOG
-                       GraphicObjects.Add (this);
-                       DebugLog.AddEvent(DbgEvtType.GOClassCreation, this);
-                       #endif                  
-               }
-               /// <summary>
-               /// This constructor **must** be used when creating widget from code.
-               ///
-               /// When creating new widgets derived from GraphicObject, both parameterless and this constructors are
-               /// facultatives, the compiler will create the parameterless one automaticaly if no other one exists.
-               /// But if you intend to be able to create instances of the new widget in code and override the constructor
-               /// with the Interface parameter, you **must** also provide the override of the parameterless constructor because
-               /// compiler will not create it automatically because of the presence of the other one.
-               /// </summary>
-               /// <param name="iface">Iface.</param>
-               public GraphicObject (Interface iface) : this()
-               {
-                       IFace = iface;
-                       Initialize ();
-               }
-               #endregion
-               //internal bool initialized = false;
-               /// <summary>
-               /// Initialize this Graphic object instance by setting style and default values and loading template if required
-               /// </summary>
-               public virtual void Initialize(){
-                       loadDefaultValues ();
-               }
-               #region private fields
-               LayoutingType registeredLayoutings = LayoutingType.All;
-               ILayoutable logicalParent;
-               ILayoutable parent;
-               string name;
-               Fill background = Color.Transparent;
-               Fill foreground = Color.White;
-               Font font = "droid, 10";
-               protected Measure width, height;
-               int left, top;
-               double cornerRadius = 0;
-               int margin = 0;
-               bool focusable = false;
-               bool hasFocus = false;
-               bool isActive = false;
-               //bool isHover = false;
-               bool mouseRepeat;
-               protected bool isVisible = true;
-               bool isEnabled = true;
-               VerticalAlignment verticalAlignment = VerticalAlignment.Center;
-               HorizontalAlignment horizontalAlignment = HorizontalAlignment.Center;
-               Size maximumSize = "0,0";
-               Size minimumSize = "0,0";
-               bool cacheEnabled = false;
-               bool clipToClientRect = true;
-               protected object dataSource;
-               bool rootDataLevel;
-               string style;
-               object tag;
-               bool isDragged;
-               bool allowDrag;
-               bool allowDrop;
-               string tooltip;
-               IList<Command> contextCommands;
-               #endregion
-
-               #region public fields
-               /// <summary>
-               /// Current size and position computed during layouting pass
-               /// </summary>
-               public Rectangle Slot = new Rectangle ();
-               /// <summary>
-               /// keep last slot components for each layouting pass to track
-               /// changes and trigger update of other component accordingly
-               /// </summary>
-               public Rectangle LastSlots;
-               /// <summary>
-               /// keep last slot painted on screen to clear traces if moved or resized
-               /// version to clear effective oldslot if parents have been moved or resized.
-               /// IDEA is to add a ScreenCoordinates function that use only lastPaintedSlots
-               /// </summary>
-               //TODO: we should ensure the whole parsed widget tree is the last painted
-               public Rectangle LastPaintedSlot;
-               /// <summary>Prevent requeuing multiple times the same widget</summary>
-               public bool IsQueueForClipping = false;
-               /// <summary>drawing Cache, if null, a redraw is done, cached or not</summary>
-               public Surface bmp;
-               public bool IsDirty = true;
-               /// <summary>
-               /// This size is computed on each child' layout changes.
-               /// In stacking widget, it is used to compute the remaining space for the stretched
-               /// widget inside the stack, which is never added to the contentSize, instead, its size
-               /// is deducted from (parent.ClientRectangle - contentSize)
-               /// </summary>
-               internal Size contentSize;
-               #endregion
-
-               #region ILayoutable
-               [XmlIgnore]public LayoutingType RegisteredLayoutings { get { return registeredLayoutings; } set { registeredLayoutings = value; } }
-               //TODO: it would save the recurent cost of a cast in event bubbling if parent type was GraphicObject
-               //              or we could add to the interface the mouse events
-               /// <summary>
-               /// Parent in the graphic tree, used for rendering and layouting
-               /// </summary>
-               [XmlIgnore]public virtual ILayoutable Parent {
-                       get { return parent; }
-                       set {
-                               if (parent == value)
-                                       return;
-                               DataSourceChangeEventArgs e = new DataSourceChangeEventArgs (parent, value);
-
-                               parentRWLock.EnterWriteLock();
-                               parent = value;
-                               Slot = LastSlots = default(Rectangle);
-                               parentRWLock.ExitWriteLock();
-                                                                       
-                               onParentChanged (this, e);
-                       }
-               }
-               [XmlIgnore]public ILayoutable LogicalParent {
-                       get { return logicalParent == null ? Parent : logicalParent; }
-                       set {
-                               if (logicalParent == value)
-                                       return;
-                               if (logicalParent != null)
-                                       (logicalParent as GraphicObject).DataSourceChanged -= onLogicalParentDataSourceChanged;
-                               DataSourceChangeEventArgs dsce = new DataSourceChangeEventArgs (LogicalParent, null);
-                               logicalParent = value;
-                               dsce.NewDataSource = LogicalParent;
-                               if (logicalParent != null)
-                                       (logicalParent as GraphicObject).DataSourceChanged += onLogicalParentDataSourceChanged;
-                               onLogicalParentChanged (this, dsce);
-                       }
-               }
-               [XmlIgnore]public virtual Rectangle ClientRectangle {
-                       get {
-                               Rectangle cb = Slot.Size;
-                               cb.Inflate ( - Margin);
-                               return cb;
-                       }
-               }
-               public virtual Rectangle ContextCoordinates(Rectangle r){
-                       GraphicObject go = Parent as GraphicObject;
-                       if (go == null)
-                               return r + Parent.ClientRectangle.Position;
-                       return go.CacheEnabled ?
-                               r + Parent.ClientRectangle.Position :
-                               Parent.ContextCoordinates (r);
-               }
-               public virtual Rectangle ScreenCoordinates (Rectangle r){
-                       try {
-                               return
-                                       Parent.ScreenCoordinates(r) + Parent.getSlot().Position + Parent.ClientRectangle.Position;                              
-                       } catch (Exception ex) {
-                               Debug.WriteLine (ex);
-                               return default(Rectangle);
-                       }
-               }
-               public virtual Rectangle getSlot () { return Slot;}
-               #endregion
-               public Point ScreenPointToLocal(Point p){
-                       Point pt = p - ScreenCoordinates(Slot).TopLeft - ClientRectangle.TopLeft;
-                       if (pt.X < 0)
-                               pt.X = 0;
-                       if (pt.Y < 0)
-                               pt.Y = 0;
-                       return pt;
-               }
-
-               #region EVENT HANDLERS
-               /// <summary>Occurs when mouse wheel is rolled in this object. It bubbles to the root</summary>
-               public event EventHandler<MouseWheelEventArgs> MouseWheelChanged;
-               /// <summary>Occurs when mouse button is released in this object. It bubbles to the root</summary>
-               public event EventHandler<MouseButtonEventArgs> MouseUp;
-               /// <summary>Occurs when mouse button is pressed in this object. It bubbles to the root</summary>
-               public event EventHandler<MouseButtonEventArgs> MouseDown;
-               /// <summary>Occurs when mouse button has been pressed then relesed in this object. It bubbles to the root</summary>
-               public event EventHandler<MouseButtonEventArgs> MouseClick;
-               /// <summary>Occurs when mouse button has been pressed then relesed 2 times in this object. It bubbles to the root</summary>
-               public event EventHandler<MouseButtonEventArgs> MouseDoubleClick;
-               /// <summary>Occurs when mouse mouve in this object. It bubbles to the root</summary>
-               public event EventHandler<MouseMoveEventArgs> MouseMove;
-               /// <summary>Occurs when mouse enter this object</summary>
-               public event EventHandler<MouseMoveEventArgs> MouseEnter;
-               /// <summary>Occurs when mouse leave this object</summary>
-               public event EventHandler<MouseMoveEventArgs> MouseLeave;
-               /// <summary>Occurs when key is pressed when this object is active</summary>
-               public event EventHandler<KeyEventArgs> KeyDown;
-               /// <summary>Occurs when key is released when this object is active</summary>
-               public event EventHandler<KeyEventArgs> KeyUp;
-               /// <summary>Occurs when translated key event occurs in the host when this object is active</summary>
-               public event EventHandler<KeyPressEventArgs> KeyPress;
-               /// <summary>Occurs when this object received focus</summary>
-               public event EventHandler Focused;
-               /// <summary>Occurs when this object loose focus</summary>
-               public event EventHandler Unfocused;
-               /// <summary>Occurs when mouse is over</summary>
-               //public event EventHandler Hover;
-               /// <summary>Occurs when this control is no longer the Hover one</summary>
-               //public event EventHandler UnHover;
-               /// <summary>Occurs when this object loose focus</summary>
-               public event EventHandler Enabled;
-               /// <summary>Occurs when the enabled state this object is set to false</summary>
-               public event EventHandler Disabled;
-
-               #region DragAndDrop Events
-               public event EventHandler<DragDropEventArgs> StartDrag;
-               public event EventHandler<DragDropEventArgs> DragEnter;
-               public event EventHandler<DragDropEventArgs> DragLeave;
-               public event EventHandler<DragDropEventArgs> EndDrag;
-               public event EventHandler<DragDropEventArgs> Drop;
-               #endregion
-
-               /// <summary>
-               /// Occurs when default value and styling are loaded, and for templated control,
-               /// template is also loaded. Bindings should be functionnal as well.
-               /// </summary>
-               public event EventHandler Initialized;
-
-               /// <summary>Occurs when one part of the rendering slot changed</summary>
-               public event EventHandler<LayoutingEventArgs> LayoutChanged;
-               /// <summary>Occurs when DataSource changed</summary>
-               public event EventHandler<DataSourceChangeEventArgs> DataSourceChanged;
-               /// <summary>Occurs when the parent has changed</summary>
-               public event EventHandler<DataSourceChangeEventArgs> ParentChanged;
-               /// <summary>Occurs when the logical parent has changed</summary>
-               public event EventHandler<DataSourceChangeEventArgs> LogicalParentChanged;
-               #endregion
-
-               #region public properties
-               /// <summary>Random value placeholder</summary>
-               [DesignCategory ("Divers")]
-               public object Tag {
-                       get { return tag; }
-                       set {
-                               if (tag == value)
-                                       return;
-                               tag = value;
-                               NotifyValueChanged ("Tag", tag);
-                       }
-               }
-               /// <summary>
-               /// If enabled, resulting bitmap of graphic object is cached
-               /// speeding up rendering of complex object. Default is enabled.
-               /// </summary>
-               [DesignCategory ("Behavior")][DefaultValue(true)]
-               public virtual bool CacheEnabled {
-                       get { return cacheEnabled; }
-                       set {
-                               if (cacheEnabled == value)
-                                       return;
-                               cacheEnabled = value;
-                               NotifyValueChanged ("CacheEnabled", cacheEnabled);
-                       }
-               }
-               /// <summary>
-               /// If true, rendering of GraphicObject is clipped inside client rectangle
-               /// </summary>
-               [DesignCategory ("Appearance")][DefaultValue(true)]
-               public virtual bool ClipToClientRect {
-                       get { return clipToClientRect; }
-                       set {
-                               if (clipToClientRect == value)
-                                       return;
-                               clipToClientRect = value;
-                               NotifyValueChanged ("ClipToClientRect", clipToClientRect);
-                               this.RegisterForRedraw ();
-                       }
-               }
-               #if DEBUG_LOG
-               [XmlIgnore]public string TreePath {
-                       get { return this.GetType().Name + GraphicObjects.IndexOf(this).ToString ();    }
-               }
-               #endif
-               /// <summary>
-               /// Name is used in binding to reference other GraphicObjects inside the graphic tree
-               /// and by template controls to find special element in their template implementation such
-               /// as a container or a group to put children in.
-               /// </summary>
-               [DesignCategory ("Divers")][DefaultValue(null)]
-               public virtual string Name {
-                       get {
-                               #if DEBUG_LOG
-                               return string.IsNullOrEmpty(name) ? this.GetType().Name + GraphicObjects.IndexOf(this).ToString () : name;
-                               #else
-                               return name;
-                               #endif
-                       }
-                       set {
-                               if (name == value)
-                                       return;
-                               name = value;
-                               NotifyValueChanged("Name", name);
-                       }
-               }
-               /// <summary>
-               /// Vertical alignment inside parent, disabled if height is stretched
-               /// or top coordinate is not null
-               /// </summary>
-               [DesignCategory ("Layout")][DefaultValue(VerticalAlignment.Center)]
-               public virtual VerticalAlignment VerticalAlignment {
-                       get { return verticalAlignment; }
-                       set {
-                               if (verticalAlignment == value)
-                                       return;
-
-                               verticalAlignment = value;
-                               NotifyValueChanged("VerticalAlignment", verticalAlignment);
-                               RegisterForLayouting (LayoutingType.Y);
-                       }
-               }
-               /// <summary>
-               /// Horizontal alignment inside parent, disabled if width is stretched
-               /// or left coordinate is not null
-               /// </summary>
-               [DesignCategory ("Layout")][DefaultValue(HorizontalAlignment.Center)]
-               public virtual HorizontalAlignment HorizontalAlignment {
-                       get { return horizontalAlignment; }
-                       set {
-                               if (horizontalAlignment == value)
-                                       return;
-                               horizontalAlignment = value;
-                               NotifyValueChanged("HorizontalAlignment", horizontalAlignment);
-                               RegisterForLayouting (LayoutingType.X);
-                       }
-               }
-               /// <summary>
-               /// x position inside parent
-               /// </summary>
-               [DesignCategory ("Layout")][DefaultValue(0)]
-               public virtual int Left {
-                       get { return left; }
-                       set {
-                               if (left == value)
-                                       return;
-                               left = value;
-                               NotifyValueChanged ("Left", left);
-                               this.RegisterForLayouting (LayoutingType.X);
-                       }
-               }
-               /// <summary>
-               /// y position inside parent
-               /// </summary>
-               [DesignCategory ("Layout")][DefaultValue(0)]
-               public virtual int Top {
-                       get { return top; }
-                       set {
-                               if (top == value)
-                                       return;
-                               top = value;
-                               NotifyValueChanged ("Top", top);
-                               this.RegisterForLayouting (LayoutingType.Y);
-                       }
-               }
-               /// <summary>
-               /// Helper property used to set width and height to fit in one call
-               /// </summary>
-               [DesignCategory ("Layout")][DefaultValue(false)]
-               public virtual bool Fit {
-                       get { return Width == Measure.Fit && Height == Measure.Fit ? true : false; }
-                       set {
-                               if (value == Fit)
-                                       return;
-
-                               Width = Height = Measure.Fit;
-                       }
-               }
-               /// <summary>
-               /// Width of this control, by default inherited from parent. May have special values
-               /// such as Stretched or Fit. It may be proportionnal or absolute.
-               /// </summary>
-               [DesignCategory ("Layout")][DefaultValue("Inherit")]
-               public virtual Measure Width {
-                       get {
-                               return width.Units == Unit.Inherit ?
-                                       Parent is GraphicObject ? (Parent as GraphicObject).WidthPolicy :
-                                       Measure.Stretched : width;
-                       }
-                       set {
-                               if (width == value)
-                                       return;
-                               if (value.IsFixed) {
-                                       if (value < MinimumSize.Width || (value > MaximumSize.Width && MaximumSize.Width > 0))
-                                               return;
-                               }
-                               Measure old = width;
-                               width = value;
-                               NotifyValueChanged ("Width", width);
-                               if (width == Measure.Stretched || old == Measure.Stretched) {
-                                       //NotifyValueChanged ("WidthPolicy", width.Policy);
-                                       //contentSize in Stacks are only update on childLayoutChange, and the single stretched
-                                       //child of the stack is not counted in contentSize, so when changing size policy of a child
-                                       //we should adapt contentSize
-                                       //TODO:check case when child become stretched, and another stretched item already exists.
-                                       GenericStack gs = Parent as GenericStack;
-                                       if (gs != null){ //TODO:check if I should test Group instead
-                                               if (gs.Orientation == Orientation.Horizontal) {
-                                                       if (width == Measure.Stretched)
-                                                               gs.contentSize.Width -= this.LastSlots.Width;
-                                                       else
-                                                               gs.contentSize.Width += this.LastSlots.Width;
-                                               }
-                                       }                                                       
-                               }
-
-                               this.RegisterForLayouting (LayoutingType.Width);
-                       }
-               }
-               /// <summary>
-               /// Height of this control, by default inherited from parent. May have special values
-               /// such as Stretched or Fit. It may be proportionnal or absolute.
-               /// </summary>
-               [DesignCategory ("Layout")][DefaultValue("Inherit")]
-               public virtual Measure Height {
-                       get {
-                               return height.Units == Unit.Inherit ?
-                                       Parent is GraphicObject ? (Parent as GraphicObject).HeightPolicy :
-                                       Measure.Stretched : height;
-                       }
-                       set {
-                               if (height == value)
-                                       return;
-                               if (value.IsFixed) {
-                                       if (value < MinimumSize.Height || (value > MaximumSize.Height && MaximumSize.Height > 0))
-                                               return;
-                               }
-                               Measure old = height;
-                               height = value;
-                               NotifyValueChanged ("Height", height);
-                               if (height == Measure.Stretched || old == Measure.Stretched) {
-                                       //NotifyValueChanged ("HeightPolicy", HeightPolicy);
-                                       GenericStack gs = Parent as GenericStack;
-                                       if (gs != null){ //TODO:check if I should test Group instead
-                                               if (gs.Orientation == Orientation.Vertical) {
-                                                       if (height == Measure.Stretched)
-                                                               gs.contentSize.Height -= this.LastSlots.Height;
-                                                       else
-                                                               gs.contentSize.Height += this.LastSlots.Height;
-                                               }
-                                       }
-                               }
-
-                               this.RegisterForLayouting (LayoutingType.Height);
-                       }
-               }
-               /// <summary>
-               /// Was Used for binding on dimensions, this property will never hold fixed size, but instead only
-               /// Fit or Stretched, **with inherited state implementation, it is not longer used in binding**
-               /// </summary>
-               [XmlIgnore]public virtual Measure WidthPolicy { get {
-                               return Width.IsFit ? Measure.Fit : Measure.Stretched; } }
-               /// <summary>
-               /// Was Used for binding on dimensions, this property will never hold fixed size, but instead only
-               /// Fit or Stretched, **with inherited state implementation, it is not longer used in binding**
-               /// </summary>
-               [XmlIgnore]public virtual Measure HeightPolicy { get {
-                               return Height.IsFit ? Measure.Fit : Measure.Stretched; } }
-               /// <summary>
-               /// Indicate that this object may received focus or not, if not focusable all the descendants are 
-               /// affected.
-               /// </summary>
-               [DesignCategory ("Behaviour")][DefaultValue(false)]
-               public virtual bool Focusable {
-                       get { return focusable; }
-                       set {
-                               if (focusable == value)
-                                       return;
-                               focusable = value;
-                               NotifyValueChanged ("Focusable", focusable);
-                       }
-               }
-               /// <summary>
-               /// True when this control has the focus, only one control per interface may have it.
-               /// </summary>
-               [XmlIgnore]public virtual bool HasFocus {
-                       get { return hasFocus; }
-                       set {
-                               if (value == hasFocus)
-                                       return;
-
-                               hasFocus = value;
-                               if (hasFocus)
-                                       onFocused (this, null);
-                               else
-                                       onUnfocused (this, null);
-                               NotifyValueChanged ("HasFocus", hasFocus);
-                       }
-               }
-               /// <summary>
-               /// true if this control is active, this means that mouse has been pressed in it and not yet released. It could 
-               /// be used for other two states periferic action.
-               /// </summary>
-               [XmlIgnore]public virtual bool IsActive {
-                       get { return isActive; }
-                       set {
-                               if (value == isActive)
-                                       return;
-
-                               isActive = value;
-                               NotifyValueChanged ("IsActive", isActive);
-                       }
-               }
-               /// <summary>
-               /// true if this control has the pointer hover
-               /// </summary>
-               /*[XmlIgnore]public virtual bool IsHover {
-                       get { return isHover; }
-                       set {
-                               if (value == isHover)
-                                       return;
-
-                               isHover = value;
-
-                               if (isHover)
-                                       onHover (this, null);
-                               else
-                                       onUnHover (this, null);
-
-                               NotifyValueChanged ("IsHover", isHover);
-                       }
-               }*/
-               /// <summary>
-               /// true if holding mouse button down should trigger multiple click events
-               /// </summary>
-               [DesignCategory ("Behaviour")][DefaultValue(false)]
-               public virtual bool MouseRepeat {
-                       get { return mouseRepeat; }
-                       set {
-                               if (mouseRepeat == value)
-                                       return;
-                               mouseRepeat = value;
-                               NotifyValueChanged ("MouseRepeat", mouseRepeat);
-                       }
-               }
-               bool clearBackground = false;
-               /// <summary>
-               /// background fill of the control, maybe solid color, gradient, image, or svg
-               /// </summary>
-               [DesignCategory ("Appearance")][DefaultValue("Transparent")]
-               public virtual Fill Background {
-                       get { return background; }
-                       set {
-                               if (background == value)
-                                       return;
-                               clearBackground = false;
-                               if (value == null)
-                                       return;
-                               background = value;
-                               NotifyValueChanged ("Background", background);
-                               RegisterForRedraw ();
-                               if (background is SolidColor) {
-                                       if ((Background as SolidColor).Equals (Color.Clear))
-                                               clearBackground = true;
-                               }
-                       }
-               }
-               /// <summary>
-               /// Foreground fill of the control, usage may be different among derived controls
-               /// </summary>
-               [DesignCategory ("Appearance")][DefaultValue("White")]
-               public virtual Fill Foreground {
-                       get { return foreground; }
-                       set {
-                               if (foreground == value)
-                                       return;
-                               foreground = value;
-                               NotifyValueChanged ("Foreground", foreground);
-                               RegisterForRedraw ();
-                       }
-               }
-               /// <summary>
-               /// Font being used in many controls, it is defined in the base GraphicObject class.
-               /// </summary>
-               [DesignCategory ("Appearance")][DefaultValue("sans,10")]
-               public virtual Font Font {
-                       get { return font; }
-                       set {
-                               if (value == font)
-                                       return;
-                               font = value;
-                               NotifyValueChanged ("Font", font);
-                               RegisterForGraphicUpdate ();
-                       }
-               }
-               /// <summary>
-               /// to get rounded corners
-               /// </summary>
-               [DesignCategory ("Appearance")][DefaultValue(0.0)]
-               public virtual double CornerRadius {
-                       get { return cornerRadius; }
-                       set {
-                               if (value == cornerRadius)
-                                       return;
-                               cornerRadius = value;
-                               NotifyValueChanged ("CornerRadius", cornerRadius);
-                               RegisterForRedraw ();
-                       }
-               }
-               /// <summary>
-               /// This is a single integer for the 4 direction, a gap between the control and it's container,
-               /// by default it is filled with the background.
-               /// </summary>
-               [DesignCategory ("Layout")][DefaultValue(0)]
-               public virtual int Margin {
-                       get { return margin; }
-                       set {
-                               if (value == margin)
-                                       return;
-                               margin = value;
-                               NotifyValueChanged ("Margin", margin);
-                               RegisterForGraphicUpdate ();
-                       }
-               }
-               /// <summary>
-               /// set the visible state of the control, invisible controls does reserve space in the layouting system.
-               /// </summary>
-               [DesignCategory ("Appearance")][DefaultValue(true)]
-               public virtual bool Visible {
-                       get { return isVisible; }
-                       set {
-                               if (value == isVisible)
-                                       return;
-
-                               isVisible = value;
-
-                               RegisterForLayouting (LayoutingType.Sizing);
-
-                               if (!isVisible && IFace.HoverWidget != null) {                                  
-                                       if (IFace.HoverWidget.IsOrIsInside (this)) {
-                                               //IFace.HoverWidget = null;
-                                               IFace.ProcessMouseMove (IFace.Mouse.X, IFace.Mouse.Y);
-                                       }
-                               }
-
-                               NotifyValueChanged ("Visible", isVisible);
-                       }
-               }
-               /// <summary>
-               /// get or set the enabled state, disabling a control will affect focuability and
-               /// also it's rendering which will be grayed
-               /// </summary>
-               [DesignCategory ("Behaviour")][DefaultValue(true)]
-               public virtual bool IsEnabled {
-                       get { return isEnabled; }
-                       set {
-                               if (value == isEnabled)
-                                       return;
-
-                               isEnabled = value;
-
-                               if (isEnabled)
-                                       onEnable (this, null);
-                               else
-                                       onDisable (this, null);
-
-                               NotifyValueChanged ("IsEnabled", isEnabled);
-                               RegisterForRedraw ();
-                       }
-               }
-               /// <summary>
-               /// Minimal width and  height for this control
-               /// </summary>
-               [DesignCategory ("Layout")][DefaultValue("1,1")]
-               public virtual Size MinimumSize {
-                       get { return minimumSize; }
-                       set {
-                               if (value == minimumSize)
-                                       return;
-
-                               minimumSize = value;
-
-                               NotifyValueChanged ("MinimumSize", minimumSize);
-                               RegisterForLayouting (LayoutingType.Sizing);
-                       }
-               }
-               /// <summary>
-               /// Maximum width and  height for this control, unlimited if null.
-               /// </summary>
-               [DesignCategory ("Layout")][DefaultValue("0,0")]
-               public virtual Size MaximumSize {
-                       get { return maximumSize; }
-                       set {
-                               if (value == maximumSize)
-                                       return;
-
-                               maximumSize = value;
-
-                               NotifyValueChanged ("MaximumSize", maximumSize);
-                               RegisterForLayouting (LayoutingType.Sizing);
-                       }
-               }
-               /// <summary>
-               /// Seek first logical tree upward if logicalParent is set, or seek graphic tree for
-               /// a not null dataSource that will be active for all descendants having dataSource=null
-               /// </summary>
-               [DesignCategory ("Data")]
-               public virtual object DataSource {
-                       set {
-                               if (DataSource == value)
-                                       return;
-
-                               DataSourceChangeEventArgs dse = new DataSourceChangeEventArgs (DataSource, null);
-                               dataSource = value;
-                               dse.NewDataSource = DataSource;
-
-                               if (dse.NewDataSource == dse.OldDataSource)
-                                       return;
-
-                               if (value != null)
-                                       rootDataLevel = true;
-
-                               #if DEBUG_LOG
-                               DbgEvent dbgEvt = DebugLog.AddEvent(DbgEvtType.GOLockLayouting, this);
-                               #endif
-                               lock (IFace.LayoutMutex) {
-                                       OnDataSourceChanged (this, dse);
-                                       NotifyValueChanged ("DataSource", DataSource);
-                               }
-                               #if DEBUG_LOG
-                               dbgEvt.end = DebugLog.chrono.ElapsedTicks;
-                               #endif
-                       }
-                       get {
-                               return rootDataLevel ? dataSource : dataSource == null ?
-                                       LogicalParent == null ? null :
-                                       LogicalParent is GraphicObject ? (LogicalParent as GraphicObject).DataSource : null :
-                                       dataSource;
-                       }
-               }
-               /// <summary>
-               /// If true, rendering of GraphicObject is clipped inside client rectangle
-               /// </summary>
-               [DesignCategory ("Data")][DefaultValue(false)]
-               public virtual bool RootDataLevel {
-                       get { return rootDataLevel; }
-                       set {
-                               if (rootDataLevel == value)
-                                       return;
-                               rootDataLevel = value;
-                               NotifyValueChanged ("RootDataLevel", rootDataLevel);
-                               this.RegisterForRedraw ();
-                       }
-               }
-               protected virtual void onLogicalParentDataSourceChanged(object sender, DataSourceChangeEventArgs e){
-                       if (localDataSourceIsNull)
-                               OnDataSourceChanged (this, e);
-               }
-               internal bool localDataSourceIsNull { get { return dataSource == null; } }
-               public bool localLogicalParentIsNull { get { return logicalParent == null; } }
-
-               public virtual void OnDataSourceChanged(object sender, DataSourceChangeEventArgs e){
-                       DataSourceChanged.Raise (this, e);
-                       #if DEBUG_LOG
-                       DebugLog.AddEvent(DbgEvtType.GONewDataSource, this);
-                       #endif
-
-                       #if DEBUG_BINDING
-                       Debug.WriteLine("New DataSource for => {0} \n\t{1}=>{2}", this.ToString(),e.OldDataSource,e.NewDataSource);
-                       #endif
-               }
-               /// <summary>
-               /// Style key to use for this control
-               /// </summary>
-               [DesignCategory ("Appearance")]
-               public virtual string Style {
-                       get { return style; }
-                       set {
-                               if (value == style)
-                                       return;
-
-                               style = value;
-
-                               NotifyValueChanged ("Style", style);
-                       }
-               }
-               [DesignCategory ("Divers")]
-               public virtual string Tooltip {
-                       get { return tooltip; }
-                       set {
-                               if (tooltip == value)
-                                       return;
-                               tooltip = value;
-                               NotifyValueChanged("Tooltip", tooltip);
-                       }
-               }
-               [DesignCategory ("Divers")]
-               public IList<Command> ContextCommands {
-                       get { return contextCommands; }
-                       set {
-                               if (contextCommands == value)
-                                       return;
-                               contextCommands = value;
-                               NotifyValueChanged("ContextCommands", contextCommands);
-                       }
-               }
-               #endregion
-
-               #region Default and Style Values loading
-               /// <summary> Loads the default values from XML attributes default </summary>
-               public void loadDefaultValues()
-               {
-                       #if DEBUG_LOG
-                       DbgEvent dbgEvt = DebugLog.AddEvent(DbgEvtType.GOInitialization, this);
-                       #endif
-
-                       Type thisType = this.GetType ();
-
-                       if (!string.IsNullOrEmpty (Style)) {
-                               if (IFace.DefaultValuesLoader.ContainsKey (Style)) {
-                                       IFace.DefaultValuesLoader [Style] (this);
-                                       onInitialized (this, null);
-                                       return;
-                               }
-                       } else if (IFace.DefaultValuesLoader.ContainsKey (thisType.FullName)) {
-                               IFace.DefaultValuesLoader [thisType.FullName] (this);
-                               onInitialized (this, null);
-                               return;
-                       } else  if (IFace.DefaultValuesLoader.ContainsKey (thisType.Name)) {
-                               IFace.DefaultValuesLoader [thisType.Name] (this);
-                               onInitialized (this, null);
-                               return;
-                       }
-
-                       List<Style> styling = new List<Style>();
-
-                       //Search for a style matching :
-                       //1: Full class name, with full namespace
-                       //2: class name
-                       //3: style may have been registered with their ressource ID minus .style extention
-                       //   those files being placed in a Styles folder
-                       string styleKey = Style;
-                       if (!string.IsNullOrEmpty (Style)) {
-                               if (IFace.Styling.ContainsKey (Style)) {
-                                       styling.Add (IFace.Styling [Style]);
-                               }
-                       }
-                       if (IFace.Styling.ContainsKey (thisType.FullName)) {
-                               styling.Add (IFace.Styling [thisType.FullName]);
-                               if (string.IsNullOrEmpty (styleKey))
-                                       styleKey = thisType.FullName;
-                       }
-                       if (IFace.Styling.ContainsKey (thisType.Name)) {
-                               styling.Add (IFace.Styling [thisType.Name]);
-                               if (string.IsNullOrEmpty (styleKey))
-                                       styleKey = thisType.Name;
-                       }
-
-                       if (string.IsNullOrEmpty (styleKey))
-                               styleKey = thisType.FullName;
-
-                       //Reflexion being very slow compared to dyn method or delegates,
-                       //I compile the initial values coded in the CustomAttribs of the class,
-                       //all other instance of this type would not longer use reflexion to init properly
-                       //but will fetch the  dynamic initialisation method compiled for this precise type
-                       //TODO:measure speed gain.
-                       #region Delfault values Loading dynamic compilation
-                       DynamicMethod dm = null;
-                       ILGenerator il = null;
-
-            /*dm = new DynamicMethod("dyn_loadDefValues",
-                               MethodAttributes.Family | MethodAttributes.FamANDAssem | MethodAttributes.NewSlot,
-                               CallingConventions.Standard,
-                               typeof(void),new Type[] {CompilerServices.TObject}, thisType, true);*/
-
-            dm = new DynamicMethod("dyn_loadDefValues", null, new Type[] {CompilerServices.TObject}, thisType, true);
-
-            il = dm.GetILGenerator(256);
-                       il.DeclareLocal(CompilerServices.TObject);
-                       il.Emit(OpCodes.Nop);
-                       //set local GraphicObject to root object passed as 1st argument
-                       il.Emit (OpCodes.Ldarg_0);
-                       il.Emit (OpCodes.Stloc_0);
-
-                       foreach (EventInfo ei in thisType.GetEvents(BindingFlags.Public | BindingFlags.Instance)) {
-                               string expression;
-                               if (!getDefaultEvent(ei, styling, out expression))
-                                       continue;
-                               //TODO:dynEventHandler could be cached somewhere, maybe a style instanciator class holding the styling delegate and bound to it.
-                               foreach (string exp in CompilerServices.splitOnSemiColumnOutsideAccolades(expression)) {
-                                       string trimed = exp.Trim();
-                                       if (trimed.StartsWith ("{", StringComparison.OrdinalIgnoreCase)){
-                                               il.Emit (OpCodes.Ldloc_0);//load this as 1st arg of event Add
-
-                                               //push eventInfo as 1st arg of compile
-                                               il.Emit (OpCodes.Ldloc_0);
-                                               il.Emit (OpCodes.Call, CompilerServices.miGetType);
-                                               il.Emit (OpCodes.Ldstr, ei.Name);//push event name
-                                               il.Emit (OpCodes.Call, CompilerServices.miGetEvent);
-                                               //push expression as 2nd arg of compile
-                                               il.Emit (OpCodes.Ldstr, trimed.Substring (1, trimed.Length - 2));
-                                               //push null as 3rd arg, currentNode, not known when instanciing
-                                               il.Emit (OpCodes.Ldnull);
-                                               il.Emit (OpCodes.Call, CompilerServices.miCompileDynEventHandler);
-                                               il.Emit (OpCodes.Castclass, ei.EventHandlerType);
-                                               il.Emit (OpCodes.Call, ei.AddMethod);
-                                       }else
-                                               Debug.WriteLine("error in styling, event not handled : " + trimed);
-                               }
-                       }
-
-                       foreach (PropertyInfo pi in thisType.GetProperties(BindingFlags.Public | BindingFlags.Instance)) {
-                               if (pi.GetSetMethod () == null)
-                                       continue;
-                               XmlIgnoreAttribute xia = (XmlIgnoreAttribute)pi.GetCustomAttribute (typeof(XmlIgnoreAttribute));
-                               if (xia != null)
-                                       continue;
-
-                               object defaultValue;
-                               string name = "";
-                               XmlAttributeAttribute xaa = (XmlAttributeAttribute)pi.GetCustomAttribute (typeof(XmlAttributeAttribute));
-                               if (xaa != null) {
-                                       if (string.IsNullOrEmpty (xaa.AttributeName))
-                                               name = pi.Name;
-                                       else
-                                               name = xaa.AttributeName;
-                               }else
-                                       name = pi.Name;
-                               
-                               int styleIndex = -1;
-                               if (styling.Count > 0){
-                                       for (int i = 0; i < styling.Count; i++) {
-                                               if (styling[i].ContainsKey (name)){
-                                                       styleIndex = i;
-                                                       break;
-                                               }
-                                       }
-                               }
-                               if (styleIndex >= 0){
-                                       if (pi.PropertyType.IsEnum)//maybe should be in parser..
-                                               defaultValue = Enum.Parse(pi.PropertyType, (string)styling[styleIndex] [name], true);
-                                       else
-                                               defaultValue = styling[styleIndex] [name];
-
-                                       #if DESIGN_MODE
-                                       if (defaultValue != null){
-                                               FileLocation fl = styling[styleIndex].Locations[name];
-                                               il.Emit (OpCodes.Ldloc_0);
-                                               il.Emit (OpCodes.Ldstr, name);
-                                               il.Emit (OpCodes.Ldstr, fl.FilePath);
-                                               il.Emit (OpCodes.Ldc_I4, fl.Line);
-                                               il.Emit (OpCodes.Ldc_I4, fl.Column);
-                                               il.Emit (OpCodes.Call, miDesignAddDefLoc);
-
-                                               il.Emit (OpCodes.Ldloc_0);
-                                               il.Emit (OpCodes.Ldfld, typeof(GraphicObject).GetField("design_style_values"));
-                                               il.Emit (OpCodes.Ldstr, name);
-                                               il.Emit (OpCodes.Ldstr, defaultValue.ToString());
-                                               il.Emit (OpCodes.Call, CompilerServices.miDicStrStrAdd);
-                                       }
-                                       #endif
-
-                               }else {
-                                       DefaultValueAttribute dv = (DefaultValueAttribute)pi.GetCustomAttribute (typeof (DefaultValueAttribute));
-                                       if (dv == null)
-                                               continue;
-                                       defaultValue = dv.Value;
-                               }
-
-                               CompilerServices.EmitSetValue (il, pi, defaultValue);
-                       }
-                       il.Emit(OpCodes.Ret);
-                       #endregion
-
-                       try {
-                               IFace.DefaultValuesLoader[styleKey] = (Interface.LoaderInvoker)dm.CreateDelegate(typeof(Interface.LoaderInvoker));
-                               IFace.DefaultValuesLoader[styleKey] (this);
-                       } catch (Exception ex) {
-                               throw new Exception ("Error applying style <" + styleKey + ">:", ex);
-                       }
-
-                       #if DEBUG_LOG
-                       dbgEvt.end = DebugLog.chrono.ElapsedTicks;
-                       #endif
-
-                       onInitialized (this, null);
-               }
-               protected virtual void onInitialized (object sender, EventArgs e){
-                       Initialized.Raise(sender, e);
-               }
-               bool getDefaultEvent(EventInfo ei, List<Style> styling,
-                       out string expression){
-                       expression = "";
-                       if (styling.Count > 0){
-                               for (int i = 0; i < styling.Count; i++) {
-                                       if (styling[i].ContainsKey (ei.Name)){
-                                               expression = (string)styling[i] [ei.Name];
-                                               return true;
-                                       }
-                               }
-                       }
-                       return false;
-               }
-               #endregion
-
-               public virtual GraphicObject FindByName(string nameToFind){
-                       return string.Equals(nameToFind, name, StringComparison.Ordinal) ? this : null;
-               }
-               public virtual bool Contains(GraphicObject goToFind){
-                       return false;
-               }
-               /// <summary>
-               /// return true if this is contained inside go
-               /// </summary>
-               public bool IsOrIsInside(GraphicObject go){
-                       if (this == go)
-                               return true;
-                       ILayoutable p = this.Parent;
-                       while (p != null) {
-                               if (p == go)
-                                       return true;
-                               p = p.Parent;
-                       }
-                       return false;
-               }
-
-               #region Drag&Drop
-               [DesignCategory ("DragAndDrop")][DefaultValue(false)]
-               public virtual bool AllowDrag {
-                       get { return allowDrag; }
-                       set {
-                               if (allowDrag == value)
-                                       return;
-                               allowDrag = value;
-                               NotifyValueChanged ("AllowDrag", allowDrag);
-                       }
-               }
-               [DesignCategory ("DragAndDrop")][DefaultValue(false)]
-               public virtual bool AllowDrop {
-                       get { return allowDrop; }
-                       set {
-                               if (allowDrop == value)
-                                       return;
-                               allowDrop = value;
-                               NotifyValueChanged ("AllowDrop", allowDrop);
-                       }
-               }
-
-//             public List<Type> AllowedDroppedTypes;
-//             public void AddAllowedDroppedType (Type newType){
-//                     if (AllowedDroppedTypes == null)
-//                             AllowedDroppedTypes = new List<Type> ();
-//                     AllowedDroppedTypes.Add (newType);
-//                     NotifyValueChanged ("AllowDrop", AllowDrop);
-//             }
-//             [XmlIgnore]public virtual bool AllowDrop {
-//                     get { return AllowedDroppedTypes?.Count>0; }
-//             }
-               [XmlIgnore]public virtual bool IsDragged {
-                       get { return isDragged; }
-                       set {
-                               if (isDragged == value)
-                                       return;
-                               isDragged = value;
-
-                               NotifyValueChanged ("IsDragged", IsDragged);
-                       }
-               }
-               /// <summary>
-               /// fired when drag and drop operation start
-               /// </summary>
-               protected virtual void onStartDrag (object sender, DragDropEventArgs e){
-                       IFace.HoverWidget = null;
-                       IsDragged = true;
-                       StartDrag.Raise (this, e);
-                       #if DEBUG_DRAGNDROP
-                       Debug.WriteLine(this.ToString() + " : START DRAG => " + e.ToString());
-                       #endif
-               }
-               /// <summary>
-               ///  Occured when dragging ends without dropping
-               /// </summary>
-               protected virtual void onEndDrag (object sender, DragDropEventArgs e){                  
-                       IsDragged = false;
-                       EndDrag.Raise (this, e);
-                       #if DEBUG_DRAGNDROP
-                       Debug.WriteLine(this.ToString() + " : END DRAG => " + e.ToString());
-                       #endif
-               }
-               protected virtual void onDragEnter (object sender, DragDropEventArgs e){
-                       e.DropTarget = this;
-                       DragEnter.Raise (this, e);
-                       #if DEBUG_DRAGNDROP
-                       Debug.WriteLine(this.ToString() + " : DRAG Enter => " + e.ToString());
-                       #endif
-               }
-               protected virtual void onDragLeave (object sender, DragDropEventArgs e){                        
-                       e.DropTarget = null;
-                       DragLeave.Raise (this, e);
-                       #if DEBUG_DRAGNDROP
-                       Debug.WriteLine(this.ToString() + " : DRAG Leave => " + e.ToString());
-                       #endif
-               }
-               protected virtual void onDrop (object sender, DragDropEventArgs e){                     
-                       IsDragged = false;
-                       Drop.Raise (this, e);
-                       //e.DropTarget.onDragLeave (this, e);//raise drag leave in target
-                       #if DEBUG_DRAGNDROP
-                       Debug.WriteLine(this.ToString() + " : DROP => " + e.ToString());
-                       #endif
-               }
-               public bool IsDropTarget {
-                       get { return IFace.DragAndDropOperation?.DropTarget == this; }
-               }
-
-               #endregion
-
-               #region Queuing
-               /// <summary>
-               /// Register old and new slot for clipping
-               /// </summary>
-               public virtual void ClippingRegistration(){
-                       #if DEBUG_LOG
-                       DbgEvent dbgEvt = DebugLog.AddEvent(DbgEvtType.GOClippingRegistration, this);
-                       #endif  
-                       parentRWLock.EnterReadLock ();
-                       if (parent != null) {                                   
-                               Parent.RegisterClip (LastPaintedSlot);
-                               Parent.RegisterClip (Slot);
-                       }
-                       parentRWLock.ExitReadLock ();
-                       #if DEBUG_LOG
-                       dbgEvt.end = DebugLog.chrono.ElapsedTicks;
-                       #endif
-               }
-               /// <summary>
-               /// Add clip rectangle to this.clipping and propagate up to root
-               /// </summary>
-               /// <param name="clip">Clip rectangle</param>
-               public virtual void RegisterClip(Rectangle clip){
-                       #if DEBUG_LOG
-                       DbgEvent dbgEvt = DebugLog.AddEvent(DbgEvtType.GORegisterClip, this);
-                       #endif
-                       Rectangle cb = ClientRectangle;
-                       Rectangle  r = clip + cb.Position;
-                       if (r.Right > cb.Right)
-                               r.Width -= r.Right - cb.Right;
-                       if (r.Bottom > cb.Bottom)
-                               r.Height -= r.Bottom - cb.Bottom;
-                       if (CacheEnabled && !IsDirty)
-                               Clipping.UnionRectangle (r);
-                       if (Parent == null)
-                               return;
-                       GraphicObject p = Parent as GraphicObject;
-                       if (p?.IsDirty == true && p?.CacheEnabled == true)
-                               return;
-                       Parent.RegisterClip (r + Slot.Position);
-                       #if DEBUG_LOG
-                       dbgEvt.end = DebugLog.chrono.ElapsedTicks;
-                       #endif
-               }
-               /// <summary> Full update, content and layouting, taking care of sizing policy </summary>
-               [MethodImpl(MethodImplOptions.AggressiveInlining)]
-               public void RegisterForGraphicUpdate ()
-               {
-                       IsDirty = true;
-                       if (Width.IsFit || Height.IsFit)
-                               RegisterForLayouting (LayoutingType.Sizing);
-                       else if (RegisteredLayoutings == LayoutingType.None)
-                               IFace.EnqueueForRepaint (this);
-               }
-               /// <summary> query an update of the content without layouting changes</summary>
-               [MethodImpl(MethodImplOptions.AggressiveInlining)]
-               public void RegisterForRedraw ()
-               {
-                       IsDirty = true;
-                       if (RegisteredLayoutings == LayoutingType.None)
-                               IFace.EnqueueForRepaint (this);
-               }
-               #endregion
-
-               #region Layouting
-
-               /// <summary> return size of content + margins </summary>
-               protected virtual int measureRawSize (LayoutingType lt) {
-                       return lt == LayoutingType.Width ?
-                               contentSize.Width + 2 * Margin: contentSize.Height + 2 * Margin;
-               }
-               /// <summary> By default in groups, LayoutingType.ArrangeChildren is reset </summary>
-               public virtual void ChildrenLayoutingConstraints(ref LayoutingType layoutType){
-               }
-               public virtual bool ArrangeChildren { get { return false; } }
-               public virtual void RegisterForLayouting(LayoutingType layoutType){
-                       if (Parent == null)
-                               return;
-                       lock (IFace.LayoutMutex) {
-                               //prevent queueing same LayoutingType for this
-                               layoutType &= (~RegisteredLayoutings);
-
-                               if (layoutType == LayoutingType.None)
-                                       return;
-                               //dont set position for stretched item
-                               if (Width == Measure.Stretched)
-                                       layoutType &= (~LayoutingType.X);
-                               if (Height == Measure.Stretched)
-                                       layoutType &= (~LayoutingType.Y);
-
-                               if (!ArrangeChildren)
-                                       layoutType &= (~LayoutingType.ArrangeChildren);
-
-                               //apply constraints depending on parent type
-                               if (Parent is GraphicObject)
-                                       (Parent as GraphicObject).ChildrenLayoutingConstraints (ref layoutType);
-
-//                             //prevent queueing same LayoutingType for this
-                               layoutType &= (~RegisteredLayoutings);
-
-                               if (layoutType == LayoutingType.None)
-                                       return;
-
-                               //enqueue LQI LayoutingTypes separately
-                               if (layoutType.HasFlag (LayoutingType.Width))
-                                       IFace.LayoutingQueue.Enqueue (new LayoutingQueueItem (LayoutingType.Width, this));
-                               if (layoutType.HasFlag (LayoutingType.Height))
-                                       IFace.LayoutingQueue.Enqueue (new LayoutingQueueItem (LayoutingType.Height, this));
-                               if (layoutType.HasFlag (LayoutingType.X))
-                                       IFace.LayoutingQueue.Enqueue (new LayoutingQueueItem (LayoutingType.X, this));
-                               if (layoutType.HasFlag (LayoutingType.Y))
-                                       IFace.LayoutingQueue.Enqueue (new LayoutingQueueItem (LayoutingType.Y, this));
-                               if (layoutType.HasFlag (LayoutingType.ArrangeChildren))
-                                       IFace.LayoutingQueue.Enqueue (new LayoutingQueueItem (LayoutingType.ArrangeChildren, this));
-                       }
-               }
-
-               /// <summary> trigger dependant sizing component update </summary>
-               public virtual void OnLayoutChanges(LayoutingType  layoutType)
-               {
-                       switch (layoutType) {
-                       case LayoutingType.Width:
-                               RegisterForLayouting (LayoutingType.X);
-                               break;
-                       case LayoutingType.Height:
-                               RegisterForLayouting (LayoutingType.Y);
-                               break;
-                       }
-                       LayoutChanged.Raise (this, new LayoutingEventArgs (layoutType));
-               }
-               internal protected void raiseLayoutChanged(LayoutingEventArgs e){
-                       LayoutChanged.Raise (this, e);
-               }
-               /// <summary> Update layout component only one at a time, this is where the computation of alignement
-               /// and size take place.
-               /// The redrawing will only be triggered if final slot size has changed </summary>
-               /// <returns><c>true</c>, if layouting was possible, <c>false</c> if conditions were not
-               /// met and LQI has to be re-queued</returns>
-               public virtual bool UpdateLayout (LayoutingType layoutType)
-               {
-                       //unset bit, it would be reset if LQI is re-queued
-                       registeredLayoutings &= (~layoutType);
-
-                       switch (layoutType) {
-                       case LayoutingType.X:
-                               if (Left == 0) {
-
-                                       if (Parent.RegisteredLayoutings.HasFlag (LayoutingType.Width) ||
-                                           RegisteredLayoutings.HasFlag (LayoutingType.Width))
-                                               return false;
-
-                                       switch (HorizontalAlignment) {
-                                       case HorizontalAlignment.Left:
-                                               Slot.X = 0;
-                                               break;
-                                       case HorizontalAlignment.Right:
-                                               Slot.X = Parent.ClientRectangle.Width - Slot.Width;
-                                               break;
-                                       case HorizontalAlignment.Center:
-                                               Slot.X = Parent.ClientRectangle.Width / 2 - Slot.Width / 2;
-                                               break;
-                                       }
-                               } else
-                                       Slot.X = Left;
-
-                               if (LastSlots.X == Slot.X)
-                                       break;
-
-                               IsDirty = true;
-
-                               OnLayoutChanges (layoutType);
-
-                               LastSlots.X = Slot.X;
-                               break;
-                       case LayoutingType.Y:
-                               if (Top == 0) {
-
-                                       if (Parent.RegisteredLayoutings.HasFlag (LayoutingType.Height) ||
-                                           RegisteredLayoutings.HasFlag (LayoutingType.Height))
-                                               return false;
-
-                                       switch (VerticalAlignment) {
-                                       case VerticalAlignment.Top://this could be processed even if parent Height is not known
-                                               Slot.Y = 0;
-                                               break;
-                                       case VerticalAlignment.Bottom:
-                                               Slot.Y = Parent.ClientRectangle.Height - Slot.Height;
-                                               break;
-                                       case VerticalAlignment.Center:
-                                               Slot.Y = Parent.ClientRectangle.Height / 2 - Slot.Height / 2;
-                                               break;
-                                       }
-                               } else
-                                       Slot.Y = Top;
-
-                               if (LastSlots.Y == Slot.Y)
-                                       break;
-
-                               IsDirty = true;
-
-                               OnLayoutChanges (layoutType);
-
-                               LastSlots.Y = Slot.Y;
-                               break;
-                       case LayoutingType.Width:
-                               if (Visible) {
-                                       if (Width.IsFixed)
-                                               Slot.Width = Width;
-                                       else if (Width == Measure.Fit) {
-                                               Slot.Width = measureRawSize (LayoutingType.Width);
-                                       } else if (Parent.RegisteredLayoutings.HasFlag (LayoutingType.Width))
-                                               return false;
-                                       else if (Width == Measure.Stretched)
-                                               Slot.Width = Parent.ClientRectangle.Width;
-                                       else
-                                               Slot.Width = (int)Math.Round ((double)(Parent.ClientRectangle.Width * Width) / 100.0);
-
-                                       if (Slot.Width < 0)
-                                               return false;
-
-                                       //size constrain
-                                       if (Slot.Width < MinimumSize.Width) {
-                                               Slot.Width = MinimumSize.Width;
-                                               //NotifyValueChanged ("WidthPolicy", Measure.Stretched);
-                                       } else if (Slot.Width > MaximumSize.Width && MaximumSize.Width > 0) {
-                                               Slot.Width = MaximumSize.Width;
-                                               //NotifyValueChanged ("WidthPolicy", Measure.Stretched);
-                                       }
-                               } else
-                                       Slot.Width = 0;
-
-                               if (LastSlots.Width == Slot.Width)
-                                       break;
-
-                               IsDirty = true;
-
-                               OnLayoutChanges (layoutType);
-
-                               LastSlots.Width = Slot.Width;
-                               break;
-                       case LayoutingType.Height:
-                               if (Visible) {
-                                       if (Height.IsFixed)
-                                               Slot.Height = Height;
-                                       else if (Height == Measure.Fit) {
-                                               Slot.Height = measureRawSize (LayoutingType.Height);
-                                       } else if (Parent.RegisteredLayoutings.HasFlag (LayoutingType.Height))
-                                               return false;
-                                       else if (Height == Measure.Stretched)
-                                               Slot.Height = Parent.ClientRectangle.Height;
-                                       else
-                                               Slot.Height = (int)Math.Round ((double)(Parent.ClientRectangle.Height * Height) / 100.0);
-
-                                       if (Slot.Height < 0)
-                                               return false;
-
-                                       //size constrain
-                                       if (Slot.Height < MinimumSize.Height) {
-                                               Slot.Height = MinimumSize.Height;
-                                               //NotifyValueChanged ("HeightPolicy", Measure.Stretched);
-                                       } else if (Slot.Height > MaximumSize.Height && MaximumSize.Height > 0) {
-                                               Slot.Height = MaximumSize.Height;
-                                               //NotifyValueChanged ("HeightPolicy", Measure.Stretched);
-                                       }
-                               } else
-                                       Slot.Height = 0;
-
-                               if (LastSlots.Height == Slot.Height)
-                                       break;
-
-                               IsDirty = true;
-
-                               OnLayoutChanges (layoutType);
-
-                               LastSlots.Height = Slot.Height;
-                               break;
-                       }
-
-                       //if no layouting remains in queue for item, registre for redraw
-                       if (this.registeredLayoutings == LayoutingType.None && IsDirty)
-                               IFace.EnqueueForRepaint (this);
-
-                       return true;
-               }
-               #endregion
-
-               #region Rendering
-               /// <summary> This is the common overridable drawing routine to create new widget </summary>
-               protected virtual void onDraw(Context gr)
-               {
-                       #if DEBUG_LOG
-                       DbgEvent dbgEvt = DebugLog.AddEvent(DbgEvtType.GODraw, this);
-                       #endif
-
-                       Rectangle rBack = new Rectangle (Slot.Size);
-
-                       Background.SetAsSource (gr, rBack);
-                       CairoHelpers.CairoRectangle (gr, rBack, cornerRadius);
-                       gr.Fill ();
-
-                       #if DEBUG_LOG
-                       dbgEvt.end = DebugLog.chrono.ElapsedTicks;
-                       #endif
-               }
-
-               /// <summary>
-               /// Internal drawing context creation on a cached surface limited to slot size
-               /// this trigger the effective drawing routine </summary>
-               protected virtual void RecreateCache ()
-               {
-                       #if DEBUG_LOG
-                       DbgEvent dbgEvt = DebugLog.AddEvent(DbgEvtType.GORecreateCache, this);
-                       #endif
-
-                       /*if (bmp == null)
-                               bmp = IFace.surf.CreateSimilar (Content.ColorAlpha, Slot.Width, Slot.Height);
-                       else if (LastPaintedSlot.Width != Slot.Width || LastPaintedSlot.Height != Slot.Height)
-                               bmp.SetSize (Slot.Width, Slot.Height);*/
-                       bmp?.Dispose ();
-                       bmp = new ImageSurface(Format.Argb32, Slot.Width, Slot.Height);
-                       
-                       using (Context gr = new Context (bmp)) {
-                               gr.Antialias = Interface.Antialias;
-                               onDraw (gr);
-                       }
-
-                       IsDirty = false;
-
-                       #if DEBUG_LOG
-                       dbgEvt.end = DebugLog.chrono.ElapsedTicks;
-                       #endif
-               }
-               protected virtual void UpdateCache(Context ctx){
-                       #if DEBUG_LOG
-                       DbgEvent dbgEvt = DebugLog.AddEvent(DbgEvtType.GOUpdateCacheAndPaintOnCTX, this);
-                       #endif
-
-                       Rectangle rb = Slot + Parent.ClientRectangle.Position;
-                       if (clearBackground) {
-                                       ctx.Save ();
-                                       ctx.Operator = Operator.Clear;
-                                       ctx.Rectangle (rb);
-                                       ctx.Fill ();
-                                       ctx.Restore ();
-                       }
-
-                       ctx.SetSourceSurface (bmp, rb.X, rb.Y);
-                       ctx.Paint ();
-                       Clipping.Dispose ();
-                       Clipping = new Region ();
-                       #if DEBUG_LOG
-                       dbgEvt.end = DebugLog.chrono.ElapsedTicks;
-                       #endif
-               }
-               /// <summary> Chained painting routine on the parent context of the actual cached version
-               /// of the widget </summary>
-               public virtual void Paint (ref Context ctx)
-               {
-                       #if DEBUG_LOG
-                       DebugLog.AddEvent(DbgEvtType.GOPaint, this);
-                       #endif
-                       //TODO:this test should not be necessary
-                       if (Slot.Height < 0 || Slot.Width < 0 || parent == null)
-                               return;
-                       lock (this) {
-                               if (cacheEnabled) {
-                                       if (Slot.Width > Interface.MaxCacheSize || Slot.Height > Interface.MaxCacheSize)
-                                               cacheEnabled = false;
-                               }
-
-                               if (cacheEnabled) {
-                                       if (IsDirty)
-                                               RecreateCache ();
-
-                                       UpdateCache (ctx);
-                                       if (!isEnabled)                                         
-                                               paintDisabled (ctx, Slot + Parent.ClientRectangle.Position);                                    
-                               } else {
-                                       Rectangle rb = Slot + Parent.ClientRectangle.Position;
-                                       ctx.Save ();
-
-                                       ctx.Translate (rb.X, rb.Y);
-
-                                       onDraw (ctx);
-                                       if (!isEnabled)
-                                               paintDisabled (ctx, Slot);
-
-                                       ctx.Restore ();
-                               }
-                               LastPaintedSlot = Slot;
-                       }
-               }
-               void paintDisabled(Context gr, Rectangle rb){
-                       gr.Operator = Operator.Xor;
-                       gr.SetSourceRGBA (0.6, 0.6, 0.6, 0.3);
-                       gr.Rectangle (rb);
-                       gr.Fill ();
-                       gr.Operator = Operator.Over;
-               }
-               #endregion
-
-        #region Keyboard handling
-               public virtual void onKeyDown(object sender, KeyEventArgs e){
-                       KeyDown.Raise (this, e);
-               }
-               public virtual void onKeyUp(object sender, KeyEventArgs e){
-                       KeyUp.Raise (this, e);
-               }
-               public virtual void onKeyPress(object sender, KeyPressEventArgs e){
-                       KeyPress.Raise (this, e);
-               }
-        #endregion
-
-               #region Mouse handling
-               /// <summary>
-               /// Recursive local coordinate point test.
-               /// After test on parent, point m is in local coord system.
-               /// </summary>
-               /// <returns>return true, if point is in the bounds of this control</returns>
-               /// <param name="m">by ref point to test, init value is not kept</param>
-               public virtual bool PointIsIn(ref Point m)
-               {
-                       if (parent == null)
-                               return false;
-                       if (!(Visible & isEnabled)||IsDragged)
-                               return false;
-                       if (!parent.PointIsIn(ref m))
-                               return false;
-                       m -= (parent.getSlot().Position + parent.ClientRectangle.Position) ;
-                       return Slot.ContainsOrIsEqual (m);                                      
-               }
-               public virtual bool MouseIsIn(Point m)
-               {                       
-                       return (!(Visible & isEnabled)||IsDragged) ? false : PointIsIn (ref m);
-               }
-               public virtual void checkHoverWidget(MouseMoveEventArgs e)
-               {
-                       if (IFace.HoverWidget != this) {
-                               IFace.HoverWidget = this;
-                               onMouseEnter (this, e);
-                       }
-
-                       //this.onMouseMove (this, e);//without this, window border doesn't work, should be removed
-               }
-               public virtual void onMouseMove(object sender, MouseMoveEventArgs e)
-               {
-                       if (AllowDrag & HasFocus & e.Mouse.LeftButton == ButtonState.Pressed) {
-                               if (IFace.DragAndDropOperation == null) {
-                                       IFace.DragAndDropOperation = new DragDropEventArgs (this);
-                                       onStartDrag (this, IFace.DragAndDropOperation);
-                               }
-                       }
-
-                       //dont bubble event if dragged, mouse move is routed directely from iface
-                       //to let other control behind have mouse entering
-                       if (isDragged)
-                               return;
-                       
-                       //bubble event to the top
-                       GraphicObject p = focusParent;
-                       if (p != null)
-                               p.onMouseMove(sender,e);
-
-                       MouseMove.Raise (this, e);
-               }
-               public virtual void onMouseDown(object sender, MouseButtonEventArgs e){
-                       #if DEBUG_FOCUS
-                       Debug.WriteLine("MOUSE DOWN => " + this.ToString());
-                       #endif
-
-                       if (this.Focusable && !Interface.FocusOnHover) {
-                               BubblingMouseButtonEventArg be = e as BubblingMouseButtonEventArg;
-                               if (be.Focused == null) {
-                                       be.Focused = this;
-                                       IFace.FocusedWidget = this;
-                                       if (e.Button == MouseButton.Right && this.ContextCommands != null)
-                                               IFace.ShowContextMenu (this);                                   
-                               }
-                       }
-                       //bubble event to the top
-                       GraphicObject p = focusParent;
-                       if (p != null)
-                               p.onMouseDown(sender,e);
-
-                       MouseDown.Raise (this, e);
-               }
-               public virtual void onMouseUp(object sender, MouseButtonEventArgs e){
-                       #if DEBUG_FOCUS
-                       Debug.WriteLine("MOUSE UP => " + this.ToString());
-                       #endif
-
-                       if (IFace.DragAndDropOperation != null){
-                               if (IFace.DragAndDropOperation.DragSource == this) {
-                                       if (IFace.DragAndDropOperation.DropTarget != null)
-                                               onDrop (this, IFace.DragAndDropOperation);
-                                       else
-                                               onEndDrag (this, IFace.DragAndDropOperation);
-                                       IFace.DragAndDropOperation = null;
-                               }
-                       }
-
-                       //bubble event to the top
-                       GraphicObject p = focusParent;
-                       if (p != null)
-                               p.onMouseUp(sender,e);
-
-                       MouseUp.Raise (this, e);
-               }
-               public virtual void onMouseClick(object sender, MouseButtonEventArgs e){
-                       #if DEBUG_FOCUS
-                       Debug.WriteLine("CLICK => " + this.ToString());
-                       #endif
-                       GraphicObject p = focusParent;
-                       if (p != null)
-                               p.onMouseClick(sender,e);
-                       MouseClick.Raise (this, e);
-               }
-               public virtual void onMouseDoubleClick(object sender, MouseButtonEventArgs e){
-                       #if DEBUG_FOCUS
-                       Debug.WriteLine("DOUBLE CLICK => " + this.ToString());
-                       #endif
-                       GraphicObject p = focusParent;
-                       if (p != null)
-                               p.onMouseDoubleClick(sender,e);
-                       MouseDoubleClick.Raise (this, e);
-               }
-               public virtual void onMouseWheel(object sender, MouseWheelEventArgs e){
-                       GraphicObject p = focusParent;
-                       if (p != null)
-                               p.onMouseWheel(sender,e);
-
-                       MouseWheelChanged.Raise (this, e);
-               }
-               public virtual void onMouseEnter(object sender, MouseMoveEventArgs e)
-               {
-                       #if DEBUG_FOCUS
-                       Debug.WriteLine("MouseEnter => " + this.ToString());
-                       #endif
-
-                       if (IFace.DragAndDropOperation != null) {
-                               GraphicObject g = this;
-                               while (g != null) {
-                                       if (g.AllowDrop) {
-                                               if (IFace.DragAndDropOperation.DragSource != this && IFace.DragAndDropOperation.DropTarget != this) {
-                                                       if (IFace.DragAndDropOperation.DropTarget != null)
-                                                               IFace.DragAndDropOperation.DropTarget.onDragLeave (this, IFace.DragAndDropOperation);
-                                                       g.onDragEnter (this, IFace.DragAndDropOperation);
-                                               }
-                                               break;
-                                       }
-                                       g = g.focusParent;
-                               }
-                       }
-
-                       MouseEnter.Raise (this, e);
-               }
-               public virtual void onMouseLeave(object sender, MouseMoveEventArgs e)
-               {
-                       #if DEBUG_FOCUS
-                       Debug.WriteLine("MouseLeave => " + this.ToString());
-                       #endif
-
-                       MouseLeave.Raise (this, e);
-               }
-
-               #endregion
-
-               protected virtual void onFocused(object sender, EventArgs e){
-                       #if DEBUG_FOCUS
-                       Debug.WriteLine("Focused => " + this.ToString());
-                       #endif
-                       Focused.Raise (this, e);
-               }
-               protected virtual void onUnfocused(object sender, EventArgs e){
-                       #if DEBUG_FOCUS
-                       Debug.WriteLine("UnFocused => " + this.ToString());
-                       #endif
-                       Unfocused.Raise (this, e);
-               }
-               public virtual void onEnable(object sender, EventArgs e){
-                       Enabled.Raise (this, e);
-               }
-               public virtual void onDisable(object sender, EventArgs e){
-                       Disabled.Raise (this, e);
-               }
-               protected virtual void onParentChanged(object sender, DataSourceChangeEventArgs e) {
-//                     if (e.NewDataSource != null) {
-//                             if (width == Measure.Inherit)
-//                                     RegisterForLayouting (LayoutingType.Width);
-//                             if (height == Measure.Inherit)
-//                                     RegisterForLayouting (LayoutingType.Height);
-//                     }
-                       
-                       ParentChanged.Raise (this, e);
-                       if (logicalParent == null)
-                               LogicalParentChanged.Raise (this, e);
-               }
-               protected virtual void onLogicalParentChanged(object sender, DataSourceChangeEventArgs e) {
-                       LogicalParentChanged.Raise (this, e);
-               }
-               internal void ClearTemplateBinding(){
-                       #if DEBUG_UPDATE
-                       Debug.WriteLine (string.Format("ClearTemplateBinding: {0}", this.ToString()));
-                       #endif
-                       if (ValueChanged == null)
-                               return;
-                       EventInfo eiEvt = this.GetType().GetEvent ("ValueChanged");
-                       foreach (Delegate d in ValueChanged.GetInvocationList()) {
-                               if (d.Method.Name == "dyn_tmpValueChanged") {
-                                       eiEvt.RemoveEventHandler (this, d);
-                                       #if DEBUG_BINDING
-                                       Debug.WriteLine ("\t{0} template binding handler removed in {1} for: {2}", d.Method.Name, this, "ValueChanged");
-                                       #endif
-                               }
-                       }
-               }
-               public override string ToString ()
-               {
-                       string tmp ="";
-
-                       if (Parent != null)
-                               tmp = Parent.ToString () + tmp;
-                       #if DEBUG_LAYOUTING
-                       return Name == "unamed" ? tmp + "." + this.GetType ().Name + GraphicObjects.IndexOf(this).ToString(): tmp + "." + Name;
-                       #else
-                       return string.IsNullOrEmpty(Name) ? tmp + "." + this.GetType ().Name : tmp + "." + Name;
-                       #endif
-               }
-               /// <summary>
-               /// Checks to handle when widget is removed from the visible graphic tree
-               /// </summary>
-               void unshownPostActions () {
-                       if (IFace.HoverWidget != null) {
-                               if (IFace.HoverWidget.IsOrIsInside (this)) {
-                                       IFace.HoverWidget = null;
-                                       IFace.ProcessMouseMove (IFace.Mouse.X, IFace.Mouse.Y);
-                               }
-                       }
-                       if (IFace.ActiveWidget != null) {
-                               if (IFace.ActiveWidget.IsOrIsInside (this))
-                                       IFace.ActiveWidget = null;
-                       }
-                       if (IFace.FocusedWidget != null) {
-                               if (IFace.FocusedWidget.IsOrIsInside (this))
-                                       IFace.FocusedWidget = null;
-                       }                                       
-               }
-       }
-}
diff --git a/src/GraphicObjects/Grid.cs b/src/GraphicObjects/Grid.cs
deleted file mode 100644 (file)
index 71e89bd..0000000
+++ /dev/null
@@ -1,171 +0,0 @@
-//
-// Grid.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-using System.Diagnostics;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Xml.Serialization;
-using System.ComponentModel;
-
-namespace Crow
-{
-       /// <summary>
-       /// Simple grid container
-       /// Allow symetric placement of children on a grid,
-       /// excedental child (above grid sizing) are ignored
-       /// and invisible child keep their place in the grid
-       /// </summary>
-    public class Grid : Group
-    {
-               #region CTOR
-               protected Grid () : base(){}
-               public Grid(Interface iface) : base(iface)
-               {            
-               }
-               #endregion
-
-               #region Private fields
-        int _spacing;
-               int _columnCount;
-               int _rowCount;
-               #endregion
-
-               #region Public Properties
-        [DefaultValue(2)]
-        public int Spacing
-        {
-                       get { return _spacing; }
-            set { _spacing = value; }
-        }
-        [DefaultValue(2)]
-        public virtual int ColumnCount
-        {
-            get { return _columnCount; }
-            set { 
-                               if (_columnCount == value)
-                                       return;
-
-                               _columnCount = value; 
-
-                               NotifyValueChanged ("ColumnCount", ColumnCount);
-                               this.RegisterForLayouting (LayoutingType.ArrangeChildren);
-                       }
-        }
-               [DefaultValue(2)]
-               public virtual int RowCount
-               {
-                       get { return _rowCount; }
-                       set { 
-                               if (_rowCount == value)
-                                       return;
-
-                               _rowCount = value; 
-
-                               NotifyValueChanged ("RowCount", RowCount);
-                               this.RegisterForLayouting (LayoutingType.ArrangeChildren);
-                       }
-               }
-               public virtual int CaseWidth {
-                       get { return (Slot.Width - (ColumnCount - 1) * Spacing) / ColumnCount; }
-               }
-               public virtual int CaseHeight {
-                       get { return (Slot.Height - (RowCount - 1) * Spacing) / RowCount; }
-               }
-
-               #endregion
-
-               #region GraphicObject Overrides
-//             protected override Size measureRawSize ()
-//             {
-//                     Size tmp = new Size ();
-//
-//                     foreach (GraphicObject c in Children.Where(ch=>ch.Visible)) {
-//                             tmp.Width = Math.Max (tmp.Width, c.Slot.Width);
-//                             tmp.Height = Math.Max (tmp.Height, c.Slot.Height);
-//                     }
-//
-//                     tmp.Width *= (ColumnCount - 1) * Spacing / ColumnCount;;
-//                     tmp.Height *= (RowCount - 1) * Spacing / RowCount;
-//                     tmp.Width += 2 * Margin;
-//                     tmp.Height += 2 * Margin;
-//
-//                     return tmp;
-//             }
-               public override void ChildrenLayoutingConstraints (ref LayoutingType layoutType)
-               {
-                       //Prevent child repositionning
-                       layoutType &= (~LayoutingType.Positioning);
-               }
-               public override bool ArrangeChildren { get { return true; } }
-               public virtual void ComputeChildrenPositions()
-               {
-                       int slotWidth = CaseWidth;
-                       int slotHeight = CaseHeight;
-                       for (int curY = 0; curY < RowCount; curY++) {
-                               for (int curX = 0; curX < ColumnCount; curX++) {
-                                       int idx = curY * ColumnCount + curX;
-                                       if (idx >= Children.Count)
-                                               return;
-                                       GraphicObject c = Children [idx];
-                                       if (!c.Visible)
-                                               continue;
-                                       c.Slot.X = curX * (slotWidth + Spacing);
-                                       c.Slot.Y = curY * (slotHeight + Spacing);
-                                       //c.Slot.Width = slotWidth;
-                                       //c.Slot.Height = slotHeight;
-                               }
-                       }
-                       IsDirty = true;
-               }
-               public override void OnChildLayoutChanges (object sender, LayoutingEventArgs arg)
-               {
-                       //base.OnChildLayoutChanges (sender, arg);
-               }
-
-               public override bool UpdateLayout (LayoutingType layoutType)
-               {
-                       RegisteredLayoutings &= (~layoutType);
-
-                       if (layoutType == LayoutingType.ArrangeChildren) {                              
-
-                               ComputeChildrenPositions ();
-
-                               //if no layouting remains in queue for item, registre for redraw
-                               if (RegisteredLayoutings == LayoutingType.None && IsDirty)
-                                       IFace.EnqueueForRepaint (this);
-                               
-                               return true;
-                       }
-
-                       return base.UpdateLayout(layoutType);
-               }
-               #endregion
-
-    
-       }
-}
diff --git a/src/GraphicObjects/Group.cs b/src/GraphicObjects/Group.cs
deleted file mode 100644 (file)
index 13fdcd4..0000000
+++ /dev/null
@@ -1,473 +0,0 @@
-//
-// Group.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Xml.Serialization;
-using Cairo;
-using System.Diagnostics;
-using System.Reflection;
-using System.Threading;
-
-
-namespace Crow
-{
-       public class Group : GraphicObject
-    {
-               #if DESIGN_MODE
-               public override bool FindByDesignID(string designID, out GraphicObject go){
-                       go = null;
-                       if (base.FindByDesignID (designID, out go))
-                               return true;
-                       childrenRWLock.EnterReadLock ();
-                       foreach (GraphicObject w in Children) {
-                               if (!w.FindByDesignID (designID, out go))
-                                       continue;
-                               childrenRWLock.ExitReadLock ();
-                               return true;
-                       }
-                       childrenRWLock.ExitReadLock ();
-                       return false;
-               }
-               public override void getIML (System.Xml.XmlDocument doc, System.Xml.XmlNode parentElem)
-               {
-                       if (this.design_isTGItem)
-                               return;
-                       base.getIML (doc, parentElem);
-                       foreach (GraphicObject g in Children) {
-                               g.getIML (doc, parentElem.LastChild);   
-                       }
-               }
-               #endif
-
-               protected ReaderWriterLockSlim childrenRWLock = new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion);
-
-               #region CTOR
-               public Group () : base() {}
-               public Group(Interface iface) : base(iface){}
-               #endregion
-
-               #region EVENT HANDLERS
-               public event EventHandler<EventArgs> ChildrenCleared;
-               #endregion
-
-               internal GraphicObject largestChild = null;
-               internal GraphicObject tallestChild = null;
-
-        bool _multiSelect = false;
-               List<GraphicObject> children = new List<GraphicObject>();
-
-        public virtual List<GraphicObject> Children {
-                       get { return children; }
-               }
-               [DefaultValue(false)]
-        public bool MultiSelect
-        {
-            get { return _multiSelect; }
-            set { _multiSelect = value; }
-        }
-               public virtual void AddChild(GraphicObject g){
-                       childrenRWLock.EnterWriteLock();
-
-                       g.Parent = this;
-                       Children.Add (g);
-
-                       childrenRWLock.ExitWriteLock();
-
-                       g.RegisteredLayoutings = LayoutingType.None;
-                       g.LayoutChanged += OnChildLayoutChanges;
-                       g.RegisterForLayouting (LayoutingType.Sizing | LayoutingType.ArrangeChildren);
-               }
-        public virtual void RemoveChild(GraphicObject child)
-               {
-                       child.LayoutChanged -= OnChildLayoutChanges;
-                       //check if HoverWidget is removed from Tree
-                       if (IFace.HoverWidget != null) {
-                               if (this.Contains (IFace.HoverWidget))
-                                       IFace.HoverWidget = null;
-                       }
-
-                       childrenRWLock.EnterWriteLock ();
-
-                       Children.Remove(child);
-                       child.Parent = null;
-
-                       childrenRWLock.ExitWriteLock ();
-
-                       if (child == largestChild && Width == Measure.Fit)
-                               searchLargestChild ();
-                       if (child == tallestChild && Height == Measure.Fit)
-                               searchTallestChild ();
-
-                       this.RegisterForLayouting (LayoutingType.Sizing | LayoutingType.ArrangeChildren);
-
-               }
-        public virtual void DeleteChild(GraphicObject child)
-               {
-                       RemoveChild (child);
-                       child.Dispose ();
-        }
-               public virtual void InsertChild (int idx, GraphicObject g) {
-                       childrenRWLock.EnterWriteLock ();
-                               
-                       g.Parent = this;
-                       Children.Insert (idx, g);
-
-                       childrenRWLock.ExitWriteLock ();
-
-                       g.RegisteredLayoutings = LayoutingType.None;
-                       g.LayoutChanged += OnChildLayoutChanges;
-                       g.RegisterForLayouting (LayoutingType.Sizing | LayoutingType.ArrangeChildren);
-               }
-               public virtual void RemoveChild (int idx) {
-                       RemoveChild (children[idx]);
-               }
-               public virtual void DeleteChild (int idx) {
-                       DeleteChild (children[idx]);
-               }
-               public virtual void ClearChildren()
-               {
-                       childrenRWLock.EnterWriteLock ();
-
-                       while (Children.Count > 0) {
-                               GraphicObject g = Children [Children.Count - 1];
-                               g.LayoutChanged -= OnChildLayoutChanges;
-                               Children.RemoveAt (Children.Count - 1);
-                               g.Dispose ();
-                       }
-
-                       childrenRWLock.ExitWriteLock ();
-
-                       resetChildrenMaxSize ();
-
-                       this.RegisterForLayouting (LayoutingType.Sizing);
-                       ChildrenCleared.Raise (this, new EventArgs ());
-               }
-               public override void OnDataSourceChanged (object sender, DataSourceChangeEventArgs e)
-               {
-                       base.OnDataSourceChanged (this, e);
-
-                       childrenRWLock.EnterReadLock ();
-                       foreach (GraphicObject g in Children) {
-                               if (g.localDataSourceIsNull & g.localLogicalParentIsNull)
-                                       g.OnDataSourceChanged (g, e);   
-                       }
-                       childrenRWLock.ExitReadLock ();
-               }
-
-               public void putWidgetOnTop(GraphicObject w)
-               {
-                       if (Children.Contains(w))
-                       {
-                               childrenRWLock.EnterWriteLock ();
-
-                               Children.Remove (w);
-                               Children.Add (w);
-
-                               childrenRWLock.ExitWriteLock ();
-                       }
-               }
-               public void putWidgetOnBottom(GraphicObject w)
-               {
-                       if (Children.Contains(w))
-                       {
-                               childrenRWLock.EnterWriteLock ();
-
-                               Children.Remove (w);
-                               Children.Insert (0, w);
-
-                               childrenRWLock.ExitWriteLock ();
-                       }
-               }
-
-               #region GraphicObject overrides
-
-               public override GraphicObject FindByName (string nameToFind)
-               {
-                       if (Name == nameToFind)
-                               return this;
-                       GraphicObject tmp = null;
-
-                       childrenRWLock.EnterReadLock ();
-
-                       foreach (GraphicObject w in Children) {
-                               tmp = w.FindByName (nameToFind);
-                               if (tmp != null)
-                                       break;
-                       }
-
-                       childrenRWLock.ExitReadLock ();
-
-                       return tmp;
-               }
-               public override bool Contains (GraphicObject goToFind)
-               {
-                       foreach (GraphicObject w in Children) {
-                               if (w == goToFind)
-                                       return true;
-                               if (w.Contains (goToFind))
-                                       return true;
-                       }
-                       return false;
-               }
-               protected override int measureRawSize (LayoutingType lt)
-               {
-                       if (Children.Count > 0) {
-                               if (lt == LayoutingType.Width) {
-                                       if (largestChild == null)
-                                               searchLargestChild ();
-                                       if (largestChild == null) {
-                                               //if still null, not possible to determine a width
-                                               //because all children are stretched, force first one to fit
-                                               Children [0].Width = Measure.Fit;
-                                               return -1;//cancel actual sizing to let child computation take place
-                                       }
-                               } else {
-                                       if (tallestChild == null)
-                                               searchTallestChild ();
-                                       if (tallestChild == null) {
-                                               Children [0].Height = Measure.Fit;
-                                               return -1;
-                                       }
-                               }
-                       }
-                       return base.measureRawSize (lt);
-               }
-
-               public override void OnLayoutChanges (LayoutingType layoutType)
-               {
-                       base.OnLayoutChanges (layoutType);
-
-                       childrenRWLock.EnterReadLock ();
-                       //position smaller objects in group when group size is fit
-                       switch (layoutType) {
-                       case LayoutingType.Width:
-                               foreach (GraphicObject c in Children) {
-                                       if (c.Width.IsRelativeToParent)
-                                               c.RegisterForLayouting (LayoutingType.Width);
-                                       else
-                                               c.RegisterForLayouting (LayoutingType.X);
-                               }
-                               break;
-                       case LayoutingType.Height:
-                               foreach (GraphicObject c in Children) {
-                                       if (c.Height.IsRelativeToParent)
-                                               c.RegisterForLayouting (LayoutingType.Height);
-                                       else
-                                               c.RegisterForLayouting (LayoutingType.Y);
-                               }
-                               break;
-                       }
-                       childrenRWLock.ExitReadLock ();
-               }
-               protected override void onDraw (Context gr)
-               {
-                       base.onDraw (gr);
-
-                       gr.Save ();
-
-                       if (ClipToClientRect) {
-                               //clip to client zone
-                               CairoHelpers.CairoRectangle (gr, ClientRectangle, CornerRadius);
-                               gr.Clip ();
-                       }
-
-                       childrenRWLock.EnterReadLock ();
-
-                       foreach (GraphicObject g in Children) {
-                               g.Paint (ref gr);
-                       }
-
-                       childrenRWLock.ExitReadLock ();
-                       gr.Restore ();
-               }
-               protected override void UpdateCache (Context ctx)
-               {
-                       Rectangle rb = Slot + Parent.ClientRectangle.Position;
-
-
-                       Context gr = new Context (bmp);
-
-                       if (!Clipping.IsEmpty) {
-                               for (int i = 0; i < Clipping.NumRectangles; i++)
-                                       gr.Rectangle(Clipping.GetRectangle(i));
-                               gr.ClipPreserve();
-                               gr.Operator = Operator.Clear;
-                               gr.Fill();
-                               gr.Operator = Operator.Over;
-
-                               base.onDraw (gr);
-
-                               if (ClipToClientRect) {
-                                       CairoHelpers.CairoRectangle (gr, ClientRectangle, CornerRadius);
-                                       gr.Clip ();
-                               }
-
-                               childrenRWLock.EnterReadLock ();
-
-                               foreach (GraphicObject c in Children) {
-                                       if (!c.Visible)
-                                               continue;
-                                       if (Clipping.Contains (c.Slot + ClientRectangle.Position) == RegionOverlap.Out)
-                                               continue;
-                                       c.Paint (ref gr);
-                               }
-
-                               childrenRWLock.ExitReadLock ();
-
-                               #if DEBUG_CLIP_RECTANGLE
-                               /*gr.LineWidth = 1;
-                               gr.SetSourceColor(Color.DarkMagenta.AdjustAlpha (0.8));
-                               for (int i = 0; i < Clipping.NumRectangles; i++)
-                                       gr.Rectangle(Clipping.GetRectangle(i));
-                               gr.Stroke ();*/
-                               #endif
-                       }
-                       gr.Dispose ();
-
-                       ctx.SetSourceSurface (bmp, rb.X, rb.Y);
-                       ctx.Paint ();
-
-                       Clipping.Dispose();
-                       Clipping = new Region ();
-               }
-               #endregion
-
-               public virtual void OnChildLayoutChanges (object sender, LayoutingEventArgs arg)
-               {
-                       GraphicObject g = sender as GraphicObject;
-
-                       switch (arg.LayoutType) {
-                       case LayoutingType.Width:
-                               if (Width != Measure.Fit)
-                                       return;
-                               if (g.Slot.Width > contentSize.Width) {
-                                       largestChild = g;
-                                       contentSize.Width = g.Slot.Width;
-                               } else if (g == largestChild)
-                                       searchLargestChild ();
-
-                               this.RegisterForLayouting (LayoutingType.Width);
-                               break;
-                       case LayoutingType.Height:
-                               if (Height != Measure.Fit)
-                                       return;
-                               if (g.Slot.Height > contentSize.Height) {
-                                       tallestChild = g;
-                                       contentSize.Height = g.Slot.Height;
-                               } else if (g == tallestChild)
-                                       searchTallestChild ();
-
-                               this.RegisterForLayouting (LayoutingType.Height);
-                               break;
-                       }
-               }
-               //TODO: x,y position should be taken in account for computation of width and height
-               void resetChildrenMaxSize(){
-                       largestChild = null;
-                       tallestChild = null;
-                       contentSize = 0;
-               }
-               void searchLargestChild(){
-                       #if DEBUG_LAYOUTING
-                       Debug.WriteLine("\tSearch largest child");
-                       #endif
-                       largestChild = null;
-                       contentSize.Width = 0;
-                       for (int i = 0; i < Children.Count; i++) {
-                               if (!Children [i].Visible)
-                                       continue;
-                               if (children [i].RegisteredLayoutings.HasFlag (LayoutingType.Width))
-                                       continue;
-                               if (Children [i].Slot.Width > contentSize.Width) {
-                                       contentSize.Width = Children [i].Slot.Width;
-                                       largestChild = Children [i];
-                               }
-                       }
-               }
-               void searchTallestChild(){
-                       #if DEBUG_LAYOUTING
-                       Debug.WriteLine("\tSearch tallest child");
-                       #endif
-                       tallestChild = null;
-                       contentSize.Height = 0;
-                       for (int i = 0; i < Children.Count; i++) {
-                               if (!Children [i].Visible)
-                                       continue;
-                               if (children [i].RegisteredLayoutings.HasFlag (LayoutingType.Height))
-                                       continue;
-                               if (Children [i].Slot.Height > contentSize.Height) {
-                                       contentSize.Height = Children [i].Slot.Height;
-                                       tallestChild = Children [i];
-                               }
-                       }
-               }
-
-
-               #region Mouse handling
-               public override void checkHoverWidget (MouseMoveEventArgs e)
-               {
-                       if (IFace.HoverWidget != this) {
-                               IFace.HoverWidget = this;
-                               onMouseEnter (this, e);
-                       }
-                       for (int i = Children.Count - 1; i >= 0; i--) {
-                               if (Children[i].MouseIsIn(e.Position))
-                               {
-                                       Children[i].checkHoverWidget (e);
-                                       return;
-                               }
-                       }
-                       base.checkHoverWidget (e);
-               }
-//             public override bool PointIsIn (ref Point m)
-//             {
-//                     if (!base.PointIsIn (ref m))
-//                             return false;
-//                     if (CurrentInterface.HoverWidget == this)
-//                             return true;
-//                     lock (Children) {
-//                             for (int i = Children.Count - 1; i >= 0; i--) {
-//                                     if (Children [i].Slot.ContainsOrIsEqual (m) && !(bool)CurrentInterface.HoverWidget?.IsOrIsInside(Children[i])) {                                                
-//                                             return false;
-//                                     }
-//                             }
-//                     }
-//                     return true;
-//             }
-               #endregion
-
-               protected override void Dispose (bool disposing)
-               {
-                       if (disposing) {
-                               foreach (GraphicObject c in children)
-                                       c.Dispose ();
-                       }
-                       base.Dispose (disposing);
-               }
-       }
-}
diff --git a/src/GraphicObjects/GroupBox.cs b/src/GraphicObjects/GroupBox.cs
deleted file mode 100644 (file)
index 2e32ddd..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-//
-// GroupBox.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-using System.Xml.Serialization;
-using System.ComponentModel;
-
-namespace Crow
-{
-       /// <summary>
-       /// templated container accepting one child
-       /// </summary>
-    public class GroupBox : TemplatedContainer
-    {          
-               #region CTOR
-               protected GroupBox () : base(){}
-               public GroupBox(Interface iface) : base(iface){}
-               #endregion
-       }
-}
diff --git a/src/GraphicObjects/HorizontalStack.cs b/src/GraphicObjects/HorizontalStack.cs
deleted file mode 100644 (file)
index 64d7cae..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-//
-// HorizontalStack.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Xml.Serialization;
-
-namespace Crow
-{
-       /// <summary>
-       /// group control stacking its children horizontally
-       /// </summary>
-    public class HorizontalStack : GenericStack
-    {
-               #region CTOR
-               protected HorizontalStack () : base(){}
-               public HorizontalStack(Interface iface) : base(iface)
-        {            
-        }
-               #endregion
-
-        [XmlIgnore]
-        public override Orientation Orientation
-        {
-            get { return Orientation.Horizontal; }
-        }
-    }
-}
diff --git a/src/GraphicObjects/HueSelector.cs b/src/GraphicObjects/HueSelector.cs
deleted file mode 100644 (file)
index d8218fe..0000000
+++ /dev/null
@@ -1,155 +0,0 @@
-//
-// HueSelector.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-using System.Xml.Serialization;
-using System.ComponentModel;
-using Cairo;
-
-namespace Crow
-{
-       [DesignIgnore]
-       public class HueSelector : ColorSelector
-       {
-               #region CTOR
-               protected HueSelector () : base(){}
-               public HueSelector (Interface iface) : base(iface)
-               {
-               }
-               #endregion
-
-               Orientation _orientation;
-               double hue;
-
-               [DefaultValue(Orientation.Horizontal)]
-               public virtual Orientation Orientation
-               {
-                       get { return _orientation; }
-                       set {
-                               if (_orientation == value)
-                                       return;
-                               _orientation = value;
-                               NotifyValueChanged ("Orientation", _orientation);
-                               RegisterForGraphicUpdate ();
-                       }
-               }
-               
-               public virtual double Hue {
-                       get { return hue; }
-                       set {
-                               if (hue == value)
-                                       return;
-                               hue = value;
-                               notifyHueChanged ();
-                               updateMousePosFromHue ();
-                               RegisterForRedraw ();
-                       }
-               }
-               protected override void onDraw (Context gr)
-               {
-                       base.onDraw (gr);
-
-                       Rectangle r = ClientRectangle;
-                       r.Height -= 4;
-                       r.Y += 2;
-
-                       Gradient.Type gt = Gradient.Type.Horizontal;
-                       if (Orientation == Orientation.Vertical)
-                               gt = Gradient.Type.Vertical;
-
-                       Crow.Gradient grad = new Gradient (gt);
-
-                       grad.Stops.Add (new Gradient.ColorStop (0,     new Color (1, 0, 0, 1)));
-                       grad.Stops.Add (new Gradient.ColorStop (0.167, new Color (1, 1, 0, 1)));
-                       grad.Stops.Add (new Gradient.ColorStop (0.333, new Color (0, 1, 0, 1)));
-                       grad.Stops.Add (new Gradient.ColorStop (0.5,   new Color (0, 1, 1, 1)));
-                       grad.Stops.Add (new Gradient.ColorStop (0.667, new Color (0, 0, 1, 1)));
-                       grad.Stops.Add (new Gradient.ColorStop (0.833, new Color (1, 0, 1, 1)));
-                       grad.Stops.Add (new Gradient.ColorStop (1,     new Color (1, 0, 0, 1)));
-
-                       grad.SetAsSource (gr, r);
-                       CairoHelpers.CairoRectangle (gr, r, CornerRadius);
-                       gr.Fill();
-               }
-
-               public override void Paint (ref Context ctx)
-               {
-                       base.Paint (ref ctx);
-
-                       Rectangle rb = Slot + Parent.ClientRectangle.Position;
-                       ctx.Save ();
-
-                       ctx.Translate (rb.X, rb.Y);
-
-                       ctx.SetSourceColor (Color.White);
-                       Rectangle r = ClientRectangle;
-                       if (Orientation == Orientation.Horizontal) {
-                               r.Width = 4;
-                               r.X = mousePos.X - 2;
-                       } else {
-                               r.Height = 4;
-                               r.Y = mousePos.Y - 2;
-                       }
-
-                       CairoHelpers.CairoRectangle (ctx, r, 1);
-                       ctx.SetSourceColor (Color.White);
-                       ctx.LineWidth = 1.0;
-                       ctx.Stroke();
-                       ctx.Restore ();
-               }
-               public override void OnLayoutChanges (LayoutingType layoutType)
-               {
-                       base.OnLayoutChanges (layoutType);
-
-                       if (Orientation == Orientation.Horizontal) {
-                               if (layoutType == LayoutingType.Width)
-                                       updateMousePosFromHue ();
-                       } else if (layoutType == LayoutingType.Height)
-                               updateMousePosFromHue ();
-               }
-               protected override void updateMouseLocalPos (Point mPos)
-               {
-                       base.updateMouseLocalPos (mPos);
-                       if (Orientation == Orientation.Horizontal)
-                               hue = (double)mousePos.X / (double)ClientRectangle.Width;
-                       else
-                               hue = (double)mousePos.Y / (double)ClientRectangle.Height;
-                       notifyHueChanged ();
-                       RegisterForRedraw ();
-               }
-               void updateMousePosFromHue(){
-                       if (Orientation == Orientation.Horizontal)
-                               mousePos.X = (int)Math.Floor(hue * (double)ClientRectangle.Width);
-                       else
-                               mousePos.Y = (int)Math.Floor(hue * (double)ClientRectangle.Height);
-               }
-               void notifyHueChanged(){
-                       NotifyValueChanged ("Hue", hue);
-                       NotifyValueChanged ("HueColor", new SolidColor (Color.FromHSV (hue)));
-               }
-       }
-}
-
diff --git a/src/GraphicObjects/ILayoutable.cs b/src/GraphicObjects/ILayoutable.cs
deleted file mode 100644 (file)
index c8aa38f..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-//
-// ILayoutable.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-using System.Collections.Generic;
-
-namespace Crow
-{
-       public interface ILayoutable
-       {
-               /// <summary> Parent in the graphic tree </summary>
-               ILayoutable Parent { get; set; }
-               /// <summary> The logical parent (used mainly for bindings) as opposed
-               ///  to the parent in the graphic tree </summary>
-               ILayoutable LogicalParent { get; set; }
-
-               Rectangle ClientRectangle { get; }
-               Rectangle getSlot();
-
-               bool ArrangeChildren { get; }
-               LayoutingType RegisteredLayoutings { get; set; }
-               void RegisterForLayouting(LayoutingType layoutType);
-               void RegisterClip(Rectangle clip);
-               bool UpdateLayout(LayoutingType layoutType);
-               bool PointIsIn(ref Point m);
-
-               Rectangle ContextCoordinates(Rectangle r);
-               Rectangle ScreenCoordinates (Rectangle r);
-
-       }
-}
-
diff --git a/src/GraphicObjects/IMLContainer.cs b/src/GraphicObjects/IMLContainer.cs
deleted file mode 100644 (file)
index 8469228..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-//
-// IMLContainer.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp_bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-using System;
-
-namespace Crow
-{
-       public class IMLContainer : PrivateContainer
-       {
-               public IMLContainer () : base()
-               {
-               }
-
-               string path;
-
-               public string Path {
-                       get { return path; }
-                       set {
-                               if (path == value)
-                                       return;
-                               path = value;
-                               this.SetChild (IFace.Load (path));
-                               NotifyValueChanged ("Path", path);
-                       }
-               }
-       }
-}
-
diff --git a/src/GraphicObjects/IValueChange.cs b/src/GraphicObjects/IValueChange.cs
deleted file mode 100644 (file)
index 7e18e5e..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-//
-// IValueChange.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-
-namespace Crow
-{
-       public interface IValueChange
-       {
-               event EventHandler<ValueChangeEventArgs> ValueChanged;
-       }
-}
-
diff --git a/src/GraphicObjects/Image.cs b/src/GraphicObjects/Image.cs
deleted file mode 100644 (file)
index 21a83f9..0000000
+++ /dev/null
@@ -1,215 +0,0 @@
-//
-// Image.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-using Cairo;
-using System.Xml.Serialization;
-using System.ComponentModel;
-using System.Diagnostics;
-
-
-namespace Crow
-{
-       /// <summary>
-       /// Base widget to display an image. Accepts bitmaps and SVGs.
-       /// </summary>
-       /// <remarks>
-       /// </remarks>
-       public class Image : GraphicObject
-       {
-               Picture _pic;
-               string _svgSub;
-               bool scaled, keepProps;
-               double opacity;
-
-               #region Public properties
-               /// <summary>
-               /// If false, original size will be kept in any case.
-               /// </summary>
-               [DefaultValue(true)]
-               public virtual bool Scaled {
-                       get { return scaled; }
-                       set {
-                               if (scaled == value)
-                                       return;
-                               scaled = value;
-                               NotifyValueChanged ("Scaled", scaled);
-                               if (_pic == null)
-                                       return;
-                               _pic.Scaled = scaled;
-                               RegisterForGraphicUpdate ();
-                       }
-               }
-               /// <summary>
-               /// If image is scaled, proportions will be preserved.
-               /// </summary>
-               [DefaultValue(true)]
-               public virtual bool KeepProportions {
-                       get { return keepProps; }
-                       set {
-                               if (keepProps == value)
-                                       return;
-                               keepProps = value;
-                               NotifyValueChanged ("KeepProportions", keepProps);
-                               if (_pic == null)
-                                       return;
-                               _pic.KeepProportions = keepProps;
-                               RegisterForGraphicUpdate ();
-                       }
-               }
-               /// <summary>
-               /// Image file path, may be on disk or embedded. Accepts bitmaps or SVG drawings.
-               /// </summary>
-        
-               public string Path {
-                       get { return _pic == null ? "" : _pic.Path; }
-                       set {
-                               if (value == Path)
-                                       return;
-                               try {
-                                       if (string.IsNullOrEmpty(value))
-                                               Picture = null;
-                                       else {
-                                               //lock(IFace.LayoutMutex){
-                                                       LoadImage (value);
-                                               //}
-                                       }
-                               } catch (Exception ex) {
-                                       Debug.WriteLine (ex.Message);
-                                       _pic = null;
-                               }
-                               NotifyValueChanged ("Path", Path);
-                       }
-               }
-               /// <summary>
-               /// Used only for svg images, repaint only node named referenced in SvgSub.
-               /// If null, all the svg is rendered
-               /// </summary>
-               
-               public string SvgSub {
-                       get { return _svgSub; }
-                       set {
-                               if (_svgSub == value)
-                                       return;
-                               _svgSub = value;
-                               RegisterForGraphicUpdate ();
-                       }
-               }
-               /// <summary>
-               /// Object holding the image data once loaded, may be used directely to pupulate this control without 
-               /// specifying a path.
-               /// </summary>
-               
-               public Picture Picture {
-                       get { return _pic; }
-                       set {
-                               if (_pic == value)
-                                       return;
-                               _pic = value;
-                               NotifyValueChanged ("Picture", _pic);
-                               RegisterForGraphicUpdate ();
-                       }
-               }
-               /// <summary>
-               /// Opacity parameter for the image
-               /// </summary>
-               // TODO:could be moved in GraphicObject
-               [DefaultValue(1.0)]
-               public virtual double Opacity {
-                       get { return opacity; }
-                       set {
-                               if (opacity == value)
-                                       return;
-                               opacity = value;
-                               NotifyValueChanged ("Faded", opacity);
-                               RegisterForRedraw ();
-                       }
-               }
-               #endregion
-
-               #region CTOR
-               /// <summary>
-               /// Initializes a new instance of the <see cref="Crow.Image"/> class.
-               /// </summary>
-               protected Image () : base(){}
-               /// <summary>
-               /// Initializes a new instance of the <see cref="Crow.Image"/> class from code
-               /// </summary>
-               /// <param name="iface">interface to bound to</param>
-               public Image (Interface iface) : base(iface)
-               {
-               }
-               #endregion
-
-               #region Image Loading
-               public void LoadImage (string path)
-               {
-                       Picture pic;
-                       if (path.EndsWith (".svg", true, System.Globalization.CultureInfo.InvariantCulture))
-                               pic = new SvgPicture (path);
-                       else
-                               pic = new BmpPicture (path);
-
-
-                       pic.Scaled = scaled;
-                       pic.KeepProportions = keepProps;
-
-                       Picture = pic;
-               }
-               #endregion
-
-               #region GraphicObject overrides
-               protected override int measureRawSize (LayoutingType lt)
-               {
-                       if (_pic == null)
-                               return 2 * Margin;
-                               //_pic = "#Crow.Images.Icons.IconAlerte.svg";
-                       //TODO:take scalling in account
-                       if (lt == LayoutingType.Width)
-                               return _pic.Dimensions.Width + 2 * Margin;
-                       else
-                               return _pic.Dimensions.Height + 2 * Margin;
-               }
-               protected override void onDraw (Context gr)
-               {
-                       base.onDraw (gr);
-
-                       if (_pic == null)
-                               return;
-
-                       _pic.Paint (gr, ClientRectangle, _svgSub);
-
-                       if (Opacity<1.0) {
-                               gr.SetSourceRGBA (0.0, 0.0, 0.0, 1.0-Opacity);
-                               gr.Operator = Operator.DestOut;
-                               gr.Rectangle (ClientRectangle);
-                               gr.Fill ();
-                               gr.Operator = Operator.Over;
-                       }
-               }
-               #endregion
-       }
-}
diff --git a/src/GraphicObjects/Label.cs b/src/GraphicObjects/Label.cs
deleted file mode 100644 (file)
index c8a4369..0000000
+++ /dev/null
@@ -1,846 +0,0 @@
-//
-// Label.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Diagnostics;
-using Cairo;
-using System.Text.RegularExpressions;
-using System.Xml.Serialization;
-using System.ComponentModel;
-
-namespace Crow
-{
-    public class Label : GraphicObject
-    {
-               #region CTOR
-               protected Label () : base(){}
-
-               public Label(Interface iface) : base(iface)
-               {
-
-               }
-//             public Label(string _text)
-//                     : base()
-//             {
-//                     Text = _text;
-//             }
-               #endregion
-
-               public event EventHandler<TextChangeEventArgs> TextChanged;
-
-               public virtual void OnTextChanged(Object sender, TextChangeEventArgs e)
-               {
-                       textMeasureIsUpToDate = false;
-                       NotifyValueChanged ("Text", Text);
-                       TextChanged.Raise (this, e);
-               }
-        //TODO:change protected to private
-
-               #region private and protected fields
-               string _text = "label";
-        Alignment _textAlignment;
-               bool horizontalStretch;
-               bool verticalStretch;
-               bool _selectable;
-               bool _multiline;
-               Color selBackground;
-               Color selForeground;
-               Point mouseLocalPos = -1;//mouse coord in widget space, filled only when clicked
-               int _currentCol;        //0 based cursor position in string
-               int _currentLine;
-               Point _selBegin = -1;   //selection start (row,column)
-               Point _selRelease = -1; //selection end (row,column)
-               double textCursorPos;   //cursor position in cairo units in widget client coord.
-               double SelStartCursorPos = -1;
-               double SelEndCursorPos = -1;
-               bool SelectionInProgress = false;
-
-        protected Rectangle rText;
-               protected float widthRatio = 1f;
-               protected float heightRatio = 1f;
-               protected FontExtents fe;
-               protected TextExtents te;
-               #endregion
-
-               [DefaultValue("SteelBlue")]
-               public virtual Color SelectionBackground {
-                       get { return selBackground; }
-                       set {
-                               if (value == selBackground)
-                                       return;
-                               selBackground = value;
-                               NotifyValueChanged ("SelectionBackground", selBackground);
-                               RegisterForRedraw ();
-                       }
-               }
-               [DefaultValue("White")]
-               public virtual Color SelectionForeground {
-                       get { return selForeground; }
-                       set {
-                               if (value == selForeground)
-                                       return;
-                               selForeground = value;
-                               NotifyValueChanged ("SelectionForeground", selForeground);
-                               RegisterForRedraw ();
-                       }
-               }
-               [DefaultValue(Alignment.Left)]
-               public Alignment TextAlignment
-        {
-            get { return _textAlignment; }
-            set {
-                               if (value == _textAlignment)
-                                       return;
-                               _textAlignment = value;
-                               RegisterForRedraw ();
-                               NotifyValueChanged ("TextAlignment", _textAlignment);
-                       }
-        }
-               [DefaultValue(false)]
-               public virtual bool HorizontalStretch {
-                       get { return horizontalStretch; }
-                       set {
-                               if (horizontalStretch == value)
-                                       return;
-                               horizontalStretch = value;
-                               RegisterForRedraw ();
-                               NotifyValueChanged ("HorizontalStretch", horizontalStretch);
-                       }
-               }
-               [DefaultValue(false)]
-               public virtual bool VerticalStretch {
-                       get { return verticalStretch; }
-                       set {
-                               if (verticalStretch == value)
-                                       return;
-                               verticalStretch = value;
-                               RegisterForRedraw ();
-                               NotifyValueChanged ("VerticalStretch", verticalStretch);
-                       }
-               }
-               [DefaultValue("label")]
-        public string Text
-        {
-            get {
-                               return lines == null ?
-                                       _text : lines.Aggregate((i, j) => i + Interface.LineBreak + j);
-                       }
-            set
-            {
-                               if (string.Equals (value, _text, StringComparison.Ordinal))
-                    return;
-
-                _text = value;
-
-                               if (string.IsNullOrEmpty(_text))
-                                       _text = "";
-
-                               lines = getLines;
-
-                               OnTextChanged (this, new TextChangeEventArgs (Text));
-                               RegisterForGraphicUpdate ();
-            }
-        }
-               [DefaultValue(false)]
-               public bool Selectable
-               {
-                       get { return _selectable; }
-                       set
-                       {
-                               if (value == _selectable)
-                                       return;
-                               _selectable = value;
-                               NotifyValueChanged ("Selectable", _selectable);
-                               SelBegin = -1;
-                               SelRelease = -1;
-                               RegisterForRedraw ();
-                       }
-               }
-               [DefaultValue(false)]
-               public bool Multiline
-               {
-                       get { return _multiline; }
-                       set
-                       {
-                               if (value == _multiline)
-                                       return;
-                               _multiline = value;
-                               NotifyValueChanged ("Multiline", _multiline);
-                               RegisterForGraphicUpdate();
-                       }
-               }
-               [DefaultValue(0)]
-               public int CurrentColumn{
-                       get { return _currentCol; }
-                       set {
-                               if (value == _currentCol)
-                                       return;
-                               if (value < 0)
-                                       _currentCol = 0;
-                               else if (value > lines [_currentLine].Length)
-                                       _currentCol = lines [_currentLine].Length;
-                               else
-                                       _currentCol = value;
-                               NotifyValueChanged ("CurrentColumn", _currentCol);
-                       }
-               }
-               [DefaultValue(0)]
-               public int CurrentLine{
-                       get { return _currentLine; }
-                       set {
-                               if (value == _currentLine)
-                                       return;
-                               if (value >= lines.Count)
-                                       _currentLine = lines.Count-1;
-                               else if (value < 0)
-                                       _currentLine = 0;
-                               else
-                                       _currentLine = value;
-                               //force recheck of currentCol for bounding
-                               int cc = _currentCol;
-                               _currentCol = 0;
-                               CurrentColumn = cc;
-                               NotifyValueChanged ("CurrentLine", _currentLine);
-                       }
-               }
-               [XmlIgnore]public Point CurrentPosition {
-                       get { return new Point(_currentCol, CurrentLine); }
-               }
-               //TODO:using HasFocus for drawing selection cause SelBegin and Release binding not to work
-               /// <summary>
-               /// Selection begin position in char units
-               /// </summary>
-               [DefaultValue("-1")]
-               public Point SelBegin {
-                       get {
-                               return _selBegin;
-                       }
-                       set {
-                               if (value == _selBegin)
-                                       return;
-                               _selBegin = value;
-                               NotifyValueChanged ("SelBegin", _selBegin);
-                               NotifyValueChanged ("SelectedText", SelectedText);
-                       }
-               }
-               [DefaultValue("-1")]
-               public Point SelRelease {
-                       get {
-                               return _selRelease;
-                       }
-                       set {
-                               if (value == _selRelease)
-                                       return;
-                               _selRelease = value;
-                               NotifyValueChanged ("SelRelease", _selRelease);
-                               NotifyValueChanged ("SelectedText", SelectedText);
-                       }
-               }
-               /// <summary>
-               /// return char at CurrentLine, CurrentColumn
-               /// </summary>
-               [XmlIgnore]protected Char CurrentChar
-               {
-                       get {
-                               return lines [CurrentLine] [CurrentColumn];
-                       }
-               }
-               /// <summary>
-               /// ordered selection start and end positions in char units
-               /// </summary>
-               [XmlIgnore]protected Point selectionStart
-               {
-                       get {
-                               return SelRelease < 0 || SelBegin.Y < SelRelease.Y ? SelBegin :
-                                       SelBegin.Y > SelRelease.Y ? SelRelease :
-                                       SelBegin.X < SelRelease.X ? SelBegin : SelRelease;
-                       }
-               }
-               [XmlIgnore]public Point selectionEnd
-               {
-                       get {
-                               return SelRelease < 0 || SelBegin.Y > SelRelease.Y ? SelBegin :
-                                       SelBegin.Y < SelRelease.Y ? SelRelease :
-                                       SelBegin.X > SelRelease.X ? SelBegin : SelRelease;
-                       }
-               }
-               [XmlIgnore]public string SelectedText
-               {
-                       get {
-
-                               if (SelRelease < 0 || SelBegin < 0)
-                                       return "";
-                               if (selectionStart.Y == selectionEnd.Y)
-                                       return lines [selectionStart.Y].Substring (selectionStart.X, selectionEnd.X - selectionStart.X);
-                               string tmp = "";
-                               tmp = lines [selectionStart.Y].Substring (selectionStart.X);
-                               for (int l = selectionStart.Y + 1; l < selectionEnd.Y; l++) {
-                                       tmp += Interface.LineBreak + lines [l];
-                               }
-                               tmp += Interface.LineBreak + lines [selectionEnd.Y].Substring (0, selectionEnd.X);
-                               return tmp;
-                       }
-               }
-               [XmlIgnore]public bool selectionIsEmpty
-               { get { return SelRelease < 0; } }
-
-               List<string> lines;
-               List<string> getLines {
-                       get {
-                               return _multiline ?
-                                       Regex.Split (_text, "\r\n|\r|\n|\\\\n").ToList() :
-                                       new List<string>(new string[] { _text });
-                       }
-               }
-               /// <summary>
-               /// Moves cursor one char to the left.
-               /// </summary>
-               /// <returns><c>true</c> if move succeed</returns>
-               public bool MoveLeft(){
-                       int tmp = _currentCol - 1;
-                       if (tmp < 0) {
-                               if (_currentLine == 0)
-                                       return false;
-                               CurrentLine--;
-                               CurrentColumn = int.MaxValue;
-                       } else
-                               CurrentColumn = tmp;
-                       return true;
-               }
-               /// <summary>
-               /// Moves cursor one char to the right.
-               /// </summary>
-               /// <returns><c>true</c> if move succeed</returns>
-               public bool MoveRight(){
-                       int tmp = _currentCol + 1;
-                       if (tmp > lines [_currentLine].Length){
-                               if (CurrentLine == lines.Count - 1)
-                                       return false;
-                               CurrentLine++;
-                               CurrentColumn = 0;
-                       } else
-                               CurrentColumn = tmp;
-                       return true;
-               }
-               public void GotoWordStart(){
-                       CurrentColumn--;
-                       //skip white spaces
-                       while (!char.IsLetterOrDigit (this.CurrentChar) && CurrentColumn > 0)
-                               CurrentColumn--;
-                       while (char.IsLetterOrDigit (lines [CurrentLine] [CurrentColumn]) && CurrentColumn > 0)
-                               CurrentColumn--;
-                       if (!char.IsLetterOrDigit (this.CurrentChar))
-                               CurrentColumn++;
-               }
-               public void GotoWordEnd(){
-                       //skip white spaces
-                       if (CurrentColumn >= lines [CurrentLine].Length - 1)
-                               return;
-                       while (!char.IsLetterOrDigit (this.CurrentChar) && CurrentColumn < lines [CurrentLine].Length-1)
-                               CurrentColumn++;
-                       while (char.IsLetterOrDigit (this.CurrentChar) && CurrentColumn < lines [CurrentLine].Length-1)
-                               CurrentColumn++;
-                       if (char.IsLetterOrDigit (this.CurrentChar))
-                               CurrentColumn++;
-               }
-               public void DeleteChar()
-               {
-                       if (selectionIsEmpty) {
-                               if (CurrentColumn == 0) {
-                                       if (CurrentLine == 0 && lines.Count == 1)
-                                               return;
-                                       CurrentLine--;
-                                       CurrentColumn = lines [CurrentLine].Length;
-                                       lines [CurrentLine] += lines [CurrentLine + 1];
-                                       lines.RemoveAt (CurrentLine + 1);
-
-                                       OnTextChanged (this, new TextChangeEventArgs (Text));
-                                       return;
-                               }
-                               CurrentColumn--;
-                               lines [CurrentLine] = lines [CurrentLine].Remove (CurrentColumn, 1);
-                       } else {
-                               int linesToRemove = selectionEnd.Y - selectionStart.Y + 1;
-                               int l = selectionStart.Y;
-
-                               if (linesToRemove > 0) {
-                                       lines [l] = lines [l].Remove (selectionStart.X, lines [l].Length - selectionStart.X) +
-                                               lines [selectionEnd.Y].Substring (selectionEnd.X, lines [selectionEnd.Y].Length - selectionEnd.X);
-                                       l++;
-                                       for (int c = 0; c < linesToRemove-1; c++)
-                                               lines.RemoveAt (l);
-                                       CurrentLine = selectionStart.Y;
-                                       CurrentColumn = selectionStart.X;
-                               } else
-                                       lines [l] = lines [l].Remove (selectionStart.X, selectionEnd.X - selectionStart.X);
-                               CurrentColumn = selectionStart.X;
-                               SelBegin = -1;
-                               SelRelease = -1;
-                       }
-                       OnTextChanged (this, new TextChangeEventArgs (Text));
-               }
-               /// <summary>
-               /// Insert new string at caret position, should be sure no line break is inside.
-               /// </summary>
-               /// <param name="str">String.</param>
-               protected void Insert(string str)
-               {
-                       if (!selectionIsEmpty)
-                               this.DeleteChar ();
-                       if (_multiline) {
-                               string[] strLines = Regex.Split (str, "\r\n|\r|\n|" + @"\\n").ToArray();
-                               lines [CurrentLine] = lines [CurrentLine].Insert (CurrentColumn, strLines[0]);
-                               CurrentColumn += strLines[0].Length;
-                               for (int i = 1; i < strLines.Length; i++) {
-                                       InsertLineBreak ();
-                                       lines [CurrentLine] = lines [CurrentLine].Insert (CurrentColumn, strLines[i]);
-                                       CurrentColumn += strLines[i].Length;
-                               }
-                       } else {
-                               lines [CurrentLine] = lines [CurrentLine].Insert (CurrentColumn, str);
-                               CurrentColumn += str.Length;
-                       }
-                       OnTextChanged (this, new TextChangeEventArgs (Text));
-               }
-               /// <summary>
-               /// Insert a line break.
-               /// </summary>
-               protected void InsertLineBreak()
-               {
-                       lines.Insert(CurrentLine + 1, lines[CurrentLine].Substring(CurrentColumn));
-                       lines [CurrentLine] = lines [CurrentLine].Substring (0, CurrentColumn);
-                       CurrentLine++;
-                       CurrentColumn = 0;
-                       OnTextChanged (this, new TextChangeEventArgs (Text));
-               }
-               bool textMeasureIsUpToDate = false;
-               Size cachedTextSize = default(Size);
-
-               #region GraphicObject overrides
-               protected override int measureRawSize(LayoutingType lt)
-               {
-                       if (lines == null)
-                               lines = getLines;
-                       if (!textMeasureIsUpToDate) {
-                               using (ImageSurface img = new ImageSurface (Format.Argb32, 10, 10)) {
-                                       using (Context gr = new Context (img)) {
-                                               //Cairo.FontFace cf = gr.GetContextFontFace ();
-
-                                               gr.SelectFontFace (Font.Name, Font.Slant, Font.Wheight);
-                                               gr.SetFontSize (Font.Size);
-                                               gr.FontOptions = Interface.FontRenderingOptions;
-                                               gr.Antialias = Interface.Antialias;
-
-                                               fe = gr.FontExtents;
-                                               te = new TextExtents ();
-
-                                               cachedTextSize.Height = (int)Math.Ceiling ((fe.Ascent+fe.Descent) * Math.Max (1, lines.Count)) + Margin * 2;
-
-                                               try {
-                                                       foreach (string s in lines) {
-                                                               string l = s.Replace ("\t", new String (' ', Interface.TabSize));
-
-                                                               TextExtents tmp = gr.TextExtents (l);
-
-                                                               if (tmp.XAdvance > te.XAdvance)
-                                                                       te = tmp;
-                                                       }
-                                                       cachedTextSize.Width = (int)Math.Ceiling (te.XAdvance) + Margin * 2;
-                                                       textMeasureIsUpToDate = true;
-                                               } catch {                                                       
-                                                       return -1;
-                                               }                                       
-                                       }
-                               }
-
-                       }
-                       return lt == LayoutingType.Height ? cachedTextSize.Height : cachedTextSize.Width;
-               }
-               protected override void onDraw (Context gr)
-               {
-                       base.onDraw (gr);
-
-                       gr.SelectFontFace (Font.Name, Font.Slant, Font.Wheight);
-                       gr.SetFontSize (Font.Size);
-                       gr.FontOptions = Interface.FontRenderingOptions;
-                       gr.Antialias = Interface.Antialias;
-
-                       rText = new Rectangle(new Size(
-                               measureRawSize(LayoutingType.Width), measureRawSize(LayoutingType.Height)));
-                       rText.Width -= 2 * Margin;
-                       rText.Height -= 2 * Margin;
-
-                       widthRatio = 1f;
-                       heightRatio = 1f;
-
-                       Rectangle cb = ClientRectangle;
-
-                       rText.X = cb.X;
-                       rText.Y = cb.Y;
-
-                       if (horizontalStretch) {
-                               widthRatio = (float)cb.Width / (float)rText.Width;
-                               if (!verticalStretch)
-                                       heightRatio = widthRatio;
-                       }
-
-                       if (verticalStretch) {
-                               heightRatio = (float)cb.Height / (float)rText.Height;
-                               if (!horizontalStretch)
-                                       widthRatio = heightRatio;
-                       }
-
-                       rText.Width = (int)(widthRatio * (float)rText.Width);
-                       rText.Height = (int)(heightRatio * (float)rText.Height);
-
-                       switch (TextAlignment)
-                       {
-                       case Alignment.TopLeft:     //ok
-                               rText.X = cb.X;
-                               rText.Y = cb.Y;
-                               break;
-                       case Alignment.Top:   //ok
-                               rText.Y = cb.Y;
-                               rText.X = cb.X + cb.Width / 2 - rText.Width / 2;
-                               break;
-                       case Alignment.TopRight:    //ok
-                               rText.Y = cb.Y;
-                               rText.X = cb.Right - rText.Width;
-                               break;
-                       case Alignment.Left://ok
-                               rText.X = cb.X;
-                               rText.Y = cb.Y + cb.Height / 2 - rText.Height / 2;
-                               break;
-                       case Alignment.Right://ok
-                               rText.X = cb.X + cb.Width - rText.Width;
-                               rText.Y = cb.Y + cb.Height / 2 - rText.Height / 2;
-                               break;
-                       case Alignment.Bottom://ok
-                               rText.X = cb.Width / 2 - rText.Width / 2;
-                               rText.Y = cb.Height - rText.Height;
-                               break;
-                       case Alignment.BottomLeft://ok
-                               rText.X = cb.X;
-                               rText.Y = cb.Bottom - rText.Height;
-                               break;
-                       case Alignment.BottomRight://ok
-                               rText.Y = cb.Bottom - rText.Height;
-                               rText.X = cb.Right - rText.Width;
-                               break;
-                       case Alignment.Center://ok
-                               rText.X = cb.X + cb.Width / 2 - rText.Width / 2;
-                               //rText.Y = cb.Y + cb.Height / 2 - rText.Height / 2;
-                               rText.Y = cb.Y + (int)Math.Floor((double)cb.Height / 2.0 - (double)rText.Height / 2.0);
-                               break;
-                       }
-
-                       //gr.FontMatrix = new Matrix(widthRatio * (float)Font.Size, 0, 0, heightRatio * (float)Font.Size, 0, 0);
-                       fe = gr.FontExtents;
-
-                       #region draw text cursor
-                       if (HasFocus && Selectable)
-                       {
-                               if (mouseLocalPos >= 0)
-                               {
-                                       computeTextCursor(gr);
-
-                                       if (SelectionInProgress)
-                                       {
-                                               if (SelBegin < 0){
-                                                       SelBegin = new Point(CurrentColumn, CurrentLine);
-                                                       SelStartCursorPos = textCursorPos;
-                                                       SelRelease = -1;
-                                               }else{
-                                                       SelRelease = new Point(CurrentColumn, CurrentLine);
-                                                       if (SelRelease == SelBegin)
-                                                               SelRelease = -1;
-                                                       else
-                                                               SelEndCursorPos = textCursorPos;
-                                               }
-                                       }else
-                                               computeTextCursorPosition(gr);
-                               }else
-                                       computeTextCursorPosition(gr);
-
-                               Foreground.SetAsSource (gr);
-                               gr.LineWidth = 1.0;
-                               gr.MoveTo (0.5 + textCursorPos + rText.X, rText.Y + CurrentLine * (fe.Ascent+fe.Descent));
-                               gr.LineTo (0.5 + textCursorPos + rText.X, rText.Y + (CurrentLine + 1) * (fe.Ascent+fe.Descent));
-                               gr.Stroke();
-                       }
-                       #endregion
-
-                       //****** debug selection *************
-//                     if (SelRelease >= 0) {
-//                             new SolidColor(Color.DarkGreen).SetAsSource(gr);
-//                             Rectangle R = new Rectangle (
-//                                                  rText.X + (int)SelEndCursorPos - 3,
-//                                                  rText.Y + (int)(SelRelease.Y * (fe.Ascent+fe.Descent)),
-//                                                  6,
-//                                                  (int)(fe.Ascent+fe.Descent));
-//                             gr.Rectangle (R);
-//                             gr.Fill ();
-//                     }
-//                     if (SelBegin >= 0) {
-//                             new SolidColor(Color.DarkRed).SetAsSource(gr);
-//                             Rectangle R = new Rectangle (
-//                                     rText.X + (int)SelStartCursorPos - 3,
-//                                     rText.Y + (int)(SelBegin.Y * (fe.Ascent+fe.Descent)),
-//                                     6,
-//                                     (int)(fe.Ascent+fe.Descent));
-//                             gr.Rectangle (R);
-//                             gr.Fill ();
-//                     }
-                       //*******************
-
-                       for (int i = 0; i < lines.Count; i++) {
-                               string l = lines [i].Replace ("\t", new String (' ', Interface.TabSize));
-                               int lineLength = (int)gr.TextExtents (l).XAdvance;
-                               Rectangle lineRect = new Rectangle (
-                                       rText.X,
-                                       rText.Y + i * (int)(fe.Ascent+fe.Descent),
-                                       lineLength,
-                                       (int)(fe.Ascent+fe.Descent));
-
-//                             if (TextAlignment == Alignment.Center ||
-//                                     TextAlignment == Alignment.Top ||
-//                                     TextAlignment == Alignment.Bottom)
-//                                     lineRect.X += (rText.Width - lineLength) / 2;
-//                             else if (TextAlignment == Alignment.Right ||
-//                                     TextAlignment == Alignment.TopRight ||
-//                                     TextAlignment == Alignment.BottomRight)
-//                                     lineRect.X += (rText.Width - lineLength);
-                               if (string.IsNullOrWhiteSpace (l))
-                                       continue;
-
-                               Foreground.SetAsSource (gr);
-                               gr.MoveTo (lineRect.X,(double)rText.Y + fe.Ascent + (fe.Ascent+fe.Descent) * i) ;
-                               gr.ShowText (l);
-                               gr.Fill ();
-
-                               if (Selectable) {
-                                       if (SelRelease >= 0 && i >= selectionStart.Y && i <= selectionEnd.Y) {
-                                               gr.SetSourceColor (selBackground);
-
-                                               Rectangle selRect = lineRect;
-
-                                               int cpStart = (int)SelStartCursorPos,
-                                               cpEnd = (int)SelEndCursorPos;
-
-                                               if (SelBegin.Y > SelRelease.Y) {
-                                                       cpStart = cpEnd;
-                                                       cpEnd = (int)SelStartCursorPos;
-                                               }
-
-                                               if (i == selectionStart.Y) {
-                                                       selRect.Width -= cpStart;
-                                                       selRect.Left += cpStart;
-                                               }
-                                               if (i == selectionEnd.Y)
-                                                       selRect.Width -= (lineLength - cpEnd);
-
-                                               gr.Rectangle (selRect);
-                                               gr.FillPreserve ();
-                                               gr.Save ();
-                                               gr.Clip ();
-                                               gr.SetSourceColor (SelectionForeground);
-                                               gr.MoveTo (lineRect.X, rText.Y + fe.Ascent + (fe.Ascent+fe.Descent) * i);
-                                               gr.ShowText (l);
-                                               gr.Fill ();
-                                               gr.Restore ();
-                                       }
-                               }
-                       }
-               }
-               #endregion
-
-               #region Mouse handling
-               void updatemouseLocalPos(Point mpos){
-                       mouseLocalPos = mpos - ScreenCoordinates(Slot).TopLeft - ClientRectangle.TopLeft;
-                       if (mouseLocalPos.X < 0)
-                               mouseLocalPos.X = 0;
-                       if (mouseLocalPos.Y < 0)
-                               mouseLocalPos.Y = 0;
-               }
-               public override void onMouseEnter (object sender, MouseMoveEventArgs e)
-               {
-                       base.onMouseEnter (sender, e);
-                       if (Selectable)
-                               IFace.MouseCursor = XCursor.Text;
-               }
-               public override void onMouseLeave (object sender, MouseMoveEventArgs e)
-               {
-                       base.onMouseLeave (sender, e);
-                       IFace.MouseCursor = XCursor.Default;
-               }
-               protected override void onFocused (object sender, EventArgs e)
-               {
-                       base.onFocused (sender, e);
-
-                       if (!_selectable)
-                               return;
-                       SelBegin = new Point(0,0);
-                       SelRelease = new Point (lines.LastOrDefault ().Length, lines.Count-1);
-                       RegisterForRedraw ();
-               }
-               protected override void onUnfocused (object sender, EventArgs e)
-               {
-                       base.onUnfocused (sender, e);
-
-                       SelBegin = -1;
-                       SelRelease = -1;
-                       RegisterForRedraw ();
-               }
-               public override void onMouseMove (object sender, MouseMoveEventArgs e)
-               {
-                       base.onMouseMove (sender, e);
-
-                       if (!(SelectionInProgress && HasFocus && _selectable))
-                               return;
-
-                       updatemouseLocalPos (e.Position);
-
-                       RegisterForRedraw();
-               }
-               public override void onMouseDown (object sender, MouseButtonEventArgs e)
-               {
-                       if (this.HasFocus && _selectable){
-                               updatemouseLocalPos (e.Position);
-                               SelBegin = -1;
-                               SelRelease = -1;
-                               SelectionInProgress = true;
-                               RegisterForRedraw();//TODO:should put it in properties
-                       }
-
-                       //done at the end to set 'hasFocus' value after testing it
-                       base.onMouseDown (sender, e);
-               }
-               public override void onMouseUp (object sender, MouseButtonEventArgs e)
-               {
-                       base.onMouseUp (sender, e);
-                       if (!(this.HasFocus || _selectable))
-                               return;
-                       if (!SelectionInProgress)
-                               return;
-
-                       updatemouseLocalPos (e.Position);
-                       SelectionInProgress = false;
-                       RegisterForRedraw ();
-               }
-               public override void onMouseDoubleClick (object sender, MouseButtonEventArgs e)
-               {
-                       base.onMouseDoubleClick (sender, e);
-                       if (!(this.HasFocus || _selectable))
-                               return;
-                       
-                       GotoWordStart ();
-                       SelBegin = CurrentPosition;
-                       GotoWordEnd ();
-                       SelRelease = CurrentPosition;
-                       SelectionInProgress = false;
-                       RegisterForRedraw ();
-               }
-               #endregion
-
-               /// <summary>
-               /// Update Current Column, line and TextCursorPos
-               /// from mouseLocalPos
-               /// </summary>
-               void computeTextCursor(Context gr)
-               {
-                       TextExtents te;
-
-                       double cPos = 0f;
-
-                       CurrentLine = (int)(mouseLocalPos.Y / (fe.Ascent+fe.Descent));
-
-                       //fix cu
-                       if (CurrentLine >= lines.Count)
-                               CurrentLine = lines.Count - 1;
-
-                       switch (TextAlignment) {
-                       case Alignment.Center:
-                       case Alignment.Top:
-                       case Alignment.Bottom:
-                               cPos+= ClientRectangle.Width - gr.TextExtents(lines [CurrentLine]).Width/2.0;
-                               break;
-                       case Alignment.Right:
-                       case Alignment.TopRight:
-                       case Alignment.BottomRight:
-                               cPos += ClientRectangle.Width - gr.TextExtents(lines [CurrentLine]).Width;
-                               break;
-                       }
-
-                       for (int i = 0; i < lines[CurrentLine].Length; i++)
-                       {
-                               string c = lines [CurrentLine].Substring (i, 1);
-                               if (c == "\t")
-                                       c = new string (' ', Interface.TabSize);
-
-                               te = gr.TextExtents(c);
-
-                               double halfWidth = te.XAdvance / 2;
-
-                               if (mouseLocalPos.X <= cPos + halfWidth)
-                               {
-                                       CurrentColumn = i;
-                                       textCursorPos = cPos;
-                                       mouseLocalPos = -1;
-                                       return;
-                               }
-
-                               cPos += te.XAdvance;
-                       }
-                       CurrentColumn = lines[CurrentLine].Length;
-                       textCursorPos = cPos;
-
-                       //reset mouseLocalPos
-                       mouseLocalPos = -1;
-               }
-               /// <summary> Computes offsets in cairo units </summary>
-               void computeTextCursorPosition(Context gr)
-               {
-                       if (SelBegin >= 0)
-                               SelStartCursorPos = GetXFromTextPointer (gr, SelBegin);
-                       if (SelRelease >= 0)
-                               SelEndCursorPos = GetXFromTextPointer (gr, SelRelease);
-                       textCursorPos = GetXFromTextPointer (gr, new Point(CurrentColumn, CurrentLine));
-               }
-               /// <summary> Compute x offset in cairo unit from text position </summary>
-               double GetXFromTextPointer(Context gr, Point pos)
-               {
-                       try {
-                               string l = lines [pos.Y].Substring (0, pos.X).
-                                       Replace ("\t", new String (' ', Interface.TabSize));
-                               return gr.TextExtents (l).XAdvance;
-                       } catch{
-                               return -1;
-                       }
-               }
-    }
-}
diff --git a/src/GraphicObjects/ListBox.cs b/src/GraphicObjects/ListBox.cs
deleted file mode 100644 (file)
index 438e8d6..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-//
-// ListBox.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-using System.Collections;
-using System.Xml.Serialization;
-using System.ComponentModel;
-using System.IO;
-using System.Diagnostics;
-using System.Xml;
-using System.Collections.Generic;
-using System.Threading;
-
-namespace Crow
-{
-       public class ListBox : TemplatedGroup
-       {
-               #region CTOR
-               protected ListBox () : base(){}
-               public ListBox (Interface iface) : base(iface) {}
-               #endregion
-
-       }
-}
-
diff --git a/src/GraphicObjects/Menu.cs b/src/GraphicObjects/Menu.cs
deleted file mode 100644 (file)
index 7339623..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-//
-// Menu.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-using System.Xml.Serialization;
-using System.ComponentModel;
-
-namespace Crow
-{
-       public class Menu : TemplatedGroup
-       {
-               #region CTOR
-               protected Menu () : base(){}
-               public Menu (Interface iface) : base(iface) {}
-               #endregion
-
-               Orientation orientation;
-               bool autoOpen = false;
-
-               #region Public properties
-               [DefaultValue(Orientation.Horizontal)]
-               public Orientation Orientation {
-                       get { return orientation; }
-                       set {
-                               if (orientation == value)
-                                       return;
-                               orientation = value;
-                               NotifyValueChanged ("Orientation", orientation);
-                       }
-               }
-               [XmlIgnore]public bool AutomaticOpening
-               {
-                       get { return autoOpen; }
-                       set     {
-                               if (autoOpen == value)
-                                       return;
-                               autoOpen = value;
-                               NotifyValueChanged ("AutomaticOpening", autoOpen);
-                       }
-               }
-               #endregion
-
-               public override void AddItem (GraphicObject g)
-               {                       
-                       base.AddItem (g);
-
-                       if (orientation == Orientation.Horizontal)
-                               g.NotifyValueChanged ("PopDirection", Alignment.Bottom);
-                       else
-                               g.NotifyValueChanged ("PopDirection", Alignment.Right);
-               }
-               public override void onMouseLeave (object sender, MouseMoveEventArgs e)
-               {
-                       base.onMouseLeave (sender, e);
-                       AutomaticOpening = false;
-               }
-       }
-}
-
diff --git a/src/GraphicObjects/MenuItem.cs b/src/GraphicObjects/MenuItem.cs
deleted file mode 100644 (file)
index a9e164d..0000000
+++ /dev/null
@@ -1,191 +0,0 @@
-//
-// MenuItem.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-using System.Xml.Serialization;
-using System.ComponentModel;
-
-namespace Crow
-{
-       public class MenuItem : Menu
-       {
-               #region CTOR
-               protected MenuItem () : base(){}
-               public MenuItem (Interface iface) : base(iface) {}
-               #endregion
-
-               public event EventHandler Open;
-               public event EventHandler Close;
-
-               Command command;
-               Picture icon;
-               bool isOpened;
-               Measure popWidth, popHeight;
-
-               #region Public properties
-               [DefaultValue(false)]
-               public bool IsOpened {
-                       get { return isOpened; }
-                       set {
-                               if (isOpened == value)
-                                       return;
-                               isOpened = value;
-                               NotifyValueChanged ("IsOpened", isOpened);
-
-                               if (isOpened) {
-                                       onOpen (this, null);
-                                       if (LogicalParent is Menu)
-                                               (LogicalParent as Menu).AutomaticOpening = true;
-                               }else
-                                       onClose (this, null);
-                       }
-               }
-               [DefaultValue(null)]
-               public virtual Command Command {
-                       get { return command; }
-                       set {
-                               if (command == value)
-                                       return;
-
-                               if (command != null) {
-                                       command.raiseAllValuesChanged ();
-                                       command.ValueChanged -= Command_ValueChanged;
-                               }
-
-                               command = value;
-
-                               if (command != null) {
-                                       command.ValueChanged += Command_ValueChanged;
-                                       command.raiseAllValuesChanged ();
-                               }
-
-                               NotifyValueChanged ("Command", command);
-                       }
-               }
-               
-               public override bool IsEnabled {
-                       get { return Command == null ? base.IsEnabled : Command.CanExecute; }
-                       set { base.IsEnabled = value; }
-               }
-               
-               public override string Caption {
-                       get { return Command == null ? base.Caption : Command.Caption; }
-                       set { base.Caption = value; }
-               }
-               
-               public Picture Icon {
-                       get { return Command == null ? icon : Command.Icon;; }
-                       set {
-                               if (icon == value)
-                                       return;
-                               icon = value;
-                               if (command == null)
-                                       NotifyValueChanged ("Icon", icon);
-                       }
-               }
-               [DefaultValue("Fit")]
-               public virtual Measure PopWidth {
-                       get { return popWidth; }
-                       set {
-                               if (popWidth == value)
-                                       return;
-                               popWidth = value;
-                               NotifyValueChanged ("PopWidth", popWidth);
-                       }
-               }
-               [DefaultValue("Fit")]
-               public virtual Measure PopHeight {
-                       get { return popHeight; }
-                       set {
-                               if (popHeight == value)
-                                       return;
-                               popHeight = value;
-                               NotifyValueChanged ("PopHeight", popHeight);
-                       }
-               }
-               #endregion
-
-               public override void AddItem (GraphicObject g)
-               {
-                       base.AddItem (g);
-                       g.NotifyValueChanged ("PopDirection", Alignment.Right);
-               }
-
-               void Command_ValueChanged (object sender, ValueChangeEventArgs e)
-               {
-                       string mName = e.MemberName;
-                       if (mName == "CanExecute")
-                               mName = "IsEnabled";
-                       NotifyValueChanged (mName, e.NewValue);
-               }
-               void onMI_Click (object sender, MouseButtonEventArgs e)
-               {
-                       if (command != null) {
-                               command.Execute ();
-                               closeMenu ();
-                       }
-                       if(!IsOpened)
-                               (LogicalParent as Menu).AutomaticOpening = false;
-               }
-               protected virtual void onOpen (object sender, EventArgs e){
-                       Open.Raise (this, null);
-               }
-               protected virtual void onClose (object sender, EventArgs e){
-                       System.Diagnostics.Debug.WriteLine ("close: " + this.ToString());
-                       Close.Raise (this, null);
-               }
-               public override bool MouseIsIn (Point m)
-               {
-                       return IsEnabled && !IsDragged ? base.MouseIsIn (m) || child.MouseIsIn (m) : false;
-               }
-               public override void onMouseEnter (object sender, MouseMoveEventArgs e)
-               {
-                       base.onMouseEnter (sender, e);
-                       Menu menu = LogicalParent as Menu;
-                       if (menu == null)
-                               return;
-                       if (menu.AutomaticOpening && items.Children.Count>0)
-                               IsOpened = true;
-               }
-               public override void onMouseLeave (object sender, MouseMoveEventArgs e)
-               {
-                       if (IsOpened)
-                               IsOpened = false;
-                       base.onMouseLeave (this, e);
-               }
-
-               void closeMenu () {
-                       MenuItem tmp = LogicalParent as MenuItem;
-                       while (tmp != null) {
-                               tmp.IsOpened = false;
-                               tmp.Background = Color.Transparent;
-                               tmp.AutomaticOpening = false;
-                               tmp = tmp.LogicalParent as MenuItem;
-                       }
-               }
-       }
-}
-
diff --git a/src/GraphicObjects/MessageBox.cs b/src/GraphicObjects/MessageBox.cs
deleted file mode 100644 (file)
index 45ef1e0..0000000
+++ /dev/null
@@ -1,203 +0,0 @@
-//
-// MessageBox.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-using System.Xml.Serialization;
-using System.ComponentModel;
-
-namespace Crow
-{
-       public class MessageBox : Window
-       {
-               #region CTOR
-               protected MessageBox () : base(){}
-               public MessageBox (Interface iface) : base(iface){}
-               #endregion
-
-               public enum Type {
-                       None,
-                       Information,
-                       Alert,
-                       Error,
-                       YesNo,
-                       YesNoCancel,
-
-               }
-
-               protected override void loadTemplate (GraphicObject template)
-               {
-                       base.loadTemplate (template);
-                       NotifyValueChanged ("MsgIcon", "#Crow.Images.Icons.Informations.svg");
-               }
-               string message, okMessage, cancelMessage, noMessage;
-               Type msgType = Type.None;
-
-               public event EventHandler Yes;
-               public event EventHandler No;
-               public event EventHandler Cancel;
-
-               [DefaultValue("Informations")]
-               public virtual string Message
-               {
-                       get { return message; }
-                       set {
-                               if (message == value)
-                                       return;
-                               message = value;
-                               NotifyValueChanged ("Message", message);
-                       }
-               }
-               [DefaultValue("Ok")]
-               public virtual string OkMessage
-               {
-                       get { return okMessage; }
-                       set {
-                               if (okMessage == value)
-                                       return;
-                               okMessage = value;
-                               NotifyValueChanged ("OkMessage", okMessage);
-                       }
-               }
-               [DefaultValue("Cancel")]
-               public virtual string CancelMessage
-               {
-                       get { return cancelMessage; }
-                       set {
-                               if (cancelMessage == value)
-                                       return;
-                               cancelMessage = value;
-                               NotifyValueChanged ("CancelMessage", cancelMessage);
-                       }
-               }
-               [DefaultValue("No")]
-               public virtual string NoMessage
-               {
-                       get { return cancelMessage; }
-                       set {
-                               if (cancelMessage == value)
-                                       return;
-                               cancelMessage = value;
-                               NotifyValueChanged ("NoMessage", cancelMessage);
-                       }
-               }
-               [DefaultValue("Information")]
-               public virtual Type MsgType
-               {
-                       get { return msgType; }
-                       set {
-                               if (msgType == value)
-                                       return;
-                               msgType = value;
-                               NotifyValueChanged ("MsgType", msgType);
-                               switch (msgType) {
-                               case Type.Information:
-                                       MsgIcon = "#Crow.Images.Icons.Informations.svg";
-                                       Caption = "Informations";
-                                       OkMessage = "Ok";
-                                       NotifyValueChanged ("CancelButIsVisible", false);
-                                       NotifyValueChanged ("NoButIsVisible", false);
-                                       break;
-                               case Type.YesNo:
-                               case Type.YesNoCancel:
-                                       MsgIcon = "#Crow.Icons.question.svg";
-                                       Caption = "Choice";
-                                       OkMessage = "Yes";
-                                       NoMessage = "No";
-                                       NotifyValueChanged ("CancelButIsVisible", msgType == Type.YesNoCancel);
-                                       NotifyValueChanged ("NoButIsVisible", true);
-                                       break;
-                               case Type.Alert:
-                                       MsgIcon = "#Crow.Images.Icons.IconAlerte.svg";
-                                       Caption = "Alert";
-                                       OkMessage = "Ok";
-                                       CancelMessage = "Cancel";
-                                       NotifyValueChanged ("CancelButIsVisible", true);
-                                       NotifyValueChanged ("NoButIsVisible", false);
-                                       break;
-                               case Type.Error:
-                                       MsgIcon = "#Crow.Images.Icons.exit.svg";
-                                       Caption = "Error";
-                                       OkMessage = "Ok";
-                                       NotifyValueChanged ("CancelButIsVisible", false);
-                                       NotifyValueChanged ("NoButIsVisible", false);
-                                       break;
-                               }
-                       }
-               }
-
-               string msgIcon = null;
-               public string MsgIcon {
-                       get { return msgIcon; }
-                       set {
-                               if (value == MsgIcon)
-                                       return;
-                               msgIcon = value;
-                               NotifyValueChanged ("MsgIcon", MsgIcon);
-                       }
-               }
-               void onOkButtonClick (object sender, EventArgs e)
-               {
-                       Yes.Raise (this, null);
-                       close ();
-               }
-               void onNoButtonClick (object sender, EventArgs e)
-               {
-                       No.Raise (this, null);
-                       close ();
-               }
-               void onCancelButtonClick (object sender, EventArgs e)
-               {
-                       Cancel.Raise (this, null);
-                       close ();
-               }
-               public static MessageBox Show (Interface iface, Type msgBoxType, string message, string okMsg = "", string cancelMsg = ""){
-                       lock (iface.UpdateMutex) {
-                               MessageBox mb = new MessageBox (iface);
-                               mb.IFace.AddWidget (mb);
-                               mb.MsgType = msgBoxType;
-                               mb.Message = message;
-                               if (!string.IsNullOrEmpty(okMsg))
-                                       mb.OkMessage = okMsg;
-                               if (!string.IsNullOrEmpty(cancelMsg))
-                                       mb.CancelMessage = cancelMsg;
-                               return mb;
-                       }
-               }
-               public static MessageBox ShowModal (Interface iface, Type msgBoxType, string message){
-                       lock (iface.UpdateMutex) {
-                               MessageBox mb = new MessageBox (iface) {
-                                       Modal = true,
-                                       MsgType = msgBoxType,
-                                       Message = message
-                               };
-
-                               iface.AddWidget (mb);
-                               return mb;
-                       }
-               }
-       }
-}
-
diff --git a/src/GraphicObjects/NumericControl.cs b/src/GraphicObjects/NumericControl.cs
deleted file mode 100644 (file)
index 7308331..0000000
+++ /dev/null
@@ -1,142 +0,0 @@
-//
-// NumericControl.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-using System.Xml.Serialization;
-using System.ComponentModel;
-
-namespace Crow
-{
-       public abstract class NumericControl : TemplatedControl
-       {
-               #region CTOR
-               protected NumericControl () : base(){}
-               public NumericControl (Interface iface) : base(iface)
-               {
-               }
-//             public NumericControl(double minimum, double maximum, double step)
-//                     : base()
-//             {
-//             }
-               #endregion
-
-               #region private fields
-               double _actualValue, minValue, maxValue, smallStep, bigStep;
-               int _decimals;
-               #endregion
-
-               #region public properties
-               [DefaultValue(2)]
-               public int Decimals
-               {
-                       get { return _decimals; }
-                       set
-                       {
-                               if (value == _decimals)
-                                       return;
-                               _decimals = value;
-                               NotifyValueChanged("Decimals",  _decimals);
-                               RegisterForGraphicUpdate();
-                       }
-               }
-               [DefaultValue(0.0)]
-               public virtual double Minimum {
-                       get { return minValue; }
-                       set {
-                               if (minValue == value)
-                                       return;
-
-                               minValue = value;
-                               NotifyValueChanged ("Minimum", minValue);
-                               RegisterForRedraw ();
-                       }
-               }
-               [DefaultValue(100.0)]
-               public virtual double Maximum
-               {
-                       get { return maxValue; }
-                       set {
-                               if (maxValue == value)
-                                       return;
-
-                               maxValue = value;
-                               NotifyValueChanged ("Maximum", maxValue);
-                               RegisterForRedraw ();
-                       }
-               }
-               [DefaultValue(1.0)]
-               public virtual double SmallIncrement
-               {
-                       get { return smallStep; }
-                       set {
-                               if (smallStep == value)
-                                       return;
-
-                               smallStep = value;
-                               NotifyValueChanged ("SmallIncrement", smallStep);
-                               RegisterForRedraw ();
-                       }
-               }
-               [DefaultValue(5.0)]
-               public virtual double LargeIncrement
-               {
-                       get { return bigStep; }
-                       set {
-                               if (bigStep == value)
-                                       return;
-
-                               bigStep = value;
-                               NotifyValueChanged ("LargeIncrement", bigStep);
-                               RegisterForRedraw ();
-                       }
-               }
-               [DefaultValue(0.0)]
-               public double Value
-               {
-                       get { return _actualValue; }
-                       set
-                       {
-                               if (value == _actualValue)
-                                       return;
-
-                               if (value < minValue)
-                                       _actualValue = minValue;
-                               else if (value > maxValue)
-                                       _actualValue = maxValue;
-                               else                    
-                                       _actualValue = value;
-
-                               _actualValue = Math.Round (_actualValue, _decimals);
-
-                               NotifyValueChanged("Value",  _actualValue);
-                               RegisterForGraphicUpdate();
-                       }
-               }
-               #endregion
-
-       }
-}
-
diff --git a/src/GraphicObjects/Popper.cs b/src/GraphicObjects/Popper.cs
deleted file mode 100644 (file)
index 89c0fa5..0000000
+++ /dev/null
@@ -1,250 +0,0 @@
-//
-// Popper.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-using System.Xml.Serialization;
-using System.ComponentModel;
-
-namespace Crow
-{
-    public class Popper : TemplatedContainer
-    {
-               #region CTOR
-               protected Popper () : base(){}
-               public Popper (Interface iface) : base(iface){}
-               #endregion
-
-               bool _isPopped, _canPop;
-               Alignment popDirection;
-               GraphicObject _content;
-               Measure popWidth, popHeight;
-
-               public event EventHandler Popped;
-               public event EventHandler Unpoped;
-
-               #region Public Properties
-               [DefaultValue("Fit")]
-               public virtual Measure PopWidth {
-                       get { return popWidth; }
-                       set {
-                               if (popWidth == value)
-                                       return;
-                               popWidth = value;
-                               NotifyValueChanged ("PopWidth", popWidth);
-                       }
-               }
-               [DefaultValue("Fit")]
-               public virtual Measure PopHeight {
-                       get { return popHeight; }
-                       set {
-                               if (popHeight == value)
-                                       return;
-                               popHeight = value;
-                               NotifyValueChanged ("PopHeight", popHeight);
-                       }
-               }
-               [DefaultValue(false)]
-               public bool IsPopped
-               {
-                       get { return _isPopped; }
-                       set
-                       {
-                               if (!_canPop & value)
-                                       return;                                 
-                               
-                               if (value == _isPopped)
-                                       return;
-
-                               _isPopped = value;
-
-                               NotifyValueChanged ("IsPopped", _isPopped);
-
-                               if (_isPopped)
-                                       onPop (this, null);
-                               else
-                                       onUnpop (this, null);
-
-                       }
-               }
-               [DefaultValue(true)]
-               public bool CanPop
-               {
-                       get { return _canPop; }
-                       set
-                       {
-                               if (value == _canPop)
-                                       return;
-
-                               _canPop = value;
-                               NotifyValueChanged ("CanPop", _canPop);
-                       }
-               }
-               [DefaultValue(Alignment.Bottom)]
-               public virtual Alignment PopDirection {
-                       get { return popDirection; }
-                       set {
-                               if (popDirection == value)
-                                       return;
-                               popDirection = value;
-                               NotifyValueChanged ("PopDirection", popDirection);
-                       }
-               }
-               #endregion
-
-               public override GraphicObject Content {
-                       get { return _content; }
-                       set {
-                               if (_content != null) {
-                                       _content.LogicalParent = null;
-                                       _content.isPopup = false;
-                                       _content.LayoutChanged -= _content_LayoutChanged;
-                               }
-
-                               _content = value;
-
-                               if (_content == null)
-                                       return;
-
-                               _content.LogicalParent = this;
-                               _content.isPopup = true;
-                               _content.HorizontalAlignment = HorizontalAlignment.Left;
-                               _content.VerticalAlignment = VerticalAlignment.Top;
-                               _content.LayoutChanged += _content_LayoutChanged;
-                       }
-               }
-               void positionContent(LayoutingType lt){
-                       ILayoutable tc = Content.Parent;
-                       if (tc == null)
-                               return;
-                       Rectangle r = this.ScreenCoordinates (this.Slot);
-                       if (lt == LayoutingType.X) {
-                               if (popDirection.HasFlag (Alignment.Right)) {
-                                       if (r.Right + Content.Slot.Width > tc.ClientRectangle.Right)
-                                               Content.Left = r.Left - Content.Slot.Width;
-                                       else
-                                               Content.Left = r.Right;
-                               } else if (popDirection.HasFlag (Alignment.Left)) {
-                                       if (r.Left - Content.Slot.Width < tc.ClientRectangle.Left)
-                                               Content.Left = r.Right;
-                                       else
-                                               Content.Left = r.Left - Content.Slot.Width;
-                               } else {
-                                       if (Content.Slot.Width < tc.ClientRectangle.Width) {
-                                               if (r.Left + Content.Slot.Width > tc.ClientRectangle.Right)
-                                                       Content.Left = tc.ClientRectangle.Right - Content.Slot.Width;
-                                               else
-                                                       Content.Left = r.Left;
-                                       } else
-                                               Content.Left = 0;
-                               }
-                       }else if (lt == LayoutingType.Y) {
-                               if (Content.Slot.Height < tc.ClientRectangle.Height) {
-                                       if (PopDirection.HasFlag (Alignment.Bottom)) {
-                                               if (r.Bottom + Content.Slot.Height > tc.ClientRectangle.Bottom)
-                                                       Content.Top = r.Top - Content.Slot.Height;
-                                               else
-                                                       Content.Top = r.Bottom;
-                                       } else if (PopDirection.HasFlag (Alignment.Top)) {
-                                               if (r.Top - Content.Slot.Height < tc.ClientRectangle.Top)
-                                                       Content.Top = r.Bottom;
-                                               else
-                                                       Content.Top = r.Top - Content.Slot.Height;
-                                       } else
-                                               Content.Top = r.Top;
-                               }else
-                                       Content.Top = 0;
-                       }
-               }
-               protected void _content_LayoutChanged (object sender, LayoutingEventArgs e)
-               {
-                       if (e.LayoutType.HasFlag (LayoutingType.Width))
-                               positionContent (LayoutingType.X);
-                       if (e.LayoutType.HasFlag(LayoutingType.Height))
-                               positionContent (LayoutingType.Y);
-               }
-
-               #region GraphicObject overrides
-               public override void onMouseLeave (object sender, MouseMoveEventArgs e)
-               {
-                       base.onMouseLeave (this, e);
-                       IsPopped = false;
-               }
-               public override bool MouseIsIn (Point m)
-               {                       
-                       if (Content?.Parent != null)
-                               if (Content.MouseIsIn (m))
-                                       return true;
-                       return base.MouseIsIn (m);
-               }
-               public override void checkHoverWidget (MouseMoveEventArgs e)
-               {
-                       if (IFace.HoverWidget != this) {
-                               IFace.HoverWidget = this;
-                               onMouseEnter (this, e);
-                       }
-                       if (Content != null){
-                               if (Content.Parent != null) {
-                                       if (Content.MouseIsIn (e.Position)) {
-                                               Content.checkHoverWidget (e);
-                                               return;
-                                       }
-                               }
-                       }
-                       base.checkHoverWidget (e);
-               }
-               #endregion
-
-               public virtual void onPop(object sender, EventArgs e)
-               {
-                       if (Content != null) {
-                               Content.Visible = true;
-                               if (Content.Parent == null)
-                                       IFace.AddWidget (Content);
-                               if (Content.LogicalParent != this)
-                                       Content.LogicalParent = this;
-                               IFace.PutOnTop (Content, true);
-                               _content_LayoutChanged (this, new LayoutingEventArgs (LayoutingType.Sizing));
-                       }
-                       Popped.Raise (this, e);
-               }
-               public virtual void onUnpop(object sender, EventArgs e)
-               {
-                       if (Content != null) {
-                               Content.Visible = false;
-                       }
-                       Unpoped.Raise (this, e);
-               }
-
-               protected override void Dispose (bool disposing)
-               {
-                       if (_content != null && disposing) {
-                               if (_content.Parent == null)
-                                       _content.Dispose ();
-                       }
-                       base.Dispose (disposing);
-               }
-       }
-}
diff --git a/src/GraphicObjects/PrivateContainer.cs b/src/GraphicObjects/PrivateContainer.cs
deleted file mode 100644 (file)
index 0f9b0c5..0000000
+++ /dev/null
@@ -1,244 +0,0 @@
-//
-// PrivateContainer.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-using System.Xml.Serialization;
-using System.ComponentModel;
-using Cairo;
-
-namespace Crow
-{
-       /// <summary>
-       /// Implement drawing and layouting for a single child, but
-       /// does not expose child to allow reuse of container
-       /// behaviour for widgets that have other xml hierarchy: example
-       /// TemplatedControl may have 3 children (template,templateItem,content) but
-       /// behave exactely as a container for layouting and drawing
-       /// </summary>
-       [DesignIgnore]
-       public class PrivateContainer : GraphicObject
-       {
-               #region CTOR
-               protected PrivateContainer () : base(){}
-               public PrivateContainer (Interface iface) : base(iface){}
-               #endregion
-
-               #if DESIGN_MODE
-               public override bool FindByDesignID(string designID, out GraphicObject go){
-                       go = null;
-                       if (base.FindByDesignID (designID, out go))
-                               return true;
-                       if (child == null)
-                               return false;
-                       return child.FindByDesignID (designID, out go);                                 
-               }
-               #endif
-               protected GraphicObject child;
-               #if DEBUG_LOG
-               internal GraphicObject getTemplateRoot {
-                       get { return child; }
-               }
-               #endif
-
-               protected virtual void SetChild(GraphicObject _child)
-               {
-
-                       if (child != null) {
-                               //check if HoverWidget is removed from Tree
-                               if (IFace.HoverWidget != null) {
-                                       if (this.Contains (IFace.HoverWidget))
-                                               IFace.HoverWidget = null;
-                               }
-                               contentSize = default(Size);
-                               child.LayoutChanged -= OnChildLayoutChanges;
-                               this.RegisterForGraphicUpdate ();
-                       }
-
-                       child = _child as GraphicObject;
-
-                       if (child != null) {
-                               child.Parent = this;
-                               child.LayoutChanged += OnChildLayoutChanges;
-                               contentSize = child.Slot.Size;
-                               child.RegisteredLayoutings = LayoutingType.None;
-                               child.RegisterForLayouting (LayoutingType.Sizing);
-                       }
-               }
-               //dispose child if not null
-               protected virtual void deleteChild () {
-                       GraphicObject g = child;
-                       SetChild (null);
-                       if (g != null)
-                               g.Dispose ();
-               }
-
-               #region GraphicObject Overrides
-
-               public override GraphicObject FindByName (string nameToFind)
-               {
-                       if (Name == nameToFind)
-                               return this;
-
-                       return child == null ? null : child.FindByName (nameToFind);
-               }
-               public override bool Contains (GraphicObject goToFind)
-               {
-                       return child == goToFind ? true : 
-                               child == null ? false : child.Contains(goToFind);
-               }
-               public override void OnDataSourceChanged (object sender, DataSourceChangeEventArgs e)
-               {
-                       base.OnDataSourceChanged (this, e);
-                       if (child != null)
-                       if (child.localDataSourceIsNull & child.localLogicalParentIsNull)
-                               child.OnDataSourceChanged (child, e);
-               }
-               public override bool UpdateLayout (LayoutingType layoutType)
-               {
-                       if (child != null) {
-                               //force sizing to fit if sizing on children and child has stretched size
-                               switch (layoutType) {
-                               case LayoutingType.Width:
-                                       if (Width == Measure.Fit && child.Width.IsRelativeToParent)
-                                               child.Width = Measure.Fit;
-                                       break;
-                               case LayoutingType.Height:
-                                       if (Height == Measure.Fit && child.Height.IsRelativeToParent)
-                                               child.Height = Measure.Fit;
-                                       break;
-                               }
-                       }
-                       return base.UpdateLayout (layoutType);
-               }
-               public override void OnLayoutChanges (LayoutingType layoutType)
-               {
-                       base.OnLayoutChanges (layoutType);
-
-                       if (child == null)
-                               return;
-                       
-                       LayoutingType ltChild = LayoutingType.None;
-
-                       if (layoutType == LayoutingType.Width) {
-                               if (child.Width.IsRelativeToParent) {
-                                       ltChild |= LayoutingType.Width;
-                                       if (child.Width.Value < 100 && child.Left == 0)
-                                               ltChild |= LayoutingType.X;
-                               } else if (child.Left == 0)
-                                       ltChild |= LayoutingType.X;
-                       } else if (layoutType == LayoutingType.Height) {
-                               if (child.Height.IsRelativeToParent) {
-                                       ltChild |= LayoutingType.Height;
-                                       if (child.Height.Value < 100 && child.Top == 0)
-                                               ltChild |= LayoutingType.Y;
-                               } else if (child.Top == 0)
-                                               ltChild |= LayoutingType.Y;
-                       }
-                       if (ltChild == LayoutingType.None)
-                               return;
-                       child.RegisterForLayouting (ltChild);
-               }
-               public virtual void OnChildLayoutChanges (object sender, LayoutingEventArgs arg)
-               {                       
-                       GraphicObject g = sender as GraphicObject;
-
-                       if (arg.LayoutType == LayoutingType.Width) {
-                               if (Width != Measure.Fit)
-                                       return;
-                               contentSize.Width = g.Slot.Width;
-                               this.RegisterForLayouting (LayoutingType.Width);
-                       }else if (arg.LayoutType == LayoutingType.Height){
-                               if (Height != Measure.Fit)
-                                       return;
-                               contentSize.Height = g.Slot.Height;
-                               this.RegisterForLayouting (LayoutingType.Height);
-                       }
-               }
-               protected override void onDraw (Context gr)
-               {
-                       base.onDraw (gr);
-
-                       gr.Save ();
-
-                       if (ClipToClientRect) {
-                               //clip to client zone
-                               CairoHelpers.CairoRectangle (gr, ClientRectangle, CornerRadius);
-                               gr.Clip ();
-                       }
-
-                       if (child != null) {
-                               if (child.Visible)
-                                       child.Paint (ref gr);
-                       }
-                       gr.Restore ();
-               }
-               protected override void UpdateCache (Context ctx)
-               {
-                       Rectangle rb = Slot + Parent.ClientRectangle.Position;
-
-
-                       Context gr = new Context (bmp);
-
-                       if (!Clipping.IsEmpty) {
-                               for (int i = 0; i < Clipping.NumRectangles; i++)
-                                       gr.Rectangle(Clipping.GetRectangle(i));
-                               gr.ClipPreserve();
-                               gr.Operator = Operator.Clear;
-                               gr.Fill();
-                               gr.Operator = Operator.Over;
-
-                               onDraw (gr);
-                       }
-                               
-                       gr.Dispose ();
-
-                       ctx.SetSourceSurface (bmp, rb.X, rb.Y);
-                       ctx.Paint ();
-                       Clipping.Dispose();
-                       Clipping = new Region ();
-               }
-               #endregion
-
-               #region Mouse handling
-               public override void checkHoverWidget (MouseMoveEventArgs e)
-               {
-                       base.checkHoverWidget (e);
-
-                       if (child != null) 
-                               if (child.MouseIsIn (e.Position)) 
-                                       child.checkHoverWidget (e);
-               }
-               #endregion
-
-               protected override void Dispose (bool disposing)
-               {
-                       if (disposing && child != null)
-                               child.Dispose ();
-                       base.Dispose (disposing);
-               }
-       }
-}
-
diff --git a/src/GraphicObjects/ProgressBar.cs b/src/GraphicObjects/ProgressBar.cs
deleted file mode 100644 (file)
index e8165fd..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-//
-// ProgressBar.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using Cairo;
-using System.Diagnostics;
-using System.Xml.Serialization;
-using System.ComponentModel;
-
-namespace Crow
-{
-       
-       public class ProgressBar : NumericControl
-    {
-               #region CTOR
-               protected ProgressBar () : base(){}
-               public ProgressBar(Interface iface) : base(iface){}
-               #endregion
-
-               protected override void loadTemplate (GraphicObject template)
-               {
-                       
-               }
-
-               #region GraphicObject overrides
-               protected override void onDraw (Context gr)
-               {
-                       base.onDraw (gr);
-
-                       if (Maximum == 0)
-                               return;
-
-                       Rectangle rBack = ClientRectangle;
-                       rBack.Width = (int)((double)rBack.Width / Maximum * Value);
-                       Foreground.SetAsSource (gr, rBack);
-
-                       CairoHelpers.CairoRectangle(gr,rBack,CornerRadius);
-                       gr.Fill();
-               }
-               #endregion
-    }
-}
diff --git a/src/GraphicObjects/RadioButton.cs b/src/GraphicObjects/RadioButton.cs
deleted file mode 100644 (file)
index d18971a..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-//
-// RadioButton.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-using System.ComponentModel;
-using System.Xml.Serialization;
-
-namespace Crow
-{
-    public class RadioButton : TemplatedControl
-    {                  
-               bool isChecked;
-
-               #region CTOR
-               protected RadioButton () : base(){}
-               public RadioButton(Interface iface) : base(iface){}     
-               #endregion
-
-               public event EventHandler Checked;
-               public event EventHandler Unchecked;
-
-               #region GraphicObject overrides
-               public override void onMouseDown (object sender, MouseButtonEventArgs e)
-               {                                               
-                       Group pg = Parent as Group;
-                       if (pg != null) {
-                               for (int i = 0; i < pg.Children.Count; i++) {
-                                       RadioButton c = pg.Children [i] as RadioButton;
-                                       if (c == null)
-                                               continue;
-                                       c.IsChecked = (c == this);
-                               }
-                       } else
-                               IsChecked = !IsChecked;
-
-                       base.onMouseDown (sender, e);
-               }
-               #endregion
-
-        [DefaultValue(false)]
-        public bool IsChecked
-        {
-                       get { return isChecked; }
-            set
-            {
-                               if (isChecked == value)
-                                       return;
-                               
-                               isChecked = value;
-
-                               NotifyValueChanged ("IsChecked", value);
-
-                               if (isChecked)
-                                       Checked.Raise (this, null);
-                               else
-                                       Unchecked.Raise (this, null);
-            }
-        }
-       }
-}
diff --git a/src/GraphicObjects/SaturationValueSelector.cs b/src/GraphicObjects/SaturationValueSelector.cs
deleted file mode 100644 (file)
index 5a25d6a..0000000
+++ /dev/null
@@ -1,143 +0,0 @@
-//
-// SaturationValueSelector.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-using Cairo;
-using System.Xml.Serialization;
-
-namespace Crow
-{
-       [DesignIgnore]
-       public class SaturationValueSelector : ColorSelector
-       {
-               public SaturationValueSelector () : base(){}
-               public SaturationValueSelector (Interface iface) : base(iface)
-               {
-               }
-
-               double v, s;
-
-               
-               public virtual double V {
-                       get { return v; }
-                       set {
-                               if (v == value)
-                                       return;
-                               v = value;
-                               NotifyValueChanged ("V", v);
-                               mousePos.Y = (int)Math.Floor((1.0-v) * (double)ClientRectangle.Height);
-
-                               RegisterForRedraw ();
-                       }
-               }
-               
-               public virtual double S {
-                       get { return s; }
-                       set {
-                               if (s == value)
-                                       return;
-                               s = value;
-                               NotifyValueChanged ("S", s);
-                               mousePos.X = (int)Math.Floor(s * (double)ClientRectangle.Width);
-
-                               RegisterForRedraw ();
-                       }
-               }
-               protected override void onDraw (Context gr)
-               {
-                       base.onDraw (gr);
-
-                       Rectangle r = ClientRectangle;
-
-                       if (Foreground != null) {//TODO:test if null should be removed
-                               Foreground.SetAsSource (gr, r);
-                               CairoHelpers.CairoRectangle (gr, r, CornerRadius);
-                               gr.Fill ();
-                       }
-
-                       Crow.Gradient grad = new Gradient (Gradient.Type.Horizontal);
-                       grad.Stops.Add (new Gradient.ColorStop (0, new Color (1, 1, 1, 1)));
-                       grad.Stops.Add (new Gradient.ColorStop (1, new Color (1, 1, 1, 0)));
-                       grad.SetAsSource (gr, r);
-                       CairoHelpers.CairoRectangle (gr, r, CornerRadius);
-                       gr.Fill();
-                       grad = new Gradient (Gradient.Type.Vertical);
-                       grad.Stops.Add (new Gradient.ColorStop (0, new Color (0, 0, 0, 0)));
-                       grad.Stops.Add (new Gradient.ColorStop (1, new Color (0, 0, 0, 1)));
-                       grad.SetAsSource (gr, r);
-                       CairoHelpers.CairoRectangle (gr, r, CornerRadius);
-                       gr.Fill();
-
-               }
-
-               public override void Paint (ref Context ctx)
-               {
-                       base.Paint (ref ctx);
-
-                       Rectangle rb = Slot + Parent.ClientRectangle.Position;
-                       ctx.Save ();
-
-                       ctx.Translate (rb.X, rb.Y);
-
-                       ctx.SetSourceColor (Color.DimGrey);
-                       ctx.Arc (mousePos.X, mousePos.Y, 3.5, 0, Math.PI * 2.0);
-                       ctx.LineWidth = 0.5;
-                       ctx.Stroke ();
-                       ctx.Translate (-0.5, -0.5);
-                       ctx.Arc (mousePos.X, mousePos.Y, 3.5, 0, Math.PI * 2.0);
-                       ctx.SetSourceColor (Color.White);
-                       ctx.Stroke ();
-
-                       ctx.Restore ();
-               }
-
-               protected override void updateMouseLocalPos (Point mPos)
-               {
-                       base.updateMouseLocalPos (mPos);
-
-                       Rectangle cb = ClientRectangle;
-                       s = (double)mousePos.X / (double)cb.Width;
-                       v = 1.0 - (double)mousePos.Y / (double)cb.Height;
-                       NotifyValueChanged ("S", s);
-                       NotifyValueChanged ("V", v);
-
-                       RegisterForRedraw ();
-               }
-               public override void OnLayoutChanges (LayoutingType layoutType)
-               {
-                       base.OnLayoutChanges (layoutType);
-                       switch (layoutType) {
-                       case LayoutingType.Width:
-                               mousePos.X = (int)Math.Floor(s * (double)ClientRectangle.Width);
-                               break;
-                       case LayoutingType.Height:
-                               mousePos.Y = (int)Math.Floor((1.0-v) * (double)ClientRectangle.Height);
-                               break;
-                       }
-               }
-       }
-}
-
diff --git a/src/GraphicObjects/ScrollBar.cs b/src/GraphicObjects/ScrollBar.cs
deleted file mode 100644 (file)
index 8f777b6..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
-//
-// ScrollBar.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-using System.Xml.Serialization;
-using System.ComponentModel;
-
-namespace Crow
-{
-       /// <summary>
-       /// templeted numeric control
-       /// </summary>
-       public class ScrollBar : NumericControl
-       {
-               //TODO:could be replaced by a template for a Slider
-
-               Orientation _orientation;
-               int _cursorSize;
-
-               #region CTOR
-               protected ScrollBar () : base(){}
-               public ScrollBar(Interface iface) : base(iface) {}
-               #endregion
-
-               [DefaultValue(Orientation.Vertical)]
-               public virtual Orientation Orientation
-               {
-                       get { return _orientation; }
-                       set {                           
-                               if (_orientation == value)
-                                       return;
-                               _orientation = value;
-                               NotifyValueChanged ("Orientation", _orientation);
-                               if (_orientation == Orientation.Horizontal)
-                                       NotifyValueChanged ("ScrollBackShape", "M 0.5,5.5 L 10.5, 0.5 L 10.5,0.5 Z");
-                               else
-                                       NotifyValueChanged ("ScrollBackShape", "M 5.5,0.5 L 10.5,10.5 L 0.5,10.5 Z");
-                               RegisterForGraphicUpdate ();
-                       }
-               }
-               [DefaultValue(20)]
-               public virtual int CursorSize {
-                       get { return _cursorSize; }
-                       set {
-                               if (_cursorSize == value)
-                                       return;
-                               _cursorSize = value;
-                               RegisterForGraphicUpdate ();
-                               NotifyValueChanged ("CursorSize", _cursorSize);
-                       }
-               }
-               public void onScrollBack (object sender, MouseButtonEventArgs e)
-               {
-                       Value -= SmallIncrement;
-               }
-               public void onScrollForth (object sender, MouseButtonEventArgs e)
-               {
-                       Value += SmallIncrement;
-               }
-
-               public void onSliderValueChange(object sender, ValueChangeEventArgs e){
-                       if (e.MemberName == "Value")
-                               Value = Convert.ToDouble(e.NewValue);
-               }
-       }
-}
diff --git a/src/GraphicObjects/Scroller.cs b/src/GraphicObjects/Scroller.cs
deleted file mode 100644 (file)
index 16f6556..0000000
+++ /dev/null
@@ -1,291 +0,0 @@
-//
-// Scroller.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-using System.Xml.Serialization;
-using System.ComponentModel;
-using System.Diagnostics;
-using Cairo;
-
-namespace Crow
-{
-       /// <summary>
-       /// scrolling surface, to be contained in a smaller container in which it will be scrolled
-       /// </summary>
-       public class Scroller : Container
-       {
-               #region CTOR
-               protected Scroller () : base(){}
-               public Scroller (Interface iface) : base(iface){}
-               #endregion
-
-               public event EventHandler<ScrollingEventArgs> Scrolled;
-
-               int scrollX, scrollY, maxScrollX, maxScrollY, scrollSpeed;
-
-               /// <summary>
-               /// if true, key stroke are handled in derrived class
-               /// </summary>
-               protected bool KeyEventsOverrides = false;
-
-               #region public properties
-               /// <summary> Horizontal Scrolling Position </summary>
-               [DefaultValue(0)]
-               public virtual int ScrollX {
-                       get { return scrollX; }
-                       set {
-                               if (scrollX == value)
-                                       return;
-
-                               int newS = value;
-                               if (newS < 0)
-                                       newS = 0;
-                               else if (newS > maxScrollX)
-                                       newS = maxScrollX;
-
-                               if (newS == scrollX)
-                                       return;
-
-                               scrollX = value;
-
-                               NotifyValueChanged ("ScrollX", scrollX);
-                               RegisterForGraphicUpdate ();
-                       }
-               }
-               /// <summary> Vertical Scrolling Position </summary>
-               [DefaultValue(0)]
-               public virtual int ScrollY {
-                       get { return scrollY; }
-                       set {
-                               if (scrollY == value)
-                                       return;
-
-                               int newS = value;
-                               if (newS < 0)
-                                       newS = 0;
-                               else if (newS > maxScrollY)
-                                       newS = maxScrollY;
-
-                               if (newS == scrollY)
-                                       return;
-
-                               scrollY = value;
-
-                               NotifyValueChanged ("ScrollY", scrollY);
-                               RegisterForGraphicUpdate ();
-                       }
-               }
-               /// <summary> Horizontal Scrolling maximum value </summary>
-               [DefaultValue(0)]
-               public virtual int MaxScrollX {
-                       get { return maxScrollX; }
-                       set {
-                               if (maxScrollX == value)
-                                       return;
-
-                               maxScrollX = value;
-
-                               if (scrollX > maxScrollX)
-                                       ScrollX = maxScrollX;
-
-                               NotifyValueChanged ("MaxScrollX", maxScrollX);
-                               RegisterForGraphicUpdate ();
-                       }
-               }
-               /// <summary> Vertical Scrolling maximum value </summary>
-               [DefaultValue(0)]
-               public virtual int MaxScrollY {
-                       get { return maxScrollY; }
-                       set {
-                               if (maxScrollY == value)
-                                       return;
-
-                               maxScrollY = value;
-
-                               if (scrollY > maxScrollY)
-                                       ScrollY = maxScrollY;
-
-                               NotifyValueChanged ("MaxScrollY", maxScrollY);
-                               RegisterForGraphicUpdate ();
-                       }
-               }
-               /// <summary> Mouse Wheel Scrolling multiplier </summary>
-               [DefaultValue(50)]
-               public virtual int ScrollSpeed {
-                       get { return scrollSpeed; }
-                       set {
-                               if (scrollSpeed == value)
-                                       return;
-
-                               scrollSpeed = value;
-
-                               NotifyValueChanged ("ScrollSpeed", scrollSpeed);
-                       }
-               }
-               #endregion
-
-               public override void SetChild (GraphicObject _child)
-               {
-                       Group g = child as Group;
-                       if (g != null)
-                               g.ChildrenCleared -= onChildListCleared;
-                       
-                       base.SetChild (_child);
-
-                       g = _child as Group;
-                       if (g != null)
-                               g.ChildrenCleared += onChildListCleared;                        
-               }
-               public override void OnChildLayoutChanges (object sender, LayoutingEventArgs arg)
-               {
-                       base.OnChildLayoutChanges (sender, arg);
-                       updateMaxScroll (arg.LayoutType);
-               }
-
-
-               #region GraphicObject Overrides
-               public override Rectangle ScreenCoordinates (Rectangle r)
-               {
-                       return base.ScreenCoordinates (r) - new Point((int)ScrollX,(int)ScrollY);
-               }
-               public override bool PointIsIn (ref Point m)
-               {
-                       if (!base.PointIsIn(ref m))
-                               return false;
-                       if (!Slot.ContainsOrIsEqual (m) || child==null)
-                               return false;
-                       m += new Point (ScrollX, ScrollY);
-                       return true;
-               }
-               public override void RegisterClip (Rectangle clip)
-               {
-                       base.RegisterClip (clip - new Point(ScrollX,ScrollY));
-               }
-               public override void OnLayoutChanges (LayoutingType layoutType)
-               {
-                       base.OnLayoutChanges (layoutType);
-
-                       if (layoutType == LayoutingType.Height)
-                               NotifyValueChanged ("PageHeight", Slot.Height);
-                       else if (layoutType == LayoutingType.Width)
-                               NotifyValueChanged ("PageWidth", Slot.Width);
-                       else
-                               return;
-                       updateMaxScroll(layoutType);
-               }
-               protected override void onDraw (Context gr)
-               {
-                       Rectangle rBack = new Rectangle (Slot.Size);
-
-                       Background.SetAsSource (gr, rBack);
-                       CairoHelpers.CairoRectangle(gr,rBack, CornerRadius);
-                       gr.Fill ();
-
-                       gr.Save ();
-                       if (ClipToClientRect) {
-                               //clip to scrolled client zone
-                               CairoHelpers.CairoRectangle (gr, ClientRectangle, CornerRadius);
-                               gr.Clip ();
-                       }
-
-                       gr.Translate (-ScrollX, -ScrollY);
-                       if (child != null)
-                               child.Paint (ref gr);
-                       gr.Restore ();
-               }
-
-               #region Mouse & Keyboard
-               /// <summary> Process scrolling vertically, or if shift is down, vertically </summary>
-               public override void onMouseWheel (object sender, MouseWheelEventArgs e)
-               {
-                       base.onMouseWheel (sender, e);
-                       if (IFace.IsKeyDown (Key.Shift_L))
-                               ScrollX += e.Delta * ScrollSpeed;
-                       else
-                               ScrollY -= e.Delta * ScrollSpeed;
-               }
-               /// <summary> Process scrolling with arrow keys, home and end keys. </summary>
-               public override void onKeyDown (object sender, KeyEventArgs e)
-               {
-                       base.onKeyDown (sender, e);
-
-                       if (KeyEventsOverrides)
-                               return;
-
-                       switch (e.Key) {
-                       case Key.Up:
-                               ScrollY--;
-                               break;
-                       case Key.Down:
-                               ScrollY++;
-                               break;
-                       case Key.Left:
-                               ScrollX--;
-                               break;
-                       case Key.Right:
-                               ScrollX++;
-                               break;
-                       case Key.Home:
-                               ScrollX = 0;
-                               ScrollY = 0;
-                               break;
-                       case Key.End:
-                               ScrollX = MaxScrollX;
-                               ScrollY = MaxScrollY;
-                               break;
-                       }
-               }
-               #endregion
-
-               #endregion
-
-               void updateMaxScroll (LayoutingType lt){
-                       if (Child == null) {
-                               MaxScrollX = 0;
-                               MaxScrollY = 0;
-                               return;
-                       }
-
-                       Rectangle cb = ClientRectangle;
-
-                       if (lt == LayoutingType.Height) {
-                               MaxScrollY = child.Slot.Height - cb.Height;
-                               if (child.Slot.Height > 0)
-                                       NotifyValueChanged ("ChildHeightRatio", Slot.Height * Slot.Height / child.Slot.Height);                 
-                       } else if (lt == LayoutingType.Width) {
-                               MaxScrollX = child.Slot.Width - cb.Width;
-                               if (child.Slot.Width > 0)
-                                       NotifyValueChanged ("ChildWidthRatio", Slot.Width * Slot.Width / child.Slot.Width);
-                       }
-               }
-               void onChildListCleared(object sender, EventArgs e){
-                       ScrollY = 0;
-                       ScrollX = 0;
-               }
-
-
-    }
-}
diff --git a/src/GraphicObjects/ScrollingObject.cs b/src/GraphicObjects/ScrollingObject.cs
deleted file mode 100644 (file)
index bc57b32..0000000
+++ /dev/null
@@ -1,190 +0,0 @@
-//
-// ScrollingObject.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-using System.Xml.Serialization;
-using System.ComponentModel;
-using System.Collections;
-using Cairo;
-
-
-namespace Crow
-{
-       /// <summary>
-       /// generic class to build scrolling control in both directions
-       /// </summary>
-       [DesignIgnore]
-       public class ScrollingObject : GraphicObject
-       {
-               #region CTOR
-               protected ScrollingObject ():base(){}
-               public ScrollingObject (Interface iface):base(iface){}
-               #endregion
-
-               int scrollX, scrollY, maxScrollX, maxScrollY, mouseWheelSpeed;
-
-               /// <summary>
-               /// if true, key stroke are handled in derrived class
-               /// </summary>
-               protected bool KeyEventsOverrides = false;
-
-               /// <summary> Horizontal Scrolling Position </summary>
-               [DefaultValue(0)]
-               public virtual int ScrollX {
-                       get { return scrollX; }
-                       set {
-                               if (scrollX == value)
-                                       return;
-
-                               int newS = value;
-                               if (newS < 0)
-                                       newS = 0;
-                               else if (newS > maxScrollX)
-                                       newS = maxScrollX;
-
-                               if (newS == scrollX)
-                                       return;
-
-                               scrollX = newS;
-
-                               NotifyValueChanged ("ScrollX", scrollX);
-                               RegisterForGraphicUpdate ();
-                       }
-               }
-               /// <summary> Vertical Scrolling Position </summary>
-               [DefaultValue(0)]
-               public virtual int ScrollY {
-                       get { return scrollY; }
-                       set {
-                               if (scrollY == value)
-                                       return;
-
-                               int newS = value;
-                               if (newS < 0)
-                                       newS = 0;
-                               else if (newS > maxScrollY)
-                                       newS = maxScrollY;
-
-                               if (newS == scrollY)
-                                       return;
-
-                               scrollY = newS;
-
-                               NotifyValueChanged ("ScrollY", scrollY);
-                               RegisterForGraphicUpdate ();
-                       }
-               }
-               /// <summary> Horizontal Scrolling maximum value </summary>
-               [DefaultValue(0)]
-               public virtual int MaxScrollX {
-                       get { return maxScrollX; }
-                       set {
-                               if (maxScrollX == value)
-                                       return;
-
-                               maxScrollX = value;
-
-                               if (scrollX > maxScrollX)
-                                       ScrollX = maxScrollX;
-                               
-                               NotifyValueChanged ("MaxScrollX", maxScrollX);
-                               RegisterForGraphicUpdate ();
-                       }
-               }
-               /// <summary> Vertical Scrolling maximum value </summary>
-               [DefaultValue(0)]
-               public virtual int MaxScrollY {
-                       get { return maxScrollY; }
-                       set {
-                               if (maxScrollY == value)
-                                       return;
-
-                               maxScrollY = value;
-
-                               if (scrollY > maxScrollY)
-                                       ScrollY = maxScrollY;
-
-                               NotifyValueChanged ("MaxScrollY", maxScrollY);
-                               RegisterForGraphicUpdate ();
-                       }
-               }
-               /// <summary> Mouse Wheel Scrolling multiplier </summary>
-               [DefaultValue(1)]
-               public virtual int MouseWheelSpeed {
-                       get { return mouseWheelSpeed; }
-                       set {
-                               if (mouseWheelSpeed == value)
-                                       return;
-                               
-                               mouseWheelSpeed = value;
-
-                               NotifyValueChanged ("MouseWheelSpeed", mouseWheelSpeed);
-                       }
-               }
-
-               /// <summary> Process scrolling vertically, or if shift is down, vertically </summary>
-               public override void onMouseWheel (object sender, MouseWheelEventArgs e)
-               {
-                       base.onMouseWheel (sender, e);
-                       if (IFace.Keyboard.Shift)
-                               ScrollX += e.Delta * MouseWheelSpeed;
-                       else
-                               ScrollY -= e.Delta * MouseWheelSpeed;
-               }
-               /// <summary> Process scrolling with arrow keys, home and end keys. </summary>
-               public override void onKeyDown (object sender, KeyEventArgs e)
-               {
-                       base.onKeyDown (sender, e);
-
-                       if (KeyEventsOverrides)
-                               return;
-
-                       switch (e.Key) {
-                       case Key.Up:
-                               ScrollY--;
-                               break;
-                       case Key.Down:
-                               ScrollY++;
-                               break;
-                       case Key.Left:
-                               ScrollX--;
-                               break;
-                       case Key.Right:
-                               ScrollX++;
-                               break;
-                       case Key.Home:
-                               ScrollX = 0;
-                               ScrollY = 0;
-                               break;
-                       case Key.End:
-                               ScrollX = MaxScrollX;
-                               ScrollY = MaxScrollY;
-                               break;
-                       }
-               }
-       }
-}
-
diff --git a/src/GraphicObjects/Shape.cs b/src/GraphicObjects/Shape.cs
deleted file mode 100644 (file)
index eb52a06..0000000
+++ /dev/null
@@ -1,164 +0,0 @@
-//
-// Shape.cs
-//
-// Author:
-//       jp <>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-using System;
-using System.Xml.Serialization;
-using System.ComponentModel;
-using System.IO;
-using System.Text;
-using Cairo;
-
-namespace Crow
-{
-       public class PathParser : StringReader
-       {
-               public PathParser (string str) : base (str) {}
-
-               public double ReadDouble () {
-                       StringBuilder tmp = new StringBuilder();
-
-                       while (Peek () >= 0) {                          
-                               char c = (char)Read();
-                               if (c.IsWhiteSpaceOrNewLine()) {
-                                       if (tmp.Length == 0)
-                                               continue;
-                                       else
-                                               break;
-                               } else if (c == ',')
-                                       break;                          
-                               tmp.Append (c);
-                       }
-                       return double.Parse (tmp.ToString ());
-               }
-               
-       }
-       public class Shape : GraphicObject
-       {
-               #region CTOR
-               protected Shape () : base() {}
-               public Shape (Interface iface) : base (iface) {}
-               #endregion
-
-               string path;
-               double strokeWidth;
-
-               public string Path {
-                       get { return path; }
-                       set {
-                               if (path == value)
-                                       return;
-                               path = value;
-                               contentSize = default (Size);
-                               NotifyValueChanged ("Path", path);
-                               RegisterForGraphicUpdate ();
-                       }
-               }
-               [DefaultValue(1.0)]
-               public double StokeWidth {
-                       get { return strokeWidth; }
-                       set {
-                               if (strokeWidth == value)
-                                       return;
-                               strokeWidth = value;
-                               contentSize = default (Size);
-                               NotifyValueChanged ("StrokeWidth", strokeWidth);
-                               RegisterForGraphicUpdate ();
-                       }
-               }
-
-               protected override void onDraw (Context gr)
-               {
-                       
-                       if (string.IsNullOrEmpty (path))
-                               return;
-
-                       Rectangle r = ClientRectangle;
-
-                       executePath (gr);
-
-                       Background.SetAsSource (gr, r);
-                       gr.FillPreserve ();
-                       gr.LineWidth = strokeWidth;
-                       Foreground.SetAsSource (gr, r);
-                       gr.Stroke ();                   
-               }
-
-               void executePath (Context gr){
-                       using (PathParser sr = new PathParser (path)) {
-                               while (sr.Peek () >= 0) {
-                                       char c = (char)sr.Read ();
-                                       if (c.IsWhiteSpaceOrNewLine ())
-                                               continue;
-                                       switch (c) {
-                                       case 'M':                                               
-                                               gr.MoveTo (sr.ReadDouble (), sr.ReadDouble ());
-                                               break;
-                                       case 'm':
-                                               gr.RelMoveTo (sr.ReadDouble (), sr.ReadDouble ());
-                                               break;
-                                       case 'L':
-                                               gr.LineTo (sr.ReadDouble (), sr.ReadDouble ());
-                                               break;
-                                       case 'l':
-                                               gr.RelLineTo (sr.ReadDouble (), sr.ReadDouble ());
-                                               break;
-                                       case 'C':
-                                               gr.CurveTo (sr.ReadDouble (), sr.ReadDouble (), sr.ReadDouble (), sr.ReadDouble (), sr.ReadDouble (), sr.ReadDouble ());
-                                               break;
-                                       case 'c':
-                                               gr.RelCurveTo (sr.ReadDouble (), sr.ReadDouble (), sr.ReadDouble (), sr.ReadDouble (), sr.ReadDouble (), sr.ReadDouble ());
-                                               break;
-                                       case 'Z':
-                                               gr.ClosePath ();
-                                               break;
-                                       case 'F':
-                                               gr.Fill ();
-                                               break;
-                                       case 'G':
-                                               gr.Stroke ();
-                                               break;
-                                       default:
-                                               throw new Exception ("Invalid character in path string of Shape control");
-                                       }
-                               }
-                       }
-               }
-               protected override int measureRawSize (LayoutingType lt)
-               {
-                       if ((lt == LayoutingType.Width && contentSize.Width == 0) || (lt == LayoutingType.Height && contentSize.Height == 0)) {
-                               using (Surface drawing = new ImageSurface (Format.A1, 1,1)) {
-                                       using (Context ctx = new Context (drawing)) {
-                                               executePath (ctx);
-                                               Rectangle r = ctx.StrokeExtents ();
-                                               contentSize = new Size (r.Right, r.Bottom);
-                                       }
-                               }
-                       }
-                       return lt == LayoutingType.Width ?
-                               contentSize.Width + 2 * Margin: contentSize.Height + 2 * Margin;
-               }
-       }
-}
-
diff --git a/src/GraphicObjects/Slider.cs b/src/GraphicObjects/Slider.cs
deleted file mode 100644 (file)
index 64668c4..0000000
+++ /dev/null
@@ -1,256 +0,0 @@
-//
-// Slider.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-using Cairo;
-using System.Xml.Serialization;
-using System.ComponentModel;
-using System.Diagnostics;
-
-namespace Crow
-{
-       /// <summary>
-       /// templated numeric control to select a value
-       /// by slidding a cursor
-       /// </summary>
-       public class Slider : NumericControl
-    {
-               #region CTOR
-               protected Slider() : base(){}
-               public Slider(Interface iface) : base(iface)
-               {}
-//             public Slider(double minimum, double maximum, double step)
-//                     : base(minimum,maximum,step)
-//             {
-//             }
-               #endregion
-
-               #region implemented abstract members of TemplatedControl
-
-               protected override void loadTemplate (GraphicObject template = null)
-               {
-                       
-               }
-
-               #endregion
-
-               #region private fields
-        Rectangle cursor;
-               int _cursorSize;
-               Fill _cursorColor;
-               Orientation _orientation;
-               bool holdCursor = false;
-               #endregion
-
-               protected double unity;
-
-               #region Public properties
-               [DefaultValue("vgradient|0:White|0,1:LightGrey|0,9:LightGrey|1:DimGrey")]
-               public virtual Fill CursorColor {
-                       get { return _cursorColor; }
-                       set {
-                               if (_cursorColor == value)
-                                       return;
-                               _cursorColor = value;
-                               RegisterForRedraw ();
-                               NotifyValueChanged ("CursorColor", _cursorColor);
-                       }
-               }
-               [DefaultValue(20)]
-               public virtual int CursorSize {
-                       get { return _cursorSize; }
-                       set {
-                               if (_cursorSize == value || value < 8)
-                                       return;
-                               _cursorSize = value;
-                               RegisterForGraphicUpdate ();
-                               NotifyValueChanged ("CursorSize", _cursorSize);
-                       }
-               }
-               [DefaultValue(Orientation.Horizontal)]
-               public virtual Orientation Orientation
-               {
-                       get { return _orientation; }
-                       set { 
-                               if (_orientation == value)
-                                       return;
-                               _orientation = value; 
-
-                               RegisterForLayouting (LayoutingType.All);
-                               NotifyValueChanged ("Orientation", _orientation);
-                       }
-               }
-               #endregion
-
-               [DefaultValue(10.0)]
-               public override double Maximum {
-                       get { return base.Maximum; }
-                       set {                           
-                               if (value == base.Maximum)
-                                       return;
-                               base.Maximum = value;
-                               LargeIncrement = base.Maximum / 10.0;
-                               SmallIncrement = LargeIncrement / 5.0;
-                       }
-               }
-
-               #region GraphicObject Overrides
-               protected override void onDraw (Context gr)
-               {
-                       base.onDraw (gr);
-
-                       if (Maximum <= 0)
-                               return;
-
-                       computeCursorPosition ();
-
-                       Rectangle r = ClientRectangle;
-                       PointD pStart;
-                       PointD pEnd;
-                       if (_orientation == Orientation.Horizontal) {
-                               pStart = r.TopLeft + new Point (_cursorSize / 2, r.Height / 2);
-                               pEnd = r.TopRight + new Point (-_cursorSize / 2, r.Height / 2);
-                               pStart.Y += 0.5;
-                               pEnd.Y += 0.5;
-                       } else {
-                               pStart = r.TopLeft + new Point (r.Width / 2, _cursorSize / 2);
-                               pEnd = r.BottomLeft + new Point (r.Width / 2,- _cursorSize / 2);
-                               pStart.X += 0.5;
-                               pEnd.X += 0.5;
-
-                       }
-                               
-                       Background.SetAsSource (gr,r);
-                       gr.Rectangle (r);
-                       gr.Fill ();
-
-                       DrawGraduations (gr, pStart,pEnd);
-
-                       DrawCursor (gr, cursor);
-               }
-               #endregion
-
-               protected virtual void DrawGraduations(Context gr, PointD pStart, PointD pEnd)
-               {
-                       Foreground.SetAsSource (gr);
-
-                       gr.LineWidth = 1;
-                       gr.MoveTo(pStart);
-                       gr.LineTo(pEnd);
-
-                       gr.Stroke();
-
-               }
-               protected virtual void DrawCursor(Context gr, Rectangle _cursor)
-               {
-                       CursorColor.SetAsSource (gr, _cursor);
-                       CairoHelpers.CairoRectangle (gr, _cursor, CornerRadius);
-                       gr.Fill();
-               }
-
-        void computeCursorPosition()
-        {            
-            Rectangle r = ClientRectangle;
-                       PointD p1; 
-
-                       if (_orientation == Orientation.Horizontal) {
-                               cursor = new Rectangle (new Size (_cursorSize, (int)(r.Height)));
-                               p1 = r.TopLeft + new Point (_cursorSize / 2, r.Height / 2);
-                               unity = (double)(r.Width - _cursorSize) / (Maximum - Minimum);
-                               cursor.TopLeft = new Point (r.Left + (int)((Value - Minimum) * unity),
-                                       (int)(p1.Y - cursor.Height / 2));
-                       } else {
-                               cursor = new Rectangle (new Size ((int)(r.Width), _cursorSize));
-                               p1 = r.TopLeft + new Point (r.Width / 2, _cursorSize / 2);
-                               unity = (double)(r.Height - _cursorSize) / (Maximum - Minimum);
-                               cursor.TopLeft = new Point ((int)(p1.X - r.Width / 2),
-                                       r.Top + (int)((Value - Minimum) * unity));                              
-                       }
-                       //cursor.Inflate (-1);
-        }
-               Point mouseDownInit;
-               double mouseDownInitValue;
-
-               #region mouse handling
-               public override void onMouseDown (object sender, MouseButtonEventArgs e)
-               {
-                       base.onMouseDown (sender, e);
-                       mouseDownInit = ScreenPointToLocal (e.Position);
-                       mouseDownInitValue = Value;
-                       Rectangle cursInScreenCoord = ScreenCoordinates (cursor + Slot.Position);
-                       if (cursInScreenCoord.ContainsOrIsEqual (e.Position)){
-//                             Rectangle r = ClientRectangle;
-//                             if (r.Width - _cursorSize > 0) {
-//                                     double unit = (Maximum - Minimum) / (double)(r.Width - _cursorSize);
-//                                     mouseDownInit += new Point ((int)(Value / unit), (int)(Value / unit));
-//                             }
-                               holdCursor = true;
-                       }else if (_orientation == Orientation.Horizontal) {
-                               if (e.Position.X < cursInScreenCoord.Left)
-                                       Value -= LargeIncrement;
-                               else
-                                       Value += LargeIncrement;
-                       } else {
-                               if (e.Position.Y < cursInScreenCoord.Top)
-                                       Value -= LargeIncrement;
-                               else
-                                       Value += LargeIncrement;
-                       }
-               }
-               public override void onMouseUp (object sender,MouseButtonEventArgs e)
-               {
-                       base.onMouseUp (sender, e);
-
-                       holdCursor = false;
-               }
-               public override void onMouseMove (object sender, MouseMoveEventArgs e)
-               {
-                       if (holdCursor) {                               
-                               Point m = ScreenPointToLocal (e.Position) - mouseDownInit;
-                               Rectangle r = ClientRectangle;
-
-                               if (_orientation == Orientation.Horizontal) {
-                                       if (r.Width - _cursorSize == 0)
-                                               return;                                 
-                                       double unit = (Maximum - Minimum) / (double)(r.Width - _cursorSize);
-                                       double tmp = mouseDownInitValue + (double)m.X * unit;
-                                       tmp -= tmp % SmallIncrement;
-                                       Value = tmp;
-                               } else {
-                                       if (r.Height - _cursorSize == 0)
-                                               return;                                 
-                                       double unit = (Maximum - Minimum) / (double)(r.Height - _cursorSize);
-                                       double tmp = mouseDownInitValue + (double)m.Y * unit;
-                                       tmp -= tmp % SmallIncrement;
-                                       Value = tmp;
-                               }
-                       }
-                       
-                       base.onMouseMove (sender, e);
-               }
-               #endregion
-    }
-}
diff --git a/src/GraphicObjects/Spinner.cs b/src/GraphicObjects/Spinner.cs
deleted file mode 100644 (file)
index 7c5fdb2..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-//
-// Spinner.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-
-namespace Crow
-{
-       /// <summary>
-       /// templated control for selecting a numeric value by clicking on
-       /// up and down buttons
-       /// </summary>
-       public class Spinner : NumericControl
-       {
-               #region CTOR
-               protected Spinner() : base(){}
-               public Spinner (Interface iface) : base(iface)
-               {
-               }
-               #endregion
-
-               void onUp (object sender, MouseButtonEventArgs e)
-               {
-                       Value += this.SmallIncrement;
-               }
-               void onDown (object sender, MouseButtonEventArgs e)
-               {
-                       Value -= this.SmallIncrement;
-               }
-
-       }
-}
-
diff --git a/src/GraphicObjects/Splitter.cs b/src/GraphicObjects/Splitter.cs
deleted file mode 100644 (file)
index 8fb7bb7..0000000
+++ /dev/null
@@ -1,237 +0,0 @@
-//
-// Splitter.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-using System.Xml.Serialization;
-using System.ComponentModel;
-
-namespace Crow
-{
-       /// <summary>
-       /// control to add between children of a Stack to allow them to be resized
-       /// with the pointer
-       /// </summary>
-       public class Splitter : GraphicObject
-       {
-               #region CTOR
-               protected Splitter() : base(){}
-               public Splitter (Interface iface) : base(iface){}
-               #endregion
-
-               int thickness;
-
-               [DefaultValue(1)]
-               public virtual int Thickness {
-                       get { return thickness; }
-                       set {
-                               if (thickness == value)
-                                       return;
-                               thickness = value; 
-                               NotifyValueChanged ("Thickness", thickness);
-                               RegisterForLayouting (LayoutingType.Sizing);
-                               RegisterForGraphicUpdate ();
-                       }
-               }
-
-               Unit u1, u2;
-               int init1 = -1, init2 = -1, delta = 0, min1, min2, max1 , max2;
-               GraphicObject go1 = null, go2 = null;
-
-               void initSplit(Measure m1, int size1, Measure m2, int size2){
-                       if (m1 != Measure.Stretched) {
-                               init1 = size1;
-                               u1 = m1.Units;
-                       }
-                       if (m2 != Measure.Stretched) {
-                               init2 = size2;
-                               u2 = m2.Units;
-                       }
-               }
-               void convertSizeInPix(GraphicObject g1){
-
-               }
-
-               #region GraphicObject override
-               public override ILayoutable Parent {
-                       get { return base.Parent; }
-                       set {
-                               if (value != null) {                    
-                                       GenericStack gs = value as GenericStack;
-                                       if (gs == null)
-                                               throw new Exception ("Splitter may only be chil of stack");
-                                       
-                               }
-                               base.Parent = value;
-                       }
-               }
-               public override void onMouseEnter (object sender, MouseMoveEventArgs e)
-               {
-                       base.onMouseEnter (sender, e);
-                       if ((Parent as GenericStack).Orientation == Orientation.Horizontal)
-                               IFace.MouseCursor = XCursor.H;
-                       else
-                               IFace.MouseCursor = XCursor.V;
-               }
-               public override void onMouseLeave (object sender, MouseMoveEventArgs e)
-               {
-                       base.onMouseLeave (sender, e);
-                       IFace.MouseCursor = XCursor.Default;
-               }
-               public override void onMouseDown (object sender, MouseButtonEventArgs e)
-               {
-                       base.onMouseDown (sender, e);
-                       go1 = go2 = null;
-                       init1 = init2 = -1;
-                       delta = 0;
-
-                       GenericStack gs = Parent as GenericStack;
-                       int ptrSplit = gs.Children.IndexOf (this);
-                       if (ptrSplit == 0 || ptrSplit == gs.Children.Count - 1)
-                               return;
-
-                       go1 = gs.Children [ptrSplit - 1];
-                       go2 = gs.Children [ptrSplit + 1];
-
-                       if (gs.Orientation == Orientation.Horizontal) {
-                               initSplit (go1.Width, go1.Slot.Width, go2.Width, go2.Slot.Width);
-                               min1 = go1.MinimumSize.Width;
-                               min2 = go2.MinimumSize.Width;
-                               max1 = go1.MaximumSize.Width;
-                               max2 = go2.MaximumSize.Width;
-                               if (init1 >= 0)
-                                       go1.Width = init1;
-                               if (init2 >= 0)
-                                       go2.Width = init2;
-                       } else {
-                               initSplit (go1.Height, go1.Slot.Height, go2.Height, go2.Slot.Height);
-                               min1 = go1.MinimumSize.Height;
-                               min2 = go2.MinimumSize.Height;
-                               max1 = go1.MaximumSize.Height;
-                               max2 = go2.MaximumSize.Height;
-                               if (init1 >= 0)
-                                       go1.Height = init1;
-                               if (init2 >= 0)
-                                       go2.Height = init2;
-                       }
-               }
-               public override void onMouseMove (object sender, MouseMoveEventArgs e)
-               {
-                       base.onMouseMove (sender, e);
-
-                       if (!IsActive || go1 == null || go2 == null)
-                               return;
-
-                       GenericStack gs = Parent as GenericStack;
-                       int newDelta = delta, size1 = init1 , size2 = init2;
-                       if (gs.Orientation == Orientation.Horizontal) {
-                               newDelta -= e.XDelta;
-                               if (size1 < 0)
-                                       size1 = go1.Slot.Width + delta;
-                               if (size2 < 0)
-                                       size2 = go2.Slot.Width - delta;
-                       } else {
-                               newDelta -= e.YDelta;
-                               if (size1 < 0)
-                                       size1 = go1.Slot.Height + delta;
-                               if (size2 < 0)
-                                       size2 = go2.Slot.Height - delta;
-                       }
-
-                       if (size1 - newDelta < min1 || (max1 > 0 && size1 - newDelta > max1) ||
-                               size2 + newDelta < min2 || (max2 > 0 && size2 + newDelta > max2))
-                               return;
-
-                       delta = newDelta;
-
-                       if (gs.Orientation == Orientation.Horizontal) {
-                               if (init1 >= 0)
-                                       go1.Width = init1 - delta;
-                               if (init2 >= 0)
-                                       go2.Width = init2 + delta;
-                       } else {
-                               if (init1 >= 0)
-                                       go1.Height = init1 - delta;
-                               if (init2 >= 0)
-                                       go2.Height = init2 + delta;
-                       }
-               }
-               public override void onMouseUp (object sender, MouseButtonEventArgs e)
-               {
-                       base.onMouseUp (sender, e);
-
-                       GenericStack gs = Parent as GenericStack;
-
-                       if (init1 >= 0 && u1 == Unit.Percent) {
-                               if (gs.Orientation == Orientation.Horizontal)
-                                       go1.Width = new Measure ((int)Math.Ceiling (
-                                               go1.Width.Value * 100.0 / (double)gs.Slot.Width), Unit.Percent);
-                               else
-                                       go1.Height = new Measure ((int)Math.Ceiling (
-                                               go1.Height.Value * 100.0 / (double)gs.Slot.Height), Unit.Percent);
-                       }
-                       if (init2 >= 0 && u2 == Unit.Percent) {
-                               if (gs.Orientation == Orientation.Horizontal)
-                                       go2.Width = new Measure ((int)Math.Floor (
-                                               go2.Width.Value * 100.0 / (double)gs.Slot.Width), Unit.Percent);
-                               else
-                                       go2.Height = new Measure ((int)Math.Floor (
-                                               go2.Height.Value * 100.0 / (double)gs.Slot.Height), Unit.Percent);
-                       }
-               }
-               public override bool UpdateLayout (LayoutingType layoutType)
-               {
-                       GenericStack gs = Parent as GenericStack;
-                       if (layoutType == LayoutingType.Width){
-                               if (gs.Orientation == Orientation.Horizontal)
-                                       Width = thickness;
-                               else
-                                       Width = Measure.Stretched;
-                       } else if (layoutType == LayoutingType.Height){
-                               if (gs.Orientation == Orientation.Vertical)
-                                       Height = thickness;
-                               else
-                                       Height = Measure.Stretched;
-                       }
-                       return base.UpdateLayout (layoutType);
-               }
-               public override bool PointIsIn (ref Point m)
-               {
-                       if (!(Visible & IsEnabled)||IsDragged)
-                               return false;
-                       if (!Parent.PointIsIn(ref m))
-                               return false;
-                       m -= (Parent.getSlot().Position + Parent.ClientRectangle.Position) ;
-                       Rectangle r = Slot;
-                       if (Width == Measure.Stretched)
-                               r.Inflate (0, 5);
-                       else
-                               r.Inflate (5, 0);
-                       return r.ContainsOrIsEqual (m); 
-               }
-               #endregion
-       }
-}
-
diff --git a/src/GraphicObjects/TabItem.cs b/src/GraphicObjects/TabItem.cs
deleted file mode 100644 (file)
index f92c1d7..0000000
+++ /dev/null
@@ -1,336 +0,0 @@
-//
-// TabItem.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-using System.Xml.Serialization;
-using System.ComponentModel;
-using System.Diagnostics;
-using Cairo;
-using System.Linq;
-
-namespace Crow
-{
-       public class TabItem : TemplatedContainer
-       {
-               #region CTOR
-               protected TabItem() : base(){}
-               public TabItem (Interface iface) : base(iface){}
-               #endregion
-
-               public event EventHandler QueryClose;
-
-               internal TabView tview = null;
-
-               #region Private fields
-               GraphicObject titleWidget;
-               int tabOffset;
-               bool isSelected;
-               Measure tabThickness;
-               Fill selectedBackground = Color.Transparent;
-               #endregion
-
-               #region TemplatedControl overrides
-               public override GraphicObject Content {
-                       get {
-                               return _contentContainer == null ? null : _contentContainer.Child;
-                       }
-                       set {
-                               if (Content != null) {
-                                       Content.LogicalParent = null;
-                                       _contentContainer.SetChild (null);
-                               }
-                               _contentContainer.SetChild(value);
-                               if (value != null)
-                                       value.LogicalParent = this;
-                       }
-               }
-               protected override void loadTemplate(GraphicObject template = null)
-               {
-                       base.loadTemplate (template);
-
-                       titleWidget = this.child.FindByName ("TabTitle");
-               }
-               internal GraphicObject TabTitle { get { return titleWidget; }}
-               #endregion
-
-               /// <summary>
-               /// order of redrawing, items can't be reordered in TemplatedGroup due to data linked, so we need another index
-               /// instead of children list order
-               /// </summary>
-               public int viewIndex = 0;
-               public virtual int ViewIndex {
-                       get { return viewIndex; }
-                       set {
-                               if (viewIndex == value)
-                                       return;
-                               viewIndex = value;
-                               NotifyValueChanged ("ViewIndex", viewIndex);
-                       }
-               }
-                       
-               [DefaultValue(0)]
-               public int TabOffset {
-                       get { return tabOffset; }
-                       set {
-                               if (tabOffset == value)
-                                       return;
-                               tabOffset = value;
-                               NotifyValueChanged ("TabOffset", tabOffset);
-
-                               RegisterForLayouting (LayoutingType.X);
-                               RegisterForGraphicUpdate ();
-                       }
-               }
-               public Measure TabHeight {
-                       get { return tview == null ? Measure.Fit : tview.TabHeight; }
-               }
-               public Measure TabWidth {
-                       get { return tview == null ? Measure.Fit : tview.TabWidth; }
-               }
-               [DefaultValue(false)]
-               public virtual bool IsSelected {
-                       get { return isSelected; }
-                       set {
-                               if (isSelected == value)
-                                       return;
-
-                               if (tview != null)
-                                       tview.SelectedTab = tview.Children.IndexOf(this);
-                               
-                               isSelected = value;
-                               NotifyValueChanged ("IsSelected", isSelected);
-                               RegisterForRedraw ();
-                       }
-               }
-
-               /// <summary>
-               /// background fill of the control, maybe solid color, gradient, image, or svg
-               /// </summary>
-               [DesignCategory ("Appearance")][DefaultValue("DimGrey")]
-               public virtual Fill SelectedBackground {
-                       get { return selectedBackground; }
-                       set {
-                               if (selectedBackground == value)
-                                       return;                         
-                               if (value == null)
-                                       return;
-                               selectedBackground = value;
-                               NotifyValueChanged ("SelectedBackground", selectedBackground);
-                               RegisterForRedraw ();
-                       }
-               }
-               protected override void onDraw (Context gr)
-               {
-                       gr.Save ();
-
-                       TabView tv = Parent as TabView;
-
-                       Rectangle r = TabTitle.Slot;
-                       r.Width = TabWidth;
-
-                       gr.MoveTo (0.5, r.Bottom-0.5);
-                       gr.LineTo (r.Left - tv.LeftSlope, r.Bottom-0.5);
-                       gr.CurveTo (
-                               r.Left - tv.LeftSlope / 2, r.Bottom-0.5,
-                               r.Left - tv.LeftSlope / 2, 0.5,
-                               r.Left, 0.5);
-                       gr.LineTo (r.Right, 0.5);
-                       gr.CurveTo (
-                               r.Right + tv.RightSlope / 2, 0.5,
-                               r.Right + tv.RightSlope / 2, r.Bottom-0.5,
-                               r.Right + tv.RightSlope, r.Bottom-0.5);
-                       gr.LineTo (Slot.Width-0.5, r.Bottom-0.5);
-
-
-                       gr.LineTo (Slot.Width-0.5, Slot.Height-0.5);
-                       gr.LineTo (0.5, Slot.Height-0.5);
-                       gr.ClosePath ();
-                       gr.LineWidth = 1;
-                       Foreground.SetAsSource (gr);
-                       gr.StrokePreserve ();
-                       gr.ClipPreserve ();
-
-                       if (IsSelected)
-                               SelectedBackground.SetAsSource (gr, ClientRectangle);
-                       else
-                               Background.SetAsSource (gr, ClientRectangle);
-
-                       gr.Fill ();
-
-                       base.onDraw (gr);
-
-                       gr.Restore ();
-               }
-
-               Point dragStartPoint;
-               int dragThreshold = 16;
-               int dis = 128;
-               internal TabView savedParent = null;
-
-
-               void makeFloating (TabView tv) {                        
-                       lock (IFace.UpdateMutex) {                              
-                               ImageSurface di = new ImageSurface (Format.Argb32, dis, dis);
-                               IFace.DragImageHeight = dis;
-                               IFace.DragImageWidth = dis;
-                               using (Context ctx = new Context (di)) {
-                                       double div = Math.Max (LastPaintedSlot.Width, LastPaintedSlot.Height);
-                                       double s = (double)dis / div;
-                                       ctx.Scale (s, s);
-                                       if (bmp == null)
-                                               this.onDraw (ctx);
-                                       else {
-                                               if (LastPaintedSlot.Width>LastPaintedSlot.Height)
-                                                       ctx.SetSourceSurface (bmp, 0, (LastPaintedSlot.Width-LastPaintedSlot.Height)/2);
-                                               else
-                                                       ctx.SetSourceSurface (bmp, (LastPaintedSlot.Height-LastPaintedSlot.Width)/2, 0);
-
-                                               ctx.Paint ();
-                                       }
-                               }
-                               IFace.DragImage = di;
-                       }
-                       tv.RemoveChild (this);
-                       savedParent = tv;
-               }
-
-               public override ILayoutable Parent {
-                       get {
-                               return base.Parent;
-                       }
-                       set {
-                               base.Parent = value;
-                               if (value != null) {
-                                       dragStartPoint = IFace.Mouse.Position;
-                                       savedParent = value as TabView;
-                               }
-                       }
-               }
-               protected override void onStartDrag (object sender, DragDropEventArgs e)
-               {
-                       base.onStartDrag (sender, e);
-
-                       dragStartPoint = IFace.Mouse.Position;
-               }
-               protected override void onEndDrag (object sender, DragDropEventArgs e)
-               {
-                       base.onEndDrag (sender, e);
-
-                       if (Parent != null)
-                               return;
-
-                       savedParent.AddChild (this);
-
-                       IFace.ClearDragImage ();
-               }
-               protected override void onDrop (object sender, DragDropEventArgs e)
-               {
-                       base.onDrop (sender, e);
-                       if (Parent != null)
-                               return;
-                       TabView tv = e.DropTarget as TabView;
-                       if (tv == null)
-                               return;
-
-                       IFace.ClearDragImage ();
-
-                       tv.AddChild (this);
-               }
-               #region Mouse Handling
-               public override bool PointIsIn (ref Point m)
-               {
-                       if (!base.PointIsIn (ref m))
-                               return false;
-                       if (tview == null)//double check this, just added to prevent exception
-                               return false;
-                       if (m.Y < tview.TabHeight)
-                               return TabTitle.Slot.ContainsOrIsEqual (m);
-                       else
-                               return this.isSelected;
-               }
-               public override void onMouseUp (object sender, MouseButtonEventArgs e)
-               {
-                       base.onMouseUp (sender, e);
-                       tview?.UpdateLayout (LayoutingType.ArrangeChildren);
-               }
-               public override void onMouseMove (object sender, MouseMoveEventArgs e)
-               {
-                       base.onMouseMove (sender, e);
-
-                       if (Parent == null)
-                               return;
-                       
-                       if (!IsDragged)
-                               return;
-
-                       TabView tv = Parent as TabView;
-                       if (Math.Abs (e.Position.Y - dragStartPoint.Y) > dragThreshold ||
-                               Math.Abs (e.Position.X - dragStartPoint.X) > dragThreshold) {
-                               makeFloating (tv);
-                               return;
-                       }
-
-                       Rectangle cb = ClientRectangle;
-
-                       int tmp = TabOffset + e.XDelta;
-                       if (tmp < tview.LeftSlope) {                            
-                               TabOffset = tview.LeftSlope;
-                       } else if (tmp > cb.Width - tv.RightSlope - tv.TabWidth) {
-                               TabOffset = cb.Width - tv.RightSlope - tv.TabWidth;
-                       }else{
-                               dragStartPoint.X = e.Position.X;
-                               TabItem[] tabItms = tv.Children.Cast<TabItem>().OrderBy (t=>t.ViewIndex).ToArray();
-                               if (ViewIndex > 0 && e.XDelta < 0) {
-                                       TabItem previous = tabItms [ViewIndex - 1];
-                                       if (tmp < previous.TabOffset + tview.TabWidth / 2) {
-                                               previous.ViewIndex = ViewIndex;
-                                               ViewIndex--;
-                                               tv.UpdateLayout (LayoutingType.ArrangeChildren);
-                                       }
-
-                               }else if (ViewIndex < tabItms.Length - 1 && e.XDelta > 0) {
-                                       TabItem next = tabItms [ViewIndex + 1];
-                                       if (tmp > next.TabOffset - tview.TabWidth / 2){
-                                               next.ViewIndex = ViewIndex;
-                                               ViewIndex++;
-                                               tv.UpdateLayout (LayoutingType.ArrangeChildren);
-                                       }
-                               }
-                               TabOffset = tmp;
-                       }
-               }
-               public void butCloseTabClick (object sender, MouseButtonEventArgs e){                   
-                       QueryClose.Raise (this, null);
-                       //if tab is used as a templated item root in a templatedGroup, local datasource
-                       //is not null, in this case, removing the data entries will delete automatically the item
-                       if (localDataSourceIsNull)
-                               (Parent as TabView)?.DeleteChild (this);
-               }
-               #endregion
-
-       }
-}
-
diff --git a/src/GraphicObjects/TabView.cs b/src/GraphicObjects/TabView.cs
deleted file mode 100644 (file)
index 304e820..0000000
+++ /dev/null
@@ -1,337 +0,0 @@
-//
-// TabView.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-using System.Xml.Serialization;
-using System.ComponentModel;
-using Cairo;
-using System.Diagnostics;
-using System.Linq;
-
-namespace Crow
-{      
-       public class TabView : Group
-       {
-               #region CTOR
-               public TabView() : base(){}
-               public TabView (Interface iface) : base(iface){}
-               #endregion
-
-               #region Private fields
-               int adjustedTab = -1;
-               int leftSlope;
-               int rightSlope;
-               Measure tabHeight, tabWidth;
-               Orientation _orientation;
-               int selectedTab;
-               #endregion
-
-               #region public properties
-               [DefaultValue(Orientation.Horizontal)]
-               public virtual Orientation Orientation
-               {
-                       get { return _orientation; }
-                       set {
-                               if (_orientation == value)
-                                       return;
-                               _orientation = value;
-                               NotifyValueChanged ("Orientation", _orientation);
-                               if (_orientation == Orientation.Horizontal)
-                                       NotifyValueChanged ("TabOrientation", Orientation.Vertical);
-                               else
-                                       NotifyValueChanged ("TabOrientation", Orientation.Horizontal);                          
-                               this.RegisterForLayouting (LayoutingType.ArrangeChildren);
-                       }
-               }
-               [DefaultValue(16)]
-               public int LeftSlope
-               {
-                       get { return leftSlope; }
-                       set {
-                               if (leftSlope == value)
-                                       return;
-                               leftSlope = value;
-                               NotifyValueChanged ("leftSlope", leftSlope);
-                               tabSizeHasChanged = true;
-                               //RegisterForLayouting (LayoutingType.ArrangeChildren);
-                       }
-               }
-               bool tabSizeHasChanged = false;
-               [DefaultValue(16)]
-               public int RightSlope
-               {
-                       get { return rightSlope; }
-                       set {
-                               if (rightSlope == value)
-                                       return;
-                               rightSlope = value;
-                               NotifyValueChanged ("RightSlope", rightSlope);
-                               tabSizeHasChanged = true;
-                               //RegisterForLayouting (LayoutingType.ArrangeChildren);
-                       }
-               }
-               [DefaultValue("18")]
-               public Measure TabHeight {
-                       get { return tabHeight; }
-                       set {
-                               if (tabHeight == value)
-                                       return;
-                               tabHeight = value;
-                               NotifyValueChanged ("TabHeight", tabHeight);
-//                             childrenRWLock.EnterReadLock ();
-//                             foreach (GraphicObject ti in Children) {
-//                                     ti.NotifyValueChanged ("TabHeight", tabHeight);
-//                             }
-//                             childrenRWLock.ExitReadLock ();
-                               RegisterForLayouting (LayoutingType.ArrangeChildren);
-                       }
-               }
-               [DefaultValue("120")]
-               public Measure TabWidth {
-                       get { return adjustedTab > 0 ? (Measure)adjustedTab : tabWidth; }
-                       set {
-                               if (tabWidth == value)
-                                       return;
-                               tabWidth = value;
-                               NotifyValueChanged ("TabWidth", TabWidth);
-//
-//                             childrenRWLock.EnterReadLock ();
-//                             foreach (GraphicObject ti in Children) { 
-//                                     ti.NotifyValueChanged ("TabWidth", tabWidth);
-//                             }
-//                             childrenRWLock.ExitReadLock ();
-                               RegisterForLayouting (LayoutingType.ArrangeChildren);
-                       }
-               }
-
-               public virtual int SelectedTab {
-                       get { return selectedTab; }
-                       set {
-                               if (value == selectedTab)
-                                       return;
-
-                               if (selectedTab < Children.Count && selectedTab >= 0)
-                                       (Children [selectedTab] as TabItem).IsSelected = false;
-
-                               selectedTab = value;
-
-                               if (selectedTab < Children.Count && selectedTab >= 0)
-                                       (Children [selectedTab] as TabItem).IsSelected = true;
-
-                               NotifyValueChanged ("SelectedTab", selectedTab);
-                               RegisterForRedraw ();
-                       }
-               }
-               #endregion
-
-               public override void AddChild (GraphicObject child)
-               {
-                       TabItem ti = child as TabItem;
-                       if (ti == null)
-                               throw new Exception ("TabView control accept only TabItem as child.");
-
-                       ti.MouseDown += Ti_MouseDown;
-                       ti.TabTitle.LayoutChanged += Ti_TabTitle_LayoutChanged;
-                       ti.tview = this;
-
-                       base.AddChild (child);
-
-                       SelectedTab = ti.ViewIndex = Children.Count - 1;
-                       this.RegisterForLayouting (LayoutingType.ArrangeChildren);
-               }
-               public override void RemoveChild (GraphicObject child)
-               {
-                       TabItem ti = child as TabItem;
-                       if (ti == null)
-                               throw new Exception ("TabView control accept only TabItem as child.");
-
-                       ti.MouseDown -= Ti_MouseDown;
-                       ti.TabTitle.LayoutChanged -= Ti_TabTitle_LayoutChanged;
-                       ti.tview = null;
-
-                       childrenRWLock.EnterReadLock ();
-
-                       TabItem[] tabItms = Children.Cast<TabItem>().OrderBy (t=>t.ViewIndex).ToArray();
-                       int selTabViewIdx = -1;
-
-                       if (SelectedTab < tabItms.Length && SelectedTab >= 0)
-                               selTabViewIdx = (Children [SelectedTab] as TabItem).ViewIndex;
-
-                       for (int i = selTabViewIdx+1; i < tabItms.Length; i++)
-                               tabItms [i].ViewIndex--;
-
-                       if (selTabViewIdx > tabItms.Length - 2)
-                               selTabViewIdx = tabItms.Length - 2;
-
-                       if (selTabViewIdx < 0)
-                               SelectedTab = -1;
-                       else
-                               SelectedTab = Children.IndexOf (tabItms [selTabViewIdx]);
-
-                       childrenRWLock.ExitReadLock ();
-
-                       base.RemoveChild (child);
-               }
-
-               public override bool ArrangeChildren { get { return true; } }
-               public override bool UpdateLayout (LayoutingType layoutType)
-               {
-                       RegisteredLayoutings &= (~layoutType);
-
-                       if (layoutType == LayoutingType.ArrangeChildren && Children.Count > 0) {
-                               Rectangle cb = ClientRectangle;
-
-                               int tabSpace = tabWidth + leftSlope;
-                               int tc = Children.Count (c => c.Visible == true);
-
-                               if (tc > 0)
-                                       tabSpace = Math.Min(tabSpace, (cb.Width-rightSlope) / tc);
-
-                               if (tabSpace < tabWidth + leftSlope)
-                                       adjustedTab = tabSpace - leftSlope;
-                               else
-                                       adjustedTab = -1;
-
-                               //Console.WriteLine ("tabspace: {0} tw:{1}", tabSpace, tabWidth);
-
-                               childrenRWLock.EnterReadLock();
-                               TabItem[] tabItms = Children.Cast<TabItem>().OrderBy (t=>t.ViewIndex).ToArray();
-                               childrenRWLock.ExitReadLock();
-                               int curOffset = leftSlope;
-
-                               for (int i = 0; i < tabItms.Length; i++) {
-                                       if (!tabItms [i].Visible)
-                                               continue;
-                                       tabItms [i].NotifyValueChanged ("TabHeight", tabHeight);
-                                       tabItms [i].NotifyValueChanged ("TabWidth", TabWidth);
-                                       if (!tabItms [i].IsDragged) {
-                                               tabItms [i].TabOffset = curOffset;
-                                               //Console.WriteLine ("offset: {0}=>{1}", tabItms [i].Name, tabItms [i].TabOffset);
-                                       }
-                                       if (Orientation == Orientation.Horizontal) {
-                                               curOffset += tabSpace;
-                                       } else
-                                               curOffset += tabSpace;                                  
-                               }
-
-                               //if no layouting remains in queue for item, registre for redraw
-                               if (RegisteredLayoutings == LayoutingType.None && IsDirty)
-                                       IFace.EnqueueForRepaint (this);
-
-                               return true;
-                       }
-
-                       return base.UpdateLayout(layoutType);
-               }
-               public override void OnLayoutChanges (LayoutingType layoutType)
-               {
-                       if (_orientation == Orientation.Horizontal) {
-                               if (layoutType == LayoutingType.Width)
-                                       RegisterForLayouting (LayoutingType.ArrangeChildren);                           
-                       } else if (layoutType == LayoutingType.Height)
-                               RegisterForLayouting (LayoutingType.ArrangeChildren);                   
-                       
-                       base.OnLayoutChanges (layoutType);
-               }
-
-               protected override void onDraw (Context gr)
-               {
-                       Rectangle rBack = new Rectangle (Slot.Size);
-
-                       Background.SetAsSource (gr, rBack);
-                       CairoHelpers.CairoRectangle(gr,rBack, CornerRadius);
-                       gr.Fill ();
-
-                       gr.Save ();
-
-                       if (ClipToClientRect) {
-                               //clip to client zone
-                               CairoHelpers.CairoRectangle (gr, ClientRectangle, CornerRadius);
-                               gr.Clip ();
-                       }
-
-                       childrenRWLock.EnterReadLock ();
-
-                       TabItem[] tabItms = Children.Where(tt=>tt.Visible).Cast<TabItem> ().
-                               OrderBy (t => t.ViewIndex).ToArray ();
-
-                       int selTabViewIdx = -1;
-                       if (SelectedTab < tabItms.Length && SelectedTab >= 0)
-                               selTabViewIdx = (Children [SelectedTab] as TabItem).ViewIndex;
-
-                       childrenRWLock.ExitReadLock ();
-
-                       int i = 0;
-                       while (i < selTabViewIdx) {
-                               tabItms [i].Paint (ref gr);
-                               i++;
-                       }
-                       i = tabItms.Length - 1;
-                       while (i > selTabViewIdx) {
-                               tabItms [i].Paint (ref gr);
-                               i--;
-                       }
-
-                       if (selTabViewIdx >= 0)
-                               tabItms [selTabViewIdx].Paint (ref gr);
-               
-                       gr.Restore ();
-               }
-
-               protected override void onDragEnter (object sender, DragDropEventArgs e)
-               {
-                       base.onDragEnter (sender, e);
-
-                       TabItem ti = e.DragSource as TabItem;
-                       if (ti == null)
-                               return;
-                       if (ti.Parent != null || ti.savedParent == this)
-                               return;
-
-                       this.AddChild (ti);
-
-                       Point p = ScreenPointToLocal (IFace.Mouse.Position) - Margin;
-
-                       p.X = Math.Max (leftSlope, p.X);
-                       p.X = Math.Min (ClientRectangle.Width - rightSlope - TabWidth, p.X);
-                       ti.TabOffset = p.X;
-
-                       IFace.ClearDragImage ();
-
-               }
-
-               void Ti_TabTitle_LayoutChanged (object sender, LayoutingEventArgs e)
-               {
-                       if (e.LayoutType == LayoutingType.X)                            
-                               RegisterForLayouting (LayoutingType.ArrangeChildren);                   
-               }
-               void Ti_MouseDown (object sender, MouseButtonEventArgs e)
-               {
-                       SelectedTab = Children.IndexOf (sender as GraphicObject);
-               }
-       }
-}
-
diff --git a/src/GraphicObjects/TemplatedContainer.cs b/src/GraphicObjects/TemplatedContainer.cs
deleted file mode 100644 (file)
index a779595..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-//
-// TemplatedContainer.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-using System.Xml.Serialization;
-using System.Xml;
-using System.Reflection;
-
-namespace Crow
-{
-       /// <summary>
-       /// base class for new containers that will use templates.
-       /// 
-       /// TemplatedControl's **must** provide a widget of the [`Container`](Container) class named **_'Content'_** inside their template tree
-       /// </summary>
-       public class TemplatedContainer : TemplatedControl
-       {
-               #if DESIGN_MODE
-               public override void getIML (System.Xml.XmlDocument doc, System.Xml.XmlNode parentElem)
-               {
-                       if (this.design_isTGItem)
-                               return;
-                       base.getIML (doc, parentElem);
-                       if (!HasContent)
-                               return;
-                       Content.getIML (doc, parentElem.LastChild);
-               }
-               #endif
-
-               #region CTOR
-               protected TemplatedContainer() : base(){}
-               public TemplatedContainer (Interface iface) : base(iface){}
-               #endregion
-
-               protected Container _contentContainer;
-
-               /// <summary>
-               /// Single child of this templated container.
-               /// </summary>
-               public virtual GraphicObject Content {
-                       get {
-                               return _contentContainer == null ? null : _contentContainer.Child;
-                       }
-                       set {
-                               _contentContainer.SetChild(value);
-                               NotifyValueChanged ("HasContent", HasContent);
-                       }
-               }
-               [XmlIgnore]public bool HasContent {
-                       get { return _contentContainer?.Child != null; }
-               }
-               //TODO: move loadTemplate and ResolveBinding in TemplatedContainer
-               protected override void loadTemplate(GraphicObject template = null)
-               {
-                       base.loadTemplate (template);
-                       _contentContainer = this.child.FindByName ("Content") as Container;
-               }
-
-               #region GraphicObject overrides
-               public override GraphicObject FindByName (string nameToFind)
-               {
-                       if (Name == nameToFind)
-                               return this;
-
-                       return Content == null ? null : Content.FindByName (nameToFind);
-               }
-               public override bool Contains (GraphicObject goToFind)
-               {
-                       if (Content == goToFind)
-                               return true;
-                       if (Content?.Contains (goToFind) == true)
-                               return true;
-                       return base.Contains (goToFind);
-               }
-               #endregion
-       }
-}
-
diff --git a/src/GraphicObjects/TemplatedControl.cs b/src/GraphicObjects/TemplatedControl.cs
deleted file mode 100644 (file)
index a1a11b2..0000000
+++ /dev/null
@@ -1,158 +0,0 @@
-//
-// TemplatedControl.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-using System.Xml.Serialization;
-using System.ComponentModel;
-using System.IO;
-using System.Xml;
-using System.Diagnostics;
-using System.Linq;
-using System.Collections.Generic;
-using System.Text;
-using System.Reflection;
-using Cairo;
-
-namespace Crow
-{
-       /// <summary>
-       /// Base class for all templated widget
-       /// </summary>
-       public abstract class TemplatedControl : PrivateContainer
-       {
-               #if DESIGN_MODE
-               public bool design_inlineTemplate = false;
-               public override void getIML (System.Xml.XmlDocument doc, System.Xml.XmlNode parentElem)
-               {
-                       if (this.design_isTGItem)
-                               return;
-                       base.getIML (doc, parentElem);
-                       if (child == null || !design_inlineTemplate)
-                               return;
-                       XmlElement xe = doc.CreateElement("Template");
-                       child.getIML (doc, xe);
-                       parentElem.LastChild.AppendChild (xe);
-               }
-               #endif
-               #region CTOR
-               protected TemplatedControl() : base(){}
-               public TemplatedControl (Interface iface) : base(iface){}
-               #endregion
-
-               string _template;
-               string caption;
-
-               /// <summary>
-               /// Template path
-               /// </summary>
-               //TODO: this property should be renamed 'TemplatePath'
-               [DefaultValue(null)]
-               public string Template {
-                       get { return _template; }
-                       set {
-                               if (Template == value)
-                                       return;
-                               _template = value;
-
-                               if (string.IsNullOrEmpty(_template))
-                                       loadTemplate ();
-                               else
-                                       loadTemplate (IFace.Load (_template));
-                       }
-               }
-               /// <summary>
-               /// a caption being recurrent need in templated widget, it is declared here.
-               /// </summary>
-               [DefaultValue("Templated Control")]
-               public virtual string Caption {
-                       get { return caption; }
-                       set {
-                               if (caption == value)
-                                       return;
-                               caption = value;
-                               NotifyValueChanged ("Caption", caption);
-                       }
-               }
-
-               #region GraphicObject overrides
-
-               public override void Initialize ()
-               {
-                       loadTemplate ();
-                       base.Initialize ();
-               }
-               /// <summary>
-               /// override search method from GraphicObject to prevent
-               /// searching inside template
-               /// </summary>
-               /// <returns>widget identified by name, or null if not found</returns>
-               /// <param name="nameToFind">widget's name to find</param>
-               public override GraphicObject FindByName (string nameToFind)
-               {
-                       //prevent name searching in template
-                       return nameToFind == this.Name ? this : null;
-               }
-               /// <summary>
-               ///onDraw is overrided to prevent default drawing of background, template top container
-               ///may have a binding to root background or a fixed one.
-               ///this allow applying root background to random template's component
-               /// </summary>
-               /// <param name="gr">Backend context</param>
-               protected override void onDraw (Context gr)
-               {
-                       gr.Save ();
-
-                       if (ClipToClientRect) {
-                               //clip to client zone
-                               CairoHelpers.CairoRectangle (gr, ClientRectangle, CornerRadius);
-                               gr.Clip ();
-                       }
-
-                       if (child != null)
-                               child.Paint (ref gr);
-                       gr.Restore ();
-               }
-               #endregion
-
-               /// <summary>
-               /// Loads the template.
-               /// </summary>
-               /// <param name="template">Optional template instance</param>
-               protected virtual void loadTemplate(GraphicObject template = null)
-               {
-                       if (this.child != null)//template change, bindings has to be reset
-                               this.ClearTemplateBinding();
-                       
-                       if (template == null) {
-                               if (!IFace.DefaultTemplates.ContainsKey (this.GetType ().FullName))
-                                       throw new Exception (string.Format ("No default template found for '{0}'", this.GetType ().FullName));
-                               this.SetChild (IFace.Load (IFace.DefaultTemplates[this.GetType ().FullName]));
-                       }else
-                               this.SetChild (template);
-               }
-       }
-}
-
diff --git a/src/GraphicObjects/TemplatedGroup.cs b/src/GraphicObjects/TemplatedGroup.cs
deleted file mode 100644 (file)
index dd9afb6..0000000
+++ /dev/null
@@ -1,514 +0,0 @@
-//
-// TemplatedGroup.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-using System.Xml.Serialization;
-using System.Xml;
-using System.Reflection;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Collections;
-using System.Threading;
-using System.Linq;
-using Crow.IML;
-using System.Diagnostics;
-
-namespace Crow
-{
-       public abstract class TemplatedGroup : TemplatedControl
-       {
-               #if DESIGN_MODE
-               public override void getIML (System.Xml.XmlDocument doc, System.Xml.XmlNode parentElem)
-               {
-                       if (this.design_isTGItem)
-                               return;
-                       base.getIML (doc, parentElem);
-
-                       if (string.IsNullOrEmpty(_itemTemplate)) {
-                               foreach (ItemTemplate it in ItemTemplates.Values) 
-                                       it.getIML (doc, parentElem.LastChild);                          
-                       }
-
-                       foreach (GraphicObject g in Items) {
-                               g.getIML (doc, parentElem.LastChild);   
-                       }
-               }
-               #endif
-
-               #region CTOR
-               protected TemplatedGroup() : base(){}
-               public TemplatedGroup (Interface iface) : base(iface){}
-               #endregion
-
-               protected Group items;
-               string _itemTemplate, dataTest;
-
-               #region events
-               public event EventHandler<SelectionChangeEventArgs> SelectedItemChanged;
-               public event EventHandler Loaded;
-               #endregion
-
-               IList data;
-               int _selectedIndex = -1;
-               Color selBackground, selForeground;
-
-               int itemPerPage = 50;
-               CrowThread loadingThread = null;
-
-               bool isPaged = false;
-
-               #region Templating
-               //TODO: dont instantiate ItemTemplates if not used
-               //but then i should test if null in msil gen
-               public Dictionary<string, ItemTemplate> ItemTemplates = new Dictionary<string, Crow.ItemTemplate>();
-
-               /// <summary>
-               /// Keep track of expanded subnodes and closed time to unload
-               /// </summary>
-               //Dictionary<GraphicObject, Stopwatch> nodes = new Dictionary<GraphicObject, Stopwatch>();
-               internal List<GraphicObject> nodes = new List<GraphicObject>();
-               /// <summary>
-               /// Item templates file path, on disk or embedded.
-               /// 
-               /// ItemTemplate file may contains either a single template without the
-               /// ItemTemplate enclosing tag, or several item templates each enclosed
-               /// in a separate tag.
-               /// </summary>
-               
-               public string ItemTemplate {
-                       get { return _itemTemplate; }
-                       set {
-                               if (value == _itemTemplate)
-                                       return;
-
-                               _itemTemplate = value;
-
-                               //TODO:reload list with new template?
-                               NotifyValueChanged("ItemTemplate", _itemTemplate);
-                       }
-               }
-               protected override void loadTemplate(GraphicObject template = null)
-               {
-                       base.loadTemplate (template);
-
-                       items = this.child.FindByName ("ItemsContainer") as Group;
-                       if (items == null)
-                               throw new Exception ("TemplatedGroup template Must contain a Group named 'ItemsContainer'");
-                       if (items.Children.Count == 0)
-                               NotifyValueChanged ("HasChildren", false);
-                       else
-                               NotifyValueChanged ("HasChildren", true);
-               }
-               /// <summary>
-               /// Use to define condition on Data item for selecting among ItemTemplates.
-               /// Default value is 'TypeOf' for selecting Template depending on Type of Data.
-               /// Other possible values are properties of Data
-               /// </summary>
-               /// <value>The data property test.</value>
-               [DefaultValue("TypeOf")]
-               public string DataTest {
-                       get { return dataTest; }
-                       set {
-                               if (value == dataTest)
-                                       return;
-
-                               dataTest = value;
-
-                               NotifyValueChanged("DataTest", dataTest);
-                       }
-               }
-               #endregion
-
-               public virtual List<GraphicObject> Items{
-                       get {
-                               return isPaged ? items.Children.SelectMany(x => (x as Group).Children).ToList()
-                               : items.Children;
-                       }
-               }
-               [DefaultValue(-1)]public virtual int SelectedIndex{
-                       get { return _selectedIndex; }
-                       set {
-                               if (value == _selectedIndex)
-                                       return;
-
-                               /*if (_selectedIndex >= 0 && Items.Count > _selectedIndex) {
-                                       Items[_selectedIndex].Foreground = Color.Transparent;
-                                       Items[_selectedIndex].Background = Color.Transparent;
-                               }*/
-
-                               _selectedIndex = value;
-
-                               /*if (_selectedIndex >= 0 && Items.Count > _selectedIndex) {
-                                       Items[_selectedIndex].Foreground = SelectionForeground;
-                                       Items[_selectedIndex].Background = SelectionBackground;
-                               }*/
-
-                               NotifyValueChanged ("SelectedIndex", _selectedIndex);
-                               NotifyValueChanged ("SelectedItem", SelectedItem);
-                               SelectedItemChanged.Raise (this, new SelectionChangeEventArgs (SelectedItem));
-                       }
-               }
-               [XmlIgnore]public virtual object SelectedItem{
-                       get { return data == null ? null : _selectedIndex < 0 ? data.GetDefaultValue() : data[_selectedIndex]; }
-                       set {
-                               if (data == null) {
-                                       SelectedIndex = -1;
-                                       return;
-                               }
-                               //TODO:double check if value type will be notified to binding sys
-                               if (value == SelectedItem)
-                                       return;
-                               
-                               SelectedIndex = data.IndexOf (value);
-                       }
-               }
-               [XmlIgnore]public bool HasItems {
-                       get { return Items.Count > 0; }
-               }
-               public IList Data {
-                       get { return data; }
-                       set {
-                               if (value == data)
-                                       return;
-
-                               cancelLoadingThread ();
-
-                               if (data is IObservableList) {
-                                       IObservableList ol = data as IObservableList;
-                                       ol.ListAdd -= Ol_ListAdd;
-                                       ol.ListRemove -= Ol_ListRemove;
-                               }
-
-                               data = value;
-
-                               if (data is IObservableList) {
-                                       IObservableList ol = data as IObservableList;
-                                       ol.ListAdd += Ol_ListAdd;
-                                       ol.ListRemove += Ol_ListRemove;
-                               }
-
-                               NotifyValueChanged ("Data", data);
-
-                               //lock (CurrentInterface.LayoutMutex)
-                                       ClearItems ();
-
-                               if (data == null)
-                                       return;
-
-                               loadingThread = new CrowThread (this, loading);
-                               loadingThread.Finished += (object sender, EventArgs e) => (sender as TemplatedGroup).Loaded.Raise (sender, e);
-                               loadingThread.Start ();
-
-                               NotifyValueChanged ("SelectedIndex", _selectedIndex);
-                               NotifyValueChanged ("SelectedItem", SelectedItem);
-                               SelectedItemChanged.Raise (this, new SelectionChangeEventArgs (SelectedItem));
-                               NotifyValueChanged ("HasItems", HasItems);
-                       }
-               }
-
-               void Ol_ListRemove (object sender, ListChangedEventArg e)
-               {
-                       if (this.isPaged) {
-                               int p = e.Index / itemPerPage;
-                               int i = e.Index % itemPerPage;
-                               (items.Children [p] as Group).DeleteChild (i);
-                       } else
-                               items.DeleteChild (e.Index);
-               }
-
-               void Ol_ListAdd (object sender, ListChangedEventArg e)
-               {
-                       if (this.isPaged) {
-                               throw new NotImplementedException();
-//                             int p = e.Index / itemPerPage;
-//                             int i = e.Index % itemPerPage;
-//                             (items.Children [p] as Group).InsertChild (i, e.Element);
-                       } else
-                               loadItem (e.Element, items, dataTest);
-               }
-
-               [DefaultValue("SteelBlue")]
-               public virtual Color SelectionBackground {
-                       get { return selBackground; }
-                       set {
-                               if (value == selBackground)
-                                       return;
-                               selBackground = value;
-                               NotifyValueChanged ("SelectionBackground", selBackground);
-                               RegisterForRedraw ();
-                       }
-               }
-               [DefaultValue("White")]
-               public virtual Color SelectionForeground {
-                       get { return selForeground; }
-                       set {
-                               if (value == selForeground)
-                                       return;
-                               selForeground = value;
-                               NotifyValueChanged ("SelectionForeground", selForeground);
-                               RegisterForRedraw ();
-                       }
-               }
-
-               protected void raiseSelectedItemChanged(){
-                       SelectedItemChanged.Raise (this, new SelectionChangeEventArgs (SelectedItem));
-               }
-
-
-               public virtual void AddItem(GraphicObject g){
-                       items.AddChild (g);
-                       g.LogicalParent = this;
-                       NotifyValueChanged ("HasChildren", true);
-               }
-               public virtual void RemoveItem(GraphicObject g)
-               {
-                       g.LogicalParent = null;
-                       items.DeleteChild (g);
-                       if (items.Children.Count == 0)
-                               NotifyValueChanged ("HasChildren", false);
-               }
-
-               public virtual void ClearItems()
-               {
-                       _selectedIndex = -1;
-                       NotifyValueChanged ("SelectedIndex", _selectedIndex);
-                       NotifyValueChanged ("SelectedItem", null);
-
-                       items.ClearChildren ();
-                       NotifyValueChanged ("HasChildren", false);
-               }
-
-
-               #region GraphicObject overrides
-               public override GraphicObject FindByName (string nameToFind)
-               {
-                       if (Name == nameToFind)
-                               return this;
-
-                       foreach (GraphicObject w in Items) {
-                               GraphicObject r = w.FindByName (nameToFind);
-                               if (r != null)
-                                       return r;
-                       }
-                       return null;
-               }
-               public override bool Contains (GraphicObject goToFind)
-               {
-                       foreach (GraphicObject w in Items) {
-                               if (w == goToFind)
-                                       return true;
-                               if (w.Contains (goToFind))
-                                       return true;
-                       }
-                       return base.Contains(goToFind);
-               }
-//             public override void ClearBinding ()
-//             {
-//                     if (items != null)
-//                             items.ClearBinding ();
-//
-//                     base.ClearBinding ();
-//             }
-//             public override void ResolveBindings ()
-//             {
-//                     base.ResolveBindings ();
-//                     if (items != null)
-//                             items.ResolveBindings ();
-//             }
-               #endregion
-
-               /// <summary>
-               /// Items loading thread
-               /// </summary>
-               void loading(){
-                       loadPage (data, items, dataTest);
-               }
-//                     //if (!ItemTemplates.ContainsKey ("default"))
-//                     //      ItemTemplates ["default"] = Interface.GetItemTemplate (ItemTemplate);
-//
-//                     for (int i = 1; i <= (data.Count / itemPerPage) + 1; i++) {
-//                             if ((bool)loadingThread?.cancelRequested) {
-//                                     this.Dispose ();
-//                                     return;
-//                             }
-//                             loadPage (i);
-//                             Thread.Sleep (1);
-//                     }
-//             }
-               void cancelLoadingThread(){
-                       if (loadingThread != null)
-                               loadingThread.Cancel ();
-               }
-               void loadPage(IList _data, Group page, string _dataTest)
-               {
-                       #if DEBUG_LOAD
-                       Stopwatch loadingTime = new Stopwatch ();
-                       loadingTime.Start ();
-                       #endif
-
-
-//                     if (typeof(TabView).IsAssignableFrom (items.GetType ())||
-//                             typeof(Menu).IsAssignableFrom (this.GetType())||
-//                             typeof(Wrapper).IsAssignableFrom (items.GetType ())) {
-                               //page = items;
-                               itemPerPage = int.MaxValue;
-//                     } else if (typeof(GenericStack).IsAssignableFrom (items.GetType ())) {
-//                             GenericStack gs = new GenericStack (items.CurrentInterface);
-//                             gs.Orientation = (items as GenericStack).Orientation;
-//                             gs.Width = items.Width;
-//                             gs.Height = items.Height;
-//                             gs.VerticalAlignment = items.VerticalAlignment;
-//                             gs.HorizontalAlignment = items.HorizontalAlignment;
-//                             page = gs;
-//                             page.Name = "page" + pageNum;
-//                             isPaged = true;
-//                     } else {
-//                             page = Activator.CreateInstance (items.GetType ()) as Group;
-//                             page.CurrentInterface = items.CurrentInterface;
-//                             page.Initialize ();
-//                             page.Name = "page" + pageNum;
-//                             isPaged = true;
-//                     }
-
-                       for (int i = 0; i < _data.Count; i++) {                         
-                               loadItem (_data[i], page, _dataTest);
-                               if (loadingThread.cancelRequested)
-                                       break;
-                       }
-
-//                     if (page == items)
-//                             return;
-//                     lock (CurrentInterface.LayoutMutex)
-//                             items.AddChild (page);
-
-                       #if DEBUG_LOAD
-                       loadingTime.Stop ();
-                       Debug.WriteLine("Listbox {2} Loading: {0} ticks \t, {1} ms",
-                       loadingTime.ElapsedTicks,
-                       loadingTime.ElapsedMilliseconds, this.ToString());
-                       #endif
-               }
-               string getItempKey(Type dataType, object o, string propertyName){
-                       try {
-                               return dataType.GetProperty (propertyName).GetGetMethod ().Invoke (o, null)?.ToString();
-                       } catch  {
-                               return dataType.FullName;
-                       }
-               }
-               protected void loadItem(object o, Group page, string _dataTest){
-                       if (o == null)//TODO:surely a threading sync problem
-                               return;
-                       GraphicObject g = null;
-                       ItemTemplate iTemp = null;
-                       Type dataType = o.GetType ();
-                       string itempKey = dataType.FullName;
-
-                       if (_dataTest != "TypeOf")
-                               itempKey = getItempKey (dataType, o, _dataTest);
-
-                       if (ItemTemplates.ContainsKey (itempKey))
-                               iTemp = ItemTemplates [itempKey];
-                       else {
-                               foreach (string it in ItemTemplates.Keys) {
-                                       Type t = CompilerServices.tryGetType (it);
-                                       if (t == null)
-                                               continue;
-                                       if (t.IsAssignableFrom (dataType)) {//TODO:types could be cached
-                                               iTemp = ItemTemplates [it];
-                                               break;
-                                       }
-                               }
-                               if (iTemp == null)
-                                       iTemp = ItemTemplates ["default"];
-                       }
-
-                       lock (IFace.LayoutMutex) {
-                               g = iTemp.CreateInstance();
-                               #if DESIGN_MODE
-                               g.design_isTGItem = true;
-                               #endif
-                               page.AddChild (g);
-//                             if (isPaged)
-                               g.LogicalParent = this;
-                               g.MouseDown += itemClick;
-                       }
-
-                       if (iTemp.Expand != null && g is Expandable) {
-                               Expandable e = g as Expandable;
-                               e.Expand += iTemp.Expand;
-                               e.GetIsExpandable = iTemp.HasSubItems;
-                       }
-
-                       g.DataSource = o;
-               }
-//             protected void _list_LayoutChanged (object sender, LayoutingEventArgs e)
-//             {
-//                     #if DEBUG_LAYOUTING
-//                     Debug.WriteLine("list_LayoutChanged");
-//                     #endif
-//                     if (_gsList.Orientation == Orientation.Horizontal) {
-//                             if (e.LayoutType == LayoutingType.Width)
-//                                     _gsList.Width = approxSize;
-//                     } else if (e.LayoutType == LayoutingType.Height)
-//                             _gsList.Height = approxSize;
-//             }
-               int approxSize
-               {
-                       get {
-                               if (data == null)
-                                       return -1;
-                               GenericStack page1 = items.FindByName ("page1") as GenericStack;
-                               if (page1 == null)
-                                       return -1;
-
-                               return page1.Orientation == Orientation.Horizontal ?
-                                       data.Count < itemPerPage ?
-                                       -1:
-                                       (int)Math.Ceiling ((double)page1.Slot.Width / (double)itemPerPage * (double)(data.Count+1)):
-                                       data.Count < itemPerPage ?
-                                       -1:
-                                       (int)Math.Ceiling ((double)page1.Slot.Height / (double)itemPerPage * (double)(data.Count+1));
-                       }
-               }
-               internal virtual void itemClick(object sender, MouseButtonEventArgs e){
-                       SelectedIndex = data.IndexOf((sender as GraphicObject).DataSource);
-               }
-
-               bool emitHelperIsAlreadyExpanded (GraphicObject go){
-                       if (nodes.Contains (go))
-                               return true;
-                       nodes.Add (go);
-                       return false;
-               }
-
-               protected override void Dispose (bool disposing)
-               {
-                       if (disposing && loadingThread != null)
-                               loadingThread.Cancel ();
-                       base.Dispose (disposing);
-               }
-       }
-}
diff --git a/src/GraphicObjects/TestCairoPatch.cs b/src/GraphicObjects/TestCairoPatch.cs
deleted file mode 100644 (file)
index f155d3c..0000000
+++ /dev/null
@@ -1,148 +0,0 @@
-//
-// TestCairoPatch.cs
-//
-// Author:
-//       jp <>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-using System;
-using Cairo;
-
-namespace Crow
-{
-       public class TestCairoPatch : GraphicObject
-       {
-               void computeControlPoints (
-                       double xc, double yc,
-                       double x1, double y1,
-                       out double x2, out double y2,
-                       out double x3, out double y3,
-                       double x4, double y4){
-                       double ax = x1 - xc;
-                       double ay = y1 - yc;
-                       double bx = x4 - xc;
-                       double byy = y4 - yc;
-                       double q1 = ax * ax + ay * ay;
-                       double q2 = q1 + ax * bx + ay * byy;
-                       double k2 = 4.0/3.0 * (Math.Sqrt(2.0 * q1 * q2) - q2) / (ax * byy - ay * bx);
-
-
-                       x2 = xc + ax - k2 * ay;
-                       y2 = yc + ay + k2 * ax;
-                       x3 = xc + bx + k2 * byy;
-                       y3 = yc + byy - k2 * bx;
-               }
-               protected override void onDraw (Context gr)
-               {
-                       base.onDraw (gr);
-
-                       double radius = 100;
-
-                       double pi3 = Math.PI / 3.0;
-
-                       MeshPattern mp = new MeshPattern ();
-
-                       double x1 = radius,y1 = 0,
-                       x2 = 0, y2 = 0, x3 = 0, y3 = 0, x4 = 0, y4 = 0,
-                       xc = radius,yc = radius;
-
-                       double dx = Math.Sin (pi3) * radius;
-                       double dy = Math.Cos (pi3) * radius;
-
-                       mp.BeginPatch ();
-                       mp.MoveTo (xc, yc);
-                       mp.LineTo (x1, y1);
-                       x4 = xc + dx;
-                       y4 = yc - dy;
-                       computeControlPoints (xc, yc, x1, y1, out x2, out y2, out x3, out y3, x4, y4);
-                       mp.CurveTo (x2, y2, x3, y3, x4, y4);
-
-                       mp.SetCornerColorRGB (0, 1, 1, 1);
-                       mp.SetCornerColorRGB (1, 1, 0, 0);
-                       mp.SetCornerColorRGB (2, 1, 1, 0);
-
-                       x1 = x4;
-                       y1 = y4;
-                       y4 = yc + dy;
-
-                       computeControlPoints (xc, yc, x1, y1, out x2, out y2, out x3, out y3, x4, y4);
-                       mp.CurveTo (x2, y2, x3, y3, x4, y4);
-
-                       mp.SetCornerColorRGB (3, 0, 1, 0);
-                       mp.EndPatch ();
-
-                       x1 = x4;
-                       y1 = y4;
-                       x4 = xc;
-                       y4 = yc * 2.0;
-
-                       mp.BeginPatch ();
-                       mp.MoveTo (xc, yc);
-                       mp.LineTo (x1, y1);
-                       computeControlPoints (xc, yc, x1, y1, out x2, out y2, out x3, out y3, x4, y4);
-                       mp.CurveTo (x2, y2, x3, y3, x4, y4);
-
-                       mp.SetCornerColorRGB (0, 1, 1, 1);
-                       mp.SetCornerColorRGB (1, 0, 1, 0);
-                       mp.SetCornerColorRGB (2, 0, 1, 1);
-
-                       x1 = x4;
-                       y1 = y4;
-                       x4 = xc-dx;
-                       y4 = yc+dy;
-
-                       computeControlPoints (xc, yc, x1, y1, out x2, out y2, out x3, out y3, x4, y4);
-                       mp.CurveTo (x2, y2, x3, y3, x4, y4);
-
-                       mp.SetCornerColorRGB (3, 0, 0, 1);
-                       mp.EndPatch ();
-
-                       x1 = x4;
-                       y1 = y4;
-                       y4 = yc - dy;
-
-                       mp.BeginPatch ();
-                       mp.MoveTo (xc, yc);
-                       mp.LineTo (x1, y1);
-                       computeControlPoints (xc, yc, x1, y1, out x2, out y2, out x3, out y3, x4, y4);
-                       mp.CurveTo (x2, y2, x3, y3, x4, y4);
-
-                       mp.SetCornerColorRGB (0, 1, 1, 1);
-                       mp.SetCornerColorRGB (1, 0, 0, 1);
-                       mp.SetCornerColorRGB (2, 1, 0, 1);
-
-                       x1 = x4;
-                       y1 = y4;
-                       x4 = radius;
-                       y4 = 0;
-
-                       computeControlPoints (xc, yc, x1, y1, out x2, out y2, out x3, out y3, x4, y4);
-                       mp.CurveTo (x2, y2, x3, y3, x4, y4);
-
-                       mp.SetCornerColorRGB (3, 1, 0, 0);
-                       mp.EndPatch ();
-
-                       gr.SetSource (mp);
-                       gr.Paint ();
-               }
-       }
-}
-
diff --git a/src/GraphicObjects/TextBox.cs b/src/GraphicObjects/TextBox.cs
deleted file mode 100644 (file)
index 5da67e3..0000000
+++ /dev/null
@@ -1,228 +0,0 @@
-//
-// TextBox.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-using Cairo;
-using System.Diagnostics;
-using System.Xml.Serialization;
-
-namespace Crow
-{
-    public class TextBox : Label
-    {
-               #region CTOR
-               protected TextBox() : base(){}
-               public TextBox(Interface iface) : base(iface)
-               { }
-//             public TextBox(string _initialValue)
-//                     : base(_initialValue)
-//             {
-//
-//             }
-               #endregion
-
-               #region GraphicObject overrides
-               [XmlIgnore]public override bool HasFocus   //trigger update when lost focus to errase text beam
-        {
-            get
-            {
-                return base.HasFocus;
-            }
-            set
-            {
-                base.HasFocus = value;
-                RegisterForRedraw();
-            }
-        }
-
-               protected override void onDraw (Context gr)
-               {
-                       base.onDraw (gr);
-                       FontExtents fe = gr.FontExtents;
-               }
-               #endregion
-                       
-        #region Keyboard handling
-               public override void onKeyDown (object sender, KeyEventArgs e)
-               {
-                       base.onKeyDown (sender, e);
-
-                       Key key = e.Key;
-
-                       switch (key)
-                       {
-                       case Key.BackSpace:
-                               if (CurrentPosition == 0)
-                                       return;
-                               this.DeleteChar();
-                               break;
-                       case Key.Clear:
-                               break;
-                       case Key.Delete:
-                               if (selectionIsEmpty) {
-                                       if (!MoveRight ())
-                                               return;
-                               }else if (IFace.Keyboard.Shift)
-                                       IFace.Clipboard = this.SelectedText;
-                               this.DeleteChar ();
-                               break;
-                       case Key.KP_Enter:
-                       case Key.Return:
-                               if (!selectionIsEmpty)
-                                       this.DeleteChar ();
-                               if (Multiline)
-                                       this.InsertLineBreak ();
-                               else
-                                       OnTextChanged(this,new TextChangeEventArgs(Text));
-                               break;
-                       case Key.Escape:
-                               Text = "";
-                               CurrentColumn = 0;
-                               SelRelease = -1;
-                               break;
-                       case Key.Home:
-                               if (IFace.Keyboard.Shift) {
-                                       if (selectionIsEmpty)
-                                               SelBegin = new Point (CurrentColumn, CurrentLine);
-                                       if (IFace.Keyboard.Ctrl)
-                                               CurrentLine = 0;
-                                       CurrentColumn = 0;
-                                       SelRelease = new Point (CurrentColumn, CurrentLine);
-                                       break;
-                               }
-                               SelRelease = -1;
-                               if (IFace.Keyboard.Ctrl)
-                                       CurrentLine = 0;
-                               CurrentColumn = 0;
-                               break;
-                       case Key.End:
-                               if (IFace.Keyboard.Shift) {
-                                       if (selectionIsEmpty)
-                                               SelBegin = CurrentPosition;
-                                       if (IFace.Keyboard.Ctrl)
-                                               CurrentLine = int.MaxValue;
-                                       CurrentColumn = int.MaxValue;
-                                       SelRelease = CurrentPosition;
-                                       break;
-                               }
-                               SelRelease = -1;
-                               if (IFace.Keyboard.Ctrl)
-                                       CurrentLine = int.MaxValue;
-                               CurrentColumn = int.MaxValue;
-                               break;
-                       case Key.Insert:
-                               if (IFace.Keyboard.Shift)
-                                       this.Insert (IFace.Clipboard);
-                               else if (IFace.Keyboard.Ctrl && !selectionIsEmpty)
-                                       IFace.Clipboard = this.SelectedText;
-                               break;
-                       case Key.Left:
-                               if (IFace.Keyboard.Shift) {
-                                       if (selectionIsEmpty)
-                                               SelBegin = new Point(CurrentColumn, CurrentLine);
-                                       if (IFace.Keyboard.Ctrl)
-                                               GotoWordStart ();
-                                       else if (!MoveLeft ())
-                                               return;
-                                       SelRelease = CurrentPosition;
-                                       break;
-                               }
-                               SelRelease = -1;
-                               if (IFace.Keyboard.Ctrl)
-                                       GotoWordStart ();
-                               else
-                                       MoveLeft();
-                               break;
-                       case Key.Right:
-                               if (IFace.Keyboard.Shift) {
-                                       if (selectionIsEmpty)
-                                               SelBegin = CurrentPosition;
-                                       if (IFace.Keyboard.Ctrl)
-                                               GotoWordEnd ();
-                                       else if (!MoveRight ())
-                                               return;
-                                       SelRelease = CurrentPosition;
-                                       break;
-                               }
-                               SelRelease = -1;
-                               if (IFace.Keyboard.Ctrl)
-                                       GotoWordEnd ();
-                               else
-                                       MoveRight ();
-                               break;
-                       case Key.Up:
-                               if (IFace.Keyboard.Shift) {
-                                       if (selectionIsEmpty)
-                                               SelBegin = CurrentPosition;
-                                       CurrentLine--;
-                                       SelRelease = CurrentPosition;
-                                       break;
-                               }
-                               SelRelease = -1;
-                               CurrentLine--;
-                               break;
-                       case Key.Down:
-                               if (IFace.Keyboard.Shift) {
-                                       if (selectionIsEmpty)
-                                               SelBegin = CurrentPosition;
-                                       CurrentLine++;
-                                       SelRelease = CurrentPosition;
-                                       break;
-                               }
-                               SelRelease = -1;
-                               CurrentLine++;                          
-                               break;
-                       case Key.Menu:
-                               break;
-                       case Key.Num_Lock:
-                               break;
-                       case Key.Page_Down:                             
-                               break;
-                       case Key.Page_Up:
-                               break;
-                       case Key.Tab:
-                               this.Insert ("\t");
-                               break;
-                       default:
-                               break;
-                       }
-
-                       RegisterForGraphicUpdate();
-               }
-               public override void onKeyPress (object sender, KeyPressEventArgs e)
-               {
-                       base.onKeyPress (sender, e);
-
-                       this.Insert (e.KeyChar.ToString());
-
-                       SelRelease = -1;
-                       SelBegin = new Point(CurrentColumn, SelBegin.Y);
-
-                       RegisterForGraphicUpdate();
-               }
-        #endregion
-       } 
-}
diff --git a/src/GraphicObjects/TextRun.cs b/src/GraphicObjects/TextRun.cs
deleted file mode 100644 (file)
index 297ffe9..0000000
+++ /dev/null
@@ -1,309 +0,0 @@
-//
-// TextRun.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Diagnostics;
-using Cairo;
-using System.Text.RegularExpressions;
-using System.Xml.Serialization;
-using System.ComponentModel;
-
-namespace Crow
-{
-       [DesignIgnore]
-       public class TextRun : GraphicObject
-       {
-               #region CTOR
-               protected TextRun () : base(){}
-               public TextRun (Interface iface) : base (iface){}
-               #endregion
-
-               //TODO:change protected to private
-
-               #region private and protected fields
-               protected string _text = "label";
-               Alignment _textAlignment = Alignment.Left;
-               bool horizontalStretch = false;
-               bool verticalStretch = false;
-               bool _multiline;
-               bool wordWrap;
-               protected Rectangle rText;
-               protected float widthRatio = 1f;
-               protected float heightRatio = 1f;
-               protected FontExtents fe;
-               protected TextExtents te;
-               #endregion
-
-
-               
-               [DefaultValue (Alignment.Left)]
-               public Alignment TextAlignment {
-                       get { return _textAlignment; }
-                       set { _textAlignment = value; }
-               }
-               
-               [DefaultValue (false)]
-               public virtual bool HorizontalStretch {
-                       get { return horizontalStretch; }
-                       set {
-                               if (horizontalStretch == value)
-                                       return;
-                               horizontalStretch = value;
-                               RegisterForRedraw ();
-                               NotifyValueChanged ("HorizontalStretch", horizontalStretch);
-                       }
-               }
-               
-               [DefaultValue (false)]
-               public virtual bool VerticalStretch {
-                       get { return verticalStretch; }
-                       set {
-                               if (verticalStretch == value)
-                                       return;
-                               verticalStretch = value;
-                               RegisterForRedraw ();
-                               NotifyValueChanged ("VerticalStretch", verticalStretch);
-                       }
-               }
-               
-               [DefaultValue ("label")]
-               public string Text {
-                       get {
-                               return lines == null ?
-                                       _text : lines.Aggregate ((i, j) => i + Interface.LineBreak + j);
-                       }
-                       set {
-                               if (_text == value)
-                                       return;
-
-                               RegisterForGraphicUpdate ();
-
-                               _text = value;
-
-                               if (string.IsNullOrEmpty (_text))
-                                       _text = "";
-
-                               lines = getLines;
-                       }
-               }
-               
-               [DefaultValue (false)]
-               public bool Multiline {
-                       get { return _multiline; }
-                       set {
-                               _multiline = value;
-                               RegisterForGraphicUpdate ();
-                       }
-               }
-               
-               [DefaultValue (false)]
-               public bool WordWrap {
-                       get {
-                               return wordWrap;
-                       }
-                       set {
-                               if (wordWrap == value)
-                                       return;
-                               wordWrap = value;
-                               RegisterForGraphicUpdate ();
-                       }
-               }
-
-               List<string> lines;
-               List<string> getLines {
-                       get {
-                               return _multiline ?
-                                       Regex.Split (_text, "\r\n|\r|\n").ToList () :
-                                       new List<string> (new string [] { _text });
-                       }
-               }
-
-               #region GraphicObject overrides
-               protected override int measureRawSize (LayoutingType lt)
-               {
-                       if (lines == null)
-                               lines = getLines;
-
-                       using (ImageSurface img = new ImageSurface (Format.Argb32, 10, 10)) {
-                               using (Context gr = new Context (img)) {
-                                       //Cairo.FontFace cf = gr.GetContextFontFace ();
-
-                                       gr.SelectFontFace (Font.Name, Font.Slant, Font.Wheight);
-                                       gr.SetFontSize (Font.Size);
-
-
-                                       fe = gr.FontExtents;
-                                       te = new TextExtents ();
-
-                                       if (lt == LayoutingType.Height) {
-                                               int lc = lines.Count;
-                                               //ensure minimal height = text line height
-                                               if (lc == 0)
-                                                       lc = 1;
-
-                                               return (int)(fe.Height * lc) + Margin * 2;
-                                       }
-
-                                       foreach (string s in lines) {
-                                               string l = s.Replace("\t", new String (' ', Interface.TabSize));
-                                               TextExtents tmp = gr.TextExtents (l);
-                                               if (tmp.XAdvance > te.XAdvance)
-                                                       te = tmp;
-                                       }
-                                       return (int)Math.Ceiling (te.XAdvance) + Margin * 2;
-                               }
-                       }
-               }
-               protected override void onDraw (Context gr)
-               {
-                       base.onDraw (gr);
-
-                       gr.SelectFontFace (Font.Name, Font.Slant, Font.Wheight);
-                       gr.SetFontSize (Font.Size);
-                       gr.FontOptions = Interface.FontRenderingOptions;
-                       gr.Antialias = Interface.Antialias;
-
-                       rText = new Rectangle (new Size (
-                               measureRawSize (LayoutingType.Width), measureRawSize (LayoutingType.Height)));
-                       rText.Width -= 2 * Margin;
-                       rText.Height -= 2 * Margin;
-
-                       widthRatio = 1f;
-                       heightRatio = 1f;
-
-                       Rectangle cb = ClientRectangle;
-
-                       //ignore text alignment if size to content = true
-                       //or if text size is larger than client bounds
-                       if (Width < 0 || Height < 0 || rText.Width > cb.Width) {
-                               rText.X = cb.X;
-                               rText.Y = cb.Y;
-                       } else {
-                               if (horizontalStretch) {
-                                       widthRatio = (float)cb.Width / rText.Width;
-                                       if (!verticalStretch)
-                                               heightRatio = widthRatio;
-                               }
-                               if (verticalStretch) {
-                                       heightRatio = (float)cb.Height / rText.Height;
-                                       if (!horizontalStretch)
-                                               widthRatio = heightRatio;
-                               }
-
-                               rText.Width = (int)(widthRatio * cb.Width);
-                               rText.Height = (int)(heightRatio * cb.Height);
-
-                               switch (TextAlignment) {
-                               case Alignment.TopLeft:     //ok
-                                       rText.X = cb.X;
-                                       rText.Y = cb.Y;
-                                       break;
-                               case Alignment.Top:   //ok                                              
-                                       rText.Y = cb.Y;
-                                       rText.X = cb.X + cb.Width / 2 - rText.Width / 2;
-                                       break;
-                               case Alignment.TopRight:    //ok
-                                       rText.Y = cb.Y;
-                                       rText.X = cb.Right - rText.Width;
-                                       break;
-                               case Alignment.Left://ok
-                                       rText.X = cb.X;
-                                       rText.Y = cb.Y + cb.Height / 2 - rText.Height / 2;
-                                       break;
-                               case Alignment.Right://ok
-                                       rText.X = cb.X + cb.Width - rText.Width;
-                                       rText.Y = cb.Y + cb.Height / 2 - rText.Height / 2;
-                                       break;
-                               case Alignment.Bottom://ok
-                                       rText.X = cb.Width / 2 - rText.Width / 2;
-                                       rText.Y = cb.Height - rText.Height;
-                                       break;
-                               case Alignment.BottomLeft://ok
-                                       rText.X = cb.X;
-                                       rText.Y = cb.Bottom - rText.Height;
-                                       break;
-                               case Alignment.BottomRight://ok
-                                       rText.Y = cb.Bottom - rText.Height;
-                                       rText.X = cb.Right - rText.Width;
-                                       break;
-                               case Alignment.Center://ok
-                                       rText.X = cb.X + cb.Width / 2 - rText.Width / 2;
-                                       rText.Y = cb.Y + cb.Height / 2 - rText.Height / 2;
-                                       break;
-                               }
-                       }
-
-                       gr.FontMatrix = new Matrix (widthRatio * Font.Size, 0, 0, heightRatio * Font.Size, 0, 0);
-
-
-                       int curLineCount = 0;
-                       for (int i = 0; i < lines.Count; i++) {
-                               string l = lines [i].Replace ("\t", new String (' ', Interface.TabSize));
-                               List<string> wl = new List<string> ();
-                               int lineLength = (int)gr.TextExtents (l).XAdvance;
-
-                               if (wordWrap && lineLength > cb.Width) {
-                                       string tmpLine = "";
-                                       int curChar = 0;
-                                       while (curChar < l.Length) {
-                                               tmpLine += l [curChar];
-                                               if ((int)gr.TextExtents (tmpLine).XAdvance > cb.Width) {
-                                                       tmpLine = tmpLine.Remove (tmpLine.Length - 1);
-                                                       wl.Add (tmpLine);
-                                                       tmpLine = "";
-                                                       continue;
-                                               }
-                                               curChar++;
-                                       }
-                                       wl.Add (tmpLine);
-                               } else
-                                       wl.Add (l);
-
-                               foreach (string ll in wl) {
-                                       lineLength = (int)gr.TextExtents (ll).XAdvance;
-
-
-                                       if (string.IsNullOrWhiteSpace (ll)) {
-                                               curLineCount++;
-                                               continue;
-                                       }
-
-                                       Foreground.SetAsSource (gr);
-                                       gr.MoveTo (rText.X, rText.Y + fe.Ascent + fe.Height * curLineCount);
-
-                                       gr.ShowText (ll);
-                                       gr.Fill ();
-
-                                       curLineCount++;
-                               }
-                       }
-               }
-               #endregion
-       }
-}
diff --git a/src/GraphicObjects/TreeView.cs b/src/GraphicObjects/TreeView.cs
deleted file mode 100644 (file)
index 5a5e714..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
-//
-// TreeView.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-using System.Xml.Serialization;
-using System.Diagnostics;
-using System.ComponentModel;
-
-namespace Crow
-{
-       //treeview expect expandable child (or not)
-       //if their are expandable, some functions and events are added
-       public class TreeView : TemplatedGroup
-       {
-               GraphicObject selectedItemContainer = null;
-               bool isRoot;
-
-               #region CTOR
-               protected TreeView() : base(){}
-               public TreeView (Interface iface) : base(iface)
-               {
-               }
-               #endregion
-
-               [DefaultValue(false)]
-               public virtual bool IsRoot {
-                       get { return isRoot; }
-                       set {
-                               if (isRoot == value)
-                                       return;
-                               isRoot = value;
-                               NotifyValueChanged ("IsRoot", isRoot);
-                       }
-               }
-               [XmlIgnore]public override object SelectedItem {
-                       get {
-                               return selectedItemContainer == null ?
-                                       "" : selectedItemContainer.DataSource;
-                       }
-               }
-
-               internal override void itemClick (object sender, MouseButtonEventArgs e)
-               {
-                       GraphicObject tmp = sender as GraphicObject;
-                       if (!tmp.HasFocus)
-                               return;
-                       /*if (selectedItemContainer != null) {
-                               selectedItemContainer.Foreground = Color.Transparent;
-                               selectedItemContainer.Background = Color.Transparent;
-                       }*/
-                       selectedItemContainer = tmp;
-                       //selectedItemContainer.Foreground = SelectionForeground;
-                       //selectedItemContainer.Background = SelectionBackground;
-                       NotifyValueChanged ("SelectedItem", SelectedItem);
-                       raiseSelectedItemChanged ();
-               }
-
-               void onExpandAll_MouseClick (object sender, MouseButtonEventArgs e)
-               {
-                       ExpandAll ();
-               }
-
-               public void ExpandAll(){
-                       foreach (Group grp in items.Children) {
-                               foreach (GraphicObject go in grp.Children) {
-                                       Expandable exp = go as Expandable;
-                                       if (exp == null)
-                                               continue;
-                                       TreeView subTV = exp.FindByName ("List") as TreeView;
-                                       if (subTV == null)
-                                               continue;
-                                       EventHandler handler = null;
-                                       handler = delegate(object sender, EventArgs e) {
-                                               TreeView tv = sender as TreeView;
-                                               tv.Loaded -= handler;
-                                               tv.ExpandAll ();
-                                       };
-                                       subTV.Loaded += handler;
-                                       exp.IsExpanded = true;
-                               }
-                       }
-               }
-       }
-}
-
diff --git a/src/GraphicObjects/Trend.cs b/src/GraphicObjects/Trend.cs
deleted file mode 100644 (file)
index a2e0c83..0000000
+++ /dev/null
@@ -1,189 +0,0 @@
-//
-// Trend.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-using System.Collections.Generic;
-using System.Xml.Serialization;
-using System.ComponentModel;
-using Cairo;
-
-namespace Crow
-{
-       public class Trend : GraphicObject
-       {
-               #region private fields
-               double minValue, maxValue, lowThreshold, highThreshold;
-               Fill lowThresholdFill, highThresholdFill;
-               int nbValues;
-               List<double> values = new List<double>();
-               #endregion
-
-
-
-               public virtual void AddValue(double _value)
-               {
-                       values.Add (_value);
-                       while (values.Count > nbValues)
-                               values.RemoveAt (0);
-                       RegisterForRedraw ();
-               }
-               #region CTOR
-               protected Trend () : base()
-               {
-               }
-               #endregion
-               [XmlIgnore]public virtual int NewValue {
-                       set {
-                               AddValue (value);
-                       }
-               }
-               [DefaultValue(400)]
-               public virtual int NbValues {
-                       get { return nbValues; }
-                       set {
-                               if (nbValues == value)
-                                       return;
-
-                               nbValues = value;
-                               NotifyValueChanged ("NbValues", minValue);
-                               RegisterForRedraw ();
-                       }
-               }
-               [DefaultValue(0.0)]
-               public virtual double Minimum {
-                       get { return minValue; }
-                       set {
-                               if (minValue == value)
-                                       return;
-
-                               minValue = value;
-                               NotifyValueChanged ("Minimum", minValue);
-                               RegisterForRedraw ();
-                       }
-               }
-               [DefaultValue(100.0)]
-               public virtual double Maximum
-               {
-                       get { return maxValue; }
-                       set {
-                               if (maxValue == value)
-                                       return;
-
-                               maxValue = value;
-                               NotifyValueChanged ("Maximum", maxValue);
-                               RegisterForRedraw ();
-                       }
-               }
-               [DefaultValue(1.0)]
-               public virtual double LowThreshold {
-                       get { return lowThreshold; }
-                       set {
-                               if (lowThreshold == value)
-                                       return;
-                               lowThreshold = value;
-                               NotifyValueChanged ("LowThreshold", lowThreshold);
-                               RegisterForGraphicUpdate ();
-                       }
-               }
-               [DefaultValue(80.0)]
-               public virtual double HighThreshold {
-                       get { return highThreshold; }
-                       set {
-                               if (highThreshold == value)
-                                       return;
-                               highThreshold = value;
-                               NotifyValueChanged ("HighThreshold", highThreshold);
-                               RegisterForGraphicUpdate ();
-                       }
-               }
-               [DefaultValue("DarkRed")]
-               public virtual Fill LowThresholdFill {
-                       get { return lowThresholdFill; }
-                       set {
-                               if (lowThresholdFill == value)
-                                       return;
-                               lowThresholdFill = value;
-                               NotifyValueChanged ("LowThresholdFill", lowThresholdFill);
-                               RegisterForRedraw ();
-                       }
-               }
-               [DefaultValue("DarkGreen")]
-               public virtual Fill HighThresholdFill {
-                       get { return highThresholdFill; }
-                       set {
-                               if (highThresholdFill == value)
-                                       return;
-                               highThresholdFill = value;
-                               NotifyValueChanged ("HighThresholdFill", highThresholdFill);
-                               RegisterForRedraw ();
-                       }
-               }
-               protected override void onDraw (Context gr)
-               {
-                       base.onDraw (gr);
-
-                       if (values.Count == 0)
-                               return;
-                       Rectangle r = ClientRectangle;
-
-                       int i = values.Count -1;
-
-                       double ptrX = (double)r.Right;
-                       double scaleY = (double)r.Height / (Maximum - Minimum);
-                       double stepX = (double)r.Width / (double)(nbValues-1);
-
-                       gr.LineWidth = 1.0;
-                       gr.SetDash (new double[]{ 1.0 },0.0);
-
-
-
-                       LowThresholdFill.SetAsSource (gr);
-                       gr.MoveTo (r.Left, r.Bottom - LowThreshold * scaleY);
-                       gr.LineTo (r.Right, r.Bottom - LowThreshold * scaleY);
-//                     gr.Rectangle (r.Left, r.Bottom - LowThreshold * scaleY, r.Width, LowThreshold * scaleY);
-                       gr.Stroke();
-
-                       HighThresholdFill.SetAsSource (gr);
-                       gr.MoveTo (r.Left, (Maximum - HighThreshold) * scaleY);
-                       gr.LineTo (r.Right, (Maximum - HighThreshold) * scaleY);
-//                     gr.Rectangle (r.Left, r.Top, r.Width, (Maximum - HighThreshold) * scaleY);
-                       gr.Stroke();
-
-                       gr.MoveTo (ptrX, values [i] * scaleY);
-
-                       Foreground.SetAsSource (gr);
-                       gr.SetDash (new double[]{ }, 0.0);
-
-                       while (i >= 0) {
-                                       gr.LineTo (ptrX, r.Bottom - values [i] * scaleY);
-                               ptrX -= stepX;
-                               i--;
-                       }
-                       gr.Stroke ();
-               }
-       }
-}
-
diff --git a/src/GraphicObjects/VerticalStack.cs b/src/GraphicObjects/VerticalStack.cs
deleted file mode 100644 (file)
index cf0a251..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-//
-// VerticalStack.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-
-namespace Crow
-{
-       /// <summary>
-       /// group control stacking its children vertically
-       /// </summary>
-    public class VerticalStack : GenericStack
-    {
-               #region CTOR
-               protected VerticalStack() : base(){}
-               public VerticalStack(Interface iface) : base(iface)
-        {
-        }
-               #endregion
-
-        [XmlIgnore]
-        public override Orientation Orientation
-        {
-            get { return Orientation.Vertical; }            
-        }
-
-
-    }
-}
diff --git a/src/GraphicObjects/Window.cs b/src/GraphicObjects/Window.cs
deleted file mode 100644 (file)
index 051ecbd..0000000
+++ /dev/null
@@ -1,466 +0,0 @@
-//
-// Window.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-using System.Xml.Serialization;
-using System.ComponentModel;
-using System.Diagnostics;
-
-namespace Crow
-{
-       public class Window : TemplatedContainer
-       {
-               public enum Direction
-               {
-                       None,
-                       N,
-                       S,
-                       E,
-                       W,
-                       NW,
-                       NE,
-                       SW,
-                       SE,
-               }
-
-               string _icon;
-               bool resizable;
-               bool movable;
-               bool modal;
-               protected bool hoverBorder = false;
-               bool alwaysOnTop = false;
-               Fill titleBarBackground = Color.SteelBlue;
-               Fill titleBarForeground = Color.White;
-
-               Rectangle savedBounds;
-               bool _minimized = false;
-
-               Direction currentDirection = Direction.None;
-
-               #region Events
-               public event EventHandler Closing;
-               public event EventHandler Maximized;
-               public event EventHandler Unmaximized;
-               public event EventHandler Minimize;
-               #endregion
-
-               #region CTOR
-               protected Window() : base(){}
-               public Window (Interface iface) : base(iface){}
-               #endregion
-
-               #region TemplatedContainer overrides
-               protected override void loadTemplate(GraphicObject template = null)
-               {
-                       base.loadTemplate (template);
-
-                       NotifyValueChanged ("ShowNormal", false);
-                       NotifyValueChanged ("ShowMinimize", true);
-                       NotifyValueChanged ("ShowMaximize", true);
-               }
-               #endregion
-
-               #region public properties
-               [DefaultValue("#Crow.Images.Icons.crow.png")]
-               public string Icon {
-                       get { return _icon; } 
-                       set {
-                               if (_icon == value)
-                                       return;
-                               _icon = value;
-                               NotifyValueChanged ("Icon", _icon);
-                       }
-               } 
-               /// <summary>
-               /// Background of the title bar if any.
-               /// </summary>
-               [DefaultValue("vgradient|0:Onyx|1:SteelBlue")]
-               public virtual Fill TitleBarBackground {
-                       get { return titleBarBackground; }
-                       set {
-                               if (titleBarBackground == value)
-                                       return;
-                               titleBarBackground = value;
-                               NotifyValueChanged ("TitleBarBackground", titleBarBackground);
-                               RegisterForRedraw ();
-                       }
-               }
-               /// <summary>
-               /// Foreground of the title bar, usualy used for the window caption color.
-               /// </summary>
-               [DefaultValue("White")]
-               public virtual Fill TitleBarForeground {
-                       get { return titleBarForeground; }
-                       set {
-                               if (titleBarForeground == value)
-                                       return;
-                               titleBarForeground = value;
-                               NotifyValueChanged ("TitleBarForeground", titleBarForeground);
-                               RegisterForRedraw ();
-                       }
-               }
-               [DefaultValue(true)]
-               public bool Resizable {
-                       get {
-                               return resizable;
-                       }
-                       set {
-                               if (resizable == value)
-                                       return;
-                               resizable = value;
-                               NotifyValueChanged ("Resizable", resizable);
-                       }
-               }
-               [DefaultValue(true)]
-               public bool Movable {
-                       get {
-                               return movable;
-                       }
-                       set {
-                               if (movable == value)
-                                       return;
-                               movable = value;
-                               NotifyValueChanged ("Movable", movable);
-                       }
-               }
-               [DefaultValue(false)]
-               public bool Modal {
-                       get {
-                               return modal;
-                       }
-                       set {
-                               if (modal == value)
-                                       return;
-                               modal = value;
-                               NotifyValueChanged ("Modal", modal);
-                       }
-               }
-               [DefaultValue(false)]
-               public bool IsMinimized {
-                       get { return _minimized; }
-                       set{
-                               if (value == IsMinimized)
-                                       return;
-
-                               _minimized = value;
-                               _contentContainer.Visible = !_minimized;
-
-                               NotifyValueChanged ("IsMinimized", _minimized);
-                       }
-               }
-               [XmlIgnore]public bool IsMaximized {
-                       get { return Width == Measure.Stretched & Height == Measure.Stretched & !_minimized; }
-               }
-               [XmlIgnore]public bool IsNormal {
-                       get { return !(IsMaximized|_minimized); }
-               }
-               [DefaultValue(false)]
-               public bool AlwaysOnTop {
-                       get {
-                               return modal ? true : alwaysOnTop;
-                       }
-                       set {
-                               if (alwaysOnTop == value)
-                                       return;
-                               
-                               alwaysOnTop = value;
-
-                               if (AlwaysOnTop && Parent != null)
-                                       IFace.PutOnTop (this);
-
-                               NotifyValueChanged ("AlwaysOnTop", AlwaysOnTop);
-                       }
-               }
-//             [DefaultValue(WindowState.Normal)]
-//             public virtual WindowState State {
-//                     get { return _state; }
-//                     set {
-//                             if (_state == value)
-//                                     return;
-//                             _state = value;
-//                             NotifyValueChanged ("State", _state);
-//                             NotifyValueChanged ("IsNormal", IsNormal);
-//                             NotifyValueChanged ("IsMaximized", IsMaximized);
-//                             NotifyValueChanged ("IsMinimized", IsMinimized);
-//                             NotifyValueChanged ("IsNotMinimized", IsNotMinimized);
-//                     }
-//             } 
-               #endregion
-
-               /// <summary>
-               /// Moves the and resize with the same function entry point, the direction give the kind of move or resize
-               /// </summary>
-               /// <param name="XDelta">mouse delta on the X axis</param>
-               /// <param name="YDelta">mouse delta on the Y axis</param>
-               /// <param name="currentDirection">Current Direction of the operation, none for moving, other value for resizing in the given direction</param>
-               public void MoveAndResize (int XDelta, int YDelta, Direction currentDirection = (Direction)0) {
-                       int currentLeft = this.Left;
-                       int currentTop = this.Top;
-                       int currentWidth, currentHeight;
-
-                       if (currentLeft == 0) {
-                               currentLeft = this.Slot.Left;
-                               this.Left = currentLeft;
-                       }
-                       if (currentTop == 0) {
-                               currentTop = this.Slot.Top;
-                               this.Top = currentTop;
-                       }
-                       if (this.Width.IsFixed)
-                               currentWidth = this.Width;
-                       else
-                               currentWidth = this.Slot.Width;
-
-                       if (this.Height.IsFixed)
-                               currentHeight = this.Height;
-                       else
-                               currentHeight = this.Slot.Height;
-
-                       switch (currentDirection) {
-                       case Direction.None:
-                               this.Left = currentLeft + XDelta;                               
-                               this.Top = currentTop + YDelta;
-                               break;
-                       case Direction.N:
-                               this.Height = currentHeight - YDelta;
-                               if (this.Height == currentHeight - YDelta)
-                                       this.Top = currentTop + YDelta;
-                               break;
-                       case Direction.S:
-                               this.Height = currentHeight + YDelta;
-                               break;
-                       case Direction.W:
-                               this.Width = currentWidth - XDelta;
-                               if (this.Width == currentWidth - XDelta)
-                                       this.Left = currentLeft + XDelta;
-                               break;
-                       case Direction.E:
-                               this.Width = currentWidth + XDelta;
-                               break;
-                       case Direction.NW:
-                               this.Height = currentHeight - YDelta;
-                               if (this.Height == currentHeight - YDelta)
-                                       this.Top = currentTop + YDelta;
-                               this.Width = currentWidth - XDelta;
-                               if (this.Width == currentWidth - XDelta)
-                                       this.Left = currentLeft + XDelta;
-                               break;
-                       case Direction.NE:
-                               this.Height = currentHeight - YDelta;
-                               if (this.Height == currentHeight - YDelta)
-                                       this.Top = currentTop + YDelta;
-                               this.Width = currentWidth + XDelta;
-                               break;
-                       case Direction.SW:
-                               this.Width = currentWidth - XDelta;
-                               if (this.Width == currentWidth - XDelta)
-                                       this.Left = currentLeft + XDelta;
-                               this.Height = currentHeight + YDelta;
-                               break;
-                       case Direction.SE:
-                               this.Height = currentHeight + YDelta;
-                               this.Width = currentWidth + XDelta;
-                               break;
-                       }                       
-               }
-
-               #region GraphicObject Overrides
-               public override void onMouseMove (object sender, MouseMoveEventArgs e)
-               {
-                       base.onMouseMove (sender, e);
-
-                       Interface otkgw = IFace;
-
-                       if (!hoverBorder) {
-                               currentDirection = Direction.None;
-                               IFace.MouseCursor = XCursor.Default;
-                               return;
-                       }
-
-                       if (this.HasFocus && movable) {
-                               if (e.Mouse.IsButtonDown (MouseButton.Left)) {
-                                       MoveAndResize (e.XDelta, e.YDelta, currentDirection);
-                                       return;
-                               }
-                       }
-                       if (Resizable) {
-                               Direction lastDir = currentDirection;
-
-                               if (Math.Abs (e.Position.Y - this.Slot.Y) < Interface.BorderThreshold) {
-                                       if (Math.Abs (e.Position.X - this.Slot.X) < Interface.BorderThreshold)
-                                               currentDirection = Direction.NW;
-                                       else if (Math.Abs (e.Position.X - this.Slot.Right) < Interface.BorderThreshold)
-                                               currentDirection = Direction.NE;
-                                       else
-                                               currentDirection = Direction.N;
-                               } else if (Math.Abs (e.Position.Y - this.Slot.Bottom) < Interface.BorderThreshold) {
-                                       if (Math.Abs (e.Position.X - this.Slot.X) < Interface.BorderThreshold)
-                                               currentDirection = Direction.SW;
-                                       else if (Math.Abs (e.Position.X - this.Slot.Right) < Interface.BorderThreshold)
-                                               currentDirection = Direction.SE;
-                                       else
-                                               currentDirection = Direction.S;
-                               } else if (Math.Abs (e.Position.X - this.Slot.X) < Interface.BorderThreshold)
-                                       currentDirection = Direction.W;
-                               else if (Math.Abs (e.Position.X - this.Slot.Right) < Interface.BorderThreshold)
-                                       currentDirection = Direction.E;
-                               else
-                                       currentDirection = Direction.None;
-
-                               if (currentDirection != lastDir) {
-                                       switch (currentDirection) {
-                                       case Direction.None:
-                                               otkgw.MouseCursor = XCursor.Default;
-                                               break;
-                                       case Direction.N:
-                                               otkgw.MouseCursor = XCursor.V;
-                                               break;
-                                       case Direction.S:
-                                               otkgw.MouseCursor = XCursor.V;
-                                               break;
-                                       case Direction.E:
-                                               otkgw.MouseCursor = XCursor.H;
-                                               break;
-                                       case Direction.W:
-                                               otkgw.MouseCursor = XCursor.H;
-                                               break;
-                                       case Direction.NW:
-                                               otkgw.MouseCursor = XCursor.NW;
-                                               break;
-                                       case Direction.NE:
-                                               otkgw.MouseCursor = XCursor.NE;
-                                               break;
-                                       case Direction.SW:
-                                               otkgw.MouseCursor = XCursor.SW;
-                                               break;
-                                       case Direction.SE:
-                                               otkgw.MouseCursor = XCursor.SE;
-                                               break;
-                                       }
-                               }                               
-                       }                               
-               }
-               public override void onMouseDown (object sender, MouseButtonEventArgs e)
-               {
-                       base.onMouseDown (sender, e);
-               }
-               public override bool MouseIsIn (Point m)
-               {
-                       return modal ? true : base.MouseIsIn (m);
-               }
-               #endregion
-
-               protected void onMaximized (object sender, EventArgs e){
-                       lock (IFace.LayoutMutex) {
-                               if (!IsMinimized)
-                                       savedBounds = this.LastPaintedSlot;
-                               this.Left = this.Top = 0;
-                               this.RegisterForLayouting (LayoutingType.Positioning);
-                               this.Width = this.Height = Measure.Stretched;
-                               IsMinimized = false;
-                               Resizable = false;
-                               NotifyValueChanged ("ShowNormal", true);
-                               NotifyValueChanged ("ShowMinimize", true);
-                               NotifyValueChanged ("ShowMaximize", false);
-                       }
-
-                       Maximized.Raise (sender, e);
-               }
-               protected void onUnmaximized (object sender, EventArgs e){
-                       lock (IFace.LayoutMutex) {
-                               this.Left = savedBounds.Left;
-                               this.Top = savedBounds.Top;
-                               this.Width = savedBounds.Width;
-                               this.Height = savedBounds.Height;
-                               IsMinimized = false;
-                               Resizable = true;
-                               NotifyValueChanged ("ShowNormal", false);
-                               NotifyValueChanged ("ShowMinimize", true);
-                               NotifyValueChanged ("ShowMaximize", true);
-                       }
-
-                       Unmaximized.Raise (sender, e);
-               }
-               protected void onMinimized (object sender, EventArgs e){
-                       lock (IFace.LayoutMutex) {
-                               if (IsNormal)
-                                       savedBounds = this.LastPaintedSlot;
-                               Width = 200;
-                               Height = 20;
-                               Resizable = false;
-                               IsMinimized = true;
-                               NotifyValueChanged ("ShowNormal", true);
-                               NotifyValueChanged ("ShowMinimize", false);
-                               NotifyValueChanged ("ShowMaximize", true);
-                       }
-
-                       Minimize.Raise (sender, e);
-               }
-               protected virtual void onBorderMouseLeave (object sender, MouseMoveEventArgs e)
-               {
-                       hoverBorder = false;
-                       currentDirection = Direction.None;
-                       IFace.MouseCursor = XCursor.Default;
-               }
-               protected virtual void onBorderMouseEnter (object sender, MouseMoveEventArgs e)
-               {
-                       hoverBorder = true;
-               }
-
-
-               protected void butQuitPress (object sender, MouseButtonEventArgs e)
-               {
-                       IFace.MouseCursor = XCursor.Default;
-                       close ();
-               }
-
-               protected virtual void close(){
-                       Closing.Raise (this, null);
-                       if (Parent is Interface)
-                               (Parent as Interface).DeleteWidget (this);
-                       else {
-                               GraphicObject p = Parent as GraphicObject;
-                               if (p is Group) {
-                                       lock (IFace.UpdateMutex) {
-                                               RegisterClip (p.ScreenCoordinates (p.LastPaintedSlot));
-                                               (p as Group).DeleteChild (this);
-                                       }
-                                       //(Parent as Group).RegisterForRedraw ();
-                               } else if (Parent is PrivateContainer)
-                                       (Parent as Container).Child = null;
-                       }
-               }
-
-               public static Window Show (Interface iface, string imlPath, bool modal = false){
-                       lock (iface.UpdateMutex) {
-                               Window w = iface.AddWidget (imlPath) as Window;
-                               w.Modal = modal;
-                               return w;
-                       }
-               }
-       }
-}
-
diff --git a/src/GraphicObjects/Wrapper.cs b/src/GraphicObjects/Wrapper.cs
deleted file mode 100644 (file)
index a7f5f73..0000000
+++ /dev/null
@@ -1,251 +0,0 @@
-//
-// Wrapper.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-
-namespace Crow
-{
-       /// <summary>
-       /// group control that arrange its children in a direction and jump to
-       /// the next line or row when no room is left
-       /// </summary>
-       public class Wrapper : GenericStack
-       {
-               #region CTOR
-               protected Wrapper() : base(){}
-               public Wrapper (Interface iface) : base(iface){}
-               #endregion
-
-               #region Group Overrides
-               public override void ChildrenLayoutingConstraints (ref LayoutingType layoutType)
-               {
-                       layoutType &= (~LayoutingType.Positioning);
-               }
-               public override void ComputeChildrenPositions()
-               {
-                       int dx = 0;
-                       int dy = 0;
-
-                       if (Orientation == Orientation.Vertical) {
-                               int tallestChild = 0;
-                               foreach (GraphicObject c in Children) {
-                                       if (!c.Visible)
-                                               continue;
-                                       if (dx + c.Slot.Width > ClientRectangle.Width) {
-                                               dx = 0;
-                                               dy += tallestChild + Spacing;
-                                               c.Slot.X = dx;
-                                               c.Slot.Y = dy;
-                                               tallestChild = c.Slot.Height;
-                                       } else {
-                                               if (tallestChild < c.Slot.Height)
-                                                       tallestChild = c.Slot.Height;
-                                               c.Slot.X = dx;
-                                               c.Slot.Y = dy;
-                                       }
-                                       dx += c.Slot.Width + Spacing;
-                               }
-                       } else {
-                               int largestChild = 0;
-                               foreach (GraphicObject c in Children) {
-                                       if (!c.Visible)
-                                               continue;
-                                       if (dy + c.Slot.Height > ClientRectangle.Height) {
-                                               dy = 0;
-                                               dx += largestChild + Spacing;
-                                               c.Slot.X = dx;
-                                               c.Slot.Y = dy;
-                                               largestChild = c.Slot.Width;
-                                       } else {
-                                               if (largestChild < c.Slot.Width)
-                                                       largestChild = c.Slot.Width;
-                                               c.Slot.X = dx;
-                                               c.Slot.Y = dy;
-                                       }
-                                       dy += c.Slot.Height + Spacing;
-                               }
-                       }
-                       IsDirty = true;
-               }
-               public override void OnChildLayoutChanges (object sender, LayoutingEventArgs arg)
-               {
-                       //children can't stretch in a wrapper
-                       GraphicObject go = sender as GraphicObject;
-                       //System.Diagnostics.Debug.WriteLine ("wrapper child layout change: " + go.LastSlots.ToString() + " => " + go.Slot.ToString());
-                       switch (arg.LayoutType) {
-                       case LayoutingType.Width:
-                               if (Orientation == Orientation.Horizontal && go.Width.Units == Unit.Percent){
-                                       go.Width = Measure.Fit;
-                                       return;
-                               }
-                               this.RegisterForLayouting (LayoutingType.Width);
-                               break;
-                       case LayoutingType.Height:
-                               if (Orientation == Orientation.Vertical && go.Height.IsRelativeToParent) {
-                                       go.Height = Measure.Fit;
-                                       return;
-                               }
-                               this.RegisterForLayouting (LayoutingType.Height);
-                               break;
-                       default:
-                               return;
-                       }
-                       this.RegisterForLayouting (LayoutingType.ArrangeChildren);
-               }
-               #endregion
-
-               #region GraphicObject Overrides
-               protected override int measureRawSize (LayoutingType lt)
-               {
-                       int tmp = 0;
-                       //Wrapper can't fit in the opposite direction of the wrapper, this func is called only if Fit
-                       if (lt == LayoutingType.Width) {
-                               if (Orientation == Orientation.Vertical) {
-                                       Width = Measure.Stretched;
-                                       return -1;
-                               } else if (RegisteredLayoutings.HasFlag (LayoutingType.Height))
-                                       return -1;
-                               else {
-                                       int dy = 0;
-                                       int largestChild = 0;
-
-                                       childrenRWLock.EnterReadLock();
-
-                                       foreach (GraphicObject c in Children) {
-                                               if (!c.Visible)
-                                                       continue;
-                                               if (c.Height.IsRelativeToParent &&
-                                                   c.RegisteredLayoutings.HasFlag (LayoutingType.Height)) {
-                                                       childrenRWLock.ExitReadLock();
-                                                       return -1;
-                                               }
-                                               if (dy + c.Slot.Height > ClientRectangle.Height) {
-                                                       dy = 0;
-                                                       tmp += largestChild + Spacing;
-                                                       largestChild = c.Slot.Width;
-                                               } else if (largestChild < c.Slot.Width)
-                                                       largestChild = c.Slot.Width;
-
-                                               dy += c.Slot.Height + Spacing;
-                                       }
-
-                                       childrenRWLock.ExitReadLock ();
-
-                                       if (dy == 0)
-                                               tmp -= Spacing;
-                                       return tmp + largestChild + 2 * Margin;
-                               }
-                       } else if (Orientation == Orientation.Horizontal) {
-                               Height = Measure.Stretched;
-                               return -1;
-                       } else if (RegisteredLayoutings.HasFlag (LayoutingType.Width))
-                               return -1;
-                       else {
-                               int dx = 0;
-                               int tallestChild = 0;
-
-                               childrenRWLock.EnterReadLock();
-
-                               foreach (GraphicObject c in Children) {
-                                       if (!c.Visible)
-                                               continue;
-                                       if (c.Width.IsRelativeToParent &&
-                                           c.RegisteredLayoutings.HasFlag (LayoutingType.Width)) {
-                                               childrenRWLock.ExitReadLock();
-                                               return -1;
-                                       }
-                                       if (dx + c.Slot.Width > ClientRectangle.Width) {
-                                               dx = 0;
-                                               tmp += tallestChild + Spacing;
-                                               tallestChild = c.Slot.Height;
-                                       } else if (tallestChild < c.Slot.Height)
-                                               tallestChild = c.Slot.Height;
-
-                                       dx += c.Slot.Width + Spacing;
-                               }
-
-                               childrenRWLock.ExitReadLock();
-
-                               if (dx == 0)
-                                       tmp -= Spacing;
-                               return tmp + tallestChild + 2 * Margin;
-                       }
-               }
-
-               public override bool UpdateLayout (LayoutingType layoutType)
-               {
-                       RegisteredLayoutings &= (~layoutType);
-
-                       if (layoutType == LayoutingType.ArrangeChildren) {
-                               if ((RegisteredLayoutings & LayoutingType.Sizing) != 0)
-                                       return false;
-
-                               ComputeChildrenPositions ();
-
-                               //if no layouting remains in queue for item, registre for redraw
-                               if (RegisteredLayoutings == LayoutingType.None && IsDirty)
-                                       IFace.EnqueueForRepaint (this);
-
-                               return true;
-                       }
-
-                       return base.UpdateLayout(layoutType);
-               }
-               public override void OnLayoutChanges (LayoutingType layoutType)
-               {
-                       #if DEBUG_LAYOUTING
-                       IFace.currentLQI.Slot = LastSlots;
-                       IFace.currentLQI.Slot = Slot;
-                       #endif
-                       switch (layoutType) {
-                       case LayoutingType.Width:
-                               foreach (GraphicObject c in Children) {
-                                       if (c.Width.IsRelativeToParent)
-                                               c.RegisterForLayouting (LayoutingType.Width);
-                               }
-                               if (Height == Measure.Fit)
-                                       RegisterForLayouting (LayoutingType.Height);
-                               RegisterForLayouting (LayoutingType.X);
-                               break;
-                       case LayoutingType.Height:
-                               foreach (GraphicObject c in Children) {
-                                       if (c.Height.IsRelativeToParent)
-                                               c.RegisterForLayouting (LayoutingType.Height);
-                               }
-                               if (Width == Measure.Fit)
-                                       RegisterForLayouting (LayoutingType.Width);
-                               RegisterForLayouting (LayoutingType.Y);
-                               break;
-                       default:
-                               return;
-                       }
-                       RegisterForLayouting (LayoutingType.ArrangeChildren);
-                       raiseLayoutChanged (new LayoutingEventArgs (layoutType));
-               }
-               #endregion
-       }
-}
-
diff --git a/src/GraphicObjects/XmlIgnoreAttribute.cs b/src/GraphicObjects/XmlIgnoreAttribute.cs
deleted file mode 100644 (file)
index 29e5bf6..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-//
-// Expandable.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-
-namespace Crow
-{
-    public class XmlIgnoreAttribute : Attribute
-    {
-    }
-}
\ No newline at end of file
diff --git a/src/IListChanged.cs b/src/IListChanged.cs
deleted file mode 100644 (file)
index b2b2337..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-//
-// IListChanged.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp_bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-using System;
-
-namespace Crow
-{
-       public class ListChangedEventArg : EventArgs {
-               public int Index;
-               public object Element;
-               public ListChangedEventArg (int index, object element) {
-                       Index = index;
-                       Element = element;
-               }
-       }
-       public interface IObservableList {
-               event EventHandler<ListChangedEventArg> ListAdd;
-               event EventHandler<ListChangedEventArg> ListRemove;             
-       }
-}
-
diff --git a/src/IML/BindingDefinition.cs b/src/IML/BindingDefinition.cs
deleted file mode 100644 (file)
index 075b80b..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-//
-// BindingDefinition.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-
-namespace Crow.IML
-{
-       /// <summary>
-       /// store binding source and target addresses and member names
-       /// </summary>
-       public class BindingDefinition
-       {
-               public NodeAddress SourceNA = null;
-               public string SourceMember = "";
-               public NodeAddress TargetNA = null;
-               public string TargetMember = "";
-               public string TargetName = "";
-               public bool TwoWay = false;
-
-               #region CTOR
-               public BindingDefinition (NodeAddress _sourceNA, string _sourceMember){
-                       SourceNA = _sourceNA;
-                       SourceMember = _sourceMember;
-               }
-               public BindingDefinition (NodeAddress _sourceNA, string _sourceMember, NodeAddress _targetNA, string _targetMember, string _targetName = "", bool _twoWay = false)
-               {
-                       SourceNA = _sourceNA;
-                       SourceMember = _sourceMember;
-                       TargetNA = _targetNA;
-                       TargetMember = _targetMember;
-                       TargetName = _targetName;
-                       TwoWay = _twoWay;
-               }
-               #endregion
-
-               public bool IsDataSourceBinding { get { return TargetNA == null; }}
-               public bool IsTemplateBinding { get { return IsDataSourceBinding ? false : TargetNA.Count == 0; }}
-               public bool HasUnresolvedTargetName { get { return !string.IsNullOrEmpty(TargetName); }}
-               public MemberAddress SourceMemberAddress { get { return new MemberAddress (SourceNA, SourceMember);}}
-               public MemberAddress TargetMemberAddress { get { return new MemberAddress (TargetNA, TargetMember);}}
-
-               /// <summary>
-               /// replace the target node address with corresponding named node address, and clear the target name once resolved
-               /// </summary>
-               /// <param name="newTargetNA">Named Node</param>
-               public void ResolveTargetName(NodeAddress newTargetNA){
-                       TargetNA = newTargetNA;
-                       TargetName = "";
-               }
-
-               public override string ToString ()
-               {
-                       string tmp = string.Format ("Source:{0}.{1}", SourceNA, SourceMember);
-                       if (TwoWay)
-                               tmp += " <=> ";
-                       else
-                               tmp += " <=  ";
-                                       
-                       if (string.IsNullOrEmpty (TargetName))
-                               tmp += string.Format ("Target:{0}.{1}]", TargetNA, TargetMember);
-                       else
-                               tmp += string.Format ("Target:{0}.{1}.{2}]", TargetNA, TargetName, TargetMember);
-                       return tmp;
-               }
-       }
-}
-
diff --git a/src/IML/BindingMember.cs b/src/IML/BindingMember.cs
deleted file mode 100644 (file)
index 47cba5f..0000000
+++ /dev/null
@@ -1,191 +0,0 @@
-//
-// BindingMember.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-using System.Reflection.Emit;
-
-namespace Crow.IML
-{
-       /// <summary>
-       /// Binding expression parser.
-       /// 
-       /// Valid tokens in binding expression:
-       /// - '../' => 1 level up in graphic tree
-       /// - './' or '/' => template root level
-       /// - '.Name1.Name2' current level properties
-       /// - 'name.prop' named descendant in graphic tree, search with 'FindByName' method of GraphicObject
-       /// </summary>
-       public class BindingMember
-       {
-               /// <summary>
-               /// true if expression was enclosed in '
-               /// </summary>
-               public bool IsStringConstant = false;
-               /// <summary>
-               /// Nb level to go up, '-1' for template root
-               /// </summary>
-               public int LevelsUp;
-               /// <summary>
-               /// Remaining string after '/' split, splitted on '.'
-               /// </summary>
-               public string[] Tokens;
-
-               /// <summary>
-               /// Target the template's root node, expression was in the form './name[.name[...]]' or '/name[.name[...]]'
-               /// </summary>
-               public bool IsTemplateBinding { get { return LevelsUp < 0; }}
-
-               /// <summary>
-               /// No level change and expression was '.name'
-               /// </summary>
-               /// <value><c>true</c> if this instance is current node property; otherwise, <c>false</c>.</value>
-               public bool IsCurrentNodeProperty {
-                       get {
-                               return LevelsUp == 0 && ( Tokens.Length == 2 && string.IsNullOrEmpty(Tokens[0]));
-                       }
-               }
-               /// <summary>
-               /// no level change, and only a single name in Tokens[], that's dataSource member if property binding
-               /// </summary>
-               public bool IsSingleName { get { return LevelsUp == 0 && Tokens.Length == 1; }}
-
-               #region CTOR
-               /// <summary>
-               /// Initializes a new instance of BindingMember.
-               /// </summary>
-               public BindingMember (){}
-               /// <summary>
-               /// Initializes a new instance of BindingMember by parsing the string passed as argument
-               /// </summary>
-               /// <param name="expression">binding expression</param>
-               public BindingMember (string expression){
-                       if (string.IsNullOrEmpty (expression))
-                               return;
-
-                       string[] splitedExp = expression.Trim().Split ('/');
-
-                       int ptr = 0;
-                       if (splitedExp.Length == 1) {
-                               if (splitedExp [0].StartsWith ("\'")) {
-                                       if (!splitedExp [0].EndsWith ("\'"))
-                                               throw new Exception (string.Format
-                                                       ("IML:malformed string constant in binding expression: {0}", splitedExp [0]));
-                                       Tokens = new string[] { splitedExp [0].Substring (1, splitedExp [0].Length - 2) };
-                                       IsStringConstant = true;
-                                       return;
-                               }
-                       } else if (string.IsNullOrEmpty (splitedExp [0])) {
-                               ptr++;
-                       } else {
-                                if (splitedExp [0] == ".") {//template root
-                                       LevelsUp = -1;
-                                       ptr++;
-                               } else {
-                                       while (splitedExp [ptr] == "..")
-                                               ptr++;
-                                       LevelsUp = ptr;
-                               }
-                       }
-                       if (ptr != splitedExp.Length - 1)
-                               throw new Exception ("invalid expresion: " + expression);
-                       Tokens = splitedExp [ptr].Split ('.');
-               }
-               #endregion
-
-               /// <summary>
-               /// Emits the MSIL instructions to get the target of the binding expression
-               /// </summary>
-               /// <param name="il">current MSIL generator</param>
-               /// <param name="cancel">cancel branching in MSIL if something go wrong</param>
-               public void emitGetTarget(ILGenerator il, System.Reflection.Emit.Label cancel){
-
-                       if (IsTemplateBinding) {
-                               System.Reflection.Emit.Label nextLogicParent = il.DefineLabel ();
-                               il.MarkLabel (nextLogicParent);
-                               il.Emit (OpCodes.Callvirt, CompilerServices.miGetLogicalParent);
-                               il.Emit (OpCodes.Dup);
-                               il.Emit (OpCodes.Brfalse, cancel);
-                               il.Emit (OpCodes.Isinst, typeof(TemplatedControl));
-                               il.Emit (OpCodes.Dup);
-                               il.Emit (OpCodes.Brfalse, nextLogicParent);
-                       } else if (LevelsUp > 0) {//go upward in logical tree
-                               il.Emit (OpCodes.Ldc_I4, LevelsUp);//push arg 2 of goUpLevels
-                               il.Emit (OpCodes.Call, CompilerServices.miGoUpLevels);
-                               //test if null
-                               il.Emit (OpCodes.Dup);
-                               il.Emit (OpCodes.Brfalse, cancel);
-                       }
-
-                       if (!string.IsNullOrEmpty (Tokens [0])) {//find by name
-                               il.Emit (OpCodes.Ldstr, Tokens [0]);
-                               il.Emit (OpCodes.Callvirt, CompilerServices.miFindByName);
-                               il.Emit (OpCodes.Dup);
-                               il.Emit (OpCodes.Brfalse, cancel);
-                       }
-
-                       for (int i = 1; i < Tokens.Length -1; i++) {
-                               System.Reflection.Emit.Label miOK = il.DefineLabel ();
-                               il.Emit (OpCodes.Dup);//duplicate instance
-                               il.Emit (OpCodes.Ldstr, Tokens [i]);//load member name
-                               il.Emit (OpCodes.Call, CompilerServices.miGetMembIinfoWithRefx);
-                               il.Emit (OpCodes.Dup);
-                               il.Emit (OpCodes.Brtrue, miOK);
-                               il.Emit (OpCodes.Pop);//pop dup instance
-                               il.Emit (OpCodes.Br, cancel);
-                               il.MarkLabel (miOK);
-                               il.Emit (OpCodes.Call, CompilerServices.miGetValWithRefx);
-                               il.Emit (OpCodes.Dup);
-                               il.Emit (OpCodes.Brfalse, cancel);
-                       }
-               }
-               /// <summary>
-               /// Emit the MSIL instructions to get the target property of the binding expression
-               /// </summary>
-               /// <param name="il">current MSIL generator</param>
-               /// <param name="cancel">cancel branching in MSIL if something go wrong</param>
-               public void emitGetProperty(ILGenerator il, System.Reflection.Emit.Label cancel) {
-                       System.Reflection.Emit.Label miOK = il.DefineLabel ();
-                       il.Emit (OpCodes.Dup);//duplicate instance
-                       il.Emit (OpCodes.Ldstr, Tokens [Tokens.Length -1]);//load member name
-                       il.Emit (OpCodes.Call, CompilerServices.miGetMembIinfoWithRefx);
-                       il.Emit (OpCodes.Dup);
-                       il.Emit (OpCodes.Brtrue, miOK);
-                       il.Emit (OpCodes.Pop);//pop dup instance
-                       il.Emit (OpCodes.Br, cancel);
-                       il.MarkLabel (miOK);
-                       il.Emit (OpCodes.Call, CompilerServices.miGetValWithRefx);
-               }
-               /// <summary>
-               /// Emit the MSIL instructions to set the target property of the binding expression
-               /// </summary>
-               /// <param name="il">current MSIL generator</param>
-               public void emitSetProperty(ILGenerator il) {
-                       il.Emit (OpCodes.Ldstr, Tokens [Tokens.Length -1]);//load member name
-                       il.Emit (OpCodes.Call, CompilerServices.miSetValWithRefx);
-               }
-       }
-}
-
diff --git a/src/IML/EventBinding.cs b/src/IML/EventBinding.cs
deleted file mode 100644 (file)
index 41e0c96..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-//
-// EventBinding.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-using System.Reflection;
-
-namespace Crow.IML
-{
-       public class EventBinding : BindingDefinition
-       {
-               public EventInfo SourceEvent;
-
-               #region CTOR
-               public EventBinding (NodeAddress _sourceNA, EventInfo _sourceEvt, NodeAddress _targetNA, string _targetMember, string _targetName = "")
-                       : base (_sourceNA, _sourceEvt.Name, _targetNA, _targetMember, _targetName)
-               {
-                       SourceEvent = _sourceEvt;
-               }
-               #endregion
-       }
-}
-
diff --git a/src/IML/IMLContext.cs b/src/IML/IMLContext.cs
deleted file mode 100644 (file)
index 6042e6d..0000000
+++ /dev/null
@@ -1,230 +0,0 @@
-//
-// Context.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-using System.Collections.Generic;
-using System.Reflection;
-using System.Reflection.Emit;
-using System.Xml;
-
-namespace Crow.IML
-{
-       public class DataSourceBinding {
-               public bool TwoWay;
-               public MemberAddress Source;
-               public string DataSourceMember;
-       }
-       /// <summary>
-       /// Context while parsing IML, this will store what's needed only while parsing and not during instancing
-       /// </summary>
-       public class IMLContext
-       {
-               public XmlReader reader = null;
-               public int curLine = 0;
-               public Type RootType = null;
-
-               public DynamicMethod dm = null;
-               public ILGenerator il = null;
-               //public SubNodeType curSubNodeType;
-               public NodeStack nodesStack = new NodeStack ();
-
-               /// <summary> store addresses of named node for name resolution at end of parsing </summary>
-               public Dictionary<string, List<NodeAddress>> Names  = new Dictionary<string, List<NodeAddress>>();
-               /// <summary> Store non datasource binding (in tree and template) by origine and orig member </summary>
-               public Dictionary<NodeAddress, Dictionary<string, List<MemberAddress>>> Bindings =
-                       new Dictionary<NodeAddress, Dictionary<string, List<MemberAddress>>>();
-               /// <summary> Store binding with name in target, will be resolved at end of parsing </summary>
-               public List<BindingDefinition> UnresolvedTargets = new List<BindingDefinition>();
-
-
-               public IMLContext (Type rootType)
-               {
-                       RootType = rootType;
-                       dm = new DynamicMethod ("dyn_instantiator",
-                               CompilerServices.TObject, new Type [] { typeof (Instantiator), typeof (Interface) }, true);
-                       il = dm.GetILGenerator (256);
-
-                       il.DeclareLocal (typeof (GraphicObject));
-                       il.Emit (OpCodes.Nop);
-                       //set local GraphicObject to root object
-                       ConstructorInfo ci = rootType.GetConstructor (
-                                       BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public, 
-                                       null, Type.EmptyTypes, null);
-                       if (ci == null)
-                               throw new Exception ("No default parameterless constructor found in " + rootType.Name);                 
-                       il.Emit (OpCodes.Newobj, ci);
-                       il.Emit (OpCodes.Stloc_0);
-                       CompilerServices.emitSetCurInterface (il);
-               }
-
-               public NodeAddress CurrentNodeAddress {
-                       get {
-                               Node[] n = nodesStack.ToArray ();
-                               Array.Reverse (n);
-                               return new NodeAddress(n);
-                       }
-               }
-               public Type CurrentNodeType {
-                       get { return nodesStack.Peek().CrowType; }
-               }
-               public void StorePropertyBinding(NodeAddress origNA, string origMember, NodeAddress destNA, string destMember){
-                       Dictionary<string, List<MemberAddress>> nodeBindings = null;
-                       if (Bindings.ContainsKey (origNA))
-                               nodeBindings = Bindings [origNA];
-                       else {
-                               nodeBindings = new Dictionary<string, List<MemberAddress>> ();
-                               Bindings [origNA] = nodeBindings;
-                       }
-
-                       if (!nodeBindings.ContainsKey (origMember))
-                               nodeBindings [origMember] = new List<MemberAddress> ();
-                       nodeBindings [origMember].Add (new MemberAddress (destNA, destMember));
-               }
-               public void StorePropertyBinding(BindingDefinition bindDef){
-                       if (bindDef.HasUnresolvedTargetName) {
-                               UnresolvedTargets.Add (bindDef);
-                               return;
-                       }
-                       StorePropertyBinding (bindDef.TargetNA, bindDef.TargetMember, bindDef.SourceNA, bindDef.SourceMember);
-                       if (bindDef.TwoWay)
-                               StorePropertyBinding (bindDef.SourceNA, bindDef.SourceMember, bindDef.TargetNA, bindDef.TargetMember);
-               }
-               public void StoreCurrentName(string name){
-                       if (!Names.ContainsKey(name))
-                               Names[name] = new List<NodeAddress>();
-                       Names[name].Add(CurrentNodeAddress);
-               }
-               public void ResolveNamedTargets(){//TODO:methodinfo fetching is redundant with early parsing
-                       foreach (BindingDefinition bd in UnresolvedTargets) {
-                               if (bd.HasUnresolvedTargetName) {
-                                       try {
-                                               ResolveName (bd);       
-                                       } catch (Exception ex) {
-                                               System.Diagnostics.Debug.WriteLine (ex.ToString ());
-                                               continue;
-                                       }
-                               }
-
-                               if (bd is EventBinding) {
-                                       emitHandlerMethodAddition (bd as EventBinding);
-                                       continue;
-                               }
-
-                               MemberInfo miSource = bd.SourceMemberAddress.member;
-                               if (miSource == null)
-                                       throw new Exception ("Source member '" + bd.SourceMember + "' not found");
-                               StorePropertyBinding (bd);
-                       }
-               }
-               public void ResolveName (BindingDefinition bd){
-
-                       if (!Names.ContainsKey (bd.TargetName))
-                               throw new Exception ("Target Name '" + bd.TargetName + "' not found");
-
-                       NodeAddress resolvedNA = null;
-                       foreach (NodeAddress na in Names[bd.TargetName]) {
-                               bool naMatch = true;
-                               for (int i = 0; i < bd.TargetNA.Count; i++) {
-                                       if (bd.TargetNA [i] != na [i]) {
-                                               naMatch = false;
-                                               break;
-                                       }
-                               }
-                               if (naMatch) {
-                                       resolvedNA = na;
-                                       break;
-                               }
-                       }
-
-                       if (resolvedNA == null)
-                               throw new Exception ("Target Name '" + bd.TargetName + "' not found");
-
-                       bd.ResolveTargetName (resolvedNA);
-               }
-
-               /// <summary>
-               /// Emits cached delegate handler addition in the context of instantiator (ctx)
-               /// </summary>
-               public void emitCachedDelegateHandlerAddition(int index, EventInfo evt, NodeAddress address = null){
-                       il.Emit(OpCodes.Ldloc_0);//load ref to current graphic object
-                       CompilerServices.emitGetInstance (il, address);
-                       il.Emit(OpCodes.Ldarg_0);//load ref to this instanciator onto the stack
-                       il.Emit(OpCodes.Ldfld, CompilerServices.fiCachedDel);
-                       il.Emit(OpCodes.Ldc_I4, index);//load delegate index
-                       il.Emit(OpCodes.Callvirt, CompilerServices.miGetDelegateListItem);
-                       il.Emit(OpCodes.Call, evt.AddMethod);//call add event
-               }
-               /// <summary>
-               /// Emits the handler method addition, done at end of parsing, Loc_0 is root node instance
-               /// </summary>
-               /// <param name="bd">Bd.</param>
-               /// <param name="evt">passed as arg to prevent refetching it for the 3rd time</param>
-               public void emitHandlerMethodAddition(EventBinding bd){
-
-                       //fetch source instance with address for handler addition (as 1st arg of handler.add)
-                       il.Emit (OpCodes.Ldloc_0);//push root
-                       CompilerServices.emitGetInstance (il, bd.SourceNA);
-
-                       il.Emit (OpCodes.Ldloc_0);
-                       CompilerServices.emitGetInstance (il, bd.TargetNA);
-
-                       string[] membs = bd.TargetMember.Split ('.');
-                       for (int i = 0; i < membs.Length - 1; i++) {
-                               il.Emit (OpCodes.Dup);
-                               il.Emit (OpCodes.Ldstr, membs[i]);
-                               il.Emit (OpCodes.Call, CompilerServices.miGetMembIinfoWithRefx);
-                               il.Emit (OpCodes.Call, CompilerServices.miGetValWithRefx);
-                       }
-
-                       //load handlerType of sourceEvent to create handler delegate (1st arg)
-                       il.Emit (OpCodes.Ldtoken, bd.SourceEvent.EventHandlerType);
-                       il.Emit (OpCodes.Call, CompilerServices.miGetTypeFromHandle);
-                       //load methodInfo (3rd arg)
-                       il.Emit (OpCodes.Ldstr, membs[membs.Length-1]);
-                       il.Emit (OpCodes.Call, CompilerServices.miCreateDel);
-                       il.Emit (OpCodes.Call, bd.SourceEvent.AddMethod);//call add event
-               }
-//             public void emitHandlerMethodAddition(EventBinding bd){
-//                     //fetch source instance with address for handler addition (as 1st arg of handler.add)
-//                     il.Emit (OpCodes.Ldloc_0);//push root
-//                     CompilerServices.emitGetInstance (il, bd.SourceNA);
-//
-//                     //load handlerType of sourceEvent to create handler delegate (1st arg)
-//                     il.Emit (OpCodes.Ldtoken, bd.SourceEvent.EventHandlerType);
-//                     il.Emit (OpCodes.Call, CompilerServices.miGetTypeFromHandle);
-//                     //load target the where the method is defined (2nd arg)
-//                     il.Emit (OpCodes.Ldloc_0);
-//                     CompilerServices.emitGetInstance (il, bd.TargetNA);
-//                     //load methodInfo (3rd arg)
-//                     il.Emit (OpCodes.Ldstr, bd.TargetMember);
-//
-//                     il.Emit (OpCodes.Callvirt, CompilerServices.miCreateDel);
-//
-//                     il.Emit (OpCodes.Callvirt, bd.SourceEvent.AddMethod);//call add event
-//             }
-//
-       }
-}
\ No newline at end of file
diff --git a/src/IML/MemberAddress.cs b/src/IML/MemberAddress.cs
deleted file mode 100644 (file)
index f27a8b8..0000000
+++ /dev/null
@@ -1,116 +0,0 @@
-//
-// MemberAddress.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-using System.Linq;
-using System.Reflection;
-
-namespace Crow.IML
-{
-       /// <summary>
-       /// Address member of a node
-       /// </summary>
-       public struct MemberAddress
-       {
-               public string memberName;
-               public MemberInfo member;
-               public NodeAddress Address;
-
-               public PropertyInfo Property { get { return member as PropertyInfo; }}
-               public bool IsTemplateBinding { get { return Address == null ? false : Address.Count == 0; }}
-//             public string Name {
-//                     get { return memberName; } 
-//                     set { memberName = value; }
-//             }
-
-               public MemberAddress (NodeAddress _address, string _member, bool findMember = true)
-               {
-                       Address = _address;
-                       memberName = _member;
-                       member = null;
-
-                       if (Address == null)
-                               return;
-                       if (Address.Count == 0)
-                               return;
-
-                       if (!findMember)
-                               return;
-                       if (!tryFindMember ())
-                               throw new Exception ("Member Not Found: " + memberName);
-               }
-               public MemberAddress (NodeAddress _address, MemberInfo _member)
-               {
-                       Address = _address;
-                       member = _member;
-                       memberName = "";
-
-                       if (member != null)
-                               memberName = member.Name;
-               }
-
-               #region Equality Compare
-               public override bool Equals (object obj)
-               {
-                       return obj is MemberAddress && this == (MemberAddress)obj;
-               }
-               public override int GetHashCode ()
-               {
-                       return Address.GetHashCode () ^ member.GetHashCode ();
-               }
-               public static bool operator == (MemberAddress x, MemberAddress y)
-               {
-                       return x.Address == y.Address && x.memberName == y.memberName;
-               }
-               public static bool operator != (MemberAddress x, MemberAddress y)
-               {
-                       return !(x == y);
-               }
-               #endregion
-
-               bool tryFindMember ()
-               {
-                       if (member != null)
-                               throw new Exception ("member already found");
-                       if (Address == null)
-                               return false;
-                       if (Address.Count == 0)
-                               return false;
-                       Type t = Address.LastOrDefault ().CrowType;
-                       member = t.GetMember (memberName, BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance).FirstOrDefault ();
-
-                       #region search for extensions methods if member not found in type
-                       if (member == null && !string.IsNullOrEmpty (memberName)) {
-                               Assembly a = Assembly.GetExecutingAssembly ();
-                               string mn = memberName;
-                               member = CompilerServices.GetExtensionMethods (a, t).Where (em => em.Name == mn).FirstOrDefault ();
-                       }
-                       #endregion
-
-                       return member != null;
-               }
-       }
-}
diff --git a/src/IML/Node.cs b/src/IML/Node.cs
deleted file mode 100644 (file)
index 2ca90e8..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-//
-// Node.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-using System.Reflection;
-using System.Reflection.Emit;
-using System.Collections.Generic;
-
-namespace Crow.IML
-{
-       /// <summary>
-       /// IML Node are defined with a type and the index in the parent,
-       /// </summary>
-       public struct Node
-       {
-               #region CTOR
-               public Node (Type crowType, int _index = 0)
-               {
-                       CrowType = crowType;
-                       Index = _index;
-               }
-               #endregion
-
-               /// <summary> Current node type</summary>
-               public Type CrowType;
-               /// <summary> Index in parent, -1 for template</summary>
-               public int Index;
-
-               /// <summary>
-               /// retrieve the child addition method depending on the type of this node
-               /// </summary>
-               /// <returns>The child addition method</returns>
-               /// <param name="childIdx">child index or, template root node has index == -1</param>
-               public MethodInfo GetAddMethod(int childIdx){
-                       if (typeof (Group).IsAssignableFrom (CrowType))
-                               return CompilerServices.miAddChild;
-                       if (typeof (Container).IsAssignableFrom (CrowType))
-                               return CompilerServices.miSetChild;
-                       if (typeof (TemplatedContainer).IsAssignableFrom (CrowType))
-                               return childIdx < 0 ? CompilerServices.miLoadTmp : CompilerServices.piContent.GetSetMethod();
-                       if (typeof (TemplatedGroup).IsAssignableFrom (CrowType))
-                               return childIdx < 0 ? CompilerServices.miLoadTmp : CompilerServices.miAddItem;
-                       if (typeof (TemplatedControl).IsAssignableFrom (CrowType))
-                               return CompilerServices.miLoadTmp;
-                       return null;
-               }
-
-               #region Equality Compare
-               public override bool Equals (object obj)
-               {
-                       if (obj == null) 
-                               return false;                   
-                       Node n = (Node)obj;
-                       return CrowType == n.CrowType && Index == n.Index;
-               }
-               public override int GetHashCode ()
-               {
-                       return CrowType.GetHashCode () ^ Index.GetHashCode ();
-               }
-               #endregion
-
-               public bool HasTemplate {
-                       get { return typeof (TemplatedControl).IsAssignableFrom (CrowType);}
-               }
-               public bool IsTemplatedGroup {
-                       get { return typeof (TemplatedGroup).IsAssignableFrom (CrowType);}
-               }
-
-               public static implicit operator string (Node sn)
-               {
-                       return sn.ToString ();
-               }
-               public override string ToString ()
-               {
-                       return string.Format ("{0}.{1}", CrowType.FullName, Index);
-               }
-       }
-}
diff --git a/src/IML/NodeAddress.cs b/src/IML/NodeAddress.cs
deleted file mode 100644 (file)
index 450a9d2..0000000
+++ /dev/null
@@ -1,148 +0,0 @@
-//
-// NodeAddress.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Reflection;
-using System.Reflection.Emit;
-
-namespace Crow.IML
-{
-       /// <summary>
-       /// Node address is a list of nodes from root to leaf defining a unique node
-       /// </summary>
-       public class NodeAddress : List<Node>
-       {
-               #region CTOR
-               public NodeAddress (Node[] nodes) : base(nodes) {}
-               #endregion
-
-               public Type NodeType { get { return Count == 0 ? null : this[this.Count -1].CrowType; }}
-
-               /// <summary>
-               /// Gets the node adress from binding expression starting from this node
-               /// and return in expression remaining part
-               /// </summary>
-               public NodeAddress ResolveExpression (ref string expression){
-                       int ptr = this.Count - 1;
-                       string[] splitedExp = expression.Split ('/');
-
-                       if (splitedExp.Length < 2)//dataSource binding
-                               return null;
-
-                       if (!string.IsNullOrEmpty (splitedExp [0])) {//else bind on current node
-                               //return new NodeAddress (this.Take(ptr+1).ToArray());
-                               if (splitedExp [0] == ".") {//search template root
-                                       ptr--;
-                                       while (ptr >= 0) {
-                                               if (typeof(TemplatedControl).IsAssignableFrom (this [ptr].CrowType))
-                                                       break;
-                                               ptr--;
-                                       }
-                               } else if (splitedExp [0] == "..") { //search starting at current node
-                                       int levelUp = splitedExp.Length - 1;
-                                       if (levelUp > ptr + 1)
-                                               throw new Exception ("Binding error: try to bind outside IML source");
-                                       ptr -= levelUp;
-                               }
-                       }
-                       expression = splitedExp [splitedExp.Length - 1];
-                       //TODO:change Template special address identified with Nodecount = 0 to something not using array count to 0,
-                       //here linq is working without limits checking in compile option
-                       //but defining a 0 capacity array with limits cheking enabled, cause 'out of memory' error
-                       return new NodeAddress (this.Take(ptr+1).ToArray());//[ptr+1];
-                       //Array.Copy (sourceAddr.ToArray (), targetNode, ptr + 1);
-                       //return new NodeAddress (targetNode);
-               }
-               /// <summary>
-               /// get BindingDefinition from binding expression
-               /// </summary>
-               public BindingDefinition GetBindingDef(string sourceMember, string expression){
-                       BindingDefinition bindingDef = new BindingDefinition(this, sourceMember);
-                       if (string.IsNullOrEmpty (expression)) {
-                               return bindingDef;
-                       } else {
-                               if (expression.StartsWith ("²")) {
-                                       bindingDef.TwoWay = true;
-                                       expression = expression.Substring (1);
-                               }
-
-                               string exp = expression;
-                               bindingDef.TargetNA = this.ResolveExpression (ref exp);
-
-                               string [] bindTrg = exp.Split ('.');
-
-                               if (bindTrg.Length == 0)
-                                       throw new Exception ("invalid binding expression: " + expression);
-                               if (bindTrg.Length == 1)
-                                       bindingDef.TargetMember = bindTrg [0];
-                               else {
-                                       if (!string.IsNullOrEmpty(bindTrg[0]))//searchByName
-                                               bindingDef.TargetName = bindTrg[0];
-
-                                       bindingDef.TargetMember = exp.Substring (bindTrg[0].Length + 1);
-                               }
-                       }
-
-                       return bindingDef;
-               }
-
-               #region Object overrides
-               public override bool Equals (object obj)
-               {
-                       if (obj == null) 
-                               return false;
-                       
-                       NodeAddress na = (NodeAddress)obj;
-                       return this.SequenceEqual (na);
-               }
-               public override int GetHashCode ()
-               {
-                       unchecked {
-                               int hash = 19;
-                               foreach (Node n in this)
-                                       hash = hash * 31 + (n == null ? 0 : n.GetHashCode ());  
-                               return hash;
-                       }
-               }
-               public override string ToString ()
-               {
-                       string tmp = "";
-                       foreach (Node n in this)
-                               tmp += string.Format ("{0};", n.Index);                 
-                       return tmp;
-               }
-               #endregion
-       }
-
-       public class NamedNodeAddress : NodeAddress {
-               public string Name;
-               public NamedNodeAddress(string name, Node[] nodes) : base(nodes){
-                       Name = name;
-               }
-       }
-}
diff --git a/src/IML/NodeStack.cs b/src/IML/NodeStack.cs
deleted file mode 100644 (file)
index 80e9156..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-//
-// NodeStack.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-using System.Collections.Generic;
-
-namespace Crow.IML
-{
-       public class NodeStack : Stack<Node>
-       {
-               public NodeStack () : base()
-               {
-               }
-               public void IncrementCurrentNodeIndex(){
-                       Node n = this.Pop();
-                       this.Push (new Node (n.CrowType, n.Index + 1));
-               }
-               public void DecrementCurrentNodeIndex(){
-                       Node n = this.Pop();
-                       this.Push (new Node (n.CrowType, n.Index - 1));
-               }
-               public void ResetCurrentNodeIndex(){                    
-                       this.Push (new Node (this.Pop().CrowType));
-               }
-       }
-}
-
diff --git a/src/IML/Reader.cs b/src/IML/Reader.cs
deleted file mode 100644 (file)
index 72440b6..0000000
+++ /dev/null
@@ -1,224 +0,0 @@
-//
-//  IMLReader.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.Xml;
-using System.IO;
-using System.Reflection;
-using System.Reflection.Emit;
-using System.Linq;
-using System.Collections.Generic;
-
-namespace Crow.IML2
-{
-       public class Reader : XmlReader
-       {               
-               static List<Type> CrowTypes = new List<Type> ();
-
-               public enum SubNodeType{
-                       None,
-                       Child,
-                       Children,
-                       Template,
-                       Content,
-                       Items,
-                       ItemTemplate
-               }
-
-                       //public static Node Parse(string str){
-                       //      string[] tmp = str.Trim ().Split ('.');
-                       //      switch (tmp.Length) {
-                       //      case 1:
-                       //              return new Node ((SubNodeType)int.Parse (tmp [0]));
-                       //      case 2:
-                       //              return new Node ((SubNodeType)int.Parse (tmp [0]), int.Parse (tmp[1]));
-                       //      case 0:
-                       //      default:
-                       //              return new Node ();
-                       //      }
-                       //}
-                       //public static string AddressToString(Node[] address){
-                       //      string tmp = "";
-                       //      foreach (Node n in address) {
-                       //              tmp += n.ToString () + ";";
-                       //      }
-                       //      return string.IsNullOrEmpty(tmp) ? tmp : tmp.Substring (0, tmp.Length - 1);
-                       //}
-                       //public static Node[] AddressFromString(string address) {
-                       //      List<Node> nodes = new List<Node> ();
-                       //      string[] tmp = address.Split (';');
-                       //      for (int i = 0; i < tmp.Length; i++)
-                       //              nodes.Add (Node.Parse (tmp [i]));
-                       //      return nodes.ToArray();
-                       //}
-
-
-               //              public class PropertyBinding {
-               //                      public string OriginePropertyName = "";
-               //                      public MemberAddress Destination;
-               //              }
-
-               public Type RootType = null;
-               public Context context;
-
-               InstanciatorInvoker loader = null;
-               DynamicMethod dm = null;
-
-               ILGenerator il { get { return context.il; }}
-
-               /// <summary>
-               /// Finalize instatiator MSIL and return LoaderInvoker delegate
-               /// </summary>
-               public InstanciatorInvoker GetLoader(){
-                       if (loader != null)
-                               return loader;
-
-                       il.Emit(OpCodes.Ret);
-                       loader = (InstanciatorInvoker)dm.CreateDelegate (typeof(InstanciatorInvoker));
-                       return loader;
-            XmlReader r = XmlReader.Create("test.xml");
-               }
-
-               protected int curDepth {
-                       get { return context.nodesStack.Count - 1;}
-               }
-               protected Node curNode {
-                       get { return context.nodesStack.Peek(); }
-               }
-               //protected Stack<int> curTemplateDepth = new Stack<int>(new int[] {0});        //current template root depth
-
-               #region CTOR
-               public Reader (string path)
-                       : this(Interface.GetStreamFromPath (path)){
-               }
-               public Reader (Stream stream)
-                       : base(stream)
-               {
-                       createInstantiator ();
-               }
-               /// <summary>
-               /// Used to parse xmlFrament with same code generator linked
-               /// If ilGen=null, a new Code Generator will be created.
-               /// </summary>
-               public Reader (Context ctx, string xmlFragment)
-                       : base(xmlFragment, XmlNodeType.Element,null){
-
-                       context = ctx;
-//
-//                     if (IMLCtx != null)
-//                             return;
-//
-//                     createInstantiator();
-               }
-               #endregion
-
-
-               void createBindingDelegates(){
-//                     foreach (Dictionary<string, MemberAddress> pb in IMLCtx.PropertyBindings) {
-//                             
-//                     }
-               }
-
-
-               void registerPropertyBinding(string origNode, string origProp, MemberAddress ma){
-                       if (!context.PropertyBindings.ContainsKey(origNode))
-                               context.PropertyBindings [origNode] = new Dictionary<string, MemberAddress> ();
-                       context.PropertyBindings [origNode] [origProp] = ma;
-               }
-               void readPropertyBinding(string srcProperty, string expression){
-                       //if binding exp = '{}' => binding is done on datasource
-                       if (string.IsNullOrEmpty (expression)) {
-                               registerPropertyBinding ("DS", "", new MemberAddress (context.nodesStack.ToArray (), srcProperty));
-                               return;
-                       }
-
-//                     if (expression.StartsWith ("²")) {
-//                             expression = expression.Substring (1);
-//                             TwoWayBinding = true;
-//                     }
-//
-                       string [] bindingExp = expression.Split ('/');
-
-
-                       if (bindingExp.Length == 1) {
-                               registerPropertyBinding ("DS", bindingExp [0],
-                                       new MemberAddress (context.nodesStack.ToArray (), srcProperty));
-                               return;
-                       }
-                               
-                       string targetName = "";
-                       string nodeId = "";
-                       Node[] target = context.nodesStack.ToArray ();
-
-                       int nodeIdx = target.Length - 1;//index of target in nodeStack 
-                       int ptr = 0;//pointer in bindingExp splitted on '/'
-
-//                             //if exp start with '/' => WidgetName.property
-                       if (string.IsNullOrEmpty (bindingExp [0])) {                                    
-                               string[] bindTrg = bindingExp [1].Split ('.');
-                               if (bindTrg.Length == 1) {
-                                       nodeId = Node.AddressToString (target);
-                                       targetName = bindTrg [0];
-                               }else if (bindTrg.Length == 2) {
-                                       nodeId = context.Names [bindTrg [0]];
-                                       targetName = bindTrg [1];
-                               } else
-                                       throw new Exception ("Syntax error in binding, expected 'go dot member'");
-                       } else {
-                               if (bindingExp [0] == ".") { //template binding
-                                       //parse nodes up until template node
-                                       while (nodeIdx > 0) {
-                                               if (target [nodeIdx].Type == SubNodeType.Template)
-                                                       break;
-                                               nodeIdx--;
-                                       }
-                                       ptr++;
-                               } else {
-                                       while (ptr < bindingExp.Length - 1) {
-                                               if (bindingExp [ptr] == "..")
-                                                       nodeIdx--;
-                                               else
-                                                       break;
-                                               ptr++;
-                                       }
-                               }
-                               Node[] origine = new Node[nodeIdx + 1];
-                               try {
-                                       Array.Copy (target, origine, nodeIdx + 1);
-
-                                       int destLength = target.Length - nodeIdx;
-                                       Node[] dest = new Node[destLength];
-                                       Array.Copy (target, nodeIdx, dest, 0, destLength);
-
-                               } catch (Exception ex) {
-                                       System.Diagnostics.Debug.WriteLine (ex.ToString ());
-                               }
-
-
-                               nodeId = Node.AddressToString (origine);
-                               targetName = bindingExp [ptr];
-                       }
-
-                       registerPropertyBinding (nodeId, targetName, new MemberAddress (context.nodesStack.ToArray (), srcProperty));
-               }
-
-       }
-}
-
diff --git a/src/IMLAttributes.cs b/src/IMLAttributes.cs
deleted file mode 100644 (file)
index 929fd4f..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-//
-// IMLAttributes.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp_bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-using System;
-
-namespace Crow
-{
-       public class DesignIgnore : Attribute
-       {               
-       }
-
-       public class DesignCategory : Attribute
-       {
-               public string Name { get; set; }
-
-               public DesignCategory (string name)
-               {
-                       Name = name;
-               }
-       }
-}
-
diff --git a/src/Input/ButtonState.cs b/src/Input/ButtonState.cs
deleted file mode 100644 (file)
index 17849ca..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
- #region License
- //
- // The Open Toolkit Library License
- //
- // Copyright (c) 2006 - 2010 the Open Toolkit library.
- //
- // Permission is hereby granted, free of charge, to any person obtaining a copy
- // of this software and associated documentation files (the "Software"), to deal
- // in the Software without restriction, including without limitation the rights to
- // use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
- // the Software, and to permit persons to whom the Software is furnished to do
- // so, subject to the following conditions:
- //
- // The above copyright notice and this permission notice shall be included in all
- // copies or substantial portions of the Software.
- //
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
- // OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
- // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
- // WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- // OTHER DEALINGS IN THE SOFTWARE.
- //
- #endregion
-
-namespace Crow
-{
-    /// <summary>
-    /// Enumerates possible mouse button states.
-    /// </summary>
-    public enum ButtonState
-    {
-       /// <summary>
-       /// Indicates that a mouse button is released.
-       /// </summary>
-       Released = 0,
-
-       /// <summary>
-       /// Indicates that a mouse button is pressed.
-       /// </summary>
-       Pressed = 1
-    }
-}
diff --git a/src/Input/Buttons.cs b/src/Input/Buttons.cs
deleted file mode 100644 (file)
index ebf3bc4..0000000
+++ /dev/null
@@ -1,166 +0,0 @@
-//
-// GamePadButton.cs
-//
-// Author:
-//       robert <${AuthorEmail}>
-//
-// Copyright (c) 2012 robert
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-using System;
-
-namespace Crow
-{
-    /// <summary>
-    /// Enumerates available buttons for a <c>GamePad</c> device.
-    /// </summary>
-    [Flags]
-    public enum Buttons
-    {
-       /// <summary>
-       /// DPad up direction button
-       /// </summary>
-       DPadUp = 1 << 0,
-
-       /// <summary>
-       /// DPad down direction button
-       /// </summary>
-       DPadDown = 1 << 1,
-
-       /// <summary>
-       /// DPad left direction button
-       /// </summary>
-       DPadLeft = 1 << 2,
-
-       /// <summary>
-       /// DPad right direction button
-       /// </summary>
-       DPadRight = 1 << 3,
-
-       /// <summary>
-       /// Start button
-       /// </summary>
-       Start = 1 << 4,
-
-       /// <summary>
-       /// Back button
-       /// </summary>
-       Back = 1 << 5,
-
-       /// <summary>
-       /// Left stick button
-       /// </summary>
-       LeftStick = 1 << 6,
-
-       /// <summary>
-       /// Right stick button
-       /// </summary>
-       RightStick = 1 << 7,
-
-       /// <summary>
-       /// Left shoulder button
-       /// </summary>
-       LeftShoulder = 1 << 8,
-
-       /// <summary>
-       /// Right shoulder button
-       /// </summary>
-       RightShoulder = 1 << 9,
-
-       /// <summary>
-       /// Home button
-       /// </summary>
-       Home = 1 << 11,
-
-       /// <summary>
-       /// Home button
-       /// </summary>
-       BigButton = Home,
-
-       /// <summary>
-       /// A button
-       /// </summary>
-       A = 1 << 12,
-
-       /// <summary>
-       /// B button
-       /// </summary>
-       B = 1 << 13,
-
-       /// <summary>
-       /// X button
-       /// </summary>
-       X = 1 << 14,
-
-       /// <summary>
-       /// Y button
-       /// </summary>
-       Y = 1 << 15,
-
-       /// <summary>
-       /// Left thumbstick left direction button
-       /// </summary>
-       LeftThumbstickLeft = 1 << 21,
-
-       /// <summary>
-       /// Right trigger button
-       /// </summary>
-       RightTrigger = 1 << 22,
-
-       /// <summary>
-       /// Left trigger button
-       /// </summary>
-       LeftTrigger = 1 << 23,
-
-       /// <summary>
-       /// Right thumbstick up direction button
-       /// </summary>
-       RightThumbstickUp = 1 << 24,
-
-       /// <summary>
-       /// Right thumbstick down direction button
-       /// </summary>
-       RightThumbstickDown = 1 << 25,
-
-       /// <summary>
-       /// Right stick right direction button
-       /// </summary>
-       RightThumbstickRight = 1 << 26,
-
-       /// <summary>
-       /// Right stick left direction button
-       /// </summary>
-       RightThumbstickLeft = 1 << 27,
-
-       /// <summary>
-       /// Left stick up direction button
-       /// </summary>
-       LeftThumbstickUp = 1 << 28,
-
-       /// <summary>
-       /// Left stick down direction button
-       /// </summary>
-       LeftThumbstickDown = 1 << 29,
-
-       /// <summary>
-       /// Left stick right direction button
-       /// </summary>
-       LeftThumbstickRight = 1 << 30,
-    }
-}
diff --git a/src/Input/Key.cs b/src/Input/Key.cs
deleted file mode 100644 (file)
index ee2cfb6..0000000
+++ /dev/null
@@ -1,2442 +0,0 @@
- #region License
- //
- // The Open Toolkit Library License
- //
- // Copyright (c) 2006 - 2009 the Open Toolkit library.
- //
- // Permission is hereby granted, free of charge, to any person obtaining a copy
- // of this software and associated documentation files (the "Software"), to deal
- // in the Software without restriction, including without limitation the rights to
- // use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
- // the Software, and to permit persons to whom the Software is furnished to do
- // so, subject to the following conditions:
- //
- // The above copyright notice and this permission notice shall be included in all
- // copies or substantial portions of the Software.
- //
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
- // OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
- // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
- // WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- // OTHER DEALINGS IN THE SOFTWARE.
- //
- #endregion
-
-namespace Crow
-{
-    /// <summary>
-    /// The available keyboard keys.
-    /// </summary>
-    public enum Key : int
-    {
-               NoSymbol                                                = 0x000000,
-               VoidSymbol                                              = 0xffffff,
-               BackSpace                                               = 0xff08,
-               Tab                                                             = 0xff09,
-               Linefeed                                                = 0xff0a,
-               Clear                                                   = 0xff0b,
-               Return                                                  = 0xff0d,
-               Pause                                                   = 0xff13,
-               Scroll_Lock                                             = 0xff14,
-               Sys_Req                                                 = 0xff15,
-               Escape                                                  = 0xff1b,
-               Delete                                                  = 0xffff,
-               Multi_key                                               = 0xff20,
-               Codeinput                                               = 0xff37,
-               SingleCandidate                                 = 0xff3c,
-               MultipleCandidate                               = 0xff3d,
-               PreviousCandidate                               = 0xff3e,
-               Kanji                                                   = 0xff21,
-               Muhenkan                                                = 0xff22,
-               Henkan_Mode                                             = 0xff23,
-               Henkan                                                  = 0xff23,
-               Romaji                                                  = 0xff24,
-               Hiragana                                                = 0xff25,
-               Katakana                                                = 0xff26,
-               Hiragana_Katakana                               = 0xff27,
-               Zenkaku                                                 = 0xff28,
-               Hankaku                                                 = 0xff29,
-               Zenkaku_Hankaku                                 = 0xff2a,
-               Touroku                                                 = 0xff2b,
-               Massyo                                                  = 0xff2c,
-               Kana_Lock                                               = 0xff2d,
-               Kana_Shift                                              = 0xff2e,
-               Eisu_Shift                                              = 0xff2f,
-               Eisu_toggle                                             = 0xff30,
-               Kanji_Bangou                                    = 0xff37,
-               Zen_Koho                                                = 0xff3d,
-               Mae_Koho                                                = 0xff3e,
-               Home                                                    = 0xff50,
-               Left                                                    = 0xff51,
-               Up                                                              = 0xff52,
-               Right                                                   = 0xff53,
-               Down                                                    = 0xff54,
-               Prior                                                   = 0xff55,
-               Page_Up                                                 = 0xff55,
-               Next                                                    = 0xff56,
-               Page_Down                                               = 0xff56,
-               End                                                             = 0xff57,
-               Begin                                                   = 0xff58,
-               Select                                                  = 0xff60,
-               Print                                                   = 0xff61,
-               Execute                                                 = 0xff62,
-               Insert                                                  = 0xff63,
-               Undo                                                    = 0xff65,
-               Redo                                                    = 0xff66,
-               Menu                                                    = 0xff67,
-               Find                                                    = 0xff68,
-               Cancel                                                  = 0xff69,
-               Help                                                    = 0xff6a,
-               Break                                                   = 0xff6b,
-               Mode_switch                                             = 0xff7e,
-               script_switch                                   = 0xff7e,
-               Num_Lock                                                = 0xff7f,
-               KP_Space                                                = 0xff80,
-               KP_Tab                                                  = 0xff89,
-               KP_Enter                                                = 0xff8d,
-               KP_F1                                                   = 0xff91,
-               KP_F2                                                   = 0xff92,
-               KP_F3                                                   = 0xff93,
-               KP_F4                                                   = 0xff94,
-               KP_Home                                                 = 0xff95,
-               KP_Left                                                 = 0xff96,
-               KP_Up                                                   = 0xff97,
-               KP_Right                                                = 0xff98,
-               KP_Down                                                 = 0xff99,
-               KP_Prior                                                = 0xff9a,
-               KP_Page_Up                                              = 0xff9a,
-               KP_Next                                                 = 0xff9b,
-               KP_Page_Down                                    = 0xff9b,
-               KP_End                                                  = 0xff9c,
-               KP_Begin                                                = 0xff9d,
-               KP_Insert                                               = 0xff9e,
-               KP_Delete                                               = 0xff9f,
-               KP_Equal                                                = 0xffbd,
-               KP_Multiply                                             = 0xffaa,
-               KP_Add                                                  = 0xffab,
-               KP_Separator                                    = 0xffac,
-               KP_Subtract                                             = 0xffad,
-               KP_Decimal                                              = 0xffae,
-               KP_Divide                                               = 0xffaf,
-               KP_0                                                    = 0xffb0,
-               KP_1                                                    = 0xffb1,
-               KP_2                                                    = 0xffb2,
-               KP_3                                                    = 0xffb3,
-               KP_4                                                    = 0xffb4,
-               KP_5                                                    = 0xffb5,
-               KP_6                                                    = 0xffb6,
-               KP_7                                                    = 0xffb7,
-               KP_8                                                    = 0xffb8,
-               KP_9                                                    = 0xffb9,
-               F1                                                              = 0xffbe,
-               F2                                                              = 0xffbf,
-               F3                                                              = 0xffc0,
-               F4                                                              = 0xffc1,
-               F5                                                              = 0xffc2,
-               F6                                                              = 0xffc3,
-               F7                                                              = 0xffc4,
-               F8                                                              = 0xffc5,
-               F9                                                              = 0xffc6,
-               F10                                                             = 0xffc7,
-               F11                                                             = 0xffc8,
-               L1                                                              = 0xffc8,
-               F12                                                             = 0xffc9,
-               L2                                                              = 0xffc9,
-               F13                                                             = 0xffca,
-               L3                                                              = 0xffca,
-               F14                                                             = 0xffcb,
-               L4                                                              = 0xffcb,
-               F15                                                             = 0xffcc,
-               L5                                                              = 0xffcc,
-               F16                                                             = 0xffcd,
-               L6                                                              = 0xffcd,
-               F17                                                             = 0xffce,
-               L7                                                              = 0xffce,
-               F18                                                             = 0xffcf,
-               L8                                                              = 0xffcf,
-               F19                                                             = 0xffd0,
-               L9                                                              = 0xffd0,
-               F20                                                             = 0xffd1,
-               L10                                                             = 0xffd1,
-               F21                                                             = 0xffd2,
-               R1                                                              = 0xffd2,
-               F22                                                             = 0xffd3,
-               R2                                                              = 0xffd3,
-               F23                                                             = 0xffd4,
-               R3                                                              = 0xffd4,
-               F24                                                             = 0xffd5,
-               R4                                                              = 0xffd5,
-               F25                                                             = 0xffd6,
-               R5                                                              = 0xffd6,
-               F26                                                             = 0xffd7,
-               R6                                                              = 0xffd7,
-               F27                                                             = 0xffd8,
-               R7                                                              = 0xffd8,
-               F28                                                             = 0xffd9,
-               R8                                                              = 0xffd9,
-               F29                                                             = 0xffda,
-               R9                                                              = 0xffda,
-               F30                                                             = 0xffdb,
-               R10                                                             = 0xffdb,
-               F31                                                             = 0xffdc,
-               R11                                                             = 0xffdc,
-               F32                                                             = 0xffdd,
-               R12                                                             = 0xffdd,
-               F33                                                             = 0xffde,
-               R13                                                             = 0xffde,
-               F34                                                             = 0xffdf,
-               R14                                                             = 0xffdf,
-               F35                                                             = 0xffe0,
-               R15                                                             = 0xffe0,
-               Shift_L                                                 = 0xffe1,
-               Shift_R                                                 = 0xffe2,
-               Control_L                                               = 0xffe3,
-               Control_R                                               = 0xffe4,
-               Caps_Lock                                               = 0xffe5,
-               Shift_Lock                                              = 0xffe6,
-               Meta_L                                                  = 0xffe7,
-               Meta_R                                                  = 0xffe8,
-               Alt_L                                                   = 0xffe9,
-               Alt_R                                                   = 0xffea,
-               Super_L                                                 = 0xffeb,
-               Super_R                                                 = 0xffec,
-               Hyper_L                                                 = 0xffed,
-               Hyper_R                                                 = 0xffee,
-               ISO_Lock                                                = 0xfe01,
-               ISO_Level2_Latch                                = 0xfe02,
-               ISO_Level3_Shift                                = 0xfe03,
-               ISO_Level3_Latch                                = 0xfe04,
-               ISO_Level3_Lock                                 = 0xfe05,
-               ISO_Level5_Shift                                = 0xfe11,
-               ISO_Level5_Latch                                = 0xfe12,
-               ISO_Level5_Lock                                 = 0xfe13,
-               ISO_Group_Shift                                 = 0xff7e,
-               ISO_Group_Latch                                 = 0xfe06,
-               ISO_Group_Lock                                  = 0xfe07,
-               ISO_Next_Group                                  = 0xfe08,
-               ISO_Next_Group_Lock                             = 0xfe09,
-               ISO_Prev_Group                                  = 0xfe0a,
-               ISO_Prev_Group_Lock                             = 0xfe0b,
-               ISO_First_Group                                 = 0xfe0c,
-               ISO_First_Group_Lock                    = 0xfe0d,
-               ISO_Last_Group                                  = 0xfe0e,
-               ISO_Last_Group_Lock                             = 0xfe0f,
-               ISO_Left_Tab                                    = 0xfe20,
-               ISO_Move_Line_Up                                = 0xfe21,
-               ISO_Move_Line_Down                              = 0xfe22,
-               ISO_Partial_Line_Up                             = 0xfe23,
-               ISO_Partial_Line_Down                   = 0xfe24,
-               ISO_Partial_Space_Left                  = 0xfe25,
-               ISO_Partial_Space_Right                 = 0xfe26,
-               ISO_Set_Margin_Left                             = 0xfe27,
-               ISO_Set_Margin_Right                    = 0xfe28,
-               ISO_Release_Margin_Left                 = 0xfe29,
-               ISO_Release_Margin_Right                = 0xfe2a,
-               ISO_Release_Both_Margins                = 0xfe2b,
-               ISO_Fast_Cursor_Left                    = 0xfe2c,
-               ISO_Fast_Cursor_Right                   = 0xfe2d,
-               ISO_Fast_Cursor_Up                              = 0xfe2e,
-               ISO_Fast_Cursor_Down                    = 0xfe2f,
-               ISO_Continuous_Underline                = 0xfe30,
-               ISO_Discontinuous_Underline             = 0xfe31,
-               ISO_Emphasize                                   = 0xfe32,
-               ISO_Center_Object                               = 0xfe33,
-               ISO_Enter                                               = 0xfe34,
-               dead_grave                                              = 0xfe50,
-               dead_acute                                              = 0xfe51,
-               dead_circumflex                                 = 0xfe52,
-               dead_tilde                                              = 0xfe53,
-               dead_perispomeni                                = 0xfe53,
-               dead_macron                                             = 0xfe54,
-               dead_breve                                              = 0xfe55,
-               dead_abovedot                                   = 0xfe56,
-               dead_diaeresis                                  = 0xfe57,
-               dead_abovering                                  = 0xfe58,
-               dead_doubleacute                                = 0xfe59,
-               dead_caron                                              = 0xfe5a,
-               dead_cedilla                                    = 0xfe5b,
-               dead_ogonek                                             = 0xfe5c,
-               dead_iota                                               = 0xfe5d,
-               dead_voiced_sound                               = 0xfe5e,
-               dead_semivoiced_sound                   = 0xfe5f,
-               dead_belowdot                                   = 0xfe60,
-               dead_hook                                               = 0xfe61,
-               dead_horn                                               = 0xfe62,
-               dead_stroke                                             = 0xfe63,
-               dead_abovecomma                                 = 0xfe64,
-               dead_psili                                              = 0xfe64,
-               dead_abovereversedcomma                 = 0xfe65,
-               dead_dasia                                              = 0xfe65,
-               dead_doublegrave                                = 0xfe66,
-               dead_belowring                                  = 0xfe67,
-               dead_belowmacron                                = 0xfe68,
-               dead_belowcircumflex                    = 0xfe69,
-               dead_belowtilde                                 = 0xfe6a,
-               dead_belowbreve                                 = 0xfe6b,
-               dead_belowdiaeresis                             = 0xfe6c,
-               dead_invertedbreve                              = 0xfe6d,
-               dead_belowcomma                                 = 0xfe6e,
-               dead_currency                                   = 0xfe6f,
-               dead_lowline                                    = 0xfe90,
-               dead_aboveverticalline                  = 0xfe91,
-               dead_belowverticalline                  = 0xfe92,
-               dead_longsolidusoverlay                 = 0xfe93,
-               dead_a                                                  = 0xfe80,
-               dead_A                                                  = 0xfe81,
-               dead_e                                                  = 0xfe82,
-               dead_E                                                  = 0xfe83,
-               dead_i                                                  = 0xfe84,
-               dead_I                                                  = 0xfe85,
-               dead_o                                                  = 0xfe86,
-               dead_O                                                  = 0xfe87,
-               dead_u                                                  = 0xfe88,
-               dead_U                                                  = 0xfe89,
-               dead_small_schwa                                = 0xfe8a,
-               dead_capital_schwa                              = 0xfe8b,
-               dead_greek                                              = 0xfe8c,
-               First_Virtual_Screen                    = 0xfed0,
-               Prev_Virtual_Screen                             = 0xfed1,
-               Next_Virtual_Screen                             = 0xfed2,
-               Last_Virtual_Screen                             = 0xfed4,
-               Terminate_Server                                = 0xfed5,
-               AccessX_Enable                                  = 0xfe70,
-               AccessX_Feedback_Enable                 = 0xfe71,
-               RepeatKeys_Enable                               = 0xfe72,
-               SlowKeys_Enable                                 = 0xfe73,
-               BounceKeys_Enable                               = 0xfe74,
-               StickyKeys_Enable                               = 0xfe75,
-               MouseKeys_Enable                                = 0xfe76,
-               MouseKeys_Accel_Enable                  = 0xfe77,
-               Overlay1_Enable                                 = 0xfe78,
-               Overlay2_Enable                                 = 0xfe79,
-               AudibleBell_Enable                              = 0xfe7a,
-               Pointer_Left                                    = 0xfee0,
-               Pointer_Right                                   = 0xfee1,
-               Pointer_Up                                              = 0xfee2,
-               Pointer_Down                                    = 0xfee3,
-               Pointer_UpLeft                                  = 0xfee4,
-               Pointer_UpRight                                 = 0xfee5,
-               Pointer_DownLeft                                = 0xfee6,
-               Pointer_DownRight                               = 0xfee7,
-               Pointer_Button_Dflt                             = 0xfee8,
-               Pointer_Button1                                 = 0xfee9,
-               Pointer_Button2                                 = 0xfeea,
-               Pointer_Button3                                 = 0xfeeb,
-               Pointer_Button4                                 = 0xfeec,
-               Pointer_Button5                                 = 0xfeed,
-               Pointer_DblClick_Dflt                   = 0xfeee,
-               Pointer_DblClick1                               = 0xfeef,
-               Pointer_DblClick2                               = 0xfef0,
-               Pointer_DblClick3                               = 0xfef1,
-               Pointer_DblClick4                               = 0xfef2,
-               Pointer_DblClick5                               = 0xfef3,
-               Pointer_Drag_Dflt                               = 0xfef4,
-               Pointer_Drag1                                   = 0xfef5,
-               Pointer_Drag2                                   = 0xfef6,
-               Pointer_Drag3                                   = 0xfef7,
-               Pointer_Drag4                                   = 0xfef8,
-               Pointer_Drag5                                   = 0xfefd,
-               Pointer_EnableKeys                              = 0xfef9,
-               Pointer_Accelerate                              = 0xfefa,
-               Pointer_DfltBtnNext                             = 0xfefb,
-               Pointer_DfltBtnPrev                             = 0xfefc,
-               ch                                                              = 0xfea0,
-               Ch                                                              = 0xfea1,
-               CH                                                              = 0xfea2,
-               c_h                                                             = 0xfea3,
-               C_h                                                             = 0xfea4,
-               C_H                                                             = 0xfea5,
-               key_3270_Duplicate                              = 0xfd01,
-               key_3270_FieldMark                              = 0xfd02,
-               key_3270_Right2                                 = 0xfd03,
-               key_3270_Left2                                  = 0xfd04,
-               key_3270_BackTab                                = 0xfd05,
-               key_3270_EraseEOF                               = 0xfd06,
-               key_3270_EraseInput                             = 0xfd07,
-               key_3270_Reset                                  = 0xfd08,
-               key_3270_Quit                                   = 0xfd09,
-               key_3270_PA1                                    = 0xfd0a,
-               key_3270_PA2                                    = 0xfd0b,
-               key_3270_PA3                                    = 0xfd0c,
-               key_3270_Test                                   = 0xfd0d,
-               key_3270_Attn                                   = 0xfd0e,
-               key_3270_CursorBlink                    = 0xfd0f,
-               key_3270_AltCursor                              = 0xfd10,
-               key_3270_KeyClick                               = 0xfd11,
-               key_3270_Jump                                   = 0xfd12,
-               key_3270_Ident                                  = 0xfd13,
-               key_3270_Rule                                   = 0xfd14,
-               key_3270_Copy                                   = 0xfd15,
-               key_3270_Play                                   = 0xfd16,
-               key_3270_Setup                                  = 0xfd17,
-               key_3270_Record                                 = 0xfd18,
-               key_3270_ChangeScreen                   = 0xfd19,
-               key_3270_DeleteWord                             = 0xfd1a,
-               key_3270_ExSelect                               = 0xfd1b,
-               key_3270_CursorSelect                   = 0xfd1c,
-               key_3270_PrintScreen                    = 0xfd1d,
-               key_3270_Enter                                  = 0xfd1e,
-               space                                                   = 0x0020,
-               exclam                                                  = 0x0021,
-               quotedbl                                                = 0x0022,
-               numbersign                                              = 0x0023,
-               dollar                                                  = 0x0024,
-               percent                                                 = 0x0025,
-               ampersand                                               = 0x0026,
-               apostrophe                                              = 0x0027,
-               quoteright                                              = 0x0027,
-               parenleft                                               = 0x0028,
-               parenright                                              = 0x0029,
-               asterisk                                                = 0x002a,
-               plus                                                    = 0x002b,
-               comma                                                   = 0x002c,
-               minus                                                   = 0x002d,
-               period                                                  = 0x002e,
-               slash                                                   = 0x002f,
-               key_0                                                   = 0x0030,
-               key_1                                                   = 0x0031,
-               key_2                                                   = 0x0032,
-               key_3                                                   = 0x0033,
-               key_4                                                   = 0x0034,
-               key_5                                                   = 0x0035,
-               key_6                                                   = 0x0036,
-               key_7                                                   = 0x0037,
-               key_8                                                   = 0x0038,
-               key_9                                                   = 0x0039,
-               colon                                                   = 0x003a,
-               semicolon                                               = 0x003b,
-               less                                                    = 0x003c,
-               equal                                                   = 0x003d,
-               greater                                                 = 0x003e,
-               question                                                = 0x003f,
-               at                                                              = 0x0040,
-               A                                                               = 0x0041,
-               B                                                               = 0x0042,
-               C                                                               = 0x0043,
-               D                                                               = 0x0044,
-               E                                                               = 0x0045,
-               F                                                               = 0x0046,
-               G                                                               = 0x0047,
-               H                                                               = 0x0048,
-               I                                                               = 0x0049,
-               J                                                               = 0x004a,
-               K                                                               = 0x004b,
-               L                                                               = 0x004c,
-               M                                                               = 0x004d,
-               N                                                               = 0x004e,
-               O                                                               = 0x004f,
-               P                                                               = 0x0050,
-               Q                                                               = 0x0051,
-               R                                                               = 0x0052,
-               S                                                               = 0x0053,
-               T                                                               = 0x0054,
-               U                                                               = 0x0055,
-               V                                                               = 0x0056,
-               W                                                               = 0x0057,
-               X                                                               = 0x0058,
-               Y                                                               = 0x0059,
-               Z                                                               = 0x005a,
-               bracketleft                                             = 0x005b,
-               backslash                                               = 0x005c,
-               bracketright                                    = 0x005d,
-               asciicircum                                             = 0x005e,
-               underscore                                              = 0x005f,
-               grave                                                   = 0x0060,
-               quoteleft                                               = 0x0060,
-               a                                                               = 0x0061,
-               b                                                               = 0x0062,
-               c                                                               = 0x0063,
-               d                                                               = 0x0064,
-               e                                                               = 0x0065,
-               f                                                               = 0x0066,
-               g                                                               = 0x0067,
-               h                                                               = 0x0068,
-               i                                                               = 0x0069,
-               j                                                               = 0x006a,
-               k                                                               = 0x006b,
-               l                                                               = 0x006c,
-               m                                                               = 0x006d,
-               n                                                               = 0x006e,
-               o                                                               = 0x006f,
-               p                                                               = 0x0070,
-               q                                                               = 0x0071,
-               r                                                               = 0x0072,
-               s                                                               = 0x0073,
-               t                                                               = 0x0074,
-               u                                                               = 0x0075,
-               v                                                               = 0x0076,
-               w                                                               = 0x0077,
-               x                                                               = 0x0078,
-               y                                                               = 0x0079,
-               z                                                               = 0x007a,
-               braceleft                                               = 0x007b,
-               bar                                                             = 0x007c,
-               braceright                                              = 0x007d,
-               asciitilde                                              = 0x007e,
-               nobreakspace                                    = 0x00a0,
-               exclamdown                                              = 0x00a1,
-               cent                                                    = 0x00a2,
-               sterling                                                = 0x00a3,
-               currency                                                = 0x00a4,
-               yen                                                             = 0x00a5,
-               brokenbar                                               = 0x00a6,
-               section                                                 = 0x00a7,
-               diaeresis                                               = 0x00a8,
-               copyright                                               = 0x00a9,
-               ordfeminine                                             = 0x00aa,
-               guillemotleft                                   = 0x00ab,
-               notsign                                                 = 0x00ac,
-               hyphen                                                  = 0x00ad,
-               registered                                              = 0x00ae,
-               macron                                                  = 0x00af,
-               degree                                                  = 0x00b0,
-               plusminus                                               = 0x00b1,
-               twosuperior                                             = 0x00b2,
-               threesuperior                                   = 0x00b3,
-               acute                                                   = 0x00b4,
-               mu                                                              = 0x00b5,
-               paragraph                                               = 0x00b6,
-               periodcentered                                  = 0x00b7,
-               cedilla                                                 = 0x00b8,
-               onesuperior                                             = 0x00b9,
-               masculine                                               = 0x00ba,
-               guillemotright                                  = 0x00bb,
-               onequarter                                              = 0x00bc,
-               onehalf                                                 = 0x00bd,
-               threequarters                                   = 0x00be,
-               questiondown                                    = 0x00bf,
-               Agrave                                                  = 0x00c0,
-               Aacute                                                  = 0x00c1,
-               Acircumflex                                             = 0x00c2,
-               Atilde                                                  = 0x00c3,
-               Adiaeresis                                              = 0x00c4,
-               Aring                                                   = 0x00c5,
-               AE                                                              = 0x00c6,
-               Ccedilla                                                = 0x00c7,
-               Egrave                                                  = 0x00c8,
-               Eacute                                                  = 0x00c9,
-               Ecircumflex                                             = 0x00ca,
-               Ediaeresis                                              = 0x00cb,
-               Igrave                                                  = 0x00cc,
-               Iacute                                                  = 0x00cd,
-               Icircumflex                                             = 0x00ce,
-               Idiaeresis                                              = 0x00cf,
-               ETH                                                             = 0x00d0,
-               Eth                                                             = 0x00d0,
-               Ntilde                                                  = 0x00d1,
-               Ograve                                                  = 0x00d2,
-               Oacute                                                  = 0x00d3,
-               Ocircumflex                                             = 0x00d4,
-               Otilde                                                  = 0x00d5,
-               Odiaeresis                                              = 0x00d6,
-               multiply                                                = 0x00d7,
-               Oslash                                                  = 0x00d8,
-               Ooblique                                                = 0x00d8,
-               Ugrave                                                  = 0x00d9,
-               Uacute                                                  = 0x00da,
-               Ucircumflex                                             = 0x00db,
-               Udiaeresis                                              = 0x00dc,
-               Yacute                                                  = 0x00dd,
-               THORN                                                   = 0x00de,
-               Thorn                                                   = 0x00de,
-               ssharp                                                  = 0x00df,
-               agrave                                                  = 0x00e0,
-               aacute                                                  = 0x00e1,
-               acircumflex                                             = 0x00e2,
-               atilde                                                  = 0x00e3,
-               adiaeresis                                              = 0x00e4,
-               aring                                                   = 0x00e5,
-               ae                                                              = 0x00e6,
-               ccedilla                                                = 0x00e7,
-               egrave                                                  = 0x00e8,
-               eacute                                                  = 0x00e9,
-               ecircumflex                                             = 0x00ea,
-               ediaeresis                                              = 0x00eb,
-               igrave                                                  = 0x00ec,
-               iacute                                                  = 0x00ed,
-               icircumflex                                             = 0x00ee,
-               idiaeresis                                              = 0x00ef,
-               eth                                                             = 0x00f0,
-               ntilde                                                  = 0x00f1,
-               ograve                                                  = 0x00f2,
-               oacute                                                  = 0x00f3,
-               ocircumflex                                             = 0x00f4,
-               otilde                                                  = 0x00f5,
-               odiaeresis                                              = 0x00f6,
-               division                                                = 0x00f7,
-               oslash                                                  = 0x00f8,
-               ooblique                                                = 0x00f8,
-               ugrave                                                  = 0x00f9,
-               uacute                                                  = 0x00fa,
-               ucircumflex                                             = 0x00fb,
-               udiaeresis                                              = 0x00fc,
-               yacute                                                  = 0x00fd,
-               thorn                                                   = 0x00fe,
-               ydiaeresis                                              = 0x00ff,
-               Aogonek                                                 = 0x01a1,
-               breve                                                   = 0x01a2,
-               Lstroke                                                 = 0x01a3,
-               Lcaron                                                  = 0x01a5,
-               Sacute                                                  = 0x01a6,
-               Scaron                                                  = 0x01a9,
-               Scedilla                                                = 0x01aa,
-               Tcaron                                                  = 0x01ab,
-               Zacute                                                  = 0x01ac,
-               Zcaron                                                  = 0x01ae,
-               Zabovedot                                               = 0x01af,
-               aogonek                                                 = 0x01b1,
-               ogonek                                                  = 0x01b2,
-               lstroke                                                 = 0x01b3,
-               lcaron                                                  = 0x01b5,
-               sacute                                                  = 0x01b6,
-               caron                                                   = 0x01b7,
-               scaron                                                  = 0x01b9,
-               scedilla                                                = 0x01ba,
-               tcaron                                                  = 0x01bb,
-               zacute                                                  = 0x01bc,
-               doubleacute                                             = 0x01bd,
-               zcaron                                                  = 0x01be,
-               zabovedot                                               = 0x01bf,
-               Racute                                                  = 0x01c0,
-               Abreve                                                  = 0x01c3,
-               Lacute                                                  = 0x01c5,
-               Cacute                                                  = 0x01c6,
-               Ccaron                                                  = 0x01c8,
-               Eogonek                                                 = 0x01ca,
-               Ecaron                                                  = 0x01cc,
-               Dcaron                                                  = 0x01cf,
-               Dstroke                                                 = 0x01d0,
-               Nacute                                                  = 0x01d1,
-               Ncaron                                                  = 0x01d2,
-               Odoubleacute                                    = 0x01d5,
-               Rcaron                                                  = 0x01d8,
-               Uring                                                   = 0x01d9,
-               Udoubleacute                                    = 0x01db,
-               Tcedilla                                                = 0x01de,
-               racute                                                  = 0x01e0,
-               abreve                                                  = 0x01e3,
-               lacute                                                  = 0x01e5,
-               cacute                                                  = 0x01e6,
-               ccaron                                                  = 0x01e8,
-               eogonek                                                 = 0x01ea,
-               ecaron                                                  = 0x01ec,
-               dcaron                                                  = 0x01ef,
-               dstroke                                                 = 0x01f0,
-               nacute                                                  = 0x01f1,
-               ncaron                                                  = 0x01f2,
-               odoubleacute                                    = 0x01f5,
-               rcaron                                                  = 0x01f8,
-               uring                                                   = 0x01f9,
-               udoubleacute                                    = 0x01fb,
-               tcedilla                                                = 0x01fe,
-               abovedot                                                = 0x01ff,
-               Hstroke                                                 = 0x02a1,
-               Hcircumflex                                             = 0x02a6,
-               Iabovedot                                               = 0x02a9,
-               Gbreve                                                  = 0x02ab,
-               Jcircumflex                                             = 0x02ac,
-               hstroke                                                 = 0x02b1,
-               hcircumflex                                             = 0x02b6,
-               idotless                                                = 0x02b9,
-               gbreve                                                  = 0x02bb,
-               jcircumflex                                             = 0x02bc,
-               Cabovedot                                               = 0x02c5,
-               Ccircumflex                                             = 0x02c6,
-               Gabovedot                                               = 0x02d5,
-               Gcircumflex                                             = 0x02d8,
-               Ubreve                                                  = 0x02dd,
-               Scircumflex                                             = 0x02de,
-               cabovedot                                               = 0x02e5,
-               ccircumflex                                             = 0x02e6,
-               gabovedot                                               = 0x02f5,
-               gcircumflex                                             = 0x02f8,
-               ubreve                                                  = 0x02fd,
-               scircumflex                                             = 0x02fe,
-               kra                                                             = 0x03a2,
-               kappa                                                   = 0x03a2,
-               Rcedilla                                                = 0x03a3,
-               Itilde                                                  = 0x03a5,
-               Lcedilla                                                = 0x03a6,
-               Emacron                                                 = 0x03aa,
-               Gcedilla                                                = 0x03ab,
-               Tslash                                                  = 0x03ac,
-               rcedilla                                                = 0x03b3,
-               itilde                                                  = 0x03b5,
-               lcedilla                                                = 0x03b6,
-               emacron                                                 = 0x03ba,
-               gcedilla                                                = 0x03bb,
-               tslash                                                  = 0x03bc,
-               ENG                                                             = 0x03bd,
-               eng                                                             = 0x03bf,
-               Amacron                                                 = 0x03c0,
-               Iogonek                                                 = 0x03c7,
-               Eabovedot                                               = 0x03cc,
-               Imacron                                                 = 0x03cf,
-               Ncedilla                                                = 0x03d1,
-               Omacron                                                 = 0x03d2,
-               Kcedilla                                                = 0x03d3,
-               Uogonek                                                 = 0x03d9,
-               Utilde                                                  = 0x03dd,
-               Umacron                                                 = 0x03de,
-               amacron                                                 = 0x03e0,
-               iogonek                                                 = 0x03e7,
-               eabovedot                                               = 0x03ec,
-               imacron                                                 = 0x03ef,
-               ncedilla                                                = 0x03f1,
-               omacron                                                 = 0x03f2,
-               kcedilla                                                = 0x03f3,
-               uogonek                                                 = 0x03f9,
-               utilde                                                  = 0x03fd,
-               umacron                                                 = 0x03fe,
-               Wcircumflex                                             = 0x1000174,
-               wcircumflex                                             = 0x1000175,
-               Ycircumflex                                             = 0x1000176,
-               ycircumflex                                             = 0x1000177,
-               Babovedot                                               = 0x1001e02,
-               babovedot                                               = 0x1001e03,
-               Dabovedot                                               = 0x1001e0a,
-               dabovedot                                               = 0x1001e0b,
-               Fabovedot                                               = 0x1001e1e,
-               fabovedot                                               = 0x1001e1f,
-               Mabovedot                                               = 0x1001e40,
-               mabovedot                                               = 0x1001e41,
-               Pabovedot                                               = 0x1001e56,
-               pabovedot                                               = 0x1001e57,
-               Sabovedot                                               = 0x1001e60,
-               sabovedot                                               = 0x1001e61,
-               Tabovedot                                               = 0x1001e6a,
-               tabovedot                                               = 0x1001e6b,
-               Wgrave                                                  = 0x1001e80,
-               wgrave                                                  = 0x1001e81,
-               Wacute                                                  = 0x1001e82,
-               wacute                                                  = 0x1001e83,
-               Wdiaeresis                                              = 0x1001e84,
-               wdiaeresis                                              = 0x1001e85,
-               Ygrave                                                  = 0x1001ef2,
-               ygrave                                                  = 0x1001ef3,
-               OE                                                              = 0x13bc,
-               oe                                                              = 0x13bd,
-               Ydiaeresis                                              = 0x13be,
-               overline                                                = 0x047e,
-               kana_fullstop                                   = 0x04a1,
-               kana_openingbracket                             = 0x04a2,
-               kana_closingbracket                             = 0x04a3,
-               kana_comma                                              = 0x04a4,
-               kana_conjunctive                                = 0x04a5,
-               kana_middledot                                  = 0x04a5,
-               kana_WO                                                 = 0x04a6,
-               kana_a                                                  = 0x04a7,
-               kana_i                                                  = 0x04a8,
-               kana_u                                                  = 0x04a9,
-               kana_e                                                  = 0x04aa,
-               kana_o                                                  = 0x04ab,
-               kana_ya                                                 = 0x04ac,
-               kana_yu                                                 = 0x04ad,
-               kana_yo                                                 = 0x04ae,
-               kana_tsu                                                = 0x04af,
-               kana_tu                                                 = 0x04af,
-               prolongedsound                                  = 0x04b0,
-               kana_A                                                  = 0x04b1,
-               kana_I                                                  = 0x04b2,
-               kana_U                                                  = 0x04b3,
-               kana_E                                                  = 0x04b4,
-               kana_O                                                  = 0x04b5,
-               kana_KA                                                 = 0x04b6,
-               kana_KI                                                 = 0x04b7,
-               kana_KU                                                 = 0x04b8,
-               kana_KE                                                 = 0x04b9,
-               kana_KO                                                 = 0x04ba,
-               kana_SA                                                 = 0x04bb,
-               kana_SHI                                                = 0x04bc,
-               kana_SU                                                 = 0x04bd,
-               kana_SE                                                 = 0x04be,
-               kana_SO                                                 = 0x04bf,
-               kana_TA                                                 = 0x04c0,
-               kana_CHI                                                = 0x04c1,
-               kana_TI                                                 = 0x04c1,
-               kana_TSU                                                = 0x04c2,
-               kana_TU                                                 = 0x04c2,
-               kana_TE                                                 = 0x04c3,
-               kana_TO                                                 = 0x04c4,
-               kana_NA                                                 = 0x04c5,
-               kana_NI                                                 = 0x04c6,
-               kana_NU                                                 = 0x04c7,
-               kana_NE                                                 = 0x04c8,
-               kana_NO                                                 = 0x04c9,
-               kana_HA                                                 = 0x04ca,
-               kana_HI                                                 = 0x04cb,
-               kana_FU                                                 = 0x04cc,
-               kana_HU                                                 = 0x04cc,
-               kana_HE                                                 = 0x04cd,
-               kana_HO                                                 = 0x04ce,
-               kana_MA                                                 = 0x04cf,
-               kana_MI                                                 = 0x04d0,
-               kana_MU                                                 = 0x04d1,
-               kana_ME                                                 = 0x04d2,
-               kana_MO                                                 = 0x04d3,
-               kana_YA                                                 = 0x04d4,
-               kana_YU                                                 = 0x04d5,
-               kana_YO                                                 = 0x04d6,
-               kana_RA                                                 = 0x04d7,
-               kana_RI                                                 = 0x04d8,
-               kana_RU                                                 = 0x04d9,
-               kana_RE                                                 = 0x04da,
-               kana_RO                                                 = 0x04db,
-               kana_WA                                                 = 0x04dc,
-               kana_N                                                  = 0x04dd,
-               voicedsound                                             = 0x04de,
-               semivoicedsound                                 = 0x04df,
-               kana_switch                                             = 0xff7e,
-               Farsi_0                                                 = 0x10006f0,
-               Farsi_1                                                 = 0x10006f1,
-               Farsi_2                                                 = 0x10006f2,
-               Farsi_3                                                 = 0x10006f3,
-               Farsi_4                                                 = 0x10006f4,
-               Farsi_5                                                 = 0x10006f5,
-               Farsi_6                                                 = 0x10006f6,
-               Farsi_7                                                 = 0x10006f7,
-               Farsi_8                                                 = 0x10006f8,
-               Farsi_9                                                 = 0x10006f9,
-               Arabic_percent                                  = 0x100066a,
-               Arabic_superscript_alef                 = 0x1000670,
-               Arabic_tteh                                             = 0x1000679,
-               Arabic_peh                                              = 0x100067e,
-               Arabic_tcheh                                    = 0x1000686,
-               Arabic_ddal                                             = 0x1000688,
-               Arabic_rreh                                             = 0x1000691,
-               Arabic_comma                                    = 0x05ac,
-               Arabic_fullstop                                 = 0x10006d4,
-               Arabic_0                                                = 0x1000660,
-               Arabic_1                                                = 0x1000661,
-               Arabic_2                                                = 0x1000662,
-               Arabic_3                                                = 0x1000663,
-               Arabic_4                                                = 0x1000664,
-               Arabic_5                                                = 0x1000665,
-               Arabic_6                                                = 0x1000666,
-               Arabic_7                                                = 0x1000667,
-               Arabic_8                                                = 0x1000668,
-               Arabic_9                                                = 0x1000669,
-               Arabic_semicolon                                = 0x05bb,
-               Arabic_question_mark                    = 0x05bf,
-               Arabic_hamza                                    = 0x05c1,
-               Arabic_maddaonalef                              = 0x05c2,
-               Arabic_hamzaonalef                              = 0x05c3,
-               Arabic_hamzaonwaw                               = 0x05c4,
-               Arabic_hamzaunderalef                   = 0x05c5,
-               Arabic_hamzaonyeh                               = 0x05c6,
-               Arabic_alef                                             = 0x05c7,
-               Arabic_beh                                              = 0x05c8,
-               Arabic_tehmarbuta                               = 0x05c9,
-               Arabic_teh                                              = 0x05ca,
-               Arabic_theh                                             = 0x05cb,
-               Arabic_jeem                                             = 0x05cc,
-               Arabic_hah                                              = 0x05cd,
-               Arabic_khah                                             = 0x05ce,
-               Arabic_dal                                              = 0x05cf,
-               Arabic_thal                                             = 0x05d0,
-               Arabic_ra                                               = 0x05d1,
-               Arabic_zain                                             = 0x05d2,
-               Arabic_seen                                             = 0x05d3,
-               Arabic_sheen                                    = 0x05d4,
-               Arabic_sad                                              = 0x05d5,
-               Arabic_dad                                              = 0x05d6,
-               Arabic_tah                                              = 0x05d7,
-               Arabic_zah                                              = 0x05d8,
-               Arabic_ain                                              = 0x05d9,
-               Arabic_ghain                                    = 0x05da,
-               Arabic_tatweel                                  = 0x05e0,
-               Arabic_feh                                              = 0x05e1,
-               Arabic_qaf                                              = 0x05e2,
-               Arabic_kaf                                              = 0x05e3,
-               Arabic_lam                                              = 0x05e4,
-               Arabic_meem                                             = 0x05e5,
-               Arabic_noon                                             = 0x05e6,
-               Arabic_ha                                               = 0x05e7,
-               Arabic_heh                                              = 0x05e7,
-               Arabic_waw                                              = 0x05e8,
-               Arabic_alefmaksura                              = 0x05e9,
-               Arabic_yeh                                              = 0x05ea,
-               Arabic_fathatan                                 = 0x05eb,
-               Arabic_dammatan                                 = 0x05ec,
-               Arabic_kasratan                                 = 0x05ed,
-               Arabic_fatha                                    = 0x05ee,
-               Arabic_damma                                    = 0x05ef,
-               Arabic_kasra                                    = 0x05f0,
-               Arabic_shadda                                   = 0x05f1,
-               Arabic_sukun                                    = 0x05f2,
-               Arabic_madda_above                              = 0x1000653,
-               Arabic_hamza_above                              = 0x1000654,
-               Arabic_hamza_below                              = 0x1000655,
-               Arabic_jeh                                              = 0x1000698,
-               Arabic_veh                                              = 0x10006a4,
-               Arabic_keheh                                    = 0x10006a9,
-               Arabic_gaf                                              = 0x10006af,
-               Arabic_noon_ghunna                              = 0x10006ba,
-               Arabic_heh_doachashmee                  = 0x10006be,
-               Farsi_yeh                                               = 0x10006cc,
-               Arabic_farsi_yeh                                = 0x10006cc,
-               Arabic_yeh_baree                                = 0x10006d2,
-               Arabic_heh_goal                                 = 0x10006c1,
-               Arabic_switch                                   = 0xff7e,
-               Cyrillic_GHE_bar                                = 0x1000492,
-               Cyrillic_ghe_bar                                = 0x1000493,
-               Cyrillic_ZHE_descender                  = 0x1000496,
-               Cyrillic_zhe_descender                  = 0x1000497,
-               Cyrillic_KA_descender                   = 0x100049a,
-               Cyrillic_ka_descender                   = 0x100049b,
-               Cyrillic_KA_vertstroke                  = 0x100049c,
-               Cyrillic_ka_vertstroke                  = 0x100049d,
-               Cyrillic_EN_descender                   = 0x10004a2,
-               Cyrillic_en_descender                   = 0x10004a3,
-               Cyrillic_U_straight                             = 0x10004ae,
-               Cyrillic_u_straight                             = 0x10004af,
-               Cyrillic_U_straight_bar                 = 0x10004b0,
-               Cyrillic_u_straight_bar                 = 0x10004b1,
-               Cyrillic_HA_descender                   = 0x10004b2,
-               Cyrillic_ha_descender                   = 0x10004b3,
-               Cyrillic_CHE_descender                  = 0x10004b6,
-               Cyrillic_che_descender                  = 0x10004b7,
-               Cyrillic_CHE_vertstroke                 = 0x10004b8,
-               Cyrillic_che_vertstroke                 = 0x10004b9,
-               Cyrillic_SHHA                                   = 0x10004ba,
-               Cyrillic_shha                                   = 0x10004bb,
-               Cyrillic_SCHWA                                  = 0x10004d8,
-               Cyrillic_schwa                                  = 0x10004d9,
-               Cyrillic_I_macron                               = 0x10004e2,
-               Cyrillic_i_macron                               = 0x10004e3,
-               Cyrillic_O_bar                                  = 0x10004e8,
-               Cyrillic_o_bar                                  = 0x10004e9,
-               Cyrillic_U_macron                               = 0x10004ee,
-               Cyrillic_u_macron                               = 0x10004ef,
-               Serbian_dje                                             = 0x06a1,
-               Macedonia_gje                                   = 0x06a2,
-               Cyrillic_io                                             = 0x06a3,
-               Ukrainian_ie                                    = 0x06a4,
-               Ukranian_je                                             = 0x06a4,
-               Macedonia_dse                                   = 0x06a5,
-               Ukrainian_i                                             = 0x06a6,
-               Ukranian_i                                              = 0x06a6,
-               Ukrainian_yi                                    = 0x06a7,
-               Ukranian_yi                                             = 0x06a7,
-               Cyrillic_je                                             = 0x06a8,
-               Serbian_je                                              = 0x06a8,
-               Cyrillic_lje                                    = 0x06a9,
-               Serbian_lje                                             = 0x06a9,
-               Cyrillic_nje                                    = 0x06aa,
-               Serbian_nje                                             = 0x06aa,
-               Serbian_tshe                                    = 0x06ab,
-               Macedonia_kje                                   = 0x06ac,
-               Ukrainian_ghe_with_upturn               = 0x06ad,
-               Byelorussian_shortu                             = 0x06ae,
-               Cyrillic_dzhe                                   = 0x06af,
-               Serbian_dze                                             = 0x06af,
-               numerosign                                              = 0x06b0,
-               Serbian_DJE                                             = 0x06b1,
-               Macedonia_GJE                                   = 0x06b2,
-               Cyrillic_IO                                             = 0x06b3,
-               Ukrainian_IE                                    = 0x06b4,
-               Ukranian_JE                                             = 0x06b4,
-               Macedonia_DSE                                   = 0x06b5,
-               Ukrainian_I                                             = 0x06b6,
-               Ukranian_I                                              = 0x06b6,
-               Ukrainian_YI                                    = 0x06b7,
-               Ukranian_YI                                             = 0x06b7,
-               Cyrillic_JE                                             = 0x06b8,
-               Serbian_JE                                              = 0x06b8,
-               Cyrillic_LJE                                    = 0x06b9,
-               Serbian_LJE                                             = 0x06b9,
-               Cyrillic_NJE                                    = 0x06ba,
-               Serbian_NJE                                             = 0x06ba,
-               Serbian_TSHE                                    = 0x06bb,
-               Macedonia_KJE                                   = 0x06bc,
-               Ukrainian_GHE_WITH_UPTURN               = 0x06bd,
-               Byelorussian_SHORTU                             = 0x06be,
-               Cyrillic_DZHE                                   = 0x06bf,
-               Serbian_DZE                                             = 0x06bf,
-               Cyrillic_yu                                             = 0x06c0,
-               Cyrillic_a                                              = 0x06c1,
-               Cyrillic_be                                             = 0x06c2,
-               Cyrillic_tse                                    = 0x06c3,
-               Cyrillic_de                                             = 0x06c4,
-               Cyrillic_ie                                             = 0x06c5,
-               Cyrillic_ef                                             = 0x06c6,
-               Cyrillic_ghe                                    = 0x06c7,
-               Cyrillic_ha                                             = 0x06c8,
-               Cyrillic_i                                              = 0x06c9,
-               Cyrillic_shorti                                 = 0x06ca,
-               Cyrillic_ka                                             = 0x06cb,
-               Cyrillic_el                                             = 0x06cc,
-               Cyrillic_em                                             = 0x06cd,
-               Cyrillic_en                                             = 0x06ce,
-               Cyrillic_o                                              = 0x06cf,
-               Cyrillic_pe                                             = 0x06d0,
-               Cyrillic_ya                                             = 0x06d1,
-               Cyrillic_er                                             = 0x06d2,
-               Cyrillic_es                                             = 0x06d3,
-               Cyrillic_te                                             = 0x06d4,
-               Cyrillic_u                                              = 0x06d5,
-               Cyrillic_zhe                                    = 0x06d6,
-               Cyrillic_ve                                             = 0x06d7,
-               Cyrillic_softsign                               = 0x06d8,
-               Cyrillic_yeru                                   = 0x06d9,
-               Cyrillic_ze                                             = 0x06da,
-               Cyrillic_sha                                    = 0x06db,
-               Cyrillic_e                                              = 0x06dc,
-               Cyrillic_shcha                                  = 0x06dd,
-               Cyrillic_che                                    = 0x06de,
-               Cyrillic_hardsign                               = 0x06df,
-               Cyrillic_YU                                             = 0x06e0,
-               Cyrillic_A                                              = 0x06e1,
-               Cyrillic_BE                                             = 0x06e2,
-               Cyrillic_TSE                                    = 0x06e3,
-               Cyrillic_DE                                             = 0x06e4,
-               Cyrillic_IE                                             = 0x06e5,
-               Cyrillic_EF                                             = 0x06e6,
-               Cyrillic_GHE                                    = 0x06e7,
-               Cyrillic_HA                                             = 0x06e8,
-               Cyrillic_I                                              = 0x06e9,
-               Cyrillic_SHORTI                                 = 0x06ea,
-               Cyrillic_KA                                             = 0x06eb,
-               Cyrillic_EL                                             = 0x06ec,
-               Cyrillic_EM                                             = 0x06ed,
-               Cyrillic_EN                                             = 0x06ee,
-               Cyrillic_O                                              = 0x06ef,
-               Cyrillic_PE                                             = 0x06f0,
-               Cyrillic_YA                                             = 0x06f1,
-               Cyrillic_ER                                             = 0x06f2,
-               Cyrillic_ES                                             = 0x06f3,
-               Cyrillic_TE                                             = 0x06f4,
-               Cyrillic_U                                              = 0x06f5,
-               Cyrillic_ZHE                                    = 0x06f6,
-               Cyrillic_VE                                             = 0x06f7,
-               Cyrillic_SOFTSIGN                               = 0x06f8,
-               Cyrillic_YERU                                   = 0x06f9,
-               Cyrillic_ZE                                             = 0x06fa,
-               Cyrillic_SHA                                    = 0x06fb,
-               Cyrillic_E                                              = 0x06fc,
-               Cyrillic_SHCHA                                  = 0x06fd,
-               Cyrillic_CHE                                    = 0x06fe,
-               Cyrillic_HARDSIGN                               = 0x06ff,
-               Greek_ALPHAaccent                               = 0x07a1,
-               Greek_EPSILONaccent                             = 0x07a2,
-               Greek_ETAaccent                                 = 0x07a3,
-               Greek_IOTAaccent                                = 0x07a4,
-               Greek_IOTAdieresis                              = 0x07a5,
-               Greek_IOTAdiaeresis                             = 0x07a5,
-               Greek_OMICRONaccent                             = 0x07a7,
-               Greek_UPSILONaccent                             = 0x07a8,
-               Greek_UPSILONdieresis                   = 0x07a9,
-               Greek_OMEGAaccent                               = 0x07ab,
-               Greek_accentdieresis                    = 0x07ae,
-               Greek_horizbar                                  = 0x07af,
-               Greek_alphaaccent                               = 0x07b1,
-               Greek_epsilonaccent                             = 0x07b2,
-               Greek_etaaccent                                 = 0x07b3,
-               Greek_iotaaccent                                = 0x07b4,
-               Greek_iotadieresis                              = 0x07b5,
-               Greek_iotaaccentdieresis                = 0x07b6,
-               Greek_omicronaccent                             = 0x07b7,
-               Greek_upsilonaccent                             = 0x07b8,
-               Greek_upsilondieresis                   = 0x07b9,
-               Greek_upsilonaccentdieresis             = 0x07ba,
-               Greek_omegaaccent                               = 0x07bb,
-               Greek_ALPHA                                             = 0x07c1,
-               Greek_BETA                                              = 0x07c2,
-               Greek_GAMMA                                             = 0x07c3,
-               Greek_DELTA                                             = 0x07c4,
-               Greek_EPSILON                                   = 0x07c5,
-               Greek_ZETA                                              = 0x07c6,
-               Greek_ETA                                               = 0x07c7,
-               Greek_THETA                                             = 0x07c8,
-               Greek_IOTA                                              = 0x07c9,
-               Greek_KAPPA                                             = 0x07ca,
-               Greek_LAMDA                                             = 0x07cb,
-               Greek_LAMBDA                                    = 0x07cb,
-               Greek_MU                                                = 0x07cc,
-               Greek_NU                                                = 0x07cd,
-               Greek_XI                                                = 0x07ce,
-               Greek_OMICRON                                   = 0x07cf,
-               Greek_PI                                                = 0x07d0,
-               Greek_RHO                                               = 0x07d1,
-               Greek_SIGMA                                             = 0x07d2,
-               Greek_TAU                                               = 0x07d4,
-               Greek_UPSILON                                   = 0x07d5,
-               Greek_PHI                                               = 0x07d6,
-               Greek_CHI                                               = 0x07d7,
-               Greek_PSI                                               = 0x07d8,
-               Greek_OMEGA                                             = 0x07d9,
-               Greek_alpha                                             = 0x07e1,
-               Greek_beta                                              = 0x07e2,
-               Greek_gamma                                             = 0x07e3,
-               Greek_delta                                             = 0x07e4,
-               Greek_epsilon                                   = 0x07e5,
-               Greek_zeta                                              = 0x07e6,
-               Greek_eta                                               = 0x07e7,
-               Greek_theta                                             = 0x07e8,
-               Greek_iota                                              = 0x07e9,
-               Greek_kappa                                             = 0x07ea,
-               Greek_lamda                                             = 0x07eb,
-               Greek_lambda                                    = 0x07eb,
-               Greek_mu                                                = 0x07ec,
-               Greek_nu                                                = 0x07ed,
-               Greek_xi                                                = 0x07ee,
-               Greek_omicron                                   = 0x07ef,
-               Greek_pi                                                = 0x07f0,
-               Greek_rho                                               = 0x07f1,
-               Greek_sigma                                             = 0x07f2,
-               Greek_finalsmallsigma                   = 0x07f3,
-               Greek_tau                                               = 0x07f4,
-               Greek_upsilon                                   = 0x07f5,
-               Greek_phi                                               = 0x07f6,
-               Greek_chi                                               = 0x07f7,
-               Greek_psi                                               = 0x07f8,
-               Greek_omega                                             = 0x07f9,
-               Greek_switch                                    = 0xff7e,
-               leftradical                                             = 0x08a1,
-               topleftradical                                  = 0x08a2,
-               horizconnector                                  = 0x08a3,
-               topintegral                                             = 0x08a4,
-               botintegral                                             = 0x08a5,
-               vertconnector                                   = 0x08a6,
-               topleftsqbracket                                = 0x08a7,
-               botleftsqbracket                                = 0x08a8,
-               toprightsqbracket                               = 0x08a9,
-               botrightsqbracket                               = 0x08aa,
-               topleftparens                                   = 0x08ab,
-               botleftparens                                   = 0x08ac,
-               toprightparens                                  = 0x08ad,
-               botrightparens                                  = 0x08ae,
-               leftmiddlecurlybrace                    = 0x08af,
-               rightmiddlecurlybrace                   = 0x08b0,
-               topleftsummation                                = 0x08b1,
-               botleftsummation                                = 0x08b2,
-               topvertsummationconnector               = 0x08b3,
-               botvertsummationconnector               = 0x08b4,
-               toprightsummation                               = 0x08b5,
-               botrightsummation                               = 0x08b6,
-               rightmiddlesummation                    = 0x08b7,
-               lessthanequal                                   = 0x08bc,
-               notequal                                                = 0x08bd,
-               greaterthanequal                                = 0x08be,
-               integral                                                = 0x08bf,
-               therefore                                               = 0x08c0,
-               variation                                               = 0x08c1,
-               infinity                                                = 0x08c2,
-               nabla                                                   = 0x08c5,
-               approximate                                             = 0x08c8,
-               similarequal                                    = 0x08c9,
-               ifonlyif                                                = 0x08cd,
-               implies                                                 = 0x08ce,
-               identical                                               = 0x08cf,
-               radical                                                 = 0x08d6,
-               includedin                                              = 0x08da,
-               includes                                                = 0x08db,
-               intersection                                    = 0x08dc,
-               union                                                   = 0x08dd,
-               logicaland                                              = 0x08de,
-               logicalor                                               = 0x08df,
-               partialderivative                               = 0x08ef,
-               function                                                = 0x08f6,
-               leftarrow                                               = 0x08fb,
-               uparrow                                                 = 0x08fc,
-               rightarrow                                              = 0x08fd,
-               downarrow                                               = 0x08fe,
-               blank                                                   = 0x09df,
-               soliddiamond                                    = 0x09e0,
-               checkerboard                                    = 0x09e1,
-               ht                                                              = 0x09e2,
-               ff                                                              = 0x09e3,
-               cr                                                              = 0x09e4,
-               lf                                                              = 0x09e5,
-               nl                                                              = 0x09e8,
-               vt                                                              = 0x09e9,
-               lowrightcorner                                  = 0x09ea,
-               uprightcorner                                   = 0x09eb,
-               upleftcorner                                    = 0x09ec,
-               lowleftcorner                                   = 0x09ed,
-               crossinglines                                   = 0x09ee,
-               horizlinescan1                                  = 0x09ef,
-               horizlinescan3                                  = 0x09f0,
-               horizlinescan5                                  = 0x09f1,
-               horizlinescan7                                  = 0x09f2,
-               horizlinescan9                                  = 0x09f3,
-               leftt                                                   = 0x09f4,
-               rightt                                                  = 0x09f5,
-               bott                                                    = 0x09f6,
-               topt                                                    = 0x09f7,
-               vertbar                                                 = 0x09f8,
-               emspace                                                 = 0x0aa1,
-               enspace                                                 = 0x0aa2,
-               em3space                                                = 0x0aa3,
-               em4space                                                = 0x0aa4,
-               digitspace                                              = 0x0aa5,
-               punctspace                                              = 0x0aa6,
-               thinspace                                               = 0x0aa7,
-               hairspace                                               = 0x0aa8,
-               emdash                                                  = 0x0aa9,
-               endash                                                  = 0x0aaa,
-               signifblank                                             = 0x0aac,
-               ellipsis                                                = 0x0aae,
-               doubbaselinedot                                 = 0x0aaf,
-               onethird                                                = 0x0ab0,
-               twothirds                                               = 0x0ab1,
-               onefifth                                                = 0x0ab2,
-               twofifths                                               = 0x0ab3,
-               threefifths                                             = 0x0ab4,
-               fourfifths                                              = 0x0ab5,
-               onesixth                                                = 0x0ab6,
-               fivesixths                                              = 0x0ab7,
-               careof                                                  = 0x0ab8,
-               figdash                                                 = 0x0abb,
-               leftanglebracket                                = 0x0abc,
-               decimalpoint                                    = 0x0abd,
-               rightanglebracket                               = 0x0abe,
-               marker                                                  = 0x0abf,
-               oneeighth                                               = 0x0ac3,
-               threeeighths                                    = 0x0ac4,
-               fiveeighths                                             = 0x0ac5,
-               seveneighths                                    = 0x0ac6,
-               trademark                                               = 0x0ac9,
-               signaturemark                                   = 0x0aca,
-               trademarkincircle                               = 0x0acb,
-               leftopentriangle                                = 0x0acc,
-               rightopentriangle                               = 0x0acd,
-               emopencircle                                    = 0x0ace,
-               emopenrectangle                                 = 0x0acf,
-               leftsinglequotemark                             = 0x0ad0,
-               rightsinglequotemark                    = 0x0ad1,
-               leftdoublequotemark                             = 0x0ad2,
-               rightdoublequotemark                    = 0x0ad3,
-               prescription                                    = 0x0ad4,
-               permille                                                = 0x0ad5,
-               minutes                                                 = 0x0ad6,
-               seconds                                                 = 0x0ad7,
-               latincross                                              = 0x0ad9,
-               hexagram                                                = 0x0ada,
-               filledrectbullet                                = 0x0adb,
-               filledlefttribullet                             = 0x0adc,
-               filledrighttribullet                    = 0x0add,
-               emfilledcircle                                  = 0x0ade,
-               emfilledrect                                    = 0x0adf,
-               enopencircbullet                                = 0x0ae0,
-               enopensquarebullet                              = 0x0ae1,
-               openrectbullet                                  = 0x0ae2,
-               opentribulletup                                 = 0x0ae3,
-               opentribulletdown                               = 0x0ae4,
-               openstar                                                = 0x0ae5,
-               enfilledcircbullet                              = 0x0ae6,
-               enfilledsqbullet                                = 0x0ae7,
-               filledtribulletup                               = 0x0ae8,
-               filledtribulletdown                             = 0x0ae9,
-               leftpointer                                             = 0x0aea,
-               rightpointer                                    = 0x0aeb,
-               club                                                    = 0x0aec,
-               diamond                                                 = 0x0aed,
-               heart                                                   = 0x0aee,
-               maltesecross                                    = 0x0af0,
-               dagger                                                  = 0x0af1,
-               doubledagger                                    = 0x0af2,
-               checkmark                                               = 0x0af3,
-               ballotcross                                             = 0x0af4,
-               musicalsharp                                    = 0x0af5,
-               musicalflat                                             = 0x0af6,
-               malesymbol                                              = 0x0af7,
-               femalesymbol                                    = 0x0af8,
-               telephone                                               = 0x0af9,
-               telephonerecorder                               = 0x0afa,
-               phonographcopyright                             = 0x0afb,
-               caret                                                   = 0x0afc,
-               singlelowquotemark                              = 0x0afd,
-               doublelowquotemark                              = 0x0afe,
-               cursor                                                  = 0x0aff,
-               leftcaret                                               = 0x0ba3,
-               rightcaret                                              = 0x0ba6,
-               downcaret                                               = 0x0ba8,
-               upcaret                                                 = 0x0ba9,
-               overbar                                                 = 0x0bc0,
-               downtack                                                = 0x0bc2,
-               upshoe                                                  = 0x0bc3,
-               downstile                                               = 0x0bc4,
-               underbar                                                = 0x0bc6,
-               jot                                                             = 0x0bca,
-               quad                                                    = 0x0bcc,
-               uptack                                                  = 0x0bce,
-               circle                                                  = 0x0bcf,
-               upstile                                                 = 0x0bd3,
-               downshoe                                                = 0x0bd6,
-               rightshoe                                               = 0x0bd8,
-               leftshoe                                                = 0x0bda,
-               lefttack                                                = 0x0bdc,
-               righttack                                               = 0x0bfc,
-               hebrew_doublelowline                    = 0x0cdf,
-               hebrew_aleph                                    = 0x0ce0,
-               hebrew_bet                                              = 0x0ce1,
-               hebrew_beth                                             = 0x0ce1,
-               hebrew_gimel                                    = 0x0ce2,
-               hebrew_gimmel                                   = 0x0ce2,
-               hebrew_dalet                                    = 0x0ce3,
-               hebrew_daleth                                   = 0x0ce3,
-               hebrew_he                                               = 0x0ce4,
-               hebrew_waw                                              = 0x0ce5,
-               hebrew_zain                                             = 0x0ce6,
-               hebrew_zayin                                    = 0x0ce6,
-               hebrew_chet                                             = 0x0ce7,
-               hebrew_het                                              = 0x0ce7,
-               hebrew_tet                                              = 0x0ce8,
-               hebrew_teth                                             = 0x0ce8,
-               hebrew_yod                                              = 0x0ce9,
-               hebrew_finalkaph                                = 0x0cea,
-               hebrew_kaph                                             = 0x0ceb,
-               hebrew_lamed                                    = 0x0cec,
-               hebrew_finalmem                                 = 0x0ced,
-               hebrew_mem                                              = 0x0cee,
-               hebrew_finalnun                                 = 0x0cef,
-               hebrew_nun                                              = 0x0cf0,
-               hebrew_samech                                   = 0x0cf1,
-               hebrew_samekh                                   = 0x0cf1,
-               hebrew_ayin                                             = 0x0cf2,
-               hebrew_finalpe                                  = 0x0cf3,
-               hebrew_pe                                               = 0x0cf4,
-               hebrew_finalzade                                = 0x0cf5,
-               hebrew_finalzadi                                = 0x0cf5,
-               hebrew_zade                                             = 0x0cf6,
-               hebrew_zadi                                             = 0x0cf6,
-               hebrew_qoph                                             = 0x0cf7,
-               hebrew_kuf                                              = 0x0cf7,
-               hebrew_resh                                             = 0x0cf8,
-               hebrew_shin                                             = 0x0cf9,
-               hebrew_taw                                              = 0x0cfa,
-               hebrew_taf                                              = 0x0cfa,
-               Hebrew_switch                                   = 0xff7e,
-               Thai_kokai                                              = 0x0da1,
-               Thai_khokhai                                    = 0x0da2,
-               Thai_khokhuat                                   = 0x0da3,
-               Thai_khokhwai                                   = 0x0da4,
-               Thai_khokhon                                    = 0x0da5,
-               Thai_khorakhang                                 = 0x0da6,
-               Thai_ngongu                                             = 0x0da7,
-               Thai_chochan                                    = 0x0da8,
-               Thai_choching                                   = 0x0da9,
-               Thai_chochang                                   = 0x0daa,
-               Thai_soso                                               = 0x0dab,
-               Thai_chochoe                                    = 0x0dac,
-               Thai_yoying                                             = 0x0dad,
-               Thai_dochada                                    = 0x0dae,
-               Thai_topatak                                    = 0x0daf,
-               Thai_thothan                                    = 0x0db0,
-               Thai_thonangmontho                              = 0x0db1,
-               Thai_thophuthao                                 = 0x0db2,
-               Thai_nonen                                              = 0x0db3,
-               Thai_dodek                                              = 0x0db4,
-               Thai_totao                                              = 0x0db5,
-               Thai_thothung                                   = 0x0db6,
-               Thai_thothahan                                  = 0x0db7,
-               Thai_thothong                                   = 0x0db8,
-               Thai_nonu                                               = 0x0db9,
-               Thai_bobaimai                                   = 0x0dba,
-               Thai_popla                                              = 0x0dbb,
-               Thai_phophung                                   = 0x0dbc,
-               Thai_fofa                                               = 0x0dbd,
-               Thai_phophan                                    = 0x0dbe,
-               Thai_fofan                                              = 0x0dbf,
-               Thai_phosamphao                                 = 0x0dc0,
-               Thai_moma                                               = 0x0dc1,
-               Thai_yoyak                                              = 0x0dc2,
-               Thai_rorua                                              = 0x0dc3,
-               Thai_ru                                                 = 0x0dc4,
-               Thai_loling                                             = 0x0dc5,
-               Thai_lu                                                 = 0x0dc6,
-               Thai_wowaen                                             = 0x0dc7,
-               Thai_sosala                                             = 0x0dc8,
-               Thai_sorusi                                             = 0x0dc9,
-               Thai_sosua                                              = 0x0dca,
-               Thai_hohip                                              = 0x0dcb,
-               Thai_lochula                                    = 0x0dcc,
-               Thai_oang                                               = 0x0dcd,
-               Thai_honokhuk                                   = 0x0dce,
-               Thai_paiyannoi                                  = 0x0dcf,
-               Thai_saraa                                              = 0x0dd0,
-               Thai_maihanakat                                 = 0x0dd1,
-               Thai_saraaa                                             = 0x0dd2,
-               Thai_saraam                                             = 0x0dd3,
-               Thai_sarai                                              = 0x0dd4,
-               Thai_saraii                                             = 0x0dd5,
-               Thai_saraue                                             = 0x0dd6,
-               Thai_sarauee                                    = 0x0dd7,
-               Thai_sarau                                              = 0x0dd8,
-               Thai_sarauu                                             = 0x0dd9,
-               Thai_phinthu                                    = 0x0dda,
-               Thai_maihanakat_maitho                  = 0x0dde,
-               Thai_baht                                               = 0x0ddf,
-               Thai_sarae                                              = 0x0de0,
-               Thai_saraae                                             = 0x0de1,
-               Thai_sarao                                              = 0x0de2,
-               Thai_saraaimaimuan                              = 0x0de3,
-               Thai_saraaimaimalai                             = 0x0de4,
-               Thai_lakkhangyao                                = 0x0de5,
-               Thai_maiyamok                                   = 0x0de6,
-               Thai_maitaikhu                                  = 0x0de7,
-               Thai_maiek                                              = 0x0de8,
-               Thai_maitho                                             = 0x0de9,
-               Thai_maitri                                             = 0x0dea,
-               Thai_maichattawa                                = 0x0deb,
-               Thai_thanthakhat                                = 0x0dec,
-               Thai_nikhahit                                   = 0x0ded,
-               Thai_leksun                                             = 0x0df0,
-               Thai_leknung                                    = 0x0df1,
-               Thai_leksong                                    = 0x0df2,
-               Thai_leksam                                             = 0x0df3,
-               Thai_leksi                                              = 0x0df4,
-               Thai_lekha                                              = 0x0df5,
-               Thai_lekhok                                             = 0x0df6,
-               Thai_lekchet                                    = 0x0df7,
-               Thai_lekpaet                                    = 0x0df8,
-               Thai_lekkao                                             = 0x0df9,
-               Hangul                                                  = 0xff31,
-               Hangul_Start                                    = 0xff32,
-               Hangul_End                                              = 0xff33,
-               Hangul_Hanja                                    = 0xff34,
-               Hangul_Jamo                                             = 0xff35,
-               Hangul_Romaja                                   = 0xff36,
-               Hangul_Codeinput                                = 0xff37,
-               Hangul_Jeonja                                   = 0xff38,
-               Hangul_Banja                                    = 0xff39,
-               Hangul_PreHanja                                 = 0xff3a,
-               Hangul_PostHanja                                = 0xff3b,
-               Hangul_SingleCandidate                  = 0xff3c,
-               Hangul_MultipleCandidate                = 0xff3d,
-               Hangul_PreviousCandidate                = 0xff3e,
-               Hangul_Special                                  = 0xff3f,
-               Hangul_switch                                   = 0xff7e,
-               Hangul_Kiyeog                                   = 0x0ea1,
-               Hangul_SsangKiyeog                              = 0x0ea2,
-               Hangul_KiyeogSios                               = 0x0ea3,
-               Hangul_Nieun                                    = 0x0ea4,
-               Hangul_NieunJieuj                               = 0x0ea5,
-               Hangul_NieunHieuh                               = 0x0ea6,
-               Hangul_Dikeud                                   = 0x0ea7,
-               Hangul_SsangDikeud                              = 0x0ea8,
-               Hangul_Rieul                                    = 0x0ea9,
-               Hangul_RieulKiyeog                              = 0x0eaa,
-               Hangul_RieulMieum                               = 0x0eab,
-               Hangul_RieulPieub                               = 0x0eac,
-               Hangul_RieulSios                                = 0x0ead,
-               Hangul_RieulTieut                               = 0x0eae,
-               Hangul_RieulPhieuf                              = 0x0eaf,
-               Hangul_RieulHieuh                               = 0x0eb0,
-               Hangul_Mieum                                    = 0x0eb1,
-               Hangul_Pieub                                    = 0x0eb2,
-               Hangul_SsangPieub                               = 0x0eb3,
-               Hangul_PieubSios                                = 0x0eb4,
-               Hangul_Sios                                             = 0x0eb5,
-               Hangul_SsangSios                                = 0x0eb6,
-               Hangul_Ieung                                    = 0x0eb7,
-               Hangul_Jieuj                                    = 0x0eb8,
-               Hangul_SsangJieuj                               = 0x0eb9,
-               Hangul_Cieuc                                    = 0x0eba,
-               Hangul_Khieuq                                   = 0x0ebb,
-               Hangul_Tieut                                    = 0x0ebc,
-               Hangul_Phieuf                                   = 0x0ebd,
-               Hangul_Hieuh                                    = 0x0ebe,
-               Hangul_A                                                = 0x0ebf,
-               Hangul_AE                                               = 0x0ec0,
-               Hangul_YA                                               = 0x0ec1,
-               Hangul_YAE                                              = 0x0ec2,
-               Hangul_EO                                               = 0x0ec3,
-               Hangul_E                                                = 0x0ec4,
-               Hangul_YEO                                              = 0x0ec5,
-               Hangul_YE                                               = 0x0ec6,
-               Hangul_O                                                = 0x0ec7,
-               Hangul_WA                                               = 0x0ec8,
-               Hangul_WAE                                              = 0x0ec9,
-               Hangul_OE                                               = 0x0eca,
-               Hangul_YO                                               = 0x0ecb,
-               Hangul_U                                                = 0x0ecc,
-               Hangul_WEO                                              = 0x0ecd,
-               Hangul_WE                                               = 0x0ece,
-               Hangul_WI                                               = 0x0ecf,
-               Hangul_YU                                               = 0x0ed0,
-               Hangul_EU                                               = 0x0ed1,
-               Hangul_YI                                               = 0x0ed2,
-               Hangul_I                                                = 0x0ed3,
-               Hangul_J_Kiyeog                                 = 0x0ed4,
-               Hangul_J_SsangKiyeog                    = 0x0ed5,
-               Hangul_J_KiyeogSios                             = 0x0ed6,
-               Hangul_J_Nieun                                  = 0x0ed7,
-               Hangul_J_NieunJieuj                             = 0x0ed8,
-               Hangul_J_NieunHieuh                             = 0x0ed9,
-               Hangul_J_Dikeud                                 = 0x0eda,
-               Hangul_J_Rieul                                  = 0x0edb,
-               Hangul_J_RieulKiyeog                    = 0x0edc,
-               Hangul_J_RieulMieum                             = 0x0edd,
-               Hangul_J_RieulPieub                             = 0x0ede,
-               Hangul_J_RieulSios                              = 0x0edf,
-               Hangul_J_RieulTieut                             = 0x0ee0,
-               Hangul_J_RieulPhieuf                    = 0x0ee1,
-               Hangul_J_RieulHieuh                             = 0x0ee2,
-               Hangul_J_Mieum                                  = 0x0ee3,
-               Hangul_J_Pieub                                  = 0x0ee4,
-               Hangul_J_PieubSios                              = 0x0ee5,
-               Hangul_J_Sios                                   = 0x0ee6,
-               Hangul_J_SsangSios                              = 0x0ee7,
-               Hangul_J_Ieung                                  = 0x0ee8,
-               Hangul_J_Jieuj                                  = 0x0ee9,
-               Hangul_J_Cieuc                                  = 0x0eea,
-               Hangul_J_Khieuq                                 = 0x0eeb,
-               Hangul_J_Tieut                                  = 0x0eec,
-               Hangul_J_Phieuf                                 = 0x0eed,
-               Hangul_J_Hieuh                                  = 0x0eee,
-               Hangul_RieulYeorinHieuh                 = 0x0eef,
-               Hangul_SunkyeongeumMieum                = 0x0ef0,
-               Hangul_SunkyeongeumPieub                = 0x0ef1,
-               Hangul_PanSios                                  = 0x0ef2,
-               Hangul_KkogjiDalrinIeung                = 0x0ef3,
-               Hangul_SunkyeongeumPhieuf               = 0x0ef4,
-               Hangul_YeorinHieuh                              = 0x0ef5,
-               Hangul_AraeA                                    = 0x0ef6,
-               Hangul_AraeAE                                   = 0x0ef7,
-               Hangul_J_PanSios                                = 0x0ef8,
-               Hangul_J_KkogjiDalrinIeung              = 0x0ef9,
-               Hangul_J_YeorinHieuh                    = 0x0efa,
-               Korean_Won                                              = 0x0eff,
-               Armenian_ligature_ew                    = 0x1000587,
-               Armenian_full_stop                              = 0x1000589,
-               Armenian_verjaket                               = 0x1000589,
-               Armenian_separation_mark                = 0x100055d,
-               Armenian_but                                    = 0x100055d,
-               Armenian_hyphen                                 = 0x100058a,
-               Armenian_yentamna                               = 0x100058a,
-               Armenian_exclam                                 = 0x100055c,
-               Armenian_amanak                                 = 0x100055c,
-               Armenian_accent                                 = 0x100055b,
-               Armenian_shesht                                 = 0x100055b,
-               Armenian_question                               = 0x100055e,
-               Armenian_paruyk                                 = 0x100055e,
-               Armenian_AYB                                    = 0x1000531,
-               Armenian_ayb                                    = 0x1000561,
-               Armenian_BEN                                    = 0x1000532,
-               Armenian_ben                                    = 0x1000562,
-               Armenian_GIM                                    = 0x1000533,
-               Armenian_gim                                    = 0x1000563,
-               Armenian_DA                                             = 0x1000534,
-               Armenian_da                                             = 0x1000564,
-               Armenian_YECH                                   = 0x1000535,
-               Armenian_yech                                   = 0x1000565,
-               Armenian_ZA                                             = 0x1000536,
-               Armenian_za                                             = 0x1000566,
-               Armenian_E                                              = 0x1000537,
-               Armenian_e                                              = 0x1000567,
-               Armenian_AT                                             = 0x1000538,
-               Armenian_at                                             = 0x1000568,
-               Armenian_TO                                             = 0x1000539,
-               Armenian_to                                             = 0x1000569,
-               Armenian_ZHE                                    = 0x100053a,
-               Armenian_zhe                                    = 0x100056a,
-               Armenian_INI                                    = 0x100053b,
-               Armenian_ini                                    = 0x100056b,
-               Armenian_LYUN                                   = 0x100053c,
-               Armenian_lyun                                   = 0x100056c,
-               Armenian_KHE                                    = 0x100053d,
-               Armenian_khe                                    = 0x100056d,
-               Armenian_TSA                                    = 0x100053e,
-               Armenian_tsa                                    = 0x100056e,
-               Armenian_KEN                                    = 0x100053f,
-               Armenian_ken                                    = 0x100056f,
-               Armenian_HO                                             = 0x1000540,
-               Armenian_ho                                             = 0x1000570,
-               Armenian_DZA                                    = 0x1000541,
-               Armenian_dza                                    = 0x1000571,
-               Armenian_GHAT                                   = 0x1000542,
-               Armenian_ghat                                   = 0x1000572,
-               Armenian_TCHE                                   = 0x1000543,
-               Armenian_tche                                   = 0x1000573,
-               Armenian_MEN                                    = 0x1000544,
-               Armenian_men                                    = 0x1000574,
-               Armenian_HI                                             = 0x1000545,
-               Armenian_hi                                             = 0x1000575,
-               Armenian_NU                                             = 0x1000546,
-               Armenian_nu                                             = 0x1000576,
-               Armenian_SHA                                    = 0x1000547,
-               Armenian_sha                                    = 0x1000577,
-               Armenian_VO                                             = 0x1000548,
-               Armenian_vo                                             = 0x1000578,
-               Armenian_CHA                                    = 0x1000549,
-               Armenian_cha                                    = 0x1000579,
-               Armenian_PE                                             = 0x100054a,
-               Armenian_pe                                             = 0x100057a,
-               Armenian_JE                                             = 0x100054b,
-               Armenian_je                                             = 0x100057b,
-               Armenian_RA                                             = 0x100054c,
-               Armenian_ra                                             = 0x100057c,
-               Armenian_SE                                             = 0x100054d,
-               Armenian_se                                             = 0x100057d,
-               Armenian_VEV                                    = 0x100054e,
-               Armenian_vev                                    = 0x100057e,
-               Armenian_TYUN                                   = 0x100054f,
-               Armenian_tyun                                   = 0x100057f,
-               Armenian_RE                                             = 0x1000550,
-               Armenian_re                                             = 0x1000580,
-               Armenian_TSO                                    = 0x1000551,
-               Armenian_tso                                    = 0x1000581,
-               Armenian_VYUN                                   = 0x1000552,
-               Armenian_vyun                                   = 0x1000582,
-               Armenian_PYUR                                   = 0x1000553,
-               Armenian_pyur                                   = 0x1000583,
-               Armenian_KE                                             = 0x1000554,
-               Armenian_ke                                             = 0x1000584,
-               Armenian_O                                              = 0x1000555,
-               Armenian_o                                              = 0x1000585,
-               Armenian_FE                                             = 0x1000556,
-               Armenian_fe                                             = 0x1000586,
-               Armenian_apostrophe                             = 0x100055a,
-               Georgian_an                                             = 0x10010d0,
-               Georgian_ban                                    = 0x10010d1,
-               Georgian_gan                                    = 0x10010d2,
-               Georgian_don                                    = 0x10010d3,
-               Georgian_en                                             = 0x10010d4,
-               Georgian_vin                                    = 0x10010d5,
-               Georgian_zen                                    = 0x10010d6,
-               Georgian_tan                                    = 0x10010d7,
-               Georgian_in                                             = 0x10010d8,
-               Georgian_kan                                    = 0x10010d9,
-               Georgian_las                                    = 0x10010da,
-               Georgian_man                                    = 0x10010db,
-               Georgian_nar                                    = 0x10010dc,
-               Georgian_on                                             = 0x10010dd,
-               Georgian_par                                    = 0x10010de,
-               Georgian_zhar                                   = 0x10010df,
-               Georgian_rae                                    = 0x10010e0,
-               Georgian_san                                    = 0x10010e1,
-               Georgian_tar                                    = 0x10010e2,
-               Georgian_un                                             = 0x10010e3,
-               Georgian_phar                                   = 0x10010e4,
-               Georgian_khar                                   = 0x10010e5,
-               Georgian_ghan                                   = 0x10010e6,
-               Georgian_qar                                    = 0x10010e7,
-               Georgian_shin                                   = 0x10010e8,
-               Georgian_chin                                   = 0x10010e9,
-               Georgian_can                                    = 0x10010ea,
-               Georgian_jil                                    = 0x10010eb,
-               Georgian_cil                                    = 0x10010ec,
-               Georgian_char                                   = 0x10010ed,
-               Georgian_xan                                    = 0x10010ee,
-               Georgian_jhan                                   = 0x10010ef,
-               Georgian_hae                                    = 0x10010f0,
-               Georgian_he                                             = 0x10010f1,
-               Georgian_hie                                    = 0x10010f2,
-               Georgian_we                                             = 0x10010f3,
-               Georgian_har                                    = 0x10010f4,
-               Georgian_hoe                                    = 0x10010f5,
-               Georgian_fi                                             = 0x10010f6,
-               Xabovedot                                               = 0x1001e8a,
-               Ibreve                                                  = 0x100012c,
-               Zstroke                                                 = 0x10001b5,
-               Gcaron                                                  = 0x10001e6,
-               Ocaron                                                  = 0x10001d1,
-               Obarred                                                 = 0x100019f,
-               xabovedot                                               = 0x1001e8b,
-               ibreve                                                  = 0x100012d,
-               zstroke                                                 = 0x10001b6,
-               gcaron                                                  = 0x10001e7,
-               ocaron                                                  = 0x10001d2,
-               obarred                                                 = 0x1000275,
-               SCHWA                                                   = 0x100018f,
-               schwa                                                   = 0x1000259,
-               EZH                                                             = 0x10001b7,
-               ezh                                                             = 0x1000292,
-               Lbelowdot                                               = 0x1001e36,
-               lbelowdot                                               = 0x1001e37,
-               Abelowdot                                               = 0x1001ea0,
-               abelowdot                                               = 0x1001ea1,
-               Ahook                                                   = 0x1001ea2,
-               ahook                                                   = 0x1001ea3,
-               Acircumflexacute                                = 0x1001ea4,
-               acircumflexacute                                = 0x1001ea5,
-               Acircumflexgrave                                = 0x1001ea6,
-               acircumflexgrave                                = 0x1001ea7,
-               Acircumflexhook                                 = 0x1001ea8,
-               acircumflexhook                                 = 0x1001ea9,
-               Acircumflextilde                                = 0x1001eaa,
-               acircumflextilde                                = 0x1001eab,
-               Acircumflexbelowdot                             = 0x1001eac,
-               acircumflexbelowdot                             = 0x1001ead,
-               Abreveacute                                             = 0x1001eae,
-               abreveacute                                             = 0x1001eaf,
-               Abrevegrave                                             = 0x1001eb0,
-               abrevegrave                                             = 0x1001eb1,
-               Abrevehook                                              = 0x1001eb2,
-               abrevehook                                              = 0x1001eb3,
-               Abrevetilde                                             = 0x1001eb4,
-               abrevetilde                                             = 0x1001eb5,
-               Abrevebelowdot                                  = 0x1001eb6,
-               abrevebelowdot                                  = 0x1001eb7,
-               Ebelowdot                                               = 0x1001eb8,
-               ebelowdot                                               = 0x1001eb9,
-               Ehook                                                   = 0x1001eba,
-               ehook                                                   = 0x1001ebb,
-               Etilde                                                  = 0x1001ebc,
-               etilde                                                  = 0x1001ebd,
-               Ecircumflexacute                                = 0x1001ebe,
-               ecircumflexacute                                = 0x1001ebf,
-               Ecircumflexgrave                                = 0x1001ec0,
-               ecircumflexgrave                                = 0x1001ec1,
-               Ecircumflexhook                                 = 0x1001ec2,
-               ecircumflexhook                                 = 0x1001ec3,
-               Ecircumflextilde                                = 0x1001ec4,
-               ecircumflextilde                                = 0x1001ec5,
-               Ecircumflexbelowdot                             = 0x1001ec6,
-               ecircumflexbelowdot                             = 0x1001ec7,
-               Ihook                                                   = 0x1001ec8,
-               ihook                                                   = 0x1001ec9,
-               Ibelowdot                                               = 0x1001eca,
-               ibelowdot                                               = 0x1001ecb,
-               Obelowdot                                               = 0x1001ecc,
-               obelowdot                                               = 0x1001ecd,
-               Ohook                                                   = 0x1001ece,
-               ohook                                                   = 0x1001ecf,
-               Ocircumflexacute                                = 0x1001ed0,
-               ocircumflexacute                                = 0x1001ed1,
-               Ocircumflexgrave                                = 0x1001ed2,
-               ocircumflexgrave                                = 0x1001ed3,
-               Ocircumflexhook                                 = 0x1001ed4,
-               ocircumflexhook                                 = 0x1001ed5,
-               Ocircumflextilde                                = 0x1001ed6,
-               ocircumflextilde                                = 0x1001ed7,
-               Ocircumflexbelowdot                             = 0x1001ed8,
-               ocircumflexbelowdot                             = 0x1001ed9,
-               Ohornacute                                              = 0x1001eda,
-               ohornacute                                              = 0x1001edb,
-               Ohorngrave                                              = 0x1001edc,
-               ohorngrave                                              = 0x1001edd,
-               Ohornhook                                               = 0x1001ede,
-               ohornhook                                               = 0x1001edf,
-               Ohorntilde                                              = 0x1001ee0,
-               ohorntilde                                              = 0x1001ee1,
-               Ohornbelowdot                                   = 0x1001ee2,
-               ohornbelowdot                                   = 0x1001ee3,
-               Ubelowdot                                               = 0x1001ee4,
-               ubelowdot                                               = 0x1001ee5,
-               Uhook                                                   = 0x1001ee6,
-               uhook                                                   = 0x1001ee7,
-               Uhornacute                                              = 0x1001ee8,
-               uhornacute                                              = 0x1001ee9,
-               Uhorngrave                                              = 0x1001eea,
-               uhorngrave                                              = 0x1001eeb,
-               Uhornhook                                               = 0x1001eec,
-               uhornhook                                               = 0x1001eed,
-               Uhorntilde                                              = 0x1001eee,
-               uhorntilde                                              = 0x1001eef,
-               Uhornbelowdot                                   = 0x1001ef0,
-               uhornbelowdot                                   = 0x1001ef1,
-               Ybelowdot                                               = 0x1001ef4,
-               ybelowdot                                               = 0x1001ef5,
-               Yhook                                                   = 0x1001ef6,
-               yhook                                                   = 0x1001ef7,
-               Ytilde                                                  = 0x1001ef8,
-               ytilde                                                  = 0x1001ef9,
-               Ohorn                                                   = 0x10001a0,
-               ohorn                                                   = 0x10001a1,
-               Uhorn                                                   = 0x10001af,
-               uhorn                                                   = 0x10001b0,
-               EcuSign                                                 = 0x10020a0,
-               ColonSign                                               = 0x10020a1,
-               CruzeiroSign                                    = 0x10020a2,
-               FFrancSign                                              = 0x10020a3,
-               LiraSign                                                = 0x10020a4,
-               MillSign                                                = 0x10020a5,
-               NairaSign                                               = 0x10020a6,
-               PesetaSign                                              = 0x10020a7,
-               RupeeSign                                               = 0x10020a8,
-               WonSign                                                 = 0x10020a9,
-               NewSheqelSign                                   = 0x10020aa,
-               DongSign                                                = 0x10020ab,
-               EuroSign                                                = 0x20ac,
-               zerosuperior                                    = 0x1002070,
-               foursuperior                                    = 0x1002074,
-               fivesuperior                                    = 0x1002075,
-               sixsuperior                                             = 0x1002076,
-               sevensuperior                                   = 0x1002077,
-               eightsuperior                                   = 0x1002078,
-               ninesuperior                                    = 0x1002079,
-               zerosubscript                                   = 0x1002080,
-               onesubscript                                    = 0x1002081,
-               twosubscript                                    = 0x1002082,
-               threesubscript                                  = 0x1002083,
-               foursubscript                                   = 0x1002084,
-               fivesubscript                                   = 0x1002085,
-               sixsubscript                                    = 0x1002086,
-               sevensubscript                                  = 0x1002087,
-               eightsubscript                                  = 0x1002088,
-               ninesubscript                                   = 0x1002089,
-               partdifferential                                = 0x1002202,
-               emptyset                                                = 0x1002205,
-               elementof                                               = 0x1002208,
-               notelementof                                    = 0x1002209,
-               containsas                                              = 0x100220B,
-               squareroot                                              = 0x100221A,
-               cuberoot                                                = 0x100221B,
-               fourthroot                                              = 0x100221C,
-               dintegral                                               = 0x100222C,
-               tintegral                                               = 0x100222D,
-               because                                                 = 0x1002235,
-               approxeq                                                = 0x1002248,
-               notapproxeq                                             = 0x1002247,
-               notidentical                                    = 0x1002262,
-               stricteq                                                = 0x1002263,
-               braille_dot_1                                   = 0xfff1,
-               braille_dot_2                                   = 0xfff2,
-               braille_dot_3                                   = 0xfff3,
-               braille_dot_4                                   = 0xfff4,
-               braille_dot_5                                   = 0xfff5,
-               braille_dot_6                                   = 0xfff6,
-               braille_dot_7                                   = 0xfff7,
-               braille_dot_8                                   = 0xfff8,
-               braille_dot_9                                   = 0xfff9,
-               braille_dot_10                                  = 0xfffa,
-               braille_blank                                   = 0x1002800,
-               braille_dots_1                                  = 0x1002801,
-               braille_dots_2                                  = 0x1002802,
-               braille_dots_12                                 = 0x1002803,
-               braille_dots_3                                  = 0x1002804,
-               braille_dots_13                                 = 0x1002805,
-               braille_dots_23                                 = 0x1002806,
-               braille_dots_123                                = 0x1002807,
-               braille_dots_4                                  = 0x1002808,
-               braille_dots_14                                 = 0x1002809,
-               braille_dots_24                                 = 0x100280a,
-               braille_dots_124                                = 0x100280b,
-               braille_dots_34                                 = 0x100280c,
-               braille_dots_134                                = 0x100280d,
-               braille_dots_234                                = 0x100280e,
-               braille_dots_1234                               = 0x100280f,
-               braille_dots_5                                  = 0x1002810,
-               braille_dots_15                                 = 0x1002811,
-               braille_dots_25                                 = 0x1002812,
-               braille_dots_125                                = 0x1002813,
-               braille_dots_35                                 = 0x1002814,
-               braille_dots_135                                = 0x1002815,
-               braille_dots_235                                = 0x1002816,
-               braille_dots_1235                               = 0x1002817,
-               braille_dots_45                                 = 0x1002818,
-               braille_dots_145                                = 0x1002819,
-               braille_dots_245                                = 0x100281a,
-               braille_dots_1245                               = 0x100281b,
-               braille_dots_345                                = 0x100281c,
-               braille_dots_1345                               = 0x100281d,
-               braille_dots_2345                               = 0x100281e,
-               braille_dots_12345                              = 0x100281f,
-               braille_dots_6                                  = 0x1002820,
-               braille_dots_16                                 = 0x1002821,
-               braille_dots_26                                 = 0x1002822,
-               braille_dots_126                                = 0x1002823,
-               braille_dots_36                                 = 0x1002824,
-               braille_dots_136                                = 0x1002825,
-               braille_dots_236                                = 0x1002826,
-               braille_dots_1236                               = 0x1002827,
-               braille_dots_46                                 = 0x1002828,
-               braille_dots_146                                = 0x1002829,
-               braille_dots_246                                = 0x100282a,
-               braille_dots_1246                               = 0x100282b,
-               braille_dots_346                                = 0x100282c,
-               braille_dots_1346                               = 0x100282d,
-               braille_dots_2346                               = 0x100282e,
-               braille_dots_12346                              = 0x100282f,
-               braille_dots_56                                 = 0x1002830,
-               braille_dots_156                                = 0x1002831,
-               braille_dots_256                                = 0x1002832,
-               braille_dots_1256                               = 0x1002833,
-               braille_dots_356                                = 0x1002834,
-               braille_dots_1356                               = 0x1002835,
-               braille_dots_2356                               = 0x1002836,
-               braille_dots_12356                              = 0x1002837,
-               braille_dots_456                                = 0x1002838,
-               braille_dots_1456                               = 0x1002839,
-               braille_dots_2456                               = 0x100283a,
-               braille_dots_12456                              = 0x100283b,
-               braille_dots_3456                               = 0x100283c,
-               braille_dots_13456                              = 0x100283d,
-               braille_dots_23456                              = 0x100283e,
-               braille_dots_123456                             = 0x100283f,
-               braille_dots_7                                  = 0x1002840,
-               braille_dots_17                                 = 0x1002841,
-               braille_dots_27                                 = 0x1002842,
-               braille_dots_127                                = 0x1002843,
-               braille_dots_37                                 = 0x1002844,
-               braille_dots_137                                = 0x1002845,
-               braille_dots_237                                = 0x1002846,
-               braille_dots_1237                               = 0x1002847,
-               braille_dots_47                                 = 0x1002848,
-               braille_dots_147                                = 0x1002849,
-               braille_dots_247                                = 0x100284a,
-               braille_dots_1247                               = 0x100284b,
-               braille_dots_347                                = 0x100284c,
-               braille_dots_1347                               = 0x100284d,
-               braille_dots_2347                               = 0x100284e,
-               braille_dots_12347                              = 0x100284f,
-               braille_dots_57                                 = 0x1002850,
-               braille_dots_157                                = 0x1002851,
-               braille_dots_257                                = 0x1002852,
-               braille_dots_1257                               = 0x1002853,
-               braille_dots_357                                = 0x1002854,
-               braille_dots_1357                               = 0x1002855,
-               braille_dots_2357                               = 0x1002856,
-               braille_dots_12357                              = 0x1002857,
-               braille_dots_457                                = 0x1002858,
-               braille_dots_1457                               = 0x1002859,
-               braille_dots_2457                               = 0x100285a,
-               braille_dots_12457                              = 0x100285b,
-               braille_dots_3457                               = 0x100285c,
-               braille_dots_13457                              = 0x100285d,
-               braille_dots_23457                              = 0x100285e,
-               braille_dots_123457                             = 0x100285f,
-               braille_dots_67                                 = 0x1002860,
-               braille_dots_167                                = 0x1002861,
-               braille_dots_267                                = 0x1002862,
-               braille_dots_1267                               = 0x1002863,
-               braille_dots_367                                = 0x1002864,
-               braille_dots_1367                               = 0x1002865,
-               braille_dots_2367                               = 0x1002866,
-               braille_dots_12367                              = 0x1002867,
-               braille_dots_467                                = 0x1002868,
-               braille_dots_1467                               = 0x1002869,
-               braille_dots_2467                               = 0x100286a,
-               braille_dots_12467                              = 0x100286b,
-               braille_dots_3467                               = 0x100286c,
-               braille_dots_13467                              = 0x100286d,
-               braille_dots_23467                              = 0x100286e,
-               braille_dots_123467                             = 0x100286f,
-               braille_dots_567                                = 0x1002870,
-               braille_dots_1567                               = 0x1002871,
-               braille_dots_2567                               = 0x1002872,
-               braille_dots_12567                              = 0x1002873,
-               braille_dots_3567                               = 0x1002874,
-               braille_dots_13567                              = 0x1002875,
-               braille_dots_23567                              = 0x1002876,
-               braille_dots_123567                             = 0x1002877,
-               braille_dots_4567                               = 0x1002878,
-               braille_dots_14567                              = 0x1002879,
-               braille_dots_24567                              = 0x100287a,
-               braille_dots_124567                             = 0x100287b,
-               braille_dots_34567                              = 0x100287c,
-               braille_dots_134567                             = 0x100287d,
-               braille_dots_234567                             = 0x100287e,
-               braille_dots_1234567                    = 0x100287f,
-               braille_dots_8                                  = 0x1002880,
-               braille_dots_18                                 = 0x1002881,
-               braille_dots_28                                 = 0x1002882,
-               braille_dots_128                                = 0x1002883,
-               braille_dots_38                                 = 0x1002884,
-               braille_dots_138                                = 0x1002885,
-               braille_dots_238                                = 0x1002886,
-               braille_dots_1238                               = 0x1002887,
-               braille_dots_48                                 = 0x1002888,
-               braille_dots_148                                = 0x1002889,
-               braille_dots_248                                = 0x100288a,
-               braille_dots_1248                               = 0x100288b,
-               braille_dots_348                                = 0x100288c,
-               braille_dots_1348                               = 0x100288d,
-               braille_dots_2348                               = 0x100288e,
-               braille_dots_12348                              = 0x100288f,
-               braille_dots_58                                 = 0x1002890,
-               braille_dots_158                                = 0x1002891,
-               braille_dots_258                                = 0x1002892,
-               braille_dots_1258                               = 0x1002893,
-               braille_dots_358                                = 0x1002894,
-               braille_dots_1358                               = 0x1002895,
-               braille_dots_2358                               = 0x1002896,
-               braille_dots_12358                              = 0x1002897,
-               braille_dots_458                                = 0x1002898,
-               braille_dots_1458                               = 0x1002899,
-               braille_dots_2458                               = 0x100289a,
-               braille_dots_12458                              = 0x100289b,
-               braille_dots_3458                               = 0x100289c,
-               braille_dots_13458                              = 0x100289d,
-               braille_dots_23458                              = 0x100289e,
-               braille_dots_123458                             = 0x100289f,
-               braille_dots_68                                 = 0x10028a0,
-               braille_dots_168                                = 0x10028a1,
-               braille_dots_268                                = 0x10028a2,
-               braille_dots_1268                               = 0x10028a3,
-               braille_dots_368                                = 0x10028a4,
-               braille_dots_1368                               = 0x10028a5,
-               braille_dots_2368                               = 0x10028a6,
-               braille_dots_12368                              = 0x10028a7,
-               braille_dots_468                                = 0x10028a8,
-               braille_dots_1468                               = 0x10028a9,
-               braille_dots_2468                               = 0x10028aa,
-               braille_dots_12468                              = 0x10028ab,
-               braille_dots_3468                               = 0x10028ac,
-               braille_dots_13468                              = 0x10028ad,
-               braille_dots_23468                              = 0x10028ae,
-               braille_dots_123468                             = 0x10028af,
-               braille_dots_568                                = 0x10028b0,
-               braille_dots_1568                               = 0x10028b1,
-               braille_dots_2568                               = 0x10028b2,
-               braille_dots_12568                              = 0x10028b3,
-               braille_dots_3568                               = 0x10028b4,
-               braille_dots_13568                              = 0x10028b5,
-               braille_dots_23568                              = 0x10028b6,
-               braille_dots_123568                             = 0x10028b7,
-               braille_dots_4568                               = 0x10028b8,
-               braille_dots_14568                              = 0x10028b9,
-               braille_dots_24568                              = 0x10028ba,
-               braille_dots_124568                             = 0x10028bb,
-               braille_dots_34568                              = 0x10028bc,
-               braille_dots_134568                             = 0x10028bd,
-               braille_dots_234568                             = 0x10028be,
-               braille_dots_1234568                    = 0x10028bf,
-               braille_dots_78                                 = 0x10028c0,
-               braille_dots_178                                = 0x10028c1,
-               braille_dots_278                                = 0x10028c2,
-               braille_dots_1278                               = 0x10028c3,
-               braille_dots_378                                = 0x10028c4,
-               braille_dots_1378                               = 0x10028c5,
-               braille_dots_2378                               = 0x10028c6,
-               braille_dots_12378                              = 0x10028c7,
-               braille_dots_478                                = 0x10028c8,
-               braille_dots_1478                               = 0x10028c9,
-               braille_dots_2478                               = 0x10028ca,
-               braille_dots_12478                              = 0x10028cb,
-               braille_dots_3478                               = 0x10028cc,
-               braille_dots_13478                              = 0x10028cd,
-               braille_dots_23478                              = 0x10028ce,
-               braille_dots_123478                             = 0x10028cf,
-               braille_dots_578                                = 0x10028d0,
-               braille_dots_1578                               = 0x10028d1,
-               braille_dots_2578                               = 0x10028d2,
-               braille_dots_12578                              = 0x10028d3,
-               braille_dots_3578                               = 0x10028d4,
-               braille_dots_13578                              = 0x10028d5,
-               braille_dots_23578                              = 0x10028d6,
-               braille_dots_123578                             = 0x10028d7,
-               braille_dots_4578                               = 0x10028d8,
-               braille_dots_14578                              = 0x10028d9,
-               braille_dots_24578                              = 0x10028da,
-               braille_dots_124578                             = 0x10028db,
-               braille_dots_34578                              = 0x10028dc,
-               braille_dots_134578                             = 0x10028dd,
-               braille_dots_234578                             = 0x10028de,
-               braille_dots_1234578                    = 0x10028df,
-               braille_dots_678                                = 0x10028e0,
-               braille_dots_1678                               = 0x10028e1,
-               braille_dots_2678                               = 0x10028e2,
-               braille_dots_12678                              = 0x10028e3,
-               braille_dots_3678                               = 0x10028e4,
-               braille_dots_13678                              = 0x10028e5,
-               braille_dots_23678                              = 0x10028e6,
-               braille_dots_123678                             = 0x10028e7,
-               braille_dots_4678                               = 0x10028e8,
-               braille_dots_14678                              = 0x10028e9,
-               braille_dots_24678                              = 0x10028ea,
-               braille_dots_124678                             = 0x10028eb,
-               braille_dots_34678                              = 0x10028ec,
-               braille_dots_134678                             = 0x10028ed,
-               braille_dots_234678                             = 0x10028ee,
-               braille_dots_1234678                    = 0x10028ef,
-               braille_dots_5678                               = 0x10028f0,
-               braille_dots_15678                              = 0x10028f1,
-               braille_dots_25678                              = 0x10028f2,
-               braille_dots_125678                             = 0x10028f3,
-               braille_dots_35678                              = 0x10028f4,
-               braille_dots_135678                             = 0x10028f5,
-               braille_dots_235678                             = 0x10028f6,
-               braille_dots_1235678                    = 0x10028f7,
-               braille_dots_45678                              = 0x10028f8,
-               braille_dots_145678                             = 0x10028f9,
-               braille_dots_245678                             = 0x10028fa,
-               braille_dots_1245678                    = 0x10028fb,
-               braille_dots_345678                             = 0x10028fc,
-               braille_dots_1345678                    = 0x10028fd,
-               braille_dots_2345678                    = 0x10028fe,
-               braille_dots_12345678                   = 0x10028ff,
-               Sinh_ng                                                 = 0x1000d82,
-               Sinh_h2                                                 = 0x1000d83,
-               Sinh_a                                                  = 0x1000d85,
-               Sinh_aa                                                 = 0x1000d86,
-               Sinh_ae                                                 = 0x1000d87,
-               Sinh_aee                                                = 0x1000d88,
-               Sinh_i                                                  = 0x1000d89,
-               Sinh_ii                                                 = 0x1000d8a,
-               Sinh_u                                                  = 0x1000d8b,
-               Sinh_uu                                                 = 0x1000d8c,
-               Sinh_ri                                                 = 0x1000d8d,
-               Sinh_rii                                                = 0x1000d8e,
-               Sinh_lu                                                 = 0x1000d8f,
-               Sinh_luu                                                = 0x1000d90,
-               Sinh_e                                                  = 0x1000d91,
-               Sinh_ee                                                 = 0x1000d92,
-               Sinh_ai                                                 = 0x1000d93,
-               Sinh_o                                                  = 0x1000d94,
-               Sinh_oo                                                 = 0x1000d95,
-               Sinh_au                                                 = 0x1000d96,
-               Sinh_ka                                                 = 0x1000d9a,
-               Sinh_kha                                                = 0x1000d9b,
-               Sinh_ga                                                 = 0x1000d9c,
-               Sinh_gha                                                = 0x1000d9d,
-               Sinh_ng2                                                = 0x1000d9e,
-               Sinh_nga                                                = 0x1000d9f,
-               Sinh_ca                                                 = 0x1000da0,
-               Sinh_cha                                                = 0x1000da1,
-               Sinh_ja                                                 = 0x1000da2,
-               Sinh_jha                                                = 0x1000da3,
-               Sinh_nya                                                = 0x1000da4,
-               Sinh_jnya                                               = 0x1000da5,
-               Sinh_nja                                                = 0x1000da6,
-               Sinh_tta                                                = 0x1000da7,
-               Sinh_ttha                                               = 0x1000da8,
-               Sinh_dda                                                = 0x1000da9,
-               Sinh_ddha                                               = 0x1000daa,
-               Sinh_nna                                                = 0x1000dab,
-               Sinh_ndda                                               = 0x1000dac,
-               Sinh_tha                                                = 0x1000dad,
-               Sinh_thha                                               = 0x1000dae,
-               Sinh_dha                                                = 0x1000daf,
-               Sinh_dhha                                               = 0x1000db0,
-               Sinh_na                                                 = 0x1000db1,
-               Sinh_ndha                                               = 0x1000db3,
-               Sinh_pa                                                 = 0x1000db4,
-               Sinh_pha                                                = 0x1000db5,
-               Sinh_ba                                                 = 0x1000db6,
-               Sinh_bha                                                = 0x1000db7,
-               Sinh_ma                                                 = 0x1000db8,
-               Sinh_mba                                                = 0x1000db9,
-               Sinh_ya                                                 = 0x1000dba,
-               Sinh_ra                                                 = 0x1000dbb,
-               Sinh_la                                                 = 0x1000dbd,
-               Sinh_va                                                 = 0x1000dc0,
-               Sinh_sha                                                = 0x1000dc1,
-               Sinh_ssha                                               = 0x1000dc2,
-               Sinh_sa                                                 = 0x1000dc3,
-               Sinh_ha                                                 = 0x1000dc4,
-               Sinh_lla                                                = 0x1000dc5,
-               Sinh_fa                                                 = 0x1000dc6,
-               Sinh_al                                                 = 0x1000dca,
-               Sinh_aa2                                                = 0x1000dcf,
-               Sinh_ae2                                                = 0x1000dd0,
-               Sinh_aee2                                               = 0x1000dd1,
-               Sinh_i2                                                 = 0x1000dd2,
-               Sinh_ii2                                                = 0x1000dd3,
-               Sinh_u2                                                 = 0x1000dd4,
-               Sinh_uu2                                                = 0x1000dd6,
-               Sinh_ru2                                                = 0x1000dd8,
-               Sinh_e2                                                 = 0x1000dd9,
-               Sinh_ee2                                                = 0x1000dda,
-               Sinh_ai2                                                = 0x1000ddb,
-               Sinh_o2                                                 = 0x1000ddc,
-               Sinh_oo2                                                = 0x1000ddd,
-               Sinh_au2                                                = 0x1000dde,
-               Sinh_lu2                                                = 0x1000ddf,
-               Sinh_ruu2                                               = 0x1000df2,
-               Sinh_luu2                                               = 0x1000df3,
-               Sinh_kunddaliya                                 = 0x1000df4,
-               XF86ModeLock                                    = 0x1008FF01,
-               XF86MonBrightnessUp                             = 0x1008FF02,
-               XF86MonBrightnessDown                   = 0x1008FF03,
-               XF86KbdLightOnOff                               = 0x1008FF04,
-               XF86KbdBrightnessUp                             = 0x1008FF05,
-               XF86KbdBrightnessDown                   = 0x1008FF06,
-               XF86Standby                                             = 0x1008FF10,
-               XF86AudioLowerVolume                    = 0x1008FF11,
-               XF86AudioMute                                   = 0x1008FF12,
-               XF86AudioRaiseVolume                    = 0x1008FF13,
-               XF86AudioPlay                                   = 0x1008FF14,
-               XF86AudioStop                                   = 0x1008FF15,
-               XF86AudioPrev                                   = 0x1008FF16,
-               XF86AudioNext                                   = 0x1008FF17,
-               XF86HomePage                                    = 0x1008FF18,
-               XF86Mail                                                = 0x1008FF19,
-               XF86Start                                               = 0x1008FF1A,
-               XF86Search                                              = 0x1008FF1B,
-               XF86AudioRecord                                 = 0x1008FF1C,
-               XF86Calculator                                  = 0x1008FF1D,
-               XF86Memo                                                = 0x1008FF1E,
-               XF86ToDoList                                    = 0x1008FF1F,
-               XF86Calendar                                    = 0x1008FF20,
-               XF86PowerDown                                   = 0x1008FF21,
-               XF86ContrastAdjust                              = 0x1008FF22,
-               XF86RockerUp                                    = 0x1008FF23,
-               XF86RockerDown                                  = 0x1008FF24,
-               XF86RockerEnter                                 = 0x1008FF25,
-               XF86Back                                                = 0x1008FF26,
-               XF86Forward                                             = 0x1008FF27,
-               XF86Stop                                                = 0x1008FF28,
-               XF86Refresh                                             = 0x1008FF29,
-               XF86PowerOff                                    = 0x1008FF2A,
-               XF86WakeUp                                              = 0x1008FF2B,
-               XF86Eject                                               = 0x1008FF2C,
-               XF86ScreenSaver                                 = 0x1008FF2D,
-               XF86WWW                                                 = 0x1008FF2E,
-               XF86Sleep                                               = 0x1008FF2F,
-               XF86Favorites                                   = 0x1008FF30,
-               XF86AudioPause                                  = 0x1008FF31,
-               XF86AudioMedia                                  = 0x1008FF32,
-               XF86MyComputer                                  = 0x1008FF33,
-               XF86VendorHome                                  = 0x1008FF34,
-               XF86LightBulb                                   = 0x1008FF35,
-               XF86Shop                                                = 0x1008FF36,
-               XF86History                                             = 0x1008FF37,
-               XF86OpenURL                                             = 0x1008FF38,
-               XF86AddFavorite                                 = 0x1008FF39,
-               XF86HotLinks                                    = 0x1008FF3A,
-               XF86BrightnessAdjust                    = 0x1008FF3B,
-               XF86Finance                                             = 0x1008FF3C,
-               XF86Community                                   = 0x1008FF3D,
-               XF86AudioRewind                                 = 0x1008FF3E,
-               XF86BackForward                                 = 0x1008FF3F,
-               XF86Launch0                                             = 0x1008FF40,
-               XF86Launch1                                             = 0x1008FF41,
-               XF86Launch2                                             = 0x1008FF42,
-               XF86Launch3                                             = 0x1008FF43,
-               XF86Launch4                                             = 0x1008FF44,
-               XF86Launch5                                             = 0x1008FF45,
-               XF86Launch6                                             = 0x1008FF46,
-               XF86Launch7                                             = 0x1008FF47,
-               XF86Launch8                                             = 0x1008FF48,
-               XF86Launch9                                             = 0x1008FF49,
-               XF86LaunchA                                             = 0x1008FF4A,
-               XF86LaunchB                                             = 0x1008FF4B,
-               XF86LaunchC                                             = 0x1008FF4C,
-               XF86LaunchD                                             = 0x1008FF4D,
-               XF86LaunchE                                             = 0x1008FF4E,
-               XF86LaunchF                                             = 0x1008FF4F,
-               XF86ApplicationLeft                             = 0x1008FF50,
-               XF86ApplicationRight                    = 0x1008FF51,
-               XF86Book                                                = 0x1008FF52,
-               XF86CD                                                  = 0x1008FF53,
-               XF86Calculater                                  = 0x1008FF54,
-               XF86Clear                                               = 0x1008FF55,
-               XF86Close                                               = 0x1008FF56,
-               XF86Copy                                                = 0x1008FF57,
-               XF86Cut                                                 = 0x1008FF58,
-               XF86Display                                             = 0x1008FF59,
-               XF86DOS                                                 = 0x1008FF5A,
-               XF86Documents                                   = 0x1008FF5B,
-               XF86Excel                                               = 0x1008FF5C,
-               XF86Explorer                                    = 0x1008FF5D,
-               XF86Game                                                = 0x1008FF5E,
-               XF86Go                                                  = 0x1008FF5F,
-               XF86iTouch                                              = 0x1008FF60,
-               XF86LogOff                                              = 0x1008FF61,
-               XF86Market                                              = 0x1008FF62,
-               XF86Meeting                                             = 0x1008FF63,
-               XF86MenuKB                                              = 0x1008FF65,
-               XF86MenuPB                                              = 0x1008FF66,
-               XF86MySites                                             = 0x1008FF67,
-               XF86New                                                 = 0x1008FF68,
-               XF86News                                                = 0x1008FF69,
-               XF86OfficeHome                                  = 0x1008FF6A,
-               XF86Open                                                = 0x1008FF6B,
-               XF86Option                                              = 0x1008FF6C,
-               XF86Paste                                               = 0x1008FF6D,
-               XF86Phone                                               = 0x1008FF6E,
-               XF86Q                                                   = 0x1008FF70,
-               XF86Reply                                               = 0x1008FF72,
-               XF86Reload                                              = 0x1008FF73,
-               XF86RotateWindows                               = 0x1008FF74,
-               XF86RotationPB                                  = 0x1008FF75,
-               XF86RotationKB                                  = 0x1008FF76,
-               XF86Save                                                = 0x1008FF77,
-               XF86ScrollUp                                    = 0x1008FF78,
-               XF86ScrollDown                                  = 0x1008FF79,
-               XF86ScrollClick                                 = 0x1008FF7A,
-               XF86Send                                                = 0x1008FF7B,
-               XF86Spell                                               = 0x1008FF7C,
-               XF86SplitScreen                                 = 0x1008FF7D,
-               XF86Support                                             = 0x1008FF7E,
-               XF86TaskPane                                    = 0x1008FF7F,
-               XF86Terminal                                    = 0x1008FF80,
-               XF86Tools                                               = 0x1008FF81,
-               XF86Travel                                              = 0x1008FF82,
-               XF86UserPB                                              = 0x1008FF84,
-               XF86User1KB                                             = 0x1008FF85,
-               XF86User2KB                                             = 0x1008FF86,
-               XF86Video                                               = 0x1008FF87,
-               XF86WheelButton                                 = 0x1008FF88,
-               XF86Word                                                = 0x1008FF89,
-               XF86Xfer                                                = 0x1008FF8A,
-               XF86ZoomIn                                              = 0x1008FF8B,
-               XF86ZoomOut                                             = 0x1008FF8C,
-               XF86Away                                                = 0x1008FF8D,
-               XF86Messenger                                   = 0x1008FF8E,
-               XF86WebCam                                              = 0x1008FF8F,
-               XF86MailForward                                 = 0x1008FF90,
-               XF86Pictures                                    = 0x1008FF91,
-               XF86Music                                               = 0x1008FF92,
-               XF86Battery                                             = 0x1008FF93,
-               XF86Bluetooth                                   = 0x1008FF94,
-               XF86WLAN                                                = 0x1008FF95,
-               XF86UWB                                                 = 0x1008FF96,
-               XF86AudioForward                                = 0x1008FF97,
-               XF86AudioRepeat                                 = 0x1008FF98,
-               XF86AudioRandomPlay                             = 0x1008FF99,
-               XF86Subtitle                                    = 0x1008FF9A,
-               XF86AudioCycleTrack                             = 0x1008FF9B,
-               XF86CycleAngle                                  = 0x1008FF9C,
-               XF86FrameBack                                   = 0x1008FF9D,
-               XF86FrameForward                                = 0x1008FF9E,
-               XF86Time                                                = 0x1008FF9F,
-               XF86Select                                              = 0x1008FFA0,
-               XF86View                                                = 0x1008FFA1,
-               XF86TopMenu                                             = 0x1008FFA2,
-               XF86Red                                                 = 0x1008FFA3,
-               XF86Green                                               = 0x1008FFA4,
-               XF86Yellow                                              = 0x1008FFA5,
-               XF86Blue                                                = 0x1008FFA6,
-               XF86Suspend                                             = 0x1008FFA7,
-               XF86Hibernate                                   = 0x1008FFA8,
-               XF86TouchpadToggle                              = 0x1008FFA9,
-               XF86TouchpadOn                                  = 0x1008FFB0,
-               XF86TouchpadOff                                 = 0x1008FFB1,
-               XF86AudioMicMute                                = 0x1008FFB2,
-               XF86Keyboard                                    = 0x1008FFB3,
-               XF86WWAN                                                = 0x1008FFB4,
-               XF86RFKill                                              = 0x1008FFB5,
-               XF86AudioPreset                                 = 0x1008FFB6,
-               XF86Switch_VT_1                                 = 0x1008FE01,
-               XF86Switch_VT_2                                 = 0x1008FE02,
-               XF86Switch_VT_3                                 = 0x1008FE03,
-               XF86Switch_VT_4                                 = 0x1008FE04,
-               XF86Switch_VT_5                                 = 0x1008FE05,
-               XF86Switch_VT_6                                 = 0x1008FE06,
-               XF86Switch_VT_7                                 = 0x1008FE07,
-               XF86Switch_VT_8                                 = 0x1008FE08,
-               XF86Switch_VT_9                                 = 0x1008FE09,
-               XF86Switch_VT_10                                = 0x1008FE0A,
-               XF86Switch_VT_11                                = 0x1008FE0B,
-               XF86Switch_VT_12                                = 0x1008FE0C,
-               XF86Ungrab                                              = 0x1008FE20,
-               XF86ClearGrab                                   = 0x1008FE21,
-               XF86Next_VMode                                  = 0x1008FE22,
-               XF86Prev_VMode                                  = 0x1008FE23,
-               XF86LogWindowTree                               = 0x1008FE24,
-               XF86LogGrabInfo                                 = 0x1008FE25,
-               SunFA_Grave                                             = 0x1005FF00,
-               SunFA_Circum                                    = 0x1005FF01,
-               SunFA_Tilde                                             = 0x1005FF02,
-               SunFA_Acute                                             = 0x1005FF03,
-               SunFA_Diaeresis                                 = 0x1005FF04,
-               SunFA_Cedilla                                   = 0x1005FF05,
-               SunF36                                                  = 0x1005FF10,
-               SunF37                                                  = 0x1005FF11,
-               SunSys_Req                                              = 0x1005FF60,
-               SunPrint_Screen                                 = 0x0000FF61,
-               SunCompose                                              = 0x0000FF20,
-               SunAltGraph                                             = 0x0000FF7E,
-               SunPageUp                                               = 0x0000FF55,
-               SunPageDown                                             = 0x0000FF56,
-               SunUndo                                                 = 0x0000FF65,
-               SunAgain                                                = 0x0000FF66,
-               SunFind                                                 = 0x0000FF68,
-               SunStop                                                 = 0x0000FF69,
-               SunProps                                                = 0x1005FF70,
-               SunFront                                                = 0x1005FF71,
-               SunCopy                                                 = 0x1005FF72,
-               SunOpen                                                 = 0x1005FF73,
-               SunPaste                                                = 0x1005FF74,
-               SunCut                                                  = 0x1005FF75,
-               SunPowerSwitch                                  = 0x1005FF76,
-               SunAudioLowerVolume                             = 0x1005FF77,
-               SunAudioMute                                    = 0x1005FF78,
-               SunAudioRaiseVolume                             = 0x1005FF79,
-               SunVideoDegauss                                 = 0x1005FF7A,
-               SunVideoLowerBrightness                 = 0x1005FF7B,
-               SunVideoRaiseBrightness                 = 0x1005FF7C,
-               SunPowerSwitchShift                             = 0x1005FF7D,
-               Dring_accent                                    = 0x1000FEB0,
-               Dcircumflex_accent                              = 0x1000FE5E,
-               Dcedilla_accent                                 = 0x1000FE2C,
-               Dacute_accent                                   = 0x1000FE27,
-               Dgrave_accent                                   = 0x1000FE60,
-               Dtilde                                                  = 0x1000FE7E,
-               Ddiaeresis                                              = 0x1000FE22,
-               DRemove                                                 = 0x1000FF00,
-               hpClearLine                                             = 0x1000FF6F,
-               hpInsertLine                                    = 0x1000FF70,
-               hpDeleteLine                                    = 0x1000FF71,
-               hpInsertChar                                    = 0x1000FF72,
-               hpDeleteChar                                    = 0x1000FF73,
-               hpBackTab                                               = 0x1000FF74,
-               hpKP_BackTab                                    = 0x1000FF75,
-               hpModelock1                                             = 0x1000FF48,
-               hpModelock2                                             = 0x1000FF49,
-               hpReset                                                 = 0x1000FF6C,
-               hpSystem                                                = 0x1000FF6D,
-               hpUser                                                  = 0x1000FF6E,
-               hpmute_acute                                    = 0x100000A8,
-               hpmute_grave                                    = 0x100000A9,
-               hpmute_asciicircum                              = 0x100000AA,
-               hpmute_diaeresis                                = 0x100000AB,
-               hpmute_asciitilde                               = 0x100000AC,
-               hplira                                                  = 0x100000AF,
-               hpguilder                                               = 0x100000BE,
-               hpYdiaeresis                                    = 0x100000EE,
-               hpIO                                                    = 0x100000EE,
-               hplongminus                                             = 0x100000F6,
-               hpblock                                                 = 0x100000FC,
-               osfCopy                                                 = 0x1004FF02,
-               osfCut                                                  = 0x1004FF03,
-               osfPaste                                                = 0x1004FF04,
-               osfBackTab                                              = 0x1004FF07,
-               osfBackSpace                                    = 0x1004FF08,
-               osfClear                                                = 0x1004FF0B,
-               osfEscape                                               = 0x1004FF1B,
-               osfAddMode                                              = 0x1004FF31,
-               osfPrimaryPaste                                 = 0x1004FF32,
-               osfQuickPaste                                   = 0x1004FF33,
-               osfPageLeft                                             = 0x1004FF40,
-               osfPageUp                                               = 0x1004FF41,
-               osfPageDown                                             = 0x1004FF42,
-               osfPageRight                                    = 0x1004FF43,
-               osfActivate                                             = 0x1004FF44,
-               osfMenuBar                                              = 0x1004FF45,
-               osfLeft                                                 = 0x1004FF51,
-               osfUp                                                   = 0x1004FF52,
-               osfRight                                                = 0x1004FF53,
-               osfDown                                                 = 0x1004FF54,
-               osfEndLine                                              = 0x1004FF57,
-               osfBeginLine                                    = 0x1004FF58,
-               osfEndData                                              = 0x1004FF59,
-               osfBeginData                                    = 0x1004FF5A,
-               osfPrevMenu                                             = 0x1004FF5B,
-               osfNextMenu                                             = 0x1004FF5C,
-               osfPrevField                                    = 0x1004FF5D,
-               osfNextField                                    = 0x1004FF5E,
-               osfSelect                                               = 0x1004FF60,
-               osfInsert                                               = 0x1004FF63,
-               osfUndo                                                 = 0x1004FF65,
-               osfMenu                                                 = 0x1004FF67,
-               osfCancel                                               = 0x1004FF69,
-               osfHelp                                                 = 0x1004FF6A,
-               osfSelectAll                                    = 0x1004FF71,
-               osfDeselectAll                                  = 0x1004FF72,
-               osfReselect                                             = 0x1004FF73,
-               osfExtend                                               = 0x1004FF74,
-               osfRestore                                              = 0x1004FF78,
-               osfDelete                                               = 0x1004FFFF,
-               Reset                                                   = 0x1000FF6C,
-               System                                                  = 0x1000FF6D,
-               User                                                    = 0x1000FF6E,
-               ClearLine                                               = 0x1000FF6F,
-               InsertLine                                              = 0x1000FF70,
-               DeleteLine                                              = 0x1000FF71,
-               InsertChar                                              = 0x1000FF72,
-               DeleteChar                                              = 0x1000FF73,
-               BackTab                                                 = 0x1000FF74,
-               KP_BackTab                                              = 0x1000FF75,
-               Ext16bit_L                                              = 0x1000FF76,
-               Ext16bit_R                                              = 0x1000FF77,
-               mute_acute                                              = 0x100000a8,
-               mute_grave                                              = 0x100000a9,
-               mute_asciicircum                                = 0x100000aa,
-               mute_diaeresis                                  = 0x100000ab,
-               mute_asciitilde                                 = 0x100000ac,
-               lira                                                    = 0x100000af,
-               guilder                                                 = 0x100000be,
-               IO                                                              = 0x100000ee,
-               longminus                                               = 0x100000f6,
-               block                                                   = 0x100000fc,
-    }
-}
\ No newline at end of file
diff --git a/src/Input/KeyEventArgs.cs b/src/Input/KeyEventArgs.cs
deleted file mode 100644 (file)
index 510e68a..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-#region License
-//
-// The Open Toolkit Library License
-//
-// Copyright (c) 2006 - 2009 the Open Toolkit library.
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights to
-// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
-// the Software, and to permit persons to whom the Software is furnished to do
-// so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in all
-// copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-// OTHER DEALINGS IN THE SOFTWARE.
-//
-#endregion
-
-using System;
-using System.Collections.Generic;
-using System.Text;
-
-namespace Crow
-{
-    public class KeyEventArgs : EventArgs
-    {
-               int keyCode;
-               Key key;
-               bool repeat;    
-
-               public KeyEventArgs(Key _key, bool _repeat)
-               {
-                       key = _key;
-                       repeat = _repeat;
-               }
-               public KeyEventArgs(KeyEventArgs args)
-               {
-                   Key = args.Key;
-               }
-               public Key Key
-               {
-                   get { return key; }
-                   internal set { key = value; }
-               }
-               public uint ScanCode
-               {
-                   get { return (uint)Key; }
-               }
-               public bool IsRepeat
-               {
-                   get { return repeat; }
-                   internal set { repeat = value; }
-               }
-    }
-}
diff --git a/src/Input/KeyPressEventArgs.cs b/src/Input/KeyPressEventArgs.cs
deleted file mode 100644 (file)
index 7399061..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-// #region License
-// //
-// // The Open Toolkit Library License
-// //
-// // Copyright (c) 2006 - 2009 the Open Toolkit library.
-// //
-// // Permission is hereby granted, free of charge, to any person obtaining a copy
-// // of this software and associated documentation files (the "Software"), to deal
-// // in the Software without restriction, including without limitation the rights to 
-// // use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
-// // the Software, and to permit persons to whom the Software is furnished to do
-// // so, subject to the following conditions:
-// //
-// // The above copyright notice and this permission notice shall be included in all
-// // copies or substantial portions of the Software.
-// //
-// // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-// // OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-// // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-// // WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-// // OTHER DEALINGS IN THE SOFTWARE.
-// //
-// #endregion
-
-using System;
-
-namespace Crow
-{
-    /// <summary>
-    /// Defines the event arguments for KeyPress events. Instances of this class are cached:
-    /// KeyPressEventArgs should only be used inside the relevant event, unless manually cloned.
-    /// </summary>
-    public class KeyPressEventArgs : EventArgs
-    {
-        char key_char;
-        
-        /// <summary>
-        /// Constructs a new instance.
-        /// </summary>
-        /// <param name="keyChar">The ASCII character that was typed.</param>
-        public KeyPressEventArgs(char keyChar)
-        {
-            KeyChar = keyChar;
-        }
-
-        /// <summary>
-        /// Gets a <see cref="System.Char"/> that defines the ASCII character that was typed.
-        /// </summary>
-        public char KeyChar
-        {
-            get { return key_char; }
-            internal set { key_char = value; }
-        }
-    }
-}
diff --git a/src/Input/MouseButton.cs b/src/Input/MouseButton.cs
deleted file mode 100644 (file)
index 92be477..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
- #region License
- //
- // The Open Toolkit Library License
- //
- // Copyright (c) 2006 - 2009 the Open Toolkit library.
- //
- // Permission is hereby granted, free of charge, to any person obtaining a copy
- // of this software and associated documentation files (the "Software"), to deal
- // in the Software without restriction, including without limitation the rights to
- // use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
- // the Software, and to permit persons to whom the Software is furnished to do
- // so, subject to the following conditions:
- //
- // The above copyright notice and this permission notice shall be included in all
- // copies or substantial portions of the Software.
- //
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
- // OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
- // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
- // WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- // OTHER DEALINGS IN THE SOFTWARE.
- //
- #endregion
-
-using System;
-using System.Collections.Generic;
-using System.Text;
-
-namespace Crow
-{
-    /// <summary>
-    /// Enumerates all possible mouse buttons.
-    /// </summary>
-    public enum MouseButton
-    {
-       /// <summary>
-       /// The left mouse button.
-       /// </summary>
-       Left = 0,
-       /// <summary>
-       /// The middle mouse button.
-       /// </summary>
-       Middle,
-       /// <summary>
-       /// The right mouse button.
-       /// </summary>
-       Right,
-       /// <summary>
-       /// The first extra mouse button.
-       /// </summary>
-       Button1,
-       /// <summary>
-       /// The second extra mouse button.
-       /// </summary>
-       Button2,
-       /// <summary>
-       /// The third extra mouse button.
-       /// </summary>
-       Button3,
-       /// <summary>
-       /// The fourth extra mouse button.
-       /// </summary>
-       Button4,
-       /// <summary>
-       /// The fifth extra mouse button.
-       /// </summary>
-       Button5,
-       /// <summary>
-       /// The sixth extra mouse button.
-       /// </summary>
-       Button6,
-       /// <summary>
-       /// The seventh extra mouse button.
-       /// </summary>
-       Button7,
-       /// <summary>
-       /// The eigth extra mouse button.
-       /// </summary>
-       Button8,
-       /// <summary>
-       /// The ninth extra mouse button.
-       /// </summary>
-       Button9,
-       /// <summary>
-       /// Indicates the last available mouse button.
-       /// </summary>
-       LastButton
-    }
-}
diff --git a/src/Input/MouseEventArgs.cs b/src/Input/MouseEventArgs.cs
deleted file mode 100644 (file)
index 6874109..0000000
+++ /dev/null
@@ -1,372 +0,0 @@
-#region License
-//
-// MouseEventArgs.cs
-//
-// Author:
-//       Stefanos A. <stapostol@gmail.com>
-//
-// Copyright (c) 2006-2014 Stefanos Apostolopoulos
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-//
-#endregion
-
-using System;
-
-namespace Crow
-{
-    /// <summary>
-    /// Defines the event data for <see cref="MouseDevice"/> events.
-    /// </summary>
-    /// <remarks>
-    /// <para>
-    /// Do not cache instances of this type outside their event handler.
-    /// If necessary, you can clone an instance using the
-    /// <see cref="MouseEventArgs(MouseEventArgs)"/> constructor.
-    /// </para>
-    /// </remarks>
-    public class MouseEventArgs : EventArgs
-    {
-       #region Fields
-
-       MouseState state;
-
-       #endregion
-
-       #region Constructors
-
-       /// <summary>
-       /// Constructs a new instance.
-       /// </summary>
-       public MouseEventArgs()
-       {
-           state.SetIsConnected(true);
-       }
-
-       /// <summary>
-       /// Constructs a new instance.
-       /// </summary>
-       /// <param name="x">The X position.</param>
-       /// <param name="y">The Y position.</param>
-       public MouseEventArgs(int x, int y)
-           : this()
-       {
-           state.X = x;
-           state.Y = y;
-       }
-
-       /// <summary>
-       /// Constructs a new instance.
-       /// </summary>
-       /// <param name="args">The <see cref="MouseEventArgs"/> instance to clone.</param>
-       public MouseEventArgs(MouseEventArgs args)
-           : this(args.X, args.Y)
-       {
-       }
-
-       #endregion
-
-       #region Protected Members
-
-       internal void SetButton(MouseButton button, ButtonState state)
-       {
-           if (button < 0 || button > MouseButton.LastButton)
-               throw new ArgumentOutOfRangeException();
-
-           switch (state)
-           {
-               case ButtonState.Pressed:
-                   this.state.EnableBit((int)button);
-                   break;
-
-               case ButtonState.Released:
-                   this.state.DisableBit((int)button);
-                   break;
-           }
-       }
-
-       internal ButtonState GetButton(MouseButton button)
-       {
-           if (button < 0 || button > MouseButton.LastButton)
-               throw new ArgumentOutOfRangeException();
-
-           return
-               state.ReadBit((int)button) ?
-               ButtonState.Pressed : ButtonState.Released;
-       }
-
-       #endregion
-
-       #region Public Members
-
-       /// <summary>
-       /// Gets the X position of the mouse for the event.
-       /// </summary>
-       public int X { get { return state.X; } internal set { state.X = value; } }
-
-       /// <summary>
-       /// Gets the Y position of the mouse for the event.
-       /// </summary>
-       public int Y { get { return state.Y; } internal set { state.Y = value; } }
-
-       /// <summary>
-       /// Gets a <see cref="System.Drawing.Point"/> representing the location of the mouse for the event.
-       /// </summary>
-       public Point Position
-       {
-           get { return new Point(state.X, state.Y); }
-           set
-           {
-               X = value.X;
-               Y = value.Y;
-           }
-       }
-
-       /// <summary>
-       /// Gets the current <see cref="OpenTK.Input.MouseState"/>.
-       /// </summary>
-       public MouseState Mouse
-       {
-           get { return state; }
-           set { state = value; }
-       }
-
-       #endregion
-    }
-
-    /// <summary>
-    /// Defines the event data for <see cref="MouseDevice.Move"/> events.
-    /// </summary>
-    /// <remarks>
-    /// <para>
-    /// Do not cache instances of this type outside their event handler.
-    /// If necessary, you can clone an instance using the
-    /// <see cref="MouseMoveEventArgs(MouseMoveEventArgs)"/> constructor.
-    /// </para>
-    /// </remarks>
-    public class MouseMoveEventArgs : MouseEventArgs
-    {
-       #region Fields
-
-       int x_delta, y_delta;
-
-       #endregion
-
-       #region Constructors
-
-       /// <summary>
-       /// Constructs a new <see cref="MouseMoveEventArgs"/> instance.
-       /// </summary>
-       public MouseMoveEventArgs() { }
-
-       /// <summary>
-       /// Constructs a new <see cref="MouseMoveEventArgs"/> instance.
-       /// </summary>
-       /// <param name="x">The X position.</param>
-       /// <param name="y">The Y position.</param>
-       /// <param name="xDelta">The change in X position produced by this event.</param>
-       /// <param name="yDelta">The change in Y position produced by this event.</param>
-       public MouseMoveEventArgs(int x, int y, int xDelta, int yDelta)
-           : base(x, y)
-       {
-           XDelta = xDelta;
-           YDelta = yDelta;
-       }
-
-       /// <summary>
-       /// Constructs a new <see cref="MouseMoveEventArgs"/> instance.
-       /// </summary>
-       /// <param name="args">The <see cref="MouseMoveEventArgs"/> instance to clone.</param>
-       public MouseMoveEventArgs(MouseMoveEventArgs args)
-           : this(args.X, args.Y, args.XDelta, args.YDelta)
-       {
-       }
-
-       #endregion
-
-       #region Public Members
-
-       /// <summary>
-       /// Gets the change in X position produced by this event.
-       /// </summary>
-       public int XDelta { get { return x_delta; } internal set { x_delta = value; } }
-
-       /// <summary>
-       /// Gets the change in Y position produced by this event.
-       /// </summary>
-       public int YDelta { get { return y_delta; } internal set { y_delta = value; } }
-
-       #endregion
-    }
-
-    /// <summary>
-    /// Defines the event data for <see cref="MouseDevice.ButtonDown"/> and <see cref="MouseDevice.ButtonUp"/> events.
-    /// </summary>
-    /// <remarks>
-    /// <para>
-    /// Do not cache instances of this type outside their event handler.
-    /// If necessary, you can clone an instance using the
-    /// <see cref="MouseButtonEventArgs(MouseButtonEventArgs)"/> constructor.
-    /// </para>
-    /// </remarks>
-    public class MouseButtonEventArgs : MouseEventArgs
-    {
-       #region Fields
-
-       MouseButton button;
-
-       #endregion
-
-       #region Constructors
-
-       /// <summary>
-       /// Constructs a new <see cref="MouseButtonEventArgs"/> instance.
-       /// </summary>
-       public MouseButtonEventArgs() { }
-
-       /// <summary>
-       /// Constructs a new <see cref="MouseButtonEventArgs"/> instance.
-       /// </summary>
-       /// <param name="x">The X position.</param>
-       /// <param name="y">The Y position.</param>
-       /// <param name="button">The mouse button for the event.</param>
-       /// <param name="pressed">The current state of the button.</param>
-       public MouseButtonEventArgs(int x, int y, MouseButton button, bool pressed)
-           : base(x, y)
-       {
-           this.button = button;
-           this.IsPressed = pressed;
-       }
-
-       public MouseButtonEventArgs(MouseButton button)
-               : base()
-       {
-               this.button = button;
-       }
-
-       /// <summary>
-       /// Constructs a new <see cref="MouseButtonEventArgs"/> instance.
-       /// </summary>
-       /// <param name="args">The <see cref="MouseButtonEventArgs"/> instance to clone.</param>
-       public MouseButtonEventArgs(MouseButtonEventArgs args)
-           : this(args.X, args.Y, args.Button, args.IsPressed)
-       {
-       }
-
-       #endregion
-
-       #region Public Members
-
-       /// <summary>
-       /// Gets the <see cref="MouseButton"/> that triggered this event.
-       /// </summary>
-       public MouseButton Button { get { return button; } internal set { button = value; } }
-
-       /// <summary>
-       /// Gets a System.Boolean representing the state of the mouse button for the event.
-       /// </summary>
-       public bool IsPressed
-       {
-           get { return GetButton(Button) == ButtonState.Pressed; }
-           internal set { SetButton(Button, value ? ButtonState.Pressed : ButtonState.Released); }
-       }
-
-       #endregion
-    }
-
-    /// <summary>
-    /// Defines the event data for <see cref="MouseDevice.WheelChanged"/> events.
-    /// </summary>
-    /// <remarks>
-    /// <para>
-    /// Do not cache instances of this type outside their event handler.
-    /// If necessary, you can clone an instance using the
-    /// <see cref="MouseWheelEventArgs(MouseWheelEventArgs)"/> constructor.
-    /// </para>
-    /// </remarks>
-    public class MouseWheelEventArgs : MouseEventArgs
-    {
-       #region Fields
-
-       float delta;
-
-       #endregion
-
-       #region Constructors
-
-       /// <summary>
-       /// Constructs a new <see cref="MouseWheelEventArgs"/> instance.
-       /// </summary>
-       public MouseWheelEventArgs() { }
-
-       /// <summary>
-       /// Constructs a new <see cref="MouseWheelEventArgs"/> instance.
-       /// </summary>
-       /// <param name="x">The X position.</param>
-       /// <param name="y">The Y position.</param>
-       /// <param name="value">The value of the wheel.</param>
-       /// <param name="delta">The change in value of the wheel for this event.</param>
-       public MouseWheelEventArgs(int x, int y, int value, int delta)
-           : base(x, y)
-       {
-           Mouse.SetScrollAbsolute(Mouse.Scroll.X, value);
-           this.delta = delta;
-       }
-
-       /// <summary>
-       /// Constructs a new <see cref="MouseWheelEventArgs"/> instance.
-       /// </summary>
-       /// <param name="args">The <see cref="MouseWheelEventArgs"/> instance to clone.</param>
-       public MouseWheelEventArgs(MouseWheelEventArgs args)
-           : this(args.X, args.Y, args.Value, args.Delta)
-       {
-       }
-
-       #endregion
-
-       #region Public Members
-
-       /// <summary>
-       /// Gets the value of the wheel in integer units.
-       /// To support high-precision mice, it is recommended to use <see cref="ValuePrecise"/> instead.
-       /// </summary>
-       public int Value { get { return (int)Math.Round(Mouse.Scroll.Y, MidpointRounding.AwayFromZero); } }
-
-       /// <summary>
-       /// Gets the change in value of the wheel for this event in integer units.
-       /// To support high-precision mice, it is recommended to use <see cref="DeltaPrecise"/> instead.
-       /// </summary>
-       public int Delta { get { return (int)Math.Round(delta, MidpointRounding.AwayFromZero); } }
-
-       /// <summary>
-       /// Gets the precise value of the wheel in floating-point units.
-       /// </summary>
-       public float ValuePrecise
-       {
-           get { return Mouse.Scroll.Y; }
-       }
-
-       /// <summary>
-       /// Gets the precise change in value of the wheel for this event in floating-point units.
-       /// </summary>
-       public float DeltaPrecise { get { return delta; } internal set { delta = value; } }
-
-       #endregion
-    }
-}
diff --git a/src/Input/MouseScroll.cs b/src/Input/MouseScroll.cs
deleted file mode 100644 (file)
index a04e9d6..0000000
+++ /dev/null
@@ -1,118 +0,0 @@
-#region License
-//
-// MouseWheel.cs
-//
-// Author:
-//       Stefanos A. <stapostol@gmail.com>
-//
-// Copyright (c) 2006-2014 Stefanos Apostolopoulos
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-//
-#endregion
-
-using System;
-
-namespace Crow
-{
-    /// <summary>
-    /// Represents the state of a mouse wheel.
-    /// </summary>
-    public struct MouseScroll : IEquatable<MouseScroll>
-    {
-       #region Public Members
-
-       /// <summary>
-       /// Gets the absolute horizontal offset of the wheel,
-       /// or 0 if no horizontal scroll wheel exists.
-       /// </summary>
-       /// <value>The x.</value>
-       public float X { get; internal set; }
-
-       /// <summary>
-       /// Gets the absolute vertical offset of the wheel,
-       /// or 0 if no vertical scroll wheel exists.
-       /// </summary>
-       /// <value>The y.</value>
-       public float Y { get; internal set; }
-
-       /// <param name="left">A <see cref="MouseScroll"/> instance to test for equality.</param>
-       /// <param name="right">A <see cref="MouseScroll"/> instance to test for equality.</param>
-       public static bool operator ==(MouseScroll left, MouseScroll right)
-       {
-           return left.Equals(right);
-       }
-
-       /// <param name="left">A <see cref="MouseScroll"/> instance to test for inequality.</param>
-       /// <param name="right">A <see cref="MouseScroll"/> instance to test for inequality.</param>
-       public static bool operator !=(MouseScroll left, MouseScroll right)
-       {
-           return !left.Equals(right);
-       }
-
-       /// <summary>
-       /// Returns a <see cref="System.String"/> that represents the current <see cref="OpenTK.Input.MouseScroll"/>.
-       /// </summary>
-       /// <returns>A <see cref="System.String"/> that represents the current <see cref="OpenTK.Input.MouseScroll"/>.</returns>
-       public override string ToString()
-       {
-           return string.Format("[X={0:0.00}, Y={1:0.00}]", X, Y);
-       }
-
-       /// <summary>
-       /// Serves as a hash function for a <see cref="OpenTK.Input.MouseScroll"/> object.
-       /// </summary>
-       /// <returns>A hash code for this instance that is suitable for use in hashing algorithms and data structures such as a
-       /// hash table.</returns>
-       public override int GetHashCode()
-       {
-           return X.GetHashCode() ^ Y.GetHashCode();
-       }
-
-       /// <summary>
-       /// Determines whether the specified <see cref="System.Object"/> is equal to the current <see cref="OpenTK.Input.MouseScroll"/>.
-       /// </summary>
-       /// <param name="obj">The <see cref="System.Object"/> to compare with the current <see cref="OpenTK.Input.MouseScroll"/>.</param>
-       /// <returns><c>true</c> if the specified <see cref="System.Object"/> is equal to the current
-       /// <see cref="OpenTK.Input.MouseScroll"/>; otherwise, <c>false</c>.</returns>
-       public override bool Equals(object obj)
-       {
-           return
-               obj is MouseScroll &&
-               Equals((MouseScroll)obj);
-       }
-
-       #endregion
-
-       #region IEquatable Members
-
-       /// <summary>
-       /// Determines whether the specified <see cref="OpenTK.Input.MouseScroll"/> is equal to the current <see cref="OpenTK.Input.MouseScroll"/>.
-       /// </summary>
-       /// <param name="other">The <see cref="OpenTK.Input.MouseScroll"/> to compare with the current <see cref="OpenTK.Input.MouseScroll"/>.</param>
-       /// <returns><c>true</c> if the specified <see cref="OpenTK.Input.MouseScroll"/> is equal to the current
-       /// <see cref="OpenTK.Input.MouseScroll"/>; otherwise, <c>false</c>.</returns>
-       public bool Equals(MouseScroll other)
-       {
-           return X == other.X && Y == other.Y;
-       }
-
-       #endregion
-    }
-}
diff --git a/src/Input/MouseState.cs b/src/Input/MouseState.cs
deleted file mode 100644 (file)
index f6db21e..0000000
+++ /dev/null
@@ -1,362 +0,0 @@
- #region License
- //
- // The Open Toolkit Library License
- //
- // Copyright (c) 2006 - 2009 the Open Toolkit library.
- //
- // Permission is hereby granted, free of charge, to any person obtaining a copy
- // of this software and associated documentation files (the "Software"), to deal
- // in the Software without restriction, including without limitation the rights to
- // use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
- // the Software, and to permit persons to whom the Software is furnished to do
- // so, subject to the following conditions:
- //
- // The above copyright notice and this permission notice shall be included in all
- // copies or substantial portions of the Software.
- //
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
- // OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
- // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
- // WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- // OTHER DEALINGS IN THE SOFTWARE.
- //
- #endregion
-
-using System;
-using System.Collections.Generic;
-using System.Text;
-
-namespace Crow
-{
-    /// <summary>
-    /// Encapsulates the state of a mouse device.
-    /// </summary>
-    public struct MouseState : IEquatable<MouseState>
-    {
-       #region Fields
-
-       public const int MaxButtons = 16; // we are storing in an ushort
-       Point position;
-       MouseScroll scroll;
-       ushort buttons;
-       bool is_connected;
-
-       #endregion
-
-
-
-       #region Public Members
-
-       /// <summary>
-       /// Gets a <see cref="System.Boolean"/> indicating whether the specified
-       /// <see cref="OpenTK.Input.MouseButton"/> is pressed.
-       /// </summary>
-       /// <param name="button">The <see cref="OpenTK.Input.MouseButton"/> to check.</param>
-       /// <returns>True if key is pressed; false otherwise.</returns>
-       public bool this[MouseButton button]
-       {
-           get { return IsButtonDown(button); }
-           internal set
-           {
-               if (value)
-                   EnableBit((int)button);
-               else
-                   DisableBit((int)button);
-           }
-       }
-
-       /// <summary>
-       /// Gets a <see cref="System.Boolean"/> indicating whether this button is down.
-       /// </summary>
-       /// <param name="button">The <see cref="OpenTK.Input.MouseButton"/> to check.</param>
-       public bool IsButtonDown(MouseButton button)
-       {
-           return ReadBit((int)button);
-       }
-
-       /// <summary>
-       /// Gets a <see cref="System.Boolean"/> indicating whether this button is up.
-       /// </summary>
-       /// <param name="button">The <see cref="OpenTK.Input.MouseButton"/> to check.</param>
-       public bool IsButtonUp(MouseButton button)
-       {
-           return !ReadBit((int)button);
-       }
-
-       /// <summary>
-       /// Gets the absolute wheel position in integer units.
-       /// To support high-precision mice, it is recommended to use <see cref="WheelPrecise"/> instead.
-       /// </summary>
-       public int Wheel
-       {
-           get { return (int)Math.Round(scroll.Y, MidpointRounding.AwayFromZero); }
-       }
-
-       /// <summary>
-       /// Gets the absolute wheel position in floating-point units.
-       /// </summary>
-       public float WheelPrecise
-       {
-           get { return scroll.Y; }
-       }
-
-       /// <summary>
-       /// Gets a <see cref="OpenTK.Input.MouseScroll"/> instance,
-       /// representing the current state of the mouse scroll wheel.
-       /// </summary>
-       public MouseScroll Scroll
-       {
-           get { return scroll; }
-       }
-
-       /// <summary>
-       /// Gets an integer representing the absolute x position of the pointer, in window pixel coordinates.
-       /// </summary>
-       public int X
-       {
-               get { return position.X; }
-           set { position.X = value; }
-       }
-
-       /// <summary>
-       /// Gets an integer representing the absolute y position of the pointer, in window pixel coordinates.
-       /// </summary>
-       public int Y
-       {
-               get { return position.Y; }
-           set { position.Y = value; }
-       }
-
-       /// <summary>
-       /// Gets a <see cref="System.Boolean"/> indicating whether the left mouse button is pressed.
-       /// This property is intended for XNA compatibility.
-       /// </summary>
-       public ButtonState LeftButton
-       {
-           get { return IsButtonDown(MouseButton.Left) ? ButtonState.Pressed : ButtonState.Released; }
-       }
-
-       /// <summary>
-       /// Gets a <see cref="System.Boolean"/> indicating whether the middle mouse button is pressed.
-       /// This property is intended for XNA compatibility.
-       /// </summary>
-       public ButtonState MiddleButton
-       {
-           get { return IsButtonDown(MouseButton.Middle) ? ButtonState.Pressed : ButtonState.Released; }
-       }
-
-       /// <summary>
-       /// Gets a <see cref="System.Boolean"/> indicating whether the right mouse button is pressed.
-       /// This property is intended for XNA compatibility.
-       /// </summary>
-       public ButtonState RightButton
-       {
-           get { return IsButtonDown(MouseButton.Right) ? ButtonState.Pressed : ButtonState.Released; }
-       }
-
-       /// <summary>
-       /// Gets a <see cref="System.Boolean"/> indicating whether the first extra mouse button is pressed.
-       /// This property is intended for XNA compatibility.
-       /// </summary>
-       public ButtonState XButton1
-       {
-           get { return IsButtonDown(MouseButton.Button1) ? ButtonState.Pressed : ButtonState.Released; }
-       }
-
-       /// <summary>
-       /// Gets a <see cref="System.Boolean"/> indicating whether the second extra mouse button is pressed.
-       /// This property is intended for XNA compatibility.
-       /// </summary>
-       public ButtonState XButton2
-       {
-           get { return IsButtonDown(MouseButton.Button2) ? ButtonState.Pressed : ButtonState.Released; }
-       }
-
-       /// <summary>
-       /// Gets the absolute wheel position in integer units. This property is intended for XNA compatibility.
-       /// To support high-precision mice, it is recommended to use <see cref="WheelPrecise"/> instead.
-       /// </summary>
-       public int ScrollWheelValue
-       {
-           get { return Wheel; }
-       }
-
-       /// <summary>
-       /// Gets a value indicating whether this instance is connected.
-       /// </summary>
-       /// <value><c>true</c> if this instance is connected; otherwise, <c>false</c>.</value>
-       public bool IsConnected
-       {
-           get { return is_connected; }
-           internal set { is_connected = value; }
-       }
-
-       /// <summary>
-       /// Checks whether two <see cref="MouseState" /> instances are equal.
-       /// </summary>
-       /// <param name="left">
-       /// A <see cref="MouseState"/> instance.
-       /// </param>
-       /// <param name="right">
-       /// A <see cref="MouseState"/> instance.
-       /// </param>
-       /// <returns>
-       /// True if both left is equal to right; false otherwise.
-       /// </returns>
-       public static bool operator ==(MouseState left, MouseState right)
-       {
-           return left.Equals(right);
-       }
-
-       /// <summary>
-       /// Checks whether two <see cref="MouseState" /> instances are not equal.
-       /// </summary>
-       /// <param name="left">
-       /// A <see cref="MouseState"/> instance.
-       /// </param>
-       /// <param name="right">
-       /// A <see cref="MouseState"/> instance.
-       /// </param>
-       /// <returns>
-       /// True if both left is not equal to right; false otherwise.
-       /// </returns>
-       public static bool operator !=(MouseState left, MouseState right)
-       {
-           return !left.Equals(right);
-       }
-
-       /// <summary>
-       /// Compares to an object instance for equality.
-       /// </summary>
-       /// <param name="obj">
-       /// The <see cref="System.Object"/> to compare to.
-       /// </param>
-       /// <returns>
-       /// True if this instance is equal to obj; false otherwise.
-       /// </returns>
-       public override bool Equals(object obj)
-       {
-           if (obj is MouseState)
-           {
-               return this == (MouseState)obj;
-           }
-           else
-           {
-               return false;
-           }
-       }
-
-       /// <summary>
-       /// Generates a hashcode for the current instance.
-       /// </summary>
-       /// <returns>
-       /// A <see cref="System.Int32"/> represting the hashcode for this instance.
-       /// </returns>
-       public override int GetHashCode()
-       {
-           return buttons.GetHashCode() ^ X.GetHashCode() ^ Y.GetHashCode() ^ scroll.GetHashCode();
-       }
-
-       /// <summary>
-       /// Returns a <see cref="System.String"/> that represents the current <see cref="OpenTK.Input.MouseState"/>.
-       /// </summary>
-       /// <returns>A <see cref="System.String"/> that represents the current <see cref="OpenTK.Input.MouseState"/>.</returns>
-       public override string ToString()
-       {
-           string b = Convert.ToString(buttons, 2).PadLeft(10, '0');
-           return String.Format("[X={0}, Y={1}, Scroll={2}, Buttons={3}, IsConnected={4}]",
-               X, Y, Scroll, b, IsConnected);
-       }
-
-       #endregion
-
-       #region Internal Members
-
-       internal Point Position
-       {
-           get { return position; }
-           set { position = value; }
-       }
-
-       internal bool ReadBit(int offset)
-       {
-           ValidateOffset(offset);
-           return (buttons & (1 << offset)) != 0;
-       }
-
-       public void EnableBit(int offset)
-       {
-           ValidateOffset(offset);
-           buttons |= unchecked((ushort)(1 << offset));
-       }
-
-       public void DisableBit(int offset)
-       {
-           ValidateOffset(offset);
-           buttons &= unchecked((ushort)(~(1 << offset)));
-       }
-
-       internal void MergeBits(MouseState other)
-       {
-           buttons |= other.buttons;
-           SetScrollRelative(other.scroll.X, other.scroll.Y);
-           X += other.X;
-           Y += other.Y;
-           IsConnected |= other.IsConnected;
-       }
-
-       internal void SetIsConnected(bool value)
-       {
-           IsConnected = value;
-       }
-
-       #region Internal Members
-
-       internal void SetScrollAbsolute(float x, float y)
-       {
-           scroll.X = x;
-           scroll.Y = y;
-       }
-
-       internal void SetScrollRelative(float x, float y)
-       {
-           scroll.X += x;
-           scroll.Y += y;
-       }
-
-       #endregion
-
-       #endregion
-
-       #region Private Members
-
-       static void ValidateOffset(int offset)
-       {
-           if (offset < 0 || offset >= 16)
-               throw new ArgumentOutOfRangeException("offset");
-       }
-
-       #endregion
-
-       #region IEquatable<MouseState> Members
-
-       /// <summary>
-       /// Compares two MouseState instances.
-       /// </summary>
-       /// <param name="other">The instance to compare two.</param>
-       /// <returns>True, if both instances are equal; false otherwise.</returns>
-       public bool Equals(MouseState other)
-       {
-           return
-               buttons == other.buttons &&
-               X == other.X &&
-               Y == other.Y &&
-               Scroll == other.Scroll;
-       }
-
-       #endregion
-    }
-}
diff --git a/src/Instantiator.cs b/src/Instantiator.cs
deleted file mode 100644 (file)
index c59043b..0000000
+++ /dev/null
@@ -1,1199 +0,0 @@
-//
-// Instantiator.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-using System.Threading;
-using System.IO;
-using System.Text;
-using System.Diagnostics;
-using System.Xml;
-using System.Reflection.Emit;
-using System.Reflection;
-using System.Collections.Generic;
-using System.Linq;
-using Crow.IML;
-
-namespace Crow.IML
-{
-       public class InstantiatorException : Exception {
-               public string Path;
-               public InstantiatorException (string path, Exception innerException)
-                       : base ("ITor error:" + path, innerException){
-                       Path = path;
-               }
-       }
-       public delegate object InstanciatorInvoker(Interface iface);
-
-       /// <summary>
-       /// Reflexion being very slow, the settings of the starting values for widgets are set by a dynamic method.
-       /// This method is created on the first instacing and is recalled for further widget instancing.
-       /// 
-       /// It includes:
-       ///     - XML values setting
-       ///     - Default values (appearing as attribute in C#)  loading
-       ///     - Styling
-       /// 
-       /// Instantiators are shared amongs interfaces. Their are stored with their path as key, and inlined template
-       /// and itemtemplate are stored with a generated uuid
-       /// </summary>
-       public class Instantiator
-       {
-               #region Dynamic Method ID generation
-               static long curId = 0;
-               internal static long NewId {
-                       get { return curId++; }
-               }
-               #endregion
-
-               public Type RootType;
-               InstanciatorInvoker loader;
-               protected Interface iface;
-
-               internal string sourcePath;
-
-               #if DESIGN_MODE
-               public static int NextInstantiatorID = 0;
-               public int currentInstantiatorID = 0;
-               int currentDesignID = 0;
-               internal string NextDesignID { get { return string.Format ("{0}_{1}",currentInstantiatorID, currentDesignID++); }}
-               #endif
-
-               #region CTOR
-               /// <summary>
-               /// Initializes a new instance of the Instantiator class.
-               /// </summary>
-               public Instantiator (Interface _iface, string path) : this (_iface, _iface.GetStreamFromPath(path), path) {
-                       
-               }
-               /// <summary>
-               /// Initializes a new instance of the Instantiator class.
-               /// </summary>
-               public Instantiator (Interface _iface, Stream stream, string srcPath = null)
-               {
-                       #if DESIGN_MODE
-                       currentInstantiatorID = NextInstantiatorID++;
-                       #endif
-                       iface = _iface;
-                       sourcePath = srcPath;
-                       #if DEBUG_LOAD
-                       Stopwatch loadingTime = new Stopwatch ();
-                       loadingTime.Start ();
-                       #endif
-                       try {
-                               using (XmlReader itr = XmlReader.Create (stream)) {
-                                       parseIML (itr);
-                               }
-                               stream.Dispose ();
-                       } catch (Exception ex) {
-                               throw new InstantiatorException(sourcePath, ex);
-                       } finally {
-                               #if DEBUG_LOAD
-                               loadingTime.Stop ();
-                               Debug.WriteLine ("IML Instantiator creation '{2}' : {0} ticks, {1} ms",
-                               loadingTime.ElapsedTicks, loadingTime.ElapsedMilliseconds, sourcePath);
-                               #endif
-                       }
-               }
-               /// <summary>
-               /// Initializes a new instance of the Instantiator class with an already openned xml reader
-               /// positionned on the start tag inside the itemTemplate
-               /// </summary>
-               public Instantiator (Interface _iface, XmlReader itr){
-                       #if DESIGN_MODE
-                       currentInstantiatorID = NextInstantiatorID++;
-                       #endif
-                       iface = _iface;
-                       parseIML (itr);
-               }
-               //TODO:check if still used
-               public Instantiator (Interface _iface, Type _root, InstanciatorInvoker _loader)
-               {
-                       #if DESIGN_MODE
-                       currentInstantiatorID = NextInstantiatorID++;
-                       #endif
-                       iface = _iface;
-                       RootType = _root;
-                       loader = _loader;
-               }
-               /// <summary>
-               /// Create a new instantiator from IML fragment provided directely as a string
-               /// </summary>
-               /// <returns>A new instantiator</returns>
-               /// <param name="fragment">IML string</param>
-               public static Instantiator CreateFromImlFragment (Interface _iface, string fragment)
-               {
-                       using (Stream s = new MemoryStream (Encoding.UTF8.GetBytes (fragment))) {
-                               return new Instantiator (_iface, s);
-                       }
-               }
-               #endregion
-
-               /// <summary>
-               /// Creates a new instance of the GraphicObject compiled in the instantiator
-               /// and bind it the an interface
-               /// </summary>
-               /// <returns>The new graphic object instance</returns>
-               /// <param name="iface">The interface to bind to</param>
-               public GraphicObject CreateInstance(){
-                       return loader (iface) as GraphicObject;
-               }
-               /// <summary>
-               /// Creates a new instance of T compiled in the instantiator
-               /// and bind it the an interface
-               /// </summary>
-               /// <returns>The new T instance</returns>
-               /// <param name="iface">The interface to bind to</param>
-               public T CreateInstance<T>(){
-                       return (T)loader (iface);
-               }
-               List<DynamicMethod> dsValueChangedDynMeths = new List<DynamicMethod>();
-               List<Delegate> cachedDelegates = new List<Delegate>();
-               /// <summary>
-               /// store indices of template delegate to be handled by root parentChanged event
-               /// </summary>
-               List<int> templateCachedDelegateIndices = new List<int>();
-               /// <summary>
-               /// Store template bindings in the instantiator
-               /// </summary>
-               Delegate templateBinding;
-
-               #region IML parsing
-               /// <summary>
-               /// Parses IML and build a dynamic method that will be used to instantiate one or multiple occurences of the IML file or fragment
-               /// </summary>
-               void parseIML (XmlReader reader) {
-                       IMLContext ctx = new IMLContext (findRootType (reader));
-
-                       ctx.nodesStack.Push (new Node (ctx.RootType));
-                       emitLoader (reader, ctx);
-                       ctx.nodesStack.Pop ();
-
-                       foreach (int idx in templateCachedDelegateIndices)
-                               ctx.emitCachedDelegateHandlerAddition(idx, CompilerServices.eiLogicalParentChanged);
-
-                       ctx.ResolveNamedTargets ();
-
-                       emitBindingDelegates (ctx);
-
-            ctx.il.Emit (OpCodes.Ldloc_0);//load root obj to return
-                       ctx.il.Emit(OpCodes.Ret);
-
-                       reader.Read ();//close tag
-                       RootType = ctx.RootType;
-                       loader = (InstanciatorInvoker)ctx.dm.CreateDelegate (typeof (InstanciatorInvoker), this);
-               }
-               /// <summary>
-               /// read first node to set GraphicObject class for loading
-               /// and let reader position on that node
-               /// </summary>
-               Type findRootType (XmlReader reader)
-               {
-                       string root = "Object";
-                       while (reader.NodeType != XmlNodeType.Element)
-                               reader.Read ();
-                       root = reader.Name;
-                       Type t = tryGetGOType (root);
-                       if (t == null)
-                               throw new Exception ("IML parsing error: undefined root type (" + root + ")");
-                       return t;
-               }
-               /// <summary>
-               /// main parsing entry point
-               /// </summary>
-               void emitLoader (XmlReader reader, IMLContext ctx)
-               {
-                       int curLine = ctx.curLine;
-
-                       #if DESIGN_MODE
-                       IXmlLineInfo li = (IXmlLineInfo)reader;
-                       ctx.curLine += li.LineNumber - 1;
-                       #endif
-
-                       string tmpXml = reader.ReadOuterXml ();
-
-                       if (ctx.nodesStack.Peek().HasTemplate)
-                               emitTemplateLoad (ctx, tmpXml);
-
-                       emitGOLoad (ctx, tmpXml);
-
-                       ctx.curLine = curLine;
-                       //emitCheckAndBindValueChanged (ctx);
-               }
-               /// <summary>
-               /// Parses the item template tag.
-               /// </summary>
-               /// <returns>the string triplet dataType, itemTmpID read as attribute of this tag</returns>
-               /// <param name="reader">current xml text reader</param>
-               /// <param name="itemTemplatePath">file containing the templates if its a dedicated one</param>
-               string[] parseItemTemplateTag (XmlReader reader, string itemTemplatePath = "") {
-                       string dataType = "default", datas = "", path = "", dataTest = "TypeOf";
-                       while (reader.MoveToNextAttribute ()) {
-                               if (reader.Name == "DataType")
-                                       dataType = reader.Value;
-                               else if (reader.Name == "Data")
-                                       datas = reader.Value;
-                               else if (reader.Name == "Path")
-                                       path = reader.Value;
-                               else if (reader.Name == "DataTest")
-                                       dataTest = reader.Value;
-                       }
-                       reader.MoveToElement ();
-
-                       string itemTmpID = itemTemplatePath;
-
-                       if (string.IsNullOrEmpty (path)) {
-                               itemTmpID += Guid.NewGuid ().ToString ();
-                               iface.Instantiators [itemTmpID] =
-                                       new ItemTemplate (iface, new MemoryStream (Encoding.UTF8.GetBytes (reader.ReadInnerXml ())), dataTest, dataType, datas);
-
-                       } else {
-                               if (!reader.IsEmptyElement)
-                                       throw new Exception ("ItemTemplate with Path attribute set may not include sub nodes");
-                               itemTmpID += path+dataType+datas;
-                               if (!iface.Instantiators.ContainsKey (itemTmpID))
-                                       iface.Instantiators [itemTmpID] =
-                                               new ItemTemplate (iface, path, dataTest, dataType, datas);
-                       }
-                       return new string [] { dataType, itemTmpID, datas, dataTest };
-               }
-               /// <summary>
-               /// process template and item template definition prior to
-               /// other attributes or childs processing
-               /// </summary>
-               /// <param name="ctx">Loading Context</param>
-               /// <param name="tmpXml">xml fragment</param>
-               void emitTemplateLoad (IMLContext ctx, string tmpXml) {
-                       //if its a template, first read template elements
-                       using (XmlTextReader reader = new XmlTextReader (tmpXml, XmlNodeType.Element, null)) {
-                               List<string[]> itemTemplateIds = new List<string[]> ();
-                               bool inlineTemplate = false;
-
-                               reader.Read ();
-                               string templatePath = reader.GetAttribute ("Template");
-                               string itemTemplatePath = reader.GetAttribute ("ItemTemplate");
-
-                               int depth = reader.Depth + 1;
-                               while (reader.Read ()) {
-                                       if (!reader.IsStartElement () || reader.Depth > depth)
-                                               continue;
-                                       if (reader.Name == "Template") {
-                                               inlineTemplate = true;
-                                               #if DESIGN_MODE
-                                               ctx.il.Emit (OpCodes.Ldloc_0);
-                                               ctx.il.Emit (OpCodes.Ldc_I4_1);
-                                               ctx.il.Emit (OpCodes.Stfld, typeof(TemplatedControl).GetField("design_inlineTemplate"));
-                                               #endif
-                                               reader.Read ();
-                                               readChildren (reader, ctx, -1);
-                                       } else if (reader.Name == "ItemTemplate")
-                                               itemTemplateIds.Add (parseItemTemplateTag (reader));                                    
-                               }
-
-                               if (!inlineTemplate) {//load from path or default template
-                                       ctx.il.Emit (OpCodes.Ldloc_0);//Load  current templatedControl ref
-                                       if (string.IsNullOrEmpty (templatePath)) {
-                                               ctx.il.Emit (OpCodes.Ldnull);//default template loading
-                                       } else {
-                                               ctx.il.Emit (OpCodes.Ldarg_1);//load currentInterface
-                                               ctx.il.Emit (OpCodes.Ldstr, templatePath); //Load template path string
-                                               ctx.il.Emit (OpCodes.Callvirt,//call Interface.Load(path)
-                                                       CompilerServices.miIFaceLoad);
-                                       }
-                                       ctx.il.Emit (OpCodes.Callvirt, CompilerServices.miLoadTmp);//load template
-                               }
-                               if (itemTemplateIds.Count == 0) {
-                                       //try to load ItemTemplate(s) from ItemTemplate attribute of TemplatedGroup
-                                       if (!string.IsNullOrEmpty (itemTemplatePath)) {
-                                               //check if it is already loaded in cache as a single itemTemplate instantiator
-                                               if (iface.Instantiators.ContainsKey (itemTemplatePath)) {
-                                                       itemTemplateIds.Add (new string [] { "default", itemTemplatePath, "" });
-                                               } else {
-                                                       using (Stream stream = iface.GetStreamFromPath (itemTemplatePath)) {
-                                                               //itemtemplate files may have multiple root nodes
-                                                               XmlReaderSettings itrSettings = new XmlReaderSettings { ConformanceLevel = ConformanceLevel.Fragment };
-                                                               using (XmlReader itr = XmlReader.Create (stream, itrSettings)) {                                                                        
-                                                                       while (itr.Read ()) {
-                                                                               if (!itr.IsStartElement ())
-                                                                                       continue;
-                                                                               if (itr.NodeType == XmlNodeType.Element) {
-                                                                                       if (itr.Name != "ItemTemplate") {
-                                                                                               //the file contains a single template to use as default
-                                                                                               iface.Instantiators [itemTemplatePath] =
-                                                                                                       new ItemTemplate (iface, itr);
-                                                                                               itemTemplateIds.Add (new string [] { "default", itemTemplatePath, "", "TypeOf" });
-                                                                                               break;//we should be at the end of the file
-                                                                                       }
-                                                                                       itemTemplateIds.Add (parseItemTemplateTag (itr, itemTemplatePath));
-                                                                               }
-                                                                       }
-                                                               }
-                                                       }
-                                               }
-                                       }
-                               }
-                               if (!ctx.nodesStack.Peek ().IsTemplatedGroup)
-                                       return;
-                               //add the default item template if no default is defined
-                               if (!itemTemplateIds.Any(ids=>ids[0] == "default"))
-                                       itemTemplateIds.Add (new string [] { "default", "#Crow.DefaultItem.template", "", "TypeOf"});
-                               //get item templates 
-                               foreach (string [] iTempId in itemTemplateIds) {
-                                       ctx.il.Emit (OpCodes.Ldloc_0);//load TempControl ref
-                                       ctx.il.Emit (OpCodes.Ldfld, CompilerServices.fldItemTemplates);//load ItemTemplates dic field
-
-                                       //prepare argument to add itemTemplate to templated group dic of ItemTemplates
-                                       ctx.il.Emit (OpCodes.Ldstr, iTempId [0]);//load key
-                                       //load itemTemplate
-                                       ctx.il.Emit (OpCodes.Ldarg_1);//load currentInterface
-                                       ctx.il.Emit (OpCodes.Ldstr, iTempId [1]);//load path
-                                       ctx.il.Emit (OpCodes.Callvirt, CompilerServices.miGetITemp);
-                                       ctx.il.Emit (OpCodes.Callvirt, CompilerServices.miAddITemp);
-
-                                       if (!string.IsNullOrEmpty (iTempId [2])) {
-                                               //expand delegate creation
-                                               ctx.il.Emit (OpCodes.Ldloc_0);//load TempControl ref
-                                               ctx.il.Emit (OpCodes.Ldfld, CompilerServices.fldItemTemplates);
-                                               ctx.il.Emit (OpCodes.Ldstr, iTempId [0]);//load key
-                                               ctx.il.Emit (OpCodes.Callvirt, CompilerServices.miGetITempFromDic);
-                                               ctx.il.Emit (OpCodes.Ldloc_0);//load root of treeView
-                                               ctx.il.Emit (OpCodes.Callvirt, CompilerServices.miCreateExpDel);
-                                       }
-                               }
-                       }
-               }
-
-               #if DESIGN_MODE
-               void emitSetDesignAttribute (IMLContext ctx, string name, string value){
-                       //store member value in iml
-                       ctx.il.Emit (OpCodes.Ldloc_0);
-                       ctx.il.Emit (OpCodes.Ldfld, typeof(GraphicObject).GetField("design_iml_values"));
-                       ctx.il.Emit (OpCodes.Ldstr, name);
-                       if (string.IsNullOrEmpty (value))
-                               ctx.il.Emit (OpCodes.Ldnull);
-                       else
-                               ctx.il.Emit (OpCodes.Ldstr, value);
-                       ctx.il.Emit (OpCodes.Call, CompilerServices.miDicStrStrAdd);
-               }
-               #endif
-
-               /// <summary>
-               /// process styling, attributes and children loading.
-               /// </summary>
-               /// <param name="ctx">parsing context</param>
-               /// <param name="tmpXml">xml fragment</param>
-               void emitGOLoad (IMLContext ctx, string tmpXml) {
-                       using (XmlTextReader reader = new XmlTextReader (tmpXml, XmlNodeType.Element, null)) {
-                               reader.Read ();
-
-                               #if DESIGN_MODE
-                               IXmlLineInfo li = (IXmlLineInfo)reader;
-                               ctx.il.Emit (OpCodes.Ldloc_0);
-                               ctx.il.Emit (OpCodes.Ldstr, this.NextDesignID);
-                               ctx.il.Emit (OpCodes.Stfld, typeof(GraphicObject).GetField("design_id"));
-                               ctx.il.Emit (OpCodes.Ldloc_0);
-                               ctx.il.Emit (OpCodes.Ldc_I4, ctx.curLine + li.LineNumber);
-                               ctx.il.Emit (OpCodes.Stfld, typeof(GraphicObject).GetField("design_line"));
-                               ctx.il.Emit (OpCodes.Ldloc_0);
-                               ctx.il.Emit (OpCodes.Ldc_I4, li.LinePosition);
-                               ctx.il.Emit (OpCodes.Stfld, typeof(GraphicObject).GetField("design_column"));
-                               if (!string.IsNullOrEmpty (sourcePath)) {
-                                       ctx.il.Emit (OpCodes.Ldloc_0);
-                                       ctx.il.Emit (OpCodes.Ldstr, sourcePath);
-                                       ctx.il.Emit (OpCodes.Stfld, typeof(GraphicObject).GetField("design_imlPath"));
-                               }
-                               #endif
-
-                               #region Styling and default values loading
-                               //first check for Style attribute then trigger default value loading
-                               if (reader.HasAttributes) {
-                                       string style = reader.GetAttribute ("Style");
-                                       if (!string.IsNullOrEmpty (style)){
-                                               CompilerServices.EmitSetValue (ctx.il, CompilerServices.piStyle, style);
-                                               #if DESIGN_MODE
-                                               emitSetDesignAttribute (ctx, "Style", style);
-                                               #endif
-                                       }
-                               }
-                ctx.il.Emit (OpCodes.Ldloc_0);
-                ctx.il.Emit (OpCodes.Callvirt, CompilerServices.miLoadDefaultVals);
-                #endregion
-
-
-                               #region Attributes reading
-                               if (reader.HasAttributes) {
-
-                                       while (reader.MoveToNextAttribute ()) {
-                                               if (reader.Name == "Style")
-                                                       continue;
-
-                                               #if DESIGN_MODE
-                                               emitSetDesignAttribute (ctx, reader.Name, reader.Value);
-                                               #endif
-
-                                               MemberInfo mi = ctx.CurrentNodeType.GetMember (reader.Name).FirstOrDefault ();
-                                               if (mi == null)
-                                                       throw new Exception ("Member '" + reader.Name + "' not found in " + ctx.CurrentNodeType.Name);
-
-                                               if (mi.MemberType == MemberTypes.Event) {
-                                                       foreach (string exp in CompilerServices.splitOnSemiColumnOutsideAccolades(reader.Value)) {
-                                                               string trimed = exp.Trim();
-                                                               if (trimed.StartsWith ("{", StringComparison.OrdinalIgnoreCase))
-                                                                       compileAndStoreDynHandler (ctx, mi as EventInfo, trimed.Substring (1, trimed.Length - 2));
-                                                               else
-                                                                       emitHandlerBinding (ctx, mi as EventInfo, trimed);
-                                                       }
-
-                                                       continue;
-                                               }
-                                               PropertyInfo pi = mi as PropertyInfo;
-                                               if (pi == null)
-                                                       throw new Exception ("Member '" + reader.Name + "' is not a property in " + ctx.CurrentNodeType.Name);
-
-                                               if (pi.Name == "Name")
-                                                       ctx.StoreCurrentName (reader.Value);
-
-                                               if (reader.Value.StartsWith ("{", StringComparison.OrdinalIgnoreCase))
-                                                       readPropertyBinding (ctx, reader.Name, reader.Value.Substring (1, reader.Value.Length - 2));
-                                               else
-                                                       CompilerServices.EmitSetValue (ctx.il, pi, reader.Value);
-
-                                       }
-                                       reader.MoveToElement ();
-                               }
-                               #endregion
-
-                               readChildren (reader, ctx);
-
-                               ctx.nodesStack.ResetCurrentNodeIndex ();
-                       }
-               }
-               /// <summary>
-               /// Parse child node an generate corresponding msil
-               /// </summary>
-               void readChildren (XmlReader reader, IMLContext ctx, int startingIdx = 0)
-               {
-                       bool endTagReached = false;
-                       int nodeIdx = startingIdx;
-                       while (reader.Read ()) {
-                               switch (reader.NodeType) {
-                               case XmlNodeType.EndElement:
-                                       endTagReached = true;
-                                       break;
-                               case XmlNodeType.Element:
-                                       //skip Templates
-                                       if (reader.Name == "Template" ||
-                                           reader.Name == "ItemTemplate") {
-                                               reader.Skip ();
-                                               continue;
-                                       }
-
-                                       //push 2x current instance on stack for parenting and reseting loc0 to parent
-                                       //loc_0 will be used for child
-                                       ctx.il.Emit (OpCodes.Ldloc_0);
-                                       ctx.il.Emit (OpCodes.Ldloc_0);
-
-                                       Type t = tryGetGOType (reader.Name);
-                                       if (t == null)
-                                               throw new Exception (reader.Name + " type not found");
-                                       ConstructorInfo ci = t.GetConstructor (
-                                                                    BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public,  
-                                               null, Type.EmptyTypes, null);
-                                       if (ci == null)
-                                               throw new Exception ("No default parameterless constructor found in " + t.Name);                                        
-                                       ctx.il.Emit (OpCodes.Newobj, ci);
-                                       ctx.il.Emit (OpCodes.Stloc_0);//child is now loc_0
-                                       CompilerServices.emitSetCurInterface (ctx.il);
-
-                                       ctx.nodesStack.Push (new Node (t, nodeIdx));
-                                       emitLoader (reader, ctx);
-                                       ctx.nodesStack.Pop ();
-
-                                       ctx.il.Emit (OpCodes.Ldloc_0);//load child on stack for parenting
-                                       ctx.il.Emit (OpCodes.Callvirt, ctx.nodesStack.Peek().GetAddMethod(nodeIdx));
-                                       ctx.il.Emit (OpCodes.Stloc_0); //reset local to current go
-
-                                       nodeIdx++;
-
-                                       break;
-                               }
-                               if (endTagReached)
-                                       break;
-                       }
-               }
-               #endregion
-
-               void readPropertyBinding (IMLContext ctx, string sourceMember, string expression)
-               {
-                       NodeAddress sourceNA = ctx.CurrentNodeAddress;
-                       BindingDefinition bindingDef = sourceNA.GetBindingDef (sourceMember, expression);
-
-                       #if DEBUG_BINDING
-                       Debug.WriteLine("Property Binding: " + bindingDef.ToString());
-                       #endif
-
-                       if (bindingDef.IsDataSourceBinding)//bind on data source
-                               emitDataSourceBindings (ctx, bindingDef);
-                       else
-                               ctx.StorePropertyBinding (bindingDef);
-               }
-
-               #region Emit Helper
-               void dataSourceChangedEmitHelper(object dscSource, object dataSource, int dynMethIdx){
-                       if (dataSource is IValueChange)
-                               (dataSource as IValueChange).ValueChanged +=
-                                       (EventHandler<ValueChangeEventArgs>)dsValueChangedDynMeths [dynMethIdx].CreateDelegate (typeof(EventHandler<ValueChangeEventArgs>), dscSource);
-               }
-               /// <summary> Emits remove old data source event handler./summary>
-               void emitRemoveOldDataSourceHandler(ILGenerator il, string eventName, string delegateName, bool DSSide = true){
-                       System.Reflection.Emit.Label cancel = il.DefineLabel ();
-
-                       il.Emit (OpCodes.Ldarg_2);//load old parent
-                       il.Emit (OpCodes.Ldfld, CompilerServices.fiDSCOldDS);
-                       il.Emit (OpCodes.Brfalse, cancel);//old parent is null
-
-                       //remove handler
-                       if (DSSide){//event is defined in the dataSource instance
-                               il.Emit (OpCodes.Ldarg_2);//1st arg load old datasource
-                               il.Emit (OpCodes.Ldfld, CompilerServices.fiDSCOldDS);
-                       }else//the event is in the source
-                               il.Emit (OpCodes.Ldarg_1);//1st arg load old datasource
-                       il.Emit (OpCodes.Ldstr, eventName);//2nd arg event name
-                       il.Emit (OpCodes.Ldstr, delegateName);//3d arg: delegate name
-                       il.Emit (OpCodes.Call, CompilerServices.miRemEvtHdlByName);
-                       il.MarkLabel(cancel);
-               }
-               #endregion
-
-               #region Event Bindings
-               /// <summary>
-               /// Compile events expression in IML attributes, and store the result in the instanciator
-               /// Those handlers will be bound when instatiing
-               /// </summary>
-               void compileAndStoreDynHandler (IMLContext ctx, EventInfo sourceEvent, string expression)
-               {
-                       //store event handler dynamic method in instanciator
-                       int dmIdx = cachedDelegates.Count;
-                       cachedDelegates.Add (CompilerServices.compileDynEventHandler (sourceEvent, expression, ctx.CurrentNodeAddress));
-                       ctx.emitCachedDelegateHandlerAddition(dmIdx, sourceEvent);
-               }
-               /// <summary> Emits handler method bindings </summary>
-               void emitHandlerBinding (IMLContext ctx, EventInfo sourceEvent, string expression){
-                       NodeAddress currentNode = ctx.CurrentNodeAddress;
-                       BindingDefinition bindingDef = currentNode.GetBindingDef (sourceEvent.Name, expression);
-
-                       #if DEBUG_BINDING
-                       Debug.WriteLine("Event Binding: " + bindingDef.ToString());
-                       #endif
-
-                       if (bindingDef.IsTemplateBinding | bindingDef.IsDataSourceBinding) {
-                               //we need to bind datasource method to source event
-                               DynamicMethod dm = new DynamicMethod ("dyn_dsORtmpChangedForHandler" + NewId,
-                                                          typeof(void),
-                                                          CompilerServices.argsBoundDSChange, true);
-
-                               ILGenerator il = dm.GetILGenerator (256);
-                               System.Reflection.Emit.Label cancel = il.DefineLabel ();
-
-                               il.DeclareLocal (typeof(MethodInfo));//used to cancel binding if method doesn't exist
-
-                               il.Emit (OpCodes.Nop);
-
-                               emitRemoveOldDataSourceHandler (il, sourceEvent.Name, bindingDef.TargetMember, false);
-
-
-                               //fetch method in datasource and test if it exist
-                               il.Emit (OpCodes.Ldarg_2);//load new datasource
-                               il.Emit (OpCodes.Ldfld, CompilerServices.fiDSCNewDS);
-                               il.Emit (OpCodes.Brfalse, cancel);//cancel if new datasource is null
-                               il.Emit (OpCodes.Ldarg_2);//load new datasource
-                               il.Emit (OpCodes.Ldfld, CompilerServices.fiDSCNewDS);
-                               il.Emit (OpCodes.Ldstr, bindingDef.TargetMember);//load handler method name
-                               il.Emit (OpCodes.Call, CompilerServices.miGetMethInfoWithRefx);
-                               il.Emit (OpCodes.Stloc_0);//save MethodInfo                                          
-                il.Emit (OpCodes.Ldloc_0);//push mi for test if null
-                il.Emit (OpCodes.Brfalse, cancel);//cancel if null
-
-                il.Emit (OpCodes.Ldarg_1);//load datasource change source where the event is as 1st arg of handler.add
-                if (bindingDef.IsTemplateBinding)//fetch source instance with address
-                    CompilerServices.emitGetInstance (il, bindingDef.SourceNA);
-
-                //load handlerType of sourceEvent to create delegate (1st arg)
-                il.Emit (OpCodes.Ldtoken, sourceEvent.EventHandlerType);
-                il.Emit (OpCodes.Call, CompilerServices.miGetTypeFromHandle);
-                il.Emit (OpCodes.Ldarg_2);//load new datasource where the method is defined
-                il.Emit (OpCodes.Ldfld, CompilerServices.fiDSCNewDS);
-                il.Emit (OpCodes.Ldloc_0);//load methodInfo (3rd arg)
-
-                il.Emit (OpCodes.Call, CompilerServices.miCreateBoundDel);
-                il.Emit (OpCodes.Call, sourceEvent.AddMethod);//call add event
-                                          
-                System.Reflection.Emit.Label finish = il.DefineLabel ();
-                il.Emit (OpCodes.Br, finish);
-                il.MarkLabel (cancel);
-                               #if DEBUG_BINDING
-                               il.EmitWriteLine (string.Format ("Handler method '{0}' for '{1}' NOT FOUND in new dataSource", bindingDef.TargetMember, sourceEvent.Name));
-                               #endif
-                               il.MarkLabel (finish);
-                               #if DEBUG_BINDING
-                               il.EmitWriteLine (string.Format ("Handler method '{0}' for '{1}' FOUND in new dataSource", bindingDef.TargetMember, sourceEvent.Name));
-                               #endif
-                                              
-                               il.Emit (OpCodes.Ret);
-
-                               //store dschange delegate in instatiator instance for access while instancing graphic object
-                               int delDSIndex = cachedDelegates.Count;
-                               cachedDelegates.Add (dm.CreateDelegate (CompilerServices.ehTypeDSChange, this));
-
-                               if (bindingDef.IsDataSourceBinding)
-                                       ctx.emitCachedDelegateHandlerAddition (delDSIndex, CompilerServices.eiDSChange);
-                               else //template handler binding, will be added to root parentChanged
-                                       templateCachedDelegateIndices.Add (delDSIndex);
-                       } else {//normal in tree handler binding, store until tree is complete (end of parse)
-                               ctx.UnresolvedTargets.Add (new EventBinding (
-                                       bindingDef.SourceNA, sourceEvent,
-                                       bindingDef.TargetNA, bindingDef.TargetMember, bindingDef.TargetName));
-                       }
-               }
-               #endregion
-
-               #region Property Bindings
-               /// <summary>
-               /// Create and store in the instanciator the ValueChanged delegates
-               /// those delegates uses grtree functions to set destination value so they don't
-               /// need to be bound to destination instance as in the ancient system.
-               /// </summary>
-               void emitBindingDelegates(IMLContext ctx){
-                       foreach (KeyValuePair<NodeAddress,Dictionary<string, List<MemberAddress>>> bindings in ctx.Bindings ) {
-                               if (bindings.Key.Count == 0)//template binding
-                                       emitTemplateBindings (ctx, bindings.Value);
-                               else
-                                       emitPropertyBindings (ctx,  bindings.Key, bindings.Value);
-                       }
-               }
-               void emitPropertyBindings(IMLContext ctx, NodeAddress origine, Dictionary<string, List<MemberAddress>> bindings){
-                       Type origineNodeType = origine.NodeType;
-
-                       //value changed dyn method
-                       DynamicMethod dm = new DynamicMethod ("dyn_valueChanged" + NewId,
-                               typeof (void), CompilerServices.argsValueChange, true);
-                       ILGenerator il = dm.GetILGenerator (256);
-
-                       System.Reflection.Emit.Label endMethod = il.DefineLabel ();
-
-                       il.DeclareLocal (CompilerServices.TObject);
-
-                       il.Emit (OpCodes.Nop);
-
-                       int i = 0;
-                       foreach (KeyValuePair<string, List<MemberAddress>> bindingCase in bindings ) {
-
-                               System.Reflection.Emit.Label nextTest = il.DefineLabel ();
-
-                               #region member name test
-                               //load source member name
-                               il.Emit (OpCodes.Ldarg_1);
-                               il.Emit (OpCodes.Ldfld, CompilerServices.fiVCMbName);
-
-                               il.Emit (OpCodes.Ldstr, bindingCase.Key);//load name to test
-                               il.Emit (OpCodes.Ldc_I4_4);//StringComparison.Ordinal
-                               il.Emit (OpCodes.Call, CompilerServices.stringEquals);
-                               il.Emit (OpCodes.Brfalse, nextTest);//if not equal, jump to next case
-                               #endregion
-
-                               #region destination member affectations
-                               PropertyInfo piOrig = origineNodeType.GetProperty (bindingCase.Key);
-                               Type origineType = null;
-                               if (piOrig != null)
-                                       origineType = piOrig.PropertyType;
-                               foreach (MemberAddress ma in bindingCase.Value) {
-                                       //first we have to load destination instance onto the stack, it is access
-                                       //with graphic tree functions deducted from nodes topology
-                                       il.Emit (OpCodes.Ldarg_0);//load source instance of ValueChanged event
-
-                                       NodeAddress destination = ma.Address;
-
-                                       if (destination.Count == 0){//template reverse binding
-                                               //fetch destination instance (which is the template root)
-                                               for (int j = 0; j < origine.Count ; j++)
-                                                       il.Emit(OpCodes.Callvirt, CompilerServices.miGetLogicalParent);
-                                       }else
-                                               CompilerServices.emitGetInstance (il, origine, destination);
-
-                                       if (origineType != null && destination.Count > 0){//else, prop less binding or reverse template bind, no init requiered
-                                               //for initialisation dynmeth, push destination instance loc_0 is root node in ctx
-                                               ctx.il.Emit(OpCodes.Ldloc_0);
-                                               CompilerServices.emitGetInstance (ctx.il, destination);
-
-                                               //init dynmeth: load actual value from origine
-                                               ctx.il.Emit (OpCodes.Ldloc_0);
-                                               CompilerServices.emitGetInstance (ctx.il, origine);
-                                               ctx.il.Emit (OpCodes.Callvirt, origineNodeType.GetProperty (bindingCase.Key).GetGetMethod());
-                                       }
-                                       //load new value
-                                       il.Emit (OpCodes.Ldarg_1);
-                                       il.Emit (OpCodes.Ldfld, CompilerServices.fiVCNewValue);
-
-                                       if (origineType == null)//property less binding, no init
-                                               CompilerServices.emitConvert (il, ma.Property.PropertyType);
-                                       else if (destination.Count > 0) {
-                                               if (origineType.IsValueType)
-                                                       ctx.il.Emit(OpCodes.Box, origineType);
-
-                                               CompilerServices.emitConvert (ctx.il, origineType, ma.Property.PropertyType);
-                                               CompilerServices.emitConvert (il, origineType, ma.Property.PropertyType);
-
-                                               ctx.il.Emit (OpCodes.Callvirt, ma.Property.GetSetMethod());//set init value
-                                       } else {// reverse templateBinding
-                                               il.Emit (OpCodes.Ldstr, ma.memberName);//arg 3 of setValueWithReflexion
-                                               il.Emit (OpCodes.Call, CompilerServices.miSetValWithRefx);
-                                               continue;
-                                       }
-                                       il.Emit (OpCodes.Callvirt, ma.Property.GetSetMethod());//set value on value changes
-                               }
-                               #endregion
-                               il.Emit (OpCodes.Br, endMethod);
-                               il.MarkLabel (nextTest);
-
-                               i++;
-                       }
-
-                       il.MarkLabel (endMethod);
-                       il.Emit (OpCodes.Ret);
-
-                       //store and emit Add in ctx
-                       int dmIdx = cachedDelegates.Count;
-                       cachedDelegates.Add (dm.CreateDelegate (typeof(EventHandler<ValueChangeEventArgs>)));
-                       ctx.emitCachedDelegateHandlerAddition (dmIdx, CompilerServices.eiValueChange, origine);
-
-                       #if DEBUG_BINDING
-                       Debug.WriteLine("\tCrow property binding: " + dm.Name);
-                       #endif
-
-               }
-               void emitTemplateBindings(IMLContext ctx, Dictionary<string, List<MemberAddress>> bindings){
-                       //value changed dyn method
-                       DynamicMethod dm = new DynamicMethod ("dyn_tmpValueChanged",
-                               typeof (void), CompilerServices.argsValueChange, true);
-                       ILGenerator il = dm.GetILGenerator (256);
-
-                       //create parentchanged dyn meth in parallel to have only one loop over bindings
-                       DynamicMethod dmPC = new DynamicMethod ("dyn_InitAndLogicalParentChanged",
-                               typeof (void),
-                               CompilerServices.argsBoundDSChange, true);
-                       ILGenerator ilPC = dmPC.GetILGenerator (256);
-
-                       il.Emit (OpCodes.Nop);
-                       ilPC.Emit (OpCodes.Nop);
-
-                       System.Reflection.Emit.Label endMethod = il.DefineLabel ();
-
-                       il.DeclareLocal (CompilerServices.TObject);
-                       ilPC.DeclareLocal (CompilerServices.TObject);//used for checking propery less bindings
-                       ilPC.DeclareLocal (typeof(MemberInfo));//used for checking propery less bindings
-
-                       System.Reflection.Emit.Label cancel = ilPC.DefineLabel ();
-
-                       #region Unregister previous parent event handler
-                       //unregister previous parent handler if not null
-                       ilPC.Emit (OpCodes.Ldarg_2);//load old parent
-                       ilPC.Emit (OpCodes.Ldfld, CompilerServices.fiDSCOldDS);
-                       ilPC.Emit (OpCodes.Brfalse, cancel);//old parent is null
-
-                       ilPC.Emit (OpCodes.Ldarg_2);//load old parent
-                       ilPC.Emit (OpCodes.Ldfld, CompilerServices.fiDSCOldDS);
-                       //Load cached delegate
-                       ilPC.Emit(OpCodes.Ldarg_0);//load ref to this instanciator onto the stack
-                       ilPC.Emit(OpCodes.Ldfld, CompilerServices.fiTemplateBinding);
-
-                       //add template bindings dynValueChanged delegate to new parent event
-                       ilPC.Emit(OpCodes.Callvirt, CompilerServices.eiValueChange.RemoveMethod);//call remove event
-                       #endregion
-
-                       ilPC.MarkLabel(cancel);
-
-                       #region check if new parent is null
-                       cancel = ilPC.DefineLabel ();
-                       ilPC.Emit (OpCodes.Ldarg_2);//load datasource change arg
-                       ilPC.Emit (OpCodes.Ldfld, CompilerServices.fiDSCNewDS);
-                       ilPC.Emit (OpCodes.Brfalse, cancel);//new ds is null
-                       #endregion
-
-                       int i = 0;
-                       foreach (KeyValuePair<string, List<MemberAddress>> bindingCase in bindings ) {
-
-                               System.Reflection.Emit.Label nextTest = il.DefineLabel ();
-
-                               #region member name test
-                               //load source member name
-                               il.Emit (OpCodes.Ldarg_1);
-                               il.Emit (OpCodes.Ldfld, CompilerServices.fiVCMbName);
-
-                               il.Emit (OpCodes.Ldstr, bindingCase.Key);//load name to test
-                               il.Emit (OpCodes.Ldc_I4_4);//StringComparison.Ordinal
-                               il.Emit (OpCodes.Call, CompilerServices.stringEquals);
-                               il.Emit (OpCodes.Brfalse, nextTest);//if not equal, jump to next case
-                               #endregion
-
-                               #region destination member affectations
-
-                               foreach (MemberAddress ma in bindingCase.Value) {
-                                       if (ma.Address.Count == 0){
-                                               Debug.WriteLine("\t\tBUG: reverse template binding in normal template binding");
-                                               continue;//template binding
-                                       }
-                                       //first we try to get memberInfo of new parent, if it doesn't exist, it's a propery less binding
-                                       ilPC.Emit (OpCodes.Ldarg_2);//load new parent onto the stack for handler addition
-                                       ilPC.Emit (OpCodes.Ldfld, CompilerServices.fiDSCNewDS);
-                                       ilPC.Emit (OpCodes.Stloc_0);//save new parent
-                                       //get parent type
-                                       ilPC.Emit (OpCodes.Ldloc_0);//push parent instance
-                                       ilPC.Emit (OpCodes.Ldstr, bindingCase.Key);//load member name
-                                       ilPC.Emit (OpCodes.Call, CompilerServices.miGetMembIinfoWithRefx);
-                                       ilPC.Emit (OpCodes.Stloc_1);//save memberInfo
-                                       ilPC.Emit (OpCodes.Ldloc_1);//push mi for test if null
-                                       System.Reflection.Emit.Label propLessReturn = ilPC.DefineLabel ();
-                                       ilPC.Emit (OpCodes.Brfalse, propLessReturn);
-
-
-                                       //first we have to load destination instance onto the stack, it is access
-                                       //with graphic tree functions deducted from nodes topology
-                                       il.Emit (OpCodes.Ldarg_0);//load source instance of ValueChanged event
-                                       CompilerServices.emitGetChild (il, typeof(TemplatedControl), -1);
-                                       CompilerServices.emitGetInstance (il, ma.Address);
-
-                                       ilPC.Emit (OpCodes.Ldarg_2);//load destination instance to set actual value of member
-                                       ilPC.Emit (OpCodes.Ldfld, CompilerServices.fiDSCNewDS);
-                                       CompilerServices.emitGetChild (ilPC, typeof(TemplatedControl), -1);
-                                       CompilerServices.emitGetInstance (ilPC, ma.Address);
-
-                                       //load new value
-                                       il.Emit (OpCodes.Ldarg_1);
-                                       il.Emit (OpCodes.Ldfld, CompilerServices.fiVCNewValue);
-
-                                       //for the parent changed dyn meth we need to fetch actual value for initialisation thrue reflexion
-                                       ilPC.Emit (OpCodes.Ldloc_0);//push root instance of instanciator as parentChanged source
-                                       ilPC.Emit (OpCodes.Ldloc_1);//push mi for value fetching
-                                       ilPC.Emit (OpCodes.Call, CompilerServices.miGetValWithRefx);
-
-                                       CompilerServices.emitConvert (il, ma.Property.PropertyType);
-                                       CompilerServices.emitConvert (ilPC, ma.Property.PropertyType);
-
-                                       il.Emit (OpCodes.Callvirt, ma.Property.GetSetMethod());
-                                       ilPC.Emit (OpCodes.Callvirt, ma.Property.GetSetMethod());
-
-                                       ilPC.MarkLabel(propLessReturn);
-                               }
-                               #endregion
-                               il.Emit (OpCodes.Br, endMethod);
-                               il.MarkLabel (nextTest);
-
-                               i++;
-                       }
-                       //il.Emit (OpCodes.Pop);
-                       il.MarkLabel (endMethod);
-                       il.Emit (OpCodes.Ret);
-
-                       //store template bindings in instanciator
-                       templateBinding = dm.CreateDelegate (typeof(EventHandler<ValueChangeEventArgs>));
-
-                       #region emit LogicalParentChanged method
-
-                       //load new parent onto the stack for handler addition
-                       ilPC.Emit (OpCodes.Ldarg_2);
-                       ilPC.Emit (OpCodes.Ldfld, CompilerServices.fiDSCNewDS);
-
-                       //Load cached delegate
-                       ilPC.Emit(OpCodes.Ldarg_0);//load ref to this instanciator onto the stack
-                       ilPC.Emit(OpCodes.Ldfld, CompilerServices.fiTemplateBinding);
-
-                       //add template bindings dynValueChanged delegate to new parent event
-                       ilPC.Emit(OpCodes.Call, CompilerServices.eiValueChange.AddMethod);//call add event
-
-                       ilPC.MarkLabel (cancel);
-                       ilPC.Emit (OpCodes.Ret);
-
-                       //store dschange delegate in instatiator instance for access while instancing graphic object
-                       int delDSIndex = cachedDelegates.Count;
-                       cachedDelegates.Add(dmPC.CreateDelegate (CompilerServices.ehTypeDSChange, this));
-                       #endregion
-
-                       ctx.emitCachedDelegateHandlerAddition(delDSIndex, CompilerServices.eiLogicalParentChanged);
-               }
-               /// <summary>
-               /// create the valuechanged handler, the datasourcechanged handler and emit event handling
-               /// </summary>
-               void emitDataSourceBindings(IMLContext ctx, BindingDefinition bindingDef){
-                       DynamicMethod dm = null;
-                       ILGenerator il = null;
-                       int dmVC = 0;
-                       PropertyInfo piSource = ctx.CurrentNodeType.GetProperty(bindingDef.SourceMember);
-                       //if no dataSource member name is provided, valuechange is not handle and datasource change
-                       //will be used as origine value
-                       string delName = "dyn_DSvalueChanged" + NewId;
-                       if (!string.IsNullOrEmpty(bindingDef.TargetMember)){
-                               #region create valuechanged method
-                               dm = new DynamicMethod (delName,
-                                       typeof (void),
-                                       CompilerServices.argsBoundValueChange, true);
-
-                               il = dm.GetILGenerator (256);
-
-                               System.Reflection.Emit.Label endMethod = il.DefineLabel ();
-
-                               il.DeclareLocal (CompilerServices.TObject);
-
-                               il.Emit (OpCodes.Nop);
-
-                               //load value changed member name onto the stack
-                               il.Emit (OpCodes.Ldarg_2);
-                               il.Emit (OpCodes.Ldfld, CompilerServices.fiVCMbName);
-
-                               //test if it's the expected one
-                               il.Emit (OpCodes.Ldstr, bindingDef.TargetMember);
-                               il.Emit (OpCodes.Ldc_I4_4);//StringComparison.Ordinal
-                               il.Emit (OpCodes.Call, CompilerServices.stringEquals);
-                               il.Emit (OpCodes.Brfalse, endMethod);
-                               //set destination member with valueChanged new value
-                               //load destination ref
-                               il.Emit (OpCodes.Ldarg_0);
-                               //load new value onto the stack
-                               il.Emit (OpCodes.Ldarg_2);
-                               il.Emit (OpCodes.Ldfld, CompilerServices.fiVCNewValue);
-
-                               //by default, source value type is deducted from target member type to allow
-                               //memberless binding, if targetMember exists, it will be used to determine target
-                               //value type for conversion
-
-                               CompilerServices.emitConvert (il, piSource.PropertyType);
-
-                               if (!piSource.CanWrite)
-                                       throw new Exception ("Source member of bindind is read only:" + piSource.ToString());
-
-                               il.Emit (OpCodes.Callvirt, piSource.GetSetMethod ());
-
-                               il.MarkLabel (endMethod);
-                               il.Emit (OpCodes.Ret);
-
-                               //vc dyn meth is stored in a cached list, it will be bound to datasource only
-                               //when datasource of source graphic object changed
-                               dmVC = dsValueChangedDynMeths.Count;
-                               dsValueChangedDynMeths.Add (dm);
-                               #endregion
-                       }
-
-                       #region emit dataSourceChanged event handler
-                       //now we create the datasource changed method that will init the destination member with
-                       //the actual value of the origin member of the datasource and then will bind the value changed
-                       //dyn methode.
-                       //dm is bound to the instanciator instance to have access to cached dyn meth and delegates
-                       dm = new DynamicMethod ("dyn_dschanged" + NewId,
-                               typeof (void),
-                               CompilerServices.argsBoundDSChange, true);
-
-                       il = dm.GetILGenerator (256);
-
-                       il.DeclareLocal (CompilerServices.TObject);//used for checking propery less bindings
-                       il.DeclareLocal (typeof(MemberInfo));//used for checking propery less bindings
-                       System.Reflection.Emit.Label cancel = il.DefineLabel ();
-                       System.Reflection.Emit.Label newDSIsNull = il.DefineLabel ();
-                       System.Reflection.Emit.Label cancelInit = il.DefineLabel ();
-
-                       il.Emit (OpCodes.Nop);
-
-                       emitRemoveOldDataSourceHandler(il, "ValueChanged", delName, true);
-
-                       if (!string.IsNullOrEmpty(bindingDef.TargetMember)){
-                               if (bindingDef.TwoWay){
-//                                     System.Reflection.Emit.Label cancelRemove = il.DefineLabel ();
-//                                     //remove handler if not null
-//                                     il.Emit (OpCodes.Ldarg_2);//load old parent
-//                                     il.Emit (OpCodes.Ldfld, CompilerServices.fiDSCOldDS);
-//                                     il.Emit (OpCodes.Brfalse, cancelRemove);//old parent is null
-
-                                       //remove handler
-                                       emitRemoveOldDataSourceHandler(il, "ValueChanged", delName, false);
-
-//                                     il.Emit (OpCodes.Ldarg_1);//3d arg: instance bound to delegate (the source)
-//                                     il.Emit (OpCodes.Ldstr, "ValueChanged");//2nd arg event name
-//                                     il.Emit (OpCodes.Ldarg_2);//1st arg load old datasource
-//                                     il.Emit (OpCodes.Ldfld, CompilerServices.fiDSCOldDS);
-//                                     il.Emit (OpCodes.Call, CompilerServices.miRemEvtHdlByTarget);
-//                                     il.MarkLabel(cancelRemove);
-                               }
-                               il.Emit (OpCodes.Ldarg_2);//load datasource change arg
-                               il.Emit (OpCodes.Ldfld, CompilerServices.fiDSCNewDS);
-                               il.Emit (OpCodes.Brfalse, newDSIsNull);//new ds is null
-                       }
-
-                       #region fetch initial Value
-                       if (!string.IsNullOrEmpty(bindingDef.TargetMember)){
-                               il.Emit (OpCodes.Ldarg_2);//load new datasource
-                               il.Emit (OpCodes.Ldfld, CompilerServices.fiDSCNewDS);
-                               il.Emit (OpCodes.Ldstr, bindingDef.TargetMember);//load member name
-                               il.Emit (OpCodes.Call, CompilerServices.miGetMembIinfoWithRefx);
-                               il.Emit (OpCodes.Stloc_1);//save memberInfo
-                               il.Emit (OpCodes.Ldloc_1);//push mi for test if null
-                               il.Emit (OpCodes.Brfalse, cancelInit);//propertyLessBinding
-                       }
-
-                       il.Emit (OpCodes.Ldarg_1);//load source of dataSourceChanged which is the dest instance
-                       il.Emit (OpCodes.Ldarg_2);//load new datasource
-                       il.Emit (OpCodes.Ldfld, CompilerServices.fiDSCNewDS);
-                       if (!string.IsNullOrEmpty(bindingDef.TargetMember)){
-                               il.Emit (OpCodes.Ldloc_1);//push mi for value fetching
-                               il.Emit (OpCodes.Call, CompilerServices.miGetValWithRefx);
-                       }
-                       CompilerServices.emitConvert (il, piSource.PropertyType);
-                       il.Emit (OpCodes.Callvirt, piSource.GetSetMethod ());
-                       #endregion
-
-                       if (!string.IsNullOrEmpty(bindingDef.TargetMember)){
-                               il.MarkLabel(cancelInit);
-                               //check if new dataSource implement IValueChange
-                               il.Emit (OpCodes.Ldarg_2);//load new datasource
-                               il.Emit (OpCodes.Ldfld, CompilerServices.fiDSCNewDS);
-                               il.Emit (OpCodes.Isinst, typeof(IValueChange));
-                               il.Emit (OpCodes.Brfalse, cancel);
-
-                               il.Emit(OpCodes.Ldarg_0);//load ref to this instanciator onto the stack
-                               il.Emit (OpCodes.Ldarg_1);//load datasource change source
-                               il.Emit (OpCodes.Ldarg_2);//load new datasource
-                               il.Emit (OpCodes.Ldfld, CompilerServices.fiDSCNewDS);
-                               il.Emit(OpCodes.Ldc_I4, dmVC);//load index of dynmathod
-                               il.Emit (OpCodes.Call, CompilerServices.miDSChangeEmitHelper);
-
-                               il.MarkLabel (cancel);
-
-                               if (bindingDef.TwoWay){
-                                       il.Emit (OpCodes.Ldarg_1);//arg1: dataSourceChange source, the origine of the binding
-                                       il.Emit (OpCodes.Ldstr, bindingDef.SourceMember);//arg2: orig member
-                                       il.Emit (OpCodes.Ldarg_2);//arg3: new datasource
-                                       il.Emit (OpCodes.Ldfld, CompilerServices.fiDSCNewDS);
-                                       il.Emit (OpCodes.Ldstr, bindingDef.TargetMember);//arg4: dest member
-                                       il.Emit (OpCodes.Call, CompilerServices.miDSReverseBinding);
-                               }
-
-                       }
-                       il.MarkLabel (newDSIsNull);
-                       il.Emit (OpCodes.Ret);
-
-                       //store dschange delegate in instatiator instance for access while instancing graphic object
-                       int delDSIndex = cachedDelegates.Count;
-                       cachedDelegates.Add(dm.CreateDelegate (CompilerServices.ehTypeDSChange, this));
-                       #endregion
-
-                       ctx.emitCachedDelegateHandlerAddition(delDSIndex, CompilerServices.eiDSChange);
-
-                       #if DEBUG_BINDING
-                       Debug.WriteLine("\tDataSource ValueChanged: " + delName);
-                       Debug.WriteLine("\tDataSource Changed: " + dm.Name);
-                       #endif
-               }
-               /// <summary>
-               /// Two way binding for datasource, graphicObj=>dataSource link, datasource value has priority
-               /// and will be set as init for source property (in emitDataSourceBindings func)
-               /// </summary>
-               /// <param name="orig">Graphic object instance, source of binding</param>
-               /// <param name="origMember">Origin member name</param>
-               /// <param name="dest">datasource instance, target of the binding</param>
-               /// <param name="destMember">Destination member name</param>
-               static void dataSourceReverseBinding(IValueChange orig, string origMember, object dest, string destMember){
-                       Type tOrig = orig.GetType ();
-                       Type tDest = dest.GetType ();
-                       PropertyInfo piOrig = tOrig.GetProperty (origMember);
-                       PropertyInfo piDest = tDest.GetProperty (destMember);
-
-                       if (piDest == null) {
-                               Debug.WriteLine ("Member '{0}' not found in new DataSource '{1}' of '{2}'", destMember, dest, orig);
-                               return;
-                       }
-                       #if DEBUG_BINDING
-                       Debug.WriteLine ("DS Reverse binding: Member '{0}' found in new DS '{1}' of '{2}'", destMember, dest, orig);
-                       #endif
-
-                       #region ValueChanged emit
-                       DynamicMethod dm = new DynamicMethod ("dyn_valueChanged" + NewId,
-                               typeof (void), CompilerServices.argsBoundValueChange, true);
-                       ILGenerator il = dm.GetILGenerator (256);
-
-                       System.Reflection.Emit.Label endMethod = il.DefineLabel ();
-
-                       il.DeclareLocal (CompilerServices.TObject);
-                       il.Emit (OpCodes.Nop);
-
-                       //load value changed member name onto the stack
-                       il.Emit (OpCodes.Ldarg_2);
-                       il.Emit (OpCodes.Ldfld, CompilerServices.fiVCMbName);
-
-                       //test if it's the expected one
-                       il.Emit (OpCodes.Ldstr, origMember);
-                       il.Emit (OpCodes.Ldc_I4_4);//StringComparison.Ordinal
-                       il.Emit (OpCodes.Call, CompilerServices.stringEquals);
-                       il.Emit (OpCodes.Brfalse, endMethod);
-                       //set destination member with valueChanged new value
-                       //load destination ref
-                       il.Emit (OpCodes.Ldarg_0);
-                       //load new value onto the stack
-                       il.Emit (OpCodes.Ldarg_2);
-                       il.Emit (OpCodes.Ldfld, CompilerServices.fiVCNewValue);
-
-                       CompilerServices.emitConvert (il, piOrig.PropertyType, piDest.PropertyType);
-
-                       il.Emit (OpCodes.Callvirt, piDest.GetSetMethod ());
-
-                       il.MarkLabel (endMethod);
-                       il.Emit (OpCodes.Ret);
-                       #endregion
-
-                       orig.ValueChanged += (EventHandler<ValueChangeEventArgs>)dm.CreateDelegate (typeof(EventHandler<ValueChangeEventArgs>), dest);
-               }
-               #endregion
-
-               /// <summary>
-               /// search for graphic object type in crow assembly, if not found,
-               /// search for type independently of namespace in all the loaded assemblies
-               /// </summary>
-               /// <remarks>
-               /// </remarks>
-               /// <returns>the corresponding type object</returns>
-               /// <param name="typeName">graphic object type name without its namespace</param>
-               Type tryGetGOType (string typeName){
-                       Type t = Type.GetType ("Crow." + typeName);
-                       if (t != null)
-                               return t;                       
-                       foreach (Assembly a in AppDomain.CurrentDomain.GetAssemblies()) {
-                               if (a.IsDynamic)
-                                       continue;
-                               foreach (Type expT in a.GetExportedTypes ()) {
-                                       if (expT.Name == typeName)
-                                               return expT;
-                               }
-                       }
-                       return null;
-               }
-       }
-}
-
diff --git a/src/Interface.cs b/src/Interface.cs
deleted file mode 100644 (file)
index de4df99..0000000
+++ /dev/null
@@ -1,1371 +0,0 @@
-//
-// Interface.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.IO;
-using System.Linq;
-using System.Reflection;
-using System.Threading;
-using System.Xml;
-using System.Xml.Serialization;
-using Cairo;
-using System.Globalization;
-using Crow.IML;
-using System.Runtime.InteropServices;
-
-
-
-namespace Crow
-{
-       /// <summary>
-       /// The Interface Class is the root of crow graphic trees. It is thread safe allowing
-       /// application to run multiple interfaces in different threads.
-       /// It provides the Dirty bitmap and zone of the interface to be drawn on screen.
-       /// </summary>
-       /// <remarks>
-       /// The Interface contains :
-       ///     - rendering and layouting queues and logic.
-       ///     - helpers to load XML interfaces files directely bound to this interface
-       ///     - global static constants and variables of CROW
-       ///     - Keyboard and Mouse logic
-       ///     - the resulting bitmap of the interface
-       /// 
-       /// the master branch and the nuget package includes an OpenTK renderer which allows
-       /// the creation of multiple threaded interfaces.
-       /// 
-       /// If you intend to create another renderer (GDK, vulkan, etc) the minimal step is to
-       /// put an interface instance as member of your root object and call (optionally in another thread) the update function
-       /// at regular interval. Then you have to call
-       /// mouse, keyboard and resize functions of the interface when those events occurs in the host app.
-       /// 
-       /// The resulting surface (a byte array in the OpenTK renderer) is made available and protected with the
-       /// RenderMutex of the interface.
-       /// </remarks>
-       public class Interface : ILayoutable, IDisposable ,IValueChange
-       {
-               #region IValueChange implementation
-               public event EventHandler<ValueChangeEventArgs> ValueChanged;
-               public virtual void NotifyValueChanged(string MemberName, object _value)
-               {
-                       //Debug.WriteLine ("Value changed: {0}->{1} = {2}", this, MemberName, _value);
-                       ValueChanged.Raise(this, new ValueChangeEventArgs(MemberName, _value));
-               }
-               #endregion
-
-               internal IBackend backend;
-
-               #region CTOR
-               static Interface(){
-                       /*if (Type.GetType ("Mono.Runtime") == null) {
-                               throw new Exception (@"C.R.O.W. run only on Mono, download latest version at: http://www.mono-project.com/download/stable/");
-                       }*/
-
-                       CrowConfigRoot =
-                               System.IO.Path.Combine(
-                                       Environment.GetFolderPath(Environment.SpecialFolder.UserProfile),
-                                       ".config");
-                       CrowConfigRoot = System.IO.Path.Combine (CrowConfigRoot, "crow");
-                       if (!Directory.Exists (CrowConfigRoot))
-                               Directory.CreateDirectory (CrowConfigRoot);
-
-                       //ensure all assemblies are loaded, because IML could contains classes not instanciated in source
-                       foreach (string af in Directory.GetFiles (AppDomain.CurrentDomain.BaseDirectory, "*.dll")){
-                               try {
-                                       Assembly.LoadFrom (af); 
-                               } catch (Exception ex) {
-                                       Console.WriteLine ("{0} not loaded as assembly.", af);
-                               }
-                       }
-
-                       FontRenderingOptions = new FontOptions ();
-                       FontRenderingOptions.Antialias = Antialias.Subpixel;
-                       FontRenderingOptions.HintMetrics = HintMetrics.On;
-                       FontRenderingOptions.HintStyle = HintStyle.Full;
-                       FontRenderingOptions.SubpixelOrder = SubpixelOrder.Rgb;
-               }
-
-               public Interface(int width=800, int height=600){
-
-                       clientRectangle = new Rectangle (0, 0, width, height);
-
-                       Init ();
-
-                       InitBackend ();
-               }
-               #endregion
-
-               protected bool running;
-               protected virtual void InitBackend () {
-                       backend = new Crow.XCB.XCBBackend ();
-                       //backend = new Crow.XLib.XLibBackend ();
-                       backend.Init (this);
-
-                       Keyboard.KeyDown += Keyboard_KeyDown;
-                       Keyboard.KeyUp += Keyboard_KeyUp;
-                       Keyboard.KeyPress += Keyboard_KeyPress;
-
-                       //initTooltip ();
-                       //initContextMenus ();
-
-                       running = true;
-
-                       Thread t = new Thread (interfaceThread);
-                       t.IsBackground = true;
-                       t.Start ();
-               }
-               public void Run () {
-                       while (running) {
-                               ProcessEvents ();
-                               Thread.Sleep(1);
-                       }
-               }
-               void Keyboard_KeyPress (object sender, KeyPressEventArgs e)
-               {
-                       if (_focusedWidget != null)
-                               _focusedWidget.onKeyPress (this, e);
-               }
-
-               void Keyboard_KeyUp (object sender, KeyEventArgs e)
-               {
-                       if (_focusedWidget != null)
-                               _focusedWidget.onKeyUp (this, e);
-//                     if (keyboardRepeatThread != null) {
-//                             keyboardRepeatOn = false;
-//                             keyboardRepeatThread.Abort();
-//                             keyboardRepeatThread.Join ();
-//                     }
-               }
-               void Keyboard_KeyDown (object sender, KeyEventArgs e)
-               {
-                       //Keyboard.SetKeyState((Crow.Key)Key,true);
-                       lastKeyDownEvt = e;
-                       lastKeyDownEvt.IsRepeat = true;
-
-                       if (_focusedWidget != null)
-                               _focusedWidget.onKeyDown (this, e);
-
-                       //                      keyboardRepeatThread = new Thread (keyboardRepeatThreadFunc);
-                       //                      keyboardRepeatThread.IsBackground = true;
-                       //                      keyboardRepeatThread.Start ();
-               }
-
-               void interfaceThread()
-               {                       
-                       while (running) {
-                               Update ();
-                               Thread.Sleep (5);
-                       }
-               }
-
-               #region IDisposable Support
-               private bool disposedValue = false; // To detect redundant calls
-
-               protected virtual void Dispose(bool disposing)
-               {
-                       if (!disposedValue)
-                       {
-                               if (disposing)
-                               {
-                                       // TODO: dispose managed state (managed objects).
-                               }
-
-                               backend.CleanUp ();
-
-
-                               disposedValue = true;
-                       }
-               }
-
-               // TODO: override a finalizer only if Dispose(bool disposing) above has code to free unmanaged resources.
-               ~Interface() {
-                       // Do not change this code. Put cleanup code in Dispose(bool disposing) above.
-                       Dispose(false);
-               }
-
-               // This code added to correctly implement the disposable pattern.
-               public void Dispose()
-               {
-                       Dispose(true);
-                       GC.SuppressFinalize(this);
-               }
-               #endregion
-
-               public void ProcessEvents() {
-                       backend.ProcessEvents ();
-               }
-               public void Init () {
-                       CultureInfo.DefaultThreadCurrentCulture = System.Globalization.CultureInfo.InvariantCulture;
-
-                       CurrentInterface = this;
-                       //loadCursors ();
-                       loadStyling ();
-                       findAvailableTemplates ();
-
-                       #if MEASURE_TIME
-                       PerfMeasures.Add (updateMeasure);
-                       PerfMeasures.Add (drawingMeasure);
-                       PerfMeasures.Add (layoutingMeasure);
-                       PerfMeasures.Add (clippingMeasure);
-                       #endif
-               }
-
-               #region Static and constants
-               /// <summary>
-               /// Crow configuration root path
-               /// </summary>
-               public static string CrowConfigRoot;
-               /// <summary>If true, mouse focus is given when mouse is over control</summary>
-               public static bool FocusOnHover = false;
-               /// <summary> Threshold to catch borders for sizing </summary>
-               public static int BorderThreshold = 5;
-               /// <summary> delay before tooltip appear </summary>
-               public static int ToolTipDelay = 500;
-               /// <summary>Double click threshold in milisecond</summary>
-               public static int DoubleClick = 250;//max duration between two mouse_down evt for a dbl clk in milisec.
-               /// <summary> Time to wait in millisecond before starting repeat loop</summary>
-               public static int DeviceRepeatDelay = 700;
-               /// <summary> Time interval in millisecond between device event repeat</summary>
-               public static int DeviceRepeatInterval = 40;
-               public static float WheelIncrement = 1;
-               /// <summary>Tabulation size in Text controls</summary>
-               public static int TabSize = 4;
-               public static string LineBreak = "\n";
-               /// <summary> Allow rendering of interface in development environment </summary>
-               public static bool DesignerMode = false;
-               /// <summary> Disable caching for a widget if this threshold is reached </summary>
-               public const int MaxCacheSize = 2048;
-               /// <summary> Above this count, the layouting is discard from the current
-               /// update cycle and requeued for the next</summary>
-               public const int MaxLayoutingTries = 3;
-               /// <summary> Above this count, the layouting is discard for the widget and it
-               /// will not be rendered on screen </summary>
-               public const int MaxDiscardCount = 5;
-               /// <summary> Global font rendering settings for Cairo </summary>
-               public static FontOptions FontRenderingOptions;
-               /// <summary> Global font rendering settings for Cairo </summary>
-               public static Antialias Antialias = Antialias.Subpixel;
-
-               /// <summary>
-               /// Each control need a ref to the root interface containing it, if not set in GraphicObject.currentInterface,
-               /// the ref of this one will be stored in GraphicObject.currentInterface
-               /// </summary>
-               protected static Interface CurrentInterface;
-               internal Stopwatch clickTimer = new Stopwatch();
-               GraphicObject armedClickSender = null;
-               MouseButtonEventArgs armedClickEvtArgs = null;
-//             internal GraphicObject EligibleForDoubleClick {
-//                     get { return eligibleForDoubleClick; }
-//                     set {
-//                             eligibleForDoubleClick = value;
-//                             clickTimer.Restart ();
-//                     }
-//             }
-               internal void armeClick (GraphicObject sender, MouseButtonEventArgs e){
-                       armedClickSender = sender;
-                       armedClickEvtArgs = e;
-                       clickTimer.Restart ();
-               }
-               #endregion
-
-               #region Events
-               public event EventHandler<MouseCursorChangedEventArgs> MouseCursorChanged;
-               public event EventHandler Quit;
-
-               public event EventHandler<MouseWheelEventArgs> MouseWheelChanged;
-               public event EventHandler<MouseButtonEventArgs> MouseButtonUp;
-               public event EventHandler<MouseButtonEventArgs> MouseButtonDown;
-               public event EventHandler<MouseButtonEventArgs> MouseClick;
-               public event EventHandler<MouseMoveEventArgs> MouseMove;
-               /*public event EventHandler<KeyEventArgs> KeyboardKeyDown;
-               public event EventHandler<KeyEventArgs> KeyboardKeyUp;*/
-               #endregion
-
-               /// <summary>Main Cairo surface</summary>
-               public Surface surf;
-
-               #region Public Fields
-               /// <summary>Graphic Tree of this interface</summary>
-               public List<GraphicObject> GraphicTree = new List<GraphicObject>();
-               /// <summary>Interface's resulting bitmap</summary>
-               public byte[] bmp;
-               /// <summary>resulting bitmap limited to last redrawn part</summary>
-               public byte[] dirtyBmp;
-               /// <summary>True when host has to repaint Interface</summary>
-               public bool IsDirty = false;
-               /// <summary>Coordinate of the dirty bmp on the original bmp</summary>
-               public Rectangle DirtyRect;
-               /// <summary>Locked for each layouting operation</summary>
-               public object LayoutMutex = new object();
-               /// <summary>Sync mutex between host and Crow for rendering operations (bmp, dirtyBmp,...)</summary>
-               public object RenderMutex = new object();
-               /// <summary>Global lock of the update cycle</summary>
-               public object UpdateMutex = new object();
-               /// <summary>Global lock of the clipping queue</summary>
-               public object ClippingMutex = new object();
-               //TODO:share resource instances
-               /// <summary>
-               /// Store loaded resources instances shared among controls to reduce memory footprint
-               /// </summary>
-               public Dictionary<string,object> Ressources = new Dictionary<string, object>();
-               /// <summary>The Main layouting queue.</summary>
-               public Queue<LayoutingQueueItem> LayoutingQueue = new Queue<LayoutingQueueItem> ();
-               /// <summary>Store discarded lqi between two updates</summary>
-               public Queue<LayoutingQueueItem> DiscardQueue;
-               /// <summary>Main drawing queue, holding layouted controls</summary>
-               public Queue<GraphicObject> ClippingQueue = new Queue<GraphicObject>();
-               public string Clipboard;//TODO:use object instead for complex copy paste
-               /// <summary>each IML and fragments (such as inline Templates) are compiled as a Dynamic Method stored here
-               /// on the first instance creation of a IML item.
-               /// </summary>
-               public Dictionary<String, Instantiator> Instantiators = new Dictionary<string, Instantiator>();
-               public List<CrowThread> CrowThreads = new List<CrowThread>();//used to monitor thread finished
-
-               public DragDropEventArgs DragAndDropOperation = null;
-               public Surface DragImage = null;
-               public int DragImageWidth, DragImageHeight, DragImageX, DragImageY;
-               public void ClearDragImage () {
-                       lock (UpdateMutex) {                            
-                               clipping.UnionRectangle(new Rectangle (DragImageX, DragImageY, DragImageWidth, DragImageHeight));                               
-                               DragImage.Dispose();
-                               DragImage = null;
-                       }                       
-               }
-               #endregion
-
-               #region Private Fields
-               /// <summary>Client rectangle in the host context</summary>
-               protected Rectangle clientRectangle;
-               /// <summary>Clipping rectangles on the root context</summary>
-               Region clipping = new Region();
-               /// <summary>Main Cairo context</summary>
-               Context ctx;
-               #endregion
-
-               #region Default values and Style loading
-               /// Default values of properties from GraphicObjects are retrieve from XML Attributes.
-               /// The reflexion process used to retrieve those values being very slow, it is compiled in MSIL
-               /// and injected as a dynamic method referenced in the DefaultValuesLoader Dictionnary.
-               /// The compilation is done on the first object instancing, and is also done for custom widgets
-               public delegate void LoaderInvoker(object instance);
-               /// <summary>Store one loader per StyleKey</summary>
-               public Dictionary<String, LoaderInvoker> DefaultValuesLoader = new Dictionary<string, LoaderInvoker>();
-               /// <summary>Store dictionnary of member/value per StyleKey</summary>
-               public Dictionary<string, Style> Styling;
-               /// <summary> parse all styling data's during application startup and build global Styling Dictionary </summary>
-               protected virtual void loadStyling() {
-                       Styling = new Dictionary<string, Style> ();
-
-                       //fetch styling info in this order, if member styling is alreadey referenced in previous
-                       //assembly, it's ignored.
-                       loadStylingFromAssembly (Assembly.GetEntryAssembly ());
-                       loadStylingFromAssembly (Assembly.GetExecutingAssembly ());
-               }
-               /// <summary> Search for .style resources in assembly </summary>
-               void loadStylingFromAssembly (Assembly assembly) {
-                       if (assembly == null)
-                               return;
-                       foreach (string s in assembly
-                               .GetManifestResourceNames ()
-                               .Where (r => r.EndsWith (".style", StringComparison.OrdinalIgnoreCase))) {
-                               using (Stream stream = assembly.GetManifestResourceStream (s)) {
-                                       new StyleReader (this.Styling, stream, s);
-                               }
-
-                       }
-               }
-               void loadCursors(){
-                       //Load cursors
-                       XCursor.Cross = XCursorFile.Load(this, "#Crow.Images.Icons.Cursors.cross").Cursors[0];
-                       XCursor.Default = XCursorFile.Load(this, "#Crow.Images.Icons.Cursors.arrow").Cursors[0];
-                       XCursor.NW = XCursorFile.Load(this, "#Crow.Images.Icons.Cursors.top_left_corner").Cursors[0];
-                       XCursor.NE = XCursorFile.Load(this, "#Crow.Images.Icons.Cursors.top_right_corner").Cursors[0];
-                       XCursor.SW = XCursorFile.Load(this, "#Crow.Images.Icons.Cursors.bottom_left_corner").Cursors[0];
-                       XCursor.SE = XCursorFile.Load(this, "#Crow.Images.Icons.Cursors.bottom_right_corner").Cursors[0];
-                       XCursor.H = XCursorFile.Load(this, "#Crow.Images.Icons.Cursors.sb_h_double_arrow").Cursors[0];
-                       XCursor.V = XCursorFile.Load(this, "#Crow.Images.Icons.Cursors.sb_v_double_arrow").Cursors[0];
-                       XCursor.Text = XCursorFile.Load(this, "#Crow.Images.Icons.Cursors.ibeam").Cursors[0];
-               }
-               #endregion
-
-               #region Templates
-               /// <summary>Store one default templates resource ID per class.
-               /// Resource ID must be 'fullClassName.template' (not case sensitive)
-               /// Those found in application assembly have priority to the default Crow's one
-               /// </summary>
-               public Dictionary<string, string> DefaultTemplates;
-               /// <summary>Finds available default templates at startup</summary>
-               void findAvailableTemplates(){
-                       DefaultTemplates = new Dictionary<string, string>();
-                       searchTemplatesOnDisk ("./");
-                       string defTemplatePath = System.IO.Path.Combine (CrowConfigRoot, "defaultTemplates");
-                       searchTemplatesOnDisk (defTemplatePath);
-                       searchTemplatesIn (Assembly.GetEntryAssembly ());
-                       searchTemplatesIn (Assembly.GetExecutingAssembly ());
-               }
-               void searchTemplatesOnDisk (string templatePath){
-                       if (!Directory.Exists (templatePath))
-                               return;
-                       foreach (string f in Directory.GetFiles(templatePath, "*.template",SearchOption.AllDirectories)) {
-                               string clsName = System.IO.Path.GetFileNameWithoutExtension(f);
-                               if (DefaultTemplates.ContainsKey (clsName))
-                                       continue;
-                               DefaultTemplates [clsName] = f;
-                       }
-               }
-               void searchTemplatesIn(Assembly assembly){
-                       if (assembly == null)
-                               return;
-                       foreach (string resId in assembly
-                               .GetManifestResourceNames ()
-                               .Where (r => r.EndsWith (".template", StringComparison.OrdinalIgnoreCase))) {
-                               string clsName = resId.Substring (0, resId.Length - 9);
-                               if (DefaultTemplates.ContainsKey (clsName))
-                                       continue;
-                               DefaultTemplates[clsName] = "#" + resId;
-                       }
-               }
-               #endregion
-
-               #region Load/Save
-               /// <summary>Open file or find a resource from path string</summary>
-               /// <returns>A file or resource stream</returns>
-               /// <param name="path">This could be a normal file path, or an embedded ressource ID
-               /// Resource ID's must be prefixed with '#' character</param>
-               public virtual Stream GetStreamFromPath (string path)
-               {
-                       Stream stream = null;
-
-                       if (path.StartsWith ("#")) {
-                               string resId = path.Substring (1);
-                               //try/catch added to prevent nunit error
-                               try {                                   
-                                       stream = System.Reflection.Assembly.GetEntryAssembly ().GetManifestResourceStream (resId);
-                               } catch{}
-                               if (stream == null)//try to find ressource in Crow assembly
-                                       stream = System.Reflection.Assembly.GetExecutingAssembly ().GetManifestResourceStream (resId);
-                               if (stream == null)
-                                       throw new Exception ("Resource not found: " + path);
-                       } else {
-                               if (!File.Exists (path))
-                                       throw new FileNotFoundException ("File not found: ", path);
-                               stream = new FileStream (path, FileMode.Open, FileAccess.Read);
-                       }
-                       return stream;
-               }
-               public static Stream StaticGetStreamFromPath (string path)
-               {
-                       Stream stream = null;
-
-                       if (path.StartsWith ("#")) {
-                               string resId = path.Substring (1);
-                               //try/catch added to prevent nunit error
-                               try {
-                                       stream = System.Reflection.Assembly.GetEntryAssembly ().GetManifestResourceStream (resId);
-                               } catch{}
-                               if (stream == null)//try to find ressource in Crow assembly
-                                       stream = System.Reflection.Assembly.GetExecutingAssembly ().GetManifestResourceStream (resId);
-                               if (stream == null)
-                                       throw new Exception ("Resource not found: " + path);
-                       } else {
-                               if (!File.Exists (path))
-                                       throw new FileNotFoundException ("File not found: ", path);
-                               stream = new FileStream (path, FileMode.Open, FileAccess.Read);
-                       }
-                       return stream;
-               }
-               /// <summary>
-               /// Add the content of the IML fragment to the graphic tree of this interface
-               /// </summary>
-               /// <returns>return the new instance for convenience, may be ignored</returns>
-               /// <param name="imlFragment">a valid IML string</param>
-               public GraphicObject LoadIMLFragment (string imlFragment) {
-                       lock (UpdateMutex) {
-                               GraphicObject tmp = CreateITorFromIMLFragment (imlFragment).CreateInstance();
-                               AddWidget (tmp);
-                               return tmp;
-                       }
-               }
-               /// <summary>
-               /// Create an instantiator bound to this interface from the IML fragment
-               /// </summary>
-               /// <returns>return the new instantiator</returns>
-               /// <param name="imlFragment">a valid IML string</param>
-               public Instantiator CreateITorFromIMLFragment (string imlFragment) {                    
-                       return Instantiator.CreateFromImlFragment (this, imlFragment);
-               }
-               /// <summary>
-               /// Create an instance of a GraphicObject and add it to the GraphicTree of this Interface
-               /// </summary>
-               /// <returns>new instance of graphic object created</returns>
-               /// <param name="path">path of the iml file to load</param>
-               public GraphicObject AddWidget (string path)
-               {
-                       lock (UpdateMutex) {
-                               GraphicObject tmp = Load (path);
-                               AddWidget (tmp);
-                               return tmp;
-                       }
-               }
-               /// <summary>
-               /// Create an instance of a GraphicObject linked to this interface but not added to the GraphicTree
-               /// </summary>
-               /// <returns>new instance of graphic object created</returns>
-               /// <param name="path">path of the iml file to load</param>
-               public virtual GraphicObject Load (string path)
-               {
-                       try {
-                               return GetInstantiator (path).CreateInstance ();
-                       } catch (Exception ex) {
-                               throw new Exception ("Error loading <" + path + ">:", ex);
-                       }
-               }
-               /// <summary>
-               /// Fetch instantiator from cache or create it.
-               /// </summary>
-               /// <returns>new Instantiator</returns>
-               /// <param name="path">path of the iml file to load</param>
-               public Instantiator GetInstantiator(string path){
-                       if (!Instantiators.ContainsKey(path))
-                               Instantiators [path] = new Instantiator(this, path);
-                       return Instantiators [path];
-               }
-               /// <summary>Item templates are derived from instantiator, this function
-               /// try to fetch the requested one in the cache or create it.
-               /// They have additional properties for recursivity and
-               /// custom display per item type</summary>
-               public virtual ItemTemplate GetItemTemplate(string path){
-                       if (!Instantiators.ContainsKey(path))
-                               Instantiators [path] = new ItemTemplate(this, path);
-                       return Instantiators [path] as ItemTemplate;
-               }
-               #endregion
-
-               #region focus
-               GraphicObject _activeWidget;    //button is pressed on widget
-               GraphicObject _hoverWidget;             //mouse is over
-               GraphicObject _focusedWidget;   //has keyboard (or other perif) focus
-
-               /// <summary>Widget is focused and button is down or another perif action is occuring
-               /// , it can not lose focus while Active</summary>
-               public GraphicObject ActiveWidget
-               {
-                       get { return _activeWidget; }
-                       set
-                       {
-                               if (_activeWidget == value)
-                                       return;
-
-                               if (_activeWidget != null)
-                                       _activeWidget.IsActive = false;
-
-                               _activeWidget = value;
-
-                               #if DEBUG_FOCUS
-                               NotifyValueChanged("ActiveWidget", _activeWidget);
-                               #endif
-
-                               if (_activeWidget != null)
-                               {
-                                       _activeWidget.IsActive = true;
-                                       #if DEBUG_FOCUS
-                                       NotifyValueChanged("ActiveWidget", _activeWidget);
-                                       Debug.WriteLine("Active => " + _activeWidget.ToString());
-                               }else
-                                       Debug.WriteLine("Active => null");
-                                       #else
-                               }
-                                       #endif
-                       }
-               }
-               /// <summary>Pointer is over the widget</summary>
-               public virtual GraphicObject HoverWidget
-               {
-                       get { return _hoverWidget; }
-                       set {
-                               if (_hoverWidget == value)
-                                       return;
-
-                               //if (_hoverWidget != null)
-                               //      _hoverWidget.IsHover = false;
-
-                               _hoverWidget = value;
-
-                               #if DEBUG_FOCUS
-                               NotifyValueChanged("HoverWidget", _hoverWidget);
-                               #endif
-                               /*
-                               if (_hoverWidget != null)
-                               {
-                                       _hoverWidget.IsHover = true;
-                                       #if DEBUG_FOCUS
-                                       Debug.WriteLine("Hover => " + _hoverWidget.ToString());
-                                       }else
-                                       Debug.WriteLine("Hover => null");
-                                       #else
-                               }
-                                       #endif
-                                       */
-                       }
-               }
-               /// <summary>Widget has the keyboard or mouse focus</summary>
-               public GraphicObject FocusedWidget {
-                       get { return _focusedWidget; }
-                       set {
-                               if (_focusedWidget == value)
-                                       return;
-                               if (_focusedWidget != null)
-                                       _focusedWidget.HasFocus = false;
-                               _focusedWidget = value;
-                               #if DEBUG_FOCUS
-                               NotifyValueChanged("FocusedWidget", _focusedWidget);
-                               #endif
-                               if (_focusedWidget != null)
-                                       _focusedWidget.HasFocus = true;
-                       }
-               }
-               #endregion
-
-               #region UPDATE Loops
-               /// <summary>Enqueue Graphic object for Repaint, DrawingQueue is locked because
-               /// GraphObj's property Set methods could trigger an update from another thread
-               /// Once in that queue, that means that the layouting of obj and childs have succeed,
-               /// the next step when dequeued will be clipping registration</summary>
-               public void EnqueueForRepaint(GraphicObject g)
-               {                       
-                       lock (ClippingMutex) {
-                               if (g.IsQueueForClipping)
-                                       return;
-                               #if DEBUG_LOG
-                               DebugLog.AddEvent(DbgEvtType.GOEnqueueForRepaint, g);
-                               #endif  
-                               ClippingQueue.Enqueue (g);
-                               g.IsQueueForClipping = true;
-                       }
-               }
-               /// <summary>Main Update loop, executed in this interface thread, protected by the UpdateMutex
-               /// Steps:
-               ///     - execute device Repeat events
-               ///     - Layouting
-               ///     - Clipping
-               ///     - Drawing
-               /// Result: the Interface bitmap is drawn in memory (byte[] bmp) and a dirtyRect and bitmap are available
-               /// </summary>
-               public void Update(){
-                       if (armedClickSender != null && clickTimer.ElapsedMilliseconds >= Interface.DoubleClick) {
-                               armedClickSender.onMouseClick (armedClickSender, armedClickEvtArgs);                            
-                               armedClickSender = null;
-                       }
-
-                       if (mouseRepeatCount > 0) {
-                               int mc = mouseRepeatCount;
-                               mouseRepeatCount -= mc;
-                               if (_focusedWidget != null) {
-                                       mouseRepeatTriggeredAtLeastOnce = true;
-                                       for (int i = 0; i < mc; i++) {
-                                               _focusedWidget.onMouseDown (this, new BubblingMouseButtonEventArg(Mouse.X, Mouse.Y, MouseButton.Left, true));
-                                       }
-                               }
-                       }
-
-                       CrowThread[] tmpThreads;
-                       lock (CrowThreads) {
-                               tmpThreads = new CrowThread[CrowThreads.Count];
-                               Array.Copy (CrowThreads.ToArray (), tmpThreads, CrowThreads.Count);
-                       }
-                       for (int i = 0; i < tmpThreads.Length; i++)
-                               tmpThreads [i].CheckState ();
-
-                       if (!Monitor.TryEnter (UpdateMutex))
-                               return;
-
-                       #if MEASURE_TIME
-                       updateMeasure.StartCycle();
-                       #endif
-
-                       /*#if DEBUG_LOG
-                       DebugLog.AddEvent (DbgEvtType.IFaceUpdate);
-                       #endif*/
-
-                       processLayouting ();
-
-                       clippingRegistration ();
-
-                       processDrawing ();
-
-                       #if MEASURE_TIME
-                       updateMeasure.StopCycle();
-                       #endif
-
-                       Monitor.Exit (UpdateMutex);
-               }
-               /// <summary>Layouting loop, this is the first step of the udpate and process registered
-               /// Layouting queue items. Failing LQI's are requeued in this cycle until MaxTry is reached which
-               /// trigger an enqueue for the next Update Cycle</summary>
-               protected virtual void processLayouting(){
-                       #if MEASURE_TIME
-                       layoutingMeasure.StartCycle();
-                       #endif
-                       if (Monitor.TryEnter (LayoutMutex)) {
-                               #if DEBUG_LOG
-                               if (LayoutingQueue.Count > 0)
-                                       DebugLog.AddEvent (DbgEvtType.IFaceStartLayouting);
-                               #endif
-                               DiscardQueue = new Queue<LayoutingQueueItem> ();
-                               //Debug.WriteLine ("======= Layouting queue start =======");
-                               LayoutingQueueItem lqi;
-                               while (LayoutingQueue.Count > 0) {
-                                       lqi = LayoutingQueue.Dequeue ();
-                                       lqi.ProcessLayouting ();
-                               }
-                               LayoutingQueue = DiscardQueue;
-                               Monitor.Exit (LayoutMutex);
-                               DiscardQueue = null;
-                       }
-                       /*#if DEBUG_LOG
-                       DebugLog.AddEvent (DbgEvtType.IFaceStartLayouting);
-                       #endif*/
-                       #if MEASURE_TIME
-                       layoutingMeasure.StopCycle();
-                       #endif
-               }
-               /// <summary>Degueue Widget to clip from DrawingQueue and register the last painted slot and the new one
-               /// Clipping rectangles are added at each level of the tree from leef to root, that's the way for the painting
-               /// operation to known if it should go down in the tree for further graphic updates and repaints</summary>
-               void clippingRegistration(){
-                       #if MEASURE_TIME
-                       clippingMeasure.StartCycle();
-                       #endif
-                       #if DEBUG_LOG
-                       if (ClippingQueue.Count > 0)
-                               DebugLog.AddEvent (DbgEvtType.IFaceStartClipping);
-                       #endif
-                       GraphicObject g = null;
-                       while (ClippingQueue.Count > 0) {
-                               lock (ClippingMutex) {
-                                       g = ClippingQueue.Dequeue ();
-                                       g.IsQueueForClipping = false;
-                               }
-                               g.ClippingRegistration ();
-                       }
-                       /*#if DEBUG_LOG
-                       DebugLog.AddEvent (DbgEvtType.IFaceEndClipping);
-                       #endif*/
-                       #if MEASURE_TIME
-                       clippingMeasure.StopCycle();
-                       #endif
-               }
-               /// <summary>Clipping Rectangles drive the drawing process. For compositing, each object under a clip rectangle should be
-               /// repainted. If it contains also clip rectangles, its cache will be update, or if not cached a full redraw will take place</summary>
-               void processDrawing(){
-                       #if MEASURE_TIME
-                       drawingMeasure.StartCycle();
-                       #endif
-                       #if DEBUG_LOG
-                       if (!clipping.IsEmpty)
-                               DebugLog.AddEvent (DbgEvtType.IFaceStartDrawing);
-                       #endif
-                       if (DragImage != null)
-                               clipping.UnionRectangle(new Rectangle (DragImageX, DragImageY, DragImageWidth, DragImageHeight));
-                       //using (surf = new ImageSurface (bmp, Format.Argb32, ClientRectangle.Width, ClientRectangle.Height, ClientRectangle.Width * 4)) {
-                       using (ctx = new Context (surf)){
-                               if (!clipping.IsEmpty) {
-                                       IsDirty = true;
-
-                                       for (int i = 0; i < clipping.NumRectangles; i++)
-                                               ctx.Rectangle(clipping.GetRectangle(i));
-                                       
-                                       ctx.ClipPreserve();
-                                       ctx.Operator = Operator.Clear;
-                                       ctx.Fill();
-                                       ctx.Operator = Operator.Over;
-
-                                       for (int i = GraphicTree.Count -1; i >= 0 ; i--){
-                                               GraphicObject p = GraphicTree[i];
-                                               if (!p.Visible)
-                                                       continue;
-                                               if (clipping.Contains (p.Slot) == RegionOverlap.Out)
-                                                       continue;
-
-                                               ctx.Save ();
-                                               p.Paint (ref ctx);
-                                               ctx.Restore ();
-                                       }
-
-                                       if (DragAndDropOperation != null) {
-                                               if (DragImage != null) {
-                                                       DirtyRect += new Rectangle (DragImageX, DragImageY, DragImageWidth, DragImageHeight);
-                                                       DragImageX = Mouse.X - DragImageWidth / 2;
-                                                       DragImageY = Mouse.Y - DragImageHeight / 2;
-                                                       ctx.Save ();
-                                                       ctx.ResetClip ();
-                                                       ctx.SetSourceSurface (DragImage, DragImageX, DragImageY);
-                                                       ctx.PaintWithAlpha (0.8);
-                                                       ctx.Restore ();
-                                                       DirtyRect += new Rectangle (DragImageX, DragImageY, DragImageWidth, DragImageHeight);
-                                                       IsDirty = true;
-                                                       //Console.WriteLine ("dragimage drawn: {0},{1}", DragImageX, DragImageY);
-                                               }
-                                       }
-
-                                       #if DEBUG_CLIP_RECTANGLE
-                                       ctx.LineWidth = 1;
-                                       ctx.SetSourceColor(Color.Magenta.AdjustAlpha (0.5));
-                                       for (int i = 0; i < clipping.NumRectangles; i++)
-                                               ctx.Rectangle(clipping.GetRectangle(i));
-                                       ctx.Stroke ();
-                                       #endif
-
-                                       clipping.Dispose ();
-                                       clipping = new Region ();
-                                       //}
-                                       //surf.WriteToPng (@"/mnt/data/test.png");
-
-                                       backend?.Flush ();
-                               }
-                       }
-                       /*#if DEBUG_LOG
-                       DebugLog.AddEvent (DbgEvtType.IFaceEndDrawing);
-                       #endif*/
-                       #if MEASURE_TIME
-                       drawingMeasure.StopCycle();
-                       #endif
-               }
-               #endregion
-
-               #region GraphicTree handling
-               /// <summary>Add widget to the Graphic tree of this interface and register it for layouting</summary>
-               public GraphicObject AddWidget(GraphicObject g)
-               {
-                       g.Parent = this;
-                       int ptr = 0;
-                       Window newW = g as Window;
-                       if (newW != null) {
-                               while (ptr < GraphicTree.Count) {
-                                       Window w = GraphicTree [ptr] as Window;
-                                       if (w == null)
-                                               break;
-                                       if (newW.AlwaysOnTop || !w.AlwaysOnTop)
-                                               break;
-                                       
-                                       ptr++;
-                               }
-                       }
-
-                       lock (UpdateMutex)
-                               GraphicTree.Insert (ptr, g);
-
-                       g.RegisteredLayoutings = LayoutingType.None;
-                       g.RegisterForLayouting (LayoutingType.Sizing | LayoutingType.ArrangeChildren);
-
-                       return g;
-               }
-               /// <summary>Set visible state of widget to false and delete if from the graphic tree</summary>
-               public void DeleteWidget(GraphicObject g)
-               {
-                       lock (UpdateMutex) {
-                               RegisterClip (g.ScreenCoordinates (g.LastPaintedSlot));
-                               GraphicTree.Remove (g);
-                               g.Parent = null;
-                               g.Dispose ();
-                       }
-               }
-               /// <summary>Set visible state of widget to false and remove if from the graphic tree</summary>
-               public void RemoveWidget(GraphicObject g)
-               {
-//                     if (g.Contains(HoverWidget)) {
-//                             while (HoverWidget != g.focusParent) {
-//                                     HoverWidget.onMouseLeave (HoverWidget, null);
-//                                     HoverWidget = HoverWidget.focusParent;
-//                             }
-//                     }
-                       lock (UpdateMutex) {
-                               RegisterClip (g.ScreenCoordinates (g.LastPaintedSlot));
-                               GraphicTree.Remove (g);
-                               g.Parent = null;
-                       }
-               }
-               /// <summary> Remove all Graphic objects from top container </summary>
-               public void ClearInterface()
-               {
-                       lock (UpdateMutex) {
-                               while (GraphicTree.Count > 0) {
-                                       //TODO:parent is not reset to null because object will be added
-                                       //to ObjectToRedraw list, and without parent, it fails
-                                       GraphicObject g = GraphicTree [0];
-                                       RegisterClip (g.ScreenCoordinates (g.LastPaintedSlot));
-                                       GraphicTree.RemoveAt (0);
-                                       g.Dispose ();
-                               }
-                       }
-                       #if DEBUG_LAYOUTING
-                       LQIsTries = new List<LQIList>();
-                       curLQIsTries = new LQIList();
-                       LQIs = new List<LQIList>();
-                       curLQIs = new LQIList();
-                       #endif
-               }
-               /// <summary> Put widget on top of other root widgets</summary>
-               public void PutOnTop(GraphicObject g, bool isOverlay = false)
-               {
-                       int ptr = 0;
-                       Window newW = g as Window;
-                       if (newW != null) {
-                               while (ptr < GraphicTree.Count) {
-                                       Window w = GraphicTree [ptr] as Window;
-                                       if (w != null) {
-                                               if (newW.AlwaysOnTop || !w.AlwaysOnTop)
-                                                       break;
-                                       }
-                                       ptr++;
-                               }
-                       }
-                       if (GraphicTree.IndexOf(g) > ptr)
-                       {
-                               lock (UpdateMutex) {
-                                       GraphicTree.Remove (g);
-                                       GraphicTree.Insert (ptr, g);
-                               }
-                               EnqueueForRepaint (g);
-                       }
-               }
-
-               /// <summary>Search a Graphic object in the tree named 'nameToFind'</summary>
-               public GraphicObject FindByName (string nameToFind)
-               {
-                       foreach (GraphicObject w in GraphicTree) {
-                               GraphicObject r = w.FindByName (nameToFind);
-                               if (r != null)
-                                       return r;
-                       }
-                       return null;
-               }
-               #endregion
-
-               /// <summary>
-               /// Resize the interface. This function should be called by the host
-               /// when window resize event occurs. 
-               /// </summary>
-               /// <param name="bounds">bounding box of the interface</param>
-               public virtual void ProcessResize(Rectangle bounds){
-                       lock (UpdateMutex) {
-                               clientRectangle = bounds;
-
-                               /*surf.Dispose ();
-                               surf = new Cairo.XlibSurface (xHandle, xwinHnd, xDefaultVisual, clientRectangle.Width, clientRectangle.Height);*/
-                               if (surf is XlibSurface)
-                                       (surf as XlibSurface).SetSize (clientRectangle.Width, clientRectangle.Height);
-                               else if (surf is XcbSurface)
-                                       (surf as XcbSurface).SetSize (clientRectangle.Width, clientRectangle.Height);
-
-
-                               foreach (GraphicObject g in GraphicTree)
-                                       g.RegisterForLayouting (LayoutingType.All);
-
-                               RegisterClip (clientRectangle);
-                       }
-               }
-
-               #region Mouse and Keyboard Handling
-               XCursor cursor = XCursor.Default;
-
-               public MouseState Mouse;
-               public IKeyboard Keyboard;
-
-               public XCursor MouseCursor {
-                       set {
-                               if (value == cursor)
-                                       return;
-                               cursor = value;
-                               MouseCursorChanged.Raise (this,new MouseCursorChangedEventArgs(cursor));
-                       }
-               }
-               /// <summary>Processes mouse move events from the root container, this function
-               /// should be called by the host on mouse move event to forward events to crow interfaces</summary>
-               /// <returns>true if mouse is in the interface</returns>
-               public virtual bool ProcessMouseMove(int x, int y)
-               {
-                       /*if (armedClickSender != null) {
-                               //armedClickSender.onMouseClick (armedClickSender, armedClickEvtArgs);
-                               armedClickSender = null;
-                       }*/
-                       int deltaX = x - Mouse.X;
-                       int deltaY = y - Mouse.Y;
-                       Mouse.X = x;
-                       Mouse.Y = y;
-                       MouseMoveEventArgs e = new MouseMoveEventArgs (x, y, deltaX, deltaY);
-                       e.Mouse = Mouse;
-
-                       if (ActiveWidget != null && DragAndDropOperation == null) {
-                               //TODO, ensure object is still in the graphic tree
-                               //send move evt even if mouse move outside bounds
-                               ActiveWidget.onMouseMove (this, e);
-                               return true;
-                       }
-
-                       if (DragAndDropOperation != null)//drag source cant have hover event, so move has to be handle here
-                               DragAndDropOperation.DragSource.onMouseMove (this, e);                  
-
-                       if (HoverWidget != null) {
-                               resetTooltip ();
-                               //check topmost graphicobject first
-                               GraphicObject tmp = HoverWidget;
-                               GraphicObject topc = null;
-                               while (tmp is GraphicObject) {
-                                       topc = tmp;
-                                       tmp = tmp.focusParent;
-                               }
-                               int idxhw = GraphicTree.IndexOf (topc);
-                               if (idxhw != 0) {
-                                       int i = 0;
-                                       while (i < idxhw) {
-                                               if (!GraphicTree [i].isPopup) {
-                                                       if (GraphicTree [i].MouseIsIn (e.Position)) {
-                                                               while (HoverWidget != null) {
-                                                                       HoverWidget.onMouseLeave (HoverWidget, e);
-                                                                       HoverWidget = HoverWidget.focusParent;
-                                                               }
-
-                                                               GraphicTree [i].checkHoverWidget (e);
-                                                               HoverWidget.onMouseMove (this, e);
-                                                               return true;
-                                                       }
-                                               }
-                                               i++;
-                                       }
-                               }
-
-                               if (HoverWidget.MouseIsIn (e.Position)) {
-                                       HoverWidget.checkHoverWidget (e);
-                                       HoverWidget.onMouseMove (this, e);
-                                       return true;
-                               } else {
-                                       HoverWidget.onMouseLeave (HoverWidget, e);
-                                       //seek upward from last focused graph obj's
-                                       while (HoverWidget.focusParent != null) {
-                                               HoverWidget = HoverWidget.focusParent;
-                                               if (HoverWidget.MouseIsIn (e.Position)) {
-                                                       HoverWidget.checkHoverWidget (e);
-                                                       HoverWidget.onMouseMove (this, e);
-                                                       return true;
-                                               } else
-                                                       HoverWidget.onMouseLeave (HoverWidget, e);
-                                       }
-                               }
-                       }
-
-                       //top level graphic obj's parsing
-                       lock (GraphicTree) {
-                               for (int i = 0; i < GraphicTree.Count; i++) {
-                                       GraphicObject g = GraphicTree [i];
-                                       if (g.MouseIsIn (e.Position)) {
-                                               g.checkHoverWidget (e);
-                                               if (g is Window)
-                                                       PutOnTop (g);
-                                               HoverWidget.onMouseMove (this, e);
-                                               return true;
-                                       }
-                               }
-                       }
-                       HoverWidget = null;
-                       return false;
-               }
-               /// <summary>
-               /// Forward the mouse up event from the host to the crow interface
-               /// </summary>
-               /// <returns>return true, if interface handled the event, false otherwise.</returns>
-               /// <param name="button">Button index</param>
-               public bool ProcessMouseButtonUp(int button)
-               {
-                       Mouse.DisableBit (button);
-                       MouseButtonEventArgs e = new MouseButtonEventArgs ((Crow.MouseButton)button) { Mouse = Mouse };
-                       if (_activeWidget == null)
-                               return false;
-
-                       if (mouseRepeatThread != null) {
-                               mouseRepeatOn = false;
-                               mouseRepeatThread.Abort();
-                               mouseRepeatThread.Join ();
-                       }
-                       if (!mouseRepeatTriggeredAtLeastOnce) {
-                               if (_activeWidget.MouseIsIn (e.Position))
-                                       armeClick (_activeWidget, e);                           
-                       }
-                       mouseRepeatTriggeredAtLeastOnce = false;
-                       _activeWidget.onMouseUp (_activeWidget, e);
-
-//                     GraphicObject lastActive = _activeWidget;
-                       ActiveWidget = null;
-//                     if (!lastActive.MouseIsIn (Mouse.Position)) {
-//                             ProcessMouseMove (Mouse.X, Mouse.Y);
-//                     }
-                       return true;
-               }
-               /// <summary>
-               /// Forward the mouse down event from the host to the crow interface
-               /// </summary>
-               /// <returns>return true, if interface handled the event, false otherwise.</returns>
-               /// <param name="button">Button index</param>
-               public bool ProcessMouseButtonDown(int button)
-               {
-                       Mouse.EnableBit (button);
-                       MouseButtonEventArgs e = new MouseButtonEventArgs ((Crow.MouseButton)button) { Mouse = Mouse };
-
-                       if (HoverWidget == null)
-                               return false;
-
-                       GraphicObject hoverFocused = HoverWidget;
-                       while (!hoverFocused.Focusable) {
-                               hoverFocused = hoverFocused.focusParent;
-                               if (hoverFocused == null) {
-                                       hoverFocused = HoverWidget;
-                                       break;
-                               }
-                       }
-                       if (hoverFocused == armedClickSender) {
-                               if (clickTimer.ElapsedMilliseconds < Interface.DoubleClick) {
-                                       armedClickSender.onMouseDoubleClick (armedClickSender, e);
-                                       armedClickSender = null;
-                                       return true;
-                               }
-                                       
-                       }
-                       if (armedClickSender!=null)
-                               armedClickSender.onMouseClick (armedClickSender, armedClickEvtArgs);                            
-                       armedClickSender = null;
-
-                       HoverWidget.onMouseDown(HoverWidget,new BubblingMouseButtonEventArg(e));
-
-                       if (FocusedWidget == null)
-                               return true;
-
-                       ActiveWidget = FocusedWidget;
-
-                       if (!FocusedWidget.MouseRepeat)
-                               return true;
-                       mouseRepeatThread = new Thread (mouseRepeatThreadFunc);
-                       mouseRepeatThread.IsBackground = true;
-                       mouseRepeatThread.Start ();
-                       return true;
-               }
-               /// <summary>
-               /// Forward the mouse wheel event from the host to the crow interface
-               /// </summary>
-               /// <returns>return true, if interface handled the event, false otherwise.</returns>
-               /// <param name="button">Button index</param>
-               public bool ProcessMouseWheelChanged(float delta)
-               {
-                       Mouse.SetScrollRelative (0, delta);
-                       MouseWheelEventArgs e = new MouseWheelEventArgs () { Mouse = Mouse, DeltaPrecise = delta };
-
-                       if (HoverWidget == null)
-                               return false;
-                       HoverWidget.onMouseWheel (this, e);
-                       return true;
-               }
-
-               public bool IsKeyDown (Key key) {
-                       return false;
-               }
-               #endregion
-
-               #region Tooltip handling
-               Stopwatch tooltipTimer = new Stopwatch();
-               GraphicObject ToolTipContainer = null;
-               volatile bool tooltipVisible = false;
-
-               protected void initTooltip () {
-                       ToolTipContainer = Load  ("#Crow.Tooltip.template");
-                       Thread t = new Thread (toolTipThreadFunc);
-                       t.IsBackground = true;
-                       t.Start ();
-               }
-               void toolTipThreadFunc ()
-               {
-                       while(true) {
-                               if (tooltipTimer.ElapsedMilliseconds > ToolTipDelay) {
-                                       if (!tooltipVisible) {
-                                               GraphicObject g = _hoverWidget;
-                                               while (g != null) {
-                                                       if (!string.IsNullOrEmpty (g.Tooltip)) {
-                                                               AddWidget (ToolTipContainer);
-                                                               ToolTipContainer.DataSource = g;
-                                                               ToolTipContainer.Top = Mouse.Y + 10;
-                                                               ToolTipContainer.Left = Mouse.X + 10;
-                                                               tooltipVisible = true;
-                                                               break;
-                                                       }
-                                                       g = g.LogicalParent as GraphicObject;
-                                               }
-                                       }
-                               }
-                               Thread.Sleep (200);     
-                       }
-
-               }
-               void resetTooltip () {
-                       if (tooltipVisible) {
-                               //ToolTipContainer.DataSource = null;
-                               RemoveWidget (ToolTipContainer);
-                               tooltipVisible = false;
-                       }
-                       tooltipTimer.Restart ();
-               }
-               #endregion
-
-               #region Contextual menu
-               MenuItem ctxMenuContainer;
-               protected void initContextMenus (){
-                       ctxMenuContainer = Load  ("#Crow.ContextMenu.template") as MenuItem;
-                       ctxMenuContainer.LayoutChanged += CtxMenuContainer_LayoutChanged;
-               }
-
-               void CtxMenuContainer_LayoutChanged (object sender, LayoutingEventArgs e)
-               {
-                       Rectangle r = ctxMenuContainer.ScreenCoordinates (ctxMenuContainer.Slot);
-                       if (e.LayoutType == LayoutingType.Width || e.LayoutType == LayoutingType.X) {
-                               if (r.Right > this.clientRectangle.Right)
-                                       ctxMenuContainer.Left = this.clientRectangle.Right - ctxMenuContainer.Slot.Width;
-                       }else if (e.LayoutType == LayoutingType.Width || e.LayoutType == LayoutingType.Y) {
-                               if (r.Bottom > this.clientRectangle.Bottom)
-                                       ctxMenuContainer.Top = this.clientRectangle.Bottom - ctxMenuContainer.Slot.Height;
-                       }
-                       
-               }
-
-               public void ShowContextMenu (GraphicObject go) {
-
-                       lock (UpdateMutex) {
-                               if (ctxMenuContainer.Parent == null)
-                                       this.AddWidget (ctxMenuContainer);
-                               else
-                                       ctxMenuContainer.IsOpened = true;
-
-                               ctxMenuContainer.isPopup = true;
-                               ctxMenuContainer.LogicalParent = go;
-                               ctxMenuContainer.DataSource = go;
-
-                               PutOnTop (ctxMenuContainer, true);
-                       }
-                       ctxMenuContainer.Left = Mouse.X - 5;
-                       ctxMenuContainer.Top = Mouse.Y - 5;
-
-                       HoverWidget = ctxMenuContainer;
-                       ctxMenuContainer.onMouseEnter (ctxMenuContainer, new MouseMoveEventArgs (Mouse.X, Mouse.Y, 0, 0));
-               }
-               #endregion
-
-               #region Device Repeat Events
-               volatile bool mouseRepeatOn, keyboardRepeatOn, mouseRepeatTriggeredAtLeastOnce = false;
-               volatile int mouseRepeatCount, keyboardRepeatCount;
-               Thread mouseRepeatThread, keyboardRepeatThread;
-               KeyEventArgs lastKeyDownEvt;
-               void mouseRepeatThreadFunc()
-               {
-                       mouseRepeatOn = true;
-                       mouseRepeatTriggeredAtLeastOnce = false;
-                       Thread.Sleep (Interface.DeviceRepeatDelay);
-                       while (mouseRepeatOn) {
-                               mouseRepeatCount++;
-                               Thread.Sleep (Interface.DeviceRepeatInterval);
-                       }
-                       mouseRepeatCount = 0;
-               }
-               void keyboardRepeatThreadFunc()
-               {
-                       keyboardRepeatOn = true;
-                       Thread.Sleep (Interface.DeviceRepeatDelay);
-                       while (keyboardRepeatOn) {
-                               keyboardRepeatCount++;
-                               Thread.Sleep (Interface.DeviceRepeatInterval);
-                       }
-                       keyboardRepeatCount = 0;
-               }
-               #endregion
-
-               #region ILayoutable implementation
-               public virtual bool PointIsIn(ref Point m)
-               {
-                       return true;
-               }
-               public void RegisterClip(Rectangle r){
-                       clipping.UnionRectangle (r);
-               }
-               public bool ArrangeChildren { get { return false; }}
-               public int LayoutingTries {
-                       get { throw new NotImplementedException (); }
-                       set { throw new NotImplementedException (); }
-               }
-               public LayoutingType RegisteredLayoutings {
-                       get { return LayoutingType.None; }
-                       set { throw new NotImplementedException (); }
-               }
-               public void RegisterForLayouting (LayoutingType layoutType) { throw new NotImplementedException (); }
-               public bool UpdateLayout (LayoutingType layoutType) { throw new NotImplementedException (); }
-               public Rectangle ContextCoordinates (Rectangle r) { return r;}
-               public Rectangle ScreenCoordinates (Rectangle r) { return r; }
-
-               public ILayoutable Parent {
-                       get { return null; }
-                       set { throw new NotImplementedException (); }
-               }
-               public ILayoutable LogicalParent {
-                       get { return null; }
-                       set { throw new NotImplementedException (); }
-               }
-
-               public Rectangle ClientRectangle {
-                       get { return clientRectangle; }
-               }
-               public Interface HostContainer {
-                       get { return this; }
-               }
-               public Rectangle getSlot () { return ClientRectangle; }
-               #endregion
-
-               #if MEASURE_TIME
-               public PerformanceMeasure clippingMeasure = new PerformanceMeasure("Clipping", 1);
-               public PerformanceMeasure layoutingMeasure = new PerformanceMeasure("Layouting", 1);
-               public PerformanceMeasure updateMeasure = new PerformanceMeasure("Update", 1);
-               public PerformanceMeasure drawingMeasure = new PerformanceMeasure("Drawing", 1);
-               public List<PerformanceMeasure> PerfMeasures = new List<PerformanceMeasure>();
-               #endif
-               #if DEBUG_LAYOUTING
-               public List<LQIList> LQIsTries = new List<LQIList>();
-               public LQIList curLQIsTries = new LQIList();
-               public List<LQIList> LQIs = new List<LQIList>();
-               public LQIList curLQIs = new LQIList();
-               //              public static LayoutingQueueItem[] MultipleRunsLQIs {
-               //                      get { return curUpdateLQIs.Where(l=>l.LayoutingTries>2 || l.DiscardCount > 0).ToArray(); }
-               //              }
-               public LayoutingQueueItem currentLQI;
-               #else
-               public List<LQIList> LQIs = null;//still create the var for CrowIDE
-               #endif
-       }
-}
-
diff --git a/src/ItemTemplate.cs b/src/ItemTemplate.cs
deleted file mode 100644 (file)
index fc89371..0000000
+++ /dev/null
@@ -1,301 +0,0 @@
-//
-// ItemTemplate.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-using System.IO;
-using System.Reflection;
-using System.Reflection.Emit;
-using System.Threading;
-using System.Xml.Serialization;
-using System.Xml;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.Linq;
-using Crow.IML;
-
-namespace Crow
-{
-       /// <summary> Test func on data, return yes if there's children </summary>
-       public delegate bool BooleanTestOnInstance(object instance);
-
-       /// <summary>
-       /// Derived from Instantiator with sub data fetching facilities for hierarchical data access.
-       /// 
-       /// ItemTemplate stores the dynamic method for instantiating the control tree defined in a valid IML file.
-       /// 
-       /// </summary>
-       public class ItemTemplate : Instantiator {
-               #if DESIGN_MODE
-               public void getIML (System.Xml.XmlDocument doc, System.Xml.XmlNode parentElem){         
-                       if (sourcePath == "#Crow.DefaultItem.template")
-                               return;
-                       
-                       XmlElement xe = doc.CreateElement("ItemTemplate");
-                       XmlAttribute xa = null;
-
-                       if (string.IsNullOrEmpty (sourcePath)) {
-                               //inline item template
-                               using (GraphicObject go = this.CreateInstance())
-                                       go.getIML (doc, xe);
-                       } else {
-                               xa = doc.CreateAttribute ("Path");
-                               xa.Value = sourcePath;
-                               xe.Attributes.Append (xa);
-                       }
-
-                       if (strDataType != "default") {
-                               xa = doc.CreateAttribute ("DataType");
-                               xa.Value = strDataType;
-                               xe.Attributes.Append (xa);
-
-                               if (dataTest != "TypeOf"){
-                                       xa = doc.CreateAttribute ("DataTest");
-                                       xa.Value = dataTest;
-                                       xe.Attributes.Append (xa);
-                               }
-                       }
-
-                       if (!string.IsNullOrEmpty(fetchMethodName)){
-                               xa = doc.CreateAttribute ("Data");
-                               xa.Value = fetchMethodName;
-                               xe.Attributes.Append (xa);
-                       }
-                               
-                       parentElem.AppendChild (xe);
-
-                               
-               }
-               #endif
-
-               public EventHandler Expand;
-               public BooleanTestOnInstance HasSubItems;
-               string strDataType;
-               string fetchMethodName;
-               string dataTest;
-
-               #region CTOR
-               /// <summary>
-               /// Initializes a new instance of the <see cref="Crow.ItemTemplate"/> class by parsing the file passed as argument.
-               /// </summary>
-               /// <param name="path">IML file to parse</param>
-               /// <param name="_dataType">type this item will be choosen for, or member of the data item</param>
-               /// <param name="_fetchDataMethod">for hierarchical data, method to call for children fetching</param>
-               public ItemTemplate(Interface _iface, string path, string _dataTest = "TypeOf", string _dataType = "default", string _fetchDataMethod = null)
-                       : base(_iface, path) {
-                       strDataType = _dataType;
-                       fetchMethodName = _fetchDataMethod;
-                       dataTest = _dataTest;
-
-               }
-               /// <summary>
-               /// Initializes a new instance of the <see cref="Crow.ItemTemplate"/> class by parsing the IML fragment passed as arg.
-               /// </summary>
-               /// <param name="path">IML fragment to parse</param>
-               /// <param name="_dataType">type this item will be choosen for, or member of the data item</param>
-               /// <param name="_fetchDataMethod">for hierarchical data, method to call for children fetching</param>
-               public ItemTemplate (Interface _iface, Stream ImlFragment, string _dataTest, string _dataType, string _fetchDataMethod)
-                       :base(_iface, ImlFragment)
-               {
-                       strDataType = _dataType;
-                       fetchMethodName = _fetchDataMethod;
-                       dataTest = _dataTest;
-               }
-               /// <summary>
-               /// Initializes a new instance of the <see cref="Crow.ItemTemplate"/> class using the opened XmlReader in args.
-               /// </summary>
-               /// <param name="path">XML reader positionned before or at the root node</param>
-               /// <param name="_dataType">type this item will be choosen for, or member of the data item</param>
-               /// <param name="_fetchDataMethod">for hierarchical data, method to call for children fetching</param>
-               public ItemTemplate (Interface _iface, XmlReader reader, string _dataTest = "TypeOf" , string _dataType = null, string _fetchDataMethod = null)
-                       :base(_iface, reader)
-               {
-                       strDataType = _dataType;
-                       fetchMethodName = _fetchDataMethod;
-                       dataTest = _dataTest;
-               }
-               #endregion
-
-               /// <summary>
-               /// Creates the expand delegate.
-               /// </summary>
-               /// <param name="host">Host.</param>
-               public void CreateExpandDelegate (TemplatedGroup host){
-                       Type dataType = null;
-                       //if (host.DataTest == "TypeOf"){
-                               dataType = CompilerServices.tryGetType(strDataType);
-//                             if (dataType == null) {
-//                                     Debug.WriteLine ("ItemTemplate error: DataType not found: {0}.", strDataType);
-//                                     return;
-//                             }
-//                     }
-                       Type tmpGrpType = typeof(TemplatedGroup);
-                       Type evtType = typeof(EventHandler);
-
-                       //PropertyInfo piData = tmpGrpType.GetProperty ("Data");
-
-                       MethodInfo evtInvoke = evtType.GetMethod ("Invoke");
-                       ParameterInfo [] evtParams = evtInvoke.GetParameters ();
-                       Type handlerArgsType = evtParams [1].ParameterType;
-
-                       Type [] args = { CompilerServices.TObject, CompilerServices.TObject, handlerArgsType };
-
-                       #region Expand dyn meth
-                       //DM is bound to templatedGroup root (arg0)
-                       //arg1 is the sender of the expand event
-                       DynamicMethod dm = new DynamicMethod ("dyn_expand_" + fetchMethodName,
-                               typeof (void), args,typeof(TemplatedGroup), true);
-
-                       System.Reflection.Emit.Label gotoEnd;
-                       System.Reflection.Emit.Label ifDataIsNull;
-                       System.Reflection.Emit.Label gotoItemsContainerNotFound;
-
-                       ILGenerator il = dm.GetILGenerator (256);
-                       il.DeclareLocal(typeof(GraphicObject));
-
-                       gotoEnd = il.DefineLabel ();
-                       ifDataIsNull = il.DefineLabel ();
-                       gotoItemsContainerNotFound = il.DefineLabel ();
-
-                       il.Emit (OpCodes.Ldarg_1);//load sender of expand event
-                       il.Emit(OpCodes.Ldstr, "ItemsContainer");//load name to find
-                       il.Emit (OpCodes.Callvirt, CompilerServices.miFindByName);
-                       il.Emit (OpCodes.Stloc_0);//save items container as loc0
-
-                       //ensure ItemsContainer is not null
-                       il.Emit (OpCodes.Ldloc_0);
-                       il.Emit (OpCodes.Brfalse, gotoItemsContainerNotFound);
-
-                       //check that node is not already expanded
-                       il.Emit (OpCodes.Ldarg_0);//push root TemplatedGroup into the stack
-                       il.Emit (OpCodes.Ldarg_1);
-                       il.Emit (OpCodes.Call, CompilerServices.miIsAlreadyExpanded);
-                       il.Emit (OpCodes.Brtrue, gotoEnd);
-//                     il.Emit (OpCodes.Ldloc_0);
-//                     il.Emit (OpCodes.Callvirt, piData.GetGetMethod ());
-//                     il.Emit (OpCodes.Brfalse, ifDataIsNull);
-//                     il.Emit (OpCodes.Br, gotoEnd);
-
-//                     il.MarkLabel(ifDataIsNull);
-
-                       //copy the ref of ItemTemplates list TODO: maybe find another way to share it among the nodes?
-//                     FieldInfo fiTemplates = tmpGrpType.GetField("ItemTemplates");
-//                     il.Emit (OpCodes.Ldloc_0);
-//                     il.Emit (OpCodes.Ldarg_0);
-//                     il.Emit (OpCodes.Ldfld, fiTemplates);
-//                     il.Emit (OpCodes.Stfld, fiTemplates);
-
-                       //call 'fetchMethodName' from the dataSource to build the sub nodes list
-                       //il.Emit (OpCodes.Ldarg_0);//load root templatedGroop
-
-                       il.Emit (OpCodes.Ldarg_0);//push root TemplatedGroup into the stack
-                       il.Emit (OpCodes.Ldarg_1);//load sender node of expand
-                       il.Emit (OpCodes.Callvirt, CompilerServices.miGetDataSource);//get the dataSource of the sender
-
-
-
-                       if (fetchMethodName != "self") {//special keyword self allows the use of recurent list<<<
-                               if (dataType == null) {
-                                       //dataTest was not = TypeOF, so we have to get the type of data
-                                       //dynamically and fetch
-
-                                       il.Emit (OpCodes.Ldstr, fetchMethodName);
-                                       il.Emit (OpCodes.Call, CompilerServices.miGetDataTypeAndFetch);
-                               }else
-                                       emitGetSubData(il, dataType);                   
-                       }
-                       //set 'return' from the fetch method as 'data' of the list
-                       //il.Emit (OpCodes.Callvirt, piData.GetSetMethod ());
-                       il.Emit (OpCodes.Ldloc_0);//load second arg of loadPage, the sender node
-                       il.Emit (OpCodes.Ldstr, dataTest);//load 3rd arg, dataTest kind on subitems
-                       il.Emit (OpCodes.Callvirt, CompilerServices.miLoadPage);
-                       il.Emit (OpCodes.Br, gotoEnd);
-
-                       il.MarkLabel(gotoItemsContainerNotFound);
-                       il.EmitWriteLine("ItemsContainer not found in ItemTemplate for " + host.ToString());
-
-
-                       il.MarkLabel(gotoEnd);
-                       il.Emit (OpCodes.Ret);
-
-                       Expand = (EventHandler)dm.CreateDelegate (evtType, host);
-                       #endregion
-
-                       #region Items counting dyn method
-                       //dm is unbound, arg0 is instance of Item container to expand
-                       dm = new DynamicMethod ("dyn_count_" + fetchMethodName,
-                               typeof (bool), new Type[] {CompilerServices.TObject}, true);
-                       il = dm.GetILGenerator (256);
-
-                       //get the dataSource of the arg0
-                       il.Emit (OpCodes.Ldarg_0);
-                       il.Emit (OpCodes.Callvirt, CompilerServices.miGetDataSource);
-
-                       if (fetchMethodName != "self") {//special keyword self allows the use of recurent list<<<
-                               if (dataType == null) {
-                                       //dataTest was not = TypeOF, so we have to get the type of data
-                                       //dynamically and fetch
-
-                                       il.Emit (OpCodes.Ldstr, fetchMethodName);
-                                       il.Emit (OpCodes.Call, CompilerServices.miGetDataTypeAndFetch);
-                               }else
-                                       emitGetSubData(il, dataType);                   
-                       }
-                       
-                       il.Emit (OpCodes.Callvirt, CompilerServices.miGetColCount);
-                       il.Emit (OpCodes.Ldc_I4_0);
-                       il.Emit (OpCodes.Cgt);
-                       il.Emit (OpCodes.Ret);
-                       HasSubItems = (BooleanTestOnInstance)dm.CreateDelegate (typeof(BooleanTestOnInstance));
-                       #endregion
-               }
-               //data is on the stack
-               void emitGetSubData(ILGenerator il, Type dataType){
-                       MethodInfo miGetDatas = dataType.GetMethod (fetchMethodName, new Type[] {});
-                       if (miGetDatas == null)
-                               miGetDatas = CompilerServices.SearchExtMethod (dataType, fetchMethodName);
-
-                       if (miGetDatas == null) {//in last resort, search among properties
-                               PropertyInfo piDatas = dataType.GetProperty (fetchMethodName);
-                               if (piDatas == null) {
-                                       FieldInfo fiDatas = dataType.GetField (fetchMethodName);
-                                       if (fiDatas == null)//and among fields
-                                               throw new Exception ("Fetch data member not found in ItemTemplate: " + fetchMethodName);
-                                       il.Emit (OpCodes.Ldfld, fiDatas);
-                                       return;
-                               }
-                               miGetDatas = piDatas.GetGetMethod ();
-                               if (miGetDatas == null)
-                                       throw new Exception ("Read only property for fetching data in ItemTemplate: " + fetchMethodName);
-                       }
-
-                       il.Emit (OpCodes.Callvirt, miGetDatas);
-               }
-
-       
-       
-       }
-}
-
diff --git a/src/LayoutingEventArgs.cs b/src/LayoutingEventArgs.cs
deleted file mode 100644 (file)
index 9254aec..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-//
-// LayoutingEventArgs.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-
-namespace Crow
-{
-       public class LayoutingEventArgs: EventArgs
-       {
-               public LayoutingType  LayoutType;
-
-               public LayoutingEventArgs (LayoutingType  _layoutType) : base()
-               {
-                       LayoutType = _layoutType;
-               }
-       }
-}
-
diff --git a/src/LayoutingQueue.cs b/src/LayoutingQueue.cs
deleted file mode 100644 (file)
index 5f822bf..0000000
+++ /dev/null
@@ -1,110 +0,0 @@
-//
-//  LayoutingQueue.cs
-//
-//  Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-//  Copyright (c) 2015 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;
-using System.Linq;
-using System.Diagnostics;
-
-namespace Crow
-{
-       public class LayoutingQueue : LinkedList<LayoutingQueueItem>
-       {
-               public LayoutingQueue ()
-               {
-               }
-               public void Enqueue(LayoutingType _lt, ILayoutable _object)
-               {                       
-                       _object.RegisteredLQINodes.Add(this.AddLast (new LayoutingQueueItem (_lt, _object)));
-               }
-               LinkedListNode<LayoutingQueueItem> searchLqi(ILayoutable go, LayoutingType lt){
-                       for (int i = 0; i < go.RegisteredLQINodes.Count; i++) {
-                               if (go.RegisteredLQINodes [i].Value.LayoutType == lt)
-                                       return go.RegisteredLQINodes [i];
-                       }
-                       return null;
-               }
-               public void EnqueueAfterParentSizing (LayoutingType _lt, ILayoutable _object)
-               {
-                       LayoutingQueueItem lqi = new LayoutingQueueItem (_lt, _object);
-                       LinkedListNode<LayoutingQueueItem> parentLqi = searchLqi (_object.Parent, _lt);
-
-                       if (parentLqi == null)
-                               _object.RegisteredLQINodes.Add(this.AddLast (lqi));
-                       else
-                               _object.RegisteredLQINodes.Add(this.AddAfter (parentLqi, lqi));
-               }
-               public void EnqueueBeforeParentSizing (LayoutingType _lt, ILayoutable _object)
-               {
-                       LayoutingQueueItem lqi = new LayoutingQueueItem (_lt, _object);
-                       LinkedListNode<LayoutingQueueItem> parentLqi = searchLqi (_object.Parent, _lt);
-
-                       if (parentLqi == null)
-                               _object.RegisteredLQINodes.Add(this.AddLast (lqi));
-                       else
-                               _object.RegisteredLQINodes.Add(this.AddBefore (parentLqi, lqi));
-               }
-               public void EnqueueAfterThisAndParentSizing (LayoutingType _lt, ILayoutable _object)
-               {
-                       LayoutingQueueItem lqi = new LayoutingQueueItem (_lt, _object);
-                       LayoutingType sizing = LayoutingType.Width;
-
-                       if (_lt == LayoutingType.Y)
-                               sizing = LayoutingType.Height;
-
-                       LinkedListNode<LayoutingQueueItem> parentLqi = searchLqi (_object.Parent, sizing);
-                       LinkedListNode<LayoutingQueueItem> thisLqi = searchLqi (_object, sizing);
-
-                       if (parentLqi == null) {
-                               if (thisLqi != null)
-                                       _object.RegisteredLQINodes.Add(this.AddAfter (thisLqi, lqi));
-                               else
-                                       _object.RegisteredLQINodes.Add(this.AddLast (lqi));
-                       } else {
-                               if (thisLqi == null)
-                                       _object.RegisteredLQINodes.Add(this.AddAfter (parentLqi, lqi));
-                               else {
-                                       switch (sizing) {
-                                       case LayoutingType.Width:
-                                               if (_object.Parent.getBounds().Width<0)
-                                                       _object.RegisteredLQINodes.Add(this.AddAfter (parentLqi, lqi));
-                                               else
-                                                       _object.RegisteredLQINodes.Add(this.AddAfter (thisLqi, lqi));   
-                                               break;
-                                       case LayoutingType.Height:
-                                               if (_object.Parent.getBounds().Height<0)
-                                                       _object.RegisteredLQINodes.Add(this.AddAfter (parentLqi, lqi));
-                                               else
-                                                       _object.RegisteredLQINodes.Add(this.AddAfter (thisLqi, lqi));                                                   
-                                               break;
-                                       }
-                               }
-                       }
-               }
-               public LayoutingQueueItem Dequeue()
-               {
-                       LayoutingQueueItem tmp = this.First.Value;
-                       tmp.GraphicObject.RegisteredLQINodes.Remove(this.First);
-                       this.RemoveFirst ();
-                       return tmp;
-               }
-       }
-}
-
diff --git a/src/LayoutingQueueItem.cs b/src/LayoutingQueueItem.cs
deleted file mode 100644 (file)
index a905f25..0000000
+++ /dev/null
@@ -1,190 +0,0 @@
-//
-// LayoutingQueueItem.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-using System.Diagnostics;
-using System.Collections.Generic;
-using System.Linq;
-
-namespace Crow
-{
-       [Flags]
-       public enum LayoutingType : byte
-       {
-               None = 0x00,
-               X = 0x01,
-               Y = 0x02,
-               Positioning = 0x03,
-               Width = 0x04,
-               Height = 0x08,
-               Sizing = 0x0C,
-               ArrangeChildren = 0x10,
-               All = 0xFF
-       }
-
-       /// <summary>
-       /// Element class of the LayoutingQueue
-       /// </summary>
-       public struct LayoutingQueueItem
-       {
-               /// <summary> Instance of widget to be layouted</summary>
-               public ILayoutable Layoutable;
-               /// <summary> Bitfield containing the element of the layout to performs (x|y|width|height)</summary>
-               public LayoutingType LayoutType;
-               /// <summary> Unsuccessfull UpdateLayout and requeueing count </summary>
-               public int LayoutingTries, DiscardCount;
-
-               #if DEBUG_LOG
-               public enum Result : byte {
-                       Unknown,
-                       Register,
-                       Success,
-                       Requeued,
-                       Discarded,
-                       Deleted,
-               }
-               public Result result;
-               public GraphicObject graphicObject {
-                       get { return Layoutable as GraphicObject; }
-               }
-               public string Name {
-                       get { return graphicObject.Name; }
-               }
-               public string FullName {
-                       get { return graphicObject.ToString(); }
-               }
-               public Measure Width {
-                       get { return graphicObject.Width; }
-               }
-               public Measure Height {
-                       get { return graphicObject.Height; }
-               }
-               public Rectangle Slot, NewSlot;
-               #endif
-
-               #region CTOR
-               public LayoutingQueueItem (LayoutingType _layoutType, ILayoutable _graphicObject)
-               {                       
-                       LayoutType = _layoutType;
-                       Layoutable = _graphicObject;
-                       Layoutable.RegisteredLayoutings |= LayoutType;
-                       LayoutingTries = 0;
-                       DiscardCount = 0;
-                       #if DEBUG_LOG
-                       Slot = Rectangle.Empty;
-                       NewSlot = Rectangle.Empty;
-                       result = Result.Register;
-                       DebugLog.AddEvent (DbgEvtType.GORegisterLayouting, this);
-                       #endif
-               }
-               #endregion
-
-
-               public void ProcessLayouting()
-               {
-                       GraphicObject go = Layoutable as GraphicObject;
-//                     if (go == null) {
-//                             Debug.WriteLine ("ERROR: processLayouting on something else than a graphic object: " + this.ToString ());
-//                             return;
-//                     }
-
-                       go.parentRWLock.EnterReadLock ();
-
-                       if (go.Parent == null) {//TODO:improve this
-                               //cancel layouting for object without parent, maybe some were in queue when
-                               //removed from a listbox
-                               #if DEBUG_LOG
-                               DebugLog.AddEvent (DbgEvtType.GOProcessLayoutingWithNoParent, this);
-                               #endif
-                               go.parentRWLock.ExitReadLock ();
-                               return;
-                       }
-                       #if DEBUG_LOG
-                       DbgEvent dbgEvt = DebugLog.AddEvent (DbgEvtType.GOProcessLayouting, this);
-                       #endif
-                       LayoutingTries++;
-                       if (!Layoutable.UpdateLayout (LayoutType)) {
-                               #if DEBUG_LOG
-                               dbgEvt.end = DebugLog.chrono.ElapsedTicks;
-                               #endif
-                               if (LayoutingTries < Interface.MaxLayoutingTries) {
-                                       Layoutable.RegisteredLayoutings |= LayoutType;
-                                       (Layoutable as GraphicObject).IFace.LayoutingQueue.Enqueue (this);
-                                       #if DEBUG_LOG
-                                       result = Result.Requeued;
-                                       #endif
-                               } else if (DiscardCount < Interface.MaxDiscardCount) {
-                                       #if DEBUG_LOG
-                                       result = Result.Discarded;
-                                       #endif
-                                       LayoutingTries = 0;
-                                       DiscardCount++;
-                                       Layoutable.RegisteredLayoutings |= LayoutType;
-                                       (Layoutable as GraphicObject).IFace.DiscardQueue.Enqueue (this);
-                               }
-                               #if DEBUG_LOG
-                               else {
-                                       result = Result.Deleted;
-                               }
-                               #endif
-                       }
-                       #if DEBUG_LOG
-                       else{
-                               result = Result.Success;
-                       }
-                       dbgEvt.data = this;
-                       #endif
-                       go.parentRWLock.ExitReadLock ();
-               }
-
-               public static implicit operator GraphicObject(LayoutingQueueItem queueItem)
-               {
-                       return queueItem.Layoutable as GraphicObject;
-               }
-               public static implicit operator LayoutingType(LayoutingQueueItem lqi)
-               {
-                       return lqi.LayoutType;
-               }
-               public override string ToString ()
-               {
-                       #if DEBUG_LAYOUTING
-                       return string.Format ("{2};{3} {1}->{0}", LayoutType,Layoutable.ToString(),
-                               LayoutingTries,DiscardCount);
-                       #else
-                       return string.Format ("{2};{3} {1}->{0}", LayoutType,Layoutable.ToString(),
-                               LayoutingTries, DiscardCount);
-                       #endif
-               }
-       }
-       public class LQIList : List<LayoutingQueueItem>{
-//             #if DEBUG_LAYOUTING
-//             public List<LayoutingQueueItem> GetRootLQIs(){
-//                     return this.Where (lqi => lqi.wasTriggeredBy == null).ToList ();
-//             }
-//             #endif
-       }
-}
-
diff --git a/src/Measure.cs b/src/Measure.cs
deleted file mode 100644 (file)
index c40c670..0000000
+++ /dev/null
@@ -1,140 +0,0 @@
-//
-// Measure.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-
-namespace Crow
-{
-       /// <summary>
-       /// Measurement unit
-       /// </summary>
-       public enum Unit {Undefined, Pixel, Percent, Inherit }
-       /// <summary>
-       /// Measure class allow proportional sizes as well as stretched and fit on content.
-       /// </summary>
-       public struct Measure
-       {
-               /// <summary>
-               /// Integer value of the measure
-               /// </summary>
-               public int Value;
-               /// <summary>
-               /// Measurement unit
-               /// </summary>
-               public Unit Units;
-
-               /// <summary>
-               /// Fit on content, this special measure is defined as a fixed integer set to -1 pixel
-               /// </summary>
-               public static Measure Fit = new Measure(-1,Unit.Percent);
-               /// <summary>
-               /// Stretched into parent client area. This special measure is defined as a proportional cote
-               /// set to 100 Percents
-               /// </summary>
-               public static Measure Stretched = new Measure(100, Unit.Percent);
-               public static Measure Inherit = new Measure (0, Unit.Inherit);
-               #region CTOR
-               public Measure (int _value, Unit _units = Unit.Pixel)
-               {
-                       Value = _value;
-                       Units = _units;
-               }
-               #endregion
-
-               /// <summary>
-               /// True is size is fixed in pixels, this means not proportional, stretched nor fit.
-               /// </summary>
-               public bool IsFixed { get { return Units == Unit.Pixel; }}
-               public bool IsFit { get { return Value == -1 && Units == Unit.Percent; }}
-               public bool IsRelativeToParent { get { return Value >= 0 && Units == Unit.Percent; }}
-               #region Operators
-               public static implicit operator int(Measure m){
-                       return m.Value;
-               }
-               public static implicit operator Measure(int i){
-                       return new Measure(i);
-               }
-               public static implicit operator string(Measure m){
-                       return m.ToString();
-               }
-               public static implicit operator Measure(string s){
-                       return Measure.Parse(s);
-               }
-
-               public static bool operator ==(Measure m1, Measure m2){
-                       return m1.Value == m2.Value && m1.Units == m2.Units;
-               }
-               public static bool operator !=(Measure m1, Measure m2){
-                       return !(m1.Value == m2.Value && m1.Units == m2.Units);
-               }
-               #endregion
-
-               #region Object overrides
-               public override int GetHashCode ()
-               {
-                       return Value.GetHashCode ();
-               }
-               public override bool Equals (object obj)
-               {
-                       return (obj == null || obj.GetType() != typeof(Measure)) ?
-                               false :
-                               this == (Measure)obj;
-               }
-               public override string ToString ()
-               {
-                       return Units == Unit.Inherit ? "Inherit" :
-                               Value == -1 ? "Fit" :
-                               Units == Unit.Percent ? Value == 100 ? "Stretched" :
-                               Value.ToString () + "%" : Value.ToString ();
-               }
-               #endregion
-
-               public static Measure Parse(string s){
-                       if (string.IsNullOrEmpty (s))
-                               return default(Measure);
-
-                       string st = s.Trim ();
-                       int tmp = 0;
-
-                       if (string.Equals ("Inherit", st, StringComparison.Ordinal))
-                               return Measure.Inherit;
-                       else if (string.Equals ("Fit", st, StringComparison.Ordinal))
-                               return Measure.Fit;
-                       else if (string.Equals ("Stretched", s, StringComparison.Ordinal))
-                               return Measure.Stretched;                       
-                       else {
-                               if (st.EndsWith ("%", StringComparison.Ordinal)) {
-                                       if (int.TryParse (s.Substring(0, st.Length - 1), out tmp))
-                                               return new Measure (tmp, Unit.Percent);
-                               }else if (int.TryParse (s, out tmp))
-                                       return new Measure (tmp);
-                       }
-
-                       throw new Exception ("Error parsing Measure.");
-               }
-
-       }
-}
diff --git a/src/Mono.Cairo/Antialias.cs b/src/Mono.Cairo/Antialias.cs
deleted file mode 100644 (file)
index 30c71c0..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-//
-// Mono.Cairo.Antialias.cs
-//
-// Authors:
-//   Duncan Mak (duncan@ximian.com)
-//   Hisham Mardam Bey (hisham.mardambey@gmail.com)
-//
-// (C) Ximian, Inc. 2003
-// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System;
-
-namespace Cairo
-{
-       
-       public enum Antialias
-       {
-               Default,
-               None,
-               Grey,
-               Subpixel,
-       }
-}
diff --git a/src/Mono.Cairo/Cairo.cs b/src/Mono.Cairo/Cairo.cs
deleted file mode 100644 (file)
index c0a5f2a..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-//
-// Cairo.cs - a simplistic binding of the Cairo API to C#.
-//
-// Authors: Duncan Mak (duncan@ximian.com)
-//          Hisham Mardam Bey (hisham.mardambey@gmail.com)
-//          John Luke (john.luke@gmail.com)
-//          Alp Toker (alp@atoker.com)
-//
-// (C) Ximian, Inc. 2003
-// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
-// Copyright (C) 2005 John Luke
-// Copyright (C) 2006 Alp Toker
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System;
-using System.Runtime.InteropServices;
-
-namespace Cairo
-{
-       public static class CairoAPI {
-               static public int Version {
-                       get {
-                               return Cairo.NativeMethods.cairo_version ();
-                       }
-               }
-
-               static public string VersionString {
-                       get {
-                               IntPtr x = Cairo.NativeMethods.cairo_version_string ();
-                               return Marshal.PtrToStringAnsi (x);
-                       }
-               }
-       }
-}
diff --git a/src/Mono.Cairo/CairoDebug.cs b/src/Mono.Cairo/CairoDebug.cs
deleted file mode 100644 (file)
index d694bbb..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-//
-// CairoDebug.cs
-//
-// Author:
-//   Michael Hutchinson (mhutch@xamarin.com)
-//
-// Copyright (C) 2013 Xamarin Inc. (http://www.xamarin.com)
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System;
-
-namespace Cairo {
-
-       static class CairoDebug
-       {
-               static System.Collections.Generic.Dictionary<IntPtr,string> traces;
-
-               public static readonly bool Enabled;
-
-               static CairoDebug ()
-               {
-                       var dbg = Environment.GetEnvironmentVariable ("MONO_CAIRO_DEBUG_DISPOSE");
-                       if (dbg == null)
-                               return;
-                       Enabled = true;
-                       traces = new System.Collections.Generic.Dictionary<IntPtr,string> ();
-               }
-
-               public static void OnAllocated (IntPtr obj)
-               {
-                       if (!Enabled)
-                               throw new InvalidOperationException ();
-
-                       traces[obj] = Environment.StackTrace;
-               }
-
-               public static void OnDisposed<T> (IntPtr obj, bool disposing)
-               {
-                       if (disposing && !Enabled)
-                               throw new InvalidOperationException ();
-
-                       if (Environment.HasShutdownStarted)
-                               return;
-
-                       if (!disposing) {
-                               Console.Error.WriteLine ("{0} is leaking, programmer is missing a call to Dispose", typeof(T).FullName);
-                               if (Enabled) {
-                                       string val;
-                                       if (traces.TryGetValue (obj, out val)) {
-                                               Console.Error.WriteLine ("Allocated from:");
-                                               Console.Error.WriteLine (val);
-                                       }
-                               } else {
-                                       Console.Error.WriteLine ("Set MONO_CAIRO_DEBUG_DISPOSE to track allocation traces");
-                               }
-                       }
-
-                       if (Enabled)
-                               traces.Remove (obj);
-               }
-       }
-
-}
diff --git a/src/Mono.Cairo/Content.cs b/src/Mono.Cairo/Content.cs
deleted file mode 100644 (file)
index a45370f..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-//
-// Mono.Cairo.Content.cs
-//
-// Authors:
-//   Duncan Mak (duncan@ximian.com)
-//   Hisham Mardam Bey (hisham.mardambey@gmail.com)
-//
-// (C) Ximian, Inc. 2003
-// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System;
-
-namespace Cairo
-{
-       //[Flags]
-       
-       public enum Content
-       {
-               Color = 0x1000,
-               Alpha = 0x2000,
-               ColorAlpha = 0x3000,
-       }
-}
diff --git a/src/Mono.Cairo/Context.cs b/src/Mono.Cairo/Context.cs
deleted file mode 100644 (file)
index d428b42..0000000
+++ /dev/null
@@ -1,896 +0,0 @@
-//
-// Mono.Cairo.Context.cs
-//
-// Author:
-//   Duncan Mak (duncan@ximian.com)
-//   Miguel de Icaza (miguel@novell.com)
-//   Hisham Mardam Bey (hisham.mardambey@gmail.com)
-//   Alp Toker (alp@atoker.com)
-//
-// (C) Ximian Inc, 2003.
-// (C) Novell Inc, 2003.
-//
-// This is an OO wrapper API for the Cairo API.
-//
-// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System;
-using System.Runtime.InteropServices;
-using System.Text;
-using Color = Crow.Color;
-
-namespace Cairo {      
-
-       [Obsolete ("Renamed Cairo.Context per suggestion from cairo binding guidelines.")]
-       public class Graphics : Context {
-               public Graphics (IntPtr state) : base (state) {}
-               public Graphics (Surface surface) : base (surface) {}
-       }
-
-       public class Context : IDisposable
-       {
-               IntPtr handle = IntPtr.Zero;
-
-               static int native_glyph_size, c_compiler_long_size;
-
-               static Context ()
-               {
-                       //
-                       // This is used to determine what kind of structure
-                       // we should use to marshal Glyphs, as the public
-                       // definition in Cairo uses `long', which can be
-                       // 32 bits or 64 bits depending on the platform.
-                       //
-                       // We assume that sizeof(long) == sizeof(void*)
-                       // except in the case of Win64 where sizeof(long)
-                       // is 32 bits
-                       //
-                       int ptr_size = Marshal.SizeOf (typeof (IntPtr));
-
-                       /*PlatformID platform = Environment.OSVersion.Platform;
-            RuntimeInformation.IsOSPlatform(OSPlatform.Linux); 
-            RuntimeInformation.OSArchitecture.HasFlag(Architecture.);
-                       if (platform == PlatformID.Win32NT ||
-                           platform == PlatformID.Win32S ||
-                           platform == PlatformID.Win32Windows ||
-                           platform == PlatformID.WinCE ||
-                           ptr_size == 4){
-                               c_compiler_long_size = 4;
-                               native_glyph_size = Marshal.SizeOf (typeof (NativeGlyph_4byte_longs));
-                       } else {*/
-                               c_compiler_long_size = 8;
-                               native_glyph_size = Marshal.SizeOf (typeof (Glyph));
-                       //}
-               }
-
-               public Context (Surface surface) : this (NativeMethods.cairo_create (surface.Handle), true)
-               {
-               }
-
-
-               public Context (IntPtr handle, bool owner)
-               {
-                       this.handle = handle;
-                       if (!owner)
-                               NativeMethods.cairo_reference (handle);
-                       if (CairoDebug.Enabled)
-                               CairoDebug.OnAllocated (handle);
-               }
-
-               [Obsolete]
-               public Context (IntPtr state) : this (state, true)
-               {
-               }
-
-               ~Context ()
-               {
-                       Dispose (false);
-               }
-
-               public void Dispose ()
-               {
-                       Dispose (true);
-                       GC.SuppressFinalize (this);
-               }
-
-               protected virtual void Dispose (bool disposing)
-               {
-                       if (!disposing || CairoDebug.Enabled)
-                               CairoDebug.OnDisposed<Context> (handle, disposing);
-
-                       if (!disposing|| handle == IntPtr.Zero)
-                               return;
-
-                       NativeMethods.cairo_destroy (handle);
-                       handle = IntPtr.Zero;
-
-               }
-
-               public void Save ()
-               {
-                       NativeMethods.cairo_save (handle);
-               }
-
-               public void Restore ()
-               {
-                       NativeMethods.cairo_restore (handle);
-               }
-
-               public Antialias Antialias {
-                       get { return NativeMethods.cairo_get_antialias (handle); }
-                       set { NativeMethods.cairo_set_antialias (handle, value); }
-               }
-
-               public Cairo.Status Status {
-                       get {
-                               return NativeMethods.cairo_status (handle);
-                       }
-               }
-
-               public IntPtr Handle {
-                       get {
-                               return handle;
-                       }
-               }
-
-               public Operator Operator {
-                       set {
-                               NativeMethods.cairo_set_operator (handle, value);
-                       }
-
-                       get {
-                               return NativeMethods.cairo_get_operator (handle);
-                       }
-               }
-
-               public double Tolerance {
-                       get {
-                               return NativeMethods.cairo_get_tolerance (handle);
-                       }
-
-                       set {
-                               NativeMethods.cairo_set_tolerance (handle, value);
-                       }
-               }
-
-               public Cairo.FillRule FillRule {
-                       set {
-                               NativeMethods.cairo_set_fill_rule (handle, value);
-                       }
-
-                       get {
-                               return NativeMethods.cairo_get_fill_rule (handle);
-                       }
-               }
-
-               public double LineWidth {
-                       set {
-                               NativeMethods.cairo_set_line_width (handle, value);
-                       }
-
-                       get {
-                               return NativeMethods.cairo_get_line_width (handle);
-                       }
-               }
-
-               public Cairo.LineCap LineCap {
-                       set {
-                               NativeMethods.cairo_set_line_cap (handle, value);
-                       }
-
-                       get {
-                               return NativeMethods.cairo_get_line_cap (handle);
-                       }
-               }
-
-               public Cairo.LineJoin LineJoin {
-                       set {
-                               NativeMethods.cairo_set_line_join (handle, value);
-                       }
-
-                       get {
-                               return NativeMethods.cairo_get_line_join (handle);
-                       }
-               }
-
-               public void SetDash (double [] dashes, double offset)
-               {
-                       NativeMethods.cairo_set_dash (handle, dashes, dashes.Length, offset);
-               }
-
-               [Obsolete("Use GetSource/SetSource")]
-               public Pattern Pattern {
-                       set {
-                               SetSource (value);
-                       }
-                       get {
-                               return GetSource ();
-                       }
-               }
-
-               //This is obsolete because it wasn't obvious it needed to be disposed
-               [Obsolete("Use GetSource/SetSource")]
-               public Pattern Source {
-                       set {
-                               SetSource (value);
-                       }
-                       get {
-                               return GetSource ();
-                       }
-               }
-
-               public void SetSource (Pattern source)
-               {
-                       NativeMethods.cairo_set_source (handle, source.Handle);
-               }
-
-               public Pattern GetSource ()
-               {
-                       var ptr = NativeMethods.cairo_get_source (handle);
-                       return Cairo.Pattern.Lookup (ptr, false);
-               }
-
-               public double MiterLimit {
-                       set {
-                               NativeMethods.cairo_set_miter_limit (handle, value);
-                       }
-
-                       get {
-                               return NativeMethods.cairo_get_miter_limit (handle);
-                       }
-               }
-
-               public PointD CurrentPoint {
-                       get {
-                               double x, y;
-                               NativeMethods.cairo_get_current_point (handle, out x, out y);
-                               return new PointD (x, y);
-                       }
-               }
-
-               public bool HasCurrentPoint {
-                       get {
-                               return NativeMethods.cairo_has_current_point (handle);
-                       }
-               }
-
-               [Obsolete ("Use GetTarget/SetTarget")]
-               public Cairo.Surface Target {
-                       set {
-                               if (handle != IntPtr.Zero)
-                                       NativeMethods.cairo_destroy (handle);
-
-                               handle = NativeMethods.cairo_create (value.Handle);
-                       }
-
-                       get {
-                               return GetTarget ();
-                       }
-               }
-
-               public Surface GetTarget ()
-               {
-                       return Surface.Lookup (NativeMethods.cairo_get_target (handle), false);
-               }
-
-               public void SetTarget (Surface target)
-               {
-                       if (handle != IntPtr.Zero)
-                               NativeMethods.cairo_destroy (handle);
-                       handle = NativeMethods.cairo_create (target.Handle);
-               }
-
-               [Obsolete("Use GetScaledFont/SetScaledFont")]
-               public ScaledFont ScaledFont {
-                       set {
-                               SetScaledFont (value);
-                       }
-
-                       get {
-                               return GetScaledFont ();
-                       }
-               }
-
-               public ScaledFont GetScaledFont ()
-               {
-                       return new ScaledFont (NativeMethods.cairo_get_scaled_font (handle), false);
-               }
-
-               public void SetScaledFont (ScaledFont font)
-               {
-                       NativeMethods.cairo_set_scaled_font (handle, font.Handle);
-               }
-
-               public uint ReferenceCount {
-                       get { return NativeMethods.cairo_get_reference_count (handle); }
-               }
-
-               public void SetSourceColor (Color color)
-               {
-                       NativeMethods.cairo_set_source_rgba (handle, color.R, color.G, color.B, color.A);
-               }
-
-               public void SetSourceRGB (double r, double g, double b)
-               {
-                       NativeMethods.cairo_set_source_rgb (handle, r, g, b);
-               }
-
-               public void SetSourceRGBA (double r, double g, double b, double a)
-               {
-                       NativeMethods.cairo_set_source_rgba (handle, r, g, b, a);
-               }
-
-               //[Obsolete ("Use SetSource method (with double parameters)")]
-               public void SetSourceSurface (Surface source, int x, int y)
-               {
-                       NativeMethods.cairo_set_source_surface (handle, source.Handle, x, y);
-               }
-
-               public void SetSource (Surface source, double x, double y)
-               {
-                       NativeMethods.cairo_set_source_surface (handle, source.Handle, x, y);
-               }
-
-               public void SetSource (Surface source)
-               {
-                       NativeMethods.cairo_set_source_surface (handle, source.Handle, 0, 0);
-               }
-
-#region Path methods
-
-               public void NewPath ()
-               {
-                       NativeMethods.cairo_new_path (handle);
-               }
-
-               public void NewSubPath ()
-               {
-                       NativeMethods.cairo_new_sub_path (handle);
-               }
-
-               public void MoveTo (PointD p)
-               {
-                       MoveTo (p.X, p.Y);
-               }
-
-               public void MoveTo (double x, double y)
-               {
-                       NativeMethods.cairo_move_to (handle, x, y);
-               }
-
-               public void LineTo (PointD p)
-               {
-                       LineTo (p.X, p.Y);
-               }
-
-               public void LineTo (double x, double y)
-               {
-                       NativeMethods.cairo_line_to (handle, x, y);
-               }
-
-               public void CurveTo (PointD p1, PointD p2, PointD p3)
-               {
-                       CurveTo (p1.X, p1.Y, p2.X, p2.Y, p3.X, p3.Y);
-               }
-
-               public void CurveTo (double x1, double y1, double x2, double y2, double x3, double y3)
-               {
-                       NativeMethods.cairo_curve_to (handle, x1, y1, x2, y2, x3, y3);
-               }
-
-               public void RelMoveTo (Distance d)
-               {
-                       RelMoveTo (d.Dx, d.Dy);
-               }
-
-               public void RelMoveTo (double dx, double dy)
-               {
-                       NativeMethods.cairo_rel_move_to (handle, dx, dy);
-               }
-
-               public void RelLineTo (Distance d)
-               {
-                       RelLineTo (d.Dx, d.Dy);
-               }
-
-               public void RelLineTo (double dx, double dy)
-               {
-                       NativeMethods.cairo_rel_line_to (handle, dx, dy);
-               }
-
-               public void RelCurveTo (Distance d1, Distance d2, Distance d3)
-               {
-                       RelCurveTo (d1.Dx, d1.Dy, d2.Dx, d2.Dy, d3.Dx, d3.Dy);
-               }
-
-               public void RelCurveTo (double dx1, double dy1, double dx2, double dy2, double dx3, double dy3)
-               {
-                       NativeMethods.cairo_rel_curve_to (handle, dx1, dy1, dx2, dy2, dx3, dy3);
-               }
-
-               public void Arc (double xc, double yc, double radius, double angle1, double angle2)
-               {
-                       NativeMethods.cairo_arc (handle, xc, yc, radius, angle1, angle2);
-               }
-
-               public void ArcNegative (double xc, double yc, double radius, double angle1, double angle2)
-               {
-                       NativeMethods.cairo_arc_negative (handle, xc, yc, radius, angle1, angle2);
-               }
-
-               public void Rectangle (Crow.Rectangle rectangle)
-               {
-                       Rectangle (rectangle.X, rectangle.Y, rectangle.Width, rectangle.Height);
-               }
-
-               public void Rectangle (PointD p, double width, double height)
-               {
-                       Rectangle (p.X, p.Y, width, height);
-               }
-
-               public void Rectangle (double x, double y, double width, double height)
-               {
-                       NativeMethods.cairo_rectangle (handle, x, y, width, height);
-               }
-
-               public void ClosePath ()
-               {
-                       NativeMethods.cairo_close_path (handle);
-               }
-
-               public Path CopyPath ()
-               {
-                       return new Path (NativeMethods.cairo_copy_path (handle));
-               }
-
-               public Path CopyPathFlat ()
-               {
-                       return new Path (NativeMethods.cairo_copy_path_flat (handle));
-               }
-
-               public void AppendPath (Path path)
-               {
-                       NativeMethods.cairo_append_path (handle, path.Handle);
-               }
-
-#endregion
-
-#region Painting Methods
-               public void Paint ()
-               {
-                       NativeMethods.cairo_paint (handle);
-               }
-
-               public void PaintWithAlpha (double alpha)
-               {
-                       NativeMethods.cairo_paint_with_alpha (handle, alpha);
-               }
-
-               public void Mask (Pattern pattern)
-               {
-                       NativeMethods.cairo_mask (handle, pattern.Handle);
-               }
-
-               public void MaskSurface (Surface surface, double surface_x, double surface_y)
-               {
-                       NativeMethods.cairo_mask_surface (handle, surface.Handle, surface_x, surface_y);
-               }
-
-               public void Stroke ()
-               {
-                       NativeMethods.cairo_stroke (handle);
-               }
-
-               public void StrokePreserve ()
-               {
-                       NativeMethods.cairo_stroke_preserve (handle);
-               }
-
-               public Crow.Rectangle StrokeExtents ()
-               {
-                       double x1, y1, x2, y2;
-                       NativeMethods.cairo_stroke_extents (handle, out x1, out y1, out x2, out y2);
-                       return new Crow.Rectangle ((int)x1, (int)y1, (int)(x2 - x1), (int)(y2 - y1));
-               }
-
-               public void Fill ()
-               {
-                       NativeMethods.cairo_fill (handle);
-               }
-
-               public Crow.Rectangle FillExtents ()
-               {
-                       double x1, y1, x2, y2;
-                       NativeMethods.cairo_fill_extents (handle, out x1, out y1, out x2, out y2);
-                       return new Crow.Rectangle ((int)x1, (int)y1, (int)(x2 - x1), (int)(y2 - y1));
-               }
-
-               public void FillPreserve ()
-               {
-                       NativeMethods.cairo_fill_preserve (handle);
-               }
-
-#endregion
-
-               public void Clip ()
-               {
-                       NativeMethods.cairo_clip (handle);
-               }
-
-               public void ClipPreserve ()
-               {
-                       NativeMethods.cairo_clip_preserve (handle);
-               }
-
-               public void ResetClip ()
-               {
-                       NativeMethods.cairo_reset_clip (handle);
-               }
-
-               public bool InClip (double x, double y)
-               {
-                       return NativeMethods.cairo_in_clip (handle, x, y);
-               }
-               public RectangleList GetClipRectangles (){
-                       return (RectangleList)Marshal.PtrToStructure (NativeMethods.cairo_copy_clip_rectangle_list (handle), typeof(RectangleList));
-               }
-               public void ClipExtendRectangle (){
-                       double x1, y1, x2, y2;
-                       NativeMethods.cairo_clip_extents (handle, out x1, out y1, out x2, out y2);
-                       NativeMethods.cairo_rectangle (handle, x1, y1, x2 - x1, y2 - y1); 
-               }
-               public bool InStroke (double x, double y)
-               {
-                       return NativeMethods.cairo_in_stroke (handle, x, y);
-               }
-
-               public bool InFill (double x, double y)
-               {
-                       return NativeMethods.cairo_in_fill (handle, x, y);
-               }
-
-               public Pattern PopGroup ()
-               {
-                       return Pattern.Lookup (NativeMethods.cairo_pop_group (handle), true);
-               }
-
-               public void PopGroupToSource ()
-               {
-                       NativeMethods.cairo_pop_group_to_source (handle);
-               }
-
-               public void PushGroup ()
-               {
-                       NativeMethods.cairo_push_group (handle);
-               }
-
-               public void PushGroup (Content content)
-               {
-                       NativeMethods.cairo_push_group_with_content (handle, content);
-               }
-
-               [Obsolete ("Use GetGroupTarget()")]
-               public Surface GroupTarget {
-                       get {
-                               return GetGroupTarget ();
-                       }
-               }
-
-               public Surface GetGroupTarget ()
-               {
-                       IntPtr surface = NativeMethods.cairo_get_group_target (handle);
-                       return Surface.Lookup (surface, false);
-               }
-
-               public void Rotate (double angle)
-               {
-                       NativeMethods.cairo_rotate (handle, angle);
-               }
-
-               public void Scale (double sx, double sy)
-               {
-                       NativeMethods.cairo_scale (handle, sx, sy);
-               }
-
-               public void Translate (double tx, double ty)
-               {
-                       NativeMethods.cairo_translate (handle, tx, ty);
-               }
-
-               public void Transform (Matrix m)
-               {
-                       NativeMethods.cairo_transform (handle, m);
-               }
-
-               [Obsolete("Use UserToDevice instead")]
-               public void TransformPoint (ref double x, ref double y)
-               {
-                       NativeMethods.cairo_user_to_device (handle, ref x, ref y);
-               }
-
-               [Obsolete("Use UserToDeviceDistance instead")]
-               public void TransformDistance (ref double dx, ref double dy)
-               {
-                       NativeMethods.cairo_user_to_device_distance (handle, ref dx, ref dy);
-               }
-
-               [Obsolete("Use InverseTransformPoint instead")]
-               public void InverseTransformPoint (ref double x, ref double y)
-               {
-                       NativeMethods.cairo_device_to_user (handle, ref x, ref y);
-               }
-
-               [Obsolete("Use DeviceToUserDistance instead")]
-               public void InverseTransformDistance (ref double dx, ref double dy)
-               {
-                       NativeMethods.cairo_device_to_user_distance (handle, ref dx, ref dy);
-               }
-
-               public void UserToDevice (ref double x, ref double y)
-               {
-                       NativeMethods.cairo_user_to_device (handle, ref x, ref y);
-               }
-
-               public void UserToDeviceDistance (ref double dx, ref double dy)
-               {
-                       NativeMethods.cairo_user_to_device_distance (handle, ref dx, ref dy);
-               }
-
-               public void DeviceToUser (ref double x, ref double y)
-               {
-                       NativeMethods.cairo_device_to_user (handle, ref x, ref y);
-               }
-
-               public void DeviceToUserDistance (ref double dx, ref double dy)
-               {
-                       NativeMethods.cairo_device_to_user_distance (handle, ref dx, ref dy);
-               }
-
-               public Matrix Matrix {
-                       set {
-                               NativeMethods.cairo_set_matrix (handle, value);
-                       }
-
-                       get {
-                               Matrix m = new Matrix();
-                               NativeMethods.cairo_get_matrix (handle, m);
-                               return m;
-                       }
-               }
-
-               public void SetFontSize (double scale)
-               {
-                       NativeMethods.cairo_set_font_size (handle, scale);
-               }
-
-               public void IdentityMatrix ()
-               {
-                       NativeMethods.cairo_identity_matrix (handle);
-               }
-
-               [Obsolete ("Use SetFontSize() instead.")]
-               public void FontSetSize (double scale)
-               {
-                       SetFontSize (scale);
-               }
-
-               [Obsolete ("Use SetFontSize() instead.")]
-               public double FontSize {
-                       set { SetFontSize (value); }
-               }
-
-               public Matrix FontMatrix {
-                       get {
-                               Matrix m;
-                               NativeMethods.cairo_get_font_matrix (handle, out m);
-                               return m;
-                       }
-                       set { NativeMethods.cairo_set_font_matrix (handle, value); }
-               }
-
-               public FontOptions FontOptions {
-                       get {
-                               FontOptions options = new FontOptions ();
-                               NativeMethods.cairo_get_font_options (handle, options.Handle);
-                               return options;
-                       }
-                       set { NativeMethods.cairo_set_font_options (handle, value.Handle); }
-               }
-
-               [StructLayout(LayoutKind.Sequential)]
-               internal struct NativeGlyph_4byte_longs {
-                       public int index;
-                       public double x;
-                       public double y;
-
-                       public NativeGlyph_4byte_longs (Glyph source)
-                       {
-                               index = (int) source.index;
-                               x = source.x;
-                               y = source.y;
-                       }
-               }
-
-               static internal IntPtr FromGlyphToUnManagedMemory(Glyph [] glyphs)
-               {
-                       IntPtr dest = Marshal.AllocHGlobal (native_glyph_size * glyphs.Length);
-                       long pos = dest.ToInt64();
-
-                       if (c_compiler_long_size == 8){
-                               foreach (Glyph g in glyphs){
-                                       Marshal.StructureToPtr (g, (IntPtr)pos, false);
-                                       pos += native_glyph_size;
-                               }
-                       } else {
-                               foreach (Glyph g in glyphs){
-                                       NativeGlyph_4byte_longs n = new NativeGlyph_4byte_longs (g);
-
-                                       Marshal.StructureToPtr (n, (IntPtr)pos, false);
-                                       pos += native_glyph_size;
-                               }
-                       }
-
-                       return dest;
-               }
-
-               public void ShowGlyphs (Glyph[] glyphs)
-               {
-                       IntPtr ptr;
-
-                       ptr = FromGlyphToUnManagedMemory (glyphs);
-
-                       NativeMethods.cairo_show_glyphs (handle, ptr, glyphs.Length);
-
-                       Marshal.FreeHGlobal (ptr);
-               }
-
-               [Obsolete("The matrix argument was never used, use ShowGlyphs(Glyphs []) instead")]
-               public void ShowGlyphs (Matrix matrix, Glyph[] glyphs)
-               {
-                       ShowGlyphs (glyphs);
-               }
-
-               [Obsolete("The matrix argument was never used, use GlyphPath(Glyphs []) instead")]
-               public void GlyphPath (Matrix matrix, Glyph[] glyphs)
-               {
-                       GlyphPath (glyphs);
-               }
-
-               public void GlyphPath (Glyph[] glyphs)
-               {
-                       IntPtr ptr;
-
-                       ptr = FromGlyphToUnManagedMemory (glyphs);
-
-                       NativeMethods.cairo_glyph_path (handle, ptr, glyphs.Length);
-
-                       Marshal.FreeHGlobal (ptr);
-
-               }
-
-               public FontExtents FontExtents {
-                       get {
-                               FontExtents f_extents;
-                               NativeMethods.cairo_font_extents (handle, out f_extents);
-                               return f_extents;
-                       }
-               }
-
-               public void CopyPage ()
-               {
-                       NativeMethods.cairo_copy_page (handle);
-               }
-
-               [Obsolete ("Use SelectFontFace() instead.")]
-               public void FontFace (string family, FontSlant slant, FontWeight weight)
-               {
-                       SelectFontFace (family, slant, weight);
-               }
-
-               [Obsolete("Use GetFontFace/SetFontFace")]
-               public FontFace ContextFontFace {
-                       get {
-                               return GetContextFontFace ();
-                       }
-                       set {
-                               SetContextFontFace (value);
-                       }
-               }
-
-               public FontFace GetContextFontFace ()
-               {
-                       return Cairo.FontFace.Lookup (NativeMethods.cairo_get_font_face (handle), false);
-               }
-
-               public void SetContextFontFace (FontFace value)
-               {
-                       NativeMethods.cairo_set_font_face (handle, value == null ? IntPtr.Zero : value.Handle);
-               }
-
-               public void SelectFontFace (string family, FontSlant slant, FontWeight weight)
-               {
-                       NativeMethods.cairo_select_font_face (handle, family, slant, weight);
-               }
-
-               public void ShowPage ()
-               {
-                       NativeMethods.cairo_show_page (handle);
-               }
-
-               private static byte[] TerminateUtf8(byte[] utf8)
-               {
-                       if (utf8.Length > 0 && utf8[utf8.Length - 1] == 0)
-                               return utf8;
-                       var termedArray = new byte[utf8.Length + 1];
-                       Array.Copy(utf8, termedArray, utf8.Length);
-                       termedArray[utf8.Length] = 0;
-                       return termedArray;
-               }
-
-               private static byte[] TerminateUtf8(string s)
-               {
-                       // compute the byte count including the trailing \0
-                       var byteCount = Encoding.UTF8.GetMaxByteCount(s.Length + 1);
-                       var bytes = new byte[byteCount];
-                       Encoding.UTF8.GetBytes(s, 0, s.Length, bytes, 0);
-                       return bytes;
-               }
-
-               public void ShowText(string str)
-               {
-                       NativeMethods.cairo_show_text (handle, str);
-               }
-
-
-               public void TextPath(string str)
-               {
-                       NativeMethods.cairo_text_path (handle, TerminateUtf8(str));
-               }
-
-               public void TextPath(byte[] utf8)
-               {
-                       NativeMethods.cairo_text_path (handle, TerminateUtf8(utf8));
-               }
-
-               public TextExtents TextExtents(string s)
-               {
-                       TextExtents extents;
-                       NativeMethods.cairo_text_extents (handle, s, out extents);
-                       return extents;
-               }
-
-
-               public TextExtents GlyphExtents (Glyph[] glyphs)
-               {
-                       IntPtr ptr = FromGlyphToUnManagedMemory (glyphs);
-
-                       TextExtents extents;
-
-                       NativeMethods.cairo_glyph_extents (handle, ptr, glyphs.Length, out extents);
-
-                       Marshal.FreeHGlobal (ptr);
-
-                       return extents;
-               }
-       }
-}
diff --git a/src/Mono.Cairo/DRMDevice.cs b/src/Mono.Cairo/DRMDevice.cs
deleted file mode 100644 (file)
index a03195f..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-//
-// Mono.Cairo.Device.cs
-//
-// Authors:
-//                     JP Bruyère (jp_bruyere@hotmail.com)
-//
-// This is an OO wrapper API for the Cairo API
-//
-// Copyright (C) 2016 JP Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-using System;
-
-namespace Cairo
-{
-       public class DRMDevice : Device
-       {
-               public DRMDevice () : base (NativeMethods.cairo_drm_device_default (), true)
-               {
-               }
-               public DRMDevice (int fd) : base (NativeMethods.cairo_drm_device_get_for_fd (fd), true)
-               {
-               }
-               public DRMDevice (IntPtr udev_device) : base (NativeMethods.cairo_drm_device_get (udev_device), true)
-               {
-               }
-
-               public int FileDescriptor {
-                       get { return NativeMethods.cairo_drm_device_get_fd (Handle); }
-               }
-
-               public void DeviceThrottle () { NativeMethods.cairo_drm_device_throttle (Handle);}
-       }
-}
-
diff --git a/src/Mono.Cairo/DRMSurface.cs b/src/Mono.Cairo/DRMSurface.cs
deleted file mode 100644 (file)
index 248541c..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-//
-// Mono.Cairo.GLSurface.cs
-//
-// Authors:
-//                     JP Bruyère (jp_bruyere@hotmail.com)
-//
-// This is an OO wrapper API for the Cairo API
-//
-// Copyright (C) 2016 JP Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System;
-
-namespace Cairo {
-
-       public class DRMSurface : Surface
-       {
-               
-               public DRMSurface (IntPtr ptr, bool own) : base (ptr, own)
-               {}
-
-               public DRMSurface (DRMDevice device, Format format, int width, int height)
-                       : base (NativeMethods.cairo_drm_surface_create (device.Handle, format, width, height), true)
-               {}
-
-               public DRMSurface (DRMDevice device, uint name, Format format, int width, int height, int stride)
-                       : base (NativeMethods.cairo_drm_surface_create_for_name (device.Handle, name, format, width, height, stride), true)
-               {}
-
-               public DRMSurface (DRMDevice device, IntPtr imageSurface)
-                       : base (NativeMethods.cairo_drm_surface_create_from_cacheable_image (device.Handle, imageSurface), true)
-               {}
-       }
-}
diff --git a/src/Mono.Cairo/Device.cs b/src/Mono.Cairo/Device.cs
deleted file mode 100644 (file)
index a5452f9..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-//
-// Mono.Cairo.Device.cs
-//
-// Authors:
-//                     JP Bruyère (jp_bruyere@hotmail.com)
-//
-// This is an OO wrapper API for the Cairo API
-//
-// Copyright (C) 2016 JP Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-using System;
-
-namespace Cairo
-{
-       public class Device : IDisposable
-       {
-               IntPtr handle = IntPtr.Zero;
-
-               protected Device()
-               {
-               }
-
-               protected Device (IntPtr ptr) : this (ptr, true)
-               {
-               }
-
-               protected Device (IntPtr handle, bool owner)
-               {
-                       this.handle = handle;
-                       if (!owner)
-                               NativeMethods.cairo_device_reference (handle);
-                       if (CairoDebug.Enabled)
-                               CairoDebug.OnAllocated (handle);
-               }
-
-               ~Device ()
-               {
-                       Dispose (false);
-               }
-
-               public IntPtr Handle {
-                       get {
-                               return handle;
-                       }
-               }
-               public string Status {
-                       get {
-                return ""; //System.Runtime.InteropServices.Marshal.PtrToStringAuto(NativeMethods.cairo_status_to_string (NativeMethods.cairo_device_status (handle)));
-                       }
-               }
-               public void SetThreadAware (bool value){
-                       NativeMethods.cairo_gl_device_set_thread_aware (handle, value ? 1 : 0);
-               }
-               public Status Acquire()
-               {
-                       return NativeMethods.cairo_device_acquire (handle);
-               }
-               public void Release()
-               {
-                       NativeMethods.cairo_device_release (handle);
-               }
-
-               public void Dispose ()
-               {
-                       Dispose (true);
-                       GC.SuppressFinalize (this);
-               }
-
-               protected virtual void Dispose (bool disposing)
-               {
-                       if (!disposing || CairoDebug.Enabled)
-                               CairoDebug.OnDisposed<Device> (handle, disposing);
-
-                       if (!disposing || handle == IntPtr.Zero)
-                               return;
-
-                       NativeMethods.cairo_device_destroy (handle);
-                       handle = IntPtr.Zero;
-               }
-       }
-}
-
diff --git a/src/Mono.Cairo/DirectFBSurface.cs b/src/Mono.Cairo/DirectFBSurface.cs
deleted file mode 100644 (file)
index afa57b7..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-//
-// Mono.Cairo.DirectFBSurface.cs
-//
-// Authors:
-//    Alp Toker
-//
-// (C) Alp Toker, 2006.
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System;
-
-namespace Cairo {
-       public class DirectFBSurface : Surface
-       {
-               internal DirectFBSurface (IntPtr handle, bool owns) : base (handle, owns)
-               {
-               }
-
-               public DirectFBSurface (IntPtr dfb, IntPtr dfb_surface)
-                       : base (NativeMethods.cairo_directfb_surface_create (dfb, dfb_surface), true)
-               {
-               }
-       }
-}
diff --git a/src/Mono.Cairo/Distance.cs b/src/Mono.Cairo/Distance.cs
deleted file mode 100644 (file)
index 7cba372..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-//
-// Mono.Cairo.Context.cs
-//
-// Author:
-//   Duncan Mak (duncan@ximian.com)
-//   Miguel de Icaza (miguel@novell.com)
-//   Hisham Mardam Bey (hisham.mardambey@gmail.com)
-//   Alp Toker (alp@atoker.com)
-//
-// (C) Ximian Inc, 2003.
-// (C) Novell Inc, 2003.
-//
-// This is an OO wrapper API for the Cairo API.
-//
-// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-namespace Cairo {
-
-       public struct Distance
-       {
-               public Distance (double dx, double dy)
-               {
-                       this.dx = dx;
-                       this.dy = dy;
-               }
-
-               double dx, dy;
-               public double Dx {
-                       get { return dx; }
-                       set { dx = value; }
-               }
-
-               public double Dy {
-                       get { return dy; }
-                       set { dy = value; }
-               }
-       }
-}
diff --git a/src/Mono.Cairo/EGLDevice.cs b/src/Mono.Cairo/EGLDevice.cs
deleted file mode 100644 (file)
index 45c988a..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-//
-// Mono.Cairo.Device.cs
-//
-// Authors:
-//                     JP Bruyère (jp_bruyere@hotmail.com)
-//
-// This is an OO wrapper API for the Cairo API
-//
-// Copyright (C) 2016 JP Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-using System;
-
-namespace Cairo
-{
-       public class EGLDevice : Device
-       {
-               public EGLDevice (IntPtr dpy, IntPtr gl_ctx) : base (NativeMethods.cairo_egl_device_create (dpy, gl_ctx), true)
-               {
-               }
-       }
-}
-
diff --git a/src/Mono.Cairo/Extend.cs b/src/Mono.Cairo/Extend.cs
deleted file mode 100644 (file)
index 1135c2f..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-//
-// Mono.Cairo.Extend.cs
-//
-// Authors:
-//   Duncan Mak (duncan@ximian.com)
-//   Hisham Mardam Bey (hisham.mardambey@gmail.com)
-//   John Luke (john.luke@gmail.com)
-//
-// (C) Ximian, Inc. 2003
-// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
-// Copyright (C) 2005 John Luke
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System;
-
-namespace Cairo
-{
-       
-       public enum Extend
-       {
-               None,
-               Repeat,
-               Reflect,
-               Pad,
-       }
-}
diff --git a/src/Mono.Cairo/FillRule.cs b/src/Mono.Cairo/FillRule.cs
deleted file mode 100644 (file)
index 24cbfba..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-//
-// Mono.Cairo.FillRule.cs
-//
-// Authors:
-//   Duncan Mak (duncan@ximian.com)
-//   Hisham Mardam Bey (hisham.mardambey@gmail.com)
-//
-// (C) Ximian, Inc. 2003
-// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System;
-
-namespace Cairo
-{
-       
-       public enum FillRule
-       {
-               Winding,
-               EvenOdd
-       }
-}
diff --git a/src/Mono.Cairo/Filter.cs b/src/Mono.Cairo/Filter.cs
deleted file mode 100644 (file)
index 2355fbb..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-//
-// Mono.Cairo.Filter.cs
-//
-// Authors:
-//   Duncan Mak (duncan@ximian.com)
-//   Hisham Mardam Bey (hisham.mardambey@gmail.com)
-//
-// (C) Ximian, Inc. 2003
-// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System;
-
-namespace Cairo
-{
-       
-       public enum Filter
-       {
-               Fast,
-               Good,
-               Best,
-               Nearest,
-               Bilinear,
-               Gaussian,
-       }
-}
diff --git a/src/Mono.Cairo/FontExtents.cs b/src/Mono.Cairo/FontExtents.cs
deleted file mode 100644 (file)
index 76c7e65..0000000
+++ /dev/null
@@ -1,104 +0,0 @@
-//
-// Mono.Cairo.FontExtents.cs
-//
-// Authors: Duncan Mak (duncan@ximian.com)
-//          Hisham Mardam Bey (hisham.mardambey@gmail.com)
-//
-// (C) Ximian, Inc. 2003
-//
-// This is a simplistic binding of the Cairo API to C#. All functions
-// in cairo.h are transcribed into their C# equivelants
-//
-// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System;
-using System.Runtime.InteropServices;
-
-namespace Cairo
-{
-       [StructLayout (LayoutKind.Sequential)]
-       public struct FontExtents
-       {
-               double ascent;
-               double descent;
-               double height;
-               double maxXAdvance;
-               double maxYAdvance;
-               
-               public double Ascent {
-                       get { return ascent; }
-                       set { ascent = value; }
-               }
-               
-               public double Descent {
-                       get { return descent; }
-                       set { descent = value; }
-               }
-               
-               public double Height {
-                       get { return height; }
-                       set { height = value; }
-               }
-               
-               public double MaxXAdvance {
-                       get { return maxXAdvance; }
-                       set { maxXAdvance = value; }
-               }
-               
-               public double MaxYAdvance {
-                       get { return maxYAdvance; }
-                       set { maxYAdvance = value; }
-               }
-
-               public FontExtents (double ascent, double descent, double height, double maxXAdvance, double maxYAdvance)
-               {
-                       this.ascent = ascent;
-                       this.descent = descent;
-                       this.height = height;
-                       this.maxXAdvance = maxXAdvance;
-                       this.maxYAdvance = maxYAdvance;
-               }
-
-               public override bool Equals (object obj)
-               {
-                       if (obj is FontExtents)
-                               return this == (FontExtents) obj;
-                       return false;
-               }
-
-               public override int GetHashCode ()
-               {
-                       return (int) Ascent ^ (int) Descent ^ (int) Height ^ (int) MaxXAdvance ^ (int) MaxYAdvance;
-               }
-
-               public static bool operator == (FontExtents extents, FontExtents other)
-               {
-                       return extents.Ascent == other.Ascent && extents.Descent == other.Descent && extents.Height == other.Height && extents.MaxXAdvance == other.MaxXAdvance && extents.MaxYAdvance == other.MaxYAdvance;
-               }
-
-               public static bool operator != (FontExtents extents, FontExtents other)
-               {
-                       return !(extents == other);
-               }
-       }
-}
diff --git a/src/Mono.Cairo/FontFace.cs b/src/Mono.Cairo/FontFace.cs
deleted file mode 100644 (file)
index 19d8163..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
-//
-// Mono.Cairo.FontFace.cs
-//
-// Author:
-//   Alp Toker (alp@atoker.com)
-//   Miguel de Icaza (miguel@novell.com)
-//
-// (C) Ximian Inc, 2003.
-//
-// This is an OO wrapper API for the Cairo API.
-//
-// Copyright (C) 2004, 2007 Novell, Inc (http://www.novell.com)
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-using System;
-
-namespace Cairo
-{
-       public class FontFace : IDisposable
-       {
-               IntPtr handle;
-
-               internal static FontFace Lookup (IntPtr handle, bool owner)
-               {
-                       if (handle == IntPtr.Zero)
-                               return null;
-                       return new FontFace (handle, owner);
-               }
-
-               ~FontFace ()
-               {
-                       Dispose (false);
-               }
-
-               public void Dispose ()
-               {
-                       Dispose (true);
-                       GC.SuppressFinalize (this);
-               }
-
-               protected virtual void Dispose (bool disposing)
-               {
-                       if (!disposing || CairoDebug.Enabled)
-                               CairoDebug.OnDisposed<FontFace> (handle, disposing);
-
-                       if (!disposing|| handle == IntPtr.Zero)
-                               return;
-
-                       NativeMethods.cairo_font_face_destroy (handle);
-                       handle = IntPtr.Zero;
-               }
-
-               [Obsolete]
-               public FontFace (IntPtr handle) : this (handle, true)
-               {
-               }
-
-               public FontFace (IntPtr handle, bool owned)
-               {
-                       this.handle = handle;
-                       if (!owned)
-                               NativeMethods.cairo_font_face_reference (handle);
-                       if (CairoDebug.Enabled)
-                               CairoDebug.OnAllocated (handle);
-               }
-
-               public IntPtr Handle {
-                       get {
-                               return handle;
-                       }
-               }
-
-               public Status Status {
-                       get {
-                               return NativeMethods.cairo_font_face_status (handle);
-                       }
-               }
-               
-               public FontType FontType {
-                       get {
-                               return NativeMethods.cairo_font_face_get_type (handle);
-                       }
-               }
-
-               public uint ReferenceCount {
-                       get { return NativeMethods.cairo_font_face_get_reference_count (handle); }
-               }
-       }
-}
-
diff --git a/src/Mono.Cairo/FontOptions.cs b/src/Mono.Cairo/FontOptions.cs
deleted file mode 100644 (file)
index 5269d54..0000000
+++ /dev/null
@@ -1,143 +0,0 @@
-//
-// Mono.Cairo.FontOptions.cs
-//
-// Author:
-//   John Luke (john.luke@gmail.com)
-//
-// (C) John Luke 2005.
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System;
-
-namespace Cairo
-{
-       public class FontOptions : IDisposable
-       {
-               IntPtr handle;
-
-               public FontOptions () : this (NativeMethods.cairo_font_options_create ())
-               {
-               }
-
-               ~FontOptions ()
-               {
-                       Dispose (false);
-               }
-
-               internal FontOptions (IntPtr handle)
-               {
-                       this.handle = handle;
-                       if (CairoDebug.Enabled)
-                               CairoDebug.OnAllocated (handle);
-               }
-
-               public FontOptions Copy ()
-               {
-                       return new FontOptions (NativeMethods.cairo_font_options_copy (handle));
-               }
-
-               [Obsolete ("Use Dispose()")]
-               public void Destroy ()
-               {
-                       Dispose ();
-               }
-
-               public void Dispose ()
-               {
-                       Dispose (true);
-                       GC.SuppressFinalize (this);
-               }
-
-               protected virtual void Dispose (bool disposing)
-               {
-                       if (!disposing || CairoDebug.Enabled)
-                               CairoDebug.OnDisposed<FontOptions> (handle, disposing);
-
-                       if (!disposing|| handle == IntPtr.Zero)
-                               return;
-
-                       NativeMethods.cairo_font_options_destroy (handle);
-                       handle = IntPtr.Zero;
-               }
-
-               public static bool operator == (FontOptions options, FontOptions other)
-               {
-                       return Equals (options, other);
-               }
-
-               public static bool operator != (FontOptions options, FontOptions other)
-               {
-                       return !(options == other);
-               }
-
-               public override bool Equals (object other)
-               {
-                       return Equals (other as FontOptions);
-               }
-
-               bool Equals (FontOptions options)
-               {
-                       return options != null && NativeMethods.cairo_font_options_equal (Handle, options.Handle);
-               }
-
-               public IntPtr Handle {
-                       get { return handle; }
-               }
-
-               public override int GetHashCode ()
-               {
-                       return (int) NativeMethods.cairo_font_options_hash (handle);
-               }
-               
-               public void Merge (FontOptions other)
-               {
-                       if (other == null)
-                               throw new ArgumentNullException ("other");
-                       NativeMethods.cairo_font_options_merge (handle, other.Handle);
-               }
-
-               public Antialias Antialias {
-                       get { return NativeMethods.cairo_font_options_get_antialias (handle); }
-                       set { NativeMethods.cairo_font_options_set_antialias (handle, value); }
-               }
-
-               public HintMetrics HintMetrics {
-                       get { return NativeMethods.cairo_font_options_get_hint_metrics (handle);}
-                       set { NativeMethods.cairo_font_options_set_hint_metrics (handle, value); }
-               }
-
-               public HintStyle HintStyle {
-                       get { return NativeMethods.cairo_font_options_get_hint_style (handle);}
-                       set { NativeMethods.cairo_font_options_set_hint_style (handle, value); }
-               }
-
-               public Status Status {
-                       get { return NativeMethods.cairo_font_options_status (handle); }
-               }
-
-               public SubpixelOrder SubpixelOrder {
-                       get { return NativeMethods.cairo_font_options_get_subpixel_order (handle);}
-                       set { NativeMethods.cairo_font_options_set_subpixel_order (handle, value); }
-               }
-       }
-}
-
diff --git a/src/Mono.Cairo/FontSlant.cs b/src/Mono.Cairo/FontSlant.cs
deleted file mode 100644 (file)
index b7a5684..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-//
-// Mono.Cairo.FontSlant.cs
-//
-// Authors:
-//   Duncan Mak (duncan@ximian.com)
-//   Hisham Mardam Bey (hisham.mardambey@gmail.com)
-//
-// (C) Ximian, Inc. 2003
-// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System;
-
-namespace Cairo
-{
-       
-       public enum FontSlant
-       {
-               Normal,
-               Italic,
-               Oblique
-       }
-}
diff --git a/src/Mono.Cairo/FontType.cs b/src/Mono.Cairo/FontType.cs
deleted file mode 100644 (file)
index e9fd263..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-//
-// Mono.Cairo.FontType.cs
-//
-// Authors:
-//    John Luke
-//
-// (C) John Luke, 2006.
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System;
-
-namespace Cairo {
-
-       
-       public enum FontType
-       {
-               Toy,
-               FreeType,
-               Win32,
-               Atsui,
-       }
-}
diff --git a/src/Mono.Cairo/FontWeight.cs b/src/Mono.Cairo/FontWeight.cs
deleted file mode 100644 (file)
index 5b78109..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-//
-// Mono.Cairo.FontWeight.cs
-//
-// Authors:
-//   Duncan Mak (duncan@ximian.com)
-//   Hisham Mardam Bey (hisham.mardambey@gmail.com)
-//
-// (C) Ximian, Inc. 2003
-// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System;
-
-namespace Cairo
-{
-       
-       public enum FontWeight
-       {
-               Normal,
-               Bold,
-       }
-}
diff --git a/src/Mono.Cairo/Format.cs b/src/Mono.Cairo/Format.cs
deleted file mode 100644 (file)
index 96e9a0f..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-//
-// Mono.Cairo.Format.cs
-//
-// Authors: Duncan Mak (duncan@ximian.com)
-//          Hisham Mardam Bey (hisham.mardambey@gmail.com)
-//
-// (C) Ximian, Inc. 2003
-// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System;
-
-namespace Cairo
-{
-       
-       public enum Format
-       {
-               Argb32  = 0,
-               Rgb24   = 1,
-               A8      = 2,
-               A1      = 3,
-               Rgb16565 = 4,
-
-               //[Obsolete ("Use Argb32")]
-               ARGB32 = Argb32,
-               //[Obsolete ("Use Rgb24")]
-               RGB24   = Rgb24,
-       }
-}
diff --git a/src/Mono.Cairo/GLSurface.cs b/src/Mono.Cairo/GLSurface.cs
deleted file mode 100644 (file)
index 9486c9c..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-//
-// Mono.Cairo.GLSurface.cs
-//
-// Authors:
-//                     JP Bruyère (jp_bruyere@hotmail.com)
-//
-// This is an OO wrapper API for the Cairo API
-//
-// Copyright (C) 2016 JP Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System;
-
-namespace Cairo {
-
-       public class GLSurface : Surface
-       {
-               
-               public GLSurface (IntPtr ptr, bool own) : base (ptr, own)
-               {}
-
-               public GLSurface (Device device, Cairo.Content content, uint tex, int width, int height)
-                       : base (NativeMethods.cairo_gl_surface_create_for_texture (device.Handle, (uint)content, tex, width, height), true)
-               {}
-
-               public GLSurface (EGLDevice device, IntPtr eglSurf, int width, int height)
-                       : base (NativeMethods.cairo_gl_surface_create_for_egl (device.Handle, eglSurf, width, height), true)
-               {}
-
-               public GLSurface (GLXDevice device, IntPtr window, int width, int height)
-                       : base (NativeMethods.cairo_gl_surface_create_for_window (device.Handle, window, width, height),true)
-               {}
-
-               public GLSurface (WGLDevice device, IntPtr hdc, int width, int height)
-                       : base (NativeMethods.cairo_gl_surface_create_for_dc (device.Handle, hdc, width, height), true)
-               {}
-
-               public void SwapBuffers(){
-                       NativeMethods.cairo_gl_surface_swapbuffers (this.Handle);
-               }
-       }
-}
diff --git a/src/Mono.Cairo/GLXDevice.cs b/src/Mono.Cairo/GLXDevice.cs
deleted file mode 100644 (file)
index 189872a..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-//
-// Mono.Cairo.Device.cs
-//
-// Authors:
-//                     JP Bruyère (jp_bruyere@hotmail.com)
-//
-// This is an OO wrapper API for the Cairo API
-//
-// Copyright (C) 2016 JP Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-using System;
-
-namespace Cairo
-{
-       public class GLXDevice : Device
-       {
-               public GLXDevice (IntPtr dpy, IntPtr gl_ctx) : base (NativeMethods.cairo_glx_device_create (dpy, gl_ctx), true)
-               {
-               }
-
-               public IntPtr Display {
-                       get { return NativeMethods.cairo_glx_device_get_display (Handle); }
-               }
-
-               public IntPtr Context {
-                       get { return NativeMethods.cairo_glx_device_get_context (Handle); }
-               }
-       }
-}
-
diff --git a/src/Mono.Cairo/GlitzSurface.cs b/src/Mono.Cairo/GlitzSurface.cs
deleted file mode 100644 (file)
index 6da1ac6..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-//
-// Mono.Cairo.GlitzSurface.cs
-//
-// Authors:
-//    Alp Toker
-//
-// (C) Alp Toker, 2006.
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System;
-
-namespace Cairo {
-       public class GlitzSurface : Surface
-       {
-               internal GlitzSurface (IntPtr handle, bool owns) : base (handle, owns)
-               {
-               }
-
-               public GlitzSurface (IntPtr glitz_surface)
-                       : base (NativeMethods.cairo_glitz_surface_create (glitz_surface), true)
-               {
-               }
-       }
-}
diff --git a/src/Mono.Cairo/Glyph.cs b/src/Mono.Cairo/Glyph.cs
deleted file mode 100644 (file)
index ec9c2ff..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-//
-// Mono.Cairo.Glyph.cs
-//
-// Authors: Duncan Mak (duncan@ximian.com)
-//          Hisham Mardam Bey (hisham.mardambey@gmail.com)
-//
-// (C) Ximian, Inc. 2003
-// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System;
-using System.Runtime.InteropServices;
-
-namespace Cairo
-{
-       [StructLayout(LayoutKind.Sequential)]
-       public struct Glyph
-       {
-               internal long index;
-               internal double x;
-               internal double y;
-               
-               public Glyph (long index, double x, double y)
-               {
-                       this.index = index;
-                       this.x = x;
-                       this.y = y;
-               }
-               
-               public long Index {
-                       get { return index; }
-                       set { index = value; }
-               }
-               
-               public double X {
-                       get { return x; }
-                       set { x = value; }
-               }
-               
-               public double Y {
-                       get { return y; }
-                       set { y = value; }
-               }
-
-               public override bool Equals (object obj)
-               {
-                       if (obj is Glyph)
-                               return this == (Glyph)obj;
-                       return false;
-               }
-
-               public override int GetHashCode ()
-               {
-                       return (int) Index ^ (int) X ^ (int) Y;
-               }
-
-               internal static IntPtr GlyphsToIntPtr (Glyph[] glyphs)
-               {
-                       int size = Marshal.SizeOf (glyphs[0]);
-                       IntPtr dest = Marshal.AllocHGlobal (size * glyphs.Length);
-                       long pos = dest.ToInt64 ();
-                       for (int i = 0; i < glyphs.Length; i++, pos += size)
-                               Marshal.StructureToPtr (glyphs[i], (IntPtr) pos, false);
-                       return dest;
-               }
-
-               public static bool operator == (Glyph glyph, Glyph other)
-               {
-                       return glyph.Index == other.Index && glyph.X == other.X && glyph.Y == other.Y;
-               }
-
-               public static bool operator != (Glyph glyph, Glyph other)
-               {
-                       return !(glyph == other);
-               }
-       }
-}
diff --git a/src/Mono.Cairo/Gradient.cs b/src/Mono.Cairo/Gradient.cs
deleted file mode 100644 (file)
index c7bc53c..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-//
-// Mono.Cairo.Gradient.cs
-//
-// Author: Jordi Mas (jordi@ximian.com)
-//         Hisham Mardam Bey (hisham.mardambey@gmail.com)
-// (C) Ximian Inc, 2004.
-//
-// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System;
-using Color = Crow.Color;
-namespace Cairo {
-
-       public class Gradient : Pattern
-       {
-               protected Gradient (IntPtr handle, bool owned) : base (handle, owned)
-               {
-               }
-
-               [Obsolete]
-               protected Gradient ()
-               {
-               }
-
-               public int ColorStopCount {
-                       get {
-                               int cnt;
-                               NativeMethods.cairo_pattern_get_color_stop_count (Handle, out cnt);
-                               return cnt;
-                       }
-               }
-
-               public Status AddColorStop (double offset, Color c)
-               {
-                       NativeMethods.cairo_pattern_add_color_stop_rgba (Handle, offset, c.R, c.G, c.B, c.A);
-                       return Status;
-               }
-
-               public Status AddColorStopRgb (double offset, Color c)
-               {
-                       NativeMethods.cairo_pattern_add_color_stop_rgb (Handle, offset, c.R, c.G, c.B);
-                       return Status;
-               }
-       }
-}
-
diff --git a/src/Mono.Cairo/HintMetrics.cs b/src/Mono.Cairo/HintMetrics.cs
deleted file mode 100644 (file)
index 3bf01d2..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-//
-// Mono.Cairo.HintMetrics.cs
-//
-// Authors: Duncan Mak (duncan@ximian.com)
-//          Hisham Mardam Bey (hisham.mardambey@gmail.com)
-//
-// (C) Ximian, Inc. 2003
-// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System;
-
-namespace Cairo
-{
-       
-       public enum HintMetrics
-       {
-               Default,
-               Off,
-               On,
-       }
-}
diff --git a/src/Mono.Cairo/HintStyle.cs b/src/Mono.Cairo/HintStyle.cs
deleted file mode 100644 (file)
index b8cca97..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-//
-// Mono.Cairo.HintStyle.cs
-//
-// Authors: Duncan Mak (duncan@ximian.com)
-//          Hisham Mardam Bey (hisham.mardambey@gmail.com)
-//
-// (C) Ximian, Inc. 2003
-// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System;
-
-namespace Cairo
-{
-       
-       public enum HintStyle
-       {
-               Default,
-               None,
-               Slight,
-               Medium,
-               Full,
-       }
-}
diff --git a/src/Mono.Cairo/ImageSurface.cs b/src/Mono.Cairo/ImageSurface.cs
deleted file mode 100644 (file)
index 98143fe..0000000
+++ /dev/null
@@ -1,104 +0,0 @@
-//
-// Mono.Cairo.ImageSurface.cs
-//
-// Authors:
-//    Duncan Mak
-//    Miguel de Icaza.
-//
-// (C) Ximian Inc, 2003.
-// (C) Novell, Inc. 2003.
-//
-// This is an OO wrapper API for the Cairo API
-//
-// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System;
-using System.Runtime.InteropServices;
-
-namespace Cairo {
-
-       public class ImageSurface : Surface
-       {
-               internal ImageSurface (IntPtr handle, bool owns) : base (handle, owns)
-               {
-               }
-
-               public ImageSurface (Format format, int width, int height)
-                       : base (NativeMethods.cairo_image_surface_create (format, width, height), true)
-               {
-               }
-
-               [Obsolete ("Use ImageSurface (byte[] data, Cairo.Format format, int width, int height, int stride)")]
-               public ImageSurface (ref byte[] data, Cairo.Format format, int width, int height, int stride)
-                       : this (data, format, width, height, stride)
-               {
-               }
-
-               public ImageSurface (byte[] data, Format format, int width, int height, int stride)
-                       : base (NativeMethods.cairo_image_surface_create_for_data (data, format, width, height, stride), true)
-               {
-               }
-
-               public ImageSurface (IntPtr data, Format format, int width, int height, int stride)
-                       : base (NativeMethods.cairo_image_surface_create_for_data (data, format, width, height, stride), true)
-               {
-               }
-
-               public ImageSurface (string filename)
-                       : base (NativeMethods.cairo_image_surface_create_from_png (filename), true)
-               {
-               }
-
-               public int Width {
-                       get { return NativeMethods.cairo_image_surface_get_width (Handle); }
-               }
-
-               public int Height {
-                       get { return NativeMethods.cairo_image_surface_get_height (Handle); }
-               }
-
-               public byte[] Data {
-                       get {
-                               IntPtr ptr = NativeMethods.cairo_image_surface_get_data (Handle);
-                               int length = Height * Stride;
-                               byte[] data = new byte[length];
-                               Marshal.Copy (ptr, data, 0, length);
-                               return data;
-                       }
-               }
-
-               public IntPtr DataPtr {
-                       get {
-                               return NativeMethods.cairo_image_surface_get_data (Handle);
-                       }
-               }
-
-               public Format Format {
-                       get { return NativeMethods.cairo_image_surface_get_format (Handle); }
-               }
-
-               public int Stride {
-                       get { return NativeMethods.cairo_image_surface_get_stride (Handle); }
-               }
-       }
-}
diff --git a/src/Mono.Cairo/LineCap.cs b/src/Mono.Cairo/LineCap.cs
deleted file mode 100644 (file)
index 46938c2..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-//
-// Mono.Cairo.LineCap.cs
-//
-// Authors: Duncan Mak (duncan@ximian.com)
-//          Hisham Mardam Bey (hisham.mardambey@gmail.com)
-//
-// (C) Ximian, Inc. 2003
-// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System;
-
-namespace Cairo
-{
-       
-       public enum LineCap
-       {
-               Butt,
-               Round,
-               Square,
-       }
-}
diff --git a/src/Mono.Cairo/LineJoin.cs b/src/Mono.Cairo/LineJoin.cs
deleted file mode 100644 (file)
index b5c241b..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-//
-// Mono.Cairo.LineJoin.cs
-//
-// Authors: Duncan Mak (duncan@ximian.com)
-//          Hisham Mardam Bey (hisham.mardambey@gmail.com)
-//
-// (C) Ximian, Inc. 2003
-// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System;
-
-namespace Cairo
-{
-       
-       public enum LineJoin
-       {
-               Miter,
-               Round,
-               Bevel
-       }
-}
-
diff --git a/src/Mono.Cairo/LinearGradient.cs b/src/Mono.Cairo/LinearGradient.cs
deleted file mode 100644 (file)
index 85fdea8..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-//
-// Mono.Cairo.LinearGradient.cs
-//
-// Author: Jordi Mas (jordi@ximian.com)
-//         Hisham Mardam Bey (hisham.mardambey@gmail.com)
-// (C) Ximian Inc, 2004.
-//
-// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System;
-
-namespace Cairo {
-
-       public class LinearGradient : Gradient
-       {
-               internal LinearGradient (IntPtr handle, bool owned) : base (handle, owned)
-               {
-               }
-
-               public LinearGradient (double x0, double y0, double x1, double y1)
-                       : base (NativeMethods.cairo_pattern_create_linear (x0, y0, x1, y1), true)
-               {
-               }
-
-               public PointD[] LinearPoints {
-                       get {
-                               double x0, y0, x1, y1;
-                               PointD[] points = new PointD [2];
-
-                               NativeMethods.cairo_pattern_get_linear_points (Handle, out x0, out y0, out x1, out y1);
-
-                               points[0] = new PointD (x0, y0);
-                               points[1] = new PointD (x1, y1);
-                               return points;
-                       }
-               }
-       }
-}
-
diff --git a/src/Mono.Cairo/Matrix.cs b/src/Mono.Cairo/Matrix.cs
deleted file mode 100644 (file)
index 12f0cb9..0000000
+++ /dev/null
@@ -1,193 +0,0 @@
-//
-// Mono.Cairo.Matrix.cs
-//
-// Author: Duncan Mak
-//         Hisham Mardam Bey (hisham.mardambey@gmail.com)
-//         Idan Gazit (idan@fastmail.fm)
-//
-// (C) Ximian Inc, 2003 - 2005.
-//
-// This is an OO wrapper API for the Cairo API
-//
-// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System;
-using System.Runtime.InteropServices;
-
-namespace Cairo {
-
-       [StructLayout(LayoutKind.Sequential)]
-       public class Matrix //: ICloneable
-       {
-               public double Xx;
-               public double Yx;
-               public double Xy;
-               public double Yy;
-               public double X0;
-               public double Y0;
-
-               public Matrix (double xx, double yx, double xy, double yy,
-                               double x0, double y0)
-               {
-                       this.Xx = xx; this.Yx = yx; this.Xy = xy;
-                       this.Yy = yy; this.X0 = x0; this.Y0 = y0;
-               }
-
-               public Matrix ()
-               {
-                       this.InitIdentity ();
-               }
-
-               public bool IsIdentity ()
-               {
-                       return (this == new Matrix ());
-               }
-
-               public void InitIdentity ()
-               {
-                       // this.Init(1,0,0,1,0,0);
-                       NativeMethods.cairo_matrix_init_identity (this);
-               }
-
-               public void Init (double xx, double yx, double xy, double yy,
-                                 double x0, double y0)
-               {
-                       this.Xx = xx; this.Yx = yx; this.Xy = xy;
-                       this.Yy = yy; this.X0 = x0; this.Y0 = y0;
-               }
-
-               public void InitTranslate (double tx, double ty)
-               {
-                       //this.Init (1, 0, 0, 1, tx, ty);
-                       NativeMethods.cairo_matrix_init_translate (this, tx, ty);
-               }
-
-               public void Translate (double tx, double ty)
-               {
-                       NativeMethods.cairo_matrix_translate (this, tx, ty);
-               }
-
-               public void InitScale (double sx, double sy)
-               {
-                       //this.Init (sx, 0, 0, sy, 0, 0);
-                       NativeMethods.cairo_matrix_init_scale (this, sx, sy);
-               }
-
-               public void Scale (double sx, double sy)
-               {
-                       NativeMethods.cairo_matrix_scale (this, sx, sy);
-               }
-
-               public void InitRotate (double radians)
-               {
-                       /*
-                       double s, c;
-                       s = Math.Sin (radians);
-                       c = Math.Cos (radians);
-                       this.Init (c, s, -s, c, 0, 0);
-                       */
-                       NativeMethods.cairo_matrix_init_rotate (this, radians);
-               }
-
-               public void Rotate (double radians)
-               {
-                       NativeMethods.cairo_matrix_rotate (this, radians);
-               }
-
-               public Cairo.Status Invert ()
-               {
-                       return NativeMethods.cairo_matrix_invert (this);
-               }
-
-               public void Multiply (Matrix b)
-               {
-                       Matrix a = (Matrix) this.Clone ();
-                       NativeMethods.cairo_matrix_multiply (this, a, b);
-               }
-
-               public static Matrix Multiply (Matrix a, Matrix b) {
-                       Matrix result = new Matrix ();
-                       NativeMethods.cairo_matrix_multiply (result, a, b);
-                       return result;
-               }
-
-
-               public void TransformDistance (ref double dx, ref double dy)
-               {
-                       NativeMethods.cairo_matrix_transform_distance (this, ref dx, ref dy);
-               }
-
-               public void TransformPoint (ref double x, ref double y)
-               {
-                       NativeMethods.cairo_matrix_transform_point (this, ref x, ref y);
-               }
-
-               public override String ToString ()
-               {
-                       String s = String.Format ("xx:{0:##0.0#} yx:{1:##0.0#} xy:{2:##0.0#} yy:{3:##0.0#} x0:{4:##0.0#} y0:{5:##0.0#}",
-                               this.Xx, this.Yx, this.Xy, this.Yy, this.X0, this.Y0);
-                       return s;
-               }
-
-               public static bool operator == (Matrix lhs, Matrix rhs)
-               {
-                       return (lhs.Xx == rhs.Xx &&
-                               lhs.Xy == rhs.Xy &&
-                               lhs.Yx == rhs.Yx &&
-                               lhs.Yy == rhs.Yy &&
-                               lhs.X0 == rhs.X0 &&
-                               lhs.Y0 == rhs.Y0 );
-               }
-
-               public static bool operator != (Matrix lhs, Matrix rhs)
-               {
-                       return !(lhs==rhs);
-               }
-
-
-
-               public override bool Equals(object o)
-               {
-                       if (! (o is Matrix))
-                               return false;
-                       else
-                               return (this == (Matrix) o);
-               }
-
-               public override int GetHashCode()
-               {
-                       return  (int)this.Xx ^ (int)this.Xx>>32 ^
-                               (int)this.Xy ^ (int)this.Xy>>32 ^
-                               (int)this.Yx ^ (int)this.Yx>>32 ^
-                               (int)this.Yy ^ (int)this.Yy>>32 ^
-                               (int)this.X0 ^ (int)this.X0>>32 ^
-                               (int)this.Y0 ^ (int)this.Y0>>32;
-               }
-
-               public object Clone()
-               {
-                       return this.MemberwiseClone ();
-               }
-
-       }
-}
diff --git a/src/Mono.Cairo/MeshPattern.cs b/src/Mono.Cairo/MeshPattern.cs
deleted file mode 100644 (file)
index b14c709..0000000
+++ /dev/null
@@ -1,98 +0,0 @@
-//
-// Mono.Cairo.Pattern.cs
-//
-// Author: Jordi Mas (jordi@ximian.com)
-//         Hisham Mardam Bey (hisham.mardambey@gmail.com)
-// (C) Ximian Inc, 2004.
-//
-// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System;
-
-namespace Cairo {
-
-       public class MeshPattern : Pattern
-       {
-               internal MeshPattern (IntPtr handle, bool owned) : base (handle, owned)
-               {
-               }
-
-               public MeshPattern ()
-                       : base (NativeMethods.cairo_pattern_create_mesh(), true)
-               {
-               }
-
-               //no idea why this is here, the base one is identical, but we can't remove it now
-               public new Extend Extend {
-                       set { NativeMethods.cairo_pattern_set_extend (Handle, value); }
-                       get { return NativeMethods.cairo_pattern_get_extend (Handle); }
-               }
-
-               public Filter Filter {
-                       set { NativeMethods.cairo_pattern_set_filter (Handle, value); }
-                       get { return NativeMethods.cairo_pattern_get_filter (Handle); }
-               }
-
-               public void BeginPatch(){
-                       NativeMethods.cairo_mesh_pattern_begin_patch (Handle);
-               }
-               public void EndPatch(){
-                       NativeMethods.cairo_mesh_pattern_end_patch (Handle);
-               }
-               public void MoveTo(double x, double y){
-                       NativeMethods.cairo_mesh_pattern_move_to (Handle, x, y);
-               }
-               public void LineTo(double x, double y){
-                       NativeMethods.cairo_mesh_pattern_line_to (Handle, x, y);
-               }
-               public void CurveTo(double x1, double y1, double x2, double y2, double x3, double y3)
-               {
-                       NativeMethods.cairo_mesh_pattern_curve_to (Handle, x1, y1, x2, y2, x3, y3);
-               }
-               public void SetControlPoint(uint point_num, double x, double y){
-                       NativeMethods.cairo_mesh_pattern_set_control_point (Handle, point_num, x, y);
-               }
-               public void SetCornerColorRGB(uint corner_num, double r, double g, double b){
-                       NativeMethods.cairo_mesh_pattern_set_corner_color_rgb (Handle, corner_num, r, g, b);
-               }
-               public void SetCornerColorRGBA(uint corner_num, double r, double g, double b, double a){
-                       NativeMethods.cairo_mesh_pattern_set_corner_color_rgba (Handle, corner_num, r, g, b, a);
-               }
-               public uint PatchCount {
-                       get {
-                               uint count = 0;
-                               NativeMethods.cairo_mesh_pattern_get_patch_count(Handle, out count);
-                               return count;
-                       }       
-               }
-               public Path GetPath(uint patch_num){
-                       return new Path(NativeMethods.cairo_mesh_pattern_get_path(Handle, patch_num));
-               }
-               public void GetControlPoint(){
-               }
-               public void GetCornerColorRGBA(){
-                       
-               }
-       }
-}
-
diff --git a/src/Mono.Cairo/NativeMethods-internal.cs b/src/Mono.Cairo/NativeMethods-internal.cs
deleted file mode 100644 (file)
index 6e6d507..0000000
+++ /dev/null
@@ -1,1026 +0,0 @@
-//
-// Cairo.cs - a simplistic binding of the Cairo API to C#.
-//
-// Authors: Duncan Mak (duncan@ximian.com)
-//          Hisham Mardam Bey (hisham.mardambey@gmail.com)
-//          John Luke (john.luke@gmail.com)
-//          Alp Toker (alp@atoker.com)
-//
-// (C) Ximian, Inc. 2003
-// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
-// Copyright (C) 2005 John Luke
-// Copyright (C) 2006 Alp Toker
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System;
-using System.Runtime.InteropServices;
-using System.Runtime.CompilerServices;
-
-namespace Cairo
-{
-       // sort the functions like in the following page so it is easier to find what is missing
-       // http://cairographics.org/manual/index-all.html
-
-       public static class NativeMethods
-       {
-               #if MONOTOUCH
-               const string cairo = "__Internal";
-               #else
-               const string cairo = "libcairo-2.dll";
-               #endif
-
-               //[MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               //public static extern void cairo_append_path (IntPtr cr, Path path);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_arc (IntPtr cr, double xc, double yc, double radius, double angle1, double angle2);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_arc_negative (IntPtr cr, double xc, double yc, double radius, double angle1, double angle2);
-
-               //              [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               //              public static extern IntPtr cairo_atsui_font_face_create_for_atsu_font_id (IntPtr font_id);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_clip (IntPtr cr);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_clip_preserve (IntPtr cr);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_clip_extents (IntPtr cr, out double x1, out double y1, out double x2, out double y2);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_close_path (IntPtr cr);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_copy_page (IntPtr cr);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_copy_path (IntPtr cr);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_copy_path_flat (IntPtr cr);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_append_path (IntPtr cr, IntPtr path);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_create (IntPtr target);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_curve_to (IntPtr cr, double x1, double y1, double x2, double y2, double x3, double y3);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_debug_reset_static_data ();
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_destroy (IntPtr cr);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_device_to_user (IntPtr cr, ref double x, ref double y);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_device_to_user_distance (IntPtr cr, ref double dx, ref double dy);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_fill (IntPtr cr);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_fill_extents (IntPtr cr, out double x1, out double y1, out double x2, out double y2);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_fill_preserve (IntPtr cr);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_font_extents (IntPtr cr, out FontExtents extents);
-
-               #region FontFace
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_font_face_destroy (IntPtr font_face);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern FontType cairo_font_face_get_type (IntPtr font_face);
-
-               //[MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               //public static extern void cairo_font_face_get_user_data (IntPtr font_face);
-
-               //[MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               //public static extern void cairo_font_face_set_user_data (IntPtr font_face);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_font_face_reference (IntPtr font_face);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern Status cairo_font_face_status (IntPtr font_face);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern uint cairo_font_face_get_reference_count (IntPtr surface);
-               #endregion
-
-               #region FontOptions
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_font_options_copy (IntPtr original);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_font_options_create ();
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_font_options_destroy (IntPtr options);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern bool cairo_font_options_equal (IntPtr options, IntPtr other);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern Antialias cairo_font_options_get_antialias (IntPtr options);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern HintMetrics cairo_font_options_get_hint_metrics (IntPtr options);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern HintStyle cairo_font_options_get_hint_style (IntPtr options);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern SubpixelOrder cairo_font_options_get_subpixel_order (IntPtr options);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern long cairo_font_options_hash (IntPtr options);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_font_options_merge (IntPtr options, IntPtr other);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_font_options_set_antialias (IntPtr options, Antialias aa);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_font_options_set_hint_metrics (IntPtr options, HintMetrics metrics);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_font_options_set_hint_style (IntPtr options, HintStyle style);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_font_options_set_subpixel_order (IntPtr options, SubpixelOrder order);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern Status cairo_font_options_status (IntPtr options);
-               #endregion
-
-               #region Freetype / FontConfig
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_ft_font_face_create_for_ft_face (IntPtr face, int load_flags);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_ft_font_face_create_for_pattern (IntPtr fc_pattern);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_ft_font_options_substitute (FontOptions options, IntPtr pattern);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_ft_scaled_font_lock_face (IntPtr scaled_font);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_ft_scaled_font_unlock_face (IntPtr scaled_font);
-               #endregion
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern Antialias cairo_get_antialias (IntPtr cr);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_get_current_point (IntPtr cr, out double x, out double y);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern FillRule cairo_get_fill_rule (IntPtr cr);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_get_font_face (IntPtr cr);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_get_font_matrix (IntPtr cr, out Matrix matrix);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_get_font_options (IntPtr cr, IntPtr options);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_get_group_target (IntPtr cr);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern LineCap cairo_get_line_cap (IntPtr cr);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern LineJoin cairo_get_line_join (IntPtr cr);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern double cairo_get_line_width (IntPtr cr);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_get_matrix (IntPtr cr, Matrix matrix);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern double cairo_get_miter_limit (IntPtr cr);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern Operator cairo_get_operator (IntPtr cr);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern uint cairo_get_reference_count (IntPtr surface);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_get_source (IntPtr cr);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_get_target (IntPtr cr);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern double cairo_get_tolerance (IntPtr cr);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_glitz_surface_create (IntPtr surface);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_glyph_extents (IntPtr cr, IntPtr glyphs, int num_glyphs, out TextExtents extents);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_glyph_path (IntPtr cr, IntPtr glyphs, int num_glyphs);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               [return: MarshalAs (UnmanagedType.U1)]
-               public static extern bool cairo_has_current_point (IntPtr cr);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_identity_matrix (IntPtr cr);
-
-               #region Image Surface
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_image_surface_create (Cairo.Format format, int width, int height);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               public static extern IntPtr cairo_image_surface_create_for_data (byte[] data, Cairo.Format format, int width, int height, int stride);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_image_surface_create_for_data (IntPtr data, Cairo.Format format, int width, int height, int stride);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_image_surface_create_from_png  (string filename);
-
-               //[MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               //public static extern IntPtr cairo_image_surface_create_from_png_stream  (string filename);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_image_surface_get_data (IntPtr surface);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern Format cairo_image_surface_get_format (IntPtr surface);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern int cairo_image_surface_get_height (IntPtr surface);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern int cairo_image_surface_get_stride (IntPtr surface);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern int cairo_image_surface_get_width  (IntPtr surface);
-               #endregion
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               [return: MarshalAs (UnmanagedType.U1)]
-               public static extern bool cairo_in_clip (IntPtr cr, double x, double y);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               [return: MarshalAs (UnmanagedType.U1)]
-               public static extern bool cairo_in_fill (IntPtr cr, double x, double y);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               [return: MarshalAs (UnmanagedType.U1)]
-               public static extern bool cairo_in_stroke (IntPtr cr, double x, double y);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_line_to (IntPtr cr, double x, double y);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_mask (IntPtr cr, IntPtr pattern);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_mask_surface (IntPtr cr, IntPtr surface, double x, double y);
-
-               #region Matrix
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_matrix_init (Matrix matrix, double xx, double yx, double xy, double yy, double x0, double y0);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_matrix_init_identity (Matrix matrix);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_matrix_init_rotate (Matrix matrix, double radians);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_matrix_init_scale (Matrix matrix, double sx, double sy);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_matrix_init_translate (Matrix matrix, double tx, double ty);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern Status cairo_matrix_invert (Matrix matrix);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_matrix_multiply (Matrix result, Matrix a, Matrix b);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_matrix_scale (Matrix matrix, double sx, double sy);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_matrix_rotate (Matrix matrix, double radians);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_matrix_transform_distance (Matrix matrix, ref double dx, ref double dy);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_matrix_transform_point (Matrix matrix, ref double x, ref double y);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_matrix_translate (Matrix matrix, double tx, double ty);
-               #endregion
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_move_to (IntPtr cr, double x, double y);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_new_path (IntPtr cr);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_new_sub_path (IntPtr cr);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_paint (IntPtr cr);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_paint_with_alpha (IntPtr cr, double alpha);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_path_destroy (IntPtr path);
-
-               #region Pattern
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_pattern_add_color_stop_rgb (IntPtr pattern, double offset, double red, double green, double blue);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_pattern_add_color_stop_rgba (IntPtr pattern, double offset, double red, double green, double blue, double alpha);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern Status cairo_pattern_get_color_stop_count (IntPtr pattern, out int count);
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern Status cairo_pattern_get_color_stop_rgba (IntPtr pattern, int index, out double offset, out double red, out double green, out double blue, out double alpha);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_pattern_create_for_surface (IntPtr surface);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern Status cairo_pattern_get_surface (IntPtr pattern, out IntPtr surface);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_pattern_create_linear (double x0, double y0, double x1, double y1);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern Status cairo_pattern_get_linear_points (IntPtr pattern, out double x0, out double y0, out double x1, out double y1);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_pattern_create_radial (double cx0, double cy0, double radius0, double cx1, double cy1, double radius1);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern Status cairo_pattern_get_radial_circles (IntPtr pattern, out double x0, out double y0, out double r0, out double x1, out double y1, out double r1);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_pattern_create_rgb (double r, double g, double b);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_pattern_create_rgba (double r, double g, double b, double a);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern Status cairo_pattern_get_rgba (IntPtr pattern, out double red, out double green, out double blue, out double alpha);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_pattern_destroy (IntPtr pattern);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern Extend cairo_pattern_get_extend (IntPtr pattern);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern Filter cairo_pattern_get_filter (IntPtr pattern);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_pattern_get_matrix (IntPtr pattern, Matrix matrix);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern PatternType cairo_pattern_get_type (IntPtr pattern);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_pattern_reference (IntPtr pattern);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_pattern_set_extend (IntPtr pattern, Extend extend);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_pattern_set_filter (IntPtr pattern, Filter filter);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_pattern_set_matrix (IntPtr pattern, Matrix matrix);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern Status cairo_pattern_status (IntPtr pattern);
-               #endregion
-
-               #region PdfSurface
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_pdf_surface_create (string filename, double width, double height);
-
-               //[MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               //public static extern IntPtr cairo_pdf_surface_create_for_stream (string filename, double width, double height);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_pdf_surface_set_size (IntPtr surface, double x, double y);
-               #endregion
-
-               #region PostscriptSurface
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_ps_surface_create (string filename, double width, double height);
-
-               //[MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               //public static extern IntPtr cairo_ps_surface_create_for_stream (string filename, double width, double height);
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_ps_surface_dsc_begin_page_setup (IntPtr surface);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_ps_surface_dsc_begin_setup (IntPtr surface);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_ps_surface_dsc_comment (IntPtr surface, string comment);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_ps_surface_set_size (IntPtr surface, double x, double y);
-               #endregion
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_pop_group (IntPtr cr);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_pop_group_to_source (IntPtr cr);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_push_group (IntPtr cr);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_push_group_with_content (IntPtr cr, Content content);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_quartz_surface_create (IntPtr context, bool flipped, int width, int height);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_rectangle (IntPtr cr, double x, double y, double width, double height);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_reference (IntPtr cr);
-
-               #region Regions
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern bool cairo_region_contains_point (IntPtr region, int x, int y);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern RegionOverlap cairo_region_contains_rectangle (IntPtr region, ref Crow.Rectangle rectangle);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_region_copy (IntPtr original);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_region_create ();
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_region_create_rectangle (ref Crow.Rectangle rect);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_region_create_rectangles (IntPtr rects, int count);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_region_destroy (IntPtr region);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern bool cairo_region_equal (IntPtr a, IntPtr b);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_region_get_extents (IntPtr region, out Crow.Rectangle extents);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_region_get_rectangle (IntPtr region, int nth, out Crow.Rectangle rectangle);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern Status cairo_region_intersect (IntPtr dst, IntPtr other);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern Status cairo_region_intersect_rectangle (IntPtr dst, ref Crow.Rectangle rectangle);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern bool cairo_region_is_empty (IntPtr region);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern int cairo_region_num_rectangles (IntPtr region);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_region_reference (IntPtr region);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern Status cairo_region_status (IntPtr region);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern Status cairo_region_subtract (IntPtr dst, IntPtr other);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern Status cairo_region_subtract_rectangle (IntPtr dst, ref Crow.Rectangle rectangle);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_region_translate (IntPtr region, int dx, int dy);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern Status cairo_region_union (IntPtr dst, IntPtr other);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern Status cairo_region_union_rectangle (IntPtr dst, ref Crow.Rectangle rectangle);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern Status cairo_region_xor (IntPtr dst, IntPtr other);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern Status cairo_region_xor_rectangle (IntPtr dst, ref Crow.Rectangle rectangle);
-               #endregion
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_rel_curve_to (IntPtr cr, double dx1, double dy1, double dx2, double dy2, double dx3, double dy3);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_rel_line_to (IntPtr cr, double dx, double dy);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_rel_move_to (IntPtr cr, double dx, double dy);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_reset_clip (IntPtr cr);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_restore (IntPtr cr);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_rotate (IntPtr cr, double angle);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_save (IntPtr cr);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_scale (IntPtr cr, double sx, double sy);
-
-               #region ScaledFont
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_scaled_font_create (IntPtr fontFace, Matrix matrix, Matrix ctm, IntPtr options);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_scaled_font_destroy (IntPtr scaled_font);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_scaled_font_extents (IntPtr scaled_font, out FontExtents extents);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_scaled_font_get_ctm (IntPtr scaled_font, out Matrix matrix);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_scaled_font_get_font_face (IntPtr scaled_font);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_scaled_font_get_font_matrix (IntPtr scaled_font, out Matrix matrix);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_scaled_font_get_font_options (IntPtr scaled_font);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern FontType cairo_scaled_font_get_type (IntPtr scaled_font);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_scaled_font_glyph_extents (IntPtr scaled_font, IntPtr glyphs, int num_glyphs, out TextExtents extents);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_scaled_font_reference (IntPtr scaled_font);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern Status cairo_scaled_font_status (IntPtr scaled_font);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_set_scaled_font (IntPtr cr, IntPtr scaled_font);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_get_scaled_font (IntPtr cr);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               public static extern void cairo_scaled_font_text_extents (IntPtr scaled_font, byte[] utf8, out TextExtents extents);
-               #endregion
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_select_font_face (IntPtr cr, string family, FontSlant slant, FontWeight weight);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_set_antialias (IntPtr cr, Antialias antialias);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               public static extern void cairo_set_dash (IntPtr cr, double [] dashes, int ndash, double offset);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_get_dash (IntPtr cr, IntPtr dashes, out double offset);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern int cairo_get_dash_count (IntPtr cr);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_set_fill_rule (IntPtr cr, Cairo.FillRule fill_rule);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_set_font_face (IntPtr cr, IntPtr fontFace);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               public static extern void cairo_set_font_matrix (IntPtr cr, Matrix matrix);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_set_font_options (IntPtr cr, IntPtr options);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_set_font_size (IntPtr cr, double size);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_set_line_cap (IntPtr cr, LineCap line_cap);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_set_line_join (IntPtr cr, LineJoin line_join);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_set_line_width (IntPtr cr, double width);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_set_matrix (IntPtr cr, Matrix matrix);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_set_miter_limit (IntPtr cr, double limit);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_set_operator (IntPtr cr, Cairo.Operator op);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_set_source (IntPtr cr, IntPtr pattern);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_set_source_rgb (IntPtr cr, double red, double green, double blue);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_set_source_rgba (IntPtr cr, double red, double green, double blue, double alpha);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_set_source_surface (IntPtr cr, IntPtr surface, double x, double y);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_set_tolerance (IntPtr cr, double tolerance);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_show_glyphs (IntPtr ct, IntPtr glyphs, int num_glyphs);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_show_page (IntPtr cr);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_show_text (IntPtr cr, string str);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern Status cairo_status (IntPtr cr);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_status_to_string (Status status);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_stroke (IntPtr cr);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_stroke_extents (IntPtr cr, out double x1, out double y1, out double x2, out double y2);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_stroke_preserve (IntPtr cr);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_rectangle_list_destroy (IntPtr rectangle_list);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_copy_clip_rectangle_list (IntPtr cr);
-
-               #region Surface
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_surface_create_similar (IntPtr surface, Cairo.Content content, int width, int height);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_surface_destroy (IntPtr surface);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_surface_finish (IntPtr surface);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_surface_flush (IntPtr surface);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern Content cairo_surface_get_content (IntPtr surface);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_surface_get_device_offset (IntPtr surface, out double x, out double y);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_surface_get_font_options (IntPtr surface, IntPtr FontOptions);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern uint cairo_surface_get_reference_count (IntPtr surface);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern SurfaceType cairo_surface_get_type (IntPtr surface);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_surface_mark_dirty (IntPtr surface);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_surface_mark_dirty_rectangle (IntPtr surface, int x, int y, int width, int height);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_surface_reference (IntPtr surface);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_surface_set_device_offset (IntPtr surface, double x, double y);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_surface_set_fallback_resolution (IntPtr surface, double x, double y);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern Status cairo_surface_status (IntPtr surface);
-               #endregion
-
-               #region SVG surface
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_surface_write_to_png (IntPtr surface, string filename);
-
-               //[MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               //public static extern void cairo_surface_write_to_png_stream (IntPtr surface, WriteFunc writeFunc);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_svg_surface_create (string fileName, double width, double height);
-
-               //[MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               //public static extern IntPtr cairo_svg_surface_create_for_stream (double width, double height);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_svg_surface_restrict_to_version (IntPtr surface, SvgVersion version);
-               #endregion
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_text_extents (IntPtr cr, string txt, out TextExtents extents);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               public static extern void cairo_text_path (IntPtr ct, byte[] utf8);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_transform (IntPtr cr, Matrix matrix);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_translate (IntPtr cr, double tx, double ty);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_user_to_device (IntPtr cr, ref double x, ref double y);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_user_to_device_distance (IntPtr cr, ref double dx, ref double dy);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern int cairo_version ();
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_version_string ();
-
-               #region DirectFBSurface
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_directfb_surface_create (IntPtr dfb, IntPtr surface);
-               #endregion
-
-               #region win32 fonts
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_win32_font_face_create_for_logfontw (IntPtr logfontw);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_win32_scaled_font_done_font (IntPtr scaled_font);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern double cairo_win32_scaled_font_get_metrics_factor (IntPtr scaled_font);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern Status cairo_win32_scaled_font_select_font (IntPtr scaled_font, IntPtr hdc);
-               #endregion
-
-               #region win32 surface
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_win32_surface_create (IntPtr hdc);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_win32_surface_create_with_ddb (IntPtr hdc, Format format, int width, int height);
-               #endregion
-
-               #region XcbSurface
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_xcb_surface_create (IntPtr connection, uint drawable, IntPtr visual, int width, int height);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_xcb_surface_create_for_bitmap (IntPtr connection, uint bitmap, IntPtr screen, int width, int height);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_xcb_surface_set_size (IntPtr surface, int width, int height);
-               #endregion
-
-               #region XlibSurface
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_xlib_surface_create (IntPtr display, IntPtr drawable, IntPtr visual, int width, int height);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_xlib_surface_create_for_bitmap (IntPtr display, IntPtr bitmap, IntPtr screen, int width, int height);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern int cairo_xlib_surface_get_depth (IntPtr surface);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_xlib_surface_get_display (IntPtr surface);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_xlib_surface_get_drawable (IntPtr surface);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern int cairo_xlib_surface_get_height (IntPtr surface);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_xlib_surface_get_screen (IntPtr surface);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_xlib_surface_get_visual (IntPtr surface);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern int cairo_xlib_surface_get_width (IntPtr surface);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_xlib_surface_set_drawable (IntPtr surface, IntPtr drawable, int width, int height);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_xlib_surface_set_size (IntPtr surface, int width, int height);
-               #endregion
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_gl_device_set_thread_aware(IntPtr device, int value);
-
-               #region GLSurface
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_gl_surface_create (IntPtr device, uint content, int width, int height);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_gl_surface_create_for_texture (IntPtr device, uint content, uint tex, int width, int height);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_gl_surface_set_size (IntPtr surface, int width, int height);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern int cairo_gl_surface_get_width (IntPtr surface);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern int cairo_gl_surface_get_height (IntPtr surface);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_gl_surface_swapbuffers (IntPtr surf);
-               #endregion
-
-               #region GLX Functions
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_glx_device_create (IntPtr dpy, IntPtr gl_ctx);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_glx_device_get_display (IntPtr device);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_glx_device_get_context (IntPtr device);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_gl_surface_create_for_window (IntPtr device, IntPtr window, int width, int height);
-               #endregion
-
-               #region WGL Fucntions
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_wgl_device_create (IntPtr hglrc);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_wgl_device_get_context (IntPtr device);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_gl_surface_create_for_dc (IntPtr device, IntPtr hdc, int width, int height);
-               #endregion
-
-               #region EGL Functions
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_egl_device_create (IntPtr dpy, IntPtr gl_ctx);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_gl_surface_create_for_egl (IntPtr device, IntPtr eglSurface, int width, int height);
-               #endregion
-
-               #region DRM Functions
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_drm_device_get (IntPtr udev_device);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_drm_device_get_for_fd (int fd);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_drm_device_default ();
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern int cairo_drm_device_get_fd (IntPtr cairo_device);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern  void cairo_drm_device_throttle (IntPtr cairo_device);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_drm_surface_create (IntPtr cairo_device, Format format,       int width, int height);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_drm_surface_create_for_name (IntPtr cairo_device, uint name, Format format,   int width, int height, int stride);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_drm_surface_create_from_cacheable_image (IntPtr cairo_device, IntPtr imageSurface);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern Status cairo_drm_surface_enable_scan_out (IntPtr drmSurface);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_drm_surface_get_handle (IntPtr drmSurface);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_drm_surface_get_name (IntPtr drmSurface);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern Format cairo_drm_surface_get_format (IntPtr drmSurface);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern int cairo_drm_surface_get_width (IntPtr drmSurface);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern int cairo_drm_surface_get_height (IntPtr drmSurface);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern int cairo_drm_surface_get_stride (IntPtr drmSurface);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_drm_surface_map_to_image (IntPtr drmSurface);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void       cairo_drm_surface_unmap (IntPtr drmSurface,     IntPtr imageSurface);
-               #endregion
-
-               #region Device
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern Status cairo_device_acquire(IntPtr device);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_device_destroy (IntPtr device);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_device_reference (IntPtr device);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_device_release(IntPtr device);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern Status cairo_device_status(IntPtr device);
-               #endregion
-
-
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void crow_cairo_region_clear(IntPtr ctx, IntPtr reg);
-
-       }
-}
\ No newline at end of file
diff --git a/src/Mono.Cairo/NativeMethods.cs b/src/Mono.Cairo/NativeMethods.cs
deleted file mode 100644 (file)
index 1bcdaa6..0000000
+++ /dev/null
@@ -1,1065 +0,0 @@
-//
-// Cairo.cs - a simplistic binding of the Cairo API to C#.
-//
-// Authors: Duncan Mak (duncan@ximian.com)
-//          Hisham Mardam Bey (hisham.mardambey@gmail.com)
-//          John Luke (john.luke@gmail.com)
-//          Alp Toker (alp@atoker.com)
-//
-// (C) Ximian, Inc. 2003
-// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
-// Copyright (C) 2005 John Luke
-// Copyright (C) 2006 Alp Toker
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System;
-using System.Runtime.InteropServices;
-
-namespace Cairo
-{
-       // sort the functions like in the following page so it is easier to find what is missing
-       // http://cairographics.org/manual/index-all.html
-
-       internal static class NativeMethods
-       {
-#if MONOTOUCH
-               const string cairo = "__Internal";
-#else
-    const string cairo = "cairo";
-#endif
-
-        //[DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-        //internal static extern void cairo_append_path (IntPtr cr, Path path);
-
-        [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_arc (IntPtr cr, double xc, double yc, double radius, double angle1, double angle2);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_arc_negative (IntPtr cr, double xc, double yc, double radius, double angle1, double angle2);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_atsui_font_face_create_for_atsu_font_id (IntPtr font_id);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_clip (IntPtr cr);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_clip_preserve (IntPtr cr);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_clip_extents (IntPtr cr, out double x1, out double y1, out double x2, out double y2);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_close_path (IntPtr cr);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_copy_page (IntPtr cr);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_copy_path (IntPtr cr);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_copy_path_flat (IntPtr cr);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_append_path (IntPtr cr, IntPtr path);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_create (IntPtr target);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_curve_to (IntPtr cr, double x1, double y1, double x2, double y2, double x3, double y3);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_debug_reset_static_data ();
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_destroy (IntPtr cr);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_device_to_user (IntPtr cr, ref double x, ref double y);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_device_to_user_distance (IntPtr cr, ref double dx, ref double dy);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_fill (IntPtr cr);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_fill_extents (IntPtr cr, out double x1, out double y1, out double x2, out double y2);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_fill_preserve (IntPtr cr);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_font_extents (IntPtr cr, out FontExtents extents);
-
-               #region FontFace
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_font_face_destroy (IntPtr font_face);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern FontType cairo_font_face_get_type (IntPtr font_face);
-
-               //[DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               //internal static extern void cairo_font_face_get_user_data (IntPtr font_face);
-
-               //[DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               //internal static extern void cairo_font_face_set_user_data (IntPtr font_face);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_font_face_reference (IntPtr font_face);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern Status cairo_font_face_status (IntPtr font_face);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern uint cairo_font_face_get_reference_count (IntPtr surface);
-               #endregion
-
-               #region FontOptions
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_font_options_copy (IntPtr original);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_font_options_create ();
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_font_options_destroy (IntPtr options);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               [return: MarshalAs (UnmanagedType.U1)]
-               internal static extern bool cairo_font_options_equal (IntPtr options, IntPtr other);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern Antialias cairo_font_options_get_antialias (IntPtr options);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern HintMetrics cairo_font_options_get_hint_metrics (IntPtr options);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern HintStyle cairo_font_options_get_hint_style (IntPtr options);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern SubpixelOrder cairo_font_options_get_subpixel_order (IntPtr options);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern long cairo_font_options_hash (IntPtr options);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_font_options_merge (IntPtr options, IntPtr other);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_font_options_set_antialias (IntPtr options, Antialias aa);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_font_options_set_hint_metrics (IntPtr options, HintMetrics metrics);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_font_options_set_hint_style (IntPtr options, HintStyle style);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_font_options_set_subpixel_order (IntPtr options, SubpixelOrder order);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern Status cairo_font_options_status (IntPtr options);
-               #endregion
-
-               #region Freetype / FontConfig
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_ft_font_face_create_for_ft_face (IntPtr face, int load_flags);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_ft_font_face_create_for_pattern (IntPtr fc_pattern);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_ft_font_options_substitute (FontOptions options, IntPtr pattern);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_ft_scaled_font_lock_face (IntPtr scaled_font);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_ft_scaled_font_unlock_face (IntPtr scaled_font);
-               #endregion
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern Antialias cairo_get_antialias (IntPtr cr);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_get_current_point (IntPtr cr, out double x, out double y);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern FillRule cairo_get_fill_rule (IntPtr cr);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_get_font_face (IntPtr cr);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_get_font_matrix (IntPtr cr, out Matrix matrix);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_get_font_options (IntPtr cr, IntPtr options);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_get_group_target (IntPtr cr);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern LineCap cairo_get_line_cap (IntPtr cr);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern LineJoin cairo_get_line_join (IntPtr cr);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern double cairo_get_line_width (IntPtr cr);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_get_matrix (IntPtr cr, Matrix matrix);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern double cairo_get_miter_limit (IntPtr cr);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern Operator cairo_get_operator (IntPtr cr);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern uint cairo_get_reference_count (IntPtr surface);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_get_source (IntPtr cr);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_get_target (IntPtr cr);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern double cairo_get_tolerance (IntPtr cr);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_glitz_surface_create (IntPtr surface);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_glyph_extents (IntPtr cr, IntPtr glyphs, int num_glyphs, out TextExtents extents);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_glyph_path (IntPtr cr, IntPtr glyphs, int num_glyphs);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               [return: MarshalAs (UnmanagedType.U1)]
-               internal static extern bool cairo_has_current_point (IntPtr cr);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_identity_matrix (IntPtr cr);
-
-               #region Image Surface
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_image_surface_create (Cairo.Format format, int width, int height);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_image_surface_create_for_data (byte[] data, Cairo.Format format, int width, int height, int stride);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_image_surface_create_for_data (IntPtr data, Cairo.Format format, int width, int height, int stride);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_image_surface_create_from_png  (string filename);
-
-               //[DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               //internal static extern IntPtr cairo_image_surface_create_from_png_stream  (string filename);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_image_surface_get_data (IntPtr surface);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern Format cairo_image_surface_get_format (IntPtr surface);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern int cairo_image_surface_get_height (IntPtr surface);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern int cairo_image_surface_get_stride (IntPtr surface);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern int cairo_image_surface_get_width  (IntPtr surface);
-               #endregion
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               [return: MarshalAs (UnmanagedType.U1)]
-               internal static extern bool cairo_in_clip (IntPtr cr, double x, double y);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               [return: MarshalAs (UnmanagedType.U1)]
-               internal static extern bool cairo_in_fill (IntPtr cr, double x, double y);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               [return: MarshalAs (UnmanagedType.U1)]
-               internal static extern bool cairo_in_stroke (IntPtr cr, double x, double y);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_line_to (IntPtr cr, double x, double y);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_mask (IntPtr cr, IntPtr pattern);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_mask_surface (IntPtr cr, IntPtr surface, double x, double y);
-
-               #region Matrix
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_matrix_init (Matrix matrix, double xx, double yx, double xy, double yy, double x0, double y0);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_matrix_init_identity (Matrix matrix);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_matrix_init_rotate (Matrix matrix, double radians);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_matrix_init_scale (Matrix matrix, double sx, double sy);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_matrix_init_translate (Matrix matrix, double tx, double ty);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern Status cairo_matrix_invert (Matrix matrix);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_matrix_multiply (Matrix result, Matrix a, Matrix b);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_matrix_scale (Matrix matrix, double sx, double sy);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_matrix_rotate (Matrix matrix, double radians);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_matrix_transform_distance (Matrix matrix, ref double dx, ref double dy);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_matrix_transform_point (Matrix matrix, ref double x, ref double y);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_matrix_translate (Matrix matrix, double tx, double ty);
-               #endregion
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_move_to (IntPtr cr, double x, double y);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_new_path (IntPtr cr);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_new_sub_path (IntPtr cr);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_paint (IntPtr cr);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_paint_with_alpha (IntPtr cr, double alpha);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_path_destroy (IntPtr path);
-
-               #region Pattern
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_pattern_add_color_stop_rgb (IntPtr pattern, double offset, double red, double green, double blue);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_pattern_add_color_stop_rgba (IntPtr pattern, double offset, double red, double green, double blue, double alpha);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern Status cairo_pattern_get_color_stop_count (IntPtr pattern, out int count);
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern Status cairo_pattern_get_color_stop_rgba (IntPtr pattern, int index, out double offset, out double red, out double green, out double blue, out double alpha);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_pattern_create_for_surface (IntPtr surface);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern Status cairo_pattern_get_surface (IntPtr pattern, out IntPtr surface);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_pattern_create_linear (double x0, double y0, double x1, double y1);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern Status cairo_pattern_get_linear_points (IntPtr pattern, out double x0, out double y0, out double x1, out double y1);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_pattern_create_radial (double cx0, double cy0, double radius0, double cx1, double cy1, double radius1);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern Status cairo_pattern_get_radial_circles (IntPtr pattern, out double x0, out double y0, out double r0, out double x1, out double y1, out double r1);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_pattern_create_rgb (double r, double g, double b);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_pattern_create_rgba (double r, double g, double b, double a);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern Status cairo_pattern_get_rgba (IntPtr pattern, out double red, out double green, out double blue, out double alpha);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_pattern_destroy (IntPtr pattern);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern Extend cairo_pattern_get_extend (IntPtr pattern);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern Filter cairo_pattern_get_filter (IntPtr pattern);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_pattern_get_matrix (IntPtr pattern, Matrix matrix);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern PatternType cairo_pattern_get_type (IntPtr pattern);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_pattern_reference (IntPtr pattern);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_pattern_set_extend (IntPtr pattern, Extend extend);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_pattern_set_filter (IntPtr pattern, Filter filter);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_pattern_set_matrix (IntPtr pattern, Matrix matrix);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern Status cairo_pattern_status (IntPtr pattern);
-
-               //mesh pattern
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_pattern_create_mesh ();
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_mesh_pattern_begin_patch (IntPtr pattern);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_mesh_pattern_end_patch (IntPtr pattern);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_mesh_pattern_move_to (IntPtr pattern, double x, double y);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_mesh_pattern_line_to (IntPtr pattern, double x, double y);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_mesh_pattern_curve_to (IntPtr pattern, double x1, double y1,
-                       double x2, double y2, double x3, double y3);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_mesh_pattern_set_control_point (IntPtr pattern, uint point_num, double x, double y);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_mesh_pattern_set_corner_color_rgb (IntPtr pattern, uint corner_num,
-                       double r, double g, double b);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_mesh_pattern_set_corner_color_rgba (IntPtr pattern, uint corner_num,
-                       double r, double g, double b, double a);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern Status cairo_mesh_pattern_get_patch_count (IntPtr pattern, out uint count);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_mesh_pattern_get_path (IntPtr pattern, uint patch_num);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern Status cairo_mesh_pattern_get_control_point (IntPtr pattern,
-                       uint patch_num, uint point_num, out double x, out double y);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern Status cairo_mesh_pattern_get_corner_color_rgba (IntPtr pattern,
-                       uint patch_num, uint point_num, out double r, out double g, out double b, out double a);
-               #endregion
-
-               #region PdfSurface
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_pdf_surface_create (string filename, double width, double height);
-
-               //[DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               //internal static extern IntPtr cairo_pdf_surface_create_for_stream (string filename, double width, double height);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_pdf_surface_set_size (IntPtr surface, double x, double y);
-               #endregion
-
-               #region PostscriptSurface
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_ps_surface_create (string filename, double width, double height);
-
-               //[DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               //internal static extern IntPtr cairo_ps_surface_create_for_stream (string filename, double width, double height);
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_ps_surface_dsc_begin_page_setup (IntPtr surface);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_ps_surface_dsc_begin_setup (IntPtr surface);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_ps_surface_dsc_comment (IntPtr surface, string comment);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_ps_surface_set_size (IntPtr surface, double x, double y);
-               #endregion
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_pop_group (IntPtr cr);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_pop_group_to_source (IntPtr cr);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_push_group (IntPtr cr);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_push_group_with_content (IntPtr cr, Content content);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_quartz_surface_create (IntPtr context, bool flipped, int width, int height);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_rectangle (IntPtr cr, double x, double y, double width, double height);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_reference (IntPtr cr);
-
-               #region Regions
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern bool cairo_region_contains_point (IntPtr region, int x, int y);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern RegionOverlap cairo_region_contains_rectangle (IntPtr region, ref Crow.Rectangle rectangle);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_region_copy (IntPtr original);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_region_create ();
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_region_create_rectangle (ref Crow.Rectangle rect);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_region_create_rectangles (IntPtr rects, int count);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_region_destroy (IntPtr region);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern bool cairo_region_equal (IntPtr a, IntPtr b);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_region_get_extents (IntPtr region, out Crow.Rectangle extents);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_region_get_rectangle (IntPtr region, int nth, out Crow.Rectangle rectangle);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern Status cairo_region_intersect (IntPtr dst, IntPtr other);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern Status cairo_region_intersect_rectangle (IntPtr dst, ref Crow.Rectangle rectangle);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern bool cairo_region_is_empty (IntPtr region);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern int cairo_region_num_rectangles (IntPtr region);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_region_reference (IntPtr region);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern Status cairo_region_status (IntPtr region);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern Status cairo_region_subtract (IntPtr dst, IntPtr other);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern Status cairo_region_subtract_rectangle (IntPtr dst, ref Crow.Rectangle rectangle);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_region_translate (IntPtr region, int dx, int dy);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern Status cairo_region_union (IntPtr dst, IntPtr other);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern Status cairo_region_union_rectangle (IntPtr dst, ref Crow.Rectangle rectangle);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern Status cairo_region_xor (IntPtr dst, IntPtr other);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern Status cairo_region_xor_rectangle (IntPtr dst, ref Crow.Rectangle rectangle);
-               #endregion
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_rel_curve_to (IntPtr cr, double dx1, double dy1, double dx2, double dy2, double dx3, double dy3);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_rel_line_to (IntPtr cr, double dx, double dy);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_rel_move_to (IntPtr cr, double dx, double dy);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_reset_clip (IntPtr cr);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_restore (IntPtr cr);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_rotate (IntPtr cr, double angle);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_save (IntPtr cr);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_scale (IntPtr cr, double sx, double sy);
-
-               #region ScaledFont
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_scaled_font_create (IntPtr fontFace, Matrix matrix, Matrix ctm, IntPtr options);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_scaled_font_destroy (IntPtr scaled_font);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_scaled_font_extents (IntPtr scaled_font, out FontExtents extents);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_scaled_font_get_ctm (IntPtr scaled_font, out Matrix matrix);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_scaled_font_get_font_face (IntPtr scaled_font);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_scaled_font_get_font_matrix (IntPtr scaled_font, out Matrix matrix);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_scaled_font_get_font_options (IntPtr scaled_font);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern FontType cairo_scaled_font_get_type (IntPtr scaled_font);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_scaled_font_glyph_extents (IntPtr scaled_font, IntPtr glyphs, int num_glyphs, out TextExtents extents);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_scaled_font_reference (IntPtr scaled_font);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern Status cairo_scaled_font_status (IntPtr scaled_font);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_set_scaled_font (IntPtr cr, IntPtr scaled_font);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_get_scaled_font (IntPtr cr);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_scaled_font_text_extents (IntPtr scaled_font, byte[] utf8, out TextExtents extents);
-               #endregion
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_select_font_face (IntPtr cr, string family, FontSlant slant, FontWeight weight);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_set_antialias (IntPtr cr, Antialias antialias);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_set_dash (IntPtr cr, double [] dashes, int ndash, double offset);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_get_dash (IntPtr cr, IntPtr dashes, out double offset);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern int cairo_get_dash_count (IntPtr cr);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_set_fill_rule (IntPtr cr, Cairo.FillRule fill_rule);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_set_font_face (IntPtr cr, IntPtr fontFace);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_set_font_matrix (IntPtr cr, Matrix matrix);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_set_font_options (IntPtr cr, IntPtr options);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_set_font_size (IntPtr cr, double size);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_set_line_cap (IntPtr cr, LineCap line_cap);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_set_line_join (IntPtr cr, LineJoin line_join);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_set_line_width (IntPtr cr, double width);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_set_matrix (IntPtr cr, Matrix matrix);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_set_miter_limit (IntPtr cr, double limit);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_set_operator (IntPtr cr, Cairo.Operator op);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_set_source (IntPtr cr, IntPtr pattern);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_set_source_rgb (IntPtr cr, double red, double green, double blue);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_set_source_rgba (IntPtr cr, double red, double green, double blue, double alpha);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_set_source_surface (IntPtr cr, IntPtr surface, double x, double y);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_set_tolerance (IntPtr cr, double tolerance);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_show_glyphs (IntPtr ct, IntPtr glyphs, int num_glyphs);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_show_page (IntPtr cr);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_show_text (IntPtr cr, string text);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern Status cairo_status (IntPtr cr);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_status_to_string (Status status);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_stroke (IntPtr cr);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_stroke_extents (IntPtr cr, out double x1, out double y1, out double x2, out double y2);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_stroke_preserve (IntPtr cr);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_rectangle_list_destroy (IntPtr rectangle_list);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_copy_clip_rectangle_list (IntPtr cr);
-
-               #region Surface
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_surface_create_similar (IntPtr surface, Cairo.Content content, int width, int height);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_surface_destroy (IntPtr surface);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_surface_finish (IntPtr surface);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_surface_flush (IntPtr surface);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern Content cairo_surface_get_content (IntPtr surface);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_surface_get_device_offset (IntPtr surface, out double x, out double y);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_surface_get_font_options (IntPtr surface, IntPtr FontOptions);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern uint cairo_surface_get_reference_count (IntPtr surface);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern SurfaceType cairo_surface_get_type (IntPtr surface);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_surface_mark_dirty (IntPtr surface);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_surface_mark_dirty_rectangle (IntPtr surface, int x, int y, int width, int height);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_surface_reference (IntPtr surface);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_surface_set_device_offset (IntPtr surface, double x, double y);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_surface_set_fallback_resolution (IntPtr surface, double x, double y);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern Status cairo_surface_status (IntPtr surface);
-               #endregion
-
-               #region SVG surface
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_surface_write_to_png (IntPtr surface, string filename);
-
-               //[DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               //internal static extern void cairo_surface_write_to_png_stream (IntPtr surface, WriteFunc writeFunc);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_svg_surface_create (string fileName, double width, double height);
-
-               //[DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               //internal static extern IntPtr cairo_svg_surface_create_for_stream (double width, double height);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_svg_surface_restrict_to_version (IntPtr surface, SvgVersion version);
-               #endregion
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_text_extents (IntPtr cr, string text, out TextExtents extents);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_text_path (IntPtr ct, byte[] utf8);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_transform (IntPtr cr, Matrix matrix);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_translate (IntPtr cr, double tx, double ty);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_user_to_device (IntPtr cr, ref double x, ref double y);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_user_to_device_distance (IntPtr cr, ref double dx, ref double dy);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern int cairo_version ();
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_version_string ();
-
-               #region DirectFBSurface
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_directfb_surface_create (IntPtr dfb, IntPtr surface);
-               #endregion
-
-               #region win32 fonts
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_win32_font_face_create_for_logfontw (IntPtr logfontw);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_win32_scaled_font_done_font (IntPtr scaled_font);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern double cairo_win32_scaled_font_get_metrics_factor (IntPtr scaled_font);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern Status cairo_win32_scaled_font_select_font (IntPtr scaled_font, IntPtr hdc);
-               #endregion
-
-               #region win32 surface
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_win32_surface_create (IntPtr hdc);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_win32_surface_create_with_ddb (IntPtr hdc, Format format, int width, int height);
-               #endregion
-
-               #region XcbSurface
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_xcb_surface_create (IntPtr connection, uint drawable, IntPtr visual, int width, int height);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_xcb_surface_create_for_bitmap (IntPtr connection, uint bitmap, IntPtr screen, int width, int height);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_xcb_surface_set_size (IntPtr surface, int width, int height);
-               #endregion
-
-               #region XlibSurface
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_xlib_surface_create (IntPtr display, IntPtr drawable, IntPtr visual, int width, int height);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_xlib_surface_create_for_bitmap (IntPtr display, IntPtr bitmap, IntPtr screen, int width, int height);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern int cairo_xlib_surface_get_depth (IntPtr surface);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_xlib_surface_get_display (IntPtr surface);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_xlib_surface_get_drawable (IntPtr surface);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern int cairo_xlib_surface_get_height (IntPtr surface);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_xlib_surface_get_screen (IntPtr surface);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_xlib_surface_get_visual (IntPtr surface);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern int cairo_xlib_surface_get_width (IntPtr surface);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_xlib_surface_set_drawable (IntPtr surface, IntPtr drawable, int width, int height);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_xlib_surface_set_size (IntPtr surface, int width, int height);
-               #endregion
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_gl_device_set_thread_aware(IntPtr device, int value);
-
-               #region GLSurface
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_gl_surface_create (IntPtr device, uint content, int width, int height);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_gl_surface_create_for_texture (IntPtr device, uint content, uint tex, int width, int height);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_gl_surface_set_size (IntPtr surface, int width, int height);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern int cairo_gl_surface_get_width (IntPtr surface);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern int cairo_gl_surface_get_height (IntPtr surface);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_gl_surface_swapbuffers (IntPtr surf);
-               #endregion
-
-               #region GLX Functions
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_glx_device_create (IntPtr dpy, IntPtr gl_ctx);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_glx_device_get_display (IntPtr device);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_glx_device_get_context (IntPtr device);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_gl_surface_create_for_window (IntPtr device, IntPtr window, int width, int height);
-               #endregion
-
-               #region WGL Fucntions
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_wgl_device_create (IntPtr hglrc);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_wgl_device_get_context (IntPtr device);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_gl_surface_create_for_dc (IntPtr device, IntPtr hdc, int width, int height);
-               #endregion
-
-               #region EGL Functions
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_egl_device_create (IntPtr dpy, IntPtr gl_ctx);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_gl_surface_create_for_egl (IntPtr device, IntPtr eglSurface, int width, int height);
-               #endregion
-
-               #region DRM Functions
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_drm_device_get (IntPtr udev_device);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_drm_device_get_for_fd (int fd);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_drm_device_default ();
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern int cairo_drm_device_get_fd (IntPtr cairo_device);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern  void cairo_drm_device_throttle (IntPtr cairo_device);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_drm_surface_create (IntPtr cairo_device, Format format,     int width, int height);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_drm_surface_create_for_name (IntPtr cairo_device, uint name, Format format, int width, int height, int stride);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_drm_surface_create_from_cacheable_image (IntPtr cairo_device, IntPtr imageSurface);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern Status cairo_drm_surface_enable_scan_out (IntPtr drmSurface);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_drm_surface_get_handle (IntPtr drmSurface);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_drm_surface_get_name (IntPtr drmSurface);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern Format cairo_drm_surface_get_format (IntPtr drmSurface);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern int cairo_drm_surface_get_width (IntPtr drmSurface);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern int cairo_drm_surface_get_height (IntPtr drmSurface);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern int cairo_drm_surface_get_stride (IntPtr drmSurface);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_drm_surface_map_to_image (IntPtr drmSurface);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void     cairo_drm_surface_unmap (IntPtr drmSurface,     IntPtr imageSurface);
-               #endregion
-
-               #region Device
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern Status cairo_device_acquire(IntPtr device);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_device_destroy (IntPtr device);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_device_reference (IntPtr device);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_device_release(IntPtr device);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern Status cairo_device_status(IntPtr device);
-               #endregion
-       }
-}
\ No newline at end of file
diff --git a/src/Mono.Cairo/Operator.cs b/src/Mono.Cairo/Operator.cs
deleted file mode 100644 (file)
index f233a25..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-//
-// Mono.Cairo.Operator.cs
-//
-// Authors: Duncan Mak (duncan@ximian.com)
-//          Hisham Mardam Bey (hisham.mardambey@gmail.com)
-//          John Luke (john.luke@gmail.com)
-//
-// (C) Ximian, Inc. 2003
-// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
-// Copyright (C) 2005 John Luke
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System;
-
-namespace Cairo
-{
-       
-       public enum Operator
-       {
-               Clear,
-               Source,
-               Over,
-               In,
-               Out,
-               Atop,
-
-               Dest,
-               DestOver,
-               DestIn,
-               DestOut,
-               DestAtop,
-               
-               Xor,
-               Add,
-               Saturate,
-               Multiply,
-               Screen,
-               Overlay,
-               Darken,
-               Lighten,
-
-       }
-}
diff --git a/src/Mono.Cairo/PSSurface.cs b/src/Mono.Cairo/PSSurface.cs
deleted file mode 100644 (file)
index 9d6b73b..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-//
-// Mono.Cairo.PostscriptSurface.cs
-//
-// Authors:
-//    John Luke
-//
-// (C) John Luke, 2006.
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System;
-
-namespace Cairo {
-
-       public class PSSurface : Surface
-       {
-               internal PSSurface (IntPtr handle, bool owns) : base (handle, owns)
-               {
-               }
-
-               public PSSurface (string filename, double width, double height)
-                       : base (NativeMethods.cairo_ps_surface_create (filename, width, height), true)
-               {
-               }
-
-               public void BeginPageSetup ()
-               {
-                       NativeMethods.cairo_ps_surface_dsc_begin_page_setup (Handle);
-               }
-
-               public void BeginSetup ()
-               {
-                       NativeMethods.cairo_ps_surface_dsc_begin_setup (Handle);
-               }
-
-               public void DscComment (string comment)
-               {
-                       NativeMethods.cairo_ps_surface_dsc_comment (Handle, comment);
-               }
-
-               public void SetSize (double width, double height)
-               {
-                       NativeMethods.cairo_ps_surface_set_size (Handle, width, height);
-               }
-       }
-}
diff --git a/src/Mono.Cairo/Path.cs b/src/Mono.Cairo/Path.cs
deleted file mode 100644 (file)
index 184c606..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-//
-// Mono.Cairo.Context.cs
-//
-// Author:
-//   Miguel de Icaza (miguel@novell.com)
-//
-// This is an OO wrapper API for the Cairo API.
-//
-// Copyright 2007 Novell, Inc (http://www.novell.com)
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System;
-using System.Runtime.InteropServices;
-using Cairo;
-
-namespace Cairo {
-
-       public class Path : IDisposable
-       {
-               IntPtr handle = IntPtr.Zero;
-
-               internal Path (IntPtr handle)
-               {
-                       this.handle = handle;
-                       if (CairoDebug.Enabled)
-                               CairoDebug.OnAllocated (handle);
-               }
-
-               ~Path ()
-               {
-                       Dispose (false);
-               }
-
-               public IntPtr Handle { get { return handle; } }
-
-               public void Dispose ()
-               {
-                       Dispose (true);
-                       GC.SuppressFinalize (this);
-               }
-
-               protected virtual void Dispose (bool disposing)
-               {
-                       if (!disposing || CairoDebug.Enabled)
-                               CairoDebug.OnDisposed<Path> (handle, disposing);
-
-                       if (!disposing|| handle == IntPtr.Zero)
-                               return;
-
-                       NativeMethods.cairo_path_destroy (handle);
-                       handle = IntPtr.Zero;
-               }
-       }
-}
diff --git a/src/Mono.Cairo/Pattern.cs b/src/Mono.Cairo/Pattern.cs
deleted file mode 100644 (file)
index bc0a962..0000000
+++ /dev/null
@@ -1,155 +0,0 @@
-//
-// Mono.Cairo.Pattern.cs
-//
-// Author: Jordi Mas (jordi@ximian.com)
-//         Hisham Mardam Bey (hisham.mardambey@gmail.com)
-// (C) Ximian Inc, 2004.
-//
-// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System;
-using System.Collections;
-
-namespace Cairo {
-   
-       public class Pattern : IDisposable
-       {
-               [Obsolete]
-               protected IntPtr pattern = IntPtr.Zero;
-
-               public static Pattern Lookup (IntPtr pattern, bool owner)
-               {
-                       if (pattern == IntPtr.Zero)
-                               return null;
-                       
-                       PatternType pt = NativeMethods.cairo_pattern_get_type (pattern);
-                       switch (pt) {
-                       case PatternType.Solid:
-                               return new SolidPattern (pattern, owner);
-                       case PatternType.Surface:
-                               return new SurfacePattern (pattern, owner);
-                       case PatternType.Linear:
-                               return new LinearGradient (pattern, owner);
-                       case PatternType.Radial:
-                               return new RadialGradient (pattern, owner);
-                       default:
-                               return new Pattern (pattern, owner);
-                       }
-               }
-
-               [Obsolete]
-               protected Pattern ()
-               {
-               }
-               
-               internal Pattern (IntPtr handle, bool owned)
-               {
-                       Handle = handle;
-                       if (!owned)
-                               NativeMethods.cairo_pattern_reference (handle);
-                       if (CairoDebug.Enabled)
-                               CairoDebug.OnAllocated (handle);
-               }
-
-               ~Pattern ()
-               {
-                       Dispose (false);
-               }
-               
-               [Obsolete ("Use the SurfacePattern constructor")]
-               public Pattern (Surface surface)
-                       : this ( NativeMethods.cairo_pattern_create_for_surface (surface.Handle), true)
-               {
-               }
-               
-               [Obsolete]
-               protected void Reference ()
-               {
-                       NativeMethods.cairo_pattern_reference (pattern);
-               }
-
-               public void Dispose ()
-               {
-                       Dispose (true);
-                       GC.SuppressFinalize (this);
-               }
-
-               protected virtual void Dispose (bool disposing)
-               {
-                       if (!disposing || CairoDebug.Enabled)
-                               CairoDebug.OnDisposed<Pattern> (Handle, disposing);
-
-                       if (!disposing|| Handle == IntPtr.Zero)
-                               return;
-
-                       NativeMethods.cairo_pattern_destroy (Handle);
-                       Handle = IntPtr.Zero;
-               }
-
-               [Obsolete ("Use Dispose()")]
-               public void Destroy ()
-               {
-                       Dispose ();
-               }
-
-               public Status Status
-               {
-                       get { return NativeMethods.cairo_pattern_status (Handle); }
-               }
-
-               public Extend Extend
-               {
-                       get { return NativeMethods.cairo_pattern_get_extend (Handle); }
-                       set { NativeMethods.cairo_pattern_set_extend (Handle, value); }
-               }
-
-               public Matrix Matrix {
-                       set {
-                               NativeMethods.cairo_pattern_set_matrix (Handle, value);
-                       }
-
-                       get {
-                               Matrix m = new Matrix ();
-                               NativeMethods.cairo_pattern_get_matrix (Handle, m);
-                               return m;
-                       }
-               }
-
-#pragma warning disable 612
-               public IntPtr Handle {
-                       get { return pattern; }
-                       private set { pattern = value; }
-               }
-#pragma warning restore 612
-
-               [Obsolete]
-               public IntPtr Pointer {
-                       get { return pattern; }
-               }
-
-               public PatternType PatternType {
-                       get { return NativeMethods.cairo_pattern_get_type (Handle); }
-               }
-       }
-}
-
diff --git a/src/Mono.Cairo/PatternType.cs b/src/Mono.Cairo/PatternType.cs
deleted file mode 100644 (file)
index f9b9523..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-//
-// Mono.Cairo.PatternType.cs
-//
-// Authors:
-//    John Luke
-//
-// (C) John Luke, 2006.
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System;
-
-namespace Cairo {
-
-       
-       public enum PatternType
-       {
-               Solid,
-               Surface,
-               Linear,
-               Radial,
-               Mesh,
-               RasterSource
-       }
-}
-
diff --git a/src/Mono.Cairo/PdfSurface.cs b/src/Mono.Cairo/PdfSurface.cs
deleted file mode 100644 (file)
index c980f24..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-//
-// Mono.Cairo.PdfSurface.cs
-//
-// Authors:
-//    John Luke
-//
-// (C) John Luke, 2006.
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System;
-
-namespace Cairo {
-
-       public class PdfSurface : Surface
-       {
-               internal PdfSurface (IntPtr handle, bool owns) : base (handle, owns)
-               {
-               }
-
-               public PdfSurface (string filename, double width, double height)
-                       : base (NativeMethods.cairo_pdf_surface_create (filename, width, height), true)
-               {
-               }
-
-               public void SetSize (double width, double height)
-               {
-                       NativeMethods.cairo_pdf_surface_set_size (Handle, width, height);
-               }
-       }
-}
-
diff --git a/src/Mono.Cairo/Point.cs b/src/Mono.Cairo/Point.cs
deleted file mode 100644 (file)
index e72ca6c..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-//
-// Mono.Cairo.Context.cs
-//
-// Author:
-//   Duncan Mak (duncan@ximian.com)
-//   Miguel de Icaza (miguel@novell.com)
-//   Hisham Mardam Bey (hisham.mardambey@gmail.com)
-//   Alp Toker (alp@atoker.com)
-//
-// (C) Ximian Inc, 2003.
-// (C) Novell Inc, 2003.
-//
-// This is an OO wrapper API for the Cairo API.
-//
-// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-namespace Cairo {
-       public struct Point
-       {
-               public Point (int x, int y)
-               {
-                       this.x = x;
-                       this.y = y;
-               }
-
-               int x, y;
-               public int X {
-                       get { return x; }
-                       set { x = value; }
-               }
-
-               public int Y {
-                       get { return y; }
-                       set { y = value; }
-               }
-       }
-}
diff --git a/src/Mono.Cairo/PointD.cs b/src/Mono.Cairo/PointD.cs
deleted file mode 100644 (file)
index c2e3587..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-//
-// Mono.Cairo.Context.cs
-//
-// Author:
-//   Duncan Mak (duncan@ximian.com)
-//   Miguel de Icaza (miguel@novell.com)
-//   Hisham Mardam Bey (hisham.mardambey@gmail.com)
-//   Alp Toker (alp@atoker.com)
-//
-// (C) Ximian Inc, 2003.
-// (C) Novell Inc, 2003.
-//
-// This is an OO wrapper API for the Cairo API.
-//
-// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-namespace Cairo {
-
-       public struct PointD
-       {
-               public PointD (double x, double y)
-               {
-                       this.x = x;
-                       this.y = y;
-               }
-
-               double x, y;
-               public double X {
-                       get { return x; }
-                       set { x = value; }
-               }
-
-               public double Y {
-                       get { return y; }
-                       set { y = value; }
-               }
-       }
-}
diff --git a/src/Mono.Cairo/RadialGradient.cs b/src/Mono.Cairo/RadialGradient.cs
deleted file mode 100644 (file)
index 6422e00..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-//
-// Mono.Cairo.Pattern.cs
-//
-// Author: Jordi Mas (jordi@ximian.com)
-//         Hisham Mardam Bey (hisham.mardambey@gmail.com)
-// (C) Ximian Inc, 2004.
-//
-// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System;
-
-namespace Cairo {
-
-       public class RadialGradient : Gradient
-       {
-               internal RadialGradient (IntPtr handle, bool owned) : base (handle, owned)
-               {
-               }
-
-               public RadialGradient (double cx0, double cy0, double radius0, double cx1, double cy1, double radius1)
-                       : base (NativeMethods.cairo_pattern_create_radial (cx0, cy0, radius0, cx1, cy1, radius1), true)
-               {
-               }
-       }
-}
-
diff --git a/src/Mono.Cairo/Region.cs b/src/Mono.Cairo/Region.cs
deleted file mode 100644 (file)
index 4a82842..0000000
+++ /dev/null
@@ -1,196 +0,0 @@
-// Copyright (C) 2011 Novell, Inc (http://www.novell.com)
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System;
-using System.Runtime.InteropServices;
-
-namespace Cairo
-{
-       [StructLayout(LayoutKind.Sequential)]
-       public struct RectangleList {
-               public Status Status;
-               public IntPtr Rectangles;
-               public int NumRectangles;
-       }
-
-       public enum RegionOverlap {
-               In,
-               Out,
-               Part,
-       }
-
-       public class Region : IDisposable {
-
-               IntPtr handle;
-               public IntPtr Handle {
-                       get { return handle; }
-               }
-
-               [Obsolete]
-               public Region (IntPtr handle) : this (handle, false) {}
-
-               public Region (IntPtr handle, bool owned)
-               {
-                       this.handle = handle;
-                       if (!owned)
-                               NativeMethods.cairo_region_reference (handle);
-                       if (CairoDebug.Enabled)
-                               CairoDebug.OnAllocated (handle);
-               }
-
-               public Region () : this (NativeMethods.cairo_region_create () , true)
-               {
-               }
-
-               public Region (Crow.Rectangle rect)
-               {
-                       handle = NativeMethods.cairo_region_create_rectangle (ref rect);
-               }
-
-               public Region (RectangleList rects)
-               {
-                       handle = NativeMethods.cairo_region_create_rectangles (rects.Rectangles, rects.NumRectangles);
-               }
-
-               public Region Copy ()
-               {
-                       return new Region (NativeMethods.cairo_region_copy (Handle), true);
-               }
-
-               #region IDisposable
-               ~Region ()
-               {
-                       Dispose (false);
-               }
-
-               public void Dispose ()
-               {
-                       Dispose (true);
-                       GC.SuppressFinalize (this);
-               }
-
-               protected virtual void Dispose (bool disposing)
-               {
-                       if (!disposing || CairoDebug.Enabled)
-                               CairoDebug.OnDisposed<Region> (handle, disposing);
-
-                       if (!disposing|| handle == IntPtr.Zero)
-                               return;
-
-                       NativeMethods.cairo_region_destroy (Handle);
-                       handle = IntPtr.Zero;
-               }
-               #endregion
-
-               public override bool Equals (object obj)
-               {
-                       return (obj is Region) && NativeMethods.cairo_region_equal (Handle, (obj as Region).Handle);
-               }
-
-               public override int GetHashCode ()
-               {
-                       return Handle.GetHashCode ();
-               }
-
-               public Status Status {
-                       get { return NativeMethods.cairo_region_status (Handle); }
-               }
-
-               public Crow.Rectangle Extents {
-                       get {
-                               Crow.Rectangle result;
-                               NativeMethods.cairo_region_get_extents (Handle, out result);
-                               return result;
-                       }
-               }
-
-               public int NumRectangles {
-                       get { return NativeMethods.cairo_region_num_rectangles (Handle); }
-               }
-
-               public Crow.Rectangle GetRectangle (int nth)
-               {
-                       Crow.Rectangle val;
-                       NativeMethods.cairo_region_get_rectangle (Handle, nth, out val);
-                       return val;
-               }
-
-               public bool IsEmpty {
-                       get { return NativeMethods.cairo_region_is_empty (Handle); }
-               }
-
-               public RegionOverlap Contains (Crow.Rectangle rectangle)
-               {
-                       return NativeMethods.cairo_region_contains_rectangle (Handle, ref rectangle);
-               }
-
-               public bool Contains (int x, int y)
-               {
-                       return NativeMethods.cairo_region_contains_point (Handle, x, y);
-               }
-
-               public void Translate (int dx, int dy)
-               {
-                       NativeMethods.cairo_region_translate (Handle, dx, dy);
-               }
-
-               public Status Subtract (Region other)
-               {
-                       return NativeMethods.cairo_region_subtract (Handle, other.Handle);
-               }
-
-               public Status SubtractRectangle (Crow.Rectangle rectangle)
-               {
-                       return NativeMethods.cairo_region_subtract_rectangle (Handle, ref rectangle);
-               }
-
-               public Status Intersect (Region other)
-               {
-                       return NativeMethods.cairo_region_intersect (Handle, other.Handle);
-               }
-
-               public Status IntersectRectangle (Crow.Rectangle rectangle)
-               {
-                       return NativeMethods.cairo_region_intersect_rectangle (Handle, ref rectangle);
-               }
-
-               public Status Union (Region other)
-               {
-                       return NativeMethods.cairo_region_union (Handle, other.Handle);
-               }
-
-               public Status UnionRectangle (Crow.Rectangle rectangle)
-               {
-                       return NativeMethods.cairo_region_union_rectangle (Handle, ref rectangle);
-               }
-
-               public Status Xor (Region other)
-               {
-                       return NativeMethods.cairo_region_xor (Handle, other.Handle);
-               }
-
-               public Status XorRectangle (Crow.Rectangle rectangle)
-               {
-                       return NativeMethods.cairo_region_xor_rectangle (Handle, ref rectangle);
-               }
-       }
-}
diff --git a/src/Mono.Cairo/ScaledFont.cs b/src/Mono.Cairo/ScaledFont.cs
deleted file mode 100644 (file)
index 9371946..0000000
+++ /dev/null
@@ -1,123 +0,0 @@
-//
-// Mono.Cairo.ScaledFont.cs
-//
-// (c) 2008 Jordi Mas i Hernandez (jordimash@gmail.com)
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System;
-using System.Runtime.InteropServices;
-
-namespace Cairo {
-   
-       public class ScaledFont : IDisposable
-       {
-               protected IntPtr handle = IntPtr.Zero;
-
-               internal ScaledFont (IntPtr handle, bool owner)
-               {
-                       this.handle = handle;
-                       if (!owner)
-                               NativeMethods.cairo_scaled_font_reference (handle);
-                       if (CairoDebug.Enabled)
-                               CairoDebug.OnAllocated (handle);
-               }
-
-               public ScaledFont (FontFace fontFace, Matrix matrix, Matrix ctm, FontOptions options)
-                       : this (NativeMethods.cairo_scaled_font_create (fontFace.Handle, matrix, ctm, options.Handle), true)
-               {
-               }
-
-               ~ScaledFont ()
-               {
-                       Dispose (false);
-               }
-
-               public IntPtr Handle {
-                       get {
-                               return handle;
-                       }
-               }
-
-               public FontExtents FontExtents {
-                       get {
-                               FontExtents extents;
-                               NativeMethods.cairo_scaled_font_extents (handle, out extents);
-                               return extents;
-                       }
-               }
-
-               public Matrix FontMatrix {
-                       get {
-                               Matrix m;
-                               NativeMethods.cairo_scaled_font_get_font_matrix (handle, out m);
-                               return m;
-                       }
-               }
-
-               public FontType FontType {
-                       get {
-                               return NativeMethods.cairo_scaled_font_get_type (handle);
-                       }
-               }
-
-               public TextExtents GlyphExtents (Glyph[] glyphs)
-               {
-                       IntPtr ptr = Context.FromGlyphToUnManagedMemory (glyphs);
-                       TextExtents extents;
-
-                       NativeMethods.cairo_scaled_font_glyph_extents (handle, ptr, glyphs.Length, out extents);
-
-                       Marshal.FreeHGlobal (ptr);
-                       return extents;
-               }
-       
-               public Status Status
-               {
-                       get { return NativeMethods.cairo_scaled_font_status (handle); }
-               }
-
-               public void Dispose ()
-               {
-                       Dispose (true);
-                       GC.SuppressFinalize (this);
-               }
-
-               protected virtual void Dispose (bool disposing)
-               {
-                       if (!disposing || CairoDebug.Enabled)
-                               CairoDebug.OnDisposed<ScaledFont> (handle, disposing);
-
-                       if (!disposing|| handle == IntPtr.Zero)
-                               return;
-
-                       NativeMethods.cairo_scaled_font_destroy (handle);
-                       handle = IntPtr.Zero;
-               }
-
-               [Obsolete]
-               protected void Reference ()
-               {
-                       NativeMethods.cairo_scaled_font_reference (handle);
-               }
-       }
-}
-
diff --git a/src/Mono.Cairo/SolidPattern.cs b/src/Mono.Cairo/SolidPattern.cs
deleted file mode 100644 (file)
index 37864e5..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-//
-// Mono.Cairo.Pattern.cs
-//
-// Author: Jordi Mas (jordi@ximian.com)
-//         Hisham Mardam Bey (hisham.mardambey@gmail.com)
-// (C) Ximian Inc, 2004.
-//
-// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System;
-using Color = Crow.Color;
-namespace Cairo {
-
-       public class SolidPattern : Pattern
-       {
-               internal SolidPattern (IntPtr handle, bool owned) : base (handle, owned)
-               {
-               }
-
-               public SolidPattern (Color color)
-                       : base (NativeMethods.cairo_pattern_create_rgba (color.R, color.G, color.B, color.A), true)
-               {
-               }
-
-               public SolidPattern (double r, double g, double b)
-                       : base (NativeMethods.cairo_pattern_create_rgb (r, g, b), true)
-               {
-               }
-
-               public SolidPattern (double r, double g, double b, double a)
-                       : base (NativeMethods.cairo_pattern_create_rgba (r, g, b, a), true)
-               {
-               }
-
-               public SolidPattern (Color color, bool solid)
-                       : base (solid
-                                       ? NativeMethods.cairo_pattern_create_rgb (color.R, color.G, color.B)
-                                       : NativeMethods.cairo_pattern_create_rgba (color.R, color.G, color.B, color.A),
-                               true)
-               {
-               }
-
-               public Color Color {
-                       get {
-                               double red, green, blue, alpha;
-                               NativeMethods.cairo_pattern_get_rgba  (Handle, out red, out green, out blue, out alpha);
-                               return new Color (red, green, blue, alpha);
-                       }
-               }
-       }
-}
-
diff --git a/src/Mono.Cairo/Status.cs b/src/Mono.Cairo/Status.cs
deleted file mode 100644 (file)
index 54b2fec..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-//
-// Mono.Cairo.Status.cs
-//
-// Authors:
-//   Duncan Mak (duncan@ximian.com)
-//   Hisham Mardam Bey (hisham.mardambey@gmail.com)
-//   John Luke (john.luke@gmail.com)
-//   Alp Toker (alp@atoker.com)
-//
-// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
-// Copyright (C) 2005 John Luke
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System;
-
-namespace Cairo
-{
-       
-       public enum Status
-       {
-               Success = 0,
-               NoMemory,
-               InvalidRestore,
-               InvalidPopGroup,
-               NoCurrentPoint,
-               InvalidMatrix,
-               InvalidStatus,
-               NullPointer,
-               InvalidString,
-               InvalidPathData,
-               ReadError,
-               WriteError,
-               SurfaceFinished,
-               SurfaceTypeMismatch,
-               PatternTypeMismatch,
-               InvalidContent,
-               InvalidFormat,
-               InvalidVisual,
-               FileNotFound,
-               InvalidDash,
-               InvalidDscComment,
-               InvalidIndex,
-               ClipNotRepresentable,
-       }
-}
diff --git a/src/Mono.Cairo/SubpixelOrder.cs b/src/Mono.Cairo/SubpixelOrder.cs
deleted file mode 100644 (file)
index 3c3a336..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-//
-// Mono.Cairo.Cairo.cs
-//
-// Authors:
-//   John Luke (john.luke@gmail.com)
-//
-// Copyright (C) John Luke 2005
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System;
-
-namespace Cairo
-{
-       
-       public enum SubpixelOrder
-       {
-               Default,
-               Rgb,
-               Bgr,
-               Vrgb,
-               Vbgr,
-       }
-}
diff --git a/src/Mono.Cairo/Surface.cs b/src/Mono.Cairo/Surface.cs
deleted file mode 100644 (file)
index 14f4a2b..0000000
+++ /dev/null
@@ -1,233 +0,0 @@
-//
-// Mono.Cairo.Surface.cs
-//
-// Authors:
-//    Duncan Mak
-//    Miguel de Icaza.
-//    Alp Toker
-//
-// (C) Ximian Inc, 2003.
-// (C) Novell, Inc. 2003.
-//
-// This is an OO wrapper API for the Cairo API
-//
-// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System;
-using System.Collections;
-
-namespace Cairo {
-
-       public class Surface : IDisposable
-       {
-               IntPtr handle = IntPtr.Zero;
-
-               [Obsolete]
-               protected Surface()
-               {
-               }
-
-               [Obsolete]
-               protected Surface (IntPtr ptr) : this (ptr, true)
-               {
-               }
-
-               protected Surface (IntPtr handle, bool owner)
-               {
-                       this.handle = handle;
-                       if (!owner)
-                               NativeMethods.cairo_surface_reference (handle);
-                       if (CairoDebug.Enabled)
-                               CairoDebug.OnAllocated (handle);
-               }
-
-               public static Surface Lookup (IntPtr surface, bool owned)
-               {
-                       SurfaceType st = NativeMethods.cairo_surface_get_type (surface);
-                       switch (st) {
-                       case SurfaceType.Image:
-                               return new ImageSurface (surface, owned);
-                       case SurfaceType.Xlib:
-                               return new XlibSurface (surface, owned);
-                       case SurfaceType.Xcb:
-                               return new XcbSurface (surface, owned);
-                       case SurfaceType.Glitz:
-                               return new GlitzSurface (surface, owned);
-                       case SurfaceType.Win32:
-                               return new Win32Surface (surface, owned);
-                       case SurfaceType.Pdf:
-                               return new PdfSurface (surface, owned);
-                       case SurfaceType.PS:
-                               return new PSSurface (surface, owned);
-                       case SurfaceType.DirectFB:
-                               return new DirectFBSurface (surface, owned);
-                       case SurfaceType.Svg:
-                               return new SvgSurface (surface, owned);
-                       case SurfaceType.GL:
-                               return new GLSurface (surface, owned);
-                       default:
-                               return new Surface (surface, owned);
-                       }
-               }
-
-               [Obsolete ("Use an ImageSurface constructor instead.")]
-               public static Cairo.Surface CreateForImage (
-                       ref byte[] data, Cairo.Format format, int width, int height, int stride)
-               {
-                       IntPtr p = NativeMethods.cairo_image_surface_create_for_data (
-                               data, format, width, height, stride);
-
-                       return new Cairo.Surface (p, true);
-               }
-
-               [Obsolete ("Use an ImageSurface constructor instead.")]
-               public static Cairo.Surface CreateForImage (
-                       Cairo.Format format, int width, int height)
-               {
-                       IntPtr p = NativeMethods.cairo_image_surface_create (
-                               format, width, height);
-
-                       return new Cairo.Surface (p, true);
-               }
-
-
-               public Cairo.Surface CreateSimilar (
-                       Cairo.Content content, int width, int height)
-               {
-                       IntPtr p = NativeMethods.cairo_surface_create_similar (
-                               this.Handle, content, width, height);
-
-                       return Surface.Lookup(p, true);
-               }
-
-               ~Surface ()
-               {
-                       Dispose (false);
-               }
-
-               //[Obsolete ("Use Context.SetSource() followed by Context.Paint()")]
-               public void Show (Context gr, double x, double y)
-               {
-                       NativeMethods.cairo_set_source_surface (gr.Handle, handle, x, y);
-                       NativeMethods.cairo_paint (gr.Handle);
-               }
-
-               public void Dispose ()
-               {
-                       Dispose (true);
-                       GC.SuppressFinalize (this);
-               }
-
-               protected virtual void Dispose (bool disposing)
-               {
-                       if (!disposing || CairoDebug.Enabled)
-                               CairoDebug.OnDisposed<Surface> (handle, disposing);
-
-                       if (!disposing|| handle == IntPtr.Zero)
-                               return;
-
-                       NativeMethods.cairo_surface_destroy (handle);
-                       handle = IntPtr.Zero;
-               }
-               public virtual void SetSize (int width, int height) {                   
-               }
-
-               public Status Finish ()
-               {
-                       NativeMethods.cairo_surface_finish (handle);
-                       return Status;
-               }
-
-               public void Flush ()
-               {
-                       NativeMethods.cairo_surface_flush (handle);
-               }
-
-               public void MarkDirty ()
-               {
-                       NativeMethods.cairo_surface_mark_dirty (Handle);
-               }
-
-               public void MarkDirty (Crow.Rectangle rectangle)
-               {
-                       NativeMethods.cairo_surface_mark_dirty_rectangle (Handle, rectangle.X, rectangle.Y, rectangle.Width, rectangle.Height);
-               }
-
-               public IntPtr Handle {
-                       get {
-                               return handle;
-                       }
-               }
-
-               public PointD DeviceOffset {
-                       get {
-                               double x, y;
-                               NativeMethods.cairo_surface_get_device_offset (handle, out x, out y);
-                               return new PointD (x, y);
-                       }
-
-                       set {
-                               NativeMethods.cairo_surface_set_device_offset (handle, value.X, value.Y);
-                       }
-               }
-
-               [Obsolete ("Use Dispose()")]
-               public void Destroy()
-               {
-                       Dispose ();
-               }
-
-               public void SetFallbackResolution (double x, double y)
-               {
-                       NativeMethods.cairo_surface_set_fallback_resolution (handle, x, y);
-               }
-
-               public void WriteToPng (string filename)
-               {
-                       NativeMethods.cairo_surface_write_to_png (handle, filename);
-               }
-
-               [Obsolete ("Use Handle instead.")]
-               public IntPtr Pointer {
-                       get {
-                               return handle;
-                       }
-               }
-
-               public Status Status {
-                       get { return NativeMethods.cairo_surface_status (handle); }
-               }
-
-               public Content Content {
-                       get { return NativeMethods.cairo_surface_get_content (handle); }
-               }
-
-               public SurfaceType SurfaceType {
-                       get { return NativeMethods.cairo_surface_get_type (handle); }
-               }
-
-               public uint ReferenceCount {
-                       get { return NativeMethods.cairo_surface_get_reference_count (handle); }
-               }
-       }
-}
diff --git a/src/Mono.Cairo/SurfacePattern.cs b/src/Mono.Cairo/SurfacePattern.cs
deleted file mode 100644 (file)
index 4422b11..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-//
-// Mono.Cairo.Pattern.cs
-//
-// Author: Jordi Mas (jordi@ximian.com)
-//         Hisham Mardam Bey (hisham.mardambey@gmail.com)
-// (C) Ximian Inc, 2004.
-//
-// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System;
-
-namespace Cairo {
-
-       public class SurfacePattern : Pattern
-       {
-               internal SurfacePattern (IntPtr handle, bool owned) : base (handle, owned)
-               {
-               }
-
-               public SurfacePattern (Surface surface)
-                       : base (NativeMethods.cairo_pattern_create_for_surface (surface.Handle), true)
-               {
-               }
-
-               //no idea why this is here, the base one is identical, but we can't remove it now
-               public new Extend Extend {
-                       set { NativeMethods.cairo_pattern_set_extend (Handle, value); }
-                       get { return NativeMethods.cairo_pattern_get_extend (Handle); }
-               }
-
-               public Filter Filter {
-                       set { NativeMethods.cairo_pattern_set_filter (Handle, value); }
-                       get { return NativeMethods.cairo_pattern_get_filter (Handle); }
-               }
-       }
-}
-
diff --git a/src/Mono.Cairo/SurfaceType.cs b/src/Mono.Cairo/SurfaceType.cs
deleted file mode 100644 (file)
index b0b659c..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-//
-// Mono.Cairo.SurfaceType.cs
-//
-// Authors:
-//    John Luke
-//
-// (C) John Luke, 2006.
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System;
-
-namespace Cairo {
-
-       
-       public enum SurfaceType
-       {
-               Image,
-               Pdf,
-               PS,
-               Xlib,
-               Xcb,
-               Glitz,
-               Quartz,
-               Win32,
-               BeOS,
-               DirectFB,
-               Svg,
-               OS2,
-               Win32Printing,
-               QuartzImage,
-               Script,
-               Qt,
-               Recording,
-               VG,
-               GL,
-               Drm,
-               Tee,
-               Xml,
-               Skia,
-               SubSurface
-       }
-}
diff --git a/src/Mono.Cairo/SvgSurface.cs b/src/Mono.Cairo/SvgSurface.cs
deleted file mode 100644 (file)
index 4182950..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-//
-// Mono.Cairo.SvgSurface.cs
-//
-// Authors:
-//    John Luke
-//
-// (C) John Luke, 2006.
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System;
-
-namespace Cairo {
-
-       public class SvgSurface : Surface
-       {
-               internal SvgSurface (IntPtr handle, bool owns) : base (handle, owns)
-               {
-               }
-
-               public SvgSurface (string filename, double width, double height)
-                       : base (NativeMethods.cairo_svg_surface_create (filename, width, height), true)
-               {
-               }
-
-               public void RestrictToVersion (SvgVersion version)
-               {
-                       NativeMethods.cairo_svg_surface_restrict_to_version (Handle, version);
-               }
-       }
-}
-
diff --git a/src/Mono.Cairo/SvgVersion.cs b/src/Mono.Cairo/SvgVersion.cs
deleted file mode 100644 (file)
index 7f0f462..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-//
-// Mono.Cairo.SvgVersion.cs
-//
-// Authors:
-//    John Luke
-//
-// (C) John Luke, 2006.
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System;
-
-namespace Cairo {
-
-       
-       public enum SvgVersion
-       {
-               // FIXME: yuck
-               OnePointOne = 0,
-               OnePointTwo,
-       }
-}
-
diff --git a/src/Mono.Cairo/TextExtents.cs b/src/Mono.Cairo/TextExtents.cs
deleted file mode 100644 (file)
index f9cd560..0000000
+++ /dev/null
@@ -1,98 +0,0 @@
-//
-// Mono.Cairo.TextExtents.cs
-//
-// Authors:
-//   Duncan Mak (duncan@ximian.com)
-//   Hisham Mardam Bey (hisham.mardambey@gmail.com)
-//
-// (C) Ximian, Inc. 2003
-// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System;
-using System.Runtime.InteropServices;
-
-namespace Cairo
-{
-       [StructLayout (LayoutKind.Sequential)]
-       public struct TextExtents
-       {
-               double xbearing;
-               double ybearing;
-               double width;
-               double height;
-               double xadvance;
-               double yadvance;
-               
-               public double XBearing {
-                       get { return xbearing; }
-                       set { xbearing = value; }
-               }
-               
-               public double YBearing {
-                       get { return ybearing; }
-                       set { ybearing = value; }
-               }
-               
-               public double Width {
-                       get { return width; }
-                       set { width = value; }
-               }
-               
-               public double Height {
-                       get { return height; }
-                       set { height = value; }
-               }
-               
-               public double XAdvance {
-                       get { return xadvance; }
-                       set { xadvance = value; }
-               }
-               
-               public double YAdvance {
-                       get { return yadvance; }
-                       set { yadvance = value; }
-               }
-
-               public override bool Equals (object obj)
-               {
-                       if (obj is TextExtents)
-                               return this == (TextExtents)obj;
-                       return false;
-               }
-
-               public override int GetHashCode ()
-               {
-                       return (int)XBearing ^ (int)YBearing ^ (int)Width ^ (int)Height ^ (int)XAdvance ^ (int)YAdvance;
-               }
-
-               public static bool operator == (TextExtents extents, TextExtents other)
-               {
-                       return extents.XBearing == other.XBearing && extents.YBearing == other.YBearing && extents.Width == other.Width && extents.Height == other.Height && extents.XAdvance == other.XAdvance && extents.YAdvance == other.YAdvance;
-               }
-
-               public static bool operator != (TextExtents extents, TextExtents other)
-               {
-                       return !(extents == other);
-               }
-       }
-}
diff --git a/src/Mono.Cairo/WGLDevice.cs b/src/Mono.Cairo/WGLDevice.cs
deleted file mode 100644 (file)
index 03f7e3a..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-//
-// Mono.Cairo.Device.cs
-//
-// Authors:
-//                     JP Bruyère (jp_bruyere@hotmail.com)
-//
-// This is an OO wrapper API for the Cairo API
-//
-// Copyright (C) 2016 JP Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-using System;
-
-namespace Cairo
-{
-       public class WGLDevice : Device
-       {
-               public WGLDevice (IntPtr hglrc) : base (NativeMethods.cairo_wgl_device_create (hglrc), true)
-               {
-               }
-
-               public IntPtr Context {
-                       get { return NativeMethods.cairo_wgl_device_get_context (Handle); }
-               }
-       }
-}
-
diff --git a/src/Mono.Cairo/Win32Surface.cs b/src/Mono.Cairo/Win32Surface.cs
deleted file mode 100644 (file)
index dd24428..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-//
-// Mono.Cairo.Win32Surface.cs
-//
-// Authors:
-//    John Luke
-//
-// (C) John Luke, 2006.
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System;
-
-namespace Cairo {
-       
-       public class Win32Surface : Surface
-       {
-               internal Win32Surface (IntPtr handle, bool owns) : base (handle, owns)
-               {
-               }
-               
-               public Win32Surface (IntPtr hdc)
-                       : base (NativeMethods.cairo_win32_surface_create (hdc), true)
-               {
-               }
-       }
-}
diff --git a/src/Mono.Cairo/XcbSurface.cs b/src/Mono.Cairo/XcbSurface.cs
deleted file mode 100644 (file)
index b9995ee..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-//
-// Mono.Cairo.XcbSurface.cs
-//
-// Authors:
-//    Alp Toker
-//
-// (C) Alp Toker, 2006.
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System;
-
-namespace Cairo {
-       public class XcbSurface : Surface
-       {
-               internal XcbSurface (IntPtr handle, bool owns) : base (handle, owns)
-               {
-               }
-
-               public XcbSurface (IntPtr connection, uint drawable, IntPtr visual, int width, int height)
-                       : base (NativeMethods.cairo_xcb_surface_create (connection, drawable, visual, width, height), true)
-               {
-               }
-
-               public static XcbSurface FromBitmap (IntPtr connection, uint bitmap, IntPtr screen, int width, int height)
-               {
-                       IntPtr ptr = NativeMethods.cairo_xcb_surface_create_for_bitmap (connection, bitmap, screen, width, height);
-                       return new XcbSurface (ptr, true);
-               }
-               public override void SetSize (int width, int height)
-               {                       
-                       NativeMethods.cairo_xcb_surface_set_size (Handle, width, height);
-                       Console.WriteLine ("new size ({0},{1})", width, height);
-               }
-       }
-}
diff --git a/src/Mono.Cairo/XlibSurface.cs b/src/Mono.Cairo/XlibSurface.cs
deleted file mode 100644 (file)
index c0003a4..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-//
-// Mono.Cairo.XlibSurface.cs
-//
-// Authors:
-//    Duncan Mak
-//    Miguel de Icaza.
-//
-// (C) Ximian Inc, 2003.
-// (C) Novell, Inc. 2003.
-//
-// This is an OO wrapper API for the Cairo API
-//
-// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System;
-
-namespace Cairo {
-
-       public class XlibSurface : Surface
-       {
-               public XlibSurface (IntPtr display, IntPtr drawable, IntPtr visual, int width, int height)
-                       : base (NativeMethods.cairo_xlib_surface_create (display, drawable, visual, width, height), true)
-               {
-               }
-
-               public XlibSurface (IntPtr ptr, bool own) : base (ptr, own)
-               {
-               }
-
-               public static XlibSurface FromBitmap (IntPtr display, IntPtr bitmap, IntPtr screen, int width, int height)
-               {
-                       IntPtr ptr = NativeMethods.cairo_xlib_surface_create_for_bitmap (display, bitmap, screen, width, height);
-                       return new XlibSurface(ptr, true);
-               }
-
-               public void SetDrawable (IntPtr drawable, int width, int height)
-               {
-                       NativeMethods.cairo_xlib_surface_set_drawable (Handle, drawable, width, height);
-               }
-
-               public void SetSize (int width, int height)
-               {
-                       NativeMethods.cairo_xlib_surface_set_size (Handle, width, height);
-               }
-
-               public int Depth {
-                       get { return NativeMethods.cairo_xlib_surface_get_depth (Handle); }
-               }
-               
-               public IntPtr Display {
-                       get { return NativeMethods.cairo_xlib_surface_get_display (Handle); }
-               }
-
-               public IntPtr Drawable {
-                       get { return NativeMethods.cairo_xlib_surface_get_drawable (Handle); }
-               }
-
-               public int Height {
-                       get { return NativeMethods.cairo_xlib_surface_get_height (Handle); }
-               }
-
-               public IntPtr Screen {
-                       get { return NativeMethods.cairo_xlib_surface_get_screen (Handle); }
-               }
-
-               public IntPtr Visual {
-                       get { return NativeMethods.cairo_xlib_surface_get_visual (Handle); }
-               }
-
-               public int Width {
-                       get { return NativeMethods.cairo_xlib_surface_get_width (Handle); }
-               }
-
-       }
-}
diff --git a/src/MouseCursorChangedEventArgs.cs b/src/MouseCursorChangedEventArgs.cs
deleted file mode 100644 (file)
index 9c63c11..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-//
-// MouseCursorChangedEventArgs.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-
-namespace Crow
-{
-       public class MouseCursorChangedEventArgs : EventArgs
-       {
-               public XCursor NewCursor;
-               public MouseCursorChangedEventArgs (XCursor newCursor) : base()
-               {
-                       NewCursor = newCursor;
-               }
-       }
-}
diff --git a/src/ObservableList.cs b/src/ObservableList.cs
deleted file mode 100644 (file)
index 96bfccc..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-//
-// IListChanged.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp_bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-using System;
-using System.Collections.Generic;
-
-namespace Crow
-{      
-       public class ObservableList<T> : List<T> , IObservableList {
-               public event EventHandler<ListChangedEventArg> ListAdd;
-               public event EventHandler<ListChangedEventArg> ListRemove;              
-
-               public void AddElement (T elem) {
-                       this.Add(elem);
-                       ListAdd.Raise (this, new ListChangedEventArg (this.Count - 1, elem));
-               }
-               public void RemoveElement (T elem) {
-                       System.Diagnostics.Debug.WriteLine ("remove elem:" + elem);
-                       int idx = this.IndexOf (elem);
-                       this.RemoveAt (idx);
-                       ListRemove.Raise (this, new ListChangedEventArg (idx, elem));
-               }
-       }
-}
-
diff --git a/src/ParsingException.cs b/src/ParsingException.cs
deleted file mode 100644 (file)
index 1b59698..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-using System;
-
-namespace Crow.Coding
-{
-       public class ParserException : Exception
-       {
-               public int Line;
-               public int Column;
-               public string Source;
-               public ParserException(int line, int column, string txt, string source = null)
-                       : base(txt)
-               {
-                       Line = line;
-                       Column = column;
-                       Source = source;
-               }
-               public ParserException(int line, int column, string txt, Exception innerException, string source = null)
-                       : base(txt, innerException)
-               {
-                       Line = line;
-                       Column = column;
-                       Source = source;
-               }
-               public override string ToString ()
-               {
-                       return string.Format("{3}:({0},{1}): {2}", Line, Column, Message, Source);
-               }
-       }
-}
-
diff --git a/src/PerformanceMeasure.cs b/src/PerformanceMeasure.cs
deleted file mode 100644 (file)
index 3c978e8..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-//
-// PerformanceMeasure.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-using System.Diagnostics;
-
-namespace Crow
-{
-       public class PerformanceMeasure : IValueChange {
-               #region IValueChange implementation
-               public event EventHandler<ValueChangeEventArgs> ValueChanged;
-               public virtual void NotifyValueChanged(string MemberName, object _value)
-               {
-                       if (ValueChanged != null)                               
-                               ValueChanged.Invoke(this, new ValueChangeEventArgs(MemberName, _value));
-               }
-               #endregion
-
-               public Stopwatch timer = new Stopwatch ();
-               public string Name;
-               public long current, minimum, maximum, total, cptMeasures;
-               public long cancelLimit;
-
-               public PerformanceMeasure(string name = "unamed", long _cancelLimit = 0){
-                       Name = name;
-                       cancelLimit = _cancelLimit;
-                       ResetStats ();
-               }
-
-               public void StartCycle(){
-                       timer.Restart();
-               }
-               public void StopCycle(){
-                       timer.Stop();
-                       computeStats ();
-               }
-               public void NotifyChanges(){
-                       lock(this){
-                               if (cptMeasures == 0)
-                                       return;
-                               NotifyValueChanged("minimum", minimum);
-                               NotifyValueChanged("maximum", maximum);
-                               NotifyValueChanged("current", current);
-                               //                      NotifyValueChanged("total", total);
-                               //                      NotifyValueChanged("cptMeasures", cptMeasures);
-                               NotifyValueChanged("mean", total / cptMeasures);
-                       }
-               }
-
-               void computeStats(){                    
-                       current = timer.ElapsedTicks;
-                       if (current < cancelLimit)
-                               return;
-                       cptMeasures++;
-                       total += timer.ElapsedTicks;
-                       if (timer.ElapsedTicks < minimum)
-                               minimum = timer.ElapsedTicks;
-                       if (timer.ElapsedTicks > maximum)
-                               maximum = timer.ElapsedTicks;                   
-               }
-               void ResetStats(){
-                       Debug.WriteLine("reset measure cpt:{0}",cptMeasures);
-                       cptMeasures = total = current = maximum = 0;
-                       minimum = long.MaxValue;
-               }
-               void onResetClick(object sender, MouseButtonEventArgs e){
-                       lock(this)
-                               ResetStats();
-               }
-       }
-}
-
diff --git a/src/Picture.cs b/src/Picture.cs
deleted file mode 100644 (file)
index f2f4526..0000000
+++ /dev/null
@@ -1,152 +0,0 @@
-//
-// Picture.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-using System.IO;
-using Cairo;
-using System.Collections.Generic;
-
-namespace Crow
-{
-       /// <summary>
-       /// store data and dimensions for resource sharing
-       /// </summary>
-       internal class sharedPicture {
-               //TODO: restructure this whith clever conceptual classes
-               public object Data;
-               public Size Dims;
-               public sharedPicture (object _data, Size _dims){
-                       Data = _data;
-                       Dims = _dims;
-               }
-       }
-       /// <summary>
-       /// virtual class for loading and drawing picture in the interface
-       /// 
-       /// Every loaded resources are stored in a dictonary with their path as key and shared
-       /// among interface elements
-       /// </summary>
-       public abstract class Picture : Fill
-       {
-               /// <summary>
-               /// share a single store for picture resources among usage in different controls
-               /// </summary>
-               internal static Dictionary<string, sharedPicture> sharedResources = new Dictionary<string, sharedPicture>();
-
-               /// <summary>
-               /// path of the picture
-               /// </summary>
-               public string Path;
-               /// <summary>
-               /// unscaled dimensions fetched on loading
-               /// </summary>
-               public Size Dimensions;
-               /// <summary>
-               /// if true and image has to be scalled, it will be scaled in both direction
-               /// equaly
-               /// </summary>
-               public bool KeepProportions = false;
-               /// <summary>
-               /// allow or not the picture to be scalled on request by the painter
-               /// </summary>
-               public bool Scaled = true;
-
-               #region CTOR
-               /// <summary>
-               /// Initializes a new instance of Picture.
-               /// </summary>
-               public Picture ()
-               {
-               }
-               /// <summary>
-               /// Initializes a new instance of Picture by loading the image pointed by the path argument
-               /// </summary>
-               /// <param name="path">image path, may be embedded</param>
-               public Picture (string path)
-               {
-                       Path = path;
-               }
-               #endregion
-
-               #region Image Loading
-               /// <summary>
-               /// load the image for rendering from the stream given as argument
-               /// </summary>
-               /// <param name="stream">picture stream</param>
-               //public abstract void Load(Interface iface, string path);
-               #endregion
-
-               /// <summary>
-               /// abstract method to paint the image in the rectangle given in arguments according
-               /// to the Scale and keepProportion parameters.
-               /// </summary>
-               /// <param name="gr">drawing Backend context</param>
-               /// <param name="rect">bounds of the target surface to paint</param>
-               /// <param name="subPart">used for svg only</param>
-               public abstract void Paint(Context ctx, Rectangle rect, string subPart = "");
-
-               #region Operators
-               public static implicit operator Picture(string path)
-               {
-                       if (string.IsNullOrEmpty (path))
-                               return null;
-                       
-                       Picture _pic = null;
-
-                       if (path.EndsWith (".svg", true, System.Globalization.CultureInfo.InvariantCulture)) 
-                               _pic = new SvgPicture (path);
-                       else 
-                               _pic = new BmpPicture (path);
-
-                       return _pic;
-               }
-               public static implicit operator string(Picture _pic)
-               {
-                       return _pic == null ? null : _pic.Path;
-               }
-               #endregion
-
-               public static object Parse(string path)
-               {
-                       if (string.IsNullOrEmpty (path))
-                               return null;
-                       
-                       Picture _pic = null;
-
-                       if (path.EndsWith (".svg", true, System.Globalization.CultureInfo.InvariantCulture)) 
-                               _pic = new SvgPicture (path);
-                       else 
-                               _pic = new BmpPicture (path);
-
-                       return _pic;
-               }
-               public override string ToString ()
-               {
-                       return Path;
-               }
-       }
-}
-
diff --git a/src/Point.cs b/src/Point.cs
deleted file mode 100644 (file)
index 08dd443..0000000
+++ /dev/null
@@ -1,180 +0,0 @@
-//
-// Point.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-
-namespace Crow
-{
-    public struct Point
-    {
-        int _x;
-        int _y;
-
-        public int X
-        {
-            get { return _x; }
-            set { _x = value; }
-        }
-        public int Y
-        {
-            get { return _y; }
-            set { _y = value; }
-        }
-        public Point(int x, int y)
-        {
-            _x = x;
-            _y = y;
-        }
-
-               public int Length {
-                       get { return (int)Math.Sqrt (Math.Pow (_x, 2) + Math.Pow (_y, 2)); }
-               }
-               public double LengthD {
-                       get { return Math.Sqrt (Math.Pow (_x, 2) + Math.Pow (_y, 2)); }
-               }
-        public static implicit operator Cairo.Point(Point p)
-        {
-            return new Cairo.Point(p.X, p.Y);
-        }
-        public static implicit operator Cairo.PointD(Point p)
-        {
-            return new Cairo.PointD(p.X, p.Y);
-        }
-        public static implicit operator Point(int i)
-        {
-            return new Point(i, i);
-        }
-        public static Point operator /(Point p, int d)
-        {
-            return new Point(p.X / d, p.Y / d);
-        }
-        public static Point operator *(Point p, int d)
-        {
-            return new Point(p.X * d, p.Y * d);
-        }
-        public static Point operator /(Point p, double d)
-        {
-            return new Point((int)(p.X / d), (int)(p.Y / d));
-        }
-        public static Point operator *(Point p, double d)
-        {
-            return new Point((int)(p.X * d), (int)(p.Y * d));
-        }
-        public static Point operator +(Point p1, Point p2)
-        {
-            return new Point(p1.X + p2.X, p1.Y + p2.Y);
-        }
-               public static Point operator +(Point p, int i)
-               {
-                       return new Point(p.X + i, p.Y + i);
-               }
-        public static Point operator -(Point p1, Point p2)
-        {
-            return new Point(p1.X - p2.X, p1.Y - p2.Y);
-        }
-        public static bool operator >=(Point p1, Point p2)
-        {
-            return p1.X >= p2.X && p1.Y >= p2.Y ? true : false;
-        }
-        public static bool operator <=(Point p1, Point p2)
-        {
-            return p1.X <= p2.X && p1.Y <= p2.Y ? true : false;
-        }
-        public static bool operator ==(Point s, int i)
-        {
-            if (s.X == i && s.Y == i)
-                return true;
-            else
-                return false;
-        }
-        public static bool operator !=(Point s, int i)
-        {
-            if (s.X == i && s.Y == i)
-                return false;
-            else
-                return true;
-        }
-        public static bool operator >(Point s, int i)
-        {
-            if (s.X > i && s.Y > i)
-                return true;
-            else
-                return false;
-        }
-        public static bool operator <(Point s, int i)
-        {
-            if (s.X < i && s.Y < i)
-                return true;
-            else
-                return false;
-        }
-        public static bool operator ==(Point s1, Point s2)
-        {
-            if (s1.X == s2.X  && s1.Y == s2.Y)
-                return true;
-            else
-                return false;
-        }
-        public static bool operator !=(Point s1, Point s2)
-        {
-            if (s1.X == s2.X && s1.Y == s2.Y)
-                return false;
-            else
-                return true;
-        }
-
-        public override string ToString()
-        {
-                       return string.Format("({0},{1})", X, Y);
-        }
-
-        public override bool Equals(object obj)
-        {
-            return base.Equals(obj);
-        }
-        public override int GetHashCode()
-        {
-            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
deleted file mode 100644 (file)
index b593415..0000000
+++ /dev/null
@@ -1,247 +0,0 @@
-//
-// Rectangle.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-using System.Collections.Generic;
-using System.Text;
-using System.Xml.Serialization;
-using System.Runtime.InteropServices;
-
-namespace Crow
-{
-       [StructLayout(LayoutKind.Sequential)]
-       public struct Rectangle
-    {
-               internal static Type TRectangle = typeof(Rectangle);
-
-               public int X;
-               public int Y;
-               public int Width;
-               public int Height;
-
-               #region ctor
-               public Rectangle(Point p, Size s): this (p.X, p.Y, s.Width, s.Height)
-               {
-               }
-               public Rectangle(Size s) : this (0, 0, s.Width, s.Height)
-        {
-        }
-        public Rectangle(int x, int y, int width, int height)
-        {
-                       X = x;
-                       Y = y;
-                       Width = width;
-                       Height = height;
-        }
-               #endregion
-
-               #region PROPERTIES
-               [XmlIgnore]public int Left{
-            get { return X; }
-            set { X = value; }
-        }
-               [XmlIgnore]public int Top{
-            get { return Y; }
-            set { Y = value; }
-        }
-               [XmlIgnore]public int Right{
-            get { return X + Width; }
-        }
-               [XmlIgnore]public int Bottom{
-            get { return Y + Height; }
-        }
-               [XmlIgnore]public Size Size{
-            get { return new Size(Width, Height); }
-            set
-            {
-                Width = value.Width;
-                Height = value.Height;
-            }
-        }
-               [XmlIgnore]public Point Position{
-                       get { return new Point(X, Y); }
-                       set
-                       {
-                               X = value.X;
-                               Y = value.Y;
-                       }
-               }
-               [XmlIgnore]public Point TopLeft{
-            set
-            {
-                X = value.X;
-                Y = value.Y;
-            }
-            get { return new Point(X, Y); }
-        }
-               [XmlIgnore]public Point TopRight{
-            get { return new Point(Right, Y); }
-        }
-               [XmlIgnore]public Point BottomLeft{
-            get { return new Point(X, Bottom); }
-        }
-               [XmlIgnore]public Point BottomRight{
-            get { return new Point(Right, Bottom); }
-        }
-               [XmlIgnore]public Point Center
-        {
-            get { return new Point(Left + Width / 2, Top + Height / 2); }
-        }
-               #endregion
-
-               #region FUNCTIONS
-        public void Inflate(int xDelta, int yDelta)
-        {
-            this.X -= xDelta;
-            this.Width += 2 * xDelta;
-            this.Y -= yDelta;
-            this.Height += 2 * yDelta;
-        }
-               public void Inflate(int delta)
-               {
-                       Inflate (delta, delta);
-               }
-               public Rectangle Inflated (int delta) {
-                       return Inflated (delta,delta);
-               }
-               public Rectangle Inflated (int deltaX, int deltaY) {
-                       Rectangle r = this;
-                       r.Inflate (deltaX, deltaY);
-                       return r;
-               }
-        public bool ContainsOrIsEqual(Point p)
-        {
-            return (p.X >= X && p.X <= X + Width && p.Y >= Y && p.Y <= Y + Height) ?
-                true : false;
-        }
-        public bool ContainsOrIsEqual(Rectangle r)
-        {
-            return r.TopLeft >= this.TopLeft && r.BottomRight <= this.BottomRight ? true : false;
-        }
-        public bool Intersect(Rectangle r)
-        {
-            int maxLeft = Math.Max(this.Left, r.Left);
-            int minRight = Math.Min(this.Right, r.Right);
-            int maxTop = Math.Max(this.Top, r.Top);
-            int minBottom = Math.Min(this.Bottom, r.Bottom);
-
-                       return (maxLeft < minRight) && (maxTop < minBottom) ?
-                               true : false;
-        }
-        public Rectangle Intersection(Rectangle r)
-        {
-            Rectangle result = new Rectangle();
-            
-            if (r.Left >= this.Left)
-                result.Left = r.Left;
-            else
-                result.TopLeft = this.TopLeft;
-
-            if (r.Right >= this.Right)
-                result.Width = this.Right - result.Left;
-            else
-                result.Width = r.Right - result.Left;
-
-            if (r.Top >= this.Top)
-                result.Top = r.Top;
-            else
-                result.Top = this.Top;
-
-            if (r.Bottom >= this.Bottom)
-                result.Height = this.Bottom - result.Top;
-            else
-                result.Height = r.Bottom - result.Top;
-
-            return result;
-        }
-               #endregion
-
-        #region operators
-        public static Rectangle operator +(Rectangle r1, Rectangle r2)
-        {
-            int x = Math.Min(r1.X, r2.X);
-            int y = Math.Min(r1.Y, r2.Y);
-            int x2 = Math.Max(r1.Right, r2.Right);
-            int y2 = Math.Max(r1.Bottom, r2.Bottom);
-            return new Rectangle(x, y, x2 - x, y2 - y);
-        }
-               public static Rectangle operator +(Rectangle r, Point p)
-               {
-                       return new Rectangle(r.X + p.X, r.Y + p.Y, r.Width, r.Height);
-               }
-               public static Rectangle operator -(Rectangle r, Point p)
-               {
-                       return new Rectangle(r.X - p.X, r.Y - p.Y, r.Width, r.Height);
-               }
-               public static bool operator ==(Rectangle r1, Rectangle r2)
-        {
-            return r1.TopLeft == r2.TopLeft && r1.Size == r2.Size ? true : false;
-        }
-        public static bool operator !=(Rectangle r1, Rectangle r2)
-        {
-            return r1.TopLeft == r2.TopLeft && r1.Size == r2.Size ? false : true;
-        }
-        #endregion        
-
-               public static readonly Rectangle Zero = new Rectangle(0, 0, 0, 0);
-        public static Rectangle Empty
-        {
-            get { return Zero; }
-        }
-        public override string ToString()
-        {
-            return string.Format("{0},{1},{2},{3}", X, Y, Width, Height);
-        }
-        public static Rectangle Parse(string s)
-        {
-            string[] d = s.Split(new char[] { ',' });
-            return new Rectangle(
-                int.Parse(d[0]),
-                int.Parse(d[1]),
-                int.Parse(d[2]),
-                int.Parse(d[3]));
-        }
-               public override int GetHashCode ()
-               {
-                       unchecked // Overflow is fine, just wrap
-                       {
-                               int hash = 17;
-                               // Suitable nullity checks etc, of course :)
-                               hash = hash * 23 + X.GetHashCode();
-                               hash = hash * 23 + Y.GetHashCode();
-                               hash = hash * 23 + Width.GetHashCode();
-                               hash = hash * 23 + Height.GetHashCode();
-                               return hash;
-                       }
-               }
-               public override bool Equals (object obj)
-               {
-                       return (obj == null || obj.GetType() != TRectangle) ?
-                               false :
-                               this == (Rectangle)obj;
-               }
-    }
-}
diff --git a/src/ReflexionExtensions.cs b/src/ReflexionExtensions.cs
deleted file mode 100644 (file)
index 8c0b4f2..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-//
-// ReflexionExtensions.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-using System.Reflection;
-
-namespace Crow
-{
-       public static class ReflexionExtensions
-       {
-               public static string GetIcon(this MemberInfo mi)
-               {
-                       switch (mi.MemberType) {
-                       case MemberTypes.Constructor:
-                               return "ctor";
-                       case MemberTypes.Event:
-                               return "event";
-                       case MemberTypes.Field:
-                               return "field";
-                       case MemberTypes.Method:
-                               return "method";
-                       case MemberTypes.Property:
-                               return "property";
-                       case MemberTypes.TypeInfo:
-                               break;
-                       case MemberTypes.Custom:
-                               break;
-                       case MemberTypes.NestedType:
-                               break;
-                       case MemberTypes.All:
-                               break;
-                       default:
-                               return "pubfld";
-                       }
-                       return "notset";
-               }
-       }
-}
-
diff --git a/src/ScrollingEventArgs.cs b/src/ScrollingEventArgs.cs
deleted file mode 100644 (file)
index 3ff4206..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-//
-// ScrollingEventArgs.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-
-namespace Crow
-{
-       public class ScrollingEventArgs: EventArgs
-       {
-               public Orientation  Direction;
-
-               public ScrollingEventArgs (Orientation  _direction) : base()
-               {
-                       Direction = _direction;
-               }
-       }
-}
-
diff --git a/src/SelectionChangeEventArgs.cs b/src/SelectionChangeEventArgs.cs
deleted file mode 100644 (file)
index 988a697..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-//
-// SelectionChangeEventArgs.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-
-namespace Crow
-{
-       public class SelectionChangeEventArgs: EventArgs
-       {               
-               public object NewValue;
-
-
-               public SelectionChangeEventArgs (object _newValue) : base()
-               {
-                       NewValue = _newValue;
-               }
-       }
-}
-
diff --git a/src/Size.cs b/src/Size.cs
deleted file mode 100644 (file)
index 891c1fb..0000000
+++ /dev/null
@@ -1,206 +0,0 @@
-//
-// Size.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-
-namespace Crow
-{
-    public struct Size
-    {
-               internal static Type TSize = typeof(Size);
-        public static Size Zero
-        { get { return new Size(0, 0); } }
-
-        int _width;
-        int _height;
-
-        public Size(int width, int height)
-        {
-            _width = width;
-            _height = height;
-        }
-               public Size(int size)
-               {
-                       _width = size;
-                       _height = size;
-               }
-        public int Width
-        {
-            get { return _width; }
-            set { _width = value; }
-        }
-        public int Height
-        {
-            get { return _height; }
-            set { _height = value; }
-        }
-
-               #region operators
-               public static implicit operator Rectangle(Size s)
-               {
-                       return new Rectangle (s);
-               }
-        public static implicit operator Size(int i)
-        {
-            return new Size(i, i);
-        }
-               public static implicit operator string(Size s)
-               {
-                       return s.ToString ();
-               }
-               public static implicit operator Size(string s)
-               {
-                       return string.IsNullOrEmpty (s) ? Size.Zero : Parse (s);
-               }
-               public static bool operator ==(Size s1, Size s2)
-        {
-            if (s1.Width == s2.Width && s1.Height == s2.Height)
-                return true;
-            else
-                return false;
-        }
-        public static bool operator !=(Size s1, Size s2)
-        {
-            if (s1.Width == s2.Width && s1.Height == s2.Height)
-                return false;
-            else
-                return true;
-        }
-        public static bool operator >(Size s1, Size s2)
-        {
-            if (s1.Width > s2.Width && s1.Height > s2.Height)
-                return true;
-            else
-                return false;
-        }
-        public static bool operator >=(Size s1, Size s2)
-        {
-            if (s1.Width >= s2.Width && s1.Height >= s2.Height)
-                return true;
-            else
-                return false;
-        }
-        public static bool operator <(Size s1, Size s2)
-        {
-            if (s1.Width < s2.Width)
-                if (s1.Height <= s2.Height)
-                    return true;
-                else
-                    return false;
-            else if (s1.Width == s2.Width && s1.Height < s2.Height)
-                return true;
-
-            return false;
-        }
-               public static bool operator <(Size s, int i)
-               {
-                       return s.Width < i && s.Height < i ? true : false;
-               }
-               public static bool operator <=(Size s, int i)
-               {
-                       return s.Width <= i && s.Height <= i ? true : false;
-               }
-               public static bool operator >(Size s, int i)
-               {
-                       return s.Width > i && s.Height > i ? true : false;
-               }
-               public static bool operator >=(Size s, int i)
-               {
-                       return s.Width >= i && s.Height >= i ? true : false;
-               }
-               public static bool operator <=(Size s1, Size s2)
-        {
-            if (s1.Width <= s2.Width && s1.Height <= s2.Height)
-                return true;
-            else
-                return false;
-        }
-        public static bool operator ==(Size s, int i)
-        {
-            if (s.Width == i && s.Height == i)
-                return true;
-            else
-                return false;
-        }
-        public static bool operator !=(Size s, int i)
-        {
-            if (s.Width == i && s.Height == i)
-                return false;
-            else
-                return true;
-               }
-               public static Size operator +(Size s1, Size s2)
-               {
-                       return new Size(s1.Width + s2.Width, s1.Height + s2.Height);
-               }
-        public static Size operator +(Size s, int i)
-        {
-            return new Size(s.Width + i, s.Height + i);
-        }
-               public static Size operator *(Size s, int i)
-               {
-                       return new Size(s.Width * i, s.Height * i);
-               }
-               public static Size operator /(Size s, int i)
-               {
-                       return new Size(s.Width / i, s.Height / i);
-               }
-               #endregion
-
-               public override int GetHashCode ()
-               {
-                       unchecked // Overflow is fine, just wrap
-                       {
-                               int hash = 17;
-                               // Suitable nullity checks etc, of course :)
-                               hash = hash * 23 + _width.GetHashCode();
-                               hash = hash * 23 + _height.GetHashCode();
-                               return hash;
-                       }
-               }
-               public override bool Equals (object obj)
-               {
-                       return (obj == null || obj.GetType() != TSize) ?
-                               false :
-                               this == (Size)obj;
-               }
-               public override string ToString()
-               {
-                       return string.Format("{0},{1}", Width, Height);
-               }
-               public static Size Parse(string s)
-               {
-                       string[] d = s.Split(new char[] { ',' });
-                       return d.Length == 1 ? new Size(int.Parse(d[0])) : new Size(
-                               int.Parse(d[0]),
-                               int.Parse(d[1]));
-               }
-       }
-
-}
diff --git a/src/SolidColor.cs b/src/SolidColor.cs
deleted file mode 100644 (file)
index d6423d3..0000000
+++ /dev/null
@@ -1,129 +0,0 @@
-//
-// SolidColor.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Xml.Serialization;
-using System.Reflection;
-using System.Diagnostics;
-using Cairo;
-
-
-
-namespace Crow
-{
-       public class SolidColor : Fill
-    {
-               public Color color = Color.Transparent;
-               #region CTOR
-               public SolidColor(Color c)
-               {
-                       color = c;
-               }
-               #endregion
-
-               #region implemented abstract members of Fill
-
-               public override void SetAsSource (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 is SolidColor ? right is SolidColor ? true : false :
-                               left.color == right.color ? true : false;
-               }
-               public static bool operator !=(SolidColor left, SolidColor right)
-               {
-                       return left is SolidColor ? right is SolidColor ? false : true :
-                               left.color == right.color ? false : true;
-
-               }
-               public override int GetHashCode ()
-               {
-                       return color.GetHashCode();
-               }
-               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/Style.cs b/src/Style.cs
deleted file mode 100644 (file)
index 58f09f3..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-//
-// Style.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-using System.Collections.Generic;
-
-namespace Crow
-{
-       public struct FileLocation {
-               public string FilePath;
-               public int Line;
-               public int Column;
-
-               public FileLocation(string filePath, int line, int column){
-                       FilePath = filePath;
-                       Line = line;
-                       Column = column;
-               }
-               public override string ToString ()
-               {
-                       return string.Format ("{0} ({1},{2})", FilePath, Line, Column);
-               }
-       }
-       public class Style : Dictionary<string, object>
-       {
-               #if DESIGN_MODE
-               public Dictionary<string, FileLocation> Locations = new Dictionary<string, FileLocation>();
-               #endif
-               //public Dictionary<string, Style> SubStyles;//TODO:implement substyles for all tags inside a style
-               public Style () : base()
-               {
-               }
-
-       }
-}
-
diff --git a/src/StyleReader.cs b/src/StyleReader.cs
deleted file mode 100644 (file)
index c50083e..0000000
+++ /dev/null
@@ -1,186 +0,0 @@
-//
-// StyleReader.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Reflection;
-using System.Text.RegularExpressions;
-using Crow.Coding;
-
-namespace Crow
-{
-       /// <summary>
-       /// Parser for style files.
-       /// </summary>
-       //TODO: style key shared by different class may use only first encouneter class setter, which can cause bug.
-       public class StyleReader : StreamReader
-       {
-               enum States { init, classNames, members, value, endOfStatement }
-
-               States curState = States.init;
-
-               int column = 1;
-               int line = 1;
-
-               #region Character ValidityCheck
-               static Regex rxValidChar = new Regex(@"\p{Lu}|\p{Ll}|\p{Lt}|\p{Lm}|\p{Lo}|\p{Nl}|\p{Mn}|\p{Mc}|\p{Nd}|\p{Pc}|\p{Cf}");
-               static Regex rxNameStartChar = new Regex(@"_|\p{Lu}|\p{Ll}|\p{Lt}|\p{Lm}|\p{Lo}");                                                                                                                      
-               static Regex rxNameChar = new Regex(@"\p{Lu}|\p{Ll}|\p{Lt}|\p{Lm}|\p{Lo}|\p{Nl}|\p{Mn}|\p{Mc}|\p{Nd}|\p{Pc}|\p{Cf}");
-               static Regex rxDecimal = new Regex(@"[0-9]+");
-               static Regex rxHexadecimal = new Regex(@"[0-9a-fA-F]+");
-
-               public bool nextCharIsValidCharStartName
-               {
-                       get { return rxNameStartChar.IsMatch(new string(new char[]{PeekChar()})); }
-               }
-               public bool nextCharIsValidCharName
-               {
-                       get { return rxNameChar.IsMatch(new string(new char[]{PeekChar()})); }
-               }
-               #endregion
-
-               char ReadChar () {
-                       column++;
-                       return (Char)Read();
-               }
-               char PeekChar () {
-                       return (Char)Peek();
-               }
-               void SkipWhiteSpaceAndLineBreak (){
-                       while (!EndOfStream){                           
-                               if (!PeekChar ().IsWhiteSpaceOrNewLine ())
-                                       break;
-                               if (ReadChar () == '\n') {
-                                       line++;
-                                       column = 0;
-                               }
-                       }
-               }
-
-               public StyleReader (Dictionary<string, Style> styling, Stream stream, string resId)
-                       : base(stream)
-               {                       
-                       string styleKey = resId.Substring (0, resId.Length - 6);
-                       string token = "";
-                       List<string> targetsClasses = new List<string> ();
-                       string currentProperty = "";
-
-                       while (!EndOfStream) {
-                               SkipWhiteSpaceAndLineBreak ();
-                               if (EndOfStream)
-                                       break;
-
-                               switch (Peek()) {
-                               case '/':
-                                       ReadChar ();
-                                       if (PeekChar () != '/')
-                                               throw new ParserException (line, column, "Unexpected char '/'", resId);
-                                       ReadLine ();
-                                       break;
-                               case ',':
-                                       ReadChar ();
-                                       if (!(curState == States.init || curState == States.classNames) || string.IsNullOrEmpty (token))
-                                               throw new ParserException (line, column, "Unexpected char ','", resId);
-                                       targetsClasses.Add (token);
-                                       token = "";
-                                       curState = States.classNames;
-                                       break;
-                               case '{':
-                                       ReadChar ();
-                                       if (!(curState == States.init || curState == States.classNames) || string.IsNullOrEmpty (token))
-                                               throw new ParserException (line, column, "Unexpected char '{'", resId);
-                                       targetsClasses.Add (token);
-                                       token = "";
-                                       curState = States.members;
-                                       break;
-                               case '}':
-                                       ReadChar ();
-                                       if (curState != States.members)
-                                               throw new ParserException (line, column, "Unexpected char '}'", resId);
-                                       curState = States.classNames;
-                                       targetsClasses.Clear ();
-                                       break;
-                               case '=':
-                                       ReadChar ();
-                                       if (!(curState == States.init || curState == States.members))
-                                               throw new ParserException (line, column, "Unexpected char '='", resId);
-                                       currentProperty = token;
-                                       token = "";
-                                       curState = States.value;
-                                       break;
-                               case '"':
-                                       if (curState != States.value)
-                                               throw new ParserException (line, column, "Unexpected char '\"'", resId);                                        
-                                       ReadChar ();
-
-                                       while (!EndOfStream) {
-                                               char c = PeekChar();
-                                               if (c == '\"') {
-                                                       ReadChar ();
-                                                       break;
-                                               }
-                                               token += ReadChar();
-                                               if (c == '\\' && !EndOfStream)
-                                                       token += ReadChar();                                            
-                                       }
-                                       curState = States.endOfStatement;
-                                       break;
-                               case ';':
-                                       if (curState != States.endOfStatement)
-                                               throw new ParserException (line, column, "Unexpected end of statement", resId);                                 
-                                       ReadChar ();
-                                       foreach (string tc in targetsClasses) {
-                                               if (!styling.ContainsKey (tc))
-                                                       styling [tc] = new Style ();
-                                               else if (styling [tc].ContainsKey (currentProperty))
-                                                       continue;
-                                               styling [tc] [currentProperty] = token;
-                                               #if DESIGN_MODE
-                                               styling [tc].Locations[currentProperty] = new FileLocation(resId, line,column);
-                                               #endif
-                                               //System.Diagnostics.Debug.WriteLine ("Style: {3} : {0}.{1} = {2}", tc, currentProperty, token, resId);
-                                       }
-                                       token = "";
-                                       curState = States.members;
-                                       break;
-                               default:
-                                       if (curState == States.value)
-                                               throw new ParserException (line, column, "expecting value enclosed in '\"'", resId);
-                                       if (curState == States.endOfStatement)
-                                               throw new ParserException (line, column, "expecting end of statement", resId);
-
-                                       if (nextCharIsValidCharStartName) {
-                                               token += ReadChar();
-                                               while (nextCharIsValidCharName)
-                                                       token += ReadChar();
-                                       }
-                                       break;
-                               }
-                       }
-               }
-       }
-}
diff --git a/src/SvgPicture.cs b/src/SvgPicture.cs
deleted file mode 100644 (file)
index dee6c8e..0000000
+++ /dev/null
@@ -1,152 +0,0 @@
-//
-// SvgPicture.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-using System.IO;
-using Cairo;
-
-namespace Crow
-{
-       /// <summary>
-       /// Derived from FILL for loading and drawing SVG images in the interface
-       /// </summary>
-       public class SvgPicture : Picture
-       {
-               Rsvg.Handle hSVG;
-
-               #region CTOR
-               /// <summary>
-               /// Initializes a new instance of SvgPicture.
-               /// </summary>
-               public SvgPicture ()
-               {}
-               /// <summary>
-               /// Initializes a new instance of SvgPicture by loading the SVG file pointed by the path argument
-               /// </summary>
-               /// <param name="path">image path, may be embedded</param>
-               public SvgPicture (string path) : base(path)
-               {
-                       Load ();
-               }
-               #endregion
-
-               void Load ()
-               {                       
-                       if (sharedResources.ContainsKey (Path)) {
-                               sharedPicture sp = sharedResources [Path];
-                               hSVG = (Rsvg.Handle)sp.Data;
-                               Dimensions = sp.Dims;
-                               return;
-                       }
-                       using (Stream stream = Interface.StaticGetStreamFromPath (Path)) {
-                               using (MemoryStream ms = new MemoryStream ()) {
-                                       stream.CopyTo (ms);
-
-                                       hSVG = new Rsvg.Handle (ms.ToArray ());
-                                       Dimensions = new Size (hSVG.Dimensions.Width, hSVG.Dimensions.Height);
-                               }
-                       }
-                       sharedResources [Path] = new sharedPicture (hSVG, Dimensions);
-               }
-
-               public void LoadSvgFragment (string fragment) {                 
-                       hSVG = new Rsvg.Handle (System.Text.Encoding.Unicode.GetBytes(fragment));
-                       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 (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
-
-               /// <summary>
-               /// paint the image in the rectangle given in arguments according
-               /// to the Scale and keepProportion parameters.
-               /// </summary>
-               /// <param name="gr">drawing Backend context</param>
-               /// <param name="rect">bounds of the target surface to paint</param>
-               /// <param name="subPart">limit rendering to svg part named 'subPart'</param>
-               public override void Paint (Context gr, Rectangle rect, string subPart = "")
-               {
-                       if (hSVG == null)
-                               return;
-                       float widthRatio = 1f;
-                       float heightRatio = 1f;
-
-                       if (Scaled) {
-                               widthRatio = (float)rect.Width / Dimensions.Width;
-                               heightRatio = (float)rect.Height / Dimensions.Height;
-                       }
-                       if (KeepProportions) {
-                               if (widthRatio < heightRatio)
-                                       heightRatio = widthRatio;
-                               else
-                                       widthRatio = heightRatio;
-                       }
-                               
-                       gr.Save ();
-
-                       gr.Translate (rect.Left,rect.Top);
-                       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 ();                  
-               }
-       }
-}
-
diff --git a/src/TextChangeEventArgs.cs b/src/TextChangeEventArgs.cs
deleted file mode 100644 (file)
index 33ca405..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-//
-// TextChangeEventArgs.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-
-namespace Crow
-{
-       public class TextChangeEventArgs: EventArgs
-       {
-               public String Text;
-
-               public TextChangeEventArgs (string _newValue) : base()
-               {
-                       Text = _newValue;
-               }
-       }
-}
-
diff --git a/src/ValueChangeEventArgs.cs b/src/ValueChangeEventArgs.cs
deleted file mode 100644 (file)
index e8293de..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-//
-// ValueChangeEventArgs.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-
-namespace Crow
-{
-       public class ValueChangeEventArgs: EventArgs
-       {
-               public string MemberName;
-               public object NewValue;
-
-
-               public ValueChangeEventArgs (string _memberName, object _newValue) : base()
-               {
-                       MemberName = _memberName;
-                       NewValue = _newValue;
-               }
-       }
-}
-
diff --git a/src/XCursor.cs b/src/XCursor.cs
deleted file mode 100644 (file)
index 1cca510..0000000
+++ /dev/null
@@ -1,151 +0,0 @@
-//
-// XCursor.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-using System.IO;
-using System.Diagnostics;
-using System.Collections.Generic;
-
-namespace Crow
-{
-       public class XCursorFile
-       {
-               const uint XC_TYPE_IMG = 0xfffd0002;
-
-               class toc
-               {
-                       public uint type;
-                       public uint subtype;
-                       public uint pos;
-
-                       public toc(BinaryReader sr)
-                       {
-                               type = sr.ReadUInt32();
-                               subtype = sr.ReadUInt32();
-                               pos = sr.ReadUInt32();
-                       }
-               }
-
-               public List<XCursor> Cursors = new List<XCursor>();
-
-
-               static XCursorFile loadFromStream(Stream s)
-               {
-                       List<toc> tocList = new List<toc> ();
-                       XCursorFile tmp = new XCursorFile ();
-
-                       using (BinaryReader sr = new BinaryReader (s)) {
-                               byte[] data;
-                               //magic: CARD32 ’Xcur’ (0x58, 0x63, 0x75, 0x72)
-                               if (new string (sr.ReadChars (4)) != "Xcur") {
-                                       Debug.WriteLine ("XCursor Load error: Wrong magic");
-                                       return null;
-                               }
-                               //header: CARD32 bytes in this header
-                               uint headerLength = sr.ReadUInt32 ();
-                               //version: CARD32 file version number
-                               uint version = sr.ReadUInt32 ();
-                               //ntoc: CARD32 number of toc entries
-                               uint nbToc = sr.ReadUInt32 ();
-                               //toc: LISTofTOC table of contents
-                               for (uint i = 0; i < nbToc; i++) {
-                                       tocList.Add (new toc (sr));
-                               }
-
-                               foreach (toc t in tocList) {
-                                       if (t.type != XC_TYPE_IMG)
-                                               continue;
-
-                                       sr.BaseStream.Seek (t.pos, SeekOrigin.Begin);
-                                       tmp.Cursors.Add(imageLoad (sr));                                                
-                               }
-                       }
-                       return tmp;
-               }
-
-               public static XCursorFile Load(Interface iface, string path)
-               {
-                       return loadFromStream (iface.GetStreamFromPath (path));
-               }
-
-               static XCursor imageLoad(BinaryReader sr)
-               {
-                       XCursor tmp = new XCursor();
-                       //                      header: 36 Image headers are 36 bytes
-                       uint header = sr.ReadUInt32();
-                       //                      type: 0xfffd0002 Image type is 0xfffd0002
-                       uint type = sr.ReadUInt32();
-                       //                      subtype: CARD32 Image subtype is the nominal size
-                       uint subtype = sr.ReadUInt32();
-                       //                      version: 1
-                       uint version = sr.ReadUInt32();
-                       //                      width: CARD32 Must be less than or equal to 0x7fff
-                       tmp.Width = sr.ReadUInt32();
-                       //                      height: CARD32 Must be less than or equal to 0x7fff
-                       tmp.Height = sr.ReadUInt32();
-                       //                      xhot: CARD32 Must be less than or equal to width
-                       tmp.Xhot = sr.ReadUInt32();
-                       //                      yhot: CARD32 Must be less than or equal to height
-                       tmp.Yhot = sr.ReadUInt32();
-                       //                      delay: CARD32 Delay between animation frames in milliseconds
-                       tmp.Delay = sr.ReadUInt32();
-                       //                      pixels: LISTofCARD32 Packed ARGB format pixels
-                       tmp.data = sr.ReadBytes((int)(tmp.Width * tmp.Height * 4));
-                       return tmp;
-               }
-       }
-       public class XCursor
-       {
-               public static XCursor Default;
-               public static XCursor Cross;
-               public static XCursor Arrow;
-               public static XCursor Text;
-               public static XCursor SW;
-               public static XCursor SE;
-               public static XCursor NW;
-               public static XCursor NE;
-               public static XCursor N;
-               public static XCursor S;
-               public static XCursor V;
-               public static XCursor H;
-
-               public uint Width;
-               public uint Height;
-               public uint Xhot;
-               public uint Yhot;
-               public uint Delay;
-               public byte[] data;
-
-               public XCursor ()
-               {
-               }
-//             public static implicit operator MouseCursor(XCursor xc)
-//             {
-//                     return new MouseCursor((int)xc.Xhot, (int)xc.Yhot, (int)xc.Width, (int)xc.Height,xc.data);
-//             }
-       }
-}
-
diff --git a/src/backends/Display.cs b/src/backends/Display.cs
deleted file mode 100644 (file)
index 05832ab..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-using System;
-using System.Runtime.InteropServices;
-
-namespace XLib
-{
-    public class Display : IDisposable
-    {
-        internal IntPtr handle;
-        internal Int32 screen;
-        IntPtr lastEvent;
-
-        public Display()
-        {
-            handle = XOpenDisplay(IntPtr.Zero);
-            if (handle == IntPtr.Zero)
-                throw new NotSupportedException("[XLib] Failed to open display.");
-
-            screen = XDefaultScreen(handle);
-            lastEvent = Marshal.AllocHGlobal(96);
-        }
-
-        /*public IntPtr NextEvent {
-            get {                
-                NativeMethods.XNextEvent(handle, lastEvent);
-                return lastEvent;
-            }
-        }*/
-
-               #region IDisposable Support
-               private bool disposedValue = false; // To detect redundant calls
-
-        protected virtual void Dispose(bool disposing)
-        {
-            if (!disposedValue)
-            {
-                if (disposing)
-                {
-                    // TODO: dispose managed state (managed objects).
-                }
-
-                //Marshal.FreeHGlobal (lastEvent);
-                NativeMethods.XCloseDisplay (handle);
-
-                disposedValue = true;
-            }
-        }
-
-        // TODO: override a finalizer only if Dispose(bool disposing) above has code to free unmanaged resources.
-        ~Display() {
-           // Do not change this code. Put cleanup code in Dispose(bool disposing) above.
-            Dispose(false);
-        }
-
-        // This code added to correctly implement the disposable pattern.
-        public void Dispose()
-        {
-            Dispose(true);
-            GC.SuppressFinalize(this);
-        }
-        #endregion
-
-
-    }
-}
diff --git a/src/backends/IBackend.cs b/src/backends/IBackend.cs
deleted file mode 100644 (file)
index 2555d56..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-//
-// IBackend.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp_bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-using System;
-
-namespace Crow
-{
-       public interface IBackend
-       {
-               void Init(Interface iFace);
-               void CleanUp();
-               void Flush();
-               void ProcessEvents();
-       }
-}
-
diff --git a/src/backends/IKeyboard.cs b/src/backends/IKeyboard.cs
deleted file mode 100644 (file)
index d04655e..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-//
-// IKeyboard.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp_bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-using System;
-
-namespace Crow
-{
-       public interface IKeyboard
-       {
-               event EventHandler<KeyEventArgs> KeyDown;
-               event EventHandler<KeyEventArgs> KeyUp;
-               event EventHandler<KeyPressEventArgs> KeyPress;
-
-
-               void HandleEvent (uint Keycode, bool pressed);
-
-               bool IsDown (Key key);
-               bool Shift { get; }
-               bool Ctrl { get; }
-               bool Alt { get; }
-
-               void Destroy ();
-       }
-}
-
diff --git a/src/backends/Window.cs b/src/backends/Window.cs
deleted file mode 100644 (file)
index f74a5fd..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-using System;
-using System.Runtime.InteropServices;
-
-namespace XLib
-{
-    
-    public enum EventType {
-        KeyPress = 2,
-        KeyRelease,
-        ButtonPress,
-        ButtonRelease,
-        MotionNotify,
-        EnterNotify,
-        LeaveNotify,
-        FocusIn,
-        FocusOut,
-        KeymapNotify,
-        Expose,
-        GraphicsExpose,
-        NoExpose,
-        VisibilityNotify,
-        CreateNotify,
-        DestroyNotify,
-        UnmapNotify,
-        MapNotify,
-        MapRequest,
-        ReparentNotify,
-        ConfigureNotify,
-        ConfigureRequest,
-        GravityNotify,
-        ResizeRequest,
-        CirculateNotify,
-        CirculateRequest,
-        PropertyNotify,
-        SelectionClear,
-        SelectionRequest,
-        SelectionNotify,
-        ColormapNotify,
-        ClientMessage,
-        MappingNotify,
-        GenericEvent,
-        LASTEvent = 36  /* must be bigger than any event # */
-       }
-    public class Window 
-    {
-        IntPtr handle;
-        Display disp;
-
-               public Window (Display display, UInt32 width = 800, UInt32 height = 600, Int32 x = 0, Int32 y = 0) {
-            disp = display;
-            handle = NativeMethods.XCreateSimpleWindow (disp.handle, NativeMethods.XDefaultRootWindow(disp.handle), x, y, width, height,
-                                                                                                                  0, IntPtr.Zero, IntPtr.Zero);
-                       if (handle == IntPtr.Zero)
-                               throw new NotSupportedException("[XLib] Failed to create window.");
-
-            NativeMethods.XSelectInput (disp.handle, handle, EventMask.ExposureMask | EventMask.KeyPressMask);
-
-            NativeMethods.XMapWindow (disp.handle, handle);
-               }
-
-    }
-}
diff --git a/src/backends/xcb/XCBBackend.cs b/src/backends/xcb/XCBBackend.cs
deleted file mode 100644 (file)
index 4d0a2a8..0000000
+++ /dev/null
@@ -1,490 +0,0 @@
-//
-// XLibBackend.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp_bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-using System;
-using System.Diagnostics;
-using System.Runtime.InteropServices;
-using System.Text;
-
-
-
-namespace Crow.XCB
-{      
-       using xcb_window_t = System.UInt32;
-       using xcb_pixmap_t = System.UInt32;
-       using xcb_cursor_t = System.UInt32;
-       using xcb_font_t = System.UInt32;
-       using xcb_colormap_t = System.UInt32;
-       using xcb_atom_t = System.UInt32;
-       using xcb_drawable_t = System.UInt32;
-       using xcb_visualid_t = System.UInt32;
-       using xcb_keysym_t = System.UInt32;
-       using xcb_keycode_t = System.Byte;
-       using xcb_timestamp_t = System.UInt32;
-
-       using xcb_void_cookie_t = System.UInt32;
-
-       public class XCBBackend : IBackend
-       {
-               const byte XCB_COPY_FROM_PARENT = 0;
-
-
-               enum xcb_window_class_t : ushort {
-                       COPY_FROM_PARENT = 0,
-                       INPUT_OUTPUT = 1,
-                       INPUT_ONLY = 2
-               }
-
-               enum xcb_button_t : byte {
-                       Left = 1,
-                       Middle,
-                       Right,
-                       WheelUp,
-                       WheelDown,
-                       But6,
-                       But7,
-                       But8,
-                       But9,
-                       But10,
-               }
-
-               [Flags]
-               enum xcb_event_mask_t : uint {
-                       NO_EVENT = 0,
-                       KEY_PRESS = 1,
-                       KEY_RELEASE = 2,
-                       BUTTON_PRESS = 4,
-                       BUTTON_RELEASE = 8,
-                       ENTER_WINDOW = 16,
-                       LEAVE_WINDOW = 32,
-                       POINTER_MOTION = 64,
-                       POINTER_MOTION_HINT = 128,
-                       BUTTON_1_MOTION = 256,
-                       BUTTON_2_MOTION = 512,
-                       BUTTON_3_MOTION = 1024,
-                       BUTTON_4_MOTION = 2048,
-                       BUTTON_5_MOTION = 4096,
-                       BUTTON_MOTION = 8192,
-                       KEYMAP_STATE = 16384,
-                       EXPOSURE = 32768,
-                       VISIBILITY_CHANGE = 65536,
-                       STRUCTURE_NOTIFY = 131072,
-                       RESIZE_REDIRECT = 262144,
-                       SUBSTRUCTURE_NOTIFY = 524288,
-                       SUBSTRUCTURE_REDIRECT = 1048576,
-                       FOCUS_CHANGE = 2097152,
-                       PROPERTY_CHANGE = 4194304,
-                       COLOR_MAP_CHANGE = 8388608,
-                       OWNER_GRAB_BUTTON = 16777216
-               }
-
-               enum xcb_event_type : byte {
-                       KEY_PRESS = 2,
-                       KEY_RELEASE,
-                       BUTTON_PRESS,
-                       BUTTON_RELEASE,
-                       MOTION_NOTIFY,
-                       ENTER_NOTIFY,
-                       LEAVE_NOTIFY,
-                       FOCUS_IN,
-                       FOCUS_OUT,
-                       KEYMAP_NOTIFY,
-                       EXPOSE,
-                       GRAPHICS_EXPOSURE,
-                       NO_EXPOSURE,
-                       VISIBILITY_NOTIFY,
-                       CREATE_NOTIFY,
-                       DESTROY_NOTIFY,
-                       UNMAP_NOTIFY,
-                       MAP_NOTIFY,
-                       MAP_REQUEST,
-                       REPARENT_NOTIFY,
-                       CONFIGURE_NOTIFY,
-                       CONFIGURE_REQUEST,
-                       GRAVITY_NOTIFY,
-                       RESIZE_REQUEST,
-                       CIRCULATE_NOTIFY,
-                       CIRCULATE_REQUEST,
-                       PROPERTY_NOTIFY,
-                       SELECTION_CLEAR,
-                       SELECTION_REQUEST,
-                       SELECTION_NOTIFY,
-                       COLORMAP_NOTIFY,
-                       CLIENT_MESSAGE,
-                       MAPPING_NOTIFY,
-                       GE_GENERIC,
-               }
-               [Flags]
-               enum xcb_cw_t : uint {
-                       BACK_PIXMAP = 1,
-                       BACK_PIXEL = 2,
-                       BORDER_PIXMAP = 4,
-                       BORDER_PIXEL = 8,
-                       BIT_GRAVITY = 16,
-                       WIN_GRAVITY = 32,
-                       BACKING_STORE = 64,
-                       BACKING_PLANES = 128,
-                       BACKING_PIXEL = 256,
-                       OVERRIDE_REDIRECT = 512,
-                       SAVE_UNDER = 1024,
-                       EVENT_MASK = 2048,
-                       DONT_PROPAGATE = 4096,
-                       COLORMAP = 8192,
-                       CURSOR = 16384
-               }
-
-               [StructLayout(LayoutKind.Sequential)]
-               struct xcb_generic_event_t{
-                       public xcb_event_type response_type;  /**< Type of the response */
-                       public byte pad0;           /**< Padding */
-                       public UInt16 sequence;       /**< Sequence number */
-                       [MarshalAs(UnmanagedType.ByValArray, SizeConst = 7)]
-                       UInt32[] pad;
-                       public UInt32 full_sequence;  /**< full sequence */
-               }
-
-               [StructLayout(LayoutKind.Explicit, Size = 32)]
-               struct xcb_event_t{
-                       [FieldOffsetAttribute(0)]
-                       public xcb_event_type response_type;
-
-                       [FieldOffsetAttribute(1)]
-                       public byte detail;
-                       [FieldOffsetAttribute(1)]
-                       public xcb_keycode_t keycode;
-                       [FieldOffsetAttribute(1)]
-                       public xcb_button_t button;
-
-                       [FieldOffsetAttribute(2)]
-                       public UInt16 sequence;
-                       [FieldOffsetAttribute(4)]
-                       public xcb_timestamp_t time;
-                       [FieldOffsetAttribute(8)]
-                       public xcb_window_t root;
-
-                       //expose event fields
-                       [FieldOffsetAttribute(4)]
-                       public xcb_window_t window;
-                       [FieldOffsetAttribute(8)]
-                       public UInt16 x;
-                       [FieldOffsetAttribute(10)]
-                       public UInt16 y;
-                       [FieldOffsetAttribute(12)]
-                       public UInt16 width;
-                       [FieldOffsetAttribute(14)]
-                       public UInt16 height;
-                       [FieldOffsetAttribute(14)]
-                       public UInt16 count;
-                       /// 
-
-                       [FieldOffsetAttribute(12)]
-                       public xcb_window_t evt;
-                       [FieldOffsetAttribute(16)]
-                       public xcb_window_t child;
-                       [FieldOffsetAttribute(20)]
-                       public UInt16 root_x;
-                       [FieldOffsetAttribute(22)]
-                       public UInt16 root_y;
-                       [FieldOffsetAttribute(24)]
-                       public UInt16 event_x;
-                       [FieldOffsetAttribute(26)]
-                       public UInt16 event_y;
-                       [FieldOffsetAttribute(28)]
-                       public UInt16 state;
-                       [FieldOffsetAttribute(30)]
-                       public byte same_screen;
-
-                       [FieldOffsetAttribute(31)]
-                       public byte same_screen_focus;
-               }
-
-               [StructLayout(LayoutKind.Sequential)]
-               struct xcb_key_press_event_t {
-                       public xcb_event_type response_type;
-                       public xcb_keycode_t detail;
-                       public UInt16 sequence;
-                       public xcb_timestamp_t time;
-                       public xcb_window_t root;
-                       public xcb_window_t evt;
-                       public xcb_window_t child;
-                       public UInt16 root_x;
-                       public UInt16 root_y;
-                       public UInt16 event_x;
-                       public UInt16 event_y;
-                       public UInt16 state;
-                       public byte same_screen;
-                       byte pad0;
-               }
-               [StructLayout(LayoutKind.Sequential)]
-               struct xcb_button_press_event_t {
-                       public xcb_event_type response_type;
-                       public xcb_button_t detail;
-                       public UInt16 sequence;
-                       public xcb_timestamp_t time;
-                       public xcb_window_t root;
-                       public xcb_window_t evt;
-                       public xcb_window_t child;
-                       public UInt16 root_x;
-                       public UInt16 root_y;
-                       public UInt16 event_x;
-                       public UInt16 event_y;
-                       public UInt16 state;
-                       public byte same_screen;
-                       byte pad0;
-               }
-
-               [StructLayout(LayoutKind.Sequential)]
-               struct xcb_motion_notify_event_t {
-                       public xcb_event_type response_type;
-                       public byte detail;
-                       public UInt16 sequence;
-                       public xcb_timestamp_t time;
-                       public xcb_window_t root;
-                       public xcb_window_t evt;
-                       public xcb_window_t child;
-                       public UInt16 root_x;
-                       public UInt16 root_y;
-                       public UInt16 event_x;
-                       public UInt16 event_y;
-                       public UInt16 state;
-                       public byte same_screen;
-                       byte pad0;
-               }
-               [StructLayout(LayoutKind.Sequential)]
-               struct xcb_iterator_t {
-                       public IntPtr data;
-                       public int rem;
-                       public int index;
-               }
-
-               [StructLayout(LayoutKind.Sequential)]
-               struct xcb_screen_t {
-                       public xcb_window_t root;
-                       public xcb_colormap_t default_colormap;
-                       public UInt32 white_pixel;
-                       public UInt32 black_pixel;
-                       public UInt32 current_input_masks;
-                       public UInt16 width_in_pixels;
-                       public UInt16 height_in_pixels;
-                       public UInt16 width_in_millimeters;
-                       public UInt16 height_in_millimeters;
-                       public UInt16 min_installed_maps;
-                       public UInt16 max_installed_maps;
-                       public xcb_visualid_t root_visual;
-                       public byte backing_stores;
-                       public byte save_unders;
-                       public byte root_depth;
-                       public byte allowed_depths_len;
-               }
-
-               [StructLayout(LayoutKind.Sequential)]
-               struct xcb_visualtype_t {
-                       public xcb_visualid_t visual_id;
-                       public byte _class;
-                       public byte  bits_per_rgb_value;
-                       public UInt16 colormap_entries;
-                       public UInt32 red_mask;
-                       public UInt32 green_mask;
-                       public UInt32 blue_mask;
-                       [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
-                       byte[] pad;
-               }
-
-               [StructLayout(LayoutKind.Sequential)]
-               struct xcb_generic_reply_t{
-                       public byte response_type;  /**< Type of the response */
-                       byte pad0;           /**< Padding */
-                       public UInt16 sequence;       /**< Sequence number */
-                       public UInt32 length;         /**< Length of the response */
-               }
-
-
-
-               #region pinvoke XCB
-               [DllImportAttribute("xcb")]
-               static extern IntPtr xcb_connect(string displayName, IntPtr screenNum);
-               [DllImportAttribute("xcb")]
-               static extern IntPtr xcb_get_setup(IntPtr connection);           
-               [DllImportAttribute("xcb")]
-               static extern IntPtr xcb_flush(IntPtr connection);
-               [DllImportAttribute("xcb")]
-               static extern UInt32 xcb_generate_id(IntPtr connection);
-
-               [DllImportAttribute("xcb")]
-               static extern xcb_iterator_t xcb_setup_roots_iterator(IntPtr setup);
-               [DllImportAttribute("xcb")]
-               static extern xcb_iterator_t xcb_screen_allowed_depths_iterator(IntPtr scr);
-               [DllImportAttribute("xcb")]
-               static extern xcb_iterator_t xcb_depth_visuals_iterator(IntPtr depth);
-
-               [DllImportAttribute("xcb")]
-               static extern void xcb_screen_next(ref xcb_iterator_t scr_iterator);
-               [DllImportAttribute("xcb")]
-               static extern void xcb_depth_next(ref xcb_iterator_t depth_iterator);
-               [DllImportAttribute("xcb")]
-               static extern void xcb_visualtype_next(ref xcb_iterator_t depth_visual_iterator);
-
-               [DllImportAttribute("xcb")]
-               static extern xcb_void_cookie_t xcb_create_window(IntPtr connection, byte depth, xcb_window_t win, UInt32 parent,
-                       Int16 x, Int16 y, UInt16 width, UInt16 height, UInt16 border,
-                       xcb_window_class_t _class, xcb_visualid_t visual, xcb_cw_t mask, IntPtr valueList);
-               [DllImportAttribute("xcb")]
-               static extern xcb_void_cookie_t xcb_map_window(IntPtr conn, xcb_window_t window);
-               [DllImportAttribute("xcb")]
-               static extern void xcb_disconnect(IntPtr connection);
-
-               [DllImportAttribute("xcb")]
-               static extern IntPtr xcb_poll_for_event(IntPtr connection);
-
-
-               #endregion
-
-               Interface iFace;
-
-               IntPtr conn;
-
-
-               #region IBackend implementation
-               public void Init (Interface _iFace)
-               {
-                       iFace = _iFace;
-
-                       conn = xcb_connect (null, IntPtr.Zero);
-
-
-                       iFace.Keyboard = new  XKB.XCBKeyboard (conn);
-
-                       xcb_iterator_t scr_it = xcb_setup_roots_iterator (xcb_get_setup (conn));
-                       IntPtr screen = scr_it.data;
-
-                       xcb_screen_t scr = (xcb_screen_t)Marshal.PtrToStructure (screen, typeof(xcb_screen_t));
-
-                       xcb_window_t win = xcb_generate_id (conn);
-
-                       xcb_cw_t mask = xcb_cw_t.BACK_PIXEL | xcb_cw_t.EVENT_MASK;
-                       uint[] values = {
-                               scr.black_pixel,
-                               (uint)(
-                                       xcb_event_mask_t.EXPOSURE |
-                                       xcb_event_mask_t.POINTER_MOTION |
-                                       xcb_event_mask_t.BUTTON_PRESS |
-                                       xcb_event_mask_t.BUTTON_RELEASE |
-                                       xcb_event_mask_t.KEY_PRESS |
-                                       xcb_event_mask_t.KEY_RELEASE
-                               )
-                       };
-
-                       IntPtr intPtr = IntPtr.Zero;
-
-                       unsafe 
-                       {
-                               fixed(uint* pValues = values)
-                               intPtr = new IntPtr((void *) pValues);
-                               xcb_create_window (conn, XCB_COPY_FROM_PARENT, win, scr.root, 0,0,(ushort)iFace.ClientRectangle.Width, (ushort)iFace.ClientRectangle.Height,0,
-                                       xcb_window_class_t.INPUT_OUTPUT, scr.root_visual, mask, intPtr);
-                       }
-
-
-                       xcb_map_window (conn, win);
-
-                       xcb_flush (conn);
-
-
-                       IntPtr visual = findVisual (scr_it, scr.root_visual);   
-
-
-                       iFace.surf = new Cairo.XcbSurface (conn, win, visual, iFace.ClientRectangle.Width, iFace.ClientRectangle.Height);
-               }
-
-               public void CleanUp ()
-               {
-                       iFace.Keyboard.Destroy ();
-
-                       xcb_disconnect (conn);  
-               }
-               public void Flush () {
-                       xcb_flush (conn);
-               }
-
-               public void ProcessEvents ()
-               {
-                       IntPtr evtPtr = xcb_poll_for_event (conn);
-                       if (evtPtr == IntPtr.Zero)
-                               return;
-                       xcb_event_t evt = (xcb_event_t)Marshal.PtrToStructure (evtPtr, typeof(xcb_event_t));
-
-                       switch (evt.response_type) {
-                       case xcb_event_type.EXPOSE:
-                               if (evt.width > 0)
-                                       iFace.ProcessResize (new Rectangle (0, 0, evt.width, evt.height));
-                               break;
-                       case xcb_event_type.MOTION_NOTIFY:
-                               iFace.ProcessMouseMove (evt.event_x, evt.event_y);
-                               break;
-                       case xcb_event_type.BUTTON_PRESS:
-                               if (evt.button == xcb_button_t.WheelUp)
-                                       iFace.ProcessMouseWheelChanged (Interface.WheelIncrement);
-                               else if(evt.button == xcb_button_t.WheelDown)
-                                       iFace.ProcessMouseWheelChanged (-Interface.WheelIncrement);
-                               else
-                                       iFace.ProcessMouseButtonDown (evt.detail - 1);                          
-                               break;
-                       case xcb_event_type.BUTTON_RELEASE:
-                               if (evt.button == xcb_button_t.WheelUp || evt.button == xcb_button_t.WheelDown)
-                                       break;
-                               iFace.ProcessMouseButtonUp (evt.detail - 1);
-                               break;
-                       case xcb_event_type.KEY_PRESS:
-                               iFace.Keyboard.HandleEvent (evt.keycode, true);
-                               break;
-                       case xcb_event_type.KEY_RELEASE:
-                               iFace.Keyboard.HandleEvent (evt.keycode, false);
-                               break;
-                       default:
-                               Console.WriteLine ("unknown event");
-                               break;
-                       }
-               }
-
-               #endregion
-
-               static IntPtr findVisual (xcb_iterator_t scr_it, xcb_visualid_t visualId){
-                       for (; scr_it.rem > 0; xcb_screen_next (ref scr_it)) {
-                               xcb_iterator_t depth_it = xcb_screen_allowed_depths_iterator (scr_it.data);
-                               for (; depth_it.rem > 0; xcb_depth_next (ref depth_it)) {
-                                       xcb_iterator_t visual_it = xcb_depth_visuals_iterator (depth_it.data);
-                                       for (; visual_it.rem > 0; xcb_visualtype_next (ref visual_it)) {
-                                               xcb_visualtype_t visual = (xcb_visualtype_t)Marshal.PtrToStructure (visual_it.data, typeof(xcb_visualtype_t));
-                                               if (visualId == visual.visual_id)
-                                                       return visual_it.data;
-                                       }
-                               }
-                       }
-                       return IntPtr.Zero;
-               }
-
-       }
-}
-
diff --git a/src/backends/xcb/XCBKeyboard.cs b/src/backends/xcb/XCBKeyboard.cs
deleted file mode 100644 (file)
index c7484f5..0000000
+++ /dev/null
@@ -1,2608 +0,0 @@
-//
-// XCBKeyboard.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp_bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-using System;
-using System.Runtime.InteropServices;
-
-namespace Crow.XKB
-{
-       using xkb_keycode_t = System.UInt32;
-       using xkb_mod_index_t = System.UInt32;
-
-       public class XCBKeyboard : IKeyboard
-       {
-               enum xkb_keysym : uint {
-                       NoSymbol                                                = 0x000000,
-                       VoidSymbol                                              = 0xffffff,
-                       BackSpace                                               = 0xff08,
-                       Tab                                                             = 0xff09,
-                       Linefeed                                                = 0xff0a,
-                       Clear                                                   = 0xff0b,
-                       Return                                                  = 0xff0d,
-                       Pause                                                   = 0xff13,
-                       Scroll_Lock                                             = 0xff14,
-                       Sys_Req                                                 = 0xff15,
-                       Escape                                                  = 0xff1b,
-                       Delete                                                  = 0xffff,
-                       Multi_key                                               = 0xff20,
-                       Codeinput                                               = 0xff37,
-                       SingleCandidate                                 = 0xff3c,
-                       MultipleCandidate                               = 0xff3d,
-                       PreviousCandidate                               = 0xff3e,
-                       Kanji                                                   = 0xff21,
-                       Muhenkan                                                = 0xff22,
-                       Henkan_Mode                                             = 0xff23,
-                       Henkan                                                  = 0xff23,
-                       Romaji                                                  = 0xff24,
-                       Hiragana                                                = 0xff25,
-                       Katakana                                                = 0xff26,
-                       Hiragana_Katakana                               = 0xff27,
-                       Zenkaku                                                 = 0xff28,
-                       Hankaku                                                 = 0xff29,
-                       Zenkaku_Hankaku                                 = 0xff2a,
-                       Touroku                                                 = 0xff2b,
-                       Massyo                                                  = 0xff2c,
-                       Kana_Lock                                               = 0xff2d,
-                       Kana_Shift                                              = 0xff2e,
-                       Eisu_Shift                                              = 0xff2f,
-                       Eisu_toggle                                             = 0xff30,
-                       Kanji_Bangou                                    = 0xff37,
-                       Zen_Koho                                                = 0xff3d,
-                       Mae_Koho                                                = 0xff3e,
-                       Home                                                    = 0xff50,
-                       Left                                                    = 0xff51,
-                       Up                                                              = 0xff52,
-                       Right                                                   = 0xff53,
-                       Down                                                    = 0xff54,
-                       Prior                                                   = 0xff55,
-                       Page_Up                                                 = 0xff55,
-                       Next                                                    = 0xff56,
-                       Page_Down                                               = 0xff56,
-                       End                                                             = 0xff57,
-                       Begin                                                   = 0xff58,
-                       Select                                                  = 0xff60,
-                       Print                                                   = 0xff61,
-                       Execute                                                 = 0xff62,
-                       Insert                                                  = 0xff63,
-                       Undo                                                    = 0xff65,
-                       Redo                                                    = 0xff66,
-                       Menu                                                    = 0xff67,
-                       Find                                                    = 0xff68,
-                       Cancel                                                  = 0xff69,
-                       Help                                                    = 0xff6a,
-                       Break                                                   = 0xff6b,
-                       Mode_switch                                             = 0xff7e,
-                       script_switch                                   = 0xff7e,
-                       Num_Lock                                                = 0xff7f,
-                       KP_Space                                                = 0xff80,
-                       KP_Tab                                                  = 0xff89,
-                       KP_Enter                                                = 0xff8d,
-                       KP_F1                                                   = 0xff91,
-                       KP_F2                                                   = 0xff92,
-                       KP_F3                                                   = 0xff93,
-                       KP_F4                                                   = 0xff94,
-                       KP_Home                                                 = 0xff95,
-                       KP_Left                                                 = 0xff96,
-                       KP_Up                                                   = 0xff97,
-                       KP_Right                                                = 0xff98,
-                       KP_Down                                                 = 0xff99,
-                       KP_Prior                                                = 0xff9a,
-                       KP_Page_Up                                              = 0xff9a,
-                       KP_Next                                                 = 0xff9b,
-                       KP_Page_Down                                    = 0xff9b,
-                       KP_End                                                  = 0xff9c,
-                       KP_Begin                                                = 0xff9d,
-                       KP_Insert                                               = 0xff9e,
-                       KP_Delete                                               = 0xff9f,
-                       KP_Equal                                                = 0xffbd,
-                       KP_Multiply                                             = 0xffaa,
-                       KP_Add                                                  = 0xffab,
-                       KP_Separator                                    = 0xffac,
-                       KP_Subtract                                             = 0xffad,
-                       KP_Decimal                                              = 0xffae,
-                       KP_Divide                                               = 0xffaf,
-                       KP_0                                                    = 0xffb0,
-                       KP_1                                                    = 0xffb1,
-                       KP_2                                                    = 0xffb2,
-                       KP_3                                                    = 0xffb3,
-                       KP_4                                                    = 0xffb4,
-                       KP_5                                                    = 0xffb5,
-                       KP_6                                                    = 0xffb6,
-                       KP_7                                                    = 0xffb7,
-                       KP_8                                                    = 0xffb8,
-                       KP_9                                                    = 0xffb9,
-                       F1                                                              = 0xffbe,
-                       F2                                                              = 0xffbf,
-                       F3                                                              = 0xffc0,
-                       F4                                                              = 0xffc1,
-                       F5                                                              = 0xffc2,
-                       F6                                                              = 0xffc3,
-                       F7                                                              = 0xffc4,
-                       F8                                                              = 0xffc5,
-                       F9                                                              = 0xffc6,
-                       F10                                                             = 0xffc7,
-                       F11                                                             = 0xffc8,
-                       L1                                                              = 0xffc8,
-                       F12                                                             = 0xffc9,
-                       L2                                                              = 0xffc9,
-                       F13                                                             = 0xffca,
-                       L3                                                              = 0xffca,
-                       F14                                                             = 0xffcb,
-                       L4                                                              = 0xffcb,
-                       F15                                                             = 0xffcc,
-                       L5                                                              = 0xffcc,
-                       F16                                                             = 0xffcd,
-                       L6                                                              = 0xffcd,
-                       F17                                                             = 0xffce,
-                       L7                                                              = 0xffce,
-                       F18                                                             = 0xffcf,
-                       L8                                                              = 0xffcf,
-                       F19                                                             = 0xffd0,
-                       L9                                                              = 0xffd0,
-                       F20                                                             = 0xffd1,
-                       L10                                                             = 0xffd1,
-                       F21                                                             = 0xffd2,
-                       R1                                                              = 0xffd2,
-                       F22                                                             = 0xffd3,
-                       R2                                                              = 0xffd3,
-                       F23                                                             = 0xffd4,
-                       R3                                                              = 0xffd4,
-                       F24                                                             = 0xffd5,
-                       R4                                                              = 0xffd5,
-                       F25                                                             = 0xffd6,
-                       R5                                                              = 0xffd6,
-                       F26                                                             = 0xffd7,
-                       R6                                                              = 0xffd7,
-                       F27                                                             = 0xffd8,
-                       R7                                                              = 0xffd8,
-                       F28                                                             = 0xffd9,
-                       R8                                                              = 0xffd9,
-                       F29                                                             = 0xffda,
-                       R9                                                              = 0xffda,
-                       F30                                                             = 0xffdb,
-                       R10                                                             = 0xffdb,
-                       F31                                                             = 0xffdc,
-                       R11                                                             = 0xffdc,
-                       F32                                                             = 0xffdd,
-                       R12                                                             = 0xffdd,
-                       F33                                                             = 0xffde,
-                       R13                                                             = 0xffde,
-                       F34                                                             = 0xffdf,
-                       R14                                                             = 0xffdf,
-                       F35                                                             = 0xffe0,
-                       R15                                                             = 0xffe0,
-                       Shift_L                                                 = 0xffe1,
-                       Shift_R                                                 = 0xffe2,
-                       Control_L                                               = 0xffe3,
-                       Control_R                                               = 0xffe4,
-                       Caps_Lock                                               = 0xffe5,
-                       Shift_Lock                                              = 0xffe6,
-                       Meta_L                                                  = 0xffe7,
-                       Meta_R                                                  = 0xffe8,
-                       Alt_L                                                   = 0xffe9,
-                       Alt_R                                                   = 0xffea,
-                       Super_L                                                 = 0xffeb,
-                       Super_R                                                 = 0xffec,
-                       Hyper_L                                                 = 0xffed,
-                       Hyper_R                                                 = 0xffee,
-                       ISO_Lock                                                = 0xfe01,
-                       ISO_Level2_Latch                                = 0xfe02,
-                       ISO_Level3_Shift                                = 0xfe03,
-                       ISO_Level3_Latch                                = 0xfe04,
-                       ISO_Level3_Lock                                 = 0xfe05,
-                       ISO_Level5_Shift                                = 0xfe11,
-                       ISO_Level5_Latch                                = 0xfe12,
-                       ISO_Level5_Lock                                 = 0xfe13,
-                       ISO_Group_Shift                                 = 0xff7e,
-                       ISO_Group_Latch                                 = 0xfe06,
-                       ISO_Group_Lock                                  = 0xfe07,
-                       ISO_Next_Group                                  = 0xfe08,
-                       ISO_Next_Group_Lock                             = 0xfe09,
-                       ISO_Prev_Group                                  = 0xfe0a,
-                       ISO_Prev_Group_Lock                             = 0xfe0b,
-                       ISO_First_Group                                 = 0xfe0c,
-                       ISO_First_Group_Lock                    = 0xfe0d,
-                       ISO_Last_Group                                  = 0xfe0e,
-                       ISO_Last_Group_Lock                             = 0xfe0f,
-                       ISO_Left_Tab                                    = 0xfe20,
-                       ISO_Move_Line_Up                                = 0xfe21,
-                       ISO_Move_Line_Down                              = 0xfe22,
-                       ISO_Partial_Line_Up                             = 0xfe23,
-                       ISO_Partial_Line_Down                   = 0xfe24,
-                       ISO_Partial_Space_Left                  = 0xfe25,
-                       ISO_Partial_Space_Right                 = 0xfe26,
-                       ISO_Set_Margin_Left                             = 0xfe27,
-                       ISO_Set_Margin_Right                    = 0xfe28,
-                       ISO_Release_Margin_Left                 = 0xfe29,
-                       ISO_Release_Margin_Right                = 0xfe2a,
-                       ISO_Release_Both_Margins                = 0xfe2b,
-                       ISO_Fast_Cursor_Left                    = 0xfe2c,
-                       ISO_Fast_Cursor_Right                   = 0xfe2d,
-                       ISO_Fast_Cursor_Up                              = 0xfe2e,
-                       ISO_Fast_Cursor_Down                    = 0xfe2f,
-                       ISO_Continuous_Underline                = 0xfe30,
-                       ISO_Discontinuous_Underline             = 0xfe31,
-                       ISO_Emphasize                                   = 0xfe32,
-                       ISO_Center_Object                               = 0xfe33,
-                       ISO_Enter                                               = 0xfe34,
-                       dead_grave                                              = 0xfe50,
-                       dead_acute                                              = 0xfe51,
-                       dead_circumflex                                 = 0xfe52,
-                       dead_tilde                                              = 0xfe53,
-                       dead_perispomeni                                = 0xfe53,
-                       dead_macron                                             = 0xfe54,
-                       dead_breve                                              = 0xfe55,
-                       dead_abovedot                                   = 0xfe56,
-                       dead_diaeresis                                  = 0xfe57,
-                       dead_abovering                                  = 0xfe58,
-                       dead_doubleacute                                = 0xfe59,
-                       dead_caron                                              = 0xfe5a,
-                       dead_cedilla                                    = 0xfe5b,
-                       dead_ogonek                                             = 0xfe5c,
-                       dead_iota                                               = 0xfe5d,
-                       dead_voiced_sound                               = 0xfe5e,
-                       dead_semivoiced_sound                   = 0xfe5f,
-                       dead_belowdot                                   = 0xfe60,
-                       dead_hook                                               = 0xfe61,
-                       dead_horn                                               = 0xfe62,
-                       dead_stroke                                             = 0xfe63,
-                       dead_abovecomma                                 = 0xfe64,
-                       dead_psili                                              = 0xfe64,
-                       dead_abovereversedcomma                 = 0xfe65,
-                       dead_dasia                                              = 0xfe65,
-                       dead_doublegrave                                = 0xfe66,
-                       dead_belowring                                  = 0xfe67,
-                       dead_belowmacron                                = 0xfe68,
-                       dead_belowcircumflex                    = 0xfe69,
-                       dead_belowtilde                                 = 0xfe6a,
-                       dead_belowbreve                                 = 0xfe6b,
-                       dead_belowdiaeresis                             = 0xfe6c,
-                       dead_invertedbreve                              = 0xfe6d,
-                       dead_belowcomma                                 = 0xfe6e,
-                       dead_currency                                   = 0xfe6f,
-                       dead_lowline                                    = 0xfe90,
-                       dead_aboveverticalline                  = 0xfe91,
-                       dead_belowverticalline                  = 0xfe92,
-                       dead_longsolidusoverlay                 = 0xfe93,
-                       dead_a                                                  = 0xfe80,
-                       dead_A                                                  = 0xfe81,
-                       dead_e                                                  = 0xfe82,
-                       dead_E                                                  = 0xfe83,
-                       dead_i                                                  = 0xfe84,
-                       dead_I                                                  = 0xfe85,
-                       dead_o                                                  = 0xfe86,
-                       dead_O                                                  = 0xfe87,
-                       dead_u                                                  = 0xfe88,
-                       dead_U                                                  = 0xfe89,
-                       dead_small_schwa                                = 0xfe8a,
-                       dead_capital_schwa                              = 0xfe8b,
-                       dead_greek                                              = 0xfe8c,
-                       First_Virtual_Screen                    = 0xfed0,
-                       Prev_Virtual_Screen                             = 0xfed1,
-                       Next_Virtual_Screen                             = 0xfed2,
-                       Last_Virtual_Screen                             = 0xfed4,
-                       Terminate_Server                                = 0xfed5,
-                       AccessX_Enable                                  = 0xfe70,
-                       AccessX_Feedback_Enable                 = 0xfe71,
-                       RepeatKeys_Enable                               = 0xfe72,
-                       SlowKeys_Enable                                 = 0xfe73,
-                       BounceKeys_Enable                               = 0xfe74,
-                       StickyKeys_Enable                               = 0xfe75,
-                       MouseKeys_Enable                                = 0xfe76,
-                       MouseKeys_Accel_Enable                  = 0xfe77,
-                       Overlay1_Enable                                 = 0xfe78,
-                       Overlay2_Enable                                 = 0xfe79,
-                       AudibleBell_Enable                              = 0xfe7a,
-                       Pointer_Left                                    = 0xfee0,
-                       Pointer_Right                                   = 0xfee1,
-                       Pointer_Up                                              = 0xfee2,
-                       Pointer_Down                                    = 0xfee3,
-                       Pointer_UpLeft                                  = 0xfee4,
-                       Pointer_UpRight                                 = 0xfee5,
-                       Pointer_DownLeft                                = 0xfee6,
-                       Pointer_DownRight                               = 0xfee7,
-                       Pointer_Button_Dflt                             = 0xfee8,
-                       Pointer_Button1                                 = 0xfee9,
-                       Pointer_Button2                                 = 0xfeea,
-                       Pointer_Button3                                 = 0xfeeb,
-                       Pointer_Button4                                 = 0xfeec,
-                       Pointer_Button5                                 = 0xfeed,
-                       Pointer_DblClick_Dflt                   = 0xfeee,
-                       Pointer_DblClick1                               = 0xfeef,
-                       Pointer_DblClick2                               = 0xfef0,
-                       Pointer_DblClick3                               = 0xfef1,
-                       Pointer_DblClick4                               = 0xfef2,
-                       Pointer_DblClick5                               = 0xfef3,
-                       Pointer_Drag_Dflt                               = 0xfef4,
-                       Pointer_Drag1                                   = 0xfef5,
-                       Pointer_Drag2                                   = 0xfef6,
-                       Pointer_Drag3                                   = 0xfef7,
-                       Pointer_Drag4                                   = 0xfef8,
-                       Pointer_Drag5                                   = 0xfefd,
-                       Pointer_EnableKeys                              = 0xfef9,
-                       Pointer_Accelerate                              = 0xfefa,
-                       Pointer_DfltBtnNext                             = 0xfefb,
-                       Pointer_DfltBtnPrev                             = 0xfefc,
-                       ch                                                              = 0xfea0,
-                       Ch                                                              = 0xfea1,
-                       CH                                                              = 0xfea2,
-                       c_h                                                             = 0xfea3,
-                       C_h                                                             = 0xfea4,
-                       C_H                                                             = 0xfea5,
-                       key_3270_Duplicate                              = 0xfd01,
-                       key_3270_FieldMark                              = 0xfd02,
-                       key_3270_Right2                                 = 0xfd03,
-                       key_3270_Left2                                  = 0xfd04,
-                       key_3270_BackTab                                = 0xfd05,
-                       key_3270_EraseEOF                               = 0xfd06,
-                       key_3270_EraseInput                             = 0xfd07,
-                       key_3270_Reset                                  = 0xfd08,
-                       key_3270_Quit                                   = 0xfd09,
-                       key_3270_PA1                                    = 0xfd0a,
-                       key_3270_PA2                                    = 0xfd0b,
-                       key_3270_PA3                                    = 0xfd0c,
-                       key_3270_Test                                   = 0xfd0d,
-                       key_3270_Attn                                   = 0xfd0e,
-                       key_3270_CursorBlink                    = 0xfd0f,
-                       key_3270_AltCursor                              = 0xfd10,
-                       key_3270_KeyClick                               = 0xfd11,
-                       key_3270_Jump                                   = 0xfd12,
-                       key_3270_Ident                                  = 0xfd13,
-                       key_3270_Rule                                   = 0xfd14,
-                       key_3270_Copy                                   = 0xfd15,
-                       key_3270_Play                                   = 0xfd16,
-                       key_3270_Setup                                  = 0xfd17,
-                       key_3270_Record                                 = 0xfd18,
-                       key_3270_ChangeScreen                   = 0xfd19,
-                       key_3270_DeleteWord                             = 0xfd1a,
-                       key_3270_ExSelect                               = 0xfd1b,
-                       key_3270_CursorSelect                   = 0xfd1c,
-                       key_3270_PrintScreen                    = 0xfd1d,
-                       key_3270_Enter                                  = 0xfd1e,
-                       space                                                   = 0x0020,
-                       exclam                                                  = 0x0021,
-                       quotedbl                                                = 0x0022,
-                       numbersign                                              = 0x0023,
-                       dollar                                                  = 0x0024,
-                       percent                                                 = 0x0025,
-                       ampersand                                               = 0x0026,
-                       apostrophe                                              = 0x0027,
-                       quoteright                                              = 0x0027,
-                       parenleft                                               = 0x0028,
-                       parenright                                              = 0x0029,
-                       asterisk                                                = 0x002a,
-                       plus                                                    = 0x002b,
-                       comma                                                   = 0x002c,
-                       minus                                                   = 0x002d,
-                       period                                                  = 0x002e,
-                       slash                                                   = 0x002f,
-                       key_0                                                   = 0x0030,
-                       key_1                                                   = 0x0031,
-                       key_2                                                   = 0x0032,
-                       key_3                                                   = 0x0033,
-                       key_4                                                   = 0x0034,
-                       key_5                                                   = 0x0035,
-                       key_6                                                   = 0x0036,
-                       key_7                                                   = 0x0037,
-                       key_8                                                   = 0x0038,
-                       key_9                                                   = 0x0039,
-                       colon                                                   = 0x003a,
-                       semicolon                                               = 0x003b,
-                       less                                                    = 0x003c,
-                       equal                                                   = 0x003d,
-                       greater                                                 = 0x003e,
-                       question                                                = 0x003f,
-                       at                                                              = 0x0040,
-                       A                                                               = 0x0041,
-                       B                                                               = 0x0042,
-                       C                                                               = 0x0043,
-                       D                                                               = 0x0044,
-                       E                                                               = 0x0045,
-                       F                                                               = 0x0046,
-                       G                                                               = 0x0047,
-                       H                                                               = 0x0048,
-                       I                                                               = 0x0049,
-                       J                                                               = 0x004a,
-                       K                                                               = 0x004b,
-                       L                                                               = 0x004c,
-                       M                                                               = 0x004d,
-                       N                                                               = 0x004e,
-                       O                                                               = 0x004f,
-                       P                                                               = 0x0050,
-                       Q                                                               = 0x0051,
-                       R                                                               = 0x0052,
-                       S                                                               = 0x0053,
-                       T                                                               = 0x0054,
-                       U                                                               = 0x0055,
-                       V                                                               = 0x0056,
-                       W                                                               = 0x0057,
-                       X                                                               = 0x0058,
-                       Y                                                               = 0x0059,
-                       Z                                                               = 0x005a,
-                       bracketleft                                             = 0x005b,
-                       backslash                                               = 0x005c,
-                       bracketright                                    = 0x005d,
-                       asciicircum                                             = 0x005e,
-                       underscore                                              = 0x005f,
-                       grave                                                   = 0x0060,
-                       quoteleft                                               = 0x0060,
-                       a                                                               = 0x0061,
-                       b                                                               = 0x0062,
-                       c                                                               = 0x0063,
-                       d                                                               = 0x0064,
-                       e                                                               = 0x0065,
-                       f                                                               = 0x0066,
-                       g                                                               = 0x0067,
-                       h                                                               = 0x0068,
-                       i                                                               = 0x0069,
-                       j                                                               = 0x006a,
-                       k                                                               = 0x006b,
-                       l                                                               = 0x006c,
-                       m                                                               = 0x006d,
-                       n                                                               = 0x006e,
-                       o                                                               = 0x006f,
-                       p                                                               = 0x0070,
-                       q                                                               = 0x0071,
-                       r                                                               = 0x0072,
-                       s                                                               = 0x0073,
-                       t                                                               = 0x0074,
-                       u                                                               = 0x0075,
-                       v                                                               = 0x0076,
-                       w                                                               = 0x0077,
-                       x                                                               = 0x0078,
-                       y                                                               = 0x0079,
-                       z                                                               = 0x007a,
-                       braceleft                                               = 0x007b,
-                       bar                                                             = 0x007c,
-                       braceright                                              = 0x007d,
-                       asciitilde                                              = 0x007e,
-                       nobreakspace                                    = 0x00a0,
-                       exclamdown                                              = 0x00a1,
-                       cent                                                    = 0x00a2,
-                       sterling                                                = 0x00a3,
-                       currency                                                = 0x00a4,
-                       yen                                                             = 0x00a5,
-                       brokenbar                                               = 0x00a6,
-                       section                                                 = 0x00a7,
-                       diaeresis                                               = 0x00a8,
-                       copyright                                               = 0x00a9,
-                       ordfeminine                                             = 0x00aa,
-                       guillemotleft                                   = 0x00ab,
-                       notsign                                                 = 0x00ac,
-                       hyphen                                                  = 0x00ad,
-                       registered                                              = 0x00ae,
-                       macron                                                  = 0x00af,
-                       degree                                                  = 0x00b0,
-                       plusminus                                               = 0x00b1,
-                       twosuperior                                             = 0x00b2,
-                       threesuperior                                   = 0x00b3,
-                       acute                                                   = 0x00b4,
-                       mu                                                              = 0x00b5,
-                       paragraph                                               = 0x00b6,
-                       periodcentered                                  = 0x00b7,
-                       cedilla                                                 = 0x00b8,
-                       onesuperior                                             = 0x00b9,
-                       masculine                                               = 0x00ba,
-                       guillemotright                                  = 0x00bb,
-                       onequarter                                              = 0x00bc,
-                       onehalf                                                 = 0x00bd,
-                       threequarters                                   = 0x00be,
-                       questiondown                                    = 0x00bf,
-                       Agrave                                                  = 0x00c0,
-                       Aacute                                                  = 0x00c1,
-                       Acircumflex                                             = 0x00c2,
-                       Atilde                                                  = 0x00c3,
-                       Adiaeresis                                              = 0x00c4,
-                       Aring                                                   = 0x00c5,
-                       AE                                                              = 0x00c6,
-                       Ccedilla                                                = 0x00c7,
-                       Egrave                                                  = 0x00c8,
-                       Eacute                                                  = 0x00c9,
-                       Ecircumflex                                             = 0x00ca,
-                       Ediaeresis                                              = 0x00cb,
-                       Igrave                                                  = 0x00cc,
-                       Iacute                                                  = 0x00cd,
-                       Icircumflex                                             = 0x00ce,
-                       Idiaeresis                                              = 0x00cf,
-                       ETH                                                             = 0x00d0,
-                       Eth                                                             = 0x00d0,
-                       Ntilde                                                  = 0x00d1,
-                       Ograve                                                  = 0x00d2,
-                       Oacute                                                  = 0x00d3,
-                       Ocircumflex                                             = 0x00d4,
-                       Otilde                                                  = 0x00d5,
-                       Odiaeresis                                              = 0x00d6,
-                       multiply                                                = 0x00d7,
-                       Oslash                                                  = 0x00d8,
-                       Ooblique                                                = 0x00d8,
-                       Ugrave                                                  = 0x00d9,
-                       Uacute                                                  = 0x00da,
-                       Ucircumflex                                             = 0x00db,
-                       Udiaeresis                                              = 0x00dc,
-                       Yacute                                                  = 0x00dd,
-                       THORN                                                   = 0x00de,
-                       Thorn                                                   = 0x00de,
-                       ssharp                                                  = 0x00df,
-                       agrave                                                  = 0x00e0,
-                       aacute                                                  = 0x00e1,
-                       acircumflex                                             = 0x00e2,
-                       atilde                                                  = 0x00e3,
-                       adiaeresis                                              = 0x00e4,
-                       aring                                                   = 0x00e5,
-                       ae                                                              = 0x00e6,
-                       ccedilla                                                = 0x00e7,
-                       egrave                                                  = 0x00e8,
-                       eacute                                                  = 0x00e9,
-                       ecircumflex                                             = 0x00ea,
-                       ediaeresis                                              = 0x00eb,
-                       igrave                                                  = 0x00ec,
-                       iacute                                                  = 0x00ed,
-                       icircumflex                                             = 0x00ee,
-                       idiaeresis                                              = 0x00ef,
-                       eth                                                             = 0x00f0,
-                       ntilde                                                  = 0x00f1,
-                       ograve                                                  = 0x00f2,
-                       oacute                                                  = 0x00f3,
-                       ocircumflex                                             = 0x00f4,
-                       otilde                                                  = 0x00f5,
-                       odiaeresis                                              = 0x00f6,
-                       division                                                = 0x00f7,
-                       oslash                                                  = 0x00f8,
-                       ooblique                                                = 0x00f8,
-                       ugrave                                                  = 0x00f9,
-                       uacute                                                  = 0x00fa,
-                       ucircumflex                                             = 0x00fb,
-                       udiaeresis                                              = 0x00fc,
-                       yacute                                                  = 0x00fd,
-                       thorn                                                   = 0x00fe,
-                       ydiaeresis                                              = 0x00ff,
-                       Aogonek                                                 = 0x01a1,
-                       breve                                                   = 0x01a2,
-                       Lstroke                                                 = 0x01a3,
-                       Lcaron                                                  = 0x01a5,
-                       Sacute                                                  = 0x01a6,
-                       Scaron                                                  = 0x01a9,
-                       Scedilla                                                = 0x01aa,
-                       Tcaron                                                  = 0x01ab,
-                       Zacute                                                  = 0x01ac,
-                       Zcaron                                                  = 0x01ae,
-                       Zabovedot                                               = 0x01af,
-                       aogonek                                                 = 0x01b1,
-                       ogonek                                                  = 0x01b2,
-                       lstroke                                                 = 0x01b3,
-                       lcaron                                                  = 0x01b5,
-                       sacute                                                  = 0x01b6,
-                       caron                                                   = 0x01b7,
-                       scaron                                                  = 0x01b9,
-                       scedilla                                                = 0x01ba,
-                       tcaron                                                  = 0x01bb,
-                       zacute                                                  = 0x01bc,
-                       doubleacute                                             = 0x01bd,
-                       zcaron                                                  = 0x01be,
-                       zabovedot                                               = 0x01bf,
-                       Racute                                                  = 0x01c0,
-                       Abreve                                                  = 0x01c3,
-                       Lacute                                                  = 0x01c5,
-                       Cacute                                                  = 0x01c6,
-                       Ccaron                                                  = 0x01c8,
-                       Eogonek                                                 = 0x01ca,
-                       Ecaron                                                  = 0x01cc,
-                       Dcaron                                                  = 0x01cf,
-                       Dstroke                                                 = 0x01d0,
-                       Nacute                                                  = 0x01d1,
-                       Ncaron                                                  = 0x01d2,
-                       Odoubleacute                                    = 0x01d5,
-                       Rcaron                                                  = 0x01d8,
-                       Uring                                                   = 0x01d9,
-                       Udoubleacute                                    = 0x01db,
-                       Tcedilla                                                = 0x01de,
-                       racute                                                  = 0x01e0,
-                       abreve                                                  = 0x01e3,
-                       lacute                                                  = 0x01e5,
-                       cacute                                                  = 0x01e6,
-                       ccaron                                                  = 0x01e8,
-                       eogonek                                                 = 0x01ea,
-                       ecaron                                                  = 0x01ec,
-                       dcaron                                                  = 0x01ef,
-                       dstroke                                                 = 0x01f0,
-                       nacute                                                  = 0x01f1,
-                       ncaron                                                  = 0x01f2,
-                       odoubleacute                                    = 0x01f5,
-                       rcaron                                                  = 0x01f8,
-                       uring                                                   = 0x01f9,
-                       udoubleacute                                    = 0x01fb,
-                       tcedilla                                                = 0x01fe,
-                       abovedot                                                = 0x01ff,
-                       Hstroke                                                 = 0x02a1,
-                       Hcircumflex                                             = 0x02a6,
-                       Iabovedot                                               = 0x02a9,
-                       Gbreve                                                  = 0x02ab,
-                       Jcircumflex                                             = 0x02ac,
-                       hstroke                                                 = 0x02b1,
-                       hcircumflex                                             = 0x02b6,
-                       idotless                                                = 0x02b9,
-                       gbreve                                                  = 0x02bb,
-                       jcircumflex                                             = 0x02bc,
-                       Cabovedot                                               = 0x02c5,
-                       Ccircumflex                                             = 0x02c6,
-                       Gabovedot                                               = 0x02d5,
-                       Gcircumflex                                             = 0x02d8,
-                       Ubreve                                                  = 0x02dd,
-                       Scircumflex                                             = 0x02de,
-                       cabovedot                                               = 0x02e5,
-                       ccircumflex                                             = 0x02e6,
-                       gabovedot                                               = 0x02f5,
-                       gcircumflex                                             = 0x02f8,
-                       ubreve                                                  = 0x02fd,
-                       scircumflex                                             = 0x02fe,
-                       kra                                                             = 0x03a2,
-                       kappa                                                   = 0x03a2,
-                       Rcedilla                                                = 0x03a3,
-                       Itilde                                                  = 0x03a5,
-                       Lcedilla                                                = 0x03a6,
-                       Emacron                                                 = 0x03aa,
-                       Gcedilla                                                = 0x03ab,
-                       Tslash                                                  = 0x03ac,
-                       rcedilla                                                = 0x03b3,
-                       itilde                                                  = 0x03b5,
-                       lcedilla                                                = 0x03b6,
-                       emacron                                                 = 0x03ba,
-                       gcedilla                                                = 0x03bb,
-                       tslash                                                  = 0x03bc,
-                       ENG                                                             = 0x03bd,
-                       eng                                                             = 0x03bf,
-                       Amacron                                                 = 0x03c0,
-                       Iogonek                                                 = 0x03c7,
-                       Eabovedot                                               = 0x03cc,
-                       Imacron                                                 = 0x03cf,
-                       Ncedilla                                                = 0x03d1,
-                       Omacron                                                 = 0x03d2,
-                       Kcedilla                                                = 0x03d3,
-                       Uogonek                                                 = 0x03d9,
-                       Utilde                                                  = 0x03dd,
-                       Umacron                                                 = 0x03de,
-                       amacron                                                 = 0x03e0,
-                       iogonek                                                 = 0x03e7,
-                       eabovedot                                               = 0x03ec,
-                       imacron                                                 = 0x03ef,
-                       ncedilla                                                = 0x03f1,
-                       omacron                                                 = 0x03f2,
-                       kcedilla                                                = 0x03f3,
-                       uogonek                                                 = 0x03f9,
-                       utilde                                                  = 0x03fd,
-                       umacron                                                 = 0x03fe,
-                       Wcircumflex                                             = 0x1000174,
-                       wcircumflex                                             = 0x1000175,
-                       Ycircumflex                                             = 0x1000176,
-                       ycircumflex                                             = 0x1000177,
-                       Babovedot                                               = 0x1001e02,
-                       babovedot                                               = 0x1001e03,
-                       Dabovedot                                               = 0x1001e0a,
-                       dabovedot                                               = 0x1001e0b,
-                       Fabovedot                                               = 0x1001e1e,
-                       fabovedot                                               = 0x1001e1f,
-                       Mabovedot                                               = 0x1001e40,
-                       mabovedot                                               = 0x1001e41,
-                       Pabovedot                                               = 0x1001e56,
-                       pabovedot                                               = 0x1001e57,
-                       Sabovedot                                               = 0x1001e60,
-                       sabovedot                                               = 0x1001e61,
-                       Tabovedot                                               = 0x1001e6a,
-                       tabovedot                                               = 0x1001e6b,
-                       Wgrave                                                  = 0x1001e80,
-                       wgrave                                                  = 0x1001e81,
-                       Wacute                                                  = 0x1001e82,
-                       wacute                                                  = 0x1001e83,
-                       Wdiaeresis                                              = 0x1001e84,
-                       wdiaeresis                                              = 0x1001e85,
-                       Ygrave                                                  = 0x1001ef2,
-                       ygrave                                                  = 0x1001ef3,
-                       OE                                                              = 0x13bc,
-                       oe                                                              = 0x13bd,
-                       Ydiaeresis                                              = 0x13be,
-                       overline                                                = 0x047e,
-                       kana_fullstop                                   = 0x04a1,
-                       kana_openingbracket                             = 0x04a2,
-                       kana_closingbracket                             = 0x04a3,
-                       kana_comma                                              = 0x04a4,
-                       kana_conjunctive                                = 0x04a5,
-                       kana_middledot                                  = 0x04a5,
-                       kana_WO                                                 = 0x04a6,
-                       kana_a                                                  = 0x04a7,
-                       kana_i                                                  = 0x04a8,
-                       kana_u                                                  = 0x04a9,
-                       kana_e                                                  = 0x04aa,
-                       kana_o                                                  = 0x04ab,
-                       kana_ya                                                 = 0x04ac,
-                       kana_yu                                                 = 0x04ad,
-                       kana_yo                                                 = 0x04ae,
-                       kana_tsu                                                = 0x04af,
-                       kana_tu                                                 = 0x04af,
-                       prolongedsound                                  = 0x04b0,
-                       kana_A                                                  = 0x04b1,
-                       kana_I                                                  = 0x04b2,
-                       kana_U                                                  = 0x04b3,
-                       kana_E                                                  = 0x04b4,
-                       kana_O                                                  = 0x04b5,
-                       kana_KA                                                 = 0x04b6,
-                       kana_KI                                                 = 0x04b7,
-                       kana_KU                                                 = 0x04b8,
-                       kana_KE                                                 = 0x04b9,
-                       kana_KO                                                 = 0x04ba,
-                       kana_SA                                                 = 0x04bb,
-                       kana_SHI                                                = 0x04bc,
-                       kana_SU                                                 = 0x04bd,
-                       kana_SE                                                 = 0x04be,
-                       kana_SO                                                 = 0x04bf,
-                       kana_TA                                                 = 0x04c0,
-                       kana_CHI                                                = 0x04c1,
-                       kana_TI                                                 = 0x04c1,
-                       kana_TSU                                                = 0x04c2,
-                       kana_TU                                                 = 0x04c2,
-                       kana_TE                                                 = 0x04c3,
-                       kana_TO                                                 = 0x04c4,
-                       kana_NA                                                 = 0x04c5,
-                       kana_NI                                                 = 0x04c6,
-                       kana_NU                                                 = 0x04c7,
-                       kana_NE                                                 = 0x04c8,
-                       kana_NO                                                 = 0x04c9,
-                       kana_HA                                                 = 0x04ca,
-                       kana_HI                                                 = 0x04cb,
-                       kana_FU                                                 = 0x04cc,
-                       kana_HU                                                 = 0x04cc,
-                       kana_HE                                                 = 0x04cd,
-                       kana_HO                                                 = 0x04ce,
-                       kana_MA                                                 = 0x04cf,
-                       kana_MI                                                 = 0x04d0,
-                       kana_MU                                                 = 0x04d1,
-                       kana_ME                                                 = 0x04d2,
-                       kana_MO                                                 = 0x04d3,
-                       kana_YA                                                 = 0x04d4,
-                       kana_YU                                                 = 0x04d5,
-                       kana_YO                                                 = 0x04d6,
-                       kana_RA                                                 = 0x04d7,
-                       kana_RI                                                 = 0x04d8,
-                       kana_RU                                                 = 0x04d9,
-                       kana_RE                                                 = 0x04da,
-                       kana_RO                                                 = 0x04db,
-                       kana_WA                                                 = 0x04dc,
-                       kana_N                                                  = 0x04dd,
-                       voicedsound                                             = 0x04de,
-                       semivoicedsound                                 = 0x04df,
-                       kana_switch                                             = 0xff7e,
-                       Farsi_0                                                 = 0x10006f0,
-                       Farsi_1                                                 = 0x10006f1,
-                       Farsi_2                                                 = 0x10006f2,
-                       Farsi_3                                                 = 0x10006f3,
-                       Farsi_4                                                 = 0x10006f4,
-                       Farsi_5                                                 = 0x10006f5,
-                       Farsi_6                                                 = 0x10006f6,
-                       Farsi_7                                                 = 0x10006f7,
-                       Farsi_8                                                 = 0x10006f8,
-                       Farsi_9                                                 = 0x10006f9,
-                       Arabic_percent                                  = 0x100066a,
-                       Arabic_superscript_alef                 = 0x1000670,
-                       Arabic_tteh                                             = 0x1000679,
-                       Arabic_peh                                              = 0x100067e,
-                       Arabic_tcheh                                    = 0x1000686,
-                       Arabic_ddal                                             = 0x1000688,
-                       Arabic_rreh                                             = 0x1000691,
-                       Arabic_comma                                    = 0x05ac,
-                       Arabic_fullstop                                 = 0x10006d4,
-                       Arabic_0                                                = 0x1000660,
-                       Arabic_1                                                = 0x1000661,
-                       Arabic_2                                                = 0x1000662,
-                       Arabic_3                                                = 0x1000663,
-                       Arabic_4                                                = 0x1000664,
-                       Arabic_5                                                = 0x1000665,
-                       Arabic_6                                                = 0x1000666,
-                       Arabic_7                                                = 0x1000667,
-                       Arabic_8                                                = 0x1000668,
-                       Arabic_9                                                = 0x1000669,
-                       Arabic_semicolon                                = 0x05bb,
-                       Arabic_question_mark                    = 0x05bf,
-                       Arabic_hamza                                    = 0x05c1,
-                       Arabic_maddaonalef                              = 0x05c2,
-                       Arabic_hamzaonalef                              = 0x05c3,
-                       Arabic_hamzaonwaw                               = 0x05c4,
-                       Arabic_hamzaunderalef                   = 0x05c5,
-                       Arabic_hamzaonyeh                               = 0x05c6,
-                       Arabic_alef                                             = 0x05c7,
-                       Arabic_beh                                              = 0x05c8,
-                       Arabic_tehmarbuta                               = 0x05c9,
-                       Arabic_teh                                              = 0x05ca,
-                       Arabic_theh                                             = 0x05cb,
-                       Arabic_jeem                                             = 0x05cc,
-                       Arabic_hah                                              = 0x05cd,
-                       Arabic_khah                                             = 0x05ce,
-                       Arabic_dal                                              = 0x05cf,
-                       Arabic_thal                                             = 0x05d0,
-                       Arabic_ra                                               = 0x05d1,
-                       Arabic_zain                                             = 0x05d2,
-                       Arabic_seen                                             = 0x05d3,
-                       Arabic_sheen                                    = 0x05d4,
-                       Arabic_sad                                              = 0x05d5,
-                       Arabic_dad                                              = 0x05d6,
-                       Arabic_tah                                              = 0x05d7,
-                       Arabic_zah                                              = 0x05d8,
-                       Arabic_ain                                              = 0x05d9,
-                       Arabic_ghain                                    = 0x05da,
-                       Arabic_tatweel                                  = 0x05e0,
-                       Arabic_feh                                              = 0x05e1,
-                       Arabic_qaf                                              = 0x05e2,
-                       Arabic_kaf                                              = 0x05e3,
-                       Arabic_lam                                              = 0x05e4,
-                       Arabic_meem                                             = 0x05e5,
-                       Arabic_noon                                             = 0x05e6,
-                       Arabic_ha                                               = 0x05e7,
-                       Arabic_heh                                              = 0x05e7,
-                       Arabic_waw                                              = 0x05e8,
-                       Arabic_alefmaksura                              = 0x05e9,
-                       Arabic_yeh                                              = 0x05ea,
-                       Arabic_fathatan                                 = 0x05eb,
-                       Arabic_dammatan                                 = 0x05ec,
-                       Arabic_kasratan                                 = 0x05ed,
-                       Arabic_fatha                                    = 0x05ee,
-                       Arabic_damma                                    = 0x05ef,
-                       Arabic_kasra                                    = 0x05f0,
-                       Arabic_shadda                                   = 0x05f1,
-                       Arabic_sukun                                    = 0x05f2,
-                       Arabic_madda_above                              = 0x1000653,
-                       Arabic_hamza_above                              = 0x1000654,
-                       Arabic_hamza_below                              = 0x1000655,
-                       Arabic_jeh                                              = 0x1000698,
-                       Arabic_veh                                              = 0x10006a4,
-                       Arabic_keheh                                    = 0x10006a9,
-                       Arabic_gaf                                              = 0x10006af,
-                       Arabic_noon_ghunna                              = 0x10006ba,
-                       Arabic_heh_doachashmee                  = 0x10006be,
-                       Farsi_yeh                                               = 0x10006cc,
-                       Arabic_farsi_yeh                                = 0x10006cc,
-                       Arabic_yeh_baree                                = 0x10006d2,
-                       Arabic_heh_goal                                 = 0x10006c1,
-                       Arabic_switch                                   = 0xff7e,
-                       Cyrillic_GHE_bar                                = 0x1000492,
-                       Cyrillic_ghe_bar                                = 0x1000493,
-                       Cyrillic_ZHE_descender                  = 0x1000496,
-                       Cyrillic_zhe_descender                  = 0x1000497,
-                       Cyrillic_KA_descender                   = 0x100049a,
-                       Cyrillic_ka_descender                   = 0x100049b,
-                       Cyrillic_KA_vertstroke                  = 0x100049c,
-                       Cyrillic_ka_vertstroke                  = 0x100049d,
-                       Cyrillic_EN_descender                   = 0x10004a2,
-                       Cyrillic_en_descender                   = 0x10004a3,
-                       Cyrillic_U_straight                             = 0x10004ae,
-                       Cyrillic_u_straight                             = 0x10004af,
-                       Cyrillic_U_straight_bar                 = 0x10004b0,
-                       Cyrillic_u_straight_bar                 = 0x10004b1,
-                       Cyrillic_HA_descender                   = 0x10004b2,
-                       Cyrillic_ha_descender                   = 0x10004b3,
-                       Cyrillic_CHE_descender                  = 0x10004b6,
-                       Cyrillic_che_descender                  = 0x10004b7,
-                       Cyrillic_CHE_vertstroke                 = 0x10004b8,
-                       Cyrillic_che_vertstroke                 = 0x10004b9,
-                       Cyrillic_SHHA                                   = 0x10004ba,
-                       Cyrillic_shha                                   = 0x10004bb,
-                       Cyrillic_SCHWA                                  = 0x10004d8,
-                       Cyrillic_schwa                                  = 0x10004d9,
-                       Cyrillic_I_macron                               = 0x10004e2,
-                       Cyrillic_i_macron                               = 0x10004e3,
-                       Cyrillic_O_bar                                  = 0x10004e8,
-                       Cyrillic_o_bar                                  = 0x10004e9,
-                       Cyrillic_U_macron                               = 0x10004ee,
-                       Cyrillic_u_macron                               = 0x10004ef,
-                       Serbian_dje                                             = 0x06a1,
-                       Macedonia_gje                                   = 0x06a2,
-                       Cyrillic_io                                             = 0x06a3,
-                       Ukrainian_ie                                    = 0x06a4,
-                       Ukranian_je                                             = 0x06a4,
-                       Macedonia_dse                                   = 0x06a5,
-                       Ukrainian_i                                             = 0x06a6,
-                       Ukranian_i                                              = 0x06a6,
-                       Ukrainian_yi                                    = 0x06a7,
-                       Ukranian_yi                                             = 0x06a7,
-                       Cyrillic_je                                             = 0x06a8,
-                       Serbian_je                                              = 0x06a8,
-                       Cyrillic_lje                                    = 0x06a9,
-                       Serbian_lje                                             = 0x06a9,
-                       Cyrillic_nje                                    = 0x06aa,
-                       Serbian_nje                                             = 0x06aa,
-                       Serbian_tshe                                    = 0x06ab,
-                       Macedonia_kje                                   = 0x06ac,
-                       Ukrainian_ghe_with_upturn               = 0x06ad,
-                       Byelorussian_shortu                             = 0x06ae,
-                       Cyrillic_dzhe                                   = 0x06af,
-                       Serbian_dze                                             = 0x06af,
-                       numerosign                                              = 0x06b0,
-                       Serbian_DJE                                             = 0x06b1,
-                       Macedonia_GJE                                   = 0x06b2,
-                       Cyrillic_IO                                             = 0x06b3,
-                       Ukrainian_IE                                    = 0x06b4,
-                       Ukranian_JE                                             = 0x06b4,
-                       Macedonia_DSE                                   = 0x06b5,
-                       Ukrainian_I                                             = 0x06b6,
-                       Ukranian_I                                              = 0x06b6,
-                       Ukrainian_YI                                    = 0x06b7,
-                       Ukranian_YI                                             = 0x06b7,
-                       Cyrillic_JE                                             = 0x06b8,
-                       Serbian_JE                                              = 0x06b8,
-                       Cyrillic_LJE                                    = 0x06b9,
-                       Serbian_LJE                                             = 0x06b9,
-                       Cyrillic_NJE                                    = 0x06ba,
-                       Serbian_NJE                                             = 0x06ba,
-                       Serbian_TSHE                                    = 0x06bb,
-                       Macedonia_KJE                                   = 0x06bc,
-                       Ukrainian_GHE_WITH_UPTURN               = 0x06bd,
-                       Byelorussian_SHORTU                             = 0x06be,
-                       Cyrillic_DZHE                                   = 0x06bf,
-                       Serbian_DZE                                             = 0x06bf,
-                       Cyrillic_yu                                             = 0x06c0,
-                       Cyrillic_a                                              = 0x06c1,
-                       Cyrillic_be                                             = 0x06c2,
-                       Cyrillic_tse                                    = 0x06c3,
-                       Cyrillic_de                                             = 0x06c4,
-                       Cyrillic_ie                                             = 0x06c5,
-                       Cyrillic_ef                                             = 0x06c6,
-                       Cyrillic_ghe                                    = 0x06c7,
-                       Cyrillic_ha                                             = 0x06c8,
-                       Cyrillic_i                                              = 0x06c9,
-                       Cyrillic_shorti                                 = 0x06ca,
-                       Cyrillic_ka                                             = 0x06cb,
-                       Cyrillic_el                                             = 0x06cc,
-                       Cyrillic_em                                             = 0x06cd,
-                       Cyrillic_en                                             = 0x06ce,
-                       Cyrillic_o                                              = 0x06cf,
-                       Cyrillic_pe                                             = 0x06d0,
-                       Cyrillic_ya                                             = 0x06d1,
-                       Cyrillic_er                                             = 0x06d2,
-                       Cyrillic_es                                             = 0x06d3,
-                       Cyrillic_te                                             = 0x06d4,
-                       Cyrillic_u                                              = 0x06d5,
-                       Cyrillic_zhe                                    = 0x06d6,
-                       Cyrillic_ve                                             = 0x06d7,
-                       Cyrillic_softsign                               = 0x06d8,
-                       Cyrillic_yeru                                   = 0x06d9,
-                       Cyrillic_ze                                             = 0x06da,
-                       Cyrillic_sha                                    = 0x06db,
-                       Cyrillic_e                                              = 0x06dc,
-                       Cyrillic_shcha                                  = 0x06dd,
-                       Cyrillic_che                                    = 0x06de,
-                       Cyrillic_hardsign                               = 0x06df,
-                       Cyrillic_YU                                             = 0x06e0,
-                       Cyrillic_A                                              = 0x06e1,
-                       Cyrillic_BE                                             = 0x06e2,
-                       Cyrillic_TSE                                    = 0x06e3,
-                       Cyrillic_DE                                             = 0x06e4,
-                       Cyrillic_IE                                             = 0x06e5,
-                       Cyrillic_EF                                             = 0x06e6,
-                       Cyrillic_GHE                                    = 0x06e7,
-                       Cyrillic_HA                                             = 0x06e8,
-                       Cyrillic_I                                              = 0x06e9,
-                       Cyrillic_SHORTI                                 = 0x06ea,
-                       Cyrillic_KA                                             = 0x06eb,
-                       Cyrillic_EL                                             = 0x06ec,
-                       Cyrillic_EM                                             = 0x06ed,
-                       Cyrillic_EN                                             = 0x06ee,
-                       Cyrillic_O                                              = 0x06ef,
-                       Cyrillic_PE                                             = 0x06f0,
-                       Cyrillic_YA                                             = 0x06f1,
-                       Cyrillic_ER                                             = 0x06f2,
-                       Cyrillic_ES                                             = 0x06f3,
-                       Cyrillic_TE                                             = 0x06f4,
-                       Cyrillic_U                                              = 0x06f5,
-                       Cyrillic_ZHE                                    = 0x06f6,
-                       Cyrillic_VE                                             = 0x06f7,
-                       Cyrillic_SOFTSIGN                               = 0x06f8,
-                       Cyrillic_YERU                                   = 0x06f9,
-                       Cyrillic_ZE                                             = 0x06fa,
-                       Cyrillic_SHA                                    = 0x06fb,
-                       Cyrillic_E                                              = 0x06fc,
-                       Cyrillic_SHCHA                                  = 0x06fd,
-                       Cyrillic_CHE                                    = 0x06fe,
-                       Cyrillic_HARDSIGN                               = 0x06ff,
-                       Greek_ALPHAaccent                               = 0x07a1,
-                       Greek_EPSILONaccent                             = 0x07a2,
-                       Greek_ETAaccent                                 = 0x07a3,
-                       Greek_IOTAaccent                                = 0x07a4,
-                       Greek_IOTAdieresis                              = 0x07a5,
-                       Greek_IOTAdiaeresis                             = 0x07a5,
-                       Greek_OMICRONaccent                             = 0x07a7,
-                       Greek_UPSILONaccent                             = 0x07a8,
-                       Greek_UPSILONdieresis                   = 0x07a9,
-                       Greek_OMEGAaccent                               = 0x07ab,
-                       Greek_accentdieresis                    = 0x07ae,
-                       Greek_horizbar                                  = 0x07af,
-                       Greek_alphaaccent                               = 0x07b1,
-                       Greek_epsilonaccent                             = 0x07b2,
-                       Greek_etaaccent                                 = 0x07b3,
-                       Greek_iotaaccent                                = 0x07b4,
-                       Greek_iotadieresis                              = 0x07b5,
-                       Greek_iotaaccentdieresis                = 0x07b6,
-                       Greek_omicronaccent                             = 0x07b7,
-                       Greek_upsilonaccent                             = 0x07b8,
-                       Greek_upsilondieresis                   = 0x07b9,
-                       Greek_upsilonaccentdieresis             = 0x07ba,
-                       Greek_omegaaccent                               = 0x07bb,
-                       Greek_ALPHA                                             = 0x07c1,
-                       Greek_BETA                                              = 0x07c2,
-                       Greek_GAMMA                                             = 0x07c3,
-                       Greek_DELTA                                             = 0x07c4,
-                       Greek_EPSILON                                   = 0x07c5,
-                       Greek_ZETA                                              = 0x07c6,
-                       Greek_ETA                                               = 0x07c7,
-                       Greek_THETA                                             = 0x07c8,
-                       Greek_IOTA                                              = 0x07c9,
-                       Greek_KAPPA                                             = 0x07ca,
-                       Greek_LAMDA                                             = 0x07cb,
-                       Greek_LAMBDA                                    = 0x07cb,
-                       Greek_MU                                                = 0x07cc,
-                       Greek_NU                                                = 0x07cd,
-                       Greek_XI                                                = 0x07ce,
-                       Greek_OMICRON                                   = 0x07cf,
-                       Greek_PI                                                = 0x07d0,
-                       Greek_RHO                                               = 0x07d1,
-                       Greek_SIGMA                                             = 0x07d2,
-                       Greek_TAU                                               = 0x07d4,
-                       Greek_UPSILON                                   = 0x07d5,
-                       Greek_PHI                                               = 0x07d6,
-                       Greek_CHI                                               = 0x07d7,
-                       Greek_PSI                                               = 0x07d8,
-                       Greek_OMEGA                                             = 0x07d9,
-                       Greek_alpha                                             = 0x07e1,
-                       Greek_beta                                              = 0x07e2,
-                       Greek_gamma                                             = 0x07e3,
-                       Greek_delta                                             = 0x07e4,
-                       Greek_epsilon                                   = 0x07e5,
-                       Greek_zeta                                              = 0x07e6,
-                       Greek_eta                                               = 0x07e7,
-                       Greek_theta                                             = 0x07e8,
-                       Greek_iota                                              = 0x07e9,
-                       Greek_kappa                                             = 0x07ea,
-                       Greek_lamda                                             = 0x07eb,
-                       Greek_lambda                                    = 0x07eb,
-                       Greek_mu                                                = 0x07ec,
-                       Greek_nu                                                = 0x07ed,
-                       Greek_xi                                                = 0x07ee,
-                       Greek_omicron                                   = 0x07ef,
-                       Greek_pi                                                = 0x07f0,
-                       Greek_rho                                               = 0x07f1,
-                       Greek_sigma                                             = 0x07f2,
-                       Greek_finalsmallsigma                   = 0x07f3,
-                       Greek_tau                                               = 0x07f4,
-                       Greek_upsilon                                   = 0x07f5,
-                       Greek_phi                                               = 0x07f6,
-                       Greek_chi                                               = 0x07f7,
-                       Greek_psi                                               = 0x07f8,
-                       Greek_omega                                             = 0x07f9,
-                       Greek_switch                                    = 0xff7e,
-                       leftradical                                             = 0x08a1,
-                       topleftradical                                  = 0x08a2,
-                       horizconnector                                  = 0x08a3,
-                       topintegral                                             = 0x08a4,
-                       botintegral                                             = 0x08a5,
-                       vertconnector                                   = 0x08a6,
-                       topleftsqbracket                                = 0x08a7,
-                       botleftsqbracket                                = 0x08a8,
-                       toprightsqbracket                               = 0x08a9,
-                       botrightsqbracket                               = 0x08aa,
-                       topleftparens                                   = 0x08ab,
-                       botleftparens                                   = 0x08ac,
-                       toprightparens                                  = 0x08ad,
-                       botrightparens                                  = 0x08ae,
-                       leftmiddlecurlybrace                    = 0x08af,
-                       rightmiddlecurlybrace                   = 0x08b0,
-                       topleftsummation                                = 0x08b1,
-                       botleftsummation                                = 0x08b2,
-                       topvertsummationconnector               = 0x08b3,
-                       botvertsummationconnector               = 0x08b4,
-                       toprightsummation                               = 0x08b5,
-                       botrightsummation                               = 0x08b6,
-                       rightmiddlesummation                    = 0x08b7,
-                       lessthanequal                                   = 0x08bc,
-                       notequal                                                = 0x08bd,
-                       greaterthanequal                                = 0x08be,
-                       integral                                                = 0x08bf,
-                       therefore                                               = 0x08c0,
-                       variation                                               = 0x08c1,
-                       infinity                                                = 0x08c2,
-                       nabla                                                   = 0x08c5,
-                       approximate                                             = 0x08c8,
-                       similarequal                                    = 0x08c9,
-                       ifonlyif                                                = 0x08cd,
-                       implies                                                 = 0x08ce,
-                       identical                                               = 0x08cf,
-                       radical                                                 = 0x08d6,
-                       includedin                                              = 0x08da,
-                       includes                                                = 0x08db,
-                       intersection                                    = 0x08dc,
-                       union                                                   = 0x08dd,
-                       logicaland                                              = 0x08de,
-                       logicalor                                               = 0x08df,
-                       partialderivative                               = 0x08ef,
-                       function                                                = 0x08f6,
-                       leftarrow                                               = 0x08fb,
-                       uparrow                                                 = 0x08fc,
-                       rightarrow                                              = 0x08fd,
-                       downarrow                                               = 0x08fe,
-                       blank                                                   = 0x09df,
-                       soliddiamond                                    = 0x09e0,
-                       checkerboard                                    = 0x09e1,
-                       ht                                                              = 0x09e2,
-                       ff                                                              = 0x09e3,
-                       cr                                                              = 0x09e4,
-                       lf                                                              = 0x09e5,
-                       nl                                                              = 0x09e8,
-                       vt                                                              = 0x09e9,
-                       lowrightcorner                                  = 0x09ea,
-                       uprightcorner                                   = 0x09eb,
-                       upleftcorner                                    = 0x09ec,
-                       lowleftcorner                                   = 0x09ed,
-                       crossinglines                                   = 0x09ee,
-                       horizlinescan1                                  = 0x09ef,
-                       horizlinescan3                                  = 0x09f0,
-                       horizlinescan5                                  = 0x09f1,
-                       horizlinescan7                                  = 0x09f2,
-                       horizlinescan9                                  = 0x09f3,
-                       leftt                                                   = 0x09f4,
-                       rightt                                                  = 0x09f5,
-                       bott                                                    = 0x09f6,
-                       topt                                                    = 0x09f7,
-                       vertbar                                                 = 0x09f8,
-                       emspace                                                 = 0x0aa1,
-                       enspace                                                 = 0x0aa2,
-                       em3space                                                = 0x0aa3,
-                       em4space                                                = 0x0aa4,
-                       digitspace                                              = 0x0aa5,
-                       punctspace                                              = 0x0aa6,
-                       thinspace                                               = 0x0aa7,
-                       hairspace                                               = 0x0aa8,
-                       emdash                                                  = 0x0aa9,
-                       endash                                                  = 0x0aaa,
-                       signifblank                                             = 0x0aac,
-                       ellipsis                                                = 0x0aae,
-                       doubbaselinedot                                 = 0x0aaf,
-                       onethird                                                = 0x0ab0,
-                       twothirds                                               = 0x0ab1,
-                       onefifth                                                = 0x0ab2,
-                       twofifths                                               = 0x0ab3,
-                       threefifths                                             = 0x0ab4,
-                       fourfifths                                              = 0x0ab5,
-                       onesixth                                                = 0x0ab6,
-                       fivesixths                                              = 0x0ab7,
-                       careof                                                  = 0x0ab8,
-                       figdash                                                 = 0x0abb,
-                       leftanglebracket                                = 0x0abc,
-                       decimalpoint                                    = 0x0abd,
-                       rightanglebracket                               = 0x0abe,
-                       marker                                                  = 0x0abf,
-                       oneeighth                                               = 0x0ac3,
-                       threeeighths                                    = 0x0ac4,
-                       fiveeighths                                             = 0x0ac5,
-                       seveneighths                                    = 0x0ac6,
-                       trademark                                               = 0x0ac9,
-                       signaturemark                                   = 0x0aca,
-                       trademarkincircle                               = 0x0acb,
-                       leftopentriangle                                = 0x0acc,
-                       rightopentriangle                               = 0x0acd,
-                       emopencircle                                    = 0x0ace,
-                       emopenrectangle                                 = 0x0acf,
-                       leftsinglequotemark                             = 0x0ad0,
-                       rightsinglequotemark                    = 0x0ad1,
-                       leftdoublequotemark                             = 0x0ad2,
-                       rightdoublequotemark                    = 0x0ad3,
-                       prescription                                    = 0x0ad4,
-                       permille                                                = 0x0ad5,
-                       minutes                                                 = 0x0ad6,
-                       seconds                                                 = 0x0ad7,
-                       latincross                                              = 0x0ad9,
-                       hexagram                                                = 0x0ada,
-                       filledrectbullet                                = 0x0adb,
-                       filledlefttribullet                             = 0x0adc,
-                       filledrighttribullet                    = 0x0add,
-                       emfilledcircle                                  = 0x0ade,
-                       emfilledrect                                    = 0x0adf,
-                       enopencircbullet                                = 0x0ae0,
-                       enopensquarebullet                              = 0x0ae1,
-                       openrectbullet                                  = 0x0ae2,
-                       opentribulletup                                 = 0x0ae3,
-                       opentribulletdown                               = 0x0ae4,
-                       openstar                                                = 0x0ae5,
-                       enfilledcircbullet                              = 0x0ae6,
-                       enfilledsqbullet                                = 0x0ae7,
-                       filledtribulletup                               = 0x0ae8,
-                       filledtribulletdown                             = 0x0ae9,
-                       leftpointer                                             = 0x0aea,
-                       rightpointer                                    = 0x0aeb,
-                       club                                                    = 0x0aec,
-                       diamond                                                 = 0x0aed,
-                       heart                                                   = 0x0aee,
-                       maltesecross                                    = 0x0af0,
-                       dagger                                                  = 0x0af1,
-                       doubledagger                                    = 0x0af2,
-                       checkmark                                               = 0x0af3,
-                       ballotcross                                             = 0x0af4,
-                       musicalsharp                                    = 0x0af5,
-                       musicalflat                                             = 0x0af6,
-                       malesymbol                                              = 0x0af7,
-                       femalesymbol                                    = 0x0af8,
-                       telephone                                               = 0x0af9,
-                       telephonerecorder                               = 0x0afa,
-                       phonographcopyright                             = 0x0afb,
-                       caret                                                   = 0x0afc,
-                       singlelowquotemark                              = 0x0afd,
-                       doublelowquotemark                              = 0x0afe,
-                       cursor                                                  = 0x0aff,
-                       leftcaret                                               = 0x0ba3,
-                       rightcaret                                              = 0x0ba6,
-                       downcaret                                               = 0x0ba8,
-                       upcaret                                                 = 0x0ba9,
-                       overbar                                                 = 0x0bc0,
-                       downtack                                                = 0x0bc2,
-                       upshoe                                                  = 0x0bc3,
-                       downstile                                               = 0x0bc4,
-                       underbar                                                = 0x0bc6,
-                       jot                                                             = 0x0bca,
-                       quad                                                    = 0x0bcc,
-                       uptack                                                  = 0x0bce,
-                       circle                                                  = 0x0bcf,
-                       upstile                                                 = 0x0bd3,
-                       downshoe                                                = 0x0bd6,
-                       rightshoe                                               = 0x0bd8,
-                       leftshoe                                                = 0x0bda,
-                       lefttack                                                = 0x0bdc,
-                       righttack                                               = 0x0bfc,
-                       hebrew_doublelowline                    = 0x0cdf,
-                       hebrew_aleph                                    = 0x0ce0,
-                       hebrew_bet                                              = 0x0ce1,
-                       hebrew_beth                                             = 0x0ce1,
-                       hebrew_gimel                                    = 0x0ce2,
-                       hebrew_gimmel                                   = 0x0ce2,
-                       hebrew_dalet                                    = 0x0ce3,
-                       hebrew_daleth                                   = 0x0ce3,
-                       hebrew_he                                               = 0x0ce4,
-                       hebrew_waw                                              = 0x0ce5,
-                       hebrew_zain                                             = 0x0ce6,
-                       hebrew_zayin                                    = 0x0ce6,
-                       hebrew_chet                                             = 0x0ce7,
-                       hebrew_het                                              = 0x0ce7,
-                       hebrew_tet                                              = 0x0ce8,
-                       hebrew_teth                                             = 0x0ce8,
-                       hebrew_yod                                              = 0x0ce9,
-                       hebrew_finalkaph                                = 0x0cea,
-                       hebrew_kaph                                             = 0x0ceb,
-                       hebrew_lamed                                    = 0x0cec,
-                       hebrew_finalmem                                 = 0x0ced,
-                       hebrew_mem                                              = 0x0cee,
-                       hebrew_finalnun                                 = 0x0cef,
-                       hebrew_nun                                              = 0x0cf0,
-                       hebrew_samech                                   = 0x0cf1,
-                       hebrew_samekh                                   = 0x0cf1,
-                       hebrew_ayin                                             = 0x0cf2,
-                       hebrew_finalpe                                  = 0x0cf3,
-                       hebrew_pe                                               = 0x0cf4,
-                       hebrew_finalzade                                = 0x0cf5,
-                       hebrew_finalzadi                                = 0x0cf5,
-                       hebrew_zade                                             = 0x0cf6,
-                       hebrew_zadi                                             = 0x0cf6,
-                       hebrew_qoph                                             = 0x0cf7,
-                       hebrew_kuf                                              = 0x0cf7,
-                       hebrew_resh                                             = 0x0cf8,
-                       hebrew_shin                                             = 0x0cf9,
-                       hebrew_taw                                              = 0x0cfa,
-                       hebrew_taf                                              = 0x0cfa,
-                       Hebrew_switch                                   = 0xff7e,
-                       Thai_kokai                                              = 0x0da1,
-                       Thai_khokhai                                    = 0x0da2,
-                       Thai_khokhuat                                   = 0x0da3,
-                       Thai_khokhwai                                   = 0x0da4,
-                       Thai_khokhon                                    = 0x0da5,
-                       Thai_khorakhang                                 = 0x0da6,
-                       Thai_ngongu                                             = 0x0da7,
-                       Thai_chochan                                    = 0x0da8,
-                       Thai_choching                                   = 0x0da9,
-                       Thai_chochang                                   = 0x0daa,
-                       Thai_soso                                               = 0x0dab,
-                       Thai_chochoe                                    = 0x0dac,
-                       Thai_yoying                                             = 0x0dad,
-                       Thai_dochada                                    = 0x0dae,
-                       Thai_topatak                                    = 0x0daf,
-                       Thai_thothan                                    = 0x0db0,
-                       Thai_thonangmontho                              = 0x0db1,
-                       Thai_thophuthao                                 = 0x0db2,
-                       Thai_nonen                                              = 0x0db3,
-                       Thai_dodek                                              = 0x0db4,
-                       Thai_totao                                              = 0x0db5,
-                       Thai_thothung                                   = 0x0db6,
-                       Thai_thothahan                                  = 0x0db7,
-                       Thai_thothong                                   = 0x0db8,
-                       Thai_nonu                                               = 0x0db9,
-                       Thai_bobaimai                                   = 0x0dba,
-                       Thai_popla                                              = 0x0dbb,
-                       Thai_phophung                                   = 0x0dbc,
-                       Thai_fofa                                               = 0x0dbd,
-                       Thai_phophan                                    = 0x0dbe,
-                       Thai_fofan                                              = 0x0dbf,
-                       Thai_phosamphao                                 = 0x0dc0,
-                       Thai_moma                                               = 0x0dc1,
-                       Thai_yoyak                                              = 0x0dc2,
-                       Thai_rorua                                              = 0x0dc3,
-                       Thai_ru                                                 = 0x0dc4,
-                       Thai_loling                                             = 0x0dc5,
-                       Thai_lu                                                 = 0x0dc6,
-                       Thai_wowaen                                             = 0x0dc7,
-                       Thai_sosala                                             = 0x0dc8,
-                       Thai_sorusi                                             = 0x0dc9,
-                       Thai_sosua                                              = 0x0dca,
-                       Thai_hohip                                              = 0x0dcb,
-                       Thai_lochula                                    = 0x0dcc,
-                       Thai_oang                                               = 0x0dcd,
-                       Thai_honokhuk                                   = 0x0dce,
-                       Thai_paiyannoi                                  = 0x0dcf,
-                       Thai_saraa                                              = 0x0dd0,
-                       Thai_maihanakat                                 = 0x0dd1,
-                       Thai_saraaa                                             = 0x0dd2,
-                       Thai_saraam                                             = 0x0dd3,
-                       Thai_sarai                                              = 0x0dd4,
-                       Thai_saraii                                             = 0x0dd5,
-                       Thai_saraue                                             = 0x0dd6,
-                       Thai_sarauee                                    = 0x0dd7,
-                       Thai_sarau                                              = 0x0dd8,
-                       Thai_sarauu                                             = 0x0dd9,
-                       Thai_phinthu                                    = 0x0dda,
-                       Thai_maihanakat_maitho                  = 0x0dde,
-                       Thai_baht                                               = 0x0ddf,
-                       Thai_sarae                                              = 0x0de0,
-                       Thai_saraae                                             = 0x0de1,
-                       Thai_sarao                                              = 0x0de2,
-                       Thai_saraaimaimuan                              = 0x0de3,
-                       Thai_saraaimaimalai                             = 0x0de4,
-                       Thai_lakkhangyao                                = 0x0de5,
-                       Thai_maiyamok                                   = 0x0de6,
-                       Thai_maitaikhu                                  = 0x0de7,
-                       Thai_maiek                                              = 0x0de8,
-                       Thai_maitho                                             = 0x0de9,
-                       Thai_maitri                                             = 0x0dea,
-                       Thai_maichattawa                                = 0x0deb,
-                       Thai_thanthakhat                                = 0x0dec,
-                       Thai_nikhahit                                   = 0x0ded,
-                       Thai_leksun                                             = 0x0df0,
-                       Thai_leknung                                    = 0x0df1,
-                       Thai_leksong                                    = 0x0df2,
-                       Thai_leksam                                             = 0x0df3,
-                       Thai_leksi                                              = 0x0df4,
-                       Thai_lekha                                              = 0x0df5,
-                       Thai_lekhok                                             = 0x0df6,
-                       Thai_lekchet                                    = 0x0df7,
-                       Thai_lekpaet                                    = 0x0df8,
-                       Thai_lekkao                                             = 0x0df9,
-                       Hangul                                                  = 0xff31,
-                       Hangul_Start                                    = 0xff32,
-                       Hangul_End                                              = 0xff33,
-                       Hangul_Hanja                                    = 0xff34,
-                       Hangul_Jamo                                             = 0xff35,
-                       Hangul_Romaja                                   = 0xff36,
-                       Hangul_Codeinput                                = 0xff37,
-                       Hangul_Jeonja                                   = 0xff38,
-                       Hangul_Banja                                    = 0xff39,
-                       Hangul_PreHanja                                 = 0xff3a,
-                       Hangul_PostHanja                                = 0xff3b,
-                       Hangul_SingleCandidate                  = 0xff3c,
-                       Hangul_MultipleCandidate                = 0xff3d,
-                       Hangul_PreviousCandidate                = 0xff3e,
-                       Hangul_Special                                  = 0xff3f,
-                       Hangul_switch                                   = 0xff7e,
-                       Hangul_Kiyeog                                   = 0x0ea1,
-                       Hangul_SsangKiyeog                              = 0x0ea2,
-                       Hangul_KiyeogSios                               = 0x0ea3,
-                       Hangul_Nieun                                    = 0x0ea4,
-                       Hangul_NieunJieuj                               = 0x0ea5,
-                       Hangul_NieunHieuh                               = 0x0ea6,
-                       Hangul_Dikeud                                   = 0x0ea7,
-                       Hangul_SsangDikeud                              = 0x0ea8,
-                       Hangul_Rieul                                    = 0x0ea9,
-                       Hangul_RieulKiyeog                              = 0x0eaa,
-                       Hangul_RieulMieum                               = 0x0eab,
-                       Hangul_RieulPieub                               = 0x0eac,
-                       Hangul_RieulSios                                = 0x0ead,
-                       Hangul_RieulTieut                               = 0x0eae,
-                       Hangul_RieulPhieuf                              = 0x0eaf,
-                       Hangul_RieulHieuh                               = 0x0eb0,
-                       Hangul_Mieum                                    = 0x0eb1,
-                       Hangul_Pieub                                    = 0x0eb2,
-                       Hangul_SsangPieub                               = 0x0eb3,
-                       Hangul_PieubSios                                = 0x0eb4,
-                       Hangul_Sios                                             = 0x0eb5,
-                       Hangul_SsangSios                                = 0x0eb6,
-                       Hangul_Ieung                                    = 0x0eb7,
-                       Hangul_Jieuj                                    = 0x0eb8,
-                       Hangul_SsangJieuj                               = 0x0eb9,
-                       Hangul_Cieuc                                    = 0x0eba,
-                       Hangul_Khieuq                                   = 0x0ebb,
-                       Hangul_Tieut                                    = 0x0ebc,
-                       Hangul_Phieuf                                   = 0x0ebd,
-                       Hangul_Hieuh                                    = 0x0ebe,
-                       Hangul_A                                                = 0x0ebf,
-                       Hangul_AE                                               = 0x0ec0,
-                       Hangul_YA                                               = 0x0ec1,
-                       Hangul_YAE                                              = 0x0ec2,
-                       Hangul_EO                                               = 0x0ec3,
-                       Hangul_E                                                = 0x0ec4,
-                       Hangul_YEO                                              = 0x0ec5,
-                       Hangul_YE                                               = 0x0ec6,
-                       Hangul_O                                                = 0x0ec7,
-                       Hangul_WA                                               = 0x0ec8,
-                       Hangul_WAE                                              = 0x0ec9,
-                       Hangul_OE                                               = 0x0eca,
-                       Hangul_YO                                               = 0x0ecb,
-                       Hangul_U                                                = 0x0ecc,
-                       Hangul_WEO                                              = 0x0ecd,
-                       Hangul_WE                                               = 0x0ece,
-                       Hangul_WI                                               = 0x0ecf,
-                       Hangul_YU                                               = 0x0ed0,
-                       Hangul_EU                                               = 0x0ed1,
-                       Hangul_YI                                               = 0x0ed2,
-                       Hangul_I                                                = 0x0ed3,
-                       Hangul_J_Kiyeog                                 = 0x0ed4,
-                       Hangul_J_SsangKiyeog                    = 0x0ed5,
-                       Hangul_J_KiyeogSios                             = 0x0ed6,
-                       Hangul_J_Nieun                                  = 0x0ed7,
-                       Hangul_J_NieunJieuj                             = 0x0ed8,
-                       Hangul_J_NieunHieuh                             = 0x0ed9,
-                       Hangul_J_Dikeud                                 = 0x0eda,
-                       Hangul_J_Rieul                                  = 0x0edb,
-                       Hangul_J_RieulKiyeog                    = 0x0edc,
-                       Hangul_J_RieulMieum                             = 0x0edd,
-                       Hangul_J_RieulPieub                             = 0x0ede,
-                       Hangul_J_RieulSios                              = 0x0edf,
-                       Hangul_J_RieulTieut                             = 0x0ee0,
-                       Hangul_J_RieulPhieuf                    = 0x0ee1,
-                       Hangul_J_RieulHieuh                             = 0x0ee2,
-                       Hangul_J_Mieum                                  = 0x0ee3,
-                       Hangul_J_Pieub                                  = 0x0ee4,
-                       Hangul_J_PieubSios                              = 0x0ee5,
-                       Hangul_J_Sios                                   = 0x0ee6,
-                       Hangul_J_SsangSios                              = 0x0ee7,
-                       Hangul_J_Ieung                                  = 0x0ee8,
-                       Hangul_J_Jieuj                                  = 0x0ee9,
-                       Hangul_J_Cieuc                                  = 0x0eea,
-                       Hangul_J_Khieuq                                 = 0x0eeb,
-                       Hangul_J_Tieut                                  = 0x0eec,
-                       Hangul_J_Phieuf                                 = 0x0eed,
-                       Hangul_J_Hieuh                                  = 0x0eee,
-                       Hangul_RieulYeorinHieuh                 = 0x0eef,
-                       Hangul_SunkyeongeumMieum                = 0x0ef0,
-                       Hangul_SunkyeongeumPieub                = 0x0ef1,
-                       Hangul_PanSios                                  = 0x0ef2,
-                       Hangul_KkogjiDalrinIeung                = 0x0ef3,
-                       Hangul_SunkyeongeumPhieuf               = 0x0ef4,
-                       Hangul_YeorinHieuh                              = 0x0ef5,
-                       Hangul_AraeA                                    = 0x0ef6,
-                       Hangul_AraeAE                                   = 0x0ef7,
-                       Hangul_J_PanSios                                = 0x0ef8,
-                       Hangul_J_KkogjiDalrinIeung              = 0x0ef9,
-                       Hangul_J_YeorinHieuh                    = 0x0efa,
-                       Korean_Won                                              = 0x0eff,
-                       Armenian_ligature_ew                    = 0x1000587,
-                       Armenian_full_stop                              = 0x1000589,
-                       Armenian_verjaket                               = 0x1000589,
-                       Armenian_separation_mark                = 0x100055d,
-                       Armenian_but                                    = 0x100055d,
-                       Armenian_hyphen                                 = 0x100058a,
-                       Armenian_yentamna                               = 0x100058a,
-                       Armenian_exclam                                 = 0x100055c,
-                       Armenian_amanak                                 = 0x100055c,
-                       Armenian_accent                                 = 0x100055b,
-                       Armenian_shesht                                 = 0x100055b,
-                       Armenian_question                               = 0x100055e,
-                       Armenian_paruyk                                 = 0x100055e,
-                       Armenian_AYB                                    = 0x1000531,
-                       Armenian_ayb                                    = 0x1000561,
-                       Armenian_BEN                                    = 0x1000532,
-                       Armenian_ben                                    = 0x1000562,
-                       Armenian_GIM                                    = 0x1000533,
-                       Armenian_gim                                    = 0x1000563,
-                       Armenian_DA                                             = 0x1000534,
-                       Armenian_da                                             = 0x1000564,
-                       Armenian_YECH                                   = 0x1000535,
-                       Armenian_yech                                   = 0x1000565,
-                       Armenian_ZA                                             = 0x1000536,
-                       Armenian_za                                             = 0x1000566,
-                       Armenian_E                                              = 0x1000537,
-                       Armenian_e                                              = 0x1000567,
-                       Armenian_AT                                             = 0x1000538,
-                       Armenian_at                                             = 0x1000568,
-                       Armenian_TO                                             = 0x1000539,
-                       Armenian_to                                             = 0x1000569,
-                       Armenian_ZHE                                    = 0x100053a,
-                       Armenian_zhe                                    = 0x100056a,
-                       Armenian_INI                                    = 0x100053b,
-                       Armenian_ini                                    = 0x100056b,
-                       Armenian_LYUN                                   = 0x100053c,
-                       Armenian_lyun                                   = 0x100056c,
-                       Armenian_KHE                                    = 0x100053d,
-                       Armenian_khe                                    = 0x100056d,
-                       Armenian_TSA                                    = 0x100053e,
-                       Armenian_tsa                                    = 0x100056e,
-                       Armenian_KEN                                    = 0x100053f,
-                       Armenian_ken                                    = 0x100056f,
-                       Armenian_HO                                             = 0x1000540,
-                       Armenian_ho                                             = 0x1000570,
-                       Armenian_DZA                                    = 0x1000541,
-                       Armenian_dza                                    = 0x1000571,
-                       Armenian_GHAT                                   = 0x1000542,
-                       Armenian_ghat                                   = 0x1000572,
-                       Armenian_TCHE                                   = 0x1000543,
-                       Armenian_tche                                   = 0x1000573,
-                       Armenian_MEN                                    = 0x1000544,
-                       Armenian_men                                    = 0x1000574,
-                       Armenian_HI                                             = 0x1000545,
-                       Armenian_hi                                             = 0x1000575,
-                       Armenian_NU                                             = 0x1000546,
-                       Armenian_nu                                             = 0x1000576,
-                       Armenian_SHA                                    = 0x1000547,
-                       Armenian_sha                                    = 0x1000577,
-                       Armenian_VO                                             = 0x1000548,
-                       Armenian_vo                                             = 0x1000578,
-                       Armenian_CHA                                    = 0x1000549,
-                       Armenian_cha                                    = 0x1000579,
-                       Armenian_PE                                             = 0x100054a,
-                       Armenian_pe                                             = 0x100057a,
-                       Armenian_JE                                             = 0x100054b,
-                       Armenian_je                                             = 0x100057b,
-                       Armenian_RA                                             = 0x100054c,
-                       Armenian_ra                                             = 0x100057c,
-                       Armenian_SE                                             = 0x100054d,
-                       Armenian_se                                             = 0x100057d,
-                       Armenian_VEV                                    = 0x100054e,
-                       Armenian_vev                                    = 0x100057e,
-                       Armenian_TYUN                                   = 0x100054f,
-                       Armenian_tyun                                   = 0x100057f,
-                       Armenian_RE                                             = 0x1000550,
-                       Armenian_re                                             = 0x1000580,
-                       Armenian_TSO                                    = 0x1000551,
-                       Armenian_tso                                    = 0x1000581,
-                       Armenian_VYUN                                   = 0x1000552,
-                       Armenian_vyun                                   = 0x1000582,
-                       Armenian_PYUR                                   = 0x1000553,
-                       Armenian_pyur                                   = 0x1000583,
-                       Armenian_KE                                             = 0x1000554,
-                       Armenian_ke                                             = 0x1000584,
-                       Armenian_O                                              = 0x1000555,
-                       Armenian_o                                              = 0x1000585,
-                       Armenian_FE                                             = 0x1000556,
-                       Armenian_fe                                             = 0x1000586,
-                       Armenian_apostrophe                             = 0x100055a,
-                       Georgian_an                                             = 0x10010d0,
-                       Georgian_ban                                    = 0x10010d1,
-                       Georgian_gan                                    = 0x10010d2,
-                       Georgian_don                                    = 0x10010d3,
-                       Georgian_en                                             = 0x10010d4,
-                       Georgian_vin                                    = 0x10010d5,
-                       Georgian_zen                                    = 0x10010d6,
-                       Georgian_tan                                    = 0x10010d7,
-                       Georgian_in                                             = 0x10010d8,
-                       Georgian_kan                                    = 0x10010d9,
-                       Georgian_las                                    = 0x10010da,
-                       Georgian_man                                    = 0x10010db,
-                       Georgian_nar                                    = 0x10010dc,
-                       Georgian_on                                             = 0x10010dd,
-                       Georgian_par                                    = 0x10010de,
-                       Georgian_zhar                                   = 0x10010df,
-                       Georgian_rae                                    = 0x10010e0,
-                       Georgian_san                                    = 0x10010e1,
-                       Georgian_tar                                    = 0x10010e2,
-                       Georgian_un                                             = 0x10010e3,
-                       Georgian_phar                                   = 0x10010e4,
-                       Georgian_khar                                   = 0x10010e5,
-                       Georgian_ghan                                   = 0x10010e6,
-                       Georgian_qar                                    = 0x10010e7,
-                       Georgian_shin                                   = 0x10010e8,
-                       Georgian_chin                                   = 0x10010e9,
-                       Georgian_can                                    = 0x10010ea,
-                       Georgian_jil                                    = 0x10010eb,
-                       Georgian_cil                                    = 0x10010ec,
-                       Georgian_char                                   = 0x10010ed,
-                       Georgian_xan                                    = 0x10010ee,
-                       Georgian_jhan                                   = 0x10010ef,
-                       Georgian_hae                                    = 0x10010f0,
-                       Georgian_he                                             = 0x10010f1,
-                       Georgian_hie                                    = 0x10010f2,
-                       Georgian_we                                             = 0x10010f3,
-                       Georgian_har                                    = 0x10010f4,
-                       Georgian_hoe                                    = 0x10010f5,
-                       Georgian_fi                                             = 0x10010f6,
-                       Xabovedot                                               = 0x1001e8a,
-                       Ibreve                                                  = 0x100012c,
-                       Zstroke                                                 = 0x10001b5,
-                       Gcaron                                                  = 0x10001e6,
-                       Ocaron                                                  = 0x10001d1,
-                       Obarred                                                 = 0x100019f,
-                       xabovedot                                               = 0x1001e8b,
-                       ibreve                                                  = 0x100012d,
-                       zstroke                                                 = 0x10001b6,
-                       gcaron                                                  = 0x10001e7,
-                       ocaron                                                  = 0x10001d2,
-                       obarred                                                 = 0x1000275,
-                       SCHWA                                                   = 0x100018f,
-                       schwa                                                   = 0x1000259,
-                       EZH                                                             = 0x10001b7,
-                       ezh                                                             = 0x1000292,
-                       Lbelowdot                                               = 0x1001e36,
-                       lbelowdot                                               = 0x1001e37,
-                       Abelowdot                                               = 0x1001ea0,
-                       abelowdot                                               = 0x1001ea1,
-                       Ahook                                                   = 0x1001ea2,
-                       ahook                                                   = 0x1001ea3,
-                       Acircumflexacute                                = 0x1001ea4,
-                       acircumflexacute                                = 0x1001ea5,
-                       Acircumflexgrave                                = 0x1001ea6,
-                       acircumflexgrave                                = 0x1001ea7,
-                       Acircumflexhook                                 = 0x1001ea8,
-                       acircumflexhook                                 = 0x1001ea9,
-                       Acircumflextilde                                = 0x1001eaa,
-                       acircumflextilde                                = 0x1001eab,
-                       Acircumflexbelowdot                             = 0x1001eac,
-                       acircumflexbelowdot                             = 0x1001ead,
-                       Abreveacute                                             = 0x1001eae,
-                       abreveacute                                             = 0x1001eaf,
-                       Abrevegrave                                             = 0x1001eb0,
-                       abrevegrave                                             = 0x1001eb1,
-                       Abrevehook                                              = 0x1001eb2,
-                       abrevehook                                              = 0x1001eb3,
-                       Abrevetilde                                             = 0x1001eb4,
-                       abrevetilde                                             = 0x1001eb5,
-                       Abrevebelowdot                                  = 0x1001eb6,
-                       abrevebelowdot                                  = 0x1001eb7,
-                       Ebelowdot                                               = 0x1001eb8,
-                       ebelowdot                                               = 0x1001eb9,
-                       Ehook                                                   = 0x1001eba,
-                       ehook                                                   = 0x1001ebb,
-                       Etilde                                                  = 0x1001ebc,
-                       etilde                                                  = 0x1001ebd,
-                       Ecircumflexacute                                = 0x1001ebe,
-                       ecircumflexacute                                = 0x1001ebf,
-                       Ecircumflexgrave                                = 0x1001ec0,
-                       ecircumflexgrave                                = 0x1001ec1,
-                       Ecircumflexhook                                 = 0x1001ec2,
-                       ecircumflexhook                                 = 0x1001ec3,
-                       Ecircumflextilde                                = 0x1001ec4,
-                       ecircumflextilde                                = 0x1001ec5,
-                       Ecircumflexbelowdot                             = 0x1001ec6,
-                       ecircumflexbelowdot                             = 0x1001ec7,
-                       Ihook                                                   = 0x1001ec8,
-                       ihook                                                   = 0x1001ec9,
-                       Ibelowdot                                               = 0x1001eca,
-                       ibelowdot                                               = 0x1001ecb,
-                       Obelowdot                                               = 0x1001ecc,
-                       obelowdot                                               = 0x1001ecd,
-                       Ohook                                                   = 0x1001ece,
-                       ohook                                                   = 0x1001ecf,
-                       Ocircumflexacute                                = 0x1001ed0,
-                       ocircumflexacute                                = 0x1001ed1,
-                       Ocircumflexgrave                                = 0x1001ed2,
-                       ocircumflexgrave                                = 0x1001ed3,
-                       Ocircumflexhook                                 = 0x1001ed4,
-                       ocircumflexhook                                 = 0x1001ed5,
-                       Ocircumflextilde                                = 0x1001ed6,
-                       ocircumflextilde                                = 0x1001ed7,
-                       Ocircumflexbelowdot                             = 0x1001ed8,
-                       ocircumflexbelowdot                             = 0x1001ed9,
-                       Ohornacute                                              = 0x1001eda,
-                       ohornacute                                              = 0x1001edb,
-                       Ohorngrave                                              = 0x1001edc,
-                       ohorngrave                                              = 0x1001edd,
-                       Ohornhook                                               = 0x1001ede,
-                       ohornhook                                               = 0x1001edf,
-                       Ohorntilde                                              = 0x1001ee0,
-                       ohorntilde                                              = 0x1001ee1,
-                       Ohornbelowdot                                   = 0x1001ee2,
-                       ohornbelowdot                                   = 0x1001ee3,
-                       Ubelowdot                                               = 0x1001ee4,
-                       ubelowdot                                               = 0x1001ee5,
-                       Uhook                                                   = 0x1001ee6,
-                       uhook                                                   = 0x1001ee7,
-                       Uhornacute                                              = 0x1001ee8,
-                       uhornacute                                              = 0x1001ee9,
-                       Uhorngrave                                              = 0x1001eea,
-                       uhorngrave                                              = 0x1001eeb,
-                       Uhornhook                                               = 0x1001eec,
-                       uhornhook                                               = 0x1001eed,
-                       Uhorntilde                                              = 0x1001eee,
-                       uhorntilde                                              = 0x1001eef,
-                       Uhornbelowdot                                   = 0x1001ef0,
-                       uhornbelowdot                                   = 0x1001ef1,
-                       Ybelowdot                                               = 0x1001ef4,
-                       ybelowdot                                               = 0x1001ef5,
-                       Yhook                                                   = 0x1001ef6,
-                       yhook                                                   = 0x1001ef7,
-                       Ytilde                                                  = 0x1001ef8,
-                       ytilde                                                  = 0x1001ef9,
-                       Ohorn                                                   = 0x10001a0,
-                       ohorn                                                   = 0x10001a1,
-                       Uhorn                                                   = 0x10001af,
-                       uhorn                                                   = 0x10001b0,
-                       EcuSign                                                 = 0x10020a0,
-                       ColonSign                                               = 0x10020a1,
-                       CruzeiroSign                                    = 0x10020a2,
-                       FFrancSign                                              = 0x10020a3,
-                       LiraSign                                                = 0x10020a4,
-                       MillSign                                                = 0x10020a5,
-                       NairaSign                                               = 0x10020a6,
-                       PesetaSign                                              = 0x10020a7,
-                       RupeeSign                                               = 0x10020a8,
-                       WonSign                                                 = 0x10020a9,
-                       NewSheqelSign                                   = 0x10020aa,
-                       DongSign                                                = 0x10020ab,
-                       EuroSign                                                = 0x20ac,
-                       zerosuperior                                    = 0x1002070,
-                       foursuperior                                    = 0x1002074,
-                       fivesuperior                                    = 0x1002075,
-                       sixsuperior                                             = 0x1002076,
-                       sevensuperior                                   = 0x1002077,
-                       eightsuperior                                   = 0x1002078,
-                       ninesuperior                                    = 0x1002079,
-                       zerosubscript                                   = 0x1002080,
-                       onesubscript                                    = 0x1002081,
-                       twosubscript                                    = 0x1002082,
-                       threesubscript                                  = 0x1002083,
-                       foursubscript                                   = 0x1002084,
-                       fivesubscript                                   = 0x1002085,
-                       sixsubscript                                    = 0x1002086,
-                       sevensubscript                                  = 0x1002087,
-                       eightsubscript                                  = 0x1002088,
-                       ninesubscript                                   = 0x1002089,
-                       partdifferential                                = 0x1002202,
-                       emptyset                                                = 0x1002205,
-                       elementof                                               = 0x1002208,
-                       notelementof                                    = 0x1002209,
-                       containsas                                              = 0x100220B,
-                       squareroot                                              = 0x100221A,
-                       cuberoot                                                = 0x100221B,
-                       fourthroot                                              = 0x100221C,
-                       dintegral                                               = 0x100222C,
-                       tintegral                                               = 0x100222D,
-                       because                                                 = 0x1002235,
-                       approxeq                                                = 0x1002248,
-                       notapproxeq                                             = 0x1002247,
-                       notidentical                                    = 0x1002262,
-                       stricteq                                                = 0x1002263,
-                       braille_dot_1                                   = 0xfff1,
-                       braille_dot_2                                   = 0xfff2,
-                       braille_dot_3                                   = 0xfff3,
-                       braille_dot_4                                   = 0xfff4,
-                       braille_dot_5                                   = 0xfff5,
-                       braille_dot_6                                   = 0xfff6,
-                       braille_dot_7                                   = 0xfff7,
-                       braille_dot_8                                   = 0xfff8,
-                       braille_dot_9                                   = 0xfff9,
-                       braille_dot_10                                  = 0xfffa,
-                       braille_blank                                   = 0x1002800,
-                       braille_dots_1                                  = 0x1002801,
-                       braille_dots_2                                  = 0x1002802,
-                       braille_dots_12                                 = 0x1002803,
-                       braille_dots_3                                  = 0x1002804,
-                       braille_dots_13                                 = 0x1002805,
-                       braille_dots_23                                 = 0x1002806,
-                       braille_dots_123                                = 0x1002807,
-                       braille_dots_4                                  = 0x1002808,
-                       braille_dots_14                                 = 0x1002809,
-                       braille_dots_24                                 = 0x100280a,
-                       braille_dots_124                                = 0x100280b,
-                       braille_dots_34                                 = 0x100280c,
-                       braille_dots_134                                = 0x100280d,
-                       braille_dots_234                                = 0x100280e,
-                       braille_dots_1234                               = 0x100280f,
-                       braille_dots_5                                  = 0x1002810,
-                       braille_dots_15                                 = 0x1002811,
-                       braille_dots_25                                 = 0x1002812,
-                       braille_dots_125                                = 0x1002813,
-                       braille_dots_35                                 = 0x1002814,
-                       braille_dots_135                                = 0x1002815,
-                       braille_dots_235                                = 0x1002816,
-                       braille_dots_1235                               = 0x1002817,
-                       braille_dots_45                                 = 0x1002818,
-                       braille_dots_145                                = 0x1002819,
-                       braille_dots_245                                = 0x100281a,
-                       braille_dots_1245                               = 0x100281b,
-                       braille_dots_345                                = 0x100281c,
-                       braille_dots_1345                               = 0x100281d,
-                       braille_dots_2345                               = 0x100281e,
-                       braille_dots_12345                              = 0x100281f,
-                       braille_dots_6                                  = 0x1002820,
-                       braille_dots_16                                 = 0x1002821,
-                       braille_dots_26                                 = 0x1002822,
-                       braille_dots_126                                = 0x1002823,
-                       braille_dots_36                                 = 0x1002824,
-                       braille_dots_136                                = 0x1002825,
-                       braille_dots_236                                = 0x1002826,
-                       braille_dots_1236                               = 0x1002827,
-                       braille_dots_46                                 = 0x1002828,
-                       braille_dots_146                                = 0x1002829,
-                       braille_dots_246                                = 0x100282a,
-                       braille_dots_1246                               = 0x100282b,
-                       braille_dots_346                                = 0x100282c,
-                       braille_dots_1346                               = 0x100282d,
-                       braille_dots_2346                               = 0x100282e,
-                       braille_dots_12346                              = 0x100282f,
-                       braille_dots_56                                 = 0x1002830,
-                       braille_dots_156                                = 0x1002831,
-                       braille_dots_256                                = 0x1002832,
-                       braille_dots_1256                               = 0x1002833,
-                       braille_dots_356                                = 0x1002834,
-                       braille_dots_1356                               = 0x1002835,
-                       braille_dots_2356                               = 0x1002836,
-                       braille_dots_12356                              = 0x1002837,
-                       braille_dots_456                                = 0x1002838,
-                       braille_dots_1456                               = 0x1002839,
-                       braille_dots_2456                               = 0x100283a,
-                       braille_dots_12456                              = 0x100283b,
-                       braille_dots_3456                               = 0x100283c,
-                       braille_dots_13456                              = 0x100283d,
-                       braille_dots_23456                              = 0x100283e,
-                       braille_dots_123456                             = 0x100283f,
-                       braille_dots_7                                  = 0x1002840,
-                       braille_dots_17                                 = 0x1002841,
-                       braille_dots_27                                 = 0x1002842,
-                       braille_dots_127                                = 0x1002843,
-                       braille_dots_37                                 = 0x1002844,
-                       braille_dots_137                                = 0x1002845,
-                       braille_dots_237                                = 0x1002846,
-                       braille_dots_1237                               = 0x1002847,
-                       braille_dots_47                                 = 0x1002848,
-                       braille_dots_147                                = 0x1002849,
-                       braille_dots_247                                = 0x100284a,
-                       braille_dots_1247                               = 0x100284b,
-                       braille_dots_347                                = 0x100284c,
-                       braille_dots_1347                               = 0x100284d,
-                       braille_dots_2347                               = 0x100284e,
-                       braille_dots_12347                              = 0x100284f,
-                       braille_dots_57                                 = 0x1002850,
-                       braille_dots_157                                = 0x1002851,
-                       braille_dots_257                                = 0x1002852,
-                       braille_dots_1257                               = 0x1002853,
-                       braille_dots_357                                = 0x1002854,
-                       braille_dots_1357                               = 0x1002855,
-                       braille_dots_2357                               = 0x1002856,
-                       braille_dots_12357                              = 0x1002857,
-                       braille_dots_457                                = 0x1002858,
-                       braille_dots_1457                               = 0x1002859,
-                       braille_dots_2457                               = 0x100285a,
-                       braille_dots_12457                              = 0x100285b,
-                       braille_dots_3457                               = 0x100285c,
-                       braille_dots_13457                              = 0x100285d,
-                       braille_dots_23457                              = 0x100285e,
-                       braille_dots_123457                             = 0x100285f,
-                       braille_dots_67                                 = 0x1002860,
-                       braille_dots_167                                = 0x1002861,
-                       braille_dots_267                                = 0x1002862,
-                       braille_dots_1267                               = 0x1002863,
-                       braille_dots_367                                = 0x1002864,
-                       braille_dots_1367                               = 0x1002865,
-                       braille_dots_2367                               = 0x1002866,
-                       braille_dots_12367                              = 0x1002867,
-                       braille_dots_467                                = 0x1002868,
-                       braille_dots_1467                               = 0x1002869,
-                       braille_dots_2467                               = 0x100286a,
-                       braille_dots_12467                              = 0x100286b,
-                       braille_dots_3467                               = 0x100286c,
-                       braille_dots_13467                              = 0x100286d,
-                       braille_dots_23467                              = 0x100286e,
-                       braille_dots_123467                             = 0x100286f,
-                       braille_dots_567                                = 0x1002870,
-                       braille_dots_1567                               = 0x1002871,
-                       braille_dots_2567                               = 0x1002872,
-                       braille_dots_12567                              = 0x1002873,
-                       braille_dots_3567                               = 0x1002874,
-                       braille_dots_13567                              = 0x1002875,
-                       braille_dots_23567                              = 0x1002876,
-                       braille_dots_123567                             = 0x1002877,
-                       braille_dots_4567                               = 0x1002878,
-                       braille_dots_14567                              = 0x1002879,
-                       braille_dots_24567                              = 0x100287a,
-                       braille_dots_124567                             = 0x100287b,
-                       braille_dots_34567                              = 0x100287c,
-                       braille_dots_134567                             = 0x100287d,
-                       braille_dots_234567                             = 0x100287e,
-                       braille_dots_1234567                    = 0x100287f,
-                       braille_dots_8                                  = 0x1002880,
-                       braille_dots_18                                 = 0x1002881,
-                       braille_dots_28                                 = 0x1002882,
-                       braille_dots_128                                = 0x1002883,
-                       braille_dots_38                                 = 0x1002884,
-                       braille_dots_138                                = 0x1002885,
-                       braille_dots_238                                = 0x1002886,
-                       braille_dots_1238                               = 0x1002887,
-                       braille_dots_48                                 = 0x1002888,
-                       braille_dots_148                                = 0x1002889,
-                       braille_dots_248                                = 0x100288a,
-                       braille_dots_1248                               = 0x100288b,
-                       braille_dots_348                                = 0x100288c,
-                       braille_dots_1348                               = 0x100288d,
-                       braille_dots_2348                               = 0x100288e,
-                       braille_dots_12348                              = 0x100288f,
-                       braille_dots_58                                 = 0x1002890,
-                       braille_dots_158                                = 0x1002891,
-                       braille_dots_258                                = 0x1002892,
-                       braille_dots_1258                               = 0x1002893,
-                       braille_dots_358                                = 0x1002894,
-                       braille_dots_1358                               = 0x1002895,
-                       braille_dots_2358                               = 0x1002896,
-                       braille_dots_12358                              = 0x1002897,
-                       braille_dots_458                                = 0x1002898,
-                       braille_dots_1458                               = 0x1002899,
-                       braille_dots_2458                               = 0x100289a,
-                       braille_dots_12458                              = 0x100289b,
-                       braille_dots_3458                               = 0x100289c,
-                       braille_dots_13458                              = 0x100289d,
-                       braille_dots_23458                              = 0x100289e,
-                       braille_dots_123458                             = 0x100289f,
-                       braille_dots_68                                 = 0x10028a0,
-                       braille_dots_168                                = 0x10028a1,
-                       braille_dots_268                                = 0x10028a2,
-                       braille_dots_1268                               = 0x10028a3,
-                       braille_dots_368                                = 0x10028a4,
-                       braille_dots_1368                               = 0x10028a5,
-                       braille_dots_2368                               = 0x10028a6,
-                       braille_dots_12368                              = 0x10028a7,
-                       braille_dots_468                                = 0x10028a8,
-                       braille_dots_1468                               = 0x10028a9,
-                       braille_dots_2468                               = 0x10028aa,
-                       braille_dots_12468                              = 0x10028ab,
-                       braille_dots_3468                               = 0x10028ac,
-                       braille_dots_13468                              = 0x10028ad,
-                       braille_dots_23468                              = 0x10028ae,
-                       braille_dots_123468                             = 0x10028af,
-                       braille_dots_568                                = 0x10028b0,
-                       braille_dots_1568                               = 0x10028b1,
-                       braille_dots_2568                               = 0x10028b2,
-                       braille_dots_12568                              = 0x10028b3,
-                       braille_dots_3568                               = 0x10028b4,
-                       braille_dots_13568                              = 0x10028b5,
-                       braille_dots_23568                              = 0x10028b6,
-                       braille_dots_123568                             = 0x10028b7,
-                       braille_dots_4568                               = 0x10028b8,
-                       braille_dots_14568                              = 0x10028b9,
-                       braille_dots_24568                              = 0x10028ba,
-                       braille_dots_124568                             = 0x10028bb,
-                       braille_dots_34568                              = 0x10028bc,
-                       braille_dots_134568                             = 0x10028bd,
-                       braille_dots_234568                             = 0x10028be,
-                       braille_dots_1234568                    = 0x10028bf,
-                       braille_dots_78                                 = 0x10028c0,
-                       braille_dots_178                                = 0x10028c1,
-                       braille_dots_278                                = 0x10028c2,
-                       braille_dots_1278                               = 0x10028c3,
-                       braille_dots_378                                = 0x10028c4,
-                       braille_dots_1378                               = 0x10028c5,
-                       braille_dots_2378                               = 0x10028c6,
-                       braille_dots_12378                              = 0x10028c7,
-                       braille_dots_478                                = 0x10028c8,
-                       braille_dots_1478                               = 0x10028c9,
-                       braille_dots_2478                               = 0x10028ca,
-                       braille_dots_12478                              = 0x10028cb,
-                       braille_dots_3478                               = 0x10028cc,
-                       braille_dots_13478                              = 0x10028cd,
-                       braille_dots_23478                              = 0x10028ce,
-                       braille_dots_123478                             = 0x10028cf,
-                       braille_dots_578                                = 0x10028d0,
-                       braille_dots_1578                               = 0x10028d1,
-                       braille_dots_2578                               = 0x10028d2,
-                       braille_dots_12578                              = 0x10028d3,
-                       braille_dots_3578                               = 0x10028d4,
-                       braille_dots_13578                              = 0x10028d5,
-                       braille_dots_23578                              = 0x10028d6,
-                       braille_dots_123578                             = 0x10028d7,
-                       braille_dots_4578                               = 0x10028d8,
-                       braille_dots_14578                              = 0x10028d9,
-                       braille_dots_24578                              = 0x10028da,
-                       braille_dots_124578                             = 0x10028db,
-                       braille_dots_34578                              = 0x10028dc,
-                       braille_dots_134578                             = 0x10028dd,
-                       braille_dots_234578                             = 0x10028de,
-                       braille_dots_1234578                    = 0x10028df,
-                       braille_dots_678                                = 0x10028e0,
-                       braille_dots_1678                               = 0x10028e1,
-                       braille_dots_2678                               = 0x10028e2,
-                       braille_dots_12678                              = 0x10028e3,
-                       braille_dots_3678                               = 0x10028e4,
-                       braille_dots_13678                              = 0x10028e5,
-                       braille_dots_23678                              = 0x10028e6,
-                       braille_dots_123678                             = 0x10028e7,
-                       braille_dots_4678                               = 0x10028e8,
-                       braille_dots_14678                              = 0x10028e9,
-                       braille_dots_24678                              = 0x10028ea,
-                       braille_dots_124678                             = 0x10028eb,
-                       braille_dots_34678                              = 0x10028ec,
-                       braille_dots_134678                             = 0x10028ed,
-                       braille_dots_234678                             = 0x10028ee,
-                       braille_dots_1234678                    = 0x10028ef,
-                       braille_dots_5678                               = 0x10028f0,
-                       braille_dots_15678                              = 0x10028f1,
-                       braille_dots_25678                              = 0x10028f2,
-                       braille_dots_125678                             = 0x10028f3,
-                       braille_dots_35678                              = 0x10028f4,
-                       braille_dots_135678                             = 0x10028f5,
-                       braille_dots_235678                             = 0x10028f6,
-                       braille_dots_1235678                    = 0x10028f7,
-                       braille_dots_45678                              = 0x10028f8,
-                       braille_dots_145678                             = 0x10028f9,
-                       braille_dots_245678                             = 0x10028fa,
-                       braille_dots_1245678                    = 0x10028fb,
-                       braille_dots_345678                             = 0x10028fc,
-                       braille_dots_1345678                    = 0x10028fd,
-                       braille_dots_2345678                    = 0x10028fe,
-                       braille_dots_12345678                   = 0x10028ff,
-                       Sinh_ng                                                 = 0x1000d82,
-                       Sinh_h2                                                 = 0x1000d83,
-                       Sinh_a                                                  = 0x1000d85,
-                       Sinh_aa                                                 = 0x1000d86,
-                       Sinh_ae                                                 = 0x1000d87,
-                       Sinh_aee                                                = 0x1000d88,
-                       Sinh_i                                                  = 0x1000d89,
-                       Sinh_ii                                                 = 0x1000d8a,
-                       Sinh_u                                                  = 0x1000d8b,
-                       Sinh_uu                                                 = 0x1000d8c,
-                       Sinh_ri                                                 = 0x1000d8d,
-                       Sinh_rii                                                = 0x1000d8e,
-                       Sinh_lu                                                 = 0x1000d8f,
-                       Sinh_luu                                                = 0x1000d90,
-                       Sinh_e                                                  = 0x1000d91,
-                       Sinh_ee                                                 = 0x1000d92,
-                       Sinh_ai                                                 = 0x1000d93,
-                       Sinh_o                                                  = 0x1000d94,
-                       Sinh_oo                                                 = 0x1000d95,
-                       Sinh_au                                                 = 0x1000d96,
-                       Sinh_ka                                                 = 0x1000d9a,
-                       Sinh_kha                                                = 0x1000d9b,
-                       Sinh_ga                                                 = 0x1000d9c,
-                       Sinh_gha                                                = 0x1000d9d,
-                       Sinh_ng2                                                = 0x1000d9e,
-                       Sinh_nga                                                = 0x1000d9f,
-                       Sinh_ca                                                 = 0x1000da0,
-                       Sinh_cha                                                = 0x1000da1,
-                       Sinh_ja                                                 = 0x1000da2,
-                       Sinh_jha                                                = 0x1000da3,
-                       Sinh_nya                                                = 0x1000da4,
-                       Sinh_jnya                                               = 0x1000da5,
-                       Sinh_nja                                                = 0x1000da6,
-                       Sinh_tta                                                = 0x1000da7,
-                       Sinh_ttha                                               = 0x1000da8,
-                       Sinh_dda                                                = 0x1000da9,
-                       Sinh_ddha                                               = 0x1000daa,
-                       Sinh_nna                                                = 0x1000dab,
-                       Sinh_ndda                                               = 0x1000dac,
-                       Sinh_tha                                                = 0x1000dad,
-                       Sinh_thha                                               = 0x1000dae,
-                       Sinh_dha                                                = 0x1000daf,
-                       Sinh_dhha                                               = 0x1000db0,
-                       Sinh_na                                                 = 0x1000db1,
-                       Sinh_ndha                                               = 0x1000db3,
-                       Sinh_pa                                                 = 0x1000db4,
-                       Sinh_pha                                                = 0x1000db5,
-                       Sinh_ba                                                 = 0x1000db6,
-                       Sinh_bha                                                = 0x1000db7,
-                       Sinh_ma                                                 = 0x1000db8,
-                       Sinh_mba                                                = 0x1000db9,
-                       Sinh_ya                                                 = 0x1000dba,
-                       Sinh_ra                                                 = 0x1000dbb,
-                       Sinh_la                                                 = 0x1000dbd,
-                       Sinh_va                                                 = 0x1000dc0,
-                       Sinh_sha                                                = 0x1000dc1,
-                       Sinh_ssha                                               = 0x1000dc2,
-                       Sinh_sa                                                 = 0x1000dc3,
-                       Sinh_ha                                                 = 0x1000dc4,
-                       Sinh_lla                                                = 0x1000dc5,
-                       Sinh_fa                                                 = 0x1000dc6,
-                       Sinh_al                                                 = 0x1000dca,
-                       Sinh_aa2                                                = 0x1000dcf,
-                       Sinh_ae2                                                = 0x1000dd0,
-                       Sinh_aee2                                               = 0x1000dd1,
-                       Sinh_i2                                                 = 0x1000dd2,
-                       Sinh_ii2                                                = 0x1000dd3,
-                       Sinh_u2                                                 = 0x1000dd4,
-                       Sinh_uu2                                                = 0x1000dd6,
-                       Sinh_ru2                                                = 0x1000dd8,
-                       Sinh_e2                                                 = 0x1000dd9,
-                       Sinh_ee2                                                = 0x1000dda,
-                       Sinh_ai2                                                = 0x1000ddb,
-                       Sinh_o2                                                 = 0x1000ddc,
-                       Sinh_oo2                                                = 0x1000ddd,
-                       Sinh_au2                                                = 0x1000dde,
-                       Sinh_lu2                                                = 0x1000ddf,
-                       Sinh_ruu2                                               = 0x1000df2,
-                       Sinh_luu2                                               = 0x1000df3,
-                       Sinh_kunddaliya                                 = 0x1000df4,
-                       XF86ModeLock                                    = 0x1008FF01,
-                       XF86MonBrightnessUp                             = 0x1008FF02,
-                       XF86MonBrightnessDown                   = 0x1008FF03,
-                       XF86KbdLightOnOff                               = 0x1008FF04,
-                       XF86KbdBrightnessUp                             = 0x1008FF05,
-                       XF86KbdBrightnessDown                   = 0x1008FF06,
-                       XF86Standby                                             = 0x1008FF10,
-                       XF86AudioLowerVolume                    = 0x1008FF11,
-                       XF86AudioMute                                   = 0x1008FF12,
-                       XF86AudioRaiseVolume                    = 0x1008FF13,
-                       XF86AudioPlay                                   = 0x1008FF14,
-                       XF86AudioStop                                   = 0x1008FF15,
-                       XF86AudioPrev                                   = 0x1008FF16,
-                       XF86AudioNext                                   = 0x1008FF17,
-                       XF86HomePage                                    = 0x1008FF18,
-                       XF86Mail                                                = 0x1008FF19,
-                       XF86Start                                               = 0x1008FF1A,
-                       XF86Search                                              = 0x1008FF1B,
-                       XF86AudioRecord                                 = 0x1008FF1C,
-                       XF86Calculator                                  = 0x1008FF1D,
-                       XF86Memo                                                = 0x1008FF1E,
-                       XF86ToDoList                                    = 0x1008FF1F,
-                       XF86Calendar                                    = 0x1008FF20,
-                       XF86PowerDown                                   = 0x1008FF21,
-                       XF86ContrastAdjust                              = 0x1008FF22,
-                       XF86RockerUp                                    = 0x1008FF23,
-                       XF86RockerDown                                  = 0x1008FF24,
-                       XF86RockerEnter                                 = 0x1008FF25,
-                       XF86Back                                                = 0x1008FF26,
-                       XF86Forward                                             = 0x1008FF27,
-                       XF86Stop                                                = 0x1008FF28,
-                       XF86Refresh                                             = 0x1008FF29,
-                       XF86PowerOff                                    = 0x1008FF2A,
-                       XF86WakeUp                                              = 0x1008FF2B,
-                       XF86Eject                                               = 0x1008FF2C,
-                       XF86ScreenSaver                                 = 0x1008FF2D,
-                       XF86WWW                                                 = 0x1008FF2E,
-                       XF86Sleep                                               = 0x1008FF2F,
-                       XF86Favorites                                   = 0x1008FF30,
-                       XF86AudioPause                                  = 0x1008FF31,
-                       XF86AudioMedia                                  = 0x1008FF32,
-                       XF86MyComputer                                  = 0x1008FF33,
-                       XF86VendorHome                                  = 0x1008FF34,
-                       XF86LightBulb                                   = 0x1008FF35,
-                       XF86Shop                                                = 0x1008FF36,
-                       XF86History                                             = 0x1008FF37,
-                       XF86OpenURL                                             = 0x1008FF38,
-                       XF86AddFavorite                                 = 0x1008FF39,
-                       XF86HotLinks                                    = 0x1008FF3A,
-                       XF86BrightnessAdjust                    = 0x1008FF3B,
-                       XF86Finance                                             = 0x1008FF3C,
-                       XF86Community                                   = 0x1008FF3D,
-                       XF86AudioRewind                                 = 0x1008FF3E,
-                       XF86BackForward                                 = 0x1008FF3F,
-                       XF86Launch0                                             = 0x1008FF40,
-                       XF86Launch1                                             = 0x1008FF41,
-                       XF86Launch2                                             = 0x1008FF42,
-                       XF86Launch3                                             = 0x1008FF43,
-                       XF86Launch4                                             = 0x1008FF44,
-                       XF86Launch5                                             = 0x1008FF45,
-                       XF86Launch6                                             = 0x1008FF46,
-                       XF86Launch7                                             = 0x1008FF47,
-                       XF86Launch8                                             = 0x1008FF48,
-                       XF86Launch9                                             = 0x1008FF49,
-                       XF86LaunchA                                             = 0x1008FF4A,
-                       XF86LaunchB                                             = 0x1008FF4B,
-                       XF86LaunchC                                             = 0x1008FF4C,
-                       XF86LaunchD                                             = 0x1008FF4D,
-                       XF86LaunchE                                             = 0x1008FF4E,
-                       XF86LaunchF                                             = 0x1008FF4F,
-                       XF86ApplicationLeft                             = 0x1008FF50,
-                       XF86ApplicationRight                    = 0x1008FF51,
-                       XF86Book                                                = 0x1008FF52,
-                       XF86CD                                                  = 0x1008FF53,
-                       XF86Calculater                                  = 0x1008FF54,
-                       XF86Clear                                               = 0x1008FF55,
-                       XF86Close                                               = 0x1008FF56,
-                       XF86Copy                                                = 0x1008FF57,
-                       XF86Cut                                                 = 0x1008FF58,
-                       XF86Display                                             = 0x1008FF59,
-                       XF86DOS                                                 = 0x1008FF5A,
-                       XF86Documents                                   = 0x1008FF5B,
-                       XF86Excel                                               = 0x1008FF5C,
-                       XF86Explorer                                    = 0x1008FF5D,
-                       XF86Game                                                = 0x1008FF5E,
-                       XF86Go                                                  = 0x1008FF5F,
-                       XF86iTouch                                              = 0x1008FF60,
-                       XF86LogOff                                              = 0x1008FF61,
-                       XF86Market                                              = 0x1008FF62,
-                       XF86Meeting                                             = 0x1008FF63,
-                       XF86MenuKB                                              = 0x1008FF65,
-                       XF86MenuPB                                              = 0x1008FF66,
-                       XF86MySites                                             = 0x1008FF67,
-                       XF86New                                                 = 0x1008FF68,
-                       XF86News                                                = 0x1008FF69,
-                       XF86OfficeHome                                  = 0x1008FF6A,
-                       XF86Open                                                = 0x1008FF6B,
-                       XF86Option                                              = 0x1008FF6C,
-                       XF86Paste                                               = 0x1008FF6D,
-                       XF86Phone                                               = 0x1008FF6E,
-                       XF86Q                                                   = 0x1008FF70,
-                       XF86Reply                                               = 0x1008FF72,
-                       XF86Reload                                              = 0x1008FF73,
-                       XF86RotateWindows                               = 0x1008FF74,
-                       XF86RotationPB                                  = 0x1008FF75,
-                       XF86RotationKB                                  = 0x1008FF76,
-                       XF86Save                                                = 0x1008FF77,
-                       XF86ScrollUp                                    = 0x1008FF78,
-                       XF86ScrollDown                                  = 0x1008FF79,
-                       XF86ScrollClick                                 = 0x1008FF7A,
-                       XF86Send                                                = 0x1008FF7B,
-                       XF86Spell                                               = 0x1008FF7C,
-                       XF86SplitScreen                                 = 0x1008FF7D,
-                       XF86Support                                             = 0x1008FF7E,
-                       XF86TaskPane                                    = 0x1008FF7F,
-                       XF86Terminal                                    = 0x1008FF80,
-                       XF86Tools                                               = 0x1008FF81,
-                       XF86Travel                                              = 0x1008FF82,
-                       XF86UserPB                                              = 0x1008FF84,
-                       XF86User1KB                                             = 0x1008FF85,
-                       XF86User2KB                                             = 0x1008FF86,
-                       XF86Video                                               = 0x1008FF87,
-                       XF86WheelButton                                 = 0x1008FF88,
-                       XF86Word                                                = 0x1008FF89,
-                       XF86Xfer                                                = 0x1008FF8A,
-                       XF86ZoomIn                                              = 0x1008FF8B,
-                       XF86ZoomOut                                             = 0x1008FF8C,
-                       XF86Away                                                = 0x1008FF8D,
-                       XF86Messenger                                   = 0x1008FF8E,
-                       XF86WebCam                                              = 0x1008FF8F,
-                       XF86MailForward                                 = 0x1008FF90,
-                       XF86Pictures                                    = 0x1008FF91,
-                       XF86Music                                               = 0x1008FF92,
-                       XF86Battery                                             = 0x1008FF93,
-                       XF86Bluetooth                                   = 0x1008FF94,
-                       XF86WLAN                                                = 0x1008FF95,
-                       XF86UWB                                                 = 0x1008FF96,
-                       XF86AudioForward                                = 0x1008FF97,
-                       XF86AudioRepeat                                 = 0x1008FF98,
-                       XF86AudioRandomPlay                             = 0x1008FF99,
-                       XF86Subtitle                                    = 0x1008FF9A,
-                       XF86AudioCycleTrack                             = 0x1008FF9B,
-                       XF86CycleAngle                                  = 0x1008FF9C,
-                       XF86FrameBack                                   = 0x1008FF9D,
-                       XF86FrameForward                                = 0x1008FF9E,
-                       XF86Time                                                = 0x1008FF9F,
-                       XF86Select                                              = 0x1008FFA0,
-                       XF86View                                                = 0x1008FFA1,
-                       XF86TopMenu                                             = 0x1008FFA2,
-                       XF86Red                                                 = 0x1008FFA3,
-                       XF86Green                                               = 0x1008FFA4,
-                       XF86Yellow                                              = 0x1008FFA5,
-                       XF86Blue                                                = 0x1008FFA6,
-                       XF86Suspend                                             = 0x1008FFA7,
-                       XF86Hibernate                                   = 0x1008FFA8,
-                       XF86TouchpadToggle                              = 0x1008FFA9,
-                       XF86TouchpadOn                                  = 0x1008FFB0,
-                       XF86TouchpadOff                                 = 0x1008FFB1,
-                       XF86AudioMicMute                                = 0x1008FFB2,
-                       XF86Keyboard                                    = 0x1008FFB3,
-                       XF86WWAN                                                = 0x1008FFB4,
-                       XF86RFKill                                              = 0x1008FFB5,
-                       XF86AudioPreset                                 = 0x1008FFB6,
-                       XF86Switch_VT_1                                 = 0x1008FE01,
-                       XF86Switch_VT_2                                 = 0x1008FE02,
-                       XF86Switch_VT_3                                 = 0x1008FE03,
-                       XF86Switch_VT_4                                 = 0x1008FE04,
-                       XF86Switch_VT_5                                 = 0x1008FE05,
-                       XF86Switch_VT_6                                 = 0x1008FE06,
-                       XF86Switch_VT_7                                 = 0x1008FE07,
-                       XF86Switch_VT_8                                 = 0x1008FE08,
-                       XF86Switch_VT_9                                 = 0x1008FE09,
-                       XF86Switch_VT_10                                = 0x1008FE0A,
-                       XF86Switch_VT_11                                = 0x1008FE0B,
-                       XF86Switch_VT_12                                = 0x1008FE0C,
-                       XF86Ungrab                                              = 0x1008FE20,
-                       XF86ClearGrab                                   = 0x1008FE21,
-                       XF86Next_VMode                                  = 0x1008FE22,
-                       XF86Prev_VMode                                  = 0x1008FE23,
-                       XF86LogWindowTree                               = 0x1008FE24,
-                       XF86LogGrabInfo                                 = 0x1008FE25,
-                       SunFA_Grave                                             = 0x1005FF00,
-                       SunFA_Circum                                    = 0x1005FF01,
-                       SunFA_Tilde                                             = 0x1005FF02,
-                       SunFA_Acute                                             = 0x1005FF03,
-                       SunFA_Diaeresis                                 = 0x1005FF04,
-                       SunFA_Cedilla                                   = 0x1005FF05,
-                       SunF36                                                  = 0x1005FF10,
-                       SunF37                                                  = 0x1005FF11,
-                       SunSys_Req                                              = 0x1005FF60,
-                       SunPrint_Screen                                 = 0x0000FF61,
-                       SunCompose                                              = 0x0000FF20,
-                       SunAltGraph                                             = 0x0000FF7E,
-                       SunPageUp                                               = 0x0000FF55,
-                       SunPageDown                                             = 0x0000FF56,
-                       SunUndo                                                 = 0x0000FF65,
-                       SunAgain                                                = 0x0000FF66,
-                       SunFind                                                 = 0x0000FF68,
-                       SunStop                                                 = 0x0000FF69,
-                       SunProps                                                = 0x1005FF70,
-                       SunFront                                                = 0x1005FF71,
-                       SunCopy                                                 = 0x1005FF72,
-                       SunOpen                                                 = 0x1005FF73,
-                       SunPaste                                                = 0x1005FF74,
-                       SunCut                                                  = 0x1005FF75,
-                       SunPowerSwitch                                  = 0x1005FF76,
-                       SunAudioLowerVolume                             = 0x1005FF77,
-                       SunAudioMute                                    = 0x1005FF78,
-                       SunAudioRaiseVolume                             = 0x1005FF79,
-                       SunVideoDegauss                                 = 0x1005FF7A,
-                       SunVideoLowerBrightness                 = 0x1005FF7B,
-                       SunVideoRaiseBrightness                 = 0x1005FF7C,
-                       SunPowerSwitchShift                             = 0x1005FF7D,
-                       Dring_accent                                    = 0x1000FEB0,
-                       Dcircumflex_accent                              = 0x1000FE5E,
-                       Dcedilla_accent                                 = 0x1000FE2C,
-                       Dacute_accent                                   = 0x1000FE27,
-                       Dgrave_accent                                   = 0x1000FE60,
-                       Dtilde                                                  = 0x1000FE7E,
-                       Ddiaeresis                                              = 0x1000FE22,
-                       DRemove                                                 = 0x1000FF00,
-                       hpClearLine                                             = 0x1000FF6F,
-                       hpInsertLine                                    = 0x1000FF70,
-                       hpDeleteLine                                    = 0x1000FF71,
-                       hpInsertChar                                    = 0x1000FF72,
-                       hpDeleteChar                                    = 0x1000FF73,
-                       hpBackTab                                               = 0x1000FF74,
-                       hpKP_BackTab                                    = 0x1000FF75,
-                       hpModelock1                                             = 0x1000FF48,
-                       hpModelock2                                             = 0x1000FF49,
-                       hpReset                                                 = 0x1000FF6C,
-                       hpSystem                                                = 0x1000FF6D,
-                       hpUser                                                  = 0x1000FF6E,
-                       hpmute_acute                                    = 0x100000A8,
-                       hpmute_grave                                    = 0x100000A9,
-                       hpmute_asciicircum                              = 0x100000AA,
-                       hpmute_diaeresis                                = 0x100000AB,
-                       hpmute_asciitilde                               = 0x100000AC,
-                       hplira                                                  = 0x100000AF,
-                       hpguilder                                               = 0x100000BE,
-                       hpYdiaeresis                                    = 0x100000EE,
-                       hpIO                                                    = 0x100000EE,
-                       hplongminus                                             = 0x100000F6,
-                       hpblock                                                 = 0x100000FC,
-                       osfCopy                                                 = 0x1004FF02,
-                       osfCut                                                  = 0x1004FF03,
-                       osfPaste                                                = 0x1004FF04,
-                       osfBackTab                                              = 0x1004FF07,
-                       osfBackSpace                                    = 0x1004FF08,
-                       osfClear                                                = 0x1004FF0B,
-                       osfEscape                                               = 0x1004FF1B,
-                       osfAddMode                                              = 0x1004FF31,
-                       osfPrimaryPaste                                 = 0x1004FF32,
-                       osfQuickPaste                                   = 0x1004FF33,
-                       osfPageLeft                                             = 0x1004FF40,
-                       osfPageUp                                               = 0x1004FF41,
-                       osfPageDown                                             = 0x1004FF42,
-                       osfPageRight                                    = 0x1004FF43,
-                       osfActivate                                             = 0x1004FF44,
-                       osfMenuBar                                              = 0x1004FF45,
-                       osfLeft                                                 = 0x1004FF51,
-                       osfUp                                                   = 0x1004FF52,
-                       osfRight                                                = 0x1004FF53,
-                       osfDown                                                 = 0x1004FF54,
-                       osfEndLine                                              = 0x1004FF57,
-                       osfBeginLine                                    = 0x1004FF58,
-                       osfEndData                                              = 0x1004FF59,
-                       osfBeginData                                    = 0x1004FF5A,
-                       osfPrevMenu                                             = 0x1004FF5B,
-                       osfNextMenu                                             = 0x1004FF5C,
-                       osfPrevField                                    = 0x1004FF5D,
-                       osfNextField                                    = 0x1004FF5E,
-                       osfSelect                                               = 0x1004FF60,
-                       osfInsert                                               = 0x1004FF63,
-                       osfUndo                                                 = 0x1004FF65,
-                       osfMenu                                                 = 0x1004FF67,
-                       osfCancel                                               = 0x1004FF69,
-                       osfHelp                                                 = 0x1004FF6A,
-                       osfSelectAll                                    = 0x1004FF71,
-                       osfDeselectAll                                  = 0x1004FF72,
-                       osfReselect                                             = 0x1004FF73,
-                       osfExtend                                               = 0x1004FF74,
-                       osfRestore                                              = 0x1004FF78,
-                       osfDelete                                               = 0x1004FFFF,
-                       Reset                                                   = 0x1000FF6C,
-                       System                                                  = 0x1000FF6D,
-                       User                                                    = 0x1000FF6E,
-                       ClearLine                                               = 0x1000FF6F,
-                       InsertLine                                              = 0x1000FF70,
-                       DeleteLine                                              = 0x1000FF71,
-                       InsertChar                                              = 0x1000FF72,
-                       DeleteChar                                              = 0x1000FF73,
-                       BackTab                                                 = 0x1000FF74,
-                       KP_BackTab                                              = 0x1000FF75,
-                       Ext16bit_L                                              = 0x1000FF76,
-                       Ext16bit_R                                              = 0x1000FF77,
-                       mute_acute                                              = 0x100000a8,
-                       mute_grave                                              = 0x100000a9,
-                       mute_asciicircum                                = 0x100000aa,
-                       mute_diaeresis                                  = 0x100000ab,
-                       mute_asciitilde                                 = 0x100000ac,
-                       lira                                                    = 0x100000af,
-                       guilder                                                 = 0x100000be,
-                       IO                                                              = 0x100000ee,
-                       longminus                                               = 0x100000f6,
-                       block                                                   = 0x100000fc,
-
-               }
-
-               enum xkb_key_direction : byte {
-                       KEY_UP,   /**< The key was released. */
-                       KEY_DOWN  /**< The key was pressed. */
-               }
-
-               [Flags]
-               enum xkb_state_component : ushort {                     
-                       XKB_STATE_MODS_DEPRESSED = (1 << 0),
-                       XKB_STATE_MODS_LATCHED = (1 << 1),
-                       XKB_STATE_MODS_LOCKED = (1 << 2),
-                       XKB_STATE_MODS_EFFECTIVE = (1 << 3),
-                       XKB_STATE_LAYOUT_DEPRESSED = (1 << 4),
-                       XKB_STATE_LAYOUT_LATCHED = (1 << 5),
-                       XKB_STATE_LAYOUT_LOCKED = (1 << 6),
-                       XKB_STATE_LAYOUT_EFFECTIVE = (1 << 7),
-                       XKB_STATE_LEDS = (1 << 8)
-               }
-
-               const string XKB_MOD_NAME_SHIFT ="Shift";
-               const string XKB_MOD_NAME_CAPS = "Lock";
-               const string XKB_MOD_NAME_CTRL = "Control";
-               const string XKB_MOD_NAME_ALT = "Mod1";
-               const string XKB_MOD_NAME_NUM = "Mod2";
-               const string XKB_MOD_NAME_LOGO = "Mod4";
-
-               const string XKB_LED_NAME_CAPS = "Caps Lock";
-               const string XKB_LED_NAME_NUM = "Num Lock";
-               const string XKB_LED_NAME_SCROLL = "Scroll Lock";
-
-               #region pinvoke XKB
-
-               [DllImportAttribute("xkbcommon")]
-               static extern IntPtr xkb_context_new (int flags);
-               [DllImportAttribute("xkbcommon")]
-               static extern xkb_keysym xkb_state_key_get_one_sym (IntPtr state, xkb_keycode_t keycode);
-               [DllImportAttribute("xkbcommon")]
-               static extern int xkb_state_key_get_syms (IntPtr state, xkb_keycode_t keycode, ref IntPtr syms_out);
-
-               [DllImportAttribute("xkbcommon")]
-               static extern xkb_mod_index_t xkb_keymap_num_mods (IntPtr keymap);
-               [DllImportAttribute("xkbcommon")]
-               static extern xkb_mod_index_t xkb_keymap_mod_get_index (IntPtr keymap, string name);
-               [DllImportAttribute("xkbcommon")]
-               static extern bool xkb_state_mod_index_is_active (IntPtr state, xkb_mod_index_t idx, xkb_state_component type);         
-               [DllImportAttribute("xkbcommon")]
-               static extern int xkb_state_mod_name_is_active (IntPtr state, string mod_name, xkb_state_component type);
-
-               [DllImportAttribute("xkbcommon")]
-               static extern UInt32 xkb_state_key_get_utf32 (IntPtr state, xkb_keycode_t key);
-               [DllImportAttribute("xkbcommon")]
-               static extern void xkb_state_unref (IntPtr state);      
-               [DllImportAttribute("xkbcommon")]
-               static extern void xkb_keymap_unref (IntPtr keymap);    
-               [DllImportAttribute("xkbcommon")]
-               static extern void xkb_context_unref (IntPtr ctx);      
-
-               [DllImportAttribute("xkbcommon")]
-               static extern xkb_state_component       xkb_state_update_key(IntPtr state, xkb_keycode_t key, xkb_key_direction direction);
-
-               [DllImportAttribute("xkbcommon-x11.so.0")]
-               static extern int xkb_x11_setup_xkb_extension (IntPtr connection,
-                       UInt16 major_xkb_version, UInt16 minor_xkb_version,
-                       byte xkb_x11_setup_xkb_extension_flags,
-                       out UInt16 major_xkb_version_out,
-                       out UInt16 minor_xkb_version_out,
-                       out byte base_event_out,
-                       out byte base_error_out);
-               [DllImportAttribute("xkbcommon-x11.so.0")]
-               static extern int xkb_x11_get_core_keyboard_device_id(IntPtr connection);
-               [DllImportAttribute("xkbcommon-x11.so.0")]
-               static extern IntPtr xkb_x11_keymap_new_from_device (IntPtr context, IntPtr connection,
-                       int device_id, byte flags);
-               [DllImportAttribute("xkbcommon-x11.so.0")]
-               static extern IntPtr xkb_x11_state_new_from_device (IntPtr xkbKeymap, IntPtr connection, int device_id);
-               #endregion
-               xkb_mod_index_t ModIdxShift;
-               xkb_mod_index_t ModIdxCtrl;
-               xkb_mod_index_t ModIdxAlt;
-               xkb_mod_index_t ModIdxLogo;
-               xkb_mod_index_t ModIdxCapsLock;
-               xkb_mod_index_t ModIdxNumLock;
-
-               IntPtr xkbCtx, xkbKeymap, xkbState;
-
-               #region IKeyboard implementation
-
-               public event EventHandler<KeyEventArgs> KeyDown;
-               public event EventHandler<KeyEventArgs> KeyUp;
-               public event EventHandler<KeyPressEventArgs> KeyPress;
-
-               public void HandleEvent (uint keycode, bool pressed) {
-                       xkb_keysym ks = xkb_state_key_get_one_sym (xkbState, keycode);
-                       xkb_key_direction keyDir = xkb_key_direction.KEY_DOWN;
-
-                       if (pressed) {
-                               KeyDown.Raise (this, new KeyEventArgs ((Key)ks, false));
-
-                               IntPtr ptrKeySyms = IntPtr.Zero;
-
-
-                               int nbKeySyms = xkb_state_key_get_syms (xkbState, keycode, ref ptrKeySyms);
-                               int[] keySyms = new int[nbKeySyms];
-                               Marshal.Copy (ptrKeySyms, keySyms, 0, nbKeySyms);
-
-                               uint utf32 = xkb_state_key_get_utf32 (xkbState, keycode);
-                               char c = char.ConvertFromUtf32 ((int)utf32) [0];
-
-                               if (!char.IsControl(c))
-                                       KeyPress.Raise (this, new KeyPressEventArgs (c));
-                       } else {
-                               keyDir = xkb_key_direction.KEY_UP;
-                               KeyUp.Raise (this, new KeyEventArgs ((Key)ks, false));
-                       }
-
-                       xkb_state_update_key (xkbState, keycode, keyDir);
-               }
-               public bool IsDown (Key key) {
-                       return false;
-               }
-               public bool Shift {
-                       get {
-                               return xkb_state_mod_index_is_active (xkbState, ModIdxShift, xkb_state_component.XKB_STATE_MODS_EFFECTIVE);
-                       }
-               }
-               public bool Ctrl {
-                       get {
-                               return xkb_state_mod_index_is_active (xkbState, ModIdxCtrl, xkb_state_component.XKB_STATE_MODS_EFFECTIVE);
-                       }
-               }
-               public bool Alt {
-                       get {
-                               return xkb_state_mod_index_is_active (xkbState, ModIdxAlt, xkb_state_component.XKB_STATE_MODS_EFFECTIVE);
-                       }
-               }
-               public void Destroy () {
-                       xkb_state_unref (xkbState);
-                       xkb_keymap_unref (xkbKeymap);
-                       xkb_context_unref (xkbCtx);
-               }
-               #endregion
-
-
-               public XCBKeyboard (IntPtr xcbConnection)
-               {
-                       ushort xkb_maj, xkb_min;
-                       byte base_evt, base_err;
-
-                       xkbCtx = xkb_context_new (0);
-                       xkb_x11_setup_xkb_extension (xcbConnection, 1, 0, 0, out xkb_maj, out xkb_min, out base_evt, out base_err);
-                       int kb = xkb_x11_get_core_keyboard_device_id (xcbConnection);
-                       xkbKeymap = xkb_x11_keymap_new_from_device (xkbCtx, xcbConnection, kb, 0);
-                       xkbState = xkb_x11_state_new_from_device (xkbKeymap, xcbConnection, kb);
-
-                       ModIdxShift = xkb_keymap_mod_get_index (xkbKeymap, XKB_MOD_NAME_SHIFT);
-                       ModIdxCtrl = xkb_keymap_mod_get_index (xkbKeymap, XKB_MOD_NAME_CTRL);
-                       ModIdxAlt = xkb_keymap_mod_get_index (xkbKeymap, XKB_MOD_NAME_ALT);
-                       ModIdxLogo = xkb_keymap_mod_get_index (xkbKeymap, XKB_MOD_NAME_LOGO);
-                       ModIdxCapsLock = xkb_keymap_mod_get_index (xkbKeymap, XKB_MOD_NAME_CAPS);
-                       ModIdxNumLock = xkb_keymap_mod_get_index (xkbKeymap, XKB_MOD_NAME_NUM);
-               }
-       }
-}
-
diff --git a/src/backends/xlib/X11Keyboard.cs b/src/backends/xlib/X11Keyboard.cs
deleted file mode 100644 (file)
index 78eef4e..0000000
+++ /dev/null
@@ -1,120 +0,0 @@
-//
-// XCBKeyboard.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp_bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-using System;
-using System.Runtime.InteropServices;
-
-namespace Crow.XLib
-{
-       public class X11Keyboard : IKeyboard
-       {
-               #region PInvoke
-               [DllImportAttribute("X11")]
-               static extern IntPtr XFree(IntPtr data);
-               [DllImport ("libX11")]
-               static extern void XDisplayKeycodes (IntPtr disp, out int min, out int max);
-               [DllImport ("libX11")]
-               static extern IntPtr XGetKeyboardMapping (IntPtr disp, byte first_keycode, int keycode_count, 
-                       out int keysyms_per_keycode_return);
-               [DllImport ("libX11")]
-               unsafe static extern byte* XGetModifierMapping (IntPtr disp);
-               [DllImport ("libX11")]
-               static extern uint XKeycodeToKeysym (IntPtr display, int keycode, int index);
-               #endregion
-
-               #region IKeyboard implementation
-
-               public event EventHandler<KeyEventArgs> KeyDown;
-               public event EventHandler<KeyEventArgs> KeyUp;
-               public event EventHandler<KeyPressEventArgs> KeyPress;
-
-               public void HandleEvent (uint keycode, bool pressed) {
-                       /*int min_keycode, max_keycode, keysyms_per_keycode;
-                                               XLib.NativeMethods.XDisplayKeycodes (xDisp, out min_keycode, out max_keycode);
-
-                                               IntPtr ksp = XLib.NativeMethods.XGetKeyboardMapping (xDisp, (byte)min_keycode,
-                                                                    max_keycode + 1 - min_keycode, out keysyms_per_keycode);
-                                               XLib.NativeMethods.XFree (ksp);*/
-
-                       uint keySym;
-                       keySym = XKeycodeToKeysym (xDisp, (int)keycode, 0);
-                       char c = (char)keySym;
-                       if (pressed)
-                               KeyDown.Raise (this, new KeyEventArgs ((Key)keySym, false));
-                       else 
-                               KeyUp.Raise (this, new KeyEventArgs ((Key)keySym, false));                      
-               }
-               public bool IsDown (Key key) {
-                       throw new NotImplementedException();
-               }
-               public bool Shift {
-                       get {
-                               throw new NotImplementedException();
-                       }
-               }
-               public bool Ctrl {
-                       get {
-                               throw new NotImplementedException ();
-                       }
-               }
-               public bool Alt {
-                       get {
-                               throw new NotImplementedException ();
-                       }
-               }
-               public void Destroy () {
-
-               }
-               #endregion
-
-
-               IntPtr xDisp;
-
-               public X11Keyboard (IntPtr _xDisp)
-               {
-                       xDisp = _xDisp;
-
-                       int min_keycode, max_keycode, keysyms_per_keycode;
-
-                       XDisplayKeycodes (xDisp, out min_keycode, out max_keycode);
-                       IntPtr ksp = XGetKeyboardMapping (xDisp, (byte) min_keycode,
-                               max_keycode + 1 - min_keycode, out keysyms_per_keycode);
-                       XFree (ksp);
-
-                       unsafe {
-                               byte* modmap_unmanaged = XGetModifierMapping (xDisp);
-                               int nummodmap = 0;
-                               int* ptr = (int*)modmap_unmanaged;
-                               nummodmap = ptr [0];
-
-                               for (int i = 0; i< nummodmap; i++) {
-                                       Console.WriteLine(modmap_unmanaged[i+4]);
-                               }
-                               XFree ((IntPtr)modmap_unmanaged);
-                       }
-               }
-       }
-}
-
diff --git a/src/backends/xlib/X11Structs.cs b/src/backends/xlib/X11Structs.cs
deleted file mode 100644 (file)
index 5e43e00..0000000
+++ /dev/null
@@ -1,1821 +0,0 @@
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software",, to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-// Copyright (c) 2004 Novell, Inc.
-//
-// Authors:
-//     Peter Bartok    pbartok@novell.com
-//
-
-
-// NOT COMPLETE
-
-using System;
-using System.ComponentModel;
-using System.Collections;
-using System.Diagnostics;
-using System.Runtime.InteropServices;
-using System.Threading;
-using System.Reflection;
-
-// X11 Version
-namespace Crow.XLib {
-       //
-       // In the structures below, fields of type long are mapped to IntPtr.
-       // This will work on all platforms where sizeof(long)==sizeof(void*), which
-       // is almost all platforms except WIN64.
-       //
-
-       [StructLayout(LayoutKind.Sequential)]
-       public struct XAnyEvent {
-               public XEventName       type;
-               public IntPtr           serial;
-               public bool             send_event;
-               public IntPtr           display;
-               public IntPtr           window;
-       }
-
-       [StructLayout(LayoutKind.Sequential)]
-       public struct XKeyEvent {
-               public XEventName       type;
-               public IntPtr           serial;
-               public bool             send_event;
-               public IntPtr           display;
-               public IntPtr           window;
-               public IntPtr           root;
-               public IntPtr           subwindow;
-               public IntPtr           time;
-               public int              x;
-               public int              y;
-               public int              x_root;
-               public int              y_root;
-               public int              state;
-               public int              keycode;
-               public bool             same_screen;
-       }
-
-       [StructLayout(LayoutKind.Sequential)]
-       public struct XButtonEvent {
-               public XEventName       type;
-               public IntPtr           serial;
-               public bool             send_event;
-               public IntPtr           display;
-               public IntPtr           window;
-               public IntPtr           root;
-               public IntPtr           subwindow;
-               public IntPtr           time;
-               public int              x;
-               public int              y;
-               public int              x_root;
-               public int              y_root;
-               public int              state;
-               public int              button;
-               public bool             same_screen;
-       }
-
-       [StructLayout(LayoutKind.Sequential)]
-       public struct XMotionEvent {
-               public XEventName       type;
-               public IntPtr           serial;
-               public bool             send_event;
-               public IntPtr           display;
-               public IntPtr           window;
-               public IntPtr           root;
-               public IntPtr           subwindow;
-               public IntPtr           time;
-               public int              x;
-               public int              y;
-               public int              x_root;
-               public int              y_root;
-               public int              state;
-               public byte             is_hint;
-               public bool             same_screen;
-       }
-
-       [StructLayout(LayoutKind.Sequential)]
-       public struct XCrossingEvent {
-               public XEventName       type;
-               public IntPtr           serial;
-               public bool             send_event;
-               public IntPtr           display;
-               public IntPtr           window;
-               public IntPtr           root;
-               public IntPtr           subwindow;
-               public IntPtr           time;
-               public int              x;
-               public int              y;
-               public int              x_root;
-               public int              y_root;
-               public NotifyMode       mode;
-               public NotifyDetail     detail;
-               public bool             same_screen;
-               public bool             focus;
-               public int              state;
-       }
-
-       [StructLayout(LayoutKind.Sequential)]
-       public struct XFocusChangeEvent {
-               public XEventName       type;
-               public IntPtr           serial;
-               public bool             send_event;
-               public IntPtr           display;
-               public IntPtr           window;
-               public int              mode;
-               public NotifyDetail     detail;
-       }
-
-       [StructLayout(LayoutKind.Sequential)]
-       public struct XKeymapEvent {
-               public XEventName       type;
-               public IntPtr           serial;
-               public bool             send_event;
-               public IntPtr           display;
-               public IntPtr           window;
-               public byte             key_vector0;
-               public byte             key_vector1;
-               public byte             key_vector2;
-               public byte             key_vector3;
-               public byte             key_vector4;
-               public byte             key_vector5;
-               public byte             key_vector6;
-               public byte             key_vector7;
-               public byte             key_vector8;
-               public byte             key_vector9;
-               public byte             key_vector10;
-               public byte             key_vector11;
-               public byte             key_vector12;
-               public byte             key_vector13;
-               public byte             key_vector14;
-               public byte             key_vector15;
-               public byte             key_vector16;
-               public byte             key_vector17;
-               public byte             key_vector18;
-               public byte             key_vector19;
-               public byte             key_vector20;
-               public byte             key_vector21;
-               public byte             key_vector22;
-               public byte             key_vector23;
-               public byte             key_vector24;
-               public byte             key_vector25;
-               public byte             key_vector26;
-               public byte             key_vector27;
-               public byte             key_vector28;
-               public byte             key_vector29;
-               public byte             key_vector30;
-               public byte             key_vector31;
-       }
-
-       [StructLayout(LayoutKind.Sequential)]
-       public struct XExposeEvent {
-               public XEventName       type;
-               public IntPtr           serial;
-               public bool             send_event;
-               public IntPtr           display;
-               public IntPtr           window;
-               public int              x;
-               public int              y;
-               public int              width;
-               public int              height;
-               public int              count;
-       }
-
-       [StructLayout(LayoutKind.Sequential)]
-       public struct XGraphicsExposeEvent {
-               public XEventName       type;
-               public IntPtr           serial;
-               public bool             send_event;
-               public IntPtr           display;
-               public IntPtr           drawable;
-               public int              x;
-               public int              y;
-               public int              width;
-               public int              height;
-               public int              count;
-               public int              major_code;
-               public int              minor_code;
-       }
-
-       [StructLayout(LayoutKind.Sequential)]
-       public struct XNoExposeEvent {
-               public XEventName       type;
-               public IntPtr           serial;
-               public bool             send_event;
-               public IntPtr           display;
-               public IntPtr           drawable;
-               public int              major_code;
-               public int              minor_code;
-       }
-
-       [StructLayout(LayoutKind.Sequential)]
-       public struct XVisibilityEvent {
-               public XEventName       type;
-               public IntPtr           serial;
-               public bool             send_event;
-               public IntPtr           display;
-               public IntPtr           window;
-               public int              state;
-       }
-
-       [StructLayout(LayoutKind.Sequential)]
-       public struct XCreateWindowEvent {
-               public XEventName       type;
-               public IntPtr           serial;
-               public bool             send_event;
-               public IntPtr           display;
-               public IntPtr           parent;
-               public IntPtr           window;
-               public int              x;
-               public int              y;
-               public int              width;
-               public int              height;
-               public int              border_width;
-               public bool             override_redirect;
-       }
-
-       [StructLayout(LayoutKind.Sequential)]
-       public struct XDestroyWindowEvent {
-               public XEventName       type;
-               public IntPtr           serial;
-               public bool             send_event;
-               public IntPtr           display;
-               public IntPtr           xevent;
-               public IntPtr           window;
-       }
-
-       [StructLayout(LayoutKind.Sequential)]
-       public struct XUnmapEvent {
-               public XEventName       type;
-               public IntPtr           serial;
-               public bool             send_event;
-               public IntPtr           display;
-               public IntPtr           xevent;
-               public IntPtr           window;
-               public bool             from_configure;
-       }
-
-       [StructLayout(LayoutKind.Sequential)]
-       public struct XMapEvent {
-               public XEventName       type;
-               public IntPtr           serial;
-               public bool             send_event;
-               public IntPtr           display;
-               public IntPtr           xevent;
-               public IntPtr           window;
-               public bool             override_redirect;
-       }
-
-       [StructLayout(LayoutKind.Sequential)]
-       public struct XMapRequestEvent {
-               public XEventName       type;
-               public IntPtr           serial;
-               public bool             send_event;
-               public IntPtr           display;
-               public IntPtr           parent;
-               public IntPtr           window;
-       }
-
-       [StructLayout(LayoutKind.Sequential)]
-       public struct XReparentEvent {
-               public XEventName       type;
-               public IntPtr           serial;
-               public bool             send_event;
-               public IntPtr           display;
-               public IntPtr           xevent;
-               public IntPtr           window;
-               public IntPtr           parent;
-               public int              x;
-               public int              y;
-               public bool             override_redirect;
-       }
-
-       [StructLayout(LayoutKind.Sequential)]
-       public struct XConfigureEvent {
-               public XEventName       type;
-               public IntPtr           serial;
-               public bool             send_event;
-               public IntPtr           display;
-               public IntPtr           xevent;
-               public IntPtr           window;
-               public int              x;
-               public int              y;
-               public int              width;
-               public int              height;
-               public int              border_width;
-               public IntPtr           above;
-               public bool             override_redirect;
-       }
-
-       [StructLayout(LayoutKind.Sequential)]
-       public struct XGravityEvent {
-               public XEventName       type;
-               public IntPtr           serial;
-               public bool             send_event;
-               public IntPtr           display;
-               public IntPtr           xevent;
-               public IntPtr           window;
-               public int              x;
-               public int              y;
-       }
-
-       [StructLayout(LayoutKind.Sequential)]
-       public struct XResizeRequestEvent {
-               public XEventName       type;
-               public IntPtr           serial;
-               public bool             send_event;
-               public IntPtr           display;
-               public IntPtr           window;
-               public int              width;
-               public int              height;
-       }
-
-       [StructLayout(LayoutKind.Sequential)]
-       public struct XConfigureRequestEvent {
-               public XEventName       type;
-               public IntPtr           serial;
-               public bool             send_event;
-               public IntPtr           display;
-               public IntPtr           parent;
-               public IntPtr           window;
-               public int              x;
-               public int              y;
-               public int              width;
-               public int              height;
-               public int              border_width;
-               public IntPtr           above;
-               public int              detail;
-               public IntPtr           value_mask;
-       }
-
-       [StructLayout(LayoutKind.Sequential)]
-       public struct XCirculateEvent {
-               public XEventName       type;
-               public IntPtr           serial;
-               public bool             send_event;
-               public IntPtr           display;
-               public IntPtr           xevent;
-               public IntPtr           window;
-               public int              place;
-       }
-
-       [StructLayout(LayoutKind.Sequential)]
-       public struct XCirculateRequestEvent {
-               public XEventName       type;
-               public IntPtr           serial;
-               public bool             send_event;
-               public IntPtr           display;
-               public IntPtr           parent;
-               public IntPtr           window;
-               public int              place;
-       }
-
-       [StructLayout(LayoutKind.Sequential)]
-       public struct XPropertyEvent {
-               public XEventName       type;
-               public IntPtr           serial;
-               public bool             send_event;
-               public IntPtr           display;
-               public IntPtr           window;
-               public IntPtr           atom;
-               public IntPtr           time;
-               public int              state;
-       }
-
-       [StructLayout(LayoutKind.Sequential)]
-       public struct XSelectionClearEvent {
-               public XEventName       type;
-               public IntPtr           serial;
-               public bool             send_event;
-               public IntPtr           display;
-               public IntPtr           window;
-               public IntPtr           selection;
-               public IntPtr           time;
-       }
-
-       [StructLayout(LayoutKind.Sequential)]
-       public struct XSelectionRequestEvent {
-               public XEventName       type;
-               public IntPtr           serial;
-               public bool             send_event;
-               public IntPtr           display;
-               public IntPtr           owner;
-               public IntPtr           requestor;
-               public IntPtr           selection;
-               public IntPtr           target;
-               public IntPtr           property;
-               public IntPtr           time;
-       }
-
-       [StructLayout(LayoutKind.Sequential)]
-       public struct XSelectionEvent {
-               public XEventName       type;
-               public IntPtr           serial;
-               public bool             send_event;
-               public IntPtr           display;
-               public IntPtr           requestor;
-               public IntPtr           selection;
-               public IntPtr           target;
-               public IntPtr           property;
-               public IntPtr           time;
-       }
-
-       [StructLayout(LayoutKind.Sequential)]
-       public struct XColormapEvent {
-               public XEventName       type;
-               public IntPtr           serial;
-               public bool             send_event;
-               public IntPtr           display;
-               public IntPtr           window;
-               public IntPtr           colormap;
-               public bool             c_new;
-               public int              state;
-       }
-
-       [StructLayout(LayoutKind.Sequential)]
-       public struct XClientMessageEvent {
-               public XEventName       type;
-               public IntPtr           serial;
-               public bool             send_event;
-               public IntPtr           display;
-               public IntPtr           window;
-               public IntPtr           message_type;
-               public int              format;
-               public IntPtr           ptr1;
-               public IntPtr           ptr2;
-               public IntPtr           ptr3;
-               public IntPtr           ptr4;
-               public IntPtr           ptr5;
-       }
-
-       [StructLayout(LayoutKind.Sequential)]
-       public struct XMappingEvent {
-               public XEventName       type;
-               public IntPtr           serial;
-               public bool             send_event;
-               public IntPtr           display;
-               public IntPtr           window;
-               public int              request;
-               public int              first_keycode;
-               public int              count;
-       }
-
-       [StructLayout(LayoutKind.Sequential)]
-       public struct XErrorEvent {
-               public XEventName       type;
-               public IntPtr           display;
-               public IntPtr           resourceid;
-               public IntPtr           serial;
-               public byte             error_code;
-               public XRequest request_code;
-               public byte             minor_code;
-       }
-
-       [StructLayout(LayoutKind.Sequential)]
-       public struct XEventPad {
-               public IntPtr pad0;
-               public IntPtr pad1;
-               public IntPtr pad2;
-               public IntPtr pad3;
-               public IntPtr pad4;
-               public IntPtr pad5;
-               public IntPtr pad6;
-               public IntPtr pad7;
-               public IntPtr pad8;
-               public IntPtr pad9;
-               public IntPtr pad10;
-               public IntPtr pad11;
-               public IntPtr pad12;
-               public IntPtr pad13;
-               public IntPtr pad14;
-               public IntPtr pad15;
-               public IntPtr pad16;
-               public IntPtr pad17;
-               public IntPtr pad18;
-               public IntPtr pad19;
-               public IntPtr pad20;
-               public IntPtr pad21;
-               public IntPtr pad22;
-               public IntPtr pad23;
-       }
-
-       [StructLayout(LayoutKind.Explicit)]
-       public struct XEvent {
-               [ FieldOffset(0) ] public XEventName type;
-               [ FieldOffset(0) ] public XAnyEvent AnyEvent;
-               [ FieldOffset(0) ] public XKeyEvent KeyEvent;
-               [ FieldOffset(0) ] public XButtonEvent ButtonEvent;
-               [ FieldOffset(0) ] public XMotionEvent MotionEvent;
-               [ FieldOffset(0) ] public XCrossingEvent CrossingEvent;
-               [ FieldOffset(0) ] public XFocusChangeEvent FocusChangeEvent;
-               [ FieldOffset(0) ] public XExposeEvent ExposeEvent;
-               [ FieldOffset(0) ] public XGraphicsExposeEvent GraphicsExposeEvent;
-               [ FieldOffset(0) ] public XNoExposeEvent NoExposeEvent;
-               [ FieldOffset(0) ] public XVisibilityEvent VisibilityEvent;
-               [ FieldOffset(0) ] public XCreateWindowEvent CreateWindowEvent;
-               [ FieldOffset(0) ] public XDestroyWindowEvent DestroyWindowEvent;
-               [ FieldOffset(0) ] public XUnmapEvent UnmapEvent;
-               [ FieldOffset(0) ] public XMapEvent MapEvent;
-               [ FieldOffset(0) ] public XMapRequestEvent MapRequestEvent;
-               [ FieldOffset(0) ] public XReparentEvent ReparentEvent;
-               [ FieldOffset(0) ] public XConfigureEvent ConfigureEvent;
-               [ FieldOffset(0) ] public XGravityEvent GravityEvent;
-               [ FieldOffset(0) ] public XResizeRequestEvent ResizeRequestEvent;
-               [ FieldOffset(0) ] public XConfigureRequestEvent ConfigureRequestEvent;
-               [ FieldOffset(0) ] public XCirculateEvent CirculateEvent;
-               [ FieldOffset(0) ] public XCirculateRequestEvent CirculateRequestEvent;
-               [ FieldOffset(0) ] public XPropertyEvent PropertyEvent;
-               [ FieldOffset(0) ] public XSelectionClearEvent SelectionClearEvent;
-               [ FieldOffset(0) ] public XSelectionRequestEvent SelectionRequestEvent;
-               [ FieldOffset(0) ] public XSelectionEvent SelectionEvent;
-               [ FieldOffset(0) ] public XColormapEvent ColormapEvent;
-               [ FieldOffset(0) ] public XClientMessageEvent ClientMessageEvent;
-               [ FieldOffset(0) ] public XMappingEvent MappingEvent;
-               [ FieldOffset(0) ] public XErrorEvent ErrorEvent;
-               [ FieldOffset(0) ] public XKeymapEvent KeymapEvent;
-
-               //[MarshalAs(System.Runtime.InteropServices.UnmanagedType.ByValArray, SizeConst=24)]
-               //[ FieldOffset(0) ] public int[] pad;
-               [ FieldOffset(0) ] public XEventPad Pad;
-               public override string ToString() {
-                       switch (type)
-                       {
-                               case XEventName.ButtonPress:
-                               case XEventName.ButtonRelease:
-                                       return ToString (ButtonEvent);
-                               case XEventName.CirculateNotify:
-                               case XEventName.CirculateRequest:
-                                       return ToString (CirculateEvent);
-                               case XEventName.ClientMessage:
-                                       return ToString (ClientMessageEvent);
-                               case XEventName.ColormapNotify:
-                                       return ToString (ColormapEvent);
-                               case XEventName.ConfigureNotify:
-                                       return ToString (ConfigureEvent);
-                               case XEventName.ConfigureRequest:
-                                       return ToString (ConfigureRequestEvent);
-                               case XEventName.CreateNotify:
-                                       return ToString (CreateWindowEvent);
-                               case XEventName.DestroyNotify:
-                                       return ToString (DestroyWindowEvent);
-                               case XEventName.Expose:
-                                       return ToString (ExposeEvent);
-                               case XEventName.FocusIn:
-                               case XEventName.FocusOut:
-                                       return ToString (FocusChangeEvent);
-                               case XEventName.GraphicsExpose:
-                                       return ToString (GraphicsExposeEvent);
-                               case XEventName.GravityNotify:
-                                       return ToString (GravityEvent);
-                               case XEventName.KeymapNotify:
-                                       return ToString (KeymapEvent);
-                               case XEventName.MapNotify:
-                                       return ToString (MapEvent);
-                               case XEventName.MappingNotify:
-                                       return ToString (MappingEvent);
-                               case XEventName.MapRequest:
-                                       return ToString (MapRequestEvent);
-                               case XEventName.MotionNotify:
-                                       return ToString (MotionEvent);
-                               case XEventName.NoExpose:
-                                       return ToString (NoExposeEvent);
-                               case XEventName.PropertyNotify:
-                                       return ToString (PropertyEvent);
-                               case XEventName.ReparentNotify:
-                                       return ToString (ReparentEvent);
-                               case XEventName.ResizeRequest:
-                                       return ToString (ResizeRequestEvent);
-                               case XEventName.SelectionClear:
-                                       return ToString (SelectionClearEvent);
-                               case XEventName.SelectionNotify:
-                                       return ToString (SelectionEvent);
-                               case XEventName.SelectionRequest:
-                                       return ToString (SelectionRequestEvent);
-                               case XEventName.UnmapNotify:
-                                       return ToString (UnmapEvent);
-                               case XEventName.VisibilityNotify:
-                                       return ToString (VisibilityEvent);
-                               case XEventName.EnterNotify:
-                               case XEventName.LeaveNotify:
-                                       return ToString (CrossingEvent);
-                               default:
-                                       return type.ToString ();
-                       }
-               }
-               
-               public static string ToString (object ev)
-               {
-                       string result = string.Empty;
-                       Type type = ev.GetType ();
-                       System.Reflection.FieldInfo [] fields = type.GetFields (System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.Instance);
-                       for (int i = 0; i < fields.Length; i++) {
-                               if (result != string.Empty) {
-                                       result += ", ";
-                               }
-                               object value = fields [i].GetValue (ev);
-                               result += fields [i].Name + "=" + (value == null ? "<null>" : value.ToString ());
-                       }
-                       return type.Name + " (" + result + ")";
-               }
-       }
-
-       [StructLayout(LayoutKind.Sequential)]
-       public struct XSetWindowAttributes {
-               public IntPtr           background_pixmap;
-               public IntPtr           background_pixel;
-               public IntPtr           border_pixmap;
-               public IntPtr           border_pixel;
-               public Gravity  bit_gravity;
-               public Gravity  win_gravity;
-               public int              backing_store;
-               public IntPtr           backing_planes;
-               public IntPtr           backing_pixel;
-               public bool             save_under;
-               public IntPtr           event_mask;
-               public IntPtr           do_not_propagate_mask;
-               public bool             override_redirect;
-               public IntPtr           colormap;
-               public IntPtr           cursor;
-       }
-
-       [StructLayout(LayoutKind.Sequential)]
-       public struct XWindowAttributes {
-               public int              x;
-               public int              y;
-               public int              width;
-               public int              height;
-               public int              border_width;
-               public int              depth;
-               public IntPtr           visual;
-               public IntPtr           root;
-               public int              c_class;
-               public Gravity  bit_gravity;
-               public Gravity  win_gravity;
-               public int              backing_store;
-               public IntPtr           backing_planes;
-               public IntPtr           backing_pixel;
-               public bool             save_under;
-               public IntPtr           colormap;
-               public bool             map_installed;
-               public MapState map_state;
-               public IntPtr           all_event_masks;
-               public IntPtr           your_event_mask;
-               public IntPtr           do_not_propagate_mask;
-               public bool             override_direct;
-               public IntPtr           screen;
-
-               public override string ToString ()
-               {
-                       return XEvent.ToString (this);
-               }
-       }
-
-       [StructLayout(LayoutKind.Sequential)]
-       public struct XTextProperty {
-               public string           value;
-               public IntPtr           encoding;
-               public int              format;
-               public IntPtr           nitems;
-       }
-
-       public enum XWindowClass {
-               InputOutput     = 1,
-               InputOnly       = 2
-       }
-
-       public enum XEventName {
-               KeyPress                = 2,
-               KeyRelease              = 3,
-               ButtonPress             = 4,
-               ButtonRelease           = 5,
-               MotionNotify            = 6,
-               EnterNotify             = 7,
-               LeaveNotify             = 8,
-               FocusIn                 = 9,
-               FocusOut                = 10,
-               KeymapNotify            = 11,
-               Expose                  = 12,
-               GraphicsExpose          = 13,
-               NoExpose                = 14,
-               VisibilityNotify        = 15,
-               CreateNotify            = 16,
-               DestroyNotify           = 17,
-               UnmapNotify             = 18,
-               MapNotify               = 19,
-               MapRequest              = 20,
-               ReparentNotify          = 21,
-               ConfigureNotify         = 22,
-               ConfigureRequest        = 23,
-               GravityNotify           = 24,
-               ResizeRequest           = 25,
-               CirculateNotify         = 26,
-               CirculateRequest        = 27,
-               PropertyNotify          = 28,
-               SelectionClear          = 29,
-               SelectionRequest        = 30,
-               SelectionNotify         = 31,
-               ColormapNotify          = 32,
-               ClientMessage           = 33,
-               MappingNotify           = 34,
-
-               LASTEvent
-       }
-
-       [Flags]
-       public enum SetWindowValuemask {
-               Nothing         = 0,
-               BackPixmap      = 1,
-               BackPixel       = 2,
-               BorderPixmap    = 4,
-               BorderPixel     = 8,
-               BitGravity      = 16,
-               WinGravity      = 32,
-               BackingStore    = 64,
-               BackingPlanes   = 128,
-               BackingPixel    = 256,
-               OverrideRedirect = 512,
-               SaveUnder       = 1024,
-               EventMask       = 2048,
-               DontPropagate   = 4096,
-               ColorMap        = 8192,
-               Cursor          = 16384
-       }
-       
-       public enum SendEventValues {
-               PointerWindow = 0,
-               InputFocus = 1
-       }
-
-       public enum CreateWindowArgs {
-               CopyFromParent  = 0,
-               ParentRelative  = 1,
-               InputOutput     = 1,
-               InputOnly       = 2
-       }
-
-       public enum Gravity {
-               ForgetGravity   = 0,
-               NorthWestGravity= 1,
-               NorthGravity    = 2,
-               NorthEastGravity= 3,
-               WestGravity     = 4,
-               CenterGravity   = 5,
-               EastGravity     = 6,
-               SouthWestGravity= 7,
-               SouthGravity    = 8,
-               SouthEastGravity= 9,
-               StaticGravity   = 10
-       }
-
-       public enum XKeySym : uint {
-               XK_BackSpace    = 0xFF08,
-               XK_Tab          = 0xFF09,
-               XK_Clear        = 0xFF0B,
-               XK_Return       = 0xFF0D,
-               XK_Home         = 0xFF50,
-               XK_Left         = 0xFF51,
-               XK_Up           = 0xFF52,
-               XK_Right        = 0xFF53,
-               XK_Down         = 0xFF54,
-               XK_Page_Up      = 0xFF55,
-               XK_Page_Down    = 0xFF56,
-               XK_End          = 0xFF57,
-               XK_Begin        = 0xFF58,
-               XK_Menu         = 0xFF67,
-               XK_Shift_L      = 0xFFE1,
-               XK_Shift_R      = 0xFFE2,
-               XK_Control_L    = 0xFFE3,
-               XK_Control_R    = 0xFFE4,
-               XK_Caps_Lock    = 0xFFE5,
-               XK_Shift_Lock   = 0xFFE6,       
-               XK_Meta_L       = 0xFFE7,
-               XK_Meta_R       = 0xFFE8,
-               XK_Alt_L        = 0xFFE9,
-               XK_Alt_R        = 0xFFEA,
-               XK_Super_L      = 0xFFEB,
-               XK_Super_R      = 0xFFEC,
-               XK_Hyper_L      = 0xFFED,
-               XK_Hyper_R      = 0xFFEE,
-       }
-
-       [Flags]
-       public enum EventMask {
-               NoEventMask             = 0,
-               KeyPressMask            = 1<<0,
-               KeyReleaseMask          = 1<<1,
-               ButtonPressMask         = 1<<2,
-               ButtonReleaseMask       = 1<<3,
-               EnterWindowMask         = 1<<4,
-               LeaveWindowMask         = 1<<5,
-               PointerMotionMask       = 1<<6,
-               PointerMotionHintMask   = 1<<7,
-               Button1MotionMask       = 1<<8,
-               Button2MotionMask       = 1<<9,
-               Button3MotionMask       = 1<<10,
-               Button4MotionMask       = 1<<11,
-               Button5MotionMask       = 1<<12,
-               ButtonMotionMask        = 1<<13,
-               KeymapStateMask         = 1<<14,
-               ExposureMask            = 1<<15,
-               VisibilityChangeMask    = 1<<16,
-               StructureNotifyMask     = 1<<17,
-               ResizeRedirectMask      = 1<<18,
-               SubstructureNotifyMask  = 1<<19,
-               SubstructureRedirectMask= 1<<20,
-               FocusChangeMask         = 1<<21,
-               PropertyChangeMask      = 1<<22,
-               ColormapChangeMask      = 1<<23,
-               OwnerGrabButtonMask     = 1<<24
-       }
-
-       public enum GrabMode {
-               GrabModeSync            = 0,
-               GrabModeAsync           = 1
-       }
-
-       [StructLayout(LayoutKind.Sequential)]
-       public struct XStandardColormap {
-               public IntPtr           colormap;
-               public IntPtr           red_max;
-               public IntPtr           red_mult;
-               public IntPtr           green_max;
-               public IntPtr           green_mult;
-               public IntPtr           blue_max;
-               public IntPtr           blue_mult;
-               public IntPtr           base_pixel;
-               public IntPtr           visualid;
-               public IntPtr           killid;
-       }
-
-       [StructLayout(LayoutKind.Sequential, Pack=2)]
-       public struct XColor {
-               public IntPtr           pixel;
-               public ushort           red;
-               public ushort           green;
-               public ushort           blue;
-               public byte             flags;
-               public byte             pad;
-       }
-
-       public enum Atom {
-               AnyPropertyType         = 0,
-               XA_PRIMARY              = 1,
-               XA_SECONDARY            = 2,
-               XA_ARC                  = 3,
-               XA_ATOM                 = 4,
-               XA_BITMAP               = 5,
-               XA_CARDINAL             = 6,
-               XA_COLORMAP             = 7,
-               XA_CURSOR               = 8,
-               XA_CUT_BUFFER0          = 9,
-               XA_CUT_BUFFER1          = 10,
-               XA_CUT_BUFFER2          = 11,
-               XA_CUT_BUFFER3          = 12,
-               XA_CUT_BUFFER4          = 13,
-               XA_CUT_BUFFER5          = 14,
-               XA_CUT_BUFFER6          = 15,
-               XA_CUT_BUFFER7          = 16,
-               XA_DRAWABLE             = 17,
-               XA_FONT                 = 18,
-               XA_INTEGER              = 19,
-               XA_PIXMAP               = 20,
-               XA_POINT                = 21,
-               XA_RECTANGLE            = 22,
-               XA_RESOURCE_MANAGER     = 23,
-               XA_RGB_COLOR_MAP        = 24,
-               XA_RGB_BEST_MAP         = 25,
-               XA_RGB_BLUE_MAP         = 26,
-               XA_RGB_DEFAULT_MAP      = 27,
-               XA_RGB_GRAY_MAP         = 28,
-               XA_RGB_GREEN_MAP        = 29,
-               XA_RGB_RED_MAP          = 30,
-               XA_STRING               = 31,
-               XA_VISUALID             = 32,
-               XA_WINDOW               = 33,
-               XA_WM_COMMAND           = 34,
-               XA_WM_HINTS             = 35,
-               XA_WM_CLIENT_MACHINE    = 36,
-               XA_WM_ICON_NAME         = 37,
-               XA_WM_ICON_SIZE         = 38,
-               XA_WM_NAME              = 39,
-               XA_WM_NORMAL_HINTS      = 40,
-               XA_WM_SIZE_HINTS        = 41,
-               XA_WM_ZOOM_HINTS        = 42,
-               XA_MIN_SPACE            = 43,
-               XA_NORM_SPACE           = 44,
-               XA_MAX_SPACE            = 45,
-               XA_END_SPACE            = 46,
-               XA_SUPERSCRIPT_X        = 47,
-               XA_SUPERSCRIPT_Y        = 48,
-               XA_SUBSCRIPT_X          = 49,
-               XA_SUBSCRIPT_Y          = 50,
-               XA_UNDERLINE_POSITION   = 51,
-               XA_UNDERLINE_THICKNESS  = 52,
-               XA_STRIKEOUT_ASCENT     = 53,
-               XA_STRIKEOUT_DESCENT    = 54,
-               XA_ITALIC_ANGLE         = 55,
-               XA_X_HEIGHT             = 56,
-               XA_QUAD_WIDTH           = 57,
-               XA_WEIGHT               = 58,
-               XA_POINT_SIZE           = 59,
-               XA_RESOLUTION           = 60,
-               XA_COPYRIGHT            = 61,
-               XA_NOTICE               = 62,
-               XA_FONT_NAME            = 63,
-               XA_FAMILY_NAME          = 64,
-               XA_FULL_NAME            = 65,
-               XA_CAP_HEIGHT           = 66,
-               XA_WM_CLASS             = 67,
-               XA_WM_TRANSIENT_FOR     = 68,
-
-               XA_LAST_PREDEFINED      = 68
-       }
-
-       [StructLayout(LayoutKind.Sequential)]
-       public struct XScreen {
-               public IntPtr           ext_data;
-               public IntPtr           display;
-               public IntPtr           root;
-               public int              width;
-               public int              height;
-               public int              mwidth;
-               public int              mheight;
-               public int              ndepths;
-               public IntPtr           depths;
-               public int              root_depth;
-               public IntPtr           root_visual;
-               public IntPtr           default_gc;
-               public IntPtr           cmap;
-               public IntPtr           white_pixel;
-               public IntPtr           black_pixel;
-               public int              max_maps;
-               public int              min_maps;
-               public int              backing_store;
-               public bool             save_unders;
-               public IntPtr       root_input_mask;
-       }
-
-       [Flags]
-       public enum ChangeWindowFlags {
-               CWX                     = 1<<0,
-               CWY                     = 1<<1,
-               CWWidth                 = 1<<2,
-               CWHeight                = 1<<3,
-               CWBorderWidth           = 1<<4,
-               CWSibling               = 1<<5,
-               CWStackMode             = 1<<6
-       }
-
-       public enum StackMode {
-               Above                   = 0,
-               Below                   = 1,
-               TopIf                   = 2,
-               BottomIf                = 3,
-               Opposite                = 4
-       }
-
-       [StructLayout(LayoutKind.Sequential)]
-       public struct XWindowChanges {
-               public int              x;
-               public int              y;
-               public int              width;
-               public int              height;
-               public int              border_width;
-               public IntPtr           sibling;
-               public StackMode        stack_mode;
-       }       
-
-       [Flags]
-       public enum ColorFlags {
-               DoRed                   = 1<<0,
-               DoGreen                 = 1<<1,
-               DoBlue                  = 1<<2
-       }
-
-       public enum NotifyMode {
-               NotifyNormal            = 0,
-               NotifyGrab              = 1,
-               NotifyUngrab            = 2
-       }
-
-       public enum NotifyDetail {
-               NotifyAncestor          = 0,
-               NotifyVirtual           = 1,
-               NotifyInferior          = 2,
-               NotifyNonlinear         = 3,
-               NotifyNonlinearVirtual  = 4,
-               NotifyPointer           = 5,
-               NotifyPointerRoot       = 6,
-               NotifyDetailNone        = 7
-       }
-
-       [StructLayout(LayoutKind.Sequential)]
-       public struct MotifWmHints {
-               public IntPtr           flags;
-               public IntPtr           functions;
-               public IntPtr       decorations;
-               public IntPtr           input_mode;
-               public IntPtr           status;
-
-               public override string ToString ()
-               {
-                       return string.Format("MotifWmHints <flags={0}, functions={1}, decorations={2}, input_mode={3}, status={4}", (MotifFlags) flags.ToInt32 (), (MotifFunctions) functions.ToInt32 (), (MotifDecorations) decorations.ToInt32 (), (MotifInputMode) input_mode.ToInt32 (), status.ToInt32 ());
-               }
-       }
-
-       [Flags]
-       public enum MotifFlags {
-               Functions               = 1,
-               Decorations             = 2,
-               InputMode               = 4,
-               Status                  = 8
-       }
-
-       [Flags]
-       public enum MotifFunctions {
-               All                     = 0x01,
-               Resize                  = 0x02,
-               Move                    = 0x04,
-               Minimize                = 0x08,
-               Maximize                = 0x10,
-               Close                   = 0x20
-       }
-
-       [Flags]
-       public enum MotifDecorations {
-               All                     = 0x01,
-               Border                  = 0x02,
-               ResizeH                 = 0x04,
-               Title                   = 0x08,
-               Menu                    = 0x10,
-               Minimize                = 0x20,
-               Maximize                = 0x40,
-               
-       }
-
-       [Flags]
-       public enum MotifInputMode {
-               Modeless                = 0,
-               ApplicationModal        = 1,
-               SystemModal             = 2,
-               FullApplicationModal    = 3
-       }
-
-       [Flags]
-       public enum KeyMasks {
-               ShiftMask               = (1 << 0),
-               LockMask                = (1 << 1),
-               ControlMask             = (1 << 2),
-               Mod1Mask                = (1 << 3),
-               Mod2Mask                = (1 << 4),
-               Mod3Mask                = (1 << 5),
-               Mod4Mask                = (1 << 6),
-               Mod5Mask                = (1 << 7),
-
-               ModMasks                = Mod1Mask | Mod2Mask | Mod3Mask | Mod4Mask | Mod5Mask
-       }
-
-       [Flags]
-       public enum MouseKeyMasks {
-               Button1Mask             = (1 << 8),
-               Button2Mask             = (1 << 9),
-               Button3Mask             = (1 << 10),
-               Button4Mask             = (1 << 11),
-               Button5Mask             = (1 << 12),
-       }
-
-       [StructLayout (LayoutKind.Sequential)]
-       public struct XModifierKeymap {
-               public int max_keypermod;
-               public IntPtr modifiermap;
-       } 
-
-       public enum PropertyMode {
-               Replace                 = 0,
-               Prepend                 = 1,
-               Append                  = 2
-       }
-
-       [StructLayout (LayoutKind.Sequential)]
-       public struct XKeyBoardState {
-               public int key_click_percent;
-               public int bell_percent;
-               public uint bell_pitch, bell_duration;
-               public IntPtr led_mask;
-               public int global_auto_repeat;
-               public AutoRepeats auto_repeats;
-
-               [StructLayout (LayoutKind.Explicit)]
-                       public struct AutoRepeats {
-                       [FieldOffset (0)]
-                       public byte first;
-                               
-                       [FieldOffset (31)]
-                       public byte last;
-               }
-       }
-
-       [Flags]
-       public enum GCFunction {
-               GCFunction              = 1<<0,
-               GCPlaneMask             = 1<<1,
-               GCForeground            = 1<<2,
-               GCBackground            = 1<<3,
-               GCLineWidth             = 1<<4,
-               GCLineStyle             = 1<<5,
-               GCCapStyle              = 1<<6,
-               GCJoinStyle             = 1<<7,
-               GCFillStyle             = 1<<8,
-               GCFillRule              = 1<<9, 
-               GCTile                  = 1<<10,
-               GCStipple               = 1<<11,
-               GCTileStipXOrigin       = 1<<12,
-               GCTileStipYOrigin       = 1<<13,
-               GCFont                  = 1<<14,
-               GCSubwindowMode         = 1<<15,
-               GCGraphicsExposures     = 1<<16,
-               GCClipXOrigin           = 1<<17,
-               GCClipYOrigin           = 1<<18,
-               GCClipMask              = 1<<19,
-               GCDashOffset            = 1<<20,
-               GCDashList              = 1<<21,
-               GCArcMode               = 1<<22
-       }
-
-       public enum GCJoinStyle {
-               JoinMiter               = 0,
-               JoinRound               = 1,
-               JoinBevel               = 2
-       }
-
-       public enum GCLineStyle {
-               LineSolid               = 0,
-               LineOnOffDash           = 1,
-               LineDoubleDash          = 2
-       }
-
-       public enum GCCapStyle {
-               CapNotLast              = 0,
-               CapButt                 = 1,
-               CapRound                = 2,
-               CapProjecting           = 3
-       }
-
-       public enum GCFillStyle {
-               FillSolid               = 0,
-               FillTiled               = 1,
-               FillStippled            = 2,
-               FillOpaqueStppled       = 3
-       }
-
-       public enum GCFillRule {
-               EvenOddRule             = 0,
-               WindingRule             = 1
-       }
-
-       public enum GCArcMode {
-               ArcChord                = 0,
-               ArcPieSlice             = 1
-       }
-
-       public enum GCSubwindowMode {
-               ClipByChildren          = 0,
-               IncludeInferiors        = 1
-       }
-
-       [StructLayout (LayoutKind.Sequential)]
-       public struct XGCValues {
-               public GXFunction               function;
-               public IntPtr                   plane_mask;
-               public IntPtr                   foreground;
-               public IntPtr                   background;
-               public int                      line_width;
-               public GCLineStyle              line_style;
-               public GCCapStyle               cap_style;
-               public GCJoinStyle              join_style;
-               public GCFillStyle              fill_style;
-               public GCFillRule               fill_rule;
-               public GCArcMode                arc_mode;
-               public IntPtr                   tile;
-               public IntPtr                   stipple;
-               public int                      ts_x_origin;
-               public int                      ts_y_origin;
-               public IntPtr                   font;
-               public GCSubwindowMode  subwindow_mode;
-               public bool                     graphics_exposures;
-               public int                      clip_x_origin;
-               public int                      clib_y_origin;
-               public IntPtr                   clip_mask;
-               public int                      dash_offset;
-               public byte                     dashes;
-       }
-
-       public enum GXFunction {
-               GXclear                         = 0x0,          /* 0 */
-               GXand                           = 0x1,          /* src AND dst */
-               GXandReverse                    = 0x2,          /* src AND NOT dst */
-               GXcopy                          = 0x3,          /* src */
-               GXandInverted                   = 0x4,          /* NOT src AND dst */
-               GXnoop                          = 0x5,          /* dst */
-               GXxor                           = 0x6,          /* src XOR dst */
-               GXor                            = 0x7,          /* src OR dst */
-               GXnor                           = 0x8,          /* NOT src AND NOT dst */
-               GXequiv                         = 0x9,          /* NOT src XOR dst */
-               GXinvert                        = 0xa,          /* NOT dst */
-               GXorReverse                     = 0xb,          /* src OR NOT dst */
-               GXcopyInverted                  = 0xc,          /* NOT src */
-               GXorInverted                    = 0xd,          /* NOT src OR dst */
-               GXnand                          = 0xe,          /* NOT src OR NOT dst */
-               GXset                           = 0xf           /* 1 */
-       }
-
-       public enum NetWindowManagerState {
-               Remove                          = 0,
-               Add                             = 1,
-               Toggle                          = 2
-       }
-
-       public enum RevertTo {
-               None                            = 0,
-               PointerRoot                     = 1,
-               Parent                          = 2
-       }
-
-       public enum MapState {
-               IsUnmapped                      = 0,
-               IsUnviewable                    = 1,
-               IsViewable                      = 2
-       }
-
-       public enum CursorFontShape {
-               XC_X_cursor                     = 0,
-               XC_arrow                        = 2,
-               XC_based_arrow_down             = 4,
-               XC_based_arrow_up               = 6,
-               XC_boat                         = 8,
-               XC_bogosity                     = 10,
-               XC_bottom_left_corner           = 12,
-               XC_bottom_right_corner          = 14,
-               XC_bottom_side                  = 16,
-               XC_bottom_tee                   = 18,
-               XC_box_spiral                   = 20,
-               XC_center_ptr                   = 22,
-
-               XC_circle                       = 24,
-               XC_clock                        = 26,
-               XC_coffee_mug                   = 28,
-               XC_cross                        = 30,
-               XC_cross_reverse                = 32,
-               XC_crosshair                    = 34,
-               XC_diamond_cross                = 36,
-               XC_dot                          = 38,
-               XC_dotbox                       = 40,
-               XC_double_arrow                 = 42,
-               XC_draft_large                  = 44,
-               XC_draft_small                  = 46,
-
-               XC_draped_box                   = 48,
-               XC_exchange                     = 50,
-               XC_fleur                        = 52,
-               XC_gobbler                      = 54,
-               XC_gumby                        = 56,
-               XC_hand1                        = 58,
-               XC_hand2                        = 60,
-               XC_heart                        = 62,
-               XC_icon                         = 64,
-               XC_iron_cross                   = 66,
-               XC_left_ptr                     = 68,
-               XC_left_side                    = 70,
-
-               XC_left_tee                     = 72,
-               XC_left_button                  = 74,
-               XC_ll_angle                     = 76,
-               XC_lr_angle                     = 78,
-               XC_man                          = 80,
-               XC_middlebutton                 = 82,
-               XC_mouse                        = 84,
-               XC_pencil                       = 86,
-               XC_pirate                       = 88,
-               XC_plus                         = 90,
-               XC_question_arrow               = 92,
-               XC_right_ptr                    = 94,
-
-               XC_right_side                   = 96,
-               XC_right_tee                    = 98,
-               XC_rightbutton                  = 100,
-               XC_rtl_logo                     = 102,
-               XC_sailboat                     = 104,
-               XC_sb_down_arrow                = 106,
-               XC_sb_h_double_arrow            = 108,
-               XC_sb_left_arrow                = 110,
-               XC_sb_right_arrow               = 112,
-               XC_sb_up_arrow                  = 114,
-               XC_sb_v_double_arrow            = 116,
-               XC_sb_shuttle                   = 118,
-
-               XC_sizing                       = 120,
-               XC_spider                       = 122,
-               XC_spraycan                     = 124,
-               XC_star                         = 126,
-               XC_target                       = 128,
-               XC_tcross                       = 130,
-               XC_top_left_arrow               = 132,
-               XC_top_left_corner              = 134,
-               XC_top_right_corner             = 136,
-               XC_top_side                     = 138,
-               XC_top_tee                      = 140,
-               XC_trek                         = 142,
-
-               XC_ul_angle                     = 144,
-               XC_umbrella                     = 146,
-               XC_ur_angle                     = 148,
-               XC_watch                        = 150,
-               XC_xterm                        = 152,
-               XC_num_glyphs                   = 154
-       }
-
-       public enum SystrayRequest {
-               SYSTEM_TRAY_REQUEST_DOCK        = 0,
-               SYSTEM_TRAY_BEGIN_MESSAGE       = 1,
-               SYSTEM_TRAY_CANCEL_MESSAGE      = 2
-       }
-
-       public enum NetWmStateRequest {
-               _NET_WM_STATE_REMOVE            = 0,
-               _NET_WM_STATE_ADD               = 1,
-               _NET_WM_STATE_TOGGLE            = 2
-       }
-
-       public enum NetWmMoveResize {
-               _NET_WM_MOVERESIZE_SIZE_TOPLEFT =       0,
-               _NET_WM_MOVERESIZE_SIZE_TOP =           1,
-               _NET_WM_MOVERESIZE_SIZE_TOPRIGHT =      2,
-               _NET_WM_MOVERESIZE_SIZE_RIGHT =         3,
-               _NET_WM_MOVERESIZE_SIZE_BOTTOMRIGHT =   4,
-               _NET_WM_MOVERESIZE_SIZE_BOTTOM =        5,
-               _NET_WM_MOVERESIZE_SIZE_BOTTOMLEFT =    6,
-               _NET_WM_MOVERESIZE_SIZE_LEFT =          7,
-               _NET_WM_MOVERESIZE_MOVE =               8,
-               _NET_WM_MOVERESIZE_SIZE_KEYBOARD =      9,
-               _NET_WM_MOVERESIZE_MOVE_KEYBOARD =      10,
-               _NET_WM_MOVERESIZE_CANCEL =             11
-       }
-
-       [Flags]
-       public enum XSizeHintsFlags  {
-               USPosition                      = (1 << 0),
-               USSize                          = (1 << 1),
-               PPosition                       = (1 << 2),
-               PSize                           = (1 << 3),
-               PMinSize                        = (1 << 4),
-               PMaxSize                        = (1 << 5),
-               PResizeInc                      = (1 << 6),
-               PAspect                         = (1 << 7),
-               PAllHints                       = (PPosition | PSize | PMinSize | PMaxSize | PResizeInc | PAspect),
-               PBaseSize                       = (1 << 8),
-               PWinGravity                     = (1 << 9),
-       }
-
-       [StructLayout(LayoutKind.Sequential)]
-       public struct XSizeHints {
-               public IntPtr                   flags;
-               public int                      x;
-               public int                      y;
-               public int                      width;
-               public int                      height;
-               public int                      min_width;
-               public int                      min_height;
-               public int                      max_width;
-               public int                      max_height;
-               public int                      width_inc;
-               public int                      height_inc;
-               public int                      min_aspect_x;
-               public int                      min_aspect_y;
-               public int                      max_aspect_x;
-               public int                      max_aspect_y;
-               public int                      base_width;
-               public int                      base_height;
-               public int                      win_gravity;
-       }
-
-       [Flags]
-       public enum XWMHintsFlags {
-               InputHint                       = (1 << 0),
-               StateHint                       = (1 << 1),
-               IconPixmapHint                  = (1 << 2),
-               IconWindowHint                  = (1 << 3),
-               IconPositionHint                = (1 << 4),
-               IconMaskHint                    = (1 << 5),
-               WindowGroupHint                 = (1 << 6),
-               AllHints                        = (InputHint | StateHint | IconPixmapHint | IconWindowHint | IconPositionHint | IconMaskHint | WindowGroupHint)
-       }
-
-       public enum XInitialState {
-               DontCareState                   = 0,
-               NormalState                     = 1,
-               ZoomState                       = 2,
-               IconicState                     = 3,
-               InactiveState                   = 4
-       }
-
-       [StructLayout(LayoutKind.Sequential)]
-       public struct XWMHints {
-               public IntPtr                   flags;
-               public bool                     input;
-               public XInitialState            initial_state;
-               public IntPtr                   icon_pixmap;
-               public IntPtr                   icon_window;
-               public int                      icon_x;
-               public int                      icon_y;
-               public IntPtr                   icon_mask;
-               public IntPtr                   window_group;
-       }
-
-       [StructLayout(LayoutKind.Sequential)]
-       public struct XIconSize {
-               public int                      min_width;
-               public int                      min_height;
-               public int                      max_width;
-               public int                      max_height;
-               public int                      width_inc;
-               public int                      height_inc;
-       }
-
-       public struct CaretStruct {
-               public Timer    Timer;                          // Blink interval
-               public IntPtr   Hwnd;                           // Window owning the caret
-               public IntPtr   Window;                         // Actual X11 handle of the window
-               public int      X;                              // X position of the caret
-               public int      Y;                              // Y position of the caret
-               public int      Width;                          // Width of the caret; if no image used
-               public int      Height;                         // Height of the caret, if no image used
-               public bool     Visible;                        // Is caret visible?
-               public bool     On;                             // Caret blink display state: On/Off
-               public IntPtr   gc;                             // Graphics context
-               public bool     Paused;                         // Don't update right now
-       }
-
-       public struct HoverStruct {
-               public Timer    Timer;                          // for hovering
-               public IntPtr   Window;                         // Last window we entered; used to generate WM_MOUSEHOVER (handle is X11 handle)
-               public int      X;                              // Last MouseMove X coordinate; used to generate WM_MOUSEHOVER
-               public int      Y;                              // Last MouseMove Y coordinate; used to generate WM_MOUSEHOVER
-               public Size     Size;                           // Size of the rectangle the mouse has to stay in to generate hover
-               public int      Interval;                       // in milliseconds, how long to hold before hover is generated
-               public IntPtr   Atom;                           // X Atom
-       }
-
-       /*public struct ClickStruct {
-               public IntPtr   Hwnd;                           // 
-               public Msg      Message;                        // 
-               public IntPtr   wParam;                         // 
-               public IntPtr   lParam;                         // 
-               public long     Time;                           // Last time we received a mouse click
-               public bool     Pending;                        // True if we haven't sent the last mouse click
-       }*/
-
-       public struct GrabStruct {
-               public bool             Confined;               // Is the current grab (if any) confined to grab_area?
-               public IntPtr           Hwnd;                   // The window that is grabbed
-               public Rectangle        Area;                   // The area the current grab is confined to
-       }
-
-       public delegate int  XErrorHandler(IntPtr DisplayHandle, ref XErrorEvent error_event);
-
-       public enum XRequest : byte {
-               X_CreateWindow                  = 1,
-               X_ChangeWindowAttributes        = 2,
-               X_GetWindowAttributes           = 3,
-               X_DestroyWindow                 = 4,
-               X_DestroySubwindows             = 5,
-               X_ChangeSaveSet                 = 6,
-               X_ReparentWindow                = 7,
-               X_MapWindow                     = 8,
-               X_MapSubwindows                 = 9,
-               X_UnmapWindow                   = 10,
-               X_UnmapSubwindows               = 11,
-               X_ConfigureWindow               = 12,
-               X_CirculateWindow               = 13,
-               X_GetGeometry                   = 14,
-               X_QueryTree                     = 15,
-               X_InternAtom                    = 16,
-               X_GetAtomName                   = 17,
-               X_ChangeProperty                = 18,
-               X_DeleteProperty                = 19,
-               X_GetProperty                   = 20,
-               X_ListProperties                = 21,
-               X_SetSelectionOwner             = 22,
-               X_GetSelectionOwner             = 23,
-               X_ConvertSelection              = 24,
-               X_SendEvent                     = 25,
-               X_GrabPointer                   = 26,
-               X_UngrabPointer                 = 27,
-               X_GrabButton                    = 28,
-               X_UngrabButton                  = 29,
-               X_ChangeActivePointerGrab       = 30,
-               X_GrabKeyboard                  = 31,
-               X_UngrabKeyboard                = 32,
-               X_GrabKey                       = 33,
-               X_UngrabKey                     = 34,
-               X_AllowEvents                   = 35,
-               X_GrabServer                    = 36,
-               X_UngrabServer                  = 37,
-               X_QueryPointer                  = 38,
-               X_GetMotionEvents               = 39,
-               X_TranslateCoords               = 40,
-               X_WarpPointer                   = 41,
-               X_SetInputFocus                 = 42,
-               X_GetInputFocus                 = 43,
-               X_QueryKeymap                   = 44,
-               X_OpenFont                      = 45,
-               X_CloseFont                     = 46,
-               X_QueryFont                     = 47,
-               X_QueryTextExtents              = 48,
-               X_ListFonts                     = 49,
-               X_ListFontsWithInfo             = 50,
-               X_SetFontPath                   = 51,
-               X_GetFontPath                   = 52,
-               X_CreatePixmap                  = 53,
-               X_FreePixmap                    = 54,
-               X_CreateGC                      = 55,
-               X_ChangeGC                      = 56,
-               X_CopyGC                        = 57,
-               X_SetDashes                     = 58,
-               X_SetClipRectangles             = 59,
-               X_FreeGC                        = 60,
-               X_ClearArea                     = 61,
-               X_CopyArea                      = 62,
-               X_CopyPlane                     = 63,
-               X_PolyPoint                     = 64,
-               X_PolyLine                      = 65,
-               X_PolySegment                   = 66,
-               X_PolyRectangle                 = 67,
-               X_PolyArc                       = 68,
-               X_FillPoly                      = 69,
-               X_PolyFillRectangle             = 70,
-               X_PolyFillArc                   = 71,
-               X_PutImage                      = 72,
-               X_GetImage                      = 73,
-               X_PolyText8                     = 74,
-               X_PolyText16                    = 75,
-               X_ImageText8                    = 76,
-               X_ImageText16                   = 77,
-               X_CreateColormap                = 78,
-               X_FreeColormap                  = 79,
-               X_CopyColormapAndFree           = 80,
-               X_InstallColormap               = 81,
-               X_UninstallColormap             = 82,
-               X_ListInstalledColormaps        = 83,
-               X_AllocColor                    = 84,
-               X_AllocNamedColor               = 85,
-               X_AllocColorCells               = 86,
-               X_AllocColorPlanes              = 87,
-               X_FreeColors                    = 88,
-               X_StoreColors                   = 89,
-               X_StoreNamedColor               = 90,
-               X_QueryColors                   = 91,
-               X_LookupColor                   = 92,
-               X_CreateCursor                  = 93,
-               X_CreateGlyphCursor             = 94,
-               X_FreeCursor                    = 95,
-               X_RecolorCursor                 = 96,
-               X_QueryBestSize                 = 97,
-               X_QueryExtension                = 98,
-               X_ListExtensions                = 99,
-               X_ChangeKeyboardMapping         = 100,
-               X_GetKeyboardMapping            = 101,
-               X_ChangeKeyboardControl         = 102,
-               X_GetKeyboardControl            = 103,
-               X_Bell                          = 104,
-               X_ChangePointerControl          = 105,
-               X_GetPointerControl             = 106,
-               X_SetScreenSaver                = 107,
-               X_GetScreenSaver                = 108,
-               X_ChangeHosts                   = 109,
-               X_ListHosts                     = 110,
-               X_SetAccessControl              = 111,
-               X_SetCloseDownMode              = 112,
-               X_KillClient                    = 113,
-               X_RotateProperties              = 114,
-               X_ForceScreenSaver              = 115,
-               X_SetPointerMapping             = 116,
-               X_GetPointerMapping             = 117,
-               X_SetModifierMapping            = 118,
-               X_GetModifierMapping            = 119,
-               X_NoOperation                   = 127
-       }
-
-       [Flags]
-       public enum XIMProperties {
-               XIMPreeditArea          = 0x0001,
-               XIMPreeditCallbacks     = 0x0002,
-               XIMPreeditPosition      = 0x0004,
-               XIMPreeditNothing       = 0x0008,
-               XIMPreeditNone          = 0x0010,
-               XIMStatusArea           = 0x0100,
-               XIMStatusCallbacks      = 0x0200,
-               XIMStatusNothing        = 0x0400,
-               XIMStatusNone           = 0x0800,
-       }
-
-       [Flags]
-       public enum WindowType {
-               Client                  = 1,
-               Whole                   = 2,
-               Both                    = 3
-       }
-
-       public enum XEmbedMessage {
-               EmbeddedNotify = 0,
-               WindowActivate = 1,
-               WindowDeactivate = 2,
-               RequestFocus = 3,
-               FocusIn = 4,
-               FocusOut = 5,
-               FocusNext = 6,
-               FocusPrev = 7,
-               /* 8-9 were used for XEMBED_GRAB_KEY/XEMBED_UNGRAB_KEY */
-               ModalityOn = 10,
-               ModalityOff = 11,
-               RegisterAccelerator = 12,
-               UnregisterAccelerator = 13,
-               ActivateAccelerator = 14
-       }
-
-       [StructLayout (LayoutKind.Sequential)]
-       public struct XcursorImage
-       {
-               private int version;
-               public int size;       /* nominal size for matching */
-               public int width;      /* actual width */
-               public int height;     /* actual height */
-               public int xhot;       /* hot spot x (must be inside image) */
-               public int yhot;       /* hot spot y (must be inside image) */
-               public int delay;       /* hot spot y (must be inside image) */
-               public IntPtr pixels;    /* pointer to pixels */
-
-               public override string ToString ()
-               {
-                       return string.Format ("XCursorImage (version: {0}, size: {1}, width: {2}, height: {3}, xhot: {4}, yhot: {5}, delay: {6}, pixels: {7}", 
-                               version, size, width, height, xhot, yhot, delay, pixels);
-               }
-       } ;
-
-       [StructLayout (LayoutKind.Sequential)]
-       public struct XcursorImages
-       {
-               public int nimage;     /* number of images */
-               public IntPtr images;   /* array of XcursorImage pointers */
-       }
-
-       [StructLayout (LayoutKind.Sequential)]
-       public struct XIMStyles
-       {
-               public ushort count_styles;
-               public IntPtr supported_styles;
-       }
-
-       [StructLayout (LayoutKind.Sequential)]
-       
-       public class XPoint
-       {
-               public short X;
-               public short Y;
-       }
-
-       [StructLayout (LayoutKind.Sequential)]
-       
-       public class XIMCallback
-       {
-               public IntPtr client_data;
-               public XIMProc callback;                
-               GCHandle gch;
-
-               public XIMCallback (IntPtr clientData, XIMProc proc)
-               {
-                       this.client_data = clientData;
-                       this.gch = GCHandle.Alloc (proc);
-                       this.callback = proc;
-               }
-
-               ~XIMCallback ()
-               {
-                       gch.Free ();
-               }
-       }
-       
-       public enum XIMFeedback
-       {
-               Reverse = 1,
-               Underline = 2,
-               Highlight = 4,
-               Primary = 32,
-               Secondary = 64,
-               Tertiary = 128,
-       }
-
-       public struct XIMFeedbackStruct
-       {
-               public byte FeedbackMask; // one or more of XIMFeedback enum
-       }
-       
-       public struct XIMText
-       {
-               public ushort Length;
-               public IntPtr Feedback; // to XIMFeedbackStruct
-               public bool EncodingIsWChar;
-               public IntPtr String; // it could be either char* or wchar_t*
-       }
-
-       public struct XIMPreeditDrawCallbackStruct
-       {
-               public int Caret;
-               public int ChangeFirst;
-               public int ChangeLength;
-               public IntPtr Text; // to XIMText
-       }
-
-       public enum XIMCaretDirection
-       {
-               XIMForwardChar,
-               XIMBackwardChar,
-               XIMForwardWord,
-               XIMBackwardWord,
-               XIMCaretUp,
-               XIMCaretDown,
-               XIMNextLine,
-               XIMPreviousLine,
-               XIMLineStart,
-               XIMLineEnd,
-               XIMAbsolutePosition,
-               XIMDontChange
-       }
-
-       public enum XIMCaretStyle
-       {
-               IsInvisible,
-               IsPrimary,
-               IsSecondary
-       }
-
-       public struct XIMPreeditCaretCallbackStruct
-       {
-               public int Position;
-               public XIMCaretDirection Direction;
-               public XIMCaretStyle Style;
-       }
-
-       // only PreeditStartCallback requires return value though.
-       public delegate int XIMProc (IntPtr xim, IntPtr clientData, IntPtr callData);
-
-       public static class XNames
-       {
-               public const string XNVaNestedList = "XNVaNestedList";
-               public const string XNQueryInputStyle = "queryInputStyle";
-               public const string XNClientWindow = "clientWindow";
-               public const string XNInputStyle = "inputStyle";
-               public const string XNFocusWindow = "focusWindow";
-
-               // XIMPreeditCallbacks delegate names.
-               public const string XNPreeditStartCallback = "preeditStartCallback";
-               public const string XNPreeditDoneCallback = "preeditDoneCallback";
-               public const string XNPreeditDrawCallback = "preeditDrawCallback";
-               public const string XNPreeditCaretCallback = "preeditCaretCallback";
-               public const string XNPreeditStateNotifyCallback = "preeditStateNotifyCallback";
-               public const string XNPreeditAttributes = "preeditAttributes";
-               // XIMStatusCallbacks delegate names.
-               public const string XNStatusStartCallback = "statusStartCallback";
-               public const string XNStatusDoneCallback = "statusDoneCallback";
-               public const string XNStatusDrawCallback = "statusDrawCallback";
-               public const string XNStatusAttributes = "statusAttributes";
-
-               public const string XNArea = "area";
-               public const string XNAreaNeeded = "areaNeeded";
-               public const string XNSpotLocation = "spotLocation";
-               public const string XNFontSet = "fontSet";
-       }
-
-       [StructLayout (LayoutKind.Sequential)]
-       public struct XineramaScreenInfo
-       {
-               public int screen_number;
-               public short x_org;
-               public short y_org;
-               public short width;
-               public short height;
-       }
-}
diff --git a/src/backends/xlib/XKeySym.cs b/src/backends/xlib/XKeySym.cs
deleted file mode 100644 (file)
index f874f4d..0000000
+++ /dev/null
@@ -1,2109 +0,0 @@
-/* autogenerated */
-using System;
-
-namespace XLib
-{
-       [Flags]
-       public enum KeySym
-       {
-               XK_VoidSymbol                                   = 0xffffff,
-               XK_BackSpace                                    = 0xff08,
-               XK_Tab                                                  = 0xff09,
-               XK_Linefeed                                             = 0xff0a,
-               XK_Clear                                                = 0xff0b,
-               XK_Return                                               = 0xff0d,
-               XK_Pause                                                = 0xff13,
-               XK_Scroll_Lock                                  = 0xff14,
-               XK_Sys_Req                                              = 0xff15,
-               XK_Escape                                               = 0xff1b,
-               XK_Delete                                               = 0xffff,
-               XK_Multi_key                                    = 0xff20,
-               XK_Codeinput                                    = 0xff37,
-               XK_SingleCandidate                              = 0xff3c,
-               XK_MultipleCandidate                    = 0xff3d,
-               XK_PreviousCandidate                    = 0xff3e,
-               XK_Kanji                                                = 0xff21,
-               XK_Muhenkan                                             = 0xff22,
-               XK_Henkan_Mode                                  = 0xff23,
-               XK_Henkan                                               = 0xff23,
-               XK_Romaji                                               = 0xff24,
-               XK_Hiragana                                             = 0xff25,
-               XK_Katakana                                             = 0xff26,
-               XK_Hiragana_Katakana                    = 0xff27,
-               XK_Zenkaku                                              = 0xff28,
-               XK_Hankaku                                              = 0xff29,
-               XK_Zenkaku_Hankaku                              = 0xff2a,
-               XK_Touroku                                              = 0xff2b,
-               XK_Massyo                                               = 0xff2c,
-               XK_Kana_Lock                                    = 0xff2d,
-               XK_Kana_Shift                                   = 0xff2e,
-               XK_Eisu_Shift                                   = 0xff2f,
-               XK_Eisu_toggle                                  = 0xff30,
-               XK_Kanji_Bangou                                 = 0xff37,
-               XK_Zen_Koho                                             = 0xff3d,
-               XK_Mae_Koho                                             = 0xff3e,
-               XK_Home                                                 = 0xff50,
-               XK_Left                                                 = 0xff51,
-               XK_Up                                                   = 0xff52,
-               XK_Right                                                = 0xff53,
-               XK_Down                                                 = 0xff54,
-               XK_Prior                                                = 0xff55,
-               XK_Page_Up                                              = 0xff55,
-               XK_Next                                                 = 0xff56,
-               XK_Page_Down                                    = 0xff56,
-               XK_End                                                  = 0xff57,
-               XK_Begin                                                = 0xff58,
-               XK_Select                                               = 0xff60,
-               XK_Print                                                = 0xff61,
-               XK_Execute                                              = 0xff62,
-               XK_Insert                                               = 0xff63,
-               XK_Undo                                                 = 0xff65,
-               XK_Redo                                                 = 0xff66,
-               XK_Menu                                                 = 0xff67,
-               XK_Find                                                 = 0xff68,
-               XK_Cancel                                               = 0xff69,
-               XK_Help                                                 = 0xff6a,
-               XK_Break                                                = 0xff6b,
-               XK_Mode_switch                                  = 0xff7e,
-               XK_script_switch                                = 0xff7e,
-               XK_Num_Lock                                             = 0xff7f,
-               XK_KP_Space                                             = 0xff80,
-               XK_KP_Tab                                               = 0xff89,
-               XK_KP_Enter                                             = 0xff8d,
-               XK_KP_F1                                                = 0xff91,
-               XK_KP_F2                                                = 0xff92,
-               XK_KP_F3                                                = 0xff93,
-               XK_KP_F4                                                = 0xff94,
-               XK_KP_Home                                              = 0xff95,
-               XK_KP_Left                                              = 0xff96,
-               XK_KP_Up                                                = 0xff97,
-               XK_KP_Right                                             = 0xff98,
-               XK_KP_Down                                              = 0xff99,
-               XK_KP_Prior                                             = 0xff9a,
-               XK_KP_Page_Up                                   = 0xff9a,
-               XK_KP_Next                                              = 0xff9b,
-               XK_KP_Page_Down                                 = 0xff9b,
-               XK_KP_End                                               = 0xff9c,
-               XK_KP_Begin                                             = 0xff9d,
-               XK_KP_Insert                                    = 0xff9e,
-               XK_KP_Delete                                    = 0xff9f,
-               XK_KP_Equal                                             = 0xffbd,
-               XK_KP_Multiply                                  = 0xffaa,
-               XK_KP_Add                                               = 0xffab,
-               XK_KP_Separator                                 = 0xffac,
-               XK_KP_Subtract                                  = 0xffad,
-               XK_KP_Decimal                                   = 0xffae,
-               XK_KP_Divide                                    = 0xffaf,
-               XK_KP_0                                                 = 0xffb0,
-               XK_KP_1                                                 = 0xffb1,
-               XK_KP_2                                                 = 0xffb2,
-               XK_KP_3                                                 = 0xffb3,
-               XK_KP_4                                                 = 0xffb4,
-               XK_KP_5                                                 = 0xffb5,
-               XK_KP_6                                                 = 0xffb6,
-               XK_KP_7                                                 = 0xffb7,
-               XK_KP_8                                                 = 0xffb8,
-               XK_KP_9                                                 = 0xffb9,
-               XK_F1                                                   = 0xffbe,
-               XK_F2                                                   = 0xffbf,
-               XK_F3                                                   = 0xffc0,
-               XK_F4                                                   = 0xffc1,
-               XK_F5                                                   = 0xffc2,
-               XK_F6                                                   = 0xffc3,
-               XK_F7                                                   = 0xffc4,
-               XK_F8                                                   = 0xffc5,
-               XK_F9                                                   = 0xffc6,
-               XK_F10                                                  = 0xffc7,
-               XK_F11                                                  = 0xffc8,
-               XK_L1                                                   = 0xffc8,
-               XK_F12                                                  = 0xffc9,
-               XK_L2                                                   = 0xffc9,
-               XK_F13                                                  = 0xffca,
-               XK_L3                                                   = 0xffca,
-               XK_F14                                                  = 0xffcb,
-               XK_L4                                                   = 0xffcb,
-               XK_F15                                                  = 0xffcc,
-               XK_L5                                                   = 0xffcc,
-               XK_F16                                                  = 0xffcd,
-               XK_L6                                                   = 0xffcd,
-               XK_F17                                                  = 0xffce,
-               XK_L7                                                   = 0xffce,
-               XK_F18                                                  = 0xffcf,
-               XK_L8                                                   = 0xffcf,
-               XK_F19                                                  = 0xffd0,
-               XK_L9                                                   = 0xffd0,
-               XK_F20                                                  = 0xffd1,
-               XK_L10                                                  = 0xffd1,
-               XK_F21                                                  = 0xffd2,
-               XK_R1                                                   = 0xffd2,
-               XK_F22                                                  = 0xffd3,
-               XK_R2                                                   = 0xffd3,
-               XK_F23                                                  = 0xffd4,
-               XK_R3                                                   = 0xffd4,
-               XK_F24                                                  = 0xffd5,
-               XK_R4                                                   = 0xffd5,
-               XK_F25                                                  = 0xffd6,
-               XK_R5                                                   = 0xffd6,
-               XK_F26                                                  = 0xffd7,
-               XK_R6                                                   = 0xffd7,
-               XK_F27                                                  = 0xffd8,
-               XK_R7                                                   = 0xffd8,
-               XK_F28                                                  = 0xffd9,
-               XK_R8                                                   = 0xffd9,
-               XK_F29                                                  = 0xffda,
-               XK_R9                                                   = 0xffda,
-               XK_F30                                                  = 0xffdb,
-               XK_R10                                                  = 0xffdb,
-               XK_F31                                                  = 0xffdc,
-               XK_R11                                                  = 0xffdc,
-               XK_F32                                                  = 0xffdd,
-               XK_R12                                                  = 0xffdd,
-               XK_F33                                                  = 0xffde,
-               XK_R13                                                  = 0xffde,
-               XK_F34                                                  = 0xffdf,
-               XK_R14                                                  = 0xffdf,
-               XK_F35                                                  = 0xffe0,
-               XK_R15                                                  = 0xffe0,
-               XK_Shift_L                                              = 0xffe1,
-               XK_Shift_R                                              = 0xffe2,
-               XK_Control_L                                    = 0xffe3,
-               XK_Control_R                                    = 0xffe4,
-               XK_Caps_Lock                                    = 0xffe5,
-               XK_Shift_Lock                                   = 0xffe6,
-               XK_Meta_L                                               = 0xffe7,
-               XK_Meta_R                                               = 0xffe8,
-               XK_Alt_L                                                = 0xffe9,
-               XK_Alt_R                                                = 0xffea,
-               XK_Super_L                                              = 0xffeb,
-               XK_Super_R                                              = 0xffec,
-               XK_Hyper_L                                              = 0xffed,
-               XK_Hyper_R                                              = 0xffee,
-               XK_ISO_Lock                                             = 0xfe01,
-               XK_ISO_Level2_Latch                             = 0xfe02,
-               XK_ISO_Level3_Shift                             = 0xfe03,
-               XK_ISO_Level3_Latch                             = 0xfe04,
-               XK_ISO_Level3_Lock                              = 0xfe05,
-               XK_ISO_Level5_Shift                             = 0xfe11,
-               XK_ISO_Level5_Latch                             = 0xfe12,
-               XK_ISO_Level5_Lock                              = 0xfe13,
-               XK_ISO_Group_Shift                              = 0xff7e,
-               XK_ISO_Group_Latch                              = 0xfe06,
-               XK_ISO_Group_Lock                               = 0xfe07,
-               XK_ISO_Next_Group                               = 0xfe08,
-               XK_ISO_Next_Group_Lock                  = 0xfe09,
-               XK_ISO_Prev_Group                               = 0xfe0a,
-               XK_ISO_Prev_Group_Lock                  = 0xfe0b,
-               XK_ISO_First_Group                              = 0xfe0c,
-               XK_ISO_First_Group_Lock                 = 0xfe0d,
-               XK_ISO_Last_Group                               = 0xfe0e,
-               XK_ISO_Last_Group_Lock                  = 0xfe0f,
-               XK_ISO_Left_Tab                                 = 0xfe20,
-               XK_ISO_Move_Line_Up                             = 0xfe21,
-               XK_ISO_Move_Line_Down                   = 0xfe22,
-               XK_ISO_Partial_Line_Up                  = 0xfe23,
-               XK_ISO_Partial_Line_Down                = 0xfe24,
-               XK_ISO_Partial_Space_Left               = 0xfe25,
-               XK_ISO_Partial_Space_Right              = 0xfe26,
-               XK_ISO_Set_Margin_Left                  = 0xfe27,
-               XK_ISO_Set_Margin_Right                 = 0xfe28,
-               XK_ISO_Release_Margin_Left              = 0xfe29,
-               XK_ISO_Release_Margin_Right             = 0xfe2a,
-               XK_ISO_Release_Both_Margins             = 0xfe2b,
-               XK_ISO_Fast_Cursor_Left                 = 0xfe2c,
-               XK_ISO_Fast_Cursor_Right                = 0xfe2d,
-               XK_ISO_Fast_Cursor_Up                   = 0xfe2e,
-               XK_ISO_Fast_Cursor_Down                 = 0xfe2f,
-               XK_ISO_Continuous_Underline             = 0xfe30,
-               XK_ISO_Discontinuous_Underline  = 0xfe31,
-               XK_ISO_Emphasize                                = 0xfe32,
-               XK_ISO_Center_Object                    = 0xfe33,
-               XK_ISO_Enter                                    = 0xfe34,
-               XK_dead_grave                                   = 0xfe50,
-               XK_dead_acute                                   = 0xfe51,
-               XK_dead_circumflex                              = 0xfe52,
-               XK_dead_tilde                                   = 0xfe53,
-               XK_dead_perispomeni                             = 0xfe53,
-               XK_dead_macron                                  = 0xfe54,
-               XK_dead_breve                                   = 0xfe55,
-               XK_dead_abovedot                                = 0xfe56,
-               XK_dead_diaeresis                               = 0xfe57,
-               XK_dead_abovering                               = 0xfe58,
-               XK_dead_doubleacute                             = 0xfe59,
-               XK_dead_caron                                   = 0xfe5a,
-               XK_dead_cedilla                                 = 0xfe5b,
-               XK_dead_ogonek                                  = 0xfe5c,
-               XK_dead_iota                                    = 0xfe5d,
-               XK_dead_voiced_sound                    = 0xfe5e,
-               XK_dead_semivoiced_sound                = 0xfe5f,
-               XK_dead_belowdot                                = 0xfe60,
-               XK_dead_hook                                    = 0xfe61,
-               XK_dead_horn                                    = 0xfe62,
-               XK_dead_stroke                                  = 0xfe63,
-               XK_dead_abovecomma                              = 0xfe64,
-               XK_dead_psili                                   = 0xfe64,
-               XK_dead_abovereversedcomma              = 0xfe65,
-               XK_dead_dasia                                   = 0xfe65,
-               XK_dead_doublegrave                             = 0xfe66,
-               XK_dead_belowring                               = 0xfe67,
-               XK_dead_belowmacron                             = 0xfe68,
-               XK_dead_belowcircumflex                 = 0xfe69,
-               XK_dead_belowtilde                              = 0xfe6a,
-               XK_dead_belowbreve                              = 0xfe6b,
-               XK_dead_belowdiaeresis                  = 0xfe6c,
-               XK_dead_invertedbreve                   = 0xfe6d,
-               XK_dead_belowcomma                              = 0xfe6e,
-               XK_dead_currency                                = 0xfe6f,
-               XK_dead_lowline                                 = 0xfe90,
-               XK_dead_aboveverticalline               = 0xfe91,
-               XK_dead_belowverticalline               = 0xfe92,
-               XK_dead_longsolidusoverlay              = 0xfe93,
-               XK_dead_a                                               = 0xfe80,
-               XK_dead_A                                               = 0xfe81,
-               XK_dead_e                                               = 0xfe82,
-               XK_dead_E                                               = 0xfe83,
-               XK_dead_i                                               = 0xfe84,
-               XK_dead_I                                               = 0xfe85,
-               XK_dead_o                                               = 0xfe86,
-               XK_dead_O                                               = 0xfe87,
-               XK_dead_u                                               = 0xfe88,
-               XK_dead_U                                               = 0xfe89,
-               XK_dead_small_schwa                             = 0xfe8a,
-               XK_dead_capital_schwa                   = 0xfe8b,
-               XK_dead_greek                                   = 0xfe8c,
-               XK_First_Virtual_Screen                 = 0xfed0,
-               XK_Prev_Virtual_Screen                  = 0xfed1,
-               XK_Next_Virtual_Screen                  = 0xfed2,
-               XK_Last_Virtual_Screen                  = 0xfed4,
-               XK_Terminate_Server                             = 0xfed5,
-               XK_AccessX_Enable                               = 0xfe70,
-               XK_AccessX_Feedback_Enable              = 0xfe71,
-               XK_RepeatKeys_Enable                    = 0xfe72,
-               XK_SlowKeys_Enable                              = 0xfe73,
-               XK_BounceKeys_Enable                    = 0xfe74,
-               XK_StickyKeys_Enable                    = 0xfe75,
-               XK_MouseKeys_Enable                             = 0xfe76,
-               XK_MouseKeys_Accel_Enable               = 0xfe77,
-               XK_Overlay1_Enable                              = 0xfe78,
-               XK_Overlay2_Enable                              = 0xfe79,
-               XK_AudibleBell_Enable                   = 0xfe7a,
-               XK_Pointer_Left                                 = 0xfee0,
-               XK_Pointer_Right                                = 0xfee1,
-               XK_Pointer_Up                                   = 0xfee2,
-               XK_Pointer_Down                                 = 0xfee3,
-               XK_Pointer_UpLeft                               = 0xfee4,
-               XK_Pointer_UpRight                              = 0xfee5,
-               XK_Pointer_DownLeft                             = 0xfee6,
-               XK_Pointer_DownRight                    = 0xfee7,
-               XK_Pointer_Button_Dflt                  = 0xfee8,
-               XK_Pointer_Button1                              = 0xfee9,
-               XK_Pointer_Button2                              = 0xfeea,
-               XK_Pointer_Button3                              = 0xfeeb,
-               XK_Pointer_Button4                              = 0xfeec,
-               XK_Pointer_Button5                              = 0xfeed,
-               XK_Pointer_DblClick_Dflt                = 0xfeee,
-               XK_Pointer_DblClick1                    = 0xfeef,
-               XK_Pointer_DblClick2                    = 0xfef0,
-               XK_Pointer_DblClick3                    = 0xfef1,
-               XK_Pointer_DblClick4                    = 0xfef2,
-               XK_Pointer_DblClick5                    = 0xfef3,
-               XK_Pointer_Drag_Dflt                    = 0xfef4,
-               XK_Pointer_Drag1                                = 0xfef5,
-               XK_Pointer_Drag2                                = 0xfef6,
-               XK_Pointer_Drag3                                = 0xfef7,
-               XK_Pointer_Drag4                                = 0xfef8,
-               XK_Pointer_Drag5                                = 0xfefd,
-               XK_Pointer_EnableKeys                   = 0xfef9,
-               XK_Pointer_Accelerate                   = 0xfefa,
-               XK_Pointer_DfltBtnNext                  = 0xfefb,
-               XK_Pointer_DfltBtnPrev                  = 0xfefc,
-               XK_ch                                                   = 0xfea0,
-               XK_Ch                                                   = 0xfea1,
-               XK_CH                                                   = 0xfea2,
-               XK_c_h                                                  = 0xfea3,
-               XK_C_h                                                  = 0xfea4,
-               XK_C_H                                                  = 0xfea5,
-               XK_3270_Duplicate                               = 0xfd01,
-               XK_3270_FieldMark                               = 0xfd02,
-               XK_3270_Right2                                  = 0xfd03,
-               XK_3270_Left2                                   = 0xfd04,
-               XK_3270_BackTab                                 = 0xfd05,
-               XK_3270_EraseEOF                                = 0xfd06,
-               XK_3270_EraseInput                              = 0xfd07,
-               XK_3270_Reset                                   = 0xfd08,
-               XK_3270_Quit                                    = 0xfd09,
-               XK_3270_PA1                                             = 0xfd0a,
-               XK_3270_PA2                                             = 0xfd0b,
-               XK_3270_PA3                                             = 0xfd0c,
-               XK_3270_Test                                    = 0xfd0d,
-               XK_3270_Attn                                    = 0xfd0e,
-               XK_3270_CursorBlink                             = 0xfd0f,
-               XK_3270_AltCursor                               = 0xfd10,
-               XK_3270_KeyClick                                = 0xfd11,
-               XK_3270_Jump                                    = 0xfd12,
-               XK_3270_Ident                                   = 0xfd13,
-               XK_3270_Rule                                    = 0xfd14,
-               XK_3270_Copy                                    = 0xfd15,
-               XK_3270_Play                                    = 0xfd16,
-               XK_3270_Setup                                   = 0xfd17,
-               XK_3270_Record                                  = 0xfd18,
-               XK_3270_ChangeScreen                    = 0xfd19,
-               XK_3270_DeleteWord                              = 0xfd1a,
-               XK_3270_ExSelect                                = 0xfd1b,
-               XK_3270_CursorSelect                    = 0xfd1c,
-               XK_3270_PrintScreen                             = 0xfd1d,
-               XK_3270_Enter                                   = 0xfd1e,
-               XK_space                                                = 0x0020,
-               XK_exclam                                               = 0x0021,
-               XK_quotedbl                                             = 0x0022,
-               XK_numbersign                                   = 0x0023,
-               XK_dollar                                               = 0x0024,
-               XK_percent                                              = 0x0025,
-               XK_ampersand                                    = 0x0026,
-               XK_apostrophe                                   = 0x0027,
-               XK_quoteright                                   = 0x0027,
-               XK_parenleft                                    = 0x0028,
-               XK_parenright                                   = 0x0029,
-               XK_asterisk                                             = 0x002a,
-               XK_plus                                                 = 0x002b,
-               XK_comma                                                = 0x002c,
-               XK_minus                                                = 0x002d,
-               XK_period                                               = 0x002e,
-               XK_slash                                                = 0x002f,
-               XK_0                                                    = 0x0030,
-               XK_1                                                    = 0x0031,
-               XK_2                                                    = 0x0032,
-               XK_3                                                    = 0x0033,
-               XK_4                                                    = 0x0034,
-               XK_5                                                    = 0x0035,
-               XK_6                                                    = 0x0036,
-               XK_7                                                    = 0x0037,
-               XK_8                                                    = 0x0038,
-               XK_9                                                    = 0x0039,
-               XK_colon                                                = 0x003a,
-               XK_semicolon                                    = 0x003b,
-               XK_less                                                 = 0x003c,
-               XK_equal                                                = 0x003d,
-               XK_greater                                              = 0x003e,
-               XK_question                                             = 0x003f,
-               XK_at                                                   = 0x0040,
-               XK_A                                                    = 0x0041,
-               XK_B                                                    = 0x0042,
-               XK_C                                                    = 0x0043,
-               XK_D                                                    = 0x0044,
-               XK_E                                                    = 0x0045,
-               XK_F                                                    = 0x0046,
-               XK_G                                                    = 0x0047,
-               XK_H                                                    = 0x0048,
-               XK_I                                                    = 0x0049,
-               XK_J                                                    = 0x004a,
-               XK_K                                                    = 0x004b,
-               XK_L                                                    = 0x004c,
-               XK_M                                                    = 0x004d,
-               XK_N                                                    = 0x004e,
-               XK_O                                                    = 0x004f,
-               XK_P                                                    = 0x0050,
-               XK_Q                                                    = 0x0051,
-               XK_R                                                    = 0x0052,
-               XK_S                                                    = 0x0053,
-               XK_T                                                    = 0x0054,
-               XK_U                                                    = 0x0055,
-               XK_V                                                    = 0x0056,
-               XK_W                                                    = 0x0057,
-               XK_X                                                    = 0x0058,
-               XK_Y                                                    = 0x0059,
-               XK_Z                                                    = 0x005a,
-               XK_bracketleft                                  = 0x005b,
-               XK_backslash                                    = 0x005c,
-               XK_bracketright                                 = 0x005d,
-               XK_asciicircum                                  = 0x005e,
-               XK_underscore                                   = 0x005f,
-               XK_grave                                                = 0x0060,
-               XK_quoteleft                                    = 0x0060,
-               XK_a                                                    = 0x0061,
-               XK_b                                                    = 0x0062,
-               XK_c                                                    = 0x0063,
-               XK_d                                                    = 0x0064,
-               XK_e                                                    = 0x0065,
-               XK_f                                                    = 0x0066,
-               XK_g                                                    = 0x0067,
-               XK_h                                                    = 0x0068,
-               XK_i                                                    = 0x0069,
-               XK_j                                                    = 0x006a,
-               XK_k                                                    = 0x006b,
-               XK_l                                                    = 0x006c,
-               XK_m                                                    = 0x006d,
-               XK_n                                                    = 0x006e,
-               XK_o                                                    = 0x006f,
-               XK_p                                                    = 0x0070,
-               XK_q                                                    = 0x0071,
-               XK_r                                                    = 0x0072,
-               XK_s                                                    = 0x0073,
-               XK_t                                                    = 0x0074,
-               XK_u                                                    = 0x0075,
-               XK_v                                                    = 0x0076,
-               XK_w                                                    = 0x0077,
-               XK_x                                                    = 0x0078,
-               XK_y                                                    = 0x0079,
-               XK_z                                                    = 0x007a,
-               XK_braceleft                                    = 0x007b,
-               XK_bar                                                  = 0x007c,
-               XK_braceright                                   = 0x007d,
-               XK_asciitilde                                   = 0x007e,
-               XK_nobreakspace                                 = 0x00a0,
-               XK_exclamdown                                   = 0x00a1,
-               XK_cent                                                 = 0x00a2,
-               XK_sterling                                             = 0x00a3,
-               XK_currency                                             = 0x00a4,
-               XK_yen                                                  = 0x00a5,
-               XK_brokenbar                                    = 0x00a6,
-               XK_section                                              = 0x00a7,
-               XK_diaeresis                                    = 0x00a8,
-               XK_copyright                                    = 0x00a9,
-               XK_ordfeminine                                  = 0x00aa,
-               XK_guillemotleft                                = 0x00ab,
-               XK_notsign                                              = 0x00ac,
-               XK_hyphen                                               = 0x00ad,
-               XK_registered                                   = 0x00ae,
-               XK_macron                                               = 0x00af,
-               XK_degree                                               = 0x00b0,
-               XK_plusminus                                    = 0x00b1,
-               XK_twosuperior                                  = 0x00b2,
-               XK_threesuperior                                = 0x00b3,
-               XK_acute                                                = 0x00b4,
-               XK_mu                                                   = 0x00b5,
-               XK_paragraph                                    = 0x00b6,
-               XK_periodcentered                               = 0x00b7,
-               XK_cedilla                                              = 0x00b8,
-               XK_onesuperior                                  = 0x00b9,
-               XK_masculine                                    = 0x00ba,
-               XK_guillemotright                               = 0x00bb,
-               XK_onequarter                                   = 0x00bc,
-               XK_onehalf                                              = 0x00bd,
-               XK_threequarters                                = 0x00be,
-               XK_questiondown                                 = 0x00bf,
-               XK_Agrave                                               = 0x00c0,
-               XK_Aacute                                               = 0x00c1,
-               XK_Acircumflex                                  = 0x00c2,
-               XK_Atilde                                               = 0x00c3,
-               XK_Adiaeresis                                   = 0x00c4,
-               XK_Aring                                                = 0x00c5,
-               XK_AE                                                   = 0x00c6,
-               XK_Ccedilla                                             = 0x00c7,
-               XK_Egrave                                               = 0x00c8,
-               XK_Eacute                                               = 0x00c9,
-               XK_Ecircumflex                                  = 0x00ca,
-               XK_Ediaeresis                                   = 0x00cb,
-               XK_Igrave                                               = 0x00cc,
-               XK_Iacute                                               = 0x00cd,
-               XK_Icircumflex                                  = 0x00ce,
-               XK_Idiaeresis                                   = 0x00cf,
-               XK_ETH                                                  = 0x00d0,
-               XK_Eth                                                  = 0x00d0,
-               XK_Ntilde                                               = 0x00d1,
-               XK_Ograve                                               = 0x00d2,
-               XK_Oacute                                               = 0x00d3,
-               XK_Ocircumflex                                  = 0x00d4,
-               XK_Otilde                                               = 0x00d5,
-               XK_Odiaeresis                                   = 0x00d6,
-               XK_multiply                                             = 0x00d7,
-               XK_Oslash                                               = 0x00d8,
-               XK_Ooblique                                             = 0x00d8,
-               XK_Ugrave                                               = 0x00d9,
-               XK_Uacute                                               = 0x00da,
-               XK_Ucircumflex                                  = 0x00db,
-               XK_Udiaeresis                                   = 0x00dc,
-               XK_Yacute                                               = 0x00dd,
-               XK_THORN                                                = 0x00de,
-               XK_Thorn                                                = 0x00de,
-               XK_ssharp                                               = 0x00df,
-               XK_agrave                                               = 0x00e0,
-               XK_aacute                                               = 0x00e1,
-               XK_acircumflex                                  = 0x00e2,
-               XK_atilde                                               = 0x00e3,
-               XK_adiaeresis                                   = 0x00e4,
-               XK_aring                                                = 0x00e5,
-               XK_ae                                                   = 0x00e6,
-               XK_ccedilla                                             = 0x00e7,
-               XK_egrave                                               = 0x00e8,
-               XK_eacute                                               = 0x00e9,
-               XK_ecircumflex                                  = 0x00ea,
-               XK_ediaeresis                                   = 0x00eb,
-               XK_igrave                                               = 0x00ec,
-               XK_iacute                                               = 0x00ed,
-               XK_icircumflex                                  = 0x00ee,
-               XK_idiaeresis                                   = 0x00ef,
-               XK_eth                                                  = 0x00f0,
-               XK_ntilde                                               = 0x00f1,
-               XK_ograve                                               = 0x00f2,
-               XK_oacute                                               = 0x00f3,
-               XK_ocircumflex                                  = 0x00f4,
-               XK_otilde                                               = 0x00f5,
-               XK_odiaeresis                                   = 0x00f6,
-               XK_division                                             = 0x00f7,
-               XK_oslash                                               = 0x00f8,
-               XK_ooblique                                             = 0x00f8,
-               XK_ugrave                                               = 0x00f9,
-               XK_uacute                                               = 0x00fa,
-               XK_ucircumflex                                  = 0x00fb,
-               XK_udiaeresis                                   = 0x00fc,
-               XK_yacute                                               = 0x00fd,
-               XK_thorn                                                = 0x00fe,
-               XK_ydiaeresis                                   = 0x00ff,
-               XK_Aogonek                                              = 0x01a1,
-               XK_breve                                                = 0x01a2,
-               XK_Lstroke                                              = 0x01a3,
-               XK_Lcaron                                               = 0x01a5,
-               XK_Sacute                                               = 0x01a6,
-               XK_Scaron                                               = 0x01a9,
-               XK_Scedilla                                             = 0x01aa,
-               XK_Tcaron                                               = 0x01ab,
-               XK_Zacute                                               = 0x01ac,
-               XK_Zcaron                                               = 0x01ae,
-               XK_Zabovedot                                    = 0x01af,
-               XK_aogonek                                              = 0x01b1,
-               XK_ogonek                                               = 0x01b2,
-               XK_lstroke                                              = 0x01b3,
-               XK_lcaron                                               = 0x01b5,
-               XK_sacute                                               = 0x01b6,
-               XK_caron                                                = 0x01b7,
-               XK_scaron                                               = 0x01b9,
-               XK_scedilla                                             = 0x01ba,
-               XK_tcaron                                               = 0x01bb,
-               XK_zacute                                               = 0x01bc,
-               XK_doubleacute                                  = 0x01bd,
-               XK_zcaron                                               = 0x01be,
-               XK_zabovedot                                    = 0x01bf,
-               XK_Racute                                               = 0x01c0,
-               XK_Abreve                                               = 0x01c3,
-               XK_Lacute                                               = 0x01c5,
-               XK_Cacute                                               = 0x01c6,
-               XK_Ccaron                                               = 0x01c8,
-               XK_Eogonek                                              = 0x01ca,
-               XK_Ecaron                                               = 0x01cc,
-               XK_Dcaron                                               = 0x01cf,
-               XK_Dstroke                                              = 0x01d0,
-               XK_Nacute                                               = 0x01d1,
-               XK_Ncaron                                               = 0x01d2,
-               XK_Odoubleacute                                 = 0x01d5,
-               XK_Rcaron                                               = 0x01d8,
-               XK_Uring                                                = 0x01d9,
-               XK_Udoubleacute                                 = 0x01db,
-               XK_Tcedilla                                             = 0x01de,
-               XK_racute                                               = 0x01e0,
-               XK_abreve                                               = 0x01e3,
-               XK_lacute                                               = 0x01e5,
-               XK_cacute                                               = 0x01e6,
-               XK_ccaron                                               = 0x01e8,
-               XK_eogonek                                              = 0x01ea,
-               XK_ecaron                                               = 0x01ec,
-               XK_dcaron                                               = 0x01ef,
-               XK_dstroke                                              = 0x01f0,
-               XK_nacute                                               = 0x01f1,
-               XK_ncaron                                               = 0x01f2,
-               XK_odoubleacute                                 = 0x01f5,
-               XK_rcaron                                               = 0x01f8,
-               XK_uring                                                = 0x01f9,
-               XK_udoubleacute                                 = 0x01fb,
-               XK_tcedilla                                             = 0x01fe,
-               XK_abovedot                                             = 0x01ff,
-               XK_Hstroke                                              = 0x02a1,
-               XK_Hcircumflex                                  = 0x02a6,
-               XK_Iabovedot                                    = 0x02a9,
-               XK_Gbreve                                               = 0x02ab,
-               XK_Jcircumflex                                  = 0x02ac,
-               XK_hstroke                                              = 0x02b1,
-               XK_hcircumflex                                  = 0x02b6,
-               XK_idotless                                             = 0x02b9,
-               XK_gbreve                                               = 0x02bb,
-               XK_jcircumflex                                  = 0x02bc,
-               XK_Cabovedot                                    = 0x02c5,
-               XK_Ccircumflex                                  = 0x02c6,
-               XK_Gabovedot                                    = 0x02d5,
-               XK_Gcircumflex                                  = 0x02d8,
-               XK_Ubreve                                               = 0x02dd,
-               XK_Scircumflex                                  = 0x02de,
-               XK_cabovedot                                    = 0x02e5,
-               XK_ccircumflex                                  = 0x02e6,
-               XK_gabovedot                                    = 0x02f5,
-               XK_gcircumflex                                  = 0x02f8,
-               XK_ubreve                                               = 0x02fd,
-               XK_scircumflex                                  = 0x02fe,
-               XK_kra                                                  = 0x03a2,
-               XK_kappa                                                = 0x03a2,
-               XK_Rcedilla                                             = 0x03a3,
-               XK_Itilde                                               = 0x03a5,
-               XK_Lcedilla                                             = 0x03a6,
-               XK_Emacron                                              = 0x03aa,
-               XK_Gcedilla                                             = 0x03ab,
-               XK_Tslash                                               = 0x03ac,
-               XK_rcedilla                                             = 0x03b3,
-               XK_itilde                                               = 0x03b5,
-               XK_lcedilla                                             = 0x03b6,
-               XK_emacron                                              = 0x03ba,
-               XK_gcedilla                                             = 0x03bb,
-               XK_tslash                                               = 0x03bc,
-               XK_ENG                                                  = 0x03bd,
-               XK_eng                                                  = 0x03bf,
-               XK_Amacron                                              = 0x03c0,
-               XK_Iogonek                                              = 0x03c7,
-               XK_Eabovedot                                    = 0x03cc,
-               XK_Imacron                                              = 0x03cf,
-               XK_Ncedilla                                             = 0x03d1,
-               XK_Omacron                                              = 0x03d2,
-               XK_Kcedilla                                             = 0x03d3,
-               XK_Uogonek                                              = 0x03d9,
-               XK_Utilde                                               = 0x03dd,
-               XK_Umacron                                              = 0x03de,
-               XK_amacron                                              = 0x03e0,
-               XK_iogonek                                              = 0x03e7,
-               XK_eabovedot                                    = 0x03ec,
-               XK_imacron                                              = 0x03ef,
-               XK_ncedilla                                             = 0x03f1,
-               XK_omacron                                              = 0x03f2,
-               XK_kcedilla                                             = 0x03f3,
-               XK_uogonek                                              = 0x03f9,
-               XK_utilde                                               = 0x03fd,
-               XK_umacron                                              = 0x03fe,
-               XK_Wcircumflex                                  = 0x1000174,
-               XK_wcircumflex                                  = 0x1000175,
-               XK_Ycircumflex                                  = 0x1000176,
-               XK_ycircumflex                                  = 0x1000177,
-               XK_Babovedot                                    = 0x1001e02,
-               XK_babovedot                                    = 0x1001e03,
-               XK_Dabovedot                                    = 0x1001e0a,
-               XK_dabovedot                                    = 0x1001e0b,
-               XK_Fabovedot                                    = 0x1001e1e,
-               XK_fabovedot                                    = 0x1001e1f,
-               XK_Mabovedot                                    = 0x1001e40,
-               XK_mabovedot                                    = 0x1001e41,
-               XK_Pabovedot                                    = 0x1001e56,
-               XK_pabovedot                                    = 0x1001e57,
-               XK_Sabovedot                                    = 0x1001e60,
-               XK_sabovedot                                    = 0x1001e61,
-               XK_Tabovedot                                    = 0x1001e6a,
-               XK_tabovedot                                    = 0x1001e6b,
-               XK_Wgrave                                               = 0x1001e80,
-               XK_wgrave                                               = 0x1001e81,
-               XK_Wacute                                               = 0x1001e82,
-               XK_wacute                                               = 0x1001e83,
-               XK_Wdiaeresis                                   = 0x1001e84,
-               XK_wdiaeresis                                   = 0x1001e85,
-               XK_Ygrave                                               = 0x1001ef2,
-               XK_ygrave                                               = 0x1001ef3,
-               XK_OE                                                   = 0x13bc,
-               XK_oe                                                   = 0x13bd,
-               XK_Ydiaeresis                                   = 0x13be,
-               XK_overline                                             = 0x047e,
-               XK_kana_fullstop                                = 0x04a1,
-               XK_kana_openingbracket                  = 0x04a2,
-               XK_kana_closingbracket                  = 0x04a3,
-               XK_kana_comma                                   = 0x04a4,
-               XK_kana_conjunctive                             = 0x04a5,
-               XK_kana_middledot                               = 0x04a5,
-               XK_kana_WO                                              = 0x04a6,
-               XK_kana_a                                               = 0x04a7,
-               XK_kana_i                                               = 0x04a8,
-               XK_kana_u                                               = 0x04a9,
-               XK_kana_e                                               = 0x04aa,
-               XK_kana_o                                               = 0x04ab,
-               XK_kana_ya                                              = 0x04ac,
-               XK_kana_yu                                              = 0x04ad,
-               XK_kana_yo                                              = 0x04ae,
-               XK_kana_tsu                                             = 0x04af,
-               XK_kana_tu                                              = 0x04af,
-               XK_prolongedsound                               = 0x04b0,
-               XK_kana_A                                               = 0x04b1,
-               XK_kana_I                                               = 0x04b2,
-               XK_kana_U                                               = 0x04b3,
-               XK_kana_E                                               = 0x04b4,
-               XK_kana_O                                               = 0x04b5,
-               XK_kana_KA                                              = 0x04b6,
-               XK_kana_KI                                              = 0x04b7,
-               XK_kana_KU                                              = 0x04b8,
-               XK_kana_KE                                              = 0x04b9,
-               XK_kana_KO                                              = 0x04ba,
-               XK_kana_SA                                              = 0x04bb,
-               XK_kana_SHI                                             = 0x04bc,
-               XK_kana_SU                                              = 0x04bd,
-               XK_kana_SE                                              = 0x04be,
-               XK_kana_SO                                              = 0x04bf,
-               XK_kana_TA                                              = 0x04c0,
-               XK_kana_CHI                                             = 0x04c1,
-               XK_kana_TI                                              = 0x04c1,
-               XK_kana_TSU                                             = 0x04c2,
-               XK_kana_TU                                              = 0x04c2,
-               XK_kana_TE                                              = 0x04c3,
-               XK_kana_TO                                              = 0x04c4,
-               XK_kana_NA                                              = 0x04c5,
-               XK_kana_NI                                              = 0x04c6,
-               XK_kana_NU                                              = 0x04c7,
-               XK_kana_NE                                              = 0x04c8,
-               XK_kana_NO                                              = 0x04c9,
-               XK_kana_HA                                              = 0x04ca,
-               XK_kana_HI                                              = 0x04cb,
-               XK_kana_FU                                              = 0x04cc,
-               XK_kana_HU                                              = 0x04cc,
-               XK_kana_HE                                              = 0x04cd,
-               XK_kana_HO                                              = 0x04ce,
-               XK_kana_MA                                              = 0x04cf,
-               XK_kana_MI                                              = 0x04d0,
-               XK_kana_MU                                              = 0x04d1,
-               XK_kana_ME                                              = 0x04d2,
-               XK_kana_MO                                              = 0x04d3,
-               XK_kana_YA                                              = 0x04d4,
-               XK_kana_YU                                              = 0x04d5,
-               XK_kana_YO                                              = 0x04d6,
-               XK_kana_RA                                              = 0x04d7,
-               XK_kana_RI                                              = 0x04d8,
-               XK_kana_RU                                              = 0x04d9,
-               XK_kana_RE                                              = 0x04da,
-               XK_kana_RO                                              = 0x04db,
-               XK_kana_WA                                              = 0x04dc,
-               XK_kana_N                                               = 0x04dd,
-               XK_voicedsound                                  = 0x04de,
-               XK_semivoicedsound                              = 0x04df,
-               XK_kana_switch                                  = 0xff7e,
-               XK_Farsi_0                                              = 0x10006f0,
-               XK_Farsi_1                                              = 0x10006f1,
-               XK_Farsi_2                                              = 0x10006f2,
-               XK_Farsi_3                                              = 0x10006f3,
-               XK_Farsi_4                                              = 0x10006f4,
-               XK_Farsi_5                                              = 0x10006f5,
-               XK_Farsi_6                                              = 0x10006f6,
-               XK_Farsi_7                                              = 0x10006f7,
-               XK_Farsi_8                                              = 0x10006f8,
-               XK_Farsi_9                                              = 0x10006f9,
-               XK_Arabic_percent                               = 0x100066a,
-               XK_Arabic_superscript_alef              = 0x1000670,
-               XK_Arabic_tteh                                  = 0x1000679,
-               XK_Arabic_peh                                   = 0x100067e,
-               XK_Arabic_tcheh                                 = 0x1000686,
-               XK_Arabic_ddal                                  = 0x1000688,
-               XK_Arabic_rreh                                  = 0x1000691,
-               XK_Arabic_comma                                 = 0x05ac,
-               XK_Arabic_fullstop                              = 0x10006d4,
-               XK_Arabic_0                                             = 0x1000660,
-               XK_Arabic_1                                             = 0x1000661,
-               XK_Arabic_2                                             = 0x1000662,
-               XK_Arabic_3                                             = 0x1000663,
-               XK_Arabic_4                                             = 0x1000664,
-               XK_Arabic_5                                             = 0x1000665,
-               XK_Arabic_6                                             = 0x1000666,
-               XK_Arabic_7                                             = 0x1000667,
-               XK_Arabic_8                                             = 0x1000668,
-               XK_Arabic_9                                             = 0x1000669,
-               XK_Arabic_semicolon                             = 0x05bb,
-               XK_Arabic_question_mark                 = 0x05bf,
-               XK_Arabic_hamza                                 = 0x05c1,
-               XK_Arabic_maddaonalef                   = 0x05c2,
-               XK_Arabic_hamzaonalef                   = 0x05c3,
-               XK_Arabic_hamzaonwaw                    = 0x05c4,
-               XK_Arabic_hamzaunderalef                = 0x05c5,
-               XK_Arabic_hamzaonyeh                    = 0x05c6,
-               XK_Arabic_alef                                  = 0x05c7,
-               XK_Arabic_beh                                   = 0x05c8,
-               XK_Arabic_tehmarbuta                    = 0x05c9,
-               XK_Arabic_teh                                   = 0x05ca,
-               XK_Arabic_theh                                  = 0x05cb,
-               XK_Arabic_jeem                                  = 0x05cc,
-               XK_Arabic_hah                                   = 0x05cd,
-               XK_Arabic_khah                                  = 0x05ce,
-               XK_Arabic_dal                                   = 0x05cf,
-               XK_Arabic_thal                                  = 0x05d0,
-               XK_Arabic_ra                                    = 0x05d1,
-               XK_Arabic_zain                                  = 0x05d2,
-               XK_Arabic_seen                                  = 0x05d3,
-               XK_Arabic_sheen                                 = 0x05d4,
-               XK_Arabic_sad                                   = 0x05d5,
-               XK_Arabic_dad                                   = 0x05d6,
-               XK_Arabic_tah                                   = 0x05d7,
-               XK_Arabic_zah                                   = 0x05d8,
-               XK_Arabic_ain                                   = 0x05d9,
-               XK_Arabic_ghain                                 = 0x05da,
-               XK_Arabic_tatweel                               = 0x05e0,
-               XK_Arabic_feh                                   = 0x05e1,
-               XK_Arabic_qaf                                   = 0x05e2,
-               XK_Arabic_kaf                                   = 0x05e3,
-               XK_Arabic_lam                                   = 0x05e4,
-               XK_Arabic_meem                                  = 0x05e5,
-               XK_Arabic_noon                                  = 0x05e6,
-               XK_Arabic_ha                                    = 0x05e7,
-               XK_Arabic_heh                                   = 0x05e7,
-               XK_Arabic_waw                                   = 0x05e8,
-               XK_Arabic_alefmaksura                   = 0x05e9,
-               XK_Arabic_yeh                                   = 0x05ea,
-               XK_Arabic_fathatan                              = 0x05eb,
-               XK_Arabic_dammatan                              = 0x05ec,
-               XK_Arabic_kasratan                              = 0x05ed,
-               XK_Arabic_fatha                                 = 0x05ee,
-               XK_Arabic_damma                                 = 0x05ef,
-               XK_Arabic_kasra                                 = 0x05f0,
-               XK_Arabic_shadda                                = 0x05f1,
-               XK_Arabic_sukun                                 = 0x05f2,
-               XK_Arabic_madda_above                   = 0x1000653,
-               XK_Arabic_hamza_above                   = 0x1000654,
-               XK_Arabic_hamza_below                   = 0x1000655,
-               XK_Arabic_jeh                                   = 0x1000698,
-               XK_Arabic_veh                                   = 0x10006a4,
-               XK_Arabic_keheh                                 = 0x10006a9,
-               XK_Arabic_gaf                                   = 0x10006af,
-               XK_Arabic_noon_ghunna                   = 0x10006ba,
-               XK_Arabic_heh_doachashmee               = 0x10006be,
-               XK_Farsi_yeh                                    = 0x10006cc,
-               XK_Arabic_farsi_yeh                             = 0x10006cc,
-               XK_Arabic_yeh_baree                             = 0x10006d2,
-               XK_Arabic_heh_goal                              = 0x10006c1,
-               XK_Arabic_switch                                = 0xff7e,
-               XK_Cyrillic_GHE_bar                             = 0x1000492,
-               XK_Cyrillic_ghe_bar                             = 0x1000493,
-               XK_Cyrillic_ZHE_descender               = 0x1000496,
-               XK_Cyrillic_zhe_descender               = 0x1000497,
-               XK_Cyrillic_KA_descender                = 0x100049a,
-               XK_Cyrillic_ka_descender                = 0x100049b,
-               XK_Cyrillic_KA_vertstroke               = 0x100049c,
-               XK_Cyrillic_ka_vertstroke               = 0x100049d,
-               XK_Cyrillic_EN_descender                = 0x10004a2,
-               XK_Cyrillic_en_descender                = 0x10004a3,
-               XK_Cyrillic_U_straight                  = 0x10004ae,
-               XK_Cyrillic_u_straight                  = 0x10004af,
-               XK_Cyrillic_U_straight_bar              = 0x10004b0,
-               XK_Cyrillic_u_straight_bar              = 0x10004b1,
-               XK_Cyrillic_HA_descender                = 0x10004b2,
-               XK_Cyrillic_ha_descender                = 0x10004b3,
-               XK_Cyrillic_CHE_descender               = 0x10004b6,
-               XK_Cyrillic_che_descender               = 0x10004b7,
-               XK_Cyrillic_CHE_vertstroke              = 0x10004b8,
-               XK_Cyrillic_che_vertstroke              = 0x10004b9,
-               XK_Cyrillic_SHHA                                = 0x10004ba,
-               XK_Cyrillic_shha                                = 0x10004bb,
-               XK_Cyrillic_SCHWA                               = 0x10004d8,
-               XK_Cyrillic_schwa                               = 0x10004d9,
-               XK_Cyrillic_I_macron                    = 0x10004e2,
-               XK_Cyrillic_i_macron                    = 0x10004e3,
-               XK_Cyrillic_O_bar                               = 0x10004e8,
-               XK_Cyrillic_o_bar                               = 0x10004e9,
-               XK_Cyrillic_U_macron                    = 0x10004ee,
-               XK_Cyrillic_u_macron                    = 0x10004ef,
-               XK_Serbian_dje                                  = 0x06a1,
-               XK_Macedonia_gje                                = 0x06a2,
-               XK_Cyrillic_io                                  = 0x06a3,
-               XK_Ukrainian_ie                                 = 0x06a4,
-               XK_Ukranian_je                                  = 0x06a4,
-               XK_Macedonia_dse                                = 0x06a5,
-               XK_Ukrainian_i                                  = 0x06a6,
-               XK_Ukranian_i                                   = 0x06a6,
-               XK_Ukrainian_yi                                 = 0x06a7,
-               XK_Ukranian_yi                                  = 0x06a7,
-               XK_Cyrillic_je                                  = 0x06a8,
-               XK_Serbian_je                                   = 0x06a8,
-               XK_Cyrillic_lje                                 = 0x06a9,
-               XK_Serbian_lje                                  = 0x06a9,
-               XK_Cyrillic_nje                                 = 0x06aa,
-               XK_Serbian_nje                                  = 0x06aa,
-               XK_Serbian_tshe                                 = 0x06ab,
-               XK_Macedonia_kje                                = 0x06ac,
-               XK_Ukrainian_ghe_with_upturn    = 0x06ad,
-               XK_Byelorussian_shortu                  = 0x06ae,
-               XK_Cyrillic_dzhe                                = 0x06af,
-               XK_Serbian_dze                                  = 0x06af,
-               XK_numerosign                                   = 0x06b0,
-               XK_Serbian_DJE                                  = 0x06b1,
-               XK_Macedonia_GJE                                = 0x06b2,
-               XK_Cyrillic_IO                                  = 0x06b3,
-               XK_Ukrainian_IE                                 = 0x06b4,
-               XK_Ukranian_JE                                  = 0x06b4,
-               XK_Macedonia_DSE                                = 0x06b5,
-               XK_Ukrainian_I                                  = 0x06b6,
-               XK_Ukranian_I                                   = 0x06b6,
-               XK_Ukrainian_YI                                 = 0x06b7,
-               XK_Ukranian_YI                                  = 0x06b7,
-               XK_Cyrillic_JE                                  = 0x06b8,
-               XK_Serbian_JE                                   = 0x06b8,
-               XK_Cyrillic_LJE                                 = 0x06b9,
-               XK_Serbian_LJE                                  = 0x06b9,
-               XK_Cyrillic_NJE                                 = 0x06ba,
-               XK_Serbian_NJE                                  = 0x06ba,
-               XK_Serbian_TSHE                                 = 0x06bb,
-               XK_Macedonia_KJE                                = 0x06bc,
-               XK_Ukrainian_GHE_WITH_UPTURN    = 0x06bd,
-               XK_Byelorussian_SHORTU                  = 0x06be,
-               XK_Cyrillic_DZHE                                = 0x06bf,
-               XK_Serbian_DZE                                  = 0x06bf,
-               XK_Cyrillic_yu                                  = 0x06c0,
-               XK_Cyrillic_a                                   = 0x06c1,
-               XK_Cyrillic_be                                  = 0x06c2,
-               XK_Cyrillic_tse                                 = 0x06c3,
-               XK_Cyrillic_de                                  = 0x06c4,
-               XK_Cyrillic_ie                                  = 0x06c5,
-               XK_Cyrillic_ef                                  = 0x06c6,
-               XK_Cyrillic_ghe                                 = 0x06c7,
-               XK_Cyrillic_ha                                  = 0x06c8,
-               XK_Cyrillic_i                                   = 0x06c9,
-               XK_Cyrillic_shorti                              = 0x06ca,
-               XK_Cyrillic_ka                                  = 0x06cb,
-               XK_Cyrillic_el                                  = 0x06cc,
-               XK_Cyrillic_em                                  = 0x06cd,
-               XK_Cyrillic_en                                  = 0x06ce,
-               XK_Cyrillic_o                                   = 0x06cf,
-               XK_Cyrillic_pe                                  = 0x06d0,
-               XK_Cyrillic_ya                                  = 0x06d1,
-               XK_Cyrillic_er                                  = 0x06d2,
-               XK_Cyrillic_es                                  = 0x06d3,
-               XK_Cyrillic_te                                  = 0x06d4,
-               XK_Cyrillic_u                                   = 0x06d5,
-               XK_Cyrillic_zhe                                 = 0x06d6,
-               XK_Cyrillic_ve                                  = 0x06d7,
-               XK_Cyrillic_softsign                    = 0x06d8,
-               XK_Cyrillic_yeru                                = 0x06d9,
-               XK_Cyrillic_ze                                  = 0x06da,
-               XK_Cyrillic_sha                                 = 0x06db,
-               XK_Cyrillic_e                                   = 0x06dc,
-               XK_Cyrillic_shcha                               = 0x06dd,
-               XK_Cyrillic_che                                 = 0x06de,
-               XK_Cyrillic_hardsign                    = 0x06df,
-               XK_Cyrillic_YU                                  = 0x06e0,
-               XK_Cyrillic_A                                   = 0x06e1,
-               XK_Cyrillic_BE                                  = 0x06e2,
-               XK_Cyrillic_TSE                                 = 0x06e3,
-               XK_Cyrillic_DE                                  = 0x06e4,
-               XK_Cyrillic_IE                                  = 0x06e5,
-               XK_Cyrillic_EF                                  = 0x06e6,
-               XK_Cyrillic_GHE                                 = 0x06e7,
-               XK_Cyrillic_HA                                  = 0x06e8,
-               XK_Cyrillic_I                                   = 0x06e9,
-               XK_Cyrillic_SHORTI                              = 0x06ea,
-               XK_Cyrillic_KA                                  = 0x06eb,
-               XK_Cyrillic_EL                                  = 0x06ec,
-               XK_Cyrillic_EM                                  = 0x06ed,
-               XK_Cyrillic_EN                                  = 0x06ee,
-               XK_Cyrillic_O                                   = 0x06ef,
-               XK_Cyrillic_PE                                  = 0x06f0,
-               XK_Cyrillic_YA                                  = 0x06f1,
-               XK_Cyrillic_ER                                  = 0x06f2,
-               XK_Cyrillic_ES                                  = 0x06f3,
-               XK_Cyrillic_TE                                  = 0x06f4,
-               XK_Cyrillic_U                                   = 0x06f5,
-               XK_Cyrillic_ZHE                                 = 0x06f6,
-               XK_Cyrillic_VE                                  = 0x06f7,
-               XK_Cyrillic_SOFTSIGN                    = 0x06f8,
-               XK_Cyrillic_YERU                                = 0x06f9,
-               XK_Cyrillic_ZE                                  = 0x06fa,
-               XK_Cyrillic_SHA                                 = 0x06fb,
-               XK_Cyrillic_E                                   = 0x06fc,
-               XK_Cyrillic_SHCHA                               = 0x06fd,
-               XK_Cyrillic_CHE                                 = 0x06fe,
-               XK_Cyrillic_HARDSIGN                    = 0x06ff,
-               XK_Greek_ALPHAaccent                    = 0x07a1,
-               XK_Greek_EPSILONaccent                  = 0x07a2,
-               XK_Greek_ETAaccent                              = 0x07a3,
-               XK_Greek_IOTAaccent                             = 0x07a4,
-               XK_Greek_IOTAdieresis                   = 0x07a5,
-               XK_Greek_IOTAdiaeresis                  = 0x07a5,
-               XK_Greek_OMICRONaccent                  = 0x07a7,
-               XK_Greek_UPSILONaccent                  = 0x07a8,
-               XK_Greek_UPSILONdieresis                = 0x07a9,
-               XK_Greek_OMEGAaccent                    = 0x07ab,
-               XK_Greek_accentdieresis                 = 0x07ae,
-               XK_Greek_horizbar                               = 0x07af,
-               XK_Greek_alphaaccent                    = 0x07b1,
-               XK_Greek_epsilonaccent                  = 0x07b2,
-               XK_Greek_etaaccent                              = 0x07b3,
-               XK_Greek_iotaaccent                             = 0x07b4,
-               XK_Greek_iotadieresis                   = 0x07b5,
-               XK_Greek_iotaaccentdieresis             = 0x07b6,
-               XK_Greek_omicronaccent                  = 0x07b7,
-               XK_Greek_upsilonaccent                  = 0x07b8,
-               XK_Greek_upsilondieresis                = 0x07b9,
-               XK_Greek_upsilonaccentdieresis  = 0x07ba,
-               XK_Greek_omegaaccent                    = 0x07bb,
-               XK_Greek_ALPHA                                  = 0x07c1,
-               XK_Greek_BETA                                   = 0x07c2,
-               XK_Greek_GAMMA                                  = 0x07c3,
-               XK_Greek_DELTA                                  = 0x07c4,
-               XK_Greek_EPSILON                                = 0x07c5,
-               XK_Greek_ZETA                                   = 0x07c6,
-               XK_Greek_ETA                                    = 0x07c7,
-               XK_Greek_THETA                                  = 0x07c8,
-               XK_Greek_IOTA                                   = 0x07c9,
-               XK_Greek_KAPPA                                  = 0x07ca,
-               XK_Greek_LAMDA                                  = 0x07cb,
-               XK_Greek_LAMBDA                                 = 0x07cb,
-               XK_Greek_MU                                             = 0x07cc,
-               XK_Greek_NU                                             = 0x07cd,
-               XK_Greek_XI                                             = 0x07ce,
-               XK_Greek_OMICRON                                = 0x07cf,
-               XK_Greek_PI                                             = 0x07d0,
-               XK_Greek_RHO                                    = 0x07d1,
-               XK_Greek_SIGMA                                  = 0x07d2,
-               XK_Greek_TAU                                    = 0x07d4,
-               XK_Greek_UPSILON                                = 0x07d5,
-               XK_Greek_PHI                                    = 0x07d6,
-               XK_Greek_CHI                                    = 0x07d7,
-               XK_Greek_PSI                                    = 0x07d8,
-               XK_Greek_OMEGA                                  = 0x07d9,
-               XK_Greek_alpha                                  = 0x07e1,
-               XK_Greek_beta                                   = 0x07e2,
-               XK_Greek_gamma                                  = 0x07e3,
-               XK_Greek_delta                                  = 0x07e4,
-               XK_Greek_epsilon                                = 0x07e5,
-               XK_Greek_zeta                                   = 0x07e6,
-               XK_Greek_eta                                    = 0x07e7,
-               XK_Greek_theta                                  = 0x07e8,
-               XK_Greek_iota                                   = 0x07e9,
-               XK_Greek_kappa                                  = 0x07ea,
-               XK_Greek_lamda                                  = 0x07eb,
-               XK_Greek_lambda                                 = 0x07eb,
-               XK_Greek_mu                                             = 0x07ec,
-               XK_Greek_nu                                             = 0x07ed,
-               XK_Greek_xi                                             = 0x07ee,
-               XK_Greek_omicron                                = 0x07ef,
-               XK_Greek_pi                                             = 0x07f0,
-               XK_Greek_rho                                    = 0x07f1,
-               XK_Greek_sigma                                  = 0x07f2,
-               XK_Greek_finalsmallsigma                = 0x07f3,
-               XK_Greek_tau                                    = 0x07f4,
-               XK_Greek_upsilon                                = 0x07f5,
-               XK_Greek_phi                                    = 0x07f6,
-               XK_Greek_chi                                    = 0x07f7,
-               XK_Greek_psi                                    = 0x07f8,
-               XK_Greek_omega                                  = 0x07f9,
-               XK_Greek_switch                                 = 0xff7e,
-               XK_leftradical                                  = 0x08a1,
-               XK_topleftradical                               = 0x08a2,
-               XK_horizconnector                               = 0x08a3,
-               XK_topintegral                                  = 0x08a4,
-               XK_botintegral                                  = 0x08a5,
-               XK_vertconnector                                = 0x08a6,
-               XK_topleftsqbracket                             = 0x08a7,
-               XK_botleftsqbracket                             = 0x08a8,
-               XK_toprightsqbracket                    = 0x08a9,
-               XK_botrightsqbracket                    = 0x08aa,
-               XK_topleftparens                                = 0x08ab,
-               XK_botleftparens                                = 0x08ac,
-               XK_toprightparens                               = 0x08ad,
-               XK_botrightparens                               = 0x08ae,
-               XK_leftmiddlecurlybrace                 = 0x08af,
-               XK_rightmiddlecurlybrace                = 0x08b0,
-               XK_topleftsummation                             = 0x08b1,
-               XK_botleftsummation                             = 0x08b2,
-               XK_topvertsummationconnector    = 0x08b3,
-               XK_botvertsummationconnector    = 0x08b4,
-               XK_toprightsummation                    = 0x08b5,
-               XK_botrightsummation                    = 0x08b6,
-               XK_rightmiddlesummation                 = 0x08b7,
-               XK_lessthanequal                                = 0x08bc,
-               XK_notequal                                             = 0x08bd,
-               XK_greaterthanequal                             = 0x08be,
-               XK_integral                                             = 0x08bf,
-               XK_therefore                                    = 0x08c0,
-               XK_variation                                    = 0x08c1,
-               XK_infinity                                             = 0x08c2,
-               XK_nabla                                                = 0x08c5,
-               XK_approximate                                  = 0x08c8,
-               XK_similarequal                                 = 0x08c9,
-               XK_ifonlyif                                             = 0x08cd,
-               XK_implies                                              = 0x08ce,
-               XK_identical                                    = 0x08cf,
-               XK_radical                                              = 0x08d6,
-               XK_includedin                                   = 0x08da,
-               XK_includes                                             = 0x08db,
-               XK_intersection                                 = 0x08dc,
-               XK_union                                                = 0x08dd,
-               XK_logicaland                                   = 0x08de,
-               XK_logicalor                                    = 0x08df,
-               XK_partialderivative                    = 0x08ef,
-               XK_function                                             = 0x08f6,
-               XK_leftarrow                                    = 0x08fb,
-               XK_uparrow                                              = 0x08fc,
-               XK_rightarrow                                   = 0x08fd,
-               XK_downarrow                                    = 0x08fe,
-               XK_blank                                                = 0x09df,
-               XK_soliddiamond                                 = 0x09e0,
-               XK_checkerboard                                 = 0x09e1,
-               XK_ht                                                   = 0x09e2,
-               XK_ff                                                   = 0x09e3,
-               XK_cr                                                   = 0x09e4,
-               XK_lf                                                   = 0x09e5,
-               XK_nl                                                   = 0x09e8,
-               XK_vt                                                   = 0x09e9,
-               XK_lowrightcorner                               = 0x09ea,
-               XK_uprightcorner                                = 0x09eb,
-               XK_upleftcorner                                 = 0x09ec,
-               XK_lowleftcorner                                = 0x09ed,
-               XK_crossinglines                                = 0x09ee,
-               XK_horizlinescan1                               = 0x09ef,
-               XK_horizlinescan3                               = 0x09f0,
-               XK_horizlinescan5                               = 0x09f1,
-               XK_horizlinescan7                               = 0x09f2,
-               XK_horizlinescan9                               = 0x09f3,
-               XK_leftt                                                = 0x09f4,
-               XK_rightt                                               = 0x09f5,
-               XK_bott                                                 = 0x09f6,
-               XK_topt                                                 = 0x09f7,
-               XK_vertbar                                              = 0x09f8,
-               XK_emspace                                              = 0x0aa1,
-               XK_enspace                                              = 0x0aa2,
-               XK_em3space                                             = 0x0aa3,
-               XK_em4space                                             = 0x0aa4,
-               XK_digitspace                                   = 0x0aa5,
-               XK_punctspace                                   = 0x0aa6,
-               XK_thinspace                                    = 0x0aa7,
-               XK_hairspace                                    = 0x0aa8,
-               XK_emdash                                               = 0x0aa9,
-               XK_endash                                               = 0x0aaa,
-               XK_signifblank                                  = 0x0aac,
-               XK_ellipsis                                             = 0x0aae,
-               XK_doubbaselinedot                              = 0x0aaf,
-               XK_onethird                                             = 0x0ab0,
-               XK_twothirds                                    = 0x0ab1,
-               XK_onefifth                                             = 0x0ab2,
-               XK_twofifths                                    = 0x0ab3,
-               XK_threefifths                                  = 0x0ab4,
-               XK_fourfifths                                   = 0x0ab5,
-               XK_onesixth                                             = 0x0ab6,
-               XK_fivesixths                                   = 0x0ab7,
-               XK_careof                                               = 0x0ab8,
-               XK_figdash                                              = 0x0abb,
-               XK_leftanglebracket                             = 0x0abc,
-               XK_decimalpoint                                 = 0x0abd,
-               XK_rightanglebracket                    = 0x0abe,
-               XK_marker                                               = 0x0abf,
-               XK_oneeighth                                    = 0x0ac3,
-               XK_threeeighths                                 = 0x0ac4,
-               XK_fiveeighths                                  = 0x0ac5,
-               XK_seveneighths                                 = 0x0ac6,
-               XK_trademark                                    = 0x0ac9,
-               XK_signaturemark                                = 0x0aca,
-               XK_trademarkincircle                    = 0x0acb,
-               XK_leftopentriangle                             = 0x0acc,
-               XK_rightopentriangle                    = 0x0acd,
-               XK_emopencircle                                 = 0x0ace,
-               XK_emopenrectangle                              = 0x0acf,
-               XK_leftsinglequotemark                  = 0x0ad0,
-               XK_rightsinglequotemark                 = 0x0ad1,
-               XK_leftdoublequotemark                  = 0x0ad2,
-               XK_rightdoublequotemark                 = 0x0ad3,
-               XK_prescription                                 = 0x0ad4,
-               XK_permille                                             = 0x0ad5,
-               XK_minutes                                              = 0x0ad6,
-               XK_seconds                                              = 0x0ad7,
-               XK_latincross                                   = 0x0ad9,
-               XK_hexagram                                             = 0x0ada,
-               XK_filledrectbullet                             = 0x0adb,
-               XK_filledlefttribullet                  = 0x0adc,
-               XK_filledrighttribullet                 = 0x0add,
-               XK_emfilledcircle                               = 0x0ade,
-               XK_emfilledrect                                 = 0x0adf,
-               XK_enopencircbullet                             = 0x0ae0,
-               XK_enopensquarebullet                   = 0x0ae1,
-               XK_openrectbullet                               = 0x0ae2,
-               XK_opentribulletup                              = 0x0ae3,
-               XK_opentribulletdown                    = 0x0ae4,
-               XK_openstar                                             = 0x0ae5,
-               XK_enfilledcircbullet                   = 0x0ae6,
-               XK_enfilledsqbullet                             = 0x0ae7,
-               XK_filledtribulletup                    = 0x0ae8,
-               XK_filledtribulletdown                  = 0x0ae9,
-               XK_leftpointer                                  = 0x0aea,
-               XK_rightpointer                                 = 0x0aeb,
-               XK_club                                                 = 0x0aec,
-               XK_diamond                                              = 0x0aed,
-               XK_heart                                                = 0x0aee,
-               XK_maltesecross                                 = 0x0af0,
-               XK_dagger                                               = 0x0af1,
-               XK_doubledagger                                 = 0x0af2,
-               XK_checkmark                                    = 0x0af3,
-               XK_ballotcross                                  = 0x0af4,
-               XK_musicalsharp                                 = 0x0af5,
-               XK_musicalflat                                  = 0x0af6,
-               XK_malesymbol                                   = 0x0af7,
-               XK_femalesymbol                                 = 0x0af8,
-               XK_telephone                                    = 0x0af9,
-               XK_telephonerecorder                    = 0x0afa,
-               XK_phonographcopyright                  = 0x0afb,
-               XK_caret                                                = 0x0afc,
-               XK_singlelowquotemark                   = 0x0afd,
-               XK_doublelowquotemark                   = 0x0afe,
-               XK_cursor                                               = 0x0aff,
-               XK_leftcaret                                    = 0x0ba3,
-               XK_rightcaret                                   = 0x0ba6,
-               XK_downcaret                                    = 0x0ba8,
-               XK_upcaret                                              = 0x0ba9,
-               XK_overbar                                              = 0x0bc0,
-               XK_downtack                                             = 0x0bc2,
-               XK_upshoe                                               = 0x0bc3,
-               XK_downstile                                    = 0x0bc4,
-               XK_underbar                                             = 0x0bc6,
-               XK_jot                                                  = 0x0bca,
-               XK_quad                                                 = 0x0bcc,
-               XK_uptack                                               = 0x0bce,
-               XK_circle                                               = 0x0bcf,
-               XK_upstile                                              = 0x0bd3,
-               XK_downshoe                                             = 0x0bd6,
-               XK_rightshoe                                    = 0x0bd8,
-               XK_leftshoe                                             = 0x0bda,
-               XK_lefttack                                             = 0x0bdc,
-               XK_righttack                                    = 0x0bfc,
-               XK_hebrew_doublelowline                 = 0x0cdf,
-               XK_hebrew_aleph                                 = 0x0ce0,
-               XK_hebrew_bet                                   = 0x0ce1,
-               XK_hebrew_beth                                  = 0x0ce1,
-               XK_hebrew_gimel                                 = 0x0ce2,
-               XK_hebrew_gimmel                                = 0x0ce2,
-               XK_hebrew_dalet                                 = 0x0ce3,
-               XK_hebrew_daleth                                = 0x0ce3,
-               XK_hebrew_he                                    = 0x0ce4,
-               XK_hebrew_waw                                   = 0x0ce5,
-               XK_hebrew_zain                                  = 0x0ce6,
-               XK_hebrew_zayin                                 = 0x0ce6,
-               XK_hebrew_chet                                  = 0x0ce7,
-               XK_hebrew_het                                   = 0x0ce7,
-               XK_hebrew_tet                                   = 0x0ce8,
-               XK_hebrew_teth                                  = 0x0ce8,
-               XK_hebrew_yod                                   = 0x0ce9,
-               XK_hebrew_finalkaph                             = 0x0cea,
-               XK_hebrew_kaph                                  = 0x0ceb,
-               XK_hebrew_lamed                                 = 0x0cec,
-               XK_hebrew_finalmem                              = 0x0ced,
-               XK_hebrew_mem                                   = 0x0cee,
-               XK_hebrew_finalnun                              = 0x0cef,
-               XK_hebrew_nun                                   = 0x0cf0,
-               XK_hebrew_samech                                = 0x0cf1,
-               XK_hebrew_samekh                                = 0x0cf1,
-               XK_hebrew_ayin                                  = 0x0cf2,
-               XK_hebrew_finalpe                               = 0x0cf3,
-               XK_hebrew_pe                                    = 0x0cf4,
-               XK_hebrew_finalzade                             = 0x0cf5,
-               XK_hebrew_finalzadi                             = 0x0cf5,
-               XK_hebrew_zade                                  = 0x0cf6,
-               XK_hebrew_zadi                                  = 0x0cf6,
-               XK_hebrew_qoph                                  = 0x0cf7,
-               XK_hebrew_kuf                                   = 0x0cf7,
-               XK_hebrew_resh                                  = 0x0cf8,
-               XK_hebrew_shin                                  = 0x0cf9,
-               XK_hebrew_taw                                   = 0x0cfa,
-               XK_hebrew_taf                                   = 0x0cfa,
-               XK_Hebrew_switch                                = 0xff7e,
-               XK_Thai_kokai                                   = 0x0da1,
-               XK_Thai_khokhai                                 = 0x0da2,
-               XK_Thai_khokhuat                                = 0x0da3,
-               XK_Thai_khokhwai                                = 0x0da4,
-               XK_Thai_khokhon                                 = 0x0da5,
-               XK_Thai_khorakhang                              = 0x0da6,
-               XK_Thai_ngongu                                  = 0x0da7,
-               XK_Thai_chochan                                 = 0x0da8,
-               XK_Thai_choching                                = 0x0da9,
-               XK_Thai_chochang                                = 0x0daa,
-               XK_Thai_soso                                    = 0x0dab,
-               XK_Thai_chochoe                                 = 0x0dac,
-               XK_Thai_yoying                                  = 0x0dad,
-               XK_Thai_dochada                                 = 0x0dae,
-               XK_Thai_topatak                                 = 0x0daf,
-               XK_Thai_thothan                                 = 0x0db0,
-               XK_Thai_thonangmontho                   = 0x0db1,
-               XK_Thai_thophuthao                              = 0x0db2,
-               XK_Thai_nonen                                   = 0x0db3,
-               XK_Thai_dodek                                   = 0x0db4,
-               XK_Thai_totao                                   = 0x0db5,
-               XK_Thai_thothung                                = 0x0db6,
-               XK_Thai_thothahan                               = 0x0db7,
-               XK_Thai_thothong                                = 0x0db8,
-               XK_Thai_nonu                                    = 0x0db9,
-               XK_Thai_bobaimai                                = 0x0dba,
-               XK_Thai_popla                                   = 0x0dbb,
-               XK_Thai_phophung                                = 0x0dbc,
-               XK_Thai_fofa                                    = 0x0dbd,
-               XK_Thai_phophan                                 = 0x0dbe,
-               XK_Thai_fofan                                   = 0x0dbf,
-               XK_Thai_phosamphao                              = 0x0dc0,
-               XK_Thai_moma                                    = 0x0dc1,
-               XK_Thai_yoyak                                   = 0x0dc2,
-               XK_Thai_rorua                                   = 0x0dc3,
-               XK_Thai_ru                                              = 0x0dc4,
-               XK_Thai_loling                                  = 0x0dc5,
-               XK_Thai_lu                                              = 0x0dc6,
-               XK_Thai_wowaen                                  = 0x0dc7,
-               XK_Thai_sosala                                  = 0x0dc8,
-               XK_Thai_sorusi                                  = 0x0dc9,
-               XK_Thai_sosua                                   = 0x0dca,
-               XK_Thai_hohip                                   = 0x0dcb,
-               XK_Thai_lochula                                 = 0x0dcc,
-               XK_Thai_oang                                    = 0x0dcd,
-               XK_Thai_honokhuk                                = 0x0dce,
-               XK_Thai_paiyannoi                               = 0x0dcf,
-               XK_Thai_saraa                                   = 0x0dd0,
-               XK_Thai_maihanakat                              = 0x0dd1,
-               XK_Thai_saraaa                                  = 0x0dd2,
-               XK_Thai_saraam                                  = 0x0dd3,
-               XK_Thai_sarai                                   = 0x0dd4,
-               XK_Thai_saraii                                  = 0x0dd5,
-               XK_Thai_saraue                                  = 0x0dd6,
-               XK_Thai_sarauee                                 = 0x0dd7,
-               XK_Thai_sarau                                   = 0x0dd8,
-               XK_Thai_sarauu                                  = 0x0dd9,
-               XK_Thai_phinthu                                 = 0x0dda,
-               XK_Thai_maihanakat_maitho               = 0x0dde,
-               XK_Thai_baht                                    = 0x0ddf,
-               XK_Thai_sarae                                   = 0x0de0,
-               XK_Thai_saraae                                  = 0x0de1,
-               XK_Thai_sarao                                   = 0x0de2,
-               XK_Thai_saraaimaimuan                   = 0x0de3,
-               XK_Thai_saraaimaimalai                  = 0x0de4,
-               XK_Thai_lakkhangyao                             = 0x0de5,
-               XK_Thai_maiyamok                                = 0x0de6,
-               XK_Thai_maitaikhu                               = 0x0de7,
-               XK_Thai_maiek                                   = 0x0de8,
-               XK_Thai_maitho                                  = 0x0de9,
-               XK_Thai_maitri                                  = 0x0dea,
-               XK_Thai_maichattawa                             = 0x0deb,
-               XK_Thai_thanthakhat                             = 0x0dec,
-               XK_Thai_nikhahit                                = 0x0ded,
-               XK_Thai_leksun                                  = 0x0df0,
-               XK_Thai_leknung                                 = 0x0df1,
-               XK_Thai_leksong                                 = 0x0df2,
-               XK_Thai_leksam                                  = 0x0df3,
-               XK_Thai_leksi                                   = 0x0df4,
-               XK_Thai_lekha                                   = 0x0df5,
-               XK_Thai_lekhok                                  = 0x0df6,
-               XK_Thai_lekchet                                 = 0x0df7,
-               XK_Thai_lekpaet                                 = 0x0df8,
-               XK_Thai_lekkao                                  = 0x0df9,
-               XK_Hangul                                               = 0xff31,
-               XK_Hangul_Start                                 = 0xff32,
-               XK_Hangul_End                                   = 0xff33,
-               XK_Hangul_Hanja                                 = 0xff34,
-               XK_Hangul_Jamo                                  = 0xff35,
-               XK_Hangul_Romaja                                = 0xff36,
-               XK_Hangul_Codeinput                             = 0xff37,
-               XK_Hangul_Jeonja                                = 0xff38,
-               XK_Hangul_Banja                                 = 0xff39,
-               XK_Hangul_PreHanja                              = 0xff3a,
-               XK_Hangul_PostHanja                             = 0xff3b,
-               XK_Hangul_SingleCandidate               = 0xff3c,
-               XK_Hangul_MultipleCandidate             = 0xff3d,
-               XK_Hangul_PreviousCandidate             = 0xff3e,
-               XK_Hangul_Special                               = 0xff3f,
-               XK_Hangul_switch                                = 0xff7e,
-               XK_Hangul_Kiyeog                                = 0x0ea1,
-               XK_Hangul_SsangKiyeog                   = 0x0ea2,
-               XK_Hangul_KiyeogSios                    = 0x0ea3,
-               XK_Hangul_Nieun                                 = 0x0ea4,
-               XK_Hangul_NieunJieuj                    = 0x0ea5,
-               XK_Hangul_NieunHieuh                    = 0x0ea6,
-               XK_Hangul_Dikeud                                = 0x0ea7,
-               XK_Hangul_SsangDikeud                   = 0x0ea8,
-               XK_Hangul_Rieul                                 = 0x0ea9,
-               XK_Hangul_RieulKiyeog                   = 0x0eaa,
-               XK_Hangul_RieulMieum                    = 0x0eab,
-               XK_Hangul_RieulPieub                    = 0x0eac,
-               XK_Hangul_RieulSios                             = 0x0ead,
-               XK_Hangul_RieulTieut                    = 0x0eae,
-               XK_Hangul_RieulPhieuf                   = 0x0eaf,
-               XK_Hangul_RieulHieuh                    = 0x0eb0,
-               XK_Hangul_Mieum                                 = 0x0eb1,
-               XK_Hangul_Pieub                                 = 0x0eb2,
-               XK_Hangul_SsangPieub                    = 0x0eb3,
-               XK_Hangul_PieubSios                             = 0x0eb4,
-               XK_Hangul_Sios                                  = 0x0eb5,
-               XK_Hangul_SsangSios                             = 0x0eb6,
-               XK_Hangul_Ieung                                 = 0x0eb7,
-               XK_Hangul_Jieuj                                 = 0x0eb8,
-               XK_Hangul_SsangJieuj                    = 0x0eb9,
-               XK_Hangul_Cieuc                                 = 0x0eba,
-               XK_Hangul_Khieuq                                = 0x0ebb,
-               XK_Hangul_Tieut                                 = 0x0ebc,
-               XK_Hangul_Phieuf                                = 0x0ebd,
-               XK_Hangul_Hieuh                                 = 0x0ebe,
-               XK_Hangul_A                                             = 0x0ebf,
-               XK_Hangul_AE                                    = 0x0ec0,
-               XK_Hangul_YA                                    = 0x0ec1,
-               XK_Hangul_YAE                                   = 0x0ec2,
-               XK_Hangul_EO                                    = 0x0ec3,
-               XK_Hangul_E                                             = 0x0ec4,
-               XK_Hangul_YEO                                   = 0x0ec5,
-               XK_Hangul_YE                                    = 0x0ec6,
-               XK_Hangul_O                                             = 0x0ec7,
-               XK_Hangul_WA                                    = 0x0ec8,
-               XK_Hangul_WAE                                   = 0x0ec9,
-               XK_Hangul_OE                                    = 0x0eca,
-               XK_Hangul_YO                                    = 0x0ecb,
-               XK_Hangul_U                                             = 0x0ecc,
-               XK_Hangul_WEO                                   = 0x0ecd,
-               XK_Hangul_WE                                    = 0x0ece,
-               XK_Hangul_WI                                    = 0x0ecf,
-               XK_Hangul_YU                                    = 0x0ed0,
-               XK_Hangul_EU                                    = 0x0ed1,
-               XK_Hangul_YI                                    = 0x0ed2,
-               XK_Hangul_I                                             = 0x0ed3,
-               XK_Hangul_J_Kiyeog                              = 0x0ed4,
-               XK_Hangul_J_SsangKiyeog                 = 0x0ed5,
-               XK_Hangul_J_KiyeogSios                  = 0x0ed6,
-               XK_Hangul_J_Nieun                               = 0x0ed7,
-               XK_Hangul_J_NieunJieuj                  = 0x0ed8,
-               XK_Hangul_J_NieunHieuh                  = 0x0ed9,
-               XK_Hangul_J_Dikeud                              = 0x0eda,
-               XK_Hangul_J_Rieul                               = 0x0edb,
-               XK_Hangul_J_RieulKiyeog                 = 0x0edc,
-               XK_Hangul_J_RieulMieum                  = 0x0edd,
-               XK_Hangul_J_RieulPieub                  = 0x0ede,
-               XK_Hangul_J_RieulSios                   = 0x0edf,
-               XK_Hangul_J_RieulTieut                  = 0x0ee0,
-               XK_Hangul_J_RieulPhieuf                 = 0x0ee1,
-               XK_Hangul_J_RieulHieuh                  = 0x0ee2,
-               XK_Hangul_J_Mieum                               = 0x0ee3,
-               XK_Hangul_J_Pieub                               = 0x0ee4,
-               XK_Hangul_J_PieubSios                   = 0x0ee5,
-               XK_Hangul_J_Sios                                = 0x0ee6,
-               XK_Hangul_J_SsangSios                   = 0x0ee7,
-               XK_Hangul_J_Ieung                               = 0x0ee8,
-               XK_Hangul_J_Jieuj                               = 0x0ee9,
-               XK_Hangul_J_Cieuc                               = 0x0eea,
-               XK_Hangul_J_Khieuq                              = 0x0eeb,
-               XK_Hangul_J_Tieut                               = 0x0eec,
-               XK_Hangul_J_Phieuf                              = 0x0eed,
-               XK_Hangul_J_Hieuh                               = 0x0eee,
-               XK_Hangul_RieulYeorinHieuh              = 0x0eef,
-               XK_Hangul_SunkyeongeumMieum             = 0x0ef0,
-               XK_Hangul_SunkyeongeumPieub             = 0x0ef1,
-               XK_Hangul_PanSios                               = 0x0ef2,
-               XK_Hangul_KkogjiDalrinIeung             = 0x0ef3,
-               XK_Hangul_SunkyeongeumPhieuf    = 0x0ef4,
-               XK_Hangul_YeorinHieuh                   = 0x0ef5,
-               XK_Hangul_AraeA                                 = 0x0ef6,
-               XK_Hangul_AraeAE                                = 0x0ef7,
-               XK_Hangul_J_PanSios                             = 0x0ef8,
-               XK_Hangul_J_KkogjiDalrinIeung   = 0x0ef9,
-               XK_Hangul_J_YeorinHieuh                 = 0x0efa,
-               XK_Korean_Won                                   = 0x0eff,
-               XK_Armenian_ligature_ew                 = 0x1000587,
-               XK_Armenian_full_stop                   = 0x1000589,
-               XK_Armenian_verjaket                    = 0x1000589,
-               XK_Armenian_separation_mark             = 0x100055d,
-               XK_Armenian_but                                 = 0x100055d,
-               XK_Armenian_hyphen                              = 0x100058a,
-               XK_Armenian_yentamna                    = 0x100058a,
-               XK_Armenian_exclam                              = 0x100055c,
-               XK_Armenian_amanak                              = 0x100055c,
-               XK_Armenian_accent                              = 0x100055b,
-               XK_Armenian_shesht                              = 0x100055b,
-               XK_Armenian_question                    = 0x100055e,
-               XK_Armenian_paruyk                              = 0x100055e,
-               XK_Armenian_AYB                                 = 0x1000531,
-               XK_Armenian_ayb                                 = 0x1000561,
-               XK_Armenian_BEN                                 = 0x1000532,
-               XK_Armenian_ben                                 = 0x1000562,
-               XK_Armenian_GIM                                 = 0x1000533,
-               XK_Armenian_gim                                 = 0x1000563,
-               XK_Armenian_DA                                  = 0x1000534,
-               XK_Armenian_da                                  = 0x1000564,
-               XK_Armenian_YECH                                = 0x1000535,
-               XK_Armenian_yech                                = 0x1000565,
-               XK_Armenian_ZA                                  = 0x1000536,
-               XK_Armenian_za                                  = 0x1000566,
-               XK_Armenian_E                                   = 0x1000537,
-               XK_Armenian_e                                   = 0x1000567,
-               XK_Armenian_AT                                  = 0x1000538,
-               XK_Armenian_at                                  = 0x1000568,
-               XK_Armenian_TO                                  = 0x1000539,
-               XK_Armenian_to                                  = 0x1000569,
-               XK_Armenian_ZHE                                 = 0x100053a,
-               XK_Armenian_zhe                                 = 0x100056a,
-               XK_Armenian_INI                                 = 0x100053b,
-               XK_Armenian_ini                                 = 0x100056b,
-               XK_Armenian_LYUN                                = 0x100053c,
-               XK_Armenian_lyun                                = 0x100056c,
-               XK_Armenian_KHE                                 = 0x100053d,
-               XK_Armenian_khe                                 = 0x100056d,
-               XK_Armenian_TSA                                 = 0x100053e,
-               XK_Armenian_tsa                                 = 0x100056e,
-               XK_Armenian_KEN                                 = 0x100053f,
-               XK_Armenian_ken                                 = 0x100056f,
-               XK_Armenian_HO                                  = 0x1000540,
-               XK_Armenian_ho                                  = 0x1000570,
-               XK_Armenian_DZA                                 = 0x1000541,
-               XK_Armenian_dza                                 = 0x1000571,
-               XK_Armenian_GHAT                                = 0x1000542,
-               XK_Armenian_ghat                                = 0x1000572,
-               XK_Armenian_TCHE                                = 0x1000543,
-               XK_Armenian_tche                                = 0x1000573,
-               XK_Armenian_MEN                                 = 0x1000544,
-               XK_Armenian_men                                 = 0x1000574,
-               XK_Armenian_HI                                  = 0x1000545,
-               XK_Armenian_hi                                  = 0x1000575,
-               XK_Armenian_NU                                  = 0x1000546,
-               XK_Armenian_nu                                  = 0x1000576,
-               XK_Armenian_SHA                                 = 0x1000547,
-               XK_Armenian_sha                                 = 0x1000577,
-               XK_Armenian_VO                                  = 0x1000548,
-               XK_Armenian_vo                                  = 0x1000578,
-               XK_Armenian_CHA                                 = 0x1000549,
-               XK_Armenian_cha                                 = 0x1000579,
-               XK_Armenian_PE                                  = 0x100054a,
-               XK_Armenian_pe                                  = 0x100057a,
-               XK_Armenian_JE                                  = 0x100054b,
-               XK_Armenian_je                                  = 0x100057b,
-               XK_Armenian_RA                                  = 0x100054c,
-               XK_Armenian_ra                                  = 0x100057c,
-               XK_Armenian_SE                                  = 0x100054d,
-               XK_Armenian_se                                  = 0x100057d,
-               XK_Armenian_VEV                                 = 0x100054e,
-               XK_Armenian_vev                                 = 0x100057e,
-               XK_Armenian_TYUN                                = 0x100054f,
-               XK_Armenian_tyun                                = 0x100057f,
-               XK_Armenian_RE                                  = 0x1000550,
-               XK_Armenian_re                                  = 0x1000580,
-               XK_Armenian_TSO                                 = 0x1000551,
-               XK_Armenian_tso                                 = 0x1000581,
-               XK_Armenian_VYUN                                = 0x1000552,
-               XK_Armenian_vyun                                = 0x1000582,
-               XK_Armenian_PYUR                                = 0x1000553,
-               XK_Armenian_pyur                                = 0x1000583,
-               XK_Armenian_KE                                  = 0x1000554,
-               XK_Armenian_ke                                  = 0x1000584,
-               XK_Armenian_O                                   = 0x1000555,
-               XK_Armenian_o                                   = 0x1000585,
-               XK_Armenian_FE                                  = 0x1000556,
-               XK_Armenian_fe                                  = 0x1000586,
-               XK_Armenian_apostrophe                  = 0x100055a,
-               XK_Georgian_an                                  = 0x10010d0,
-               XK_Georgian_ban                                 = 0x10010d1,
-               XK_Georgian_gan                                 = 0x10010d2,
-               XK_Georgian_don                                 = 0x10010d3,
-               XK_Georgian_en                                  = 0x10010d4,
-               XK_Georgian_vin                                 = 0x10010d5,
-               XK_Georgian_zen                                 = 0x10010d6,
-               XK_Georgian_tan                                 = 0x10010d7,
-               XK_Georgian_in                                  = 0x10010d8,
-               XK_Georgian_kan                                 = 0x10010d9,
-               XK_Georgian_las                                 = 0x10010da,
-               XK_Georgian_man                                 = 0x10010db,
-               XK_Georgian_nar                                 = 0x10010dc,
-               XK_Georgian_on                                  = 0x10010dd,
-               XK_Georgian_par                                 = 0x10010de,
-               XK_Georgian_zhar                                = 0x10010df,
-               XK_Georgian_rae                                 = 0x10010e0,
-               XK_Georgian_san                                 = 0x10010e1,
-               XK_Georgian_tar                                 = 0x10010e2,
-               XK_Georgian_un                                  = 0x10010e3,
-               XK_Georgian_phar                                = 0x10010e4,
-               XK_Georgian_khar                                = 0x10010e5,
-               XK_Georgian_ghan                                = 0x10010e6,
-               XK_Georgian_qar                                 = 0x10010e7,
-               XK_Georgian_shin                                = 0x10010e8,
-               XK_Georgian_chin                                = 0x10010e9,
-               XK_Georgian_can                                 = 0x10010ea,
-               XK_Georgian_jil                                 = 0x10010eb,
-               XK_Georgian_cil                                 = 0x10010ec,
-               XK_Georgian_char                                = 0x10010ed,
-               XK_Georgian_xan                                 = 0x10010ee,
-               XK_Georgian_jhan                                = 0x10010ef,
-               XK_Georgian_hae                                 = 0x10010f0,
-               XK_Georgian_he                                  = 0x10010f1,
-               XK_Georgian_hie                                 = 0x10010f2,
-               XK_Georgian_we                                  = 0x10010f3,
-               XK_Georgian_har                                 = 0x10010f4,
-               XK_Georgian_hoe                                 = 0x10010f5,
-               XK_Georgian_fi                                  = 0x10010f6,
-               XK_Xabovedot                                    = 0x1001e8a,
-               XK_Ibreve                                               = 0x100012c,
-               XK_Zstroke                                              = 0x10001b5,
-               XK_Gcaron                                               = 0x10001e6,
-               XK_Ocaron                                               = 0x10001d1,
-               XK_Obarred                                              = 0x100019f,
-               XK_xabovedot                                    = 0x1001e8b,
-               XK_ibreve                                               = 0x100012d,
-               XK_zstroke                                              = 0x10001b6,
-               XK_gcaron                                               = 0x10001e7,
-               XK_ocaron                                               = 0x10001d2,
-               XK_obarred                                              = 0x1000275,
-               XK_SCHWA                                                = 0x100018f,
-               XK_schwa                                                = 0x1000259,
-               XK_EZH                                                  = 0x10001b7,
-               XK_ezh                                                  = 0x1000292,
-               XK_Lbelowdot                                    = 0x1001e36,
-               XK_lbelowdot                                    = 0x1001e37,
-               XK_Abelowdot                                    = 0x1001ea0,
-               XK_abelowdot                                    = 0x1001ea1,
-               XK_Ahook                                                = 0x1001ea2,
-               XK_ahook                                                = 0x1001ea3,
-               XK_Acircumflexacute                             = 0x1001ea4,
-               XK_acircumflexacute                             = 0x1001ea5,
-               XK_Acircumflexgrave                             = 0x1001ea6,
-               XK_acircumflexgrave                             = 0x1001ea7,
-               XK_Acircumflexhook                              = 0x1001ea8,
-               XK_acircumflexhook                              = 0x1001ea9,
-               XK_Acircumflextilde                             = 0x1001eaa,
-               XK_acircumflextilde                             = 0x1001eab,
-               XK_Acircumflexbelowdot                  = 0x1001eac,
-               XK_acircumflexbelowdot                  = 0x1001ead,
-               XK_Abreveacute                                  = 0x1001eae,
-               XK_abreveacute                                  = 0x1001eaf,
-               XK_Abrevegrave                                  = 0x1001eb0,
-               XK_abrevegrave                                  = 0x1001eb1,
-               XK_Abrevehook                                   = 0x1001eb2,
-               XK_abrevehook                                   = 0x1001eb3,
-               XK_Abrevetilde                                  = 0x1001eb4,
-               XK_abrevetilde                                  = 0x1001eb5,
-               XK_Abrevebelowdot                               = 0x1001eb6,
-               XK_abrevebelowdot                               = 0x1001eb7,
-               XK_Ebelowdot                                    = 0x1001eb8,
-               XK_ebelowdot                                    = 0x1001eb9,
-               XK_Ehook                                                = 0x1001eba,
-               XK_ehook                                                = 0x1001ebb,
-               XK_Etilde                                               = 0x1001ebc,
-               XK_etilde                                               = 0x1001ebd,
-               XK_Ecircumflexacute                             = 0x1001ebe,
-               XK_ecircumflexacute                             = 0x1001ebf,
-               XK_Ecircumflexgrave                             = 0x1001ec0,
-               XK_ecircumflexgrave                             = 0x1001ec1,
-               XK_Ecircumflexhook                              = 0x1001ec2,
-               XK_ecircumflexhook                              = 0x1001ec3,
-               XK_Ecircumflextilde                             = 0x1001ec4,
-               XK_ecircumflextilde                             = 0x1001ec5,
-               XK_Ecircumflexbelowdot                  = 0x1001ec6,
-               XK_ecircumflexbelowdot                  = 0x1001ec7,
-               XK_Ihook                                                = 0x1001ec8,
-               XK_ihook                                                = 0x1001ec9,
-               XK_Ibelowdot                                    = 0x1001eca,
-               XK_ibelowdot                                    = 0x1001ecb,
-               XK_Obelowdot                                    = 0x1001ecc,
-               XK_obelowdot                                    = 0x1001ecd,
-               XK_Ohook                                                = 0x1001ece,
-               XK_ohook                                                = 0x1001ecf,
-               XK_Ocircumflexacute                             = 0x1001ed0,
-               XK_ocircumflexacute                             = 0x1001ed1,
-               XK_Ocircumflexgrave                             = 0x1001ed2,
-               XK_ocircumflexgrave                             = 0x1001ed3,
-               XK_Ocircumflexhook                              = 0x1001ed4,
-               XK_ocircumflexhook                              = 0x1001ed5,
-               XK_Ocircumflextilde                             = 0x1001ed6,
-               XK_ocircumflextilde                             = 0x1001ed7,
-               XK_Ocircumflexbelowdot                  = 0x1001ed8,
-               XK_ocircumflexbelowdot                  = 0x1001ed9,
-               XK_Ohornacute                                   = 0x1001eda,
-               XK_ohornacute                                   = 0x1001edb,
-               XK_Ohorngrave                                   = 0x1001edc,
-               XK_ohorngrave                                   = 0x1001edd,
-               XK_Ohornhook                                    = 0x1001ede,
-               XK_ohornhook                                    = 0x1001edf,
-               XK_Ohorntilde                                   = 0x1001ee0,
-               XK_ohorntilde                                   = 0x1001ee1,
-               XK_Ohornbelowdot                                = 0x1001ee2,
-               XK_ohornbelowdot                                = 0x1001ee3,
-               XK_Ubelowdot                                    = 0x1001ee4,
-               XK_ubelowdot                                    = 0x1001ee5,
-               XK_Uhook                                                = 0x1001ee6,
-               XK_uhook                                                = 0x1001ee7,
-               XK_Uhornacute                                   = 0x1001ee8,
-               XK_uhornacute                                   = 0x1001ee9,
-               XK_Uhorngrave                                   = 0x1001eea,
-               XK_uhorngrave                                   = 0x1001eeb,
-               XK_Uhornhook                                    = 0x1001eec,
-               XK_uhornhook                                    = 0x1001eed,
-               XK_Uhorntilde                                   = 0x1001eee,
-               XK_uhorntilde                                   = 0x1001eef,
-               XK_Uhornbelowdot                                = 0x1001ef0,
-               XK_uhornbelowdot                                = 0x1001ef1,
-               XK_Ybelowdot                                    = 0x1001ef4,
-               XK_ybelowdot                                    = 0x1001ef5,
-               XK_Yhook                                                = 0x1001ef6,
-               XK_yhook                                                = 0x1001ef7,
-               XK_Ytilde                                               = 0x1001ef8,
-               XK_ytilde                                               = 0x1001ef9,
-               XK_Ohorn                                                = 0x10001a0,
-               XK_ohorn                                                = 0x10001a1,
-               XK_Uhorn                                                = 0x10001af,
-               XK_uhorn                                                = 0x10001b0,
-               XK_EcuSign                                              = 0x10020a0,
-               XK_ColonSign                                    = 0x10020a1,
-               XK_CruzeiroSign                                 = 0x10020a2,
-               XK_FFrancSign                                   = 0x10020a3,
-               XK_LiraSign                                             = 0x10020a4,
-               XK_MillSign                                             = 0x10020a5,
-               XK_NairaSign                                    = 0x10020a6,
-               XK_PesetaSign                                   = 0x10020a7,
-               XK_RupeeSign                                    = 0x10020a8,
-               XK_WonSign                                              = 0x10020a9,
-               XK_NewSheqelSign                                = 0x10020aa,
-               XK_DongSign                                             = 0x10020ab,
-               XK_EuroSign                                             = 0x20ac,
-               XK_zerosuperior                                 = 0x1002070,
-               XK_foursuperior                                 = 0x1002074,
-               XK_fivesuperior                                 = 0x1002075,
-               XK_sixsuperior                                  = 0x1002076,
-               XK_sevensuperior                                = 0x1002077,
-               XK_eightsuperior                                = 0x1002078,
-               XK_ninesuperior                                 = 0x1002079,
-               XK_zerosubscript                                = 0x1002080,
-               XK_onesubscript                                 = 0x1002081,
-               XK_twosubscript                                 = 0x1002082,
-               XK_threesubscript                               = 0x1002083,
-               XK_foursubscript                                = 0x1002084,
-               XK_fivesubscript                                = 0x1002085,
-               XK_sixsubscript                                 = 0x1002086,
-               XK_sevensubscript                               = 0x1002087,
-               XK_eightsubscript                               = 0x1002088,
-               XK_ninesubscript                                = 0x1002089,
-               XK_partdifferential                             = 0x1002202,
-               XK_emptyset                                             = 0x1002205,
-               XK_elementof                                    = 0x1002208,
-               XK_notelementof                                 = 0x1002209,
-               XK_containsas                                   = 0x100220B,
-               XK_squareroot                                   = 0x100221A,
-               XK_cuberoot                                             = 0x100221B,
-               XK_fourthroot                                   = 0x100221C,
-               XK_dintegral                                    = 0x100222C,
-               XK_tintegral                                    = 0x100222D,
-               XK_because                                              = 0x1002235,
-               XK_approxeq                                             = 0x1002248,
-               XK_notapproxeq                                  = 0x1002247,
-               XK_notidentical                                 = 0x1002262,
-               XK_stricteq                                             = 0x1002263,
-               XK_braille_dot_1                                = 0xfff1,
-               XK_braille_dot_2                                = 0xfff2,
-               XK_braille_dot_3                                = 0xfff3,
-               XK_braille_dot_4                                = 0xfff4,
-               XK_braille_dot_5                                = 0xfff5,
-               XK_braille_dot_6                                = 0xfff6,
-               XK_braille_dot_7                                = 0xfff7,
-               XK_braille_dot_8                                = 0xfff8,
-               XK_braille_dot_9                                = 0xfff9,
-               XK_braille_dot_10                               = 0xfffa,
-               XK_braille_blank                                = 0x1002800,
-               XK_braille_dots_1                               = 0x1002801,
-               XK_braille_dots_2                               = 0x1002802,
-               XK_braille_dots_12                              = 0x1002803,
-               XK_braille_dots_3                               = 0x1002804,
-               XK_braille_dots_13                              = 0x1002805,
-               XK_braille_dots_23                              = 0x1002806,
-               XK_braille_dots_123                             = 0x1002807,
-               XK_braille_dots_4                               = 0x1002808,
-               XK_braille_dots_14                              = 0x1002809,
-               XK_braille_dots_24                              = 0x100280a,
-               XK_braille_dots_124                             = 0x100280b,
-               XK_braille_dots_34                              = 0x100280c,
-               XK_braille_dots_134                             = 0x100280d,
-               XK_braille_dots_234                             = 0x100280e,
-               XK_braille_dots_1234                    = 0x100280f,
-               XK_braille_dots_5                               = 0x1002810,
-               XK_braille_dots_15                              = 0x1002811,
-               XK_braille_dots_25                              = 0x1002812,
-               XK_braille_dots_125                             = 0x1002813,
-               XK_braille_dots_35                              = 0x1002814,
-               XK_braille_dots_135                             = 0x1002815,
-               XK_braille_dots_235                             = 0x1002816,
-               XK_braille_dots_1235                    = 0x1002817,
-               XK_braille_dots_45                              = 0x1002818,
-               XK_braille_dots_145                             = 0x1002819,
-               XK_braille_dots_245                             = 0x100281a,
-               XK_braille_dots_1245                    = 0x100281b,
-               XK_braille_dots_345                             = 0x100281c,
-               XK_braille_dots_1345                    = 0x100281d,
-               XK_braille_dots_2345                    = 0x100281e,
-               XK_braille_dots_12345                   = 0x100281f,
-               XK_braille_dots_6                               = 0x1002820,
-               XK_braille_dots_16                              = 0x1002821,
-               XK_braille_dots_26                              = 0x1002822,
-               XK_braille_dots_126                             = 0x1002823,
-               XK_braille_dots_36                              = 0x1002824,
-               XK_braille_dots_136                             = 0x1002825,
-               XK_braille_dots_236                             = 0x1002826,
-               XK_braille_dots_1236                    = 0x1002827,
-               XK_braille_dots_46                              = 0x1002828,
-               XK_braille_dots_146                             = 0x1002829,
-               XK_braille_dots_246                             = 0x100282a,
-               XK_braille_dots_1246                    = 0x100282b,
-               XK_braille_dots_346                             = 0x100282c,
-               XK_braille_dots_1346                    = 0x100282d,
-               XK_braille_dots_2346                    = 0x100282e,
-               XK_braille_dots_12346                   = 0x100282f,
-               XK_braille_dots_56                              = 0x1002830,
-               XK_braille_dots_156                             = 0x1002831,
-               XK_braille_dots_256                             = 0x1002832,
-               XK_braille_dots_1256                    = 0x1002833,
-               XK_braille_dots_356                             = 0x1002834,
-               XK_braille_dots_1356                    = 0x1002835,
-               XK_braille_dots_2356                    = 0x1002836,
-               XK_braille_dots_12356                   = 0x1002837,
-               XK_braille_dots_456                             = 0x1002838,
-               XK_braille_dots_1456                    = 0x1002839,
-               XK_braille_dots_2456                    = 0x100283a,
-               XK_braille_dots_12456                   = 0x100283b,
-               XK_braille_dots_3456                    = 0x100283c,
-               XK_braille_dots_13456                   = 0x100283d,
-               XK_braille_dots_23456                   = 0x100283e,
-               XK_braille_dots_123456                  = 0x100283f,
-               XK_braille_dots_7                               = 0x1002840,
-               XK_braille_dots_17                              = 0x1002841,
-               XK_braille_dots_27                              = 0x1002842,
-               XK_braille_dots_127                             = 0x1002843,
-               XK_braille_dots_37                              = 0x1002844,
-               XK_braille_dots_137                             = 0x1002845,
-               XK_braille_dots_237                             = 0x1002846,
-               XK_braille_dots_1237                    = 0x1002847,
-               XK_braille_dots_47                              = 0x1002848,
-               XK_braille_dots_147                             = 0x1002849,
-               XK_braille_dots_247                             = 0x100284a,
-               XK_braille_dots_1247                    = 0x100284b,
-               XK_braille_dots_347                             = 0x100284c,
-               XK_braille_dots_1347                    = 0x100284d,
-               XK_braille_dots_2347                    = 0x100284e,
-               XK_braille_dots_12347                   = 0x100284f,
-               XK_braille_dots_57                              = 0x1002850,
-               XK_braille_dots_157                             = 0x1002851,
-               XK_braille_dots_257                             = 0x1002852,
-               XK_braille_dots_1257                    = 0x1002853,
-               XK_braille_dots_357                             = 0x1002854,
-               XK_braille_dots_1357                    = 0x1002855,
-               XK_braille_dots_2357                    = 0x1002856,
-               XK_braille_dots_12357                   = 0x1002857,
-               XK_braille_dots_457                             = 0x1002858,
-               XK_braille_dots_1457                    = 0x1002859,
-               XK_braille_dots_2457                    = 0x100285a,
-               XK_braille_dots_12457                   = 0x100285b,
-               XK_braille_dots_3457                    = 0x100285c,
-               XK_braille_dots_13457                   = 0x100285d,
-               XK_braille_dots_23457                   = 0x100285e,
-               XK_braille_dots_123457                  = 0x100285f,
-               XK_braille_dots_67                              = 0x1002860,
-               XK_braille_dots_167                             = 0x1002861,
-               XK_braille_dots_267                             = 0x1002862,
-               XK_braille_dots_1267                    = 0x1002863,
-               XK_braille_dots_367                             = 0x1002864,
-               XK_braille_dots_1367                    = 0x1002865,
-               XK_braille_dots_2367                    = 0x1002866,
-               XK_braille_dots_12367                   = 0x1002867,
-               XK_braille_dots_467                             = 0x1002868,
-               XK_braille_dots_1467                    = 0x1002869,
-               XK_braille_dots_2467                    = 0x100286a,
-               XK_braille_dots_12467                   = 0x100286b,
-               XK_braille_dots_3467                    = 0x100286c,
-               XK_braille_dots_13467                   = 0x100286d,
-               XK_braille_dots_23467                   = 0x100286e,
-               XK_braille_dots_123467                  = 0x100286f,
-               XK_braille_dots_567                             = 0x1002870,
-               XK_braille_dots_1567                    = 0x1002871,
-               XK_braille_dots_2567                    = 0x1002872,
-               XK_braille_dots_12567                   = 0x1002873,
-               XK_braille_dots_3567                    = 0x1002874,
-               XK_braille_dots_13567                   = 0x1002875,
-               XK_braille_dots_23567                   = 0x1002876,
-               XK_braille_dots_123567                  = 0x1002877,
-               XK_braille_dots_4567                    = 0x1002878,
-               XK_braille_dots_14567                   = 0x1002879,
-               XK_braille_dots_24567                   = 0x100287a,
-               XK_braille_dots_124567                  = 0x100287b,
-               XK_braille_dots_34567                   = 0x100287c,
-               XK_braille_dots_134567                  = 0x100287d,
-               XK_braille_dots_234567                  = 0x100287e,
-               XK_braille_dots_1234567                 = 0x100287f,
-               XK_braille_dots_8                               = 0x1002880,
-               XK_braille_dots_18                              = 0x1002881,
-               XK_braille_dots_28                              = 0x1002882,
-               XK_braille_dots_128                             = 0x1002883,
-               XK_braille_dots_38                              = 0x1002884,
-               XK_braille_dots_138                             = 0x1002885,
-               XK_braille_dots_238                             = 0x1002886,
-               XK_braille_dots_1238                    = 0x1002887,
-               XK_braille_dots_48                              = 0x1002888,
-               XK_braille_dots_148                             = 0x1002889,
-               XK_braille_dots_248                             = 0x100288a,
-               XK_braille_dots_1248                    = 0x100288b,
-               XK_braille_dots_348                             = 0x100288c,
-               XK_braille_dots_1348                    = 0x100288d,
-               XK_braille_dots_2348                    = 0x100288e,
-               XK_braille_dots_12348                   = 0x100288f,
-               XK_braille_dots_58                              = 0x1002890,
-               XK_braille_dots_158                             = 0x1002891,
-               XK_braille_dots_258                             = 0x1002892,
-               XK_braille_dots_1258                    = 0x1002893,
-               XK_braille_dots_358                             = 0x1002894,
-               XK_braille_dots_1358                    = 0x1002895,
-               XK_braille_dots_2358                    = 0x1002896,
-               XK_braille_dots_12358                   = 0x1002897,
-               XK_braille_dots_458                             = 0x1002898,
-               XK_braille_dots_1458                    = 0x1002899,
-               XK_braille_dots_2458                    = 0x100289a,
-               XK_braille_dots_12458                   = 0x100289b,
-               XK_braille_dots_3458                    = 0x100289c,
-               XK_braille_dots_13458                   = 0x100289d,
-               XK_braille_dots_23458                   = 0x100289e,
-               XK_braille_dots_123458                  = 0x100289f,
-               XK_braille_dots_68                              = 0x10028a0,
-               XK_braille_dots_168                             = 0x10028a1,
-               XK_braille_dots_268                             = 0x10028a2,
-               XK_braille_dots_1268                    = 0x10028a3,
-               XK_braille_dots_368                             = 0x10028a4,
-               XK_braille_dots_1368                    = 0x10028a5,
-               XK_braille_dots_2368                    = 0x10028a6,
-               XK_braille_dots_12368                   = 0x10028a7,
-               XK_braille_dots_468                             = 0x10028a8,
-               XK_braille_dots_1468                    = 0x10028a9,
-               XK_braille_dots_2468                    = 0x10028aa,
-               XK_braille_dots_12468                   = 0x10028ab,
-               XK_braille_dots_3468                    = 0x10028ac,
-               XK_braille_dots_13468                   = 0x10028ad,
-               XK_braille_dots_23468                   = 0x10028ae,
-               XK_braille_dots_123468                  = 0x10028af,
-               XK_braille_dots_568                             = 0x10028b0,
-               XK_braille_dots_1568                    = 0x10028b1,
-               XK_braille_dots_2568                    = 0x10028b2,
-               XK_braille_dots_12568                   = 0x10028b3,
-               XK_braille_dots_3568                    = 0x10028b4,
-               XK_braille_dots_13568                   = 0x10028b5,
-               XK_braille_dots_23568                   = 0x10028b6,
-               XK_braille_dots_123568                  = 0x10028b7,
-               XK_braille_dots_4568                    = 0x10028b8,
-               XK_braille_dots_14568                   = 0x10028b9,
-               XK_braille_dots_24568                   = 0x10028ba,
-               XK_braille_dots_124568                  = 0x10028bb,
-               XK_braille_dots_34568                   = 0x10028bc,
-               XK_braille_dots_134568                  = 0x10028bd,
-               XK_braille_dots_234568                  = 0x10028be,
-               XK_braille_dots_1234568                 = 0x10028bf,
-               XK_braille_dots_78                              = 0x10028c0,
-               XK_braille_dots_178                             = 0x10028c1,
-               XK_braille_dots_278                             = 0x10028c2,
-               XK_braille_dots_1278                    = 0x10028c3,
-               XK_braille_dots_378                             = 0x10028c4,
-               XK_braille_dots_1378                    = 0x10028c5,
-               XK_braille_dots_2378                    = 0x10028c6,
-               XK_braille_dots_12378                   = 0x10028c7,
-               XK_braille_dots_478                             = 0x10028c8,
-               XK_braille_dots_1478                    = 0x10028c9,
-               XK_braille_dots_2478                    = 0x10028ca,
-               XK_braille_dots_12478                   = 0x10028cb,
-               XK_braille_dots_3478                    = 0x10028cc,
-               XK_braille_dots_13478                   = 0x10028cd,
-               XK_braille_dots_23478                   = 0x10028ce,
-               XK_braille_dots_123478                  = 0x10028cf,
-               XK_braille_dots_578                             = 0x10028d0,
-               XK_braille_dots_1578                    = 0x10028d1,
-               XK_braille_dots_2578                    = 0x10028d2,
-               XK_braille_dots_12578                   = 0x10028d3,
-               XK_braille_dots_3578                    = 0x10028d4,
-               XK_braille_dots_13578                   = 0x10028d5,
-               XK_braille_dots_23578                   = 0x10028d6,
-               XK_braille_dots_123578                  = 0x10028d7,
-               XK_braille_dots_4578                    = 0x10028d8,
-               XK_braille_dots_14578                   = 0x10028d9,
-               XK_braille_dots_24578                   = 0x10028da,
-               XK_braille_dots_124578                  = 0x10028db,
-               XK_braille_dots_34578                   = 0x10028dc,
-               XK_braille_dots_134578                  = 0x10028dd,
-               XK_braille_dots_234578                  = 0x10028de,
-               XK_braille_dots_1234578                 = 0x10028df,
-               XK_braille_dots_678                             = 0x10028e0,
-               XK_braille_dots_1678                    = 0x10028e1,
-               XK_braille_dots_2678                    = 0x10028e2,
-               XK_braille_dots_12678                   = 0x10028e3,
-               XK_braille_dots_3678                    = 0x10028e4,
-               XK_braille_dots_13678                   = 0x10028e5,
-               XK_braille_dots_23678                   = 0x10028e6,
-               XK_braille_dots_123678                  = 0x10028e7,
-               XK_braille_dots_4678                    = 0x10028e8,
-               XK_braille_dots_14678                   = 0x10028e9,
-               XK_braille_dots_24678                   = 0x10028ea,
-               XK_braille_dots_124678                  = 0x10028eb,
-               XK_braille_dots_34678                   = 0x10028ec,
-               XK_braille_dots_134678                  = 0x10028ed,
-               XK_braille_dots_234678                  = 0x10028ee,
-               XK_braille_dots_1234678                 = 0x10028ef,
-               XK_braille_dots_5678                    = 0x10028f0,
-               XK_braille_dots_15678                   = 0x10028f1,
-               XK_braille_dots_25678                   = 0x10028f2,
-               XK_braille_dots_125678                  = 0x10028f3,
-               XK_braille_dots_35678                   = 0x10028f4,
-               XK_braille_dots_135678                  = 0x10028f5,
-               XK_braille_dots_235678                  = 0x10028f6,
-               XK_braille_dots_1235678                 = 0x10028f7,
-               XK_braille_dots_45678                   = 0x10028f8,
-               XK_braille_dots_145678                  = 0x10028f9,
-               XK_braille_dots_245678                  = 0x10028fa,
-               XK_braille_dots_1245678                 = 0x10028fb,
-               XK_braille_dots_345678                  = 0x10028fc,
-               XK_braille_dots_1345678                 = 0x10028fd,
-               XK_braille_dots_2345678                 = 0x10028fe,
-               XK_braille_dots_12345678                = 0x10028ff,
-               XK_Sinh_ng                                              = 0x1000d82,
-               XK_Sinh_h2                                              = 0x1000d83,
-               XK_Sinh_a                                               = 0x1000d85,
-               XK_Sinh_aa                                              = 0x1000d86,
-               XK_Sinh_ae                                              = 0x1000d87,
-               XK_Sinh_aee                                             = 0x1000d88,
-               XK_Sinh_i                                               = 0x1000d89,
-               XK_Sinh_ii                                              = 0x1000d8a,
-               XK_Sinh_u                                               = 0x1000d8b,
-               XK_Sinh_uu                                              = 0x1000d8c,
-               XK_Sinh_ri                                              = 0x1000d8d,
-               XK_Sinh_rii                                             = 0x1000d8e,
-               XK_Sinh_lu                                              = 0x1000d8f,
-               XK_Sinh_luu                                             = 0x1000d90,
-               XK_Sinh_e                                               = 0x1000d91,
-               XK_Sinh_ee                                              = 0x1000d92,
-               XK_Sinh_ai                                              = 0x1000d93,
-               XK_Sinh_o                                               = 0x1000d94,
-               XK_Sinh_oo                                              = 0x1000d95,
-               XK_Sinh_au                                              = 0x1000d96,
-               XK_Sinh_ka                                              = 0x1000d9a,
-               XK_Sinh_kha                                             = 0x1000d9b,
-               XK_Sinh_ga                                              = 0x1000d9c,
-               XK_Sinh_gha                                             = 0x1000d9d,
-               XK_Sinh_ng2                                             = 0x1000d9e,
-               XK_Sinh_nga                                             = 0x1000d9f,
-               XK_Sinh_ca                                              = 0x1000da0,
-               XK_Sinh_cha                                             = 0x1000da1,
-               XK_Sinh_ja                                              = 0x1000da2,
-               XK_Sinh_jha                                             = 0x1000da3,
-               XK_Sinh_nya                                             = 0x1000da4,
-               XK_Sinh_jnya                                    = 0x1000da5,
-               XK_Sinh_nja                                             = 0x1000da6,
-               XK_Sinh_tta                                             = 0x1000da7,
-               XK_Sinh_ttha                                    = 0x1000da8,
-               XK_Sinh_dda                                             = 0x1000da9,
-               XK_Sinh_ddha                                    = 0x1000daa,
-               XK_Sinh_nna                                             = 0x1000dab,
-               XK_Sinh_ndda                                    = 0x1000dac,
-               XK_Sinh_tha                                             = 0x1000dad,
-               XK_Sinh_thha                                    = 0x1000dae,
-               XK_Sinh_dha                                             = 0x1000daf,
-               XK_Sinh_dhha                                    = 0x1000db0,
-               XK_Sinh_na                                              = 0x1000db1,
-               XK_Sinh_ndha                                    = 0x1000db3,
-               XK_Sinh_pa                                              = 0x1000db4,
-               XK_Sinh_pha                                             = 0x1000db5,
-               XK_Sinh_ba                                              = 0x1000db6,
-               XK_Sinh_bha                                             = 0x1000db7,
-               XK_Sinh_ma                                              = 0x1000db8,
-               XK_Sinh_mba                                             = 0x1000db9,
-               XK_Sinh_ya                                              = 0x1000dba,
-               XK_Sinh_ra                                              = 0x1000dbb,
-               XK_Sinh_la                                              = 0x1000dbd,
-               XK_Sinh_va                                              = 0x1000dc0,
-               XK_Sinh_sha                                             = 0x1000dc1,
-               XK_Sinh_ssha                                    = 0x1000dc2,
-               XK_Sinh_sa                                              = 0x1000dc3,
-               XK_Sinh_ha                                              = 0x1000dc4,
-               XK_Sinh_lla                                             = 0x1000dc5,
-               XK_Sinh_fa                                              = 0x1000dc6,
-               XK_Sinh_al                                              = 0x1000dca,
-               XK_Sinh_aa2                                             = 0x1000dcf,
-               XK_Sinh_ae2                                             = 0x1000dd0,
-               XK_Sinh_aee2                                    = 0x1000dd1,
-               XK_Sinh_i2                                              = 0x1000dd2,
-               XK_Sinh_ii2                                             = 0x1000dd3,
-               XK_Sinh_u2                                              = 0x1000dd4,
-               XK_Sinh_uu2                                             = 0x1000dd6,
-               XK_Sinh_ru2                                             = 0x1000dd8,
-               XK_Sinh_e2                                              = 0x1000dd9,
-               XK_Sinh_ee2                                             = 0x1000dda,
-               XK_Sinh_ai2                                             = 0x1000ddb,
-               XK_Sinh_o2                                              = 0x1000ddc,
-               XK_Sinh_oo2                                             = 0x1000ddd,
-               XK_Sinh_au2                                             = 0x1000dde,
-               XK_Sinh_lu2                                             = 0x1000ddf,
-               XK_Sinh_ruu2                                    = 0x1000df2,
-               XK_Sinh_luu2                                    = 0x1000df3,
-               XK_Sinh_kunddaliya                              = 0x1000df4,
-       }
-}
diff --git a/src/backends/xlib/XLibBackend.cs b/src/backends/xlib/XLibBackend.cs
deleted file mode 100644 (file)
index a123e20..0000000
+++ /dev/null
@@ -1,183 +0,0 @@
-//
-// XLibBackend.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp_bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-using System;
-using System.Diagnostics;
-using System.Runtime.InteropServices;
-
-namespace Crow.XLib
-{
-       public class XLibBackend : IBackend
-       {
-               #region pinvoke
-               [DllImportAttribute("X11")]
-               static extern int XInitThreads();
-               [DllImportAttribute("X11")]
-               internal static extern IntPtr XOpenDisplay(IntPtr displayName);
-               [DllImportAttribute("X11")]
-               internal static extern IntPtr XCloseDisplay(IntPtr disp);
-               [DllImportAttribute("X11")]
-               static extern Int32 XDefaultScreen(IntPtr disp);
-               [DllImportAttribute("X11")]
-               static extern IntPtr XDefaultRootWindow(IntPtr disp);
-               [DllImportAttribute("X11")]
-               static extern UInt32 XDefaultDepth (IntPtr disp, Int32 screen);
-               [DllImportAttribute("X11")]
-               static extern IntPtr XDefaultVisual(IntPtr disp, Int32 screen);
-               [DllImportAttribute("X11")]
-               static extern IntPtr XCreateSimpleWindow(IntPtr disp, IntPtr rootWindow, Int32 x, Int32 y, UInt32 width, UInt32 height,
-                       UInt32 borderWidth, IntPtr border, IntPtr background);
-               [DllImportAttribute("X11")]
-               static extern IntPtr XCreatePixmap(IntPtr disp, IntPtr rootWindow, UInt32 width, UInt32 height, UInt32 depth);
-               [DllImportAttribute("X11")]
-               static extern IntPtr XFreePixmap(IntPtr disp, IntPtr pixmap);
-               [DllImportAttribute("X11")]
-               static extern IntPtr XFree(IntPtr data);
-               [DllImportAttribute("X11")]
-               static extern Int32 XSelectInput(IntPtr disp, IntPtr win, EventMask eventMask);
-               [DllImportAttribute("X11")]
-               static extern Int32 XMapWindow(IntPtr disp, IntPtr win);
-               [DllImportAttribute("X11")]
-               static extern int XPending (IntPtr disp);
-               [DllImportAttribute("X11")]
-               static extern IntPtr XNextEvent(IntPtr disp, ref XEvent xevent);
-               [DllImportAttribute("X11")]
-               static extern Int32 XSync(IntPtr disp, int discard);
-               [DllImportAttribute("X11")]
-               static extern int XConnectionNumber(IntPtr disp);
-               [DllImportAttribute("X11")]
-               static extern IntPtr XSetErrorHandler(XErrorHandler error_handler);
-
-               #endregion
-
-               IntPtr xDisp, xwinHnd, xDefaultRootWin, xDefaultVisual;
-               UInt32 xDefaultDepth;
-               Int32 xScreen;
-               XErrorHandler errorHnd;
-
-               Interface iFace;
-
-               #region IBackend implementation
-
-               public void Init (Interface _iFace)
-               {
-                       iFace = _iFace;
-                       XInitThreads ();
-                       xDisp = XOpenDisplay(IntPtr.Zero);
-                       if (xDisp == IntPtr.Zero)
-                               throw new NotSupportedException("[XLib] Failed to open display.");
-
-                       xScreen = XDefaultScreen(xDisp);
-
-                       xDefaultRootWin = XDefaultRootWindow (xDisp);
-                       xDefaultVisual = XDefaultVisual (xDisp, xScreen);
-                       xDefaultDepth = XDefaultDepth (xDisp, xScreen);
-
-                       xwinHnd = XCreateSimpleWindow (xDisp, xDefaultRootWin,
-                               0, 0, (uint)iFace.ClientRectangle.Width, (uint)iFace.ClientRectangle.Height, 0, IntPtr.Zero, IntPtr.Zero);
-                       if (xwinHnd == IntPtr.Zero)
-                               throw new NotSupportedException("[XLib] Failed to create window.");
-
-                       XSelectInput (xDisp, xwinHnd, EventMask.ExposureMask | 
-                               EventMask.KeyPressMask  | EventMask.KeyReleaseMask | 
-                               EventMask.PointerMotionMask | EventMask.ButtonPressMask | EventMask.ButtonReleaseMask);
-
-                       XMapWindow (xDisp, xwinHnd);
-
-                       iFace.Keyboard = new Crow.XLib.X11Keyboard (xDisp);
-
-                       iFace.surf = new Cairo.XlibSurface (xDisp, xwinHnd, xDefaultVisual, iFace.ClientRectangle.Width, iFace.ClientRectangle.Height);
-
-                       errorHnd = new XErrorHandler (HandleError);
-                       XSetErrorHandler (errorHnd);
-               }
-
-               public void CleanUp ()
-               {
-                       iFace.Keyboard.Destroy ();
-
-                       XCloseDisplay (xDisp);
-               }
-               public void Flush () {
-                       XSync (xDisp, 0);
-               }
-               public void ProcessEvents ()
-               {
-                       if (XPending (xDisp) > 0) {
-                               XEvent xevent = new XEvent ();
-                               XNextEvent (xDisp, ref xevent);
-
-                               switch (xevent.type) {
-                               case XEventName.Expose:
-                                       iFace.ProcessResize (new Rectangle (0, 0, xevent.ExposeEvent.width, xevent.ExposeEvent.height));
-                                       break;
-                               case XEventName.KeyPress:
-                                       iFace.Keyboard.HandleEvent ((uint)xevent.KeyEvent.keycode, true);
-                                       break;
-                               case XEventName.KeyRelease:
-                                       iFace.Keyboard.HandleEvent ((uint)xevent.KeyEvent.keycode, false);
-                                       break;
-                               case XEventName.MotionNotify:
-                                       //Debug.WriteLine ("motion: ({0},{1})", xevent.MotionEvent.x, xevent.MotionEvent.y);
-                                       iFace.ProcessMouseMove (xevent.MotionEvent.x, xevent.MotionEvent.y);
-                                       break;
-                               case XEventName.ButtonPress:
-                                       //Debug.WriteLine ("button press: {0}", xevent.ButtonEvent.button);
-                                       if (xevent.ButtonEvent.button == 4)
-                                               iFace.ProcessMouseWheelChanged (Interface.WheelIncrement);
-                                       else if(xevent.ButtonEvent.button == 5)
-                                               iFace.ProcessMouseWheelChanged (-Interface.WheelIncrement);
-                                       else
-                                               iFace.ProcessMouseButtonDown (xevent.ButtonEvent.button - 1);
-                                       break;
-                               case XEventName.ButtonRelease:
-                                       //Debug.WriteLine ("button release: {0}", xevent.ButtonEvent.button);
-                                       iFace.ProcessMouseButtonUp (xevent.ButtonEvent.button - 1);
-                                       break;
-
-                               }
-                       }
-               }
-
-               #endregion
-
-               int HandleError (IntPtr display, ref XErrorEvent error_event)
-               {
-                       /*if (ErrorExceptions)
-                               throw new X11Exception (error_event.display, error_event.resourceid,
-                                       error_event.serial, error_event.error_code,
-                                       error_event.request_code, error_event.minor_code);
-                       else
-                               Console.WriteLine ("X11 Error encountered: {0}{1}\n",
-                                       X11Exception.GetMessage(error_event.display, error_event.resourceid,
-                                               error_event.serial, error_event.error_code,
-                                               error_event.request_code, error_event.minor_code),
-                                       WhereString());*/
-                       Debug.WriteLine ("XERROR {0}", error_event.error_code);
-                       return 0;
-               }
-       }
-}
-
diff --git a/src/debug/DbgEventTypeColors.cs b/src/debug/DbgEventTypeColors.cs
deleted file mode 100644 (file)
index e088118..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-//
-// DbgEventTypeColors.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp_bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-using System;
-using Cairo;
-using System.Linq;
-
-namespace Crow
-{
-       #if DEBUG_LOG
-       public class DbgEventTypeColors : GraphicObject
-       {
-               protected override void onDraw (Context gr)
-               {
-                       base.onDraw (gr);
-
-                       gr.SelectFontFace (Font.Name, Font.Slant, Font.Wheight);
-                       gr.SetFontSize (Font.Size);
-                       gr.FontOptions = Interface.FontRenderingOptions;
-                       gr.Antialias = Interface.Antialias;
-
-                       DbgEvtType[] types = DbgLogViewer.colors.Keys.ToArray ();
-                       Color[] colors = DbgLogViewer.colors.Values.ToArray ();
-
-                       Rectangle r = ClientRectangle;
-                       FontExtents fe = gr.FontExtents;
-
-                       double penY = fe.Height + r.Top;
-                       double penX = (double)r.Left;
-
-
-                       for (int i = 0; i < types.Length; i++) {
-                               string n = types [i].ToString();
-                               Color c = colors[i];
-                               Foreground.SetAsSource (gr);
-
-                               gr.MoveTo (penX + 25.0, penY - fe.Descent);
-                               gr.ShowText (n);
-
-                               Rectangle rc = new Rectangle((int)penX, (int)(penY - fe.Height), 20, (int)fe.Height);
-                               rc.Inflate (-2);
-                               gr.Rectangle (rc);
-                               gr.StrokePreserve ();
-
-                               gr.SetSourceColor (c);
-                               gr.Fill ();
-
-                               penY += fe.Height;
-
-                       }
-               }
-       }
-       #endif
-}
-
diff --git a/src/debug/DbgLogViewer.cs b/src/debug/DbgLogViewer.cs
deleted file mode 100644 (file)
index 6124d6f..0000000
+++ /dev/null
@@ -1,646 +0,0 @@
-//
-// DbgLogViewer.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp_bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
-using Cairo;
-
-#if DEBUG_LOG
-namespace Crow
-{
-       public class DbgLogViewer : ScrollingObject
-       {
-               public static Dictionary<DbgEvtType,Color> colors;
-
-               public static Configuration colorsConf = new Configuration("dbgcolor.conf");
-
-               #region debug viewer private classes
-               public class DbgData {
-                       public int objInstanceNum;
-                       public LayoutingType layout;
-                       public LayoutingQueueItem.Result result;
-
-                       public DbgData (int _obj) {
-                               objInstanceNum = _obj;
-                       }
-               }
-               public class DbgEvent {
-                       public long begin, end;
-                       public DbgEvtType type;
-                       public DbgData data = null;
-
-                       public DbgEvent() {}
-
-                       public static DbgEvent Parse (string str) {
-                               if (str == null)
-                                       return null;
-                               string[] tmp = str.Trim().Split(';');
-
-                               DbgEvent evt = new DbgEvent ();
-                               evt.begin = long.Parse (tmp [0]);
-                               evt.end = long.Parse (tmp [1]);
-                               evt.type = (DbgEvtType)Enum.Parse (typeof(DbgEvtType), tmp [2]);
-
-                               if (evt.type.HasFlag (DbgEvtType.GraphicObject)) {
-                                       evt.data = new DbgData (int.Parse (tmp [3]));
-                                       if (evt.type.HasFlag (DbgEvtType.GOLayouting)) {
-                                               evt.data.layout = (LayoutingType)Enum.Parse (typeof(LayoutingType), tmp [4]);
-                                               if (evt.type == DbgEvtType.GOProcessLayouting)
-                                                       evt.data.result = (LayoutingQueueItem.Result)Enum.Parse (typeof(LayoutingQueueItem.Result), tmp [5]);                                                                           
-                                       }
-                               }
-                               return evt;
-                       }
-               }
-               class DbgGo {
-                       public int listIndex;//prevent doing an IndexOf on list for each event to know y pos on screen
-                       public int instanceNum;//class instantiation order, used to bind events to objs
-                       public string name;
-                       //0 is the main graphic tree, for other obj tree not added to main tree, it range from 1->n
-                       //useful to track events for obj shown later, not on start
-                       public int treeIndex;
-                       public int yIndex;//index in parenting, the whole main graphic tree is one continuous suite
-                       public int xLevel;//depth
-
-                       public List<DbgEvent> events = new List<DbgEvent>();
-
-                       public static DbgGo Parse (string str) {
-                               DbgGo g = new DbgGo ();
-                               if (str == null)
-                                       return null;
-                               string[] tmp = str.Trim().Split(';');
-                               g.instanceNum = int.Parse (tmp [0]);
-                               g.name = tmp [1];
-                               g.yIndex = int.Parse (tmp [2]);
-                               g.xLevel = int.Parse (tmp [3]);
-                               return g;
-                       }
-
-               }
-               #endregion
-
-               public static void reloadColors () {
-                       colors = new Dictionary<DbgEvtType, Color>();
-                       foreach (string n in colorsConf.Names) {
-                               DbgEvtType t = (DbgEvtType)Enum.Parse (typeof(DbgEvtType), n);
-                               Color c = colorsConf.Get<Color> (n);
-                               colors.Add (t, c);
-                       }
-
-               }
-               #region CTOR
-               static DbgLogViewer() {
-                       reloadColors ();
-               }
-               protected DbgLogViewer () : base(){}
-               public DbgLogViewer (Interface iface) : base(iface){}
-               #endregion
-
-               FontExtents fe;
-
-               double xScale = 1.0/512.0, yScale = 1.0, leftMargin, topMargin = 0.0;
-               string logFile;
-
-               List<DbgEvent> events;//global events
-               List<DbgGo> objs;
-
-               long currentTick = 0, selStart = -1, selEnd = -1, minTicks = 0, maxTicks = 0, visibleTicks = 0;
-               int currentLine = -1;
-               int visibleLines;
-
-               public string LogFile {
-                       get { return logFile; }
-                       set {
-                               if (logFile == value)
-                                       return;
-                               logFile = value;
-
-                               loadDebugFile ();
-
-
-                               NotifyValueChanged ("LogFile", logFile);
-                               RegisterForGraphicUpdate ();
-                       }
-               }
-               public double XScale {
-                       get { return xScale; }
-                       set {
-                               if (xScale == value)
-                                       return;
-                               xScale = value;
-                               NotifyValueChanged ("XScale", xScale);
-                               updateVisibleTicks ();
-                               RegisterForGraphicUpdate ();
-                       }
-               }
-               public double YScale {
-                       get { return yScale; }
-                       set {
-                               if (yScale == value)
-                                       return;
-                               yScale = value;
-                               NotifyValueChanged ("YScale", yScale);
-                               RegisterForGraphicUpdate ();
-                       }
-               }
-
-
-               void storeEvent (DbgEvent evt) {
-                       if (evt.data == null)//global events
-                               events.Add (evt);
-                       else {
-                               DbgGo go = objs.Where (o => o.instanceNum == evt.data.objInstanceNum).FirstOrDefault ();
-                               if (go == null)
-                                       Console.WriteLine ("Unknown instance: " + evt.data.objInstanceNum);
-                               else
-                                       go.events.Add (evt);                                            
-                       }
-               }
-
-               void loadDebugFile() {
-                       if (!File.Exists (logFile))
-                               return;
-
-                       events = new List<DbgEvent>();
-                       objs = new List<DbgGo> ();
-                       minTicks = maxTicks = 0;
-                       leftMargin = topMargin = 0.0;
-
-                       using (ImageSurface img = new ImageSurface (Format.Argb32, 1, 1)) {
-                               using (Context gr = new Context (img)) {
-                                       double maxNameWidth = 0.0;
-
-                                       gr.SelectFontFace (Font.Name, Font.Slant, Font.Wheight);
-                                       gr.SetFontSize (Font.Size);
-
-                                       using (StreamReader s = new StreamReader (logFile)) {
-                                               if (s.ReadLine () != "[GraphicObjects]")                                        
-                                                       return;                         
-                                               while (!s.EndOfStream) {
-                                                       string l = s.ReadLine ();
-                                                       if (l == "[Events]")
-                                                               break;
-                                                       DbgGo o = DbgGo.Parse (l);
-                                                       objs.Add (o);
-                                                       double nameWidth = gr.TextExtents (o.name).Width + 5.0 * o.xLevel;
-                                                       if (nameWidth > maxNameWidth)
-                                                               maxNameWidth = nameWidth;
-                                               }
-                                               if (!s.EndOfStream) {
-                                                       DbgEvent firstEvt = DbgEvent.Parse (s.ReadLine ());
-                                                       storeEvent (firstEvt);
-                                                       minTicks = firstEvt.begin;
-                                               }
-
-                                               if (!s.EndOfStream) {
-                                                       while (true) {
-                                                               DbgLogViewer.DbgEvent evt = DbgEvent.Parse (s.ReadLine ());
-                                                               storeEvent (evt);
-                                                               if (s.EndOfStream) {
-                                                                       maxTicks = evt.end;
-                                                                       break;
-                                                               }
-                                                       }
-                                               }
-                                       }
-
-                                       leftMargin = 2.5 + maxNameWidth;
-
-                                       fe = gr.FontExtents;
-
-                                       topMargin = 2.0 * fe.Height;
-
-                                       updateVisibleLines ();
-                                       updateVisibleTicks ();
-                               }
-                       }
-
-               }
-               void updateVisibleLines(){
-                       visibleLines = (int)Math.Floor (((double)ClientRectangle.Height - topMargin) / fe.Height);
-                       NotifyValueChanged ("VisibleLines", visibleLines);
-                       updateMaxScrollY ();
-               }
-               void updateVisibleTicks() {
-                       visibleTicks = Math.Max (0, (long)((double)(ClientRectangle.Width - leftMargin) / XScale));
-                       NotifyValueChanged ("VisibleTicks", visibleTicks);
-                       updateMaxScrollX ();
-               }
-               /*
-               void updateVisibleColumns(){
-                       visibleColumns = (int)Math.Floor ((double)(ClientRectangle.Width - leftMargin)/ fe.MaxXAdvance);
-                       NotifyValueChanged ("VisibleColumns", visibleColumns);
-                       updateMaxScrollX ();
-               }
-               void updateMaxScrollX () {
-                       MaxScrollX = Math.Max (0, buffer.longestLineCharCount - visibleColumns);
-                       if (buffer.longestLineCharCount > 0)
-                               NotifyValueChanged ("ChildWidthRatio", Slot.Width * visibleColumns / buffer.longestLineCharCount);                      
-               }*/
-
-               void updateMaxScrollX () {
-                       if (objs == null)
-                               MaxScrollX = 0;
-                       else                            
-                               MaxScrollX =  (int)Math.Max(0L, maxTicks - minTicks - visibleTicks);
-               }
-               void updateMaxScrollY () {
-                       if (objs == null)
-                               MaxScrollY = 0;
-                       else                            
-                               MaxScrollY =  Math.Max(0, objs.Count - visibleLines);
-               }
-
-
-               public override Font Font {
-                       get { return base.Font; }
-                       set {
-                               base.Font = value;
-                               loadDebugFile ();
-                       }
-               }
-
-               public override int ScrollY {
-                       get {
-                               return base.ScrollY;
-                       }
-                       set {
-                               base.ScrollY = value;
-
-                               if (objs == null)
-                                       return;
-                               
-                               Rectangle cb = ClientRectangle;
-                               cb.Left += (int)leftMargin;
-                               cb.Width -= (int)leftMargin;
-                               cb.Y += (int)topMargin;
-                               cb.Height -= (int)topMargin;
-
-                               if (mousePos.Y < cb.Top || mousePos.Y > cb.Bottom)
-                                       currentLine = -1;
-                               else
-                                       currentLine = (int)((double)(mousePos.Y - cb.Top) / fe.Height) + ScrollY;
-
-                               NotifyValueChanged ("CurrentLine", currentLine);
-
-                       }
-               }
-
-
-
-               protected override void onDraw (Cairo.Context gr)
-               {
-                       base.onDraw (gr);
-
-                       gr.SelectFontFace (Font.Name, Font.Slant, Font.Wheight);
-                       gr.SetFontSize (Font.Size);
-                       gr.FontOptions = Interface.FontRenderingOptions;
-                       gr.Antialias = Cairo.Antialias.None;
-
-                       if (objs == null)
-                               return;
-
-                       gr.LineWidth = 1.0;
-
-                       Rectangle cb = ClientRectangle;
-
-                       double penY = topMargin + ClientRectangle.Top;
-
-                       for (int i = 0; i < visibleLines; i++) {
-                               if (i + ScrollY >= objs.Count)
-                                       break;
-                               DbgGo g = objs [i + ScrollY];
-
-
-                               foreach (DbgEvent evt in g.events) {
-                                       
-
-                                       if (evt.end - minTicks <= ScrollX)
-                                               continue;
-                                       if (evt.begin - minTicks > ScrollX + visibleTicks)
-                                               break;
-
-                                       double x = xScale * (evt.begin - minTicks - ScrollX) ;
-                                       double w = Math.Max (Math.Max(2.0, 2.0 * xScale), (double)(evt.end - evt.begin) * xScale);
-                                       if (x < 0.0) {
-                                               w += x;
-                                               x = 0.0;
-                                       }
-                                       x += leftMargin + cb.Left;
-                                       double rightDiff = x + w - cb.Right;
-                                       if (rightDiff > 0)
-                                               w -= rightDiff;
-                                       //if (x + w > cb.Right)
-                                       //      continue;
-
-                                       Color c = Color.Black;
-
-                                       if (evt.type == DbgEvtType.GOProcessLayouting) {                                                        
-                                               switch (evt.data.result) {
-                                               case LayoutingQueueItem.Result.Success:
-                                                       c = Crow.Color.Green;
-                                                       break;
-                                               case LayoutingQueueItem.Result.Deleted:
-                                                       c = Crow.Color.Red;
-                                                       break;
-                                               case LayoutingQueueItem.Result.Discarded:
-                                                       c = Crow.Color.OrangeRed;
-                                                       break;
-                                               case LayoutingQueueItem.Result.Requeued:
-                                                       c = Crow.Color.Orange;
-                                                       break;
-                                               }
-                                       } else if (colors.ContainsKey (evt.type))
-                                               c = colors [evt.type];
-                                       else
-                                               System.Diagnostics.Debugger.Break ();
-
-                                       gr.SetSourceColor (c);
-
-                                       gr.Rectangle (x, penY, w, fe.Height);
-                                       gr.Fill ();
-                               }
-
-                               penY += fe.Height;
-
-                               gr.SetSourceColor (Crow.Color.Jet);
-                               gr.MoveTo (cb.X, penY - 0.5);
-                               gr.LineTo (cb.Right, penY - 0.5);
-                               gr.Stroke ();
-
-                               double penX = 5.0 * g.xLevel + cb.Left;
-
-                               if (g.yIndex == 0)
-                                       gr.SetSourceColor (Crow.Color.LightSalmon);
-                               else
-                                       Foreground.SetAsSource (gr);
-
-                               gr.MoveTo (penX, penY - gr.FontExtents.Descent);
-                               gr.ShowText (g.name);
-
-                               gr.SetSourceColor (Crow.Color.White);
-                               gr.MoveTo (cb.X, penY - gr.FontExtents.Descent);
-                               gr.ShowText ((i+ ScrollY).ToString());
-
-                       }
-
-
-                       gr.MoveTo (cb.Left, topMargin - 0.5 + cb.Top);
-                       gr.LineTo (cb.Right, topMargin - 0.5 + cb.Top);
-
-                       gr.MoveTo (leftMargin + cb.Left, cb.Top);
-                       gr.LineTo (leftMargin + cb.Left, cb.Bottom);
-                       gr.SetSourceColor (Crow.Color.Grey);
-
-                       penY = topMargin + ClientRectangle.Top;
-
-                       //graduation
-                       int largeGrad = int.Parse ("1" + new string ('0', visibleTicks.ToString ().Length - 1));
-                       int smallGrad = Math.Max (1, largeGrad / 10);
-
-                       long firstVisibleTicks = minTicks + ScrollX;
-                       long curGrad = firstVisibleTicks - firstVisibleTicks % smallGrad + smallGrad;
-
-                       long gg = curGrad - ScrollX - minTicks;
-                       while (gg < visibleTicks ) {
-                               double x = (double)gg * xScale + leftMargin + cb.Left;
-
-                               gr.MoveTo (x, penY - 0.5);
-                               if (curGrad % largeGrad == 0) { 
-                                       gr.LineTo (x, penY - 8.5);
-                                       string str = curGrad.ToString ();
-                                       TextExtents te = gr.TextExtents (str);
-                                       gr.RelMoveTo (-0.5 * te.Width, -2.0);
-                                       gr.ShowText (str);
-                               }else
-                                       gr.LineTo (x, penY - 2.5);
-
-                               curGrad += smallGrad;
-                               gg = curGrad - ScrollX - minTicks;
-                       }
-
-                       gr.Stroke ();
-
-                       //global events
-                       foreach (DbgEvent evt in events) {
-                               if (evt.begin - minTicks <= ScrollX)
-                                       continue;
-                               double x = xScale * (evt.begin - minTicks - ScrollX) ;
-                               x += leftMargin + cb.Left;
-
-                               gr.SetSourceColor (Crow.Color.Yellow);
-                               gr.MoveTo (x, penY);
-                               gr.LineTo (x, cb.Bottom);
-                               gr.Stroke ();
-                               string s = evt.type.ToString () [10].ToString ();
-                               Cairo.TextExtents te = gr.TextExtents (s);
-                               gr.Rectangle (x - 0.5 * te.Width , penY - te.Height, te.Width, te.Height);
-                               gr.Fill ();
-                               gr.MoveTo (x- 0.5 * te.Width, penY - gr.FontExtents.Descent);
-                               gr.SetSourceColor (Crow.Color.Jet);
-                               gr.ShowText (s);
-
-                       }
-
-               }
-               public override void Paint (ref Cairo.Context ctx)
-               {
-                       base.Paint (ref ctx);
-
-                       Rectangle r = new Rectangle(mousePos.X, 0, 1, Slot.Height);
-                       Rectangle ctxR = ContextCoordinates (r);
-                       Rectangle cb = ClientRectangle;
-
-                       ctx.Rectangle (ctxR);
-                       ctx.SetSourceColor (Color.CornflowerBlue);
-                       ctx.Fill();
-
-                       ctx.SelectFontFace (Font.Name, Font.Slant, Font.Wheight);
-                       ctx.SetFontSize (Font.Size);
-                       ctx.FontOptions = Interface.FontRenderingOptions;
-                       ctx.Antialias = Interface.Antialias;
-
-                       ctx.MoveTo (ctxR.X, ctxR.Y + fe.Height);
-                       ctx.ShowText (currentTick.ToString ());
-
-                       ctx.Operator = Cairo.Operator.Add;
-
-                       if (currentLine >= 0) {
-                               r = new Rectangle (cb.Left, (currentLine + 2 - ScrollY) * (int)fe.Height + cb.Top, cb.Width, (int)fe.Height);
-
-                               ctx.Operator = Cairo.Operator.Add;
-                               ctx.SetSourceRGBA (0.1, 0.1, 0.1, 0.4);
-                               ctx.Rectangle (ContextCoordinates (r));
-                               ctx.Fill ();
-                       }
-
-                       if (selStart < 0) {
-                               ctx.Operator = Cairo.Operator.Over;
-                               return;
-                       }
-                       double selStartX = (double)(selStart - ScrollX - minTicks) * xScale + leftMargin + cb.Left;
-                       double selEndX = (selEnd >= 0) ? (double)(selEnd - ScrollX - minTicks) * xScale + leftMargin + cb.Left :
-                               (double)(currentTick - ScrollX - minTicks) * xScale + leftMargin + cb.Left;
-
-                       if (selStartX < selEndX) {
-                               ctxR.X = (int)selStartX;
-                               ctxR.Width = (int)(selEndX - selStartX);
-                       } else {
-                               ctxR.X = (int)selEndX;
-                               ctxR.Width = (int)(selStartX - selEndX);
-                       }
-
-                       ctxR.Width = Math.Max (1, ctxR.Width);
-                       ctx.Rectangle (ctxR);
-                       //ctx.SetSourceColor (Color.LightYellow);
-                       ctx.SetSourceColor (Color.Jet);
-                       ctx.Fill();
-                       ctx.Operator = Cairo.Operator.Over;
-
-               }
-               public override void OnLayoutChanges (LayoutingType layoutType)
-               {
-                       base.OnLayoutChanges (layoutType);
-                       switch (layoutType) {
-                       case LayoutingType.Width:
-                               updateVisibleTicks ();
-                               break;
-                       case LayoutingType.Height:
-                               updateVisibleLines ();
-                               break;
-                       }
-               }
-
-               Point mousePos;
-               void updateMouseLocalPos(Point mPos){
-                       Rectangle r = ScreenCoordinates (Slot);
-                       Rectangle cb = ClientRectangle;
-                       cb.Left += (int)leftMargin;
-                       cb.Width -= (int)leftMargin;
-                       cb.Y += (int)topMargin;
-                       cb.Height -= (int)topMargin;
-
-                       mousePos = mPos - r.Position;
-
-                       mousePos.X = Math.Max(cb.X, mousePos.X);
-                       mousePos.X = Math.Min(cb.Right, mousePos.X);
-
-                       if (mousePos.Y < cb.Top || mousePos.Y > cb.Bottom)
-                               currentLine = -1;
-                       else
-                               currentLine = (int)((double)(mousePos.Y - cb.Top) / fe.Height) + ScrollY;
-
-                       NotifyValueChanged ("CurrentLine", currentLine);
-                       
-                       mousePos.Y = Math.Max(cb.Y, mousePos.Y);
-                       mousePos.Y = Math.Min(cb.Bottom, mousePos.Y);
-
-                       currentTick = (int)((double)(mousePos.X - cb.X) / xScale) + minTicks + ScrollX;
-
-               }
-               public override void onMouseLeave (object sender, MouseMoveEventArgs e)
-               {
-                       base.onMouseLeave (sender, e);
-                       currentLine = -1;
-                       currentTick = 0;
-               }
-               public override void onMouseMove (object sender, MouseMoveEventArgs e)
-               {
-                       base.onMouseMove (sender, e);
-                       updateMouseLocalPos (e.Position);
-
-                       if (selStart >= 0 && IFace.Mouse.IsButtonDown(MouseButton.Left))
-                               selEnd = currentTick;
-
-                       if (RegisteredLayoutings == LayoutingType.None && !IsDirty)
-                               IFace.EnqueueForRepaint (this);
-                       
-               }
-               public override void onMouseDown (object sender, MouseButtonEventArgs e)
-               {
-                       base.onMouseDown (sender, e);
-
-                       selStart = currentTick;
-                       selEnd = -1;
-
-                       RegisterForRedraw ();
-               }
-               public override void onMouseUp (object sender, MouseButtonEventArgs e)
-               {
-                       base.onMouseUp (sender, e);
-                       if (selStart == currentTick) {
-                               selStart = -1;
-                               selEnd = -1;
-                       }else
-                               selEnd = currentTick;
-                       RegisterForRedraw ();
-               }
-
-               /// <summary> Process scrolling vertically, or if shift is down, vertically </summary>
-               public override void onMouseWheel (object sender, MouseWheelEventArgs e)
-               {                       
-                       //base.onMouseWheel (sender, e);
-
-                       if (IFace.Keyboard.Shift)
-                               ScrollX -= (int)((double)(e.Delta * MouseWheelSpeed) / xScale);
-                       else if (IFace.Keyboard.Ctrl) {
-                               if (e.Delta > 0) {
-                                       XScale *= 2.0;
-                               } else {
-                                       if (MaxScrollX > 0)
-                                               XScale *= 0.5;
-                               }
-                               ScrollX = (int)(currentTick - (int)((double)Math.Max(0, mousePos.X - (int)leftMargin) / xScale) - minTicks);
-                       }else
-                               ScrollY -= e.Delta * MouseWheelSpeed;
-               }
-
-               public override void onKeyDown (object sender, KeyEventArgs e)
-               {
-                       base.onKeyDown (sender, e);
-
-                       if (e.Key == Key.F3) {
-                               if (selEnd < 0)
-                                       return;
-                               if (selEnd < selStart)
-                                       zoom (selEnd, selStart);
-                               else
-                                       zoom (selStart, selEnd);
-                               selEnd = selStart = -1;
-                       }
-               }
-
-               void zoom (long start, long end) {                                              
-                       //Rectangle cb = ClientRectangle;
-                       //cb.X += (int)leftMargin;
-                       XScale = ((double)ClientRectangle.Width - leftMargin)/(end - start);
-                       ScrollX = (int)(start - minTicks);
-               }
-       }
-}
-#endif
-
diff --git a/src/debug/DebugLogViewer.cs b/src/debug/DebugLogViewer.cs
deleted file mode 100644 (file)
index 36a29f9..0000000
+++ /dev/null
@@ -1,1177 +0,0 @@
-//
-// ScrollingTextBox.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-using System;
-using System.Xml.Serialization;
-using System.ComponentModel;
-using System.Collections;
-using Cairo;
-using System.Text;
-using System.Collections.Generic;
-using System.Text.RegularExpressions;
-using System.Linq;
-using System.Diagnostics;
-using System.IO;
-using System.Threading;
-
-namespace Crow
-{
-       /// <summary>
-       /// Scrolling text box optimized for monospace fonts, for coding
-       /// </summary>
-       public class DebugLogViewer : ScrollingObject
-       {               
-               #region CTOR
-               public DebugLogViewer (): base()
-               {
-                       
-               }
-               #endregion
-
-               string oldSource = "";
-               //save requested position on error, and try it on next move
-               int requestedLine = 0, requestedCol = 0;
-               volatile bool isDirty = false;
-
-               const int leftMarginGap = 10;//gap between items in margin and text
-               const int foldSize = 9;//folding rectangles size
-               const int foldHSpace = 4;//folding level tabulation x
-               int foldMargin { get { return parser == null ? 0 : parser.SyntacticTreeMaxDepth * foldHSpace; }}//folding margin size
-
-               #region private and protected fields
-               bool foldingEnabled = true;
-               int leftMargin = 0;     //margin used to display line numbers, folding errors,etc...
-               int visibleLines = 1;
-               int visibleColumns = 1;
-               int firstPrintedLine = -1;
-               int printedCurrentLine = 0;//Index of the currentline in the PrintedLines array
-
-               CodeBuffer buffer;
-               BufferParser parser;
-               List<CodeLine> PrintedLines;//list of lines visible in the Editor depending on scrolling and folding
-
-               Dictionary<int, TextFormatting> formatting = new Dictionary<int, TextFormatting>();
-               Dictionary<string, string> parsing = new Dictionary<string, string>();
-
-               Color selBackground;
-               Color selForeground;
-               int selStartCol;
-               int selEndCol;
-
-               protected Rectangle rText;
-               protected FontExtents fe;
-               protected TextExtents te;
-
-               Point mouseLocalPos;
-               bool doubleClicked = false;
-               #endregion
-
-               void measureLeftMargin () {
-                       leftMargin = 0;
-                       if (PrintLineNumbers)
-                               leftMargin += (int)Math.Ceiling((double)buffer.LineCount.ToString().Length * fe.MaxXAdvance) +6;
-                       if (foldingEnabled)
-                               leftMargin += foldMargin;
-                       if (leftMargin > 0)
-                               leftMargin += leftMarginGap;                    
-                       updateVisibleColumns ();
-               }
-
-               /// <summary>
-               /// Updates visible line in widget, adapt max scroll y and updatePrintedLines
-               /// </summary>
-               void updateVisibleLines(){
-                       visibleLines = (int)Math.Floor ((double)ClientRectangle.Height / (fe.Ascent+fe.Descent));
-                       NotifyValueChanged ("VisibleLines", visibleLines);
-                       updateMaxScrollY ();
-                       updatePrintedLines ();
-                       RegisterForGraphicUpdate ();
-//                     System.Diagnostics.Debug.WriteLine ("update visible lines: " + visibleLines);
-//                     System.Diagnostics.Debug.WriteLine ("update MaxScrollY: " + MaxScrollY);
-               }
-               void updateVisibleColumns(){
-                       visibleColumns = (int)Math.Floor ((double)(ClientRectangle.Width - leftMargin)/ fe.MaxXAdvance);
-                       NotifyValueChanged ("VisibleColumns", visibleColumns);
-                       updateMaxScrollX ();
-//                     System.Diagnostics.Debug.WriteLine ("update visible columns: {0} leftMargin:{1}",visibleColumns, leftMargin);
-//                     System.Diagnostics.Debug.WriteLine ("update MaxScrollX: " + MaxScrollX);
-               }
-               void updateMaxScrollX () {
-                       MaxScrollX = Math.Max (0, buffer.longestLineCharCount - visibleColumns);
-                       if (buffer.longestLineCharCount > 0)
-                               NotifyValueChanged ("ChildWidthRatio", Slot.Width * visibleColumns / buffer.longestLineCharCount);                      
-               }
-               void updateMaxScrollY () {
-                       if (parser == null || !foldingEnabled) {
-                               MaxScrollY = Math.Max (0, buffer.LineCount - visibleLines);
-                               if (buffer.UnfoldedLines > 0)
-                                       NotifyValueChanged ("ChildHeightRatio", Slot.Height * visibleLines / buffer.UnfoldedLines);                                                     
-                       } else {
-                               MaxScrollY = Math.Max (0, buffer.UnfoldedLines - visibleLines);
-                               if (buffer.UnfoldedLines > 0)
-                                       NotifyValueChanged ("ChildHeightRatio", Slot.Height * visibleLines / buffer.UnfoldedLines);                                                     
-                       }
-               }                       
-               void updatePrintedLines () {
-                       buffer.editMutex.EnterReadLock ();
-                       editorMutex.EnterWriteLock ();
-
-                       PrintedLines = new List<CodeLine> ();
-                       int curL = 0;
-                       int i = 0;
-
-                       while (curL < buffer.LineCount && i < ScrollY) {
-                               if (buffer [curL].IsFolded)
-                                       curL = buffer.GetEndNodeIndex (curL);
-                               curL++;
-                               i++;
-                       }
-
-                       firstPrintedLine = curL;
-                       i = 0;
-                       while (i < visibleLines && curL < buffer.LineCount) {
-                               PrintedLines.Add (buffer [curL]);
-
-                               if (buffer [curL].IsFolded)
-                                       curL = buffer.GetEndNodeIndex (curL);
-
-                               curL++;
-                               i++;
-                       }
-
-                       buffer.editMutex.ExitReadLock ();
-                       editorMutex.ExitWriteLock ();
-               }
-               void updateOnScreenCurLineFromBuffCurLine(){
-                       printedCurrentLine = PrintedLines.IndexOf (buffer.CurrentCodeLine);
-               }
-               void toogleFolding (int line) {
-                       if (parser == null || !foldingEnabled)
-                               return;
-                       buffer.ToogleFolding (line);
-               }
-
-               #region Editor overrides
-               protected override void updateEditorFromProjFile ()
-               {
-                       Debug.WriteLine("\t\tSourceEditor updateEditorFromProjFile");
-
-                       buffer.editMutex.EnterWriteLock ();
-                       loadSource ();
-                       buffer.editMutex.ExitWriteLock ();
-
-                       isDirty = false;
-                       oldSource = projFile.Source;
-                       CurrentLine = requestedLine;
-                       CurrentColumn = requestedCol;
-                       projFile.RegisteredEditors [this] = true;
-               }
-               protected override void updateProjFileFromEditor ()
-               {
-                       Debug.WriteLine("\t\tSourceEditor updateProjFileFromEditor");
-
-                       buffer.editMutex.EnterWriteLock ();
-                       string newsrc = buffer.FullText;
-                       buffer.editMutex.ExitWriteLock ();
-                       projFile.UpdateSource (this, newsrc);
-               }
-               protected override bool EditorIsDirty {
-                       get { return isDirty; }
-                       set { isDirty = value; }
-               }
-               protected override bool IsReady {
-                       get { return projFile != null && buffer != null; }
-               }
-               #endregion
-
-               #region Buffer events handlers
-               void Buffer_BufferCleared (object sender, EventArgs e)
-               {
-                       editorMutex.EnterWriteLock ();
-
-                       buffer.longestLineCharCount = 0;
-                       buffer.longestLineIdx = 0;
-                       measureLeftMargin ();
-                       MaxScrollX = MaxScrollY = 0;
-                       PrintedLines = null;
-                       RegisterForGraphicUpdate ();
-                       notifyPositionChanged ();
-                       isDirty = true;
-
-                       editorMutex.ExitWriteLock ();
-               }
-               void Buffer_LineAdditionEvent (object sender, CodeBufferEventArgs e)
-               {
-                       for (int i = 0; i < e.LineCount; i++) {
-                               int lptr = e.LineStart + i;
-                               int charCount = buffer[lptr].PrintableLength;
-                               if (charCount > buffer.longestLineCharCount) {
-                                       buffer.longestLineIdx = lptr;
-                                       buffer.longestLineCharCount = charCount;
-                               }else if (lptr <= buffer.longestLineIdx)
-                                       buffer.longestLineIdx++;
-                               if (parser == null)
-                                       continue;
-                               parser.TryParseBufferLine (e.LineStart + i);
-                       }
-
-                       if (parser != null)
-                               parser.reparseSource ();
-
-                       measureLeftMargin ();
-
-                       updatePrintedLines ();
-                       updateMaxScrollY ();
-                       RegisterForGraphicUpdate ();
-                       notifyPositionChanged ();
-                       isDirty = true;
-               }
-               void Buffer_LineRemoveEvent (object sender, CodeBufferEventArgs e)
-               {
-                       bool trigFindLongestLine = false;
-                       for (int i = 0; i < e.LineCount; i++) {
-                               int lptr = e.LineStart + i;
-                               if (lptr <= buffer.longestLineIdx)
-                                       trigFindLongestLine = true;
-                       }
-                       if (trigFindLongestLine)
-                               findLongestLineAndUpdateMaxScrollX ();
-
-                       measureLeftMargin ();
-                       updatePrintedLines ();
-                       updateMaxScrollY ();
-                       RegisterForGraphicUpdate ();
-                       notifyPositionChanged ();
-                       isDirty = true;
-               }
-               void Buffer_LineUpadateEvent (object sender, CodeBufferEventArgs e)
-               {
-                       bool trigFindLongestLine = false;
-                       for (int i = 0; i < e.LineCount; i++) {
-
-                               int lptr = e.LineStart + i;
-                               if (lptr == buffer.longestLineIdx)
-                                       trigFindLongestLine = true;
-                               else if (buffer[lptr].PrintableLength > buffer.longestLineCharCount) {
-                                       buffer.longestLineCharCount = buffer[lptr].PrintableLength;
-                                       buffer.longestLineIdx = lptr;
-                               }
-                       }
-                       if (trigFindLongestLine)
-                               findLongestLineAndUpdateMaxScrollX ();
-                       
-                       RegisterForGraphicUpdate ();
-                       notifyPositionChanged ();
-                       isDirty = true;
-               }
-               void Buffer_PositionChanged (object sender, EventArgs e)
-               {
-                       //Console.WriteLine ("Position changes: ({0},{1})", buffer.CurrentLine, buffer.CurrentColumn);
-                       int cc = buffer.CurrentTabulatedColumn;
-
-                       if (cc > visibleColumns + ScrollX) {
-                               ScrollX = cc - visibleColumns;
-                       } else if (cc < ScrollX)
-                               ScrollX = cc;
-                       
-                       RegisterForGraphicUpdate ();
-                       updateOnScreenCurLineFromBuffCurLine ();
-                       notifyPositionChanged ();
-               }
-
-               void Buffer_SelectionChanged (object sender, EventArgs e)
-               {
-                       RegisterForGraphicUpdate ();
-               }
-               void Buffer_FoldingEvent (object sender, CodeBufferEventArgs e)
-               {
-                       updatePrintedLines ();
-                       updateOnScreenCurLineFromBuffCurLine ();
-                       updateMaxScrollY ();
-                       RegisterForGraphicUpdate ();
-               }
-               #endregion
-
-               void notifyPositionChanged (){
-                       try {                           
-                               NotifyValueChanged ("CurrentLine", buffer.CurrentLine+1);
-                               NotifyValueChanged ("CurrentColumn", buffer.CurrentColumn+1);
-                               NotifyValueChanged ("CurrentLineHasError", CurrentLineHasError);
-                               NotifyValueChanged ("CurrentLineError", CurrentLineError);
-                       } catch (Exception ex) {
-                               Console.WriteLine (ex.ToString ());
-                       }
-               }
-                       
-               #region Public Crow Properties
-               public int CurrentLine{
-                       get { return buffer == null ? 0 : buffer.CurrentLine+1; }
-                       set {
-                               try {
-                                       int l = value - 1;
-                                       if (l == buffer.CurrentLine)
-                                               return;
-                                       buffer.CurrentLine = l;
-                                       l = buffer.CurrentLine; //reaffect from buffer where bound check is made
-                                       if ((bool)buffer [l]?.IsFolded)
-                                               buffer.ToogleFolding (l);                                       
-                               } catch (Exception ex) {
-                                       requestedLine = value - 1;
-                                       Console.WriteLine ("Error cur column: " + ex);
-                               }
-                       }
-               }
-               public int CurrentColumn{
-                       get { return buffer == null ? 0 : buffer.CurrentColumn+1; }
-                       set {
-                               try {                                   
-                                       if (value - 1 == buffer.CurrentColumn)
-                                               return;
-                                       buffer.CurrentColumn = value - 1;
-                               } catch (Exception ex) {
-                                       requestedCol = value - 1;
-                                       Console.WriteLine ("Error cur column: " + ex.ToString ());
-                               }
-                       }
-               }
-               public bool PrintLineNumbers
-               {
-                       get { return Configuration.Global.Get<bool> ("PrintLineNumbers"); }
-                       set     {
-                               if (PrintLineNumbers == value)
-                                       return;
-                               Configuration.Global.Set ("PrintLineNumbers", value);
-                               NotifyValueChanged ("PrintLineNumbers", PrintLineNumbers);
-                               measureLeftMargin ();
-                               RegisterForGraphicUpdate ();
-                       }
-               }
-               [DefaultValue("SteelBlue")]
-               public virtual Color SelectionBackground {
-                       get { return selBackground; }
-                       set {
-                               if (value == selBackground)
-                                       return;
-                               selBackground = value;
-                               NotifyValueChanged ("SelectionBackground", selBackground);
-                               RegisterForRedraw ();
-                       }
-               }
-               [DefaultValue("White")]
-               public virtual Color SelectionForeground {
-                       get { return selForeground; }
-                       set {
-                               if (value == selForeground)
-                                       return;
-                               selForeground = value;
-                               NotifyValueChanged ("SelectionForeground", selForeground);
-                               RegisterForRedraw ();
-                       }
-               }
-               public override int ScrollY {
-                       get {
-                               return base.ScrollY;
-                       }
-                       set {
-                               if (value == base.ScrollY)
-                                       return;
-                               base.ScrollY = value;
-                               updatePrintedLines ();
-                               updateOnScreenCurLineFromBuffCurLine ();
-                               RegisterForGraphicUpdate ();
-                       }
-               }
-               public ParserException CurrentLineError {
-                       get { return buffer?.CurrentCodeLine?.exception; }
-               }
-               public bool CurrentLineHasError {
-                       get { return buffer == null ? false : buffer.CurrentCodeLine == null ? false :
-                               buffer.CurrentCodeLine.exception != null; }
-               }
-               public override ProjectFile ProjectNode {
-                       get {
-                               return base.ProjectNode;
-                       }
-                       set {
-                               base.ProjectNode = value;
-                               if (projFile != null)
-                                       parser = getParserFromExt (System.IO.Path.GetExtension (projFile.Extension));
-                       }
-               }
-               #endregion
-
-               BufferParser getParserFromExt (string extension) {
-                       if (string.IsNullOrEmpty(extension))
-                               return null;
-                       if (!parsing.ContainsKey(extension))
-                               return null;
-                       Type parserType = Type.GetType (parsing [extension]);
-                       if (parserType == null)
-                               return null;
-                       return (BufferParser)Activator.CreateInstance (parserType, buffer );
-               }
-               void loadSource () {
-
-                       try {
-
-                               if (parser == null)
-                                       buffer.Load (projFile.Source);
-                               else//parser may have special linebrk rules
-                                       buffer.Load (projFile.Source, parser.LineBrkRegex);
-
-                       } catch (Exception ex) {
-                               Debug.WriteLine (ex.ToString ());
-                       }
-
-                       projFile.RegisteredEditors [this] = true;
-
-                       updateMaxScrollY ();
-                       MaxScrollX = Math.Max (0, buffer.longestLineCharCount - visibleColumns);
-                       updatePrintedLines ();
-
-                       RegisterForGraphicUpdate ();
-               }
-
-               /// <summary>
-               /// Current editor line, when set, update buffer.CurrentLine
-               /// </summary>
-               int PrintedCurrentLine {
-                       get { return printedCurrentLine;}
-                       set {
-                               if (value < 0) {
-                                       ScrollY += value;
-                                       printedCurrentLine = 0;
-                               } else if (PrintedLines.Count < visibleLines && value >= PrintedLines.Count) {
-                                       printedCurrentLine = PrintedLines.Count - 1;
-                               }else if (value >= visibleLines) {
-                                       ScrollY += value - visibleLines + 1;
-                                       printedCurrentLine = visibleLines - 1;
-                               }else
-                                       printedCurrentLine = value;
-                               //Debug.WriteLine ("printed current line:" + printedCurrentLine.ToString ());
-                               //update position in buffer
-                               buffer.CurrentLine = buffer.IndexOf (PrintedLines[printedCurrentLine]);
-                       }
-               }
-               int getTabulatedColumn (int col, int line) {
-                       return buffer [line].Content.Substring (0, col).Replace ("\t", new String (' ', Interface.TabSize)).Length;
-               }
-               int getTabulatedColumn (Point pos) {
-                       return getTabulatedColumn (pos.X,pos.Y);
-               }
-               /// <summary>
-               /// Moves cursor one char to the left, move up if cursor reaches start of line
-               /// </summary>
-               /// <returns><c>true</c> if move succeed</returns>
-               public bool MoveLeft(){
-                       if (buffer.CurrentColumn == 0) {
-                               if (printedCurrentLine == 0)
-                                       return false;
-                               PrintedCurrentLine--;
-                               buffer.CurrentColumn = int.MaxValue;
-                       } else
-                               buffer.CurrentColumn--;
-                       return true;
-               }
-               /// <summary>
-               /// Moves cursor one char to the right, move down if cursor reaches end of line
-               /// </summary>
-               /// <returns><c>true</c> if move succeed</returns>
-               public bool MoveRight(){
-                       if (buffer.CurrentColumn >= buffer.CurrentCodeLine.Length) {
-                               if (PrintedCurrentLine == buffer.UnfoldedLines - 1)
-                                       return false;
-                               buffer.CurrentColumn = 0;
-                               PrintedCurrentLine++;
-                       } else
-                               buffer.CurrentColumn++;
-                       return true;
-               }
-
-               #region Drawing
-               void drawLine(Context gr, Rectangle cb, int i) {
-                       CodeLine cl = PrintedLines[i];
-                       int lineIndex = buffer.IndexOf(cl);
-
-                       double y = cb.Y + (fe.Ascent+fe.Descent) * i, x = cb.X;
-
-                       //Draw line numbering
-                       Color mgFg = Color.Grey;
-                       Color mgBg = Color.White;
-                       if (PrintLineNumbers){
-                               Rectangle mgR = new Rectangle ((int)x, (int)y, leftMargin - leftMarginGap, (int)Math.Ceiling((fe.Ascent+fe.Descent)));
-                               if (cl.exception != null) {
-                                       mgBg = Color.Red;
-                                       if (buffer.CurrentLine == lineIndex)
-                                               mgFg = Color.White;
-                                       else
-                                               mgFg = Color.LightGrey;
-                               }else if (buffer.CurrentLine == lineIndex) {
-                                       mgFg = Color.Black;
-                                       mgBg = Color.DarkGrey;
-                               }
-                               string strLN = (lineIndex+1).ToString ();
-                               gr.SetSourceColor (mgBg);
-                               gr.Rectangle (mgR);
-                               gr.Fill();
-                               gr.SetSourceColor (mgFg);
-
-                               gr.MoveTo (cb.X + (int)(gr.TextExtents (buffer.LineCount.ToString()).Width - gr.TextExtents (strLN).Width), y + fe.Ascent);
-                               gr.ShowText (strLN);
-                               gr.Fill ();
-                       }
-
-
-
-                       //draw folding
-                       if (foldingEnabled){
-
-                               Rectangle rFld = new Rectangle (cb.X + leftMargin - leftMarginGap - foldMargin,
-                                       (int)(y + (fe.Ascent + fe.Descent) / 2.0 - foldSize / 2.0), foldSize, foldSize);
-
-                               gr.SetSourceColor (Color.Black);
-                               gr.LineWidth = 1.0;
-
-                               int level = 0;
-                               bool closingNode = false;
-
-                               if (currentNode != null) {
-                                       if (cl == currentNode.EndLine) {
-                                               currentNode = currentNode.Parent;
-                                               closingNode = true;
-                                       }
-                                       if (currentNode != null)
-                                               level = currentNode.Level - 1;
-                               }
-
-                               for (int l = 0; l < level; l++) {                                       
-                                       gr.MoveTo (rFld.Center.X + 0.5, y);
-                                       gr.LineTo (rFld.Center.X + 0.5, y + fe.Ascent + fe.Descent);
-                                       rFld.Left += foldHSpace;
-                               }
-                               if (closingNode) {
-                                       gr.MoveTo (rFld.Center.X + 0.5, y);
-                                       gr.LineTo (rFld.Center.X + 0.5, y + fe.Ascent / 2 + 0.5);
-                                       gr.LineTo (rFld.Center.X + 0.5 + foldSize / 2, y + fe.Ascent / 2 + 0.5);
-                                       closingNode = false;
-                               }
-                               gr.SetDash (new double[]{ 1.5 },0.0);
-                               gr.SetSourceColor (Color.Grey);
-                               gr.Stroke ();
-                               gr.SetDash (new double[]{}, 0.0);
-
-                               if (cl.IsFoldable) {
-                                       gr.Rectangle (rFld);
-                                       gr.SetSourceColor (Color.White);
-                                       gr.Fill();
-                                       gr.SetSourceColor (Color.Black);
-                                       gr.Rectangle (rFld, 1.0);
-                                       if (cl.IsFolded) {
-                                               gr.MoveTo (rFld.Center.X + 0.5, rFld.Y + 2);
-                                               gr.LineTo (rFld.Center.X + 0.5, rFld.Bottom - 2);
-                                       }else
-                                               currentNode = cl.SyntacticNode;
-                                       
-                                       gr.MoveTo (rFld.Left + 2, rFld.Center.Y + 0.5);
-                                       gr.LineTo (rFld.Right - 2, rFld.Center.Y + 0.5);
-                                       gr.Stroke ();
-                               } 
-                       }
-
-                       gr.SetSourceColor (Foreground);
-                       x += leftMargin;
-
-                       if (cl.Tokens == null)
-                               drawRawCodeLine (gr, x, y, i, lineIndex);
-                       else
-                               drawParsedCodeLine (gr, x, y, i, lineIndex);
-               }
-               Node currentNode = null;
-//             void drawParsed(Context gr){
-//                     if (PrintedLines == null)
-//                             return;
-//
-//                     gr.SelectFontFace (Font.Name, Font.Slant, Font.Wheight);
-//                     gr.SetFontSize (Font.Size);
-//                     gr.FontOptions = Interface.FontRenderingOptions;
-//                     gr.Antialias = Interface.Antialias;
-//
-//                     Rectangle cb = ClientRectangle;
-//                     gr.Save ();
-//                     CairoHelpers.CairoRectangle (gr, cb, CornerRadius);
-//                     gr.Clip ();
-//
-//                     bool selectionInProgress = false;
-//
-//                     Foreground.SetAsSource (gr);
-//
-//                     #region draw text cursor
-//                     if (SelBegin != SelRelease)
-//                             selectionInProgress = true;
-//                     else if (HasFocus){
-//                             gr.LineWidth = 1.0;
-//                             double cursorX = + leftMargin + cb.X + (CurrentColumn - ScrollX) * fe.MaxXAdvance;
-//                             gr.MoveTo (0.5 + cursorX, cb.Y + printedCurrentLine * (fe.Ascent+fe.Descent));
-//                             gr.LineTo (0.5 + cursorX, cb.Y + (printedCurrentLine + 1) * (fe.Ascent+fe.Descent));
-//                             gr.Stroke();
-//                     }
-//                     #endregion
-//
-//                     for (int i = 0; i < PrintedLines.Count; i++)
-//                             drawTokenLine (gr, i, selectionInProgress, cb);
-//
-//                     gr.Restore ();
-//             }
-               void drawRawCodeLine(Context gr, double x, double y, int i, int lineIndex) {
-                       string lstr = buffer[lineIndex].PrintableContent;
-                       if (ScrollX < lstr.Length)
-                               lstr = lstr.Substring (ScrollX);
-                       else
-                               lstr = "";
-
-                       gr.MoveTo (x, y + fe.Ascent);
-                       gr.ShowText (lstr);
-                       gr.Fill ();
-
-                       if (!buffer.SelectionIsEmpty && lineIndex >= buffer.SelectionStart.Y && lineIndex <= buffer.SelectionEnd.Y) {
-                               double rLineX = x,
-                               rLineY = y,
-                               rLineW = lstr.Length * fe.MaxXAdvance;
-
-                               //System.Diagnostics.Debug.WriteLine ("sel start: " + buffer.SelectionStart + " sel end: " + buffer.SelectionEnd);
-                               if (lineIndex == buffer.SelectionStart.Y) {
-                                       rLineX += (selStartCol - ScrollX) * fe.MaxXAdvance;
-                                       rLineW -= selStartCol * fe.MaxXAdvance;
-                               }
-                               if (lineIndex == buffer.SelectionEnd.Y)
-                                       rLineW -= (lstr.Length - selEndCol) * fe.MaxXAdvance;
-
-                               gr.Save ();
-                               gr.Operator = Operator.Source;
-                               gr.Rectangle (rLineX, rLineY, rLineW, (fe.Ascent+fe.Descent));
-                               gr.SetSourceColor (SelectionBackground);
-                               gr.FillPreserve ();
-                               gr.Clip ();
-                               gr.Operator = Operator.Over;
-                               gr.SetSourceColor (SelectionForeground);
-                               gr.MoveTo (x, y + fe.Ascent);
-                               gr.ShowText (lstr);
-                               gr.Fill ();
-                               gr.Restore ();
-                       }
-               }
-               void drawParsedCodeLine (Context gr, double x, double y, int i, int lineIndex) {
-                       int lPtr = 0;
-                       CodeLine cl = PrintedLines[i];
-
-                       for (int t = 0; t < cl.Tokens.Count; t++) {
-                               string lstr = cl.Tokens [t].PrintableContent;
-                               if (lPtr < ScrollX) {
-                                       if (lPtr - ScrollX + lstr.Length <= 0) {
-                                               lPtr += lstr.Length;
-                                               continue;
-                                       }
-                                       lstr = lstr.Substring (ScrollX - lPtr);
-                                       lPtr += ScrollX - lPtr;
-                               }
-                               Color bg = this.Background;
-                               Color fg = this.Foreground;
-                               Color selbg = this.SelectionBackground;
-                               Color selfg = this.SelectionForeground;
-                               FontSlant fts = FontSlant.Normal;
-                               FontWeight ftw = FontWeight.Normal;
-
-                               if (formatting.ContainsKey ((int)cl.Tokens [t].Type)) {
-                                       TextFormatting tf = formatting [(int)cl.Tokens [t].Type];
-                                       bg = tf.Background;
-                                       fg = tf.Foreground;
-                                       if (tf.Bold)
-                                               ftw = FontWeight.Bold;
-                                       if (tf.Italic)
-                                               fts = FontSlant.Italic;
-                               }
-
-                               gr.SelectFontFace (Font.Name, fts, ftw);
-                               gr.SetSourceColor (fg);
-
-                               gr.MoveTo (x, y + fe.Ascent);
-                               gr.ShowText (lstr);
-                               gr.Fill ();
-
-                               if (buffer.SelectionInProgress && lineIndex >= buffer.SelectionStart.Y && lineIndex <= buffer.SelectionEnd.Y &&
-                                       !(lineIndex == buffer.SelectionStart.Y && lPtr + lstr.Length <= selStartCol) &&
-                                       !(lineIndex == buffer.SelectionEnd.Y && selEndCol <= lPtr)) {
-
-                                       double rLineX = x,
-                                       rLineY = y,
-                                       rLineW = lstr.Length * fe.MaxXAdvance;
-                                       double startAdjust = 0.0;
-
-                                       if ((lineIndex == buffer.SelectionStart.Y) && (selStartCol < lPtr + lstr.Length) && (selStartCol > lPtr))
-                                               startAdjust = (selStartCol - lPtr) * fe.MaxXAdvance;
-                                       rLineX += startAdjust;
-                                       if ((lineIndex == buffer.SelectionEnd.Y) && (selEndCol < lPtr + lstr.Length))
-                                               rLineW = (selEndCol - lPtr) * fe.MaxXAdvance;
-                                       rLineW -= startAdjust;
-
-                                       gr.Save ();
-                                       gr.Operator = Operator.Source;
-                                       gr.Rectangle (rLineX, rLineY, rLineW, (fe.Ascent+fe.Descent));
-                                       gr.SetSourceColor (selbg);
-                                       gr.FillPreserve ();
-                                       gr.Clip ();
-                                       gr.Operator = Operator.Over;
-                                       gr.SetSourceColor (selfg);
-                                       gr.MoveTo (x, y + fe.Ascent);
-                                       gr.ShowText (lstr);
-                                       gr.Fill ();
-                                       gr.Restore ();
-                               }
-                               x += (int)lstr.Length * fe.MaxXAdvance;
-                               lPtr += lstr.Length;
-                       }
-               }
-
-               #endregion
-
-               #region GraphicObject overrides
-               public override Font Font {
-                       get { return base.Font; }
-                       set {
-                               base.Font = value;
-
-                               using (ImageSurface img = new ImageSurface (Format.Argb32, 1, 1)) {
-                                       using (Context gr = new Context (img)) {
-                                               gr.SelectFontFace (Font.Name, Font.Slant, Font.Wheight);
-                                               gr.SetFontSize (Font.Size);
-
-                                               fe = gr.FontExtents;
-                                       }
-                               }
-                               MaxScrollY = 0;
-                               RegisterForGraphicUpdate ();
-                       }
-               }
-               protected override int measureRawSize(LayoutingType lt)
-               {
-                       if (lt == LayoutingType.Height)
-                               return (int)Math.Ceiling((fe.Ascent+fe.Descent) * buffer.LineCount) + Margin * 2;
-
-                       return (int)(fe.MaxXAdvance * buffer.longestLineCharCount) + Margin * 2 + leftMargin;
-               }
-               public override void OnLayoutChanges (LayoutingType layoutType)
-               {
-                       base.OnLayoutChanges (layoutType);
-
-                       if (layoutType == LayoutingType.Height)
-                               updateVisibleLines ();
-                       else if (layoutType == LayoutingType.Width)
-                               updateVisibleColumns ();
-               }
-
-               protected override void onDraw (Context gr)
-               {
-                       base.onDraw (gr);
-
-                       gr.SelectFontFace (Font.Name, Font.Slant, Font.Wheight);
-                       gr.SetFontSize (Font.Size);
-                       gr.FontOptions = Interface.FontRenderingOptions;
-                       gr.Antialias = Interface.Antialias;
-
-                       Rectangle cb = ClientRectangle;
-
-                       Foreground.SetAsSource (gr);
-
-                       buffer.editMutex.EnterReadLock ();
-                       editorMutex.EnterReadLock ();
-
-                       #region draw text cursor
-                       if (buffer.SelectionInProgress){
-                               selStartCol = getTabulatedColumn (buffer.SelectionStart);
-                               selEndCol = getTabulatedColumn (buffer.SelectionEnd);
-                       }else if (HasFocus && printedCurrentLine >= 0){
-                               gr.LineWidth = 1.0;
-                               double cursorX = cb.X + (getTabulatedColumn(buffer.CurrentPosition) - ScrollX) * fe.MaxXAdvance + leftMargin;
-                               gr.MoveTo (0.5 + cursorX, cb.Y + (printedCurrentLine) * (fe.Ascent+fe.Descent));
-                               gr.LineTo (0.5 + cursorX, cb.Y + (printedCurrentLine + 1) * (fe.Ascent+fe.Descent));
-                               gr.Stroke();
-                       }
-                       #endregion
-
-                       if (PrintedLines?.Count > 0) {                          
-                               int unfoldedLines = buffer.UnfoldedLines;
-                               currentNode = null;
-                               CodeLine cl = PrintedLines[0];
-                               int idx0 = buffer.IndexOf(cl);
-                               int li = idx0-1;
-                               while (li >= 0) {
-                                       if (buffer [li].IsFoldable && !buffer [li].IsFolded) {
-                                               if (buffer.IndexOf(buffer [li].SyntacticNode.EndLine) > idx0){
-                                                       currentNode = buffer [li].SyntacticNode;
-                                                       break;
-                                               }
-                                       }
-                                       li--;
-                               }
-
-                               for (int i = 0; i < visibleLines; i++) {
-                                       if (i + ScrollY >= unfoldedLines)//TODO:need optimize
-                                               break;
-                                       drawLine (gr, cb, i);
-                               }
-                       }
-
-                       editorMutex.ExitReadLock ();
-
-                       buffer.editMutex.ExitReadLock ();
-
-               }
-               #endregion
-
-               #region Mouse handling
-
-               int hoverLine = -1;
-               public int HoverLine {
-                       get { return hoverLine; }
-                       set { 
-                               if (hoverLine == value)
-                                       return;
-                               hoverLine = value;
-                               NotifyValueChanged ("HoverLine", hoverLine);
-                               NotifyValueChanged ("HoverError", buffer [hoverLine].exception);
-                       }
-               }
-               void updateHoverLine () {
-                       int hvl = (int)Math.Max (0, Math.Floor (mouseLocalPos.Y / (fe.Ascent+fe.Descent)));
-                       hvl = Math.Min (PrintedLines.Count-1, hvl);
-                       HoverLine = buffer.IndexOf (PrintedLines[hvl]);
-               }
-               void updateCurrentPosFromMouseLocalPos(){                       
-                       PrintedCurrentLine = (int)Math.Max (0, Math.Floor (mouseLocalPos.Y / (fe.Ascent+fe.Descent)));
-                       int curVisualCol = ScrollX +  (int)Math.Round ((mouseLocalPos.X - leftMargin) / fe.MaxXAdvance);
-
-                       int i = 0;
-                       int buffCol = 0;
-                       while (i < curVisualCol && buffCol < buffer.CurrentCodeLine.Length) {
-                               if (buffer.CurrentCodeLine[buffCol] == '\t')
-                                       i += Interface.TabSize;
-                               else
-                                       i++;
-                               buffCol++;
-                       }
-                       buffer.CurrentColumn = buffCol;
-               }
-               public override void onMouseEnter (object sender, MouseMoveEventArgs e)
-               {
-                       base.onMouseEnter (sender, e);
-                       if (e.X - ScreenCoordinates(Slot).X < leftMargin + ClientRectangle.X)
-                               IFace.MouseCursor = XCursor.Default;
-                       else
-                               IFace.MouseCursor = XCursor.Text;
-               }
-               public override void onMouseLeave (object sender, MouseMoveEventArgs e)
-               {
-                       base.onMouseLeave (sender, e);
-                       IFace.MouseCursor = XCursor.Default;
-               }
-               public override void onMouseMove (object sender, MouseMoveEventArgs e)
-               {
-                       base.onMouseMove (sender, e);
-
-                       mouseLocalPos = e.Position - ScreenCoordinates(Slot).TopLeft - ClientRectangle.TopLeft;
-
-                       updateHoverLine ();
-
-                       if (!e.Mouse.IsButtonDown (MouseButton.Left)) {
-                               if (mouseLocalPos.X < leftMargin)
-                                       IFace.MouseCursor = XCursor.Default;
-                               else
-                                       IFace.MouseCursor = XCursor.Text;
-                               return;
-                       }
-
-                       if (!HasFocus || !buffer.SelectionInProgress)
-                               return;
-
-                       //mouse is down
-                       updateCurrentPosFromMouseLocalPos();
-                       buffer.SetSelEndPos ();
-               }
-               public override void onMouseDown (object sender, MouseButtonEventArgs e)
-               {
-                       if (!this.Focusable)
-                               return;
-
-                       if (mouseLocalPos.X >= leftMargin)
-                               base.onMouseDown (sender, e);
-
-                       if (doubleClicked) {
-                               doubleClicked = false;
-                               return;
-                       }
-
-                       if (mouseLocalPos.X < leftMargin) {
-                               toogleFolding (buffer.IndexOf (PrintedLines [(int)Math.Max (0, Math.Floor (mouseLocalPos.Y / (fe.Ascent+fe.Descent)))]));
-                               return;
-                       }
-
-                       updateCurrentPosFromMouseLocalPos ();
-                       buffer.SetSelStartPos ();
-               }
-               public override void onMouseUp (object sender, MouseButtonEventArgs e)
-               {
-                       base.onMouseUp (sender, e);
-
-                       if (buffer.SelectionIsEmpty)
-                               buffer.ResetSelection ();
-               }
-
-               public override void onMouseDoubleClick (object sender, MouseButtonEventArgs e)
-               {
-                       doubleClicked = true;
-                       base.onMouseDoubleClick (sender, e);
-
-                       buffer.GotoWordStart ();
-                       buffer.SetSelStartPos ();
-                       buffer.GotoWordEnd ();
-                       buffer.SetSelEndPos ();
-               }
-
-               public override void onMouseWheel (object sender, MouseWheelEventArgs e)
-               {
-                       base.onMouseWheel (sender, e);
-               }
-               #endregion
-
-               #region Keyboard handling
-               public override void onKeyDown (object sender, KeyEventArgs e)
-               {
-                       //base.onKeyDown (sender, e);
-
-                       Key key = e.Key;
-
-                       if (e.Control) {
-                               switch (key) {
-                               case Key.S:
-                                       projFile.Save ();
-                                       break;
-                               case Key.W:
-                                       editorMutex.EnterWriteLock ();
-                                       if (e.Shift)
-                                               projFile.Redo (null);
-                                       else
-                                               projFile.Undo (null);
-                                       editorMutex.ExitWriteLock ();
-                                       break;
-                               default:
-                                       Console.WriteLine ("");
-                                       break;
-                               }
-                       }
-
-                       switch (key)
-                       {
-                       case Key.Back:
-                               buffer.DeleteChar ();
-                               break;
-                       case Key.Clear:
-                               break;
-                       case Key.Delete:
-                               if (buffer.SelectionIsEmpty)
-                                       MoveRight ();
-                               else if (e.Shift)
-                                       IFace.Clipboard = buffer.SelectedText;
-                               buffer.DeleteChar ();
-                               break;
-                       case Key.Enter:
-                       case Key.KeypadEnter:
-                               if (!buffer.SelectionIsEmpty)
-                                       buffer.DeleteChar ();
-                               buffer.InsertLineBreak ();
-                               break;
-                       case Key.Escape:
-                               buffer.ResetSelection ();
-                               break;
-                       case Key.Home:
-                               if (e.Shift) {
-                                       if (buffer.SelectionIsEmpty)
-                                               buffer.SetSelStartPos ();
-                                       if (e.Control)
-                                               buffer.CurrentLine = 0;
-                                       buffer.CurrentColumn = 0;
-                                       buffer.SetSelEndPos ();
-                                       break;
-                               }
-                               buffer.ResetSelection ();
-                               if (e.Control)
-                                       buffer.CurrentLine = 0;
-                               buffer.CurrentColumn = 0;
-                               break;
-                       case Key.End:
-                               if (e.Shift) {
-                                       if (buffer.SelectionIsEmpty)
-                                               buffer.SetSelStartPos ();
-                                       if (e.Control)
-                                               buffer.CurrentLine = int.MaxValue;
-                                       buffer.CurrentColumn = int.MaxValue;
-                                       buffer.SetSelEndPos ();
-                                       break;
-                               }
-                               buffer.ResetSelection ();
-                               if (e.Control)
-                                       buffer.CurrentLine = int.MaxValue;
-                               buffer.CurrentColumn = int.MaxValue;
-                               break;
-                       case Key.Insert:
-                               if (e.Shift)
-                                       buffer.Insert (IFace.Clipboard);
-                               else if (e.Control && !buffer.SelectionIsEmpty)
-                                       IFace.Clipboard = buffer.SelectedText;
-                               break;
-                       case Key.Left:
-                               if (e.Shift) {
-                                       if (buffer.SelectionIsEmpty)
-                                               buffer.SetSelStartPos ();
-                                       if (e.Control)
-                                               buffer.GotoWordStart ();
-                                       else
-                                               MoveLeft ();
-                                       buffer.SetSelEndPos ();
-                                       break;
-                               }
-                               buffer.ResetSelection ();
-                               if (e.Control)
-                                       buffer.GotoWordStart ();
-                               else
-                                       MoveLeft();
-                               break;
-                       case Key.Right:
-                               if (e.Shift) {
-                                       if (buffer.SelectionIsEmpty)
-                                               buffer.SetSelStartPos ();
-                                       if (e.Control)
-                                               buffer.GotoWordEnd ();
-                                       else
-                                               MoveRight ();
-                                       buffer.SetSelEndPos ();
-                                       break;
-                               }
-                               buffer.ResetSelection ();
-                               if (e.Control)
-                                       buffer.GotoWordEnd ();
-                               else
-                                       MoveRight ();
-                               break;
-                       case Key.Up:
-                               if (e.Shift) {
-                                       if (buffer.SelectionIsEmpty)
-                                               buffer.SetSelStartPos ();
-                                       PrintedCurrentLine--;
-                                       buffer.SetSelEndPos ();
-                                       break;
-                               }
-                               buffer.ResetSelection ();
-                               PrintedCurrentLine--;
-                               break;
-                       case Key.Down:
-                               if (e.Shift) {
-                                       if (buffer.SelectionIsEmpty)
-                                               buffer.SetSelStartPos ();
-                                       PrintedCurrentLine++;
-                                       buffer.SetSelEndPos ();
-                                       break;
-                               }
-                               buffer.ResetSelection ();
-                               PrintedCurrentLine++;
-                               break;
-                       case Key.Menu:
-                               break;
-                       case Key.NumLock:
-                               break;
-                       case Key.PageDown:
-                               if (e.Shift) {
-                                       if (buffer.SelectionIsEmpty)
-                                               buffer.SetSelStartPos ();
-                                       PrintedCurrentLine += visibleLines;
-                                       buffer.SetSelEndPos ();
-                                       break;
-                               }
-                               buffer.ResetSelection ();
-                               PrintedCurrentLine += visibleLines;
-                               break;
-                       case Key.PageUp:
-                               if (e.Shift) {
-                                       if (buffer.SelectionIsEmpty)
-                                               buffer.SetSelStartPos ();
-                                       PrintedCurrentLine -= visibleLines;
-                                       buffer.SetSelEndPos ();
-                                       break;
-                               }
-                               buffer.ResetSelection ();
-                               PrintedCurrentLine -= visibleLines;
-                               break;
-                       case Key.RWin:
-                               break;
-                       case Key.Tab:
-                               if (e.Shift) {
-                                       if (buffer.SelectionIsEmpty ||
-                                               (buffer.SelectionStart.Y == buffer.SelectionEnd.Y)) {
-                                               //TODO
-                                               break;
-                                       }
-                                       for (int i = buffer.SelectionStart.Y; i <= buffer.SelectionEnd.Y; i++)
-                                               buffer.RemoveLeadingTab (i);
-                                       buffer.SetSelectionOnFullLines ();
-                               } else {
-                                       if (buffer.SelectionIsEmpty ||
-                                               (buffer.SelectionStart.Y == buffer.SelectionEnd.Y)) {
-                                               buffer.Insert ("\t");
-                                               break;
-                                       }
-                                       for (int i = buffer.SelectionStart.Y; i <= buffer.SelectionEnd.Y; i++) {
-                                               buffer.UpdateLine (i, "\t" + buffer [i].Content);
-                                       }
-                               }
-
-                               break;
-                       case Key.F8:
-                               toogleFolding (buffer.CurrentLine);
-                               break;
-                       default:
-                               break;
-                       }
-                       RegisterForGraphicUpdate();
-               }
-               public override void onKeyPress (object sender, KeyPressEventArgs e)
-               {
-                       base.onKeyPress (sender, e);
-
-                       buffer.Insert (e.KeyChar.ToString());
-                       buffer.ResetSelection ();
-               }
-               #endregion
-       }
-}
\ No newline at end of file
diff --git a/src/debug/DebugLogger.cs b/src/debug/DebugLogger.cs
deleted file mode 100644 (file)
index 38cbc2a..0000000
+++ /dev/null
@@ -1,177 +0,0 @@
-//
-// CrowDebugger.cs
-//
-// Author:
-//       Jean-Philippe Bruyère <jp_bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-using System;
-using Cairo;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.IO;
-using System.Linq;
-
-#if DEBUG_LOG
-namespace Crow
-{
-       /*public class LayoutingEvent : DbgEvent {
-               public List<LayoutingQueueItem> lqis = new List<LayoutingQueueItem>();
-
-       }*/
-       [Flags]
-       public enum DbgEvtType {
-               ////9 nth bit set for iface event
-               IFace                                                   = 0x0100,
-               IFaceStartLayouting                             = 0x0101,
-               IFaceEndLayouting                               = 0x0102,
-               IFaceStartClipping                              = 0x0103,
-               IFaceEndClipping                                = 0x0104,
-               IFaceStartDrawing                               = 0x0105,
-               IFaceEndDrawing                                 = 0x0106,
-               IFaceUpdate                                             = 0x0107,
-               //10 nth bit set for graphic obj
-               GraphicObject                                   = 0x0200,
-               GOClassCreation                                 = 0x0201,
-               GOInitialization                                = 0x0202,
-               GOClippingRegistration                  = 0x0203,
-               GORegisterClip                                  = 0x0204,
-               GORegisterForGraphicUpdate              = 0x0205,
-               GOEnqueueForRepaint                             = 0x0206,
-               GOLayouting                                             = 0x0400,
-               GORegisterLayouting                             = 0x0607,
-               GOProcessLayoutingWithNoParent  = 0x0608,
-               GOProcessLayouting                              = 0x0609,
-               GODraw                                                  = 0x020a,
-               GORecreateCache                                 = 0x020b,
-               GOUpdateCacheAndPaintOnCTX              = 0x020c,
-               GOPaint                                                 = 0x020d,
-               GONewDataSource                                 = 0x020e,
-               GOLock                                                  = 0x0800,
-               GOLockUpdate                                    = 0x0a01,
-               GOLockClipping                                  = 0x0a02,
-               GOLockRender                                    = 0x0a03,
-               GOLockLayouting                                 = 0x0a04,
-       }
-
-       /// <summary>
-       /// debug events as recorded, another class is used in the viewer
-       /// </summary>
-       public class DbgEvent {
-               public long begin, end;
-               public DbgEvtType type;
-               public object data = null;
-
-               public DbgEvent() {}
-                       
-               public DbgEvent(long timeStamp, DbgEvtType evt, object _data = null) {                  
-                       data = _data;
-                       type = evt;
-                       begin = timeStamp;
-                       end = timeStamp;
-               }
-
-               public override string ToString ()
-               {
-                       GraphicObject go = data as GraphicObject;
-                       if (go != null)
-                               return string.Format ("{0};{1};{2};{3}", begin, end, type, GraphicObject.GraphicObjects.IndexOf(go).ToString());
-                       if (!(data is LayoutingQueueItem))
-                               return string.Format ("{0};{1};{2}", begin, end, type);
-                       LayoutingQueueItem lqi = (LayoutingQueueItem)data;
-                       if (type == DbgEvtType.GOProcessLayouting)
-                               return string.Format ("{0};{1};{2};{3};{4};{5}", begin, end, type, GraphicObject.GraphicObjects.IndexOf(lqi.graphicObject).ToString(), lqi.LayoutType.ToString(), lqi.result.ToString());                       
-                       return string.Format ("{0};{1};{2};{3};{4}", begin, end, type, GraphicObject.GraphicObjects.IndexOf(lqi.graphicObject).ToString(), lqi.LayoutType.ToString());
-                       
-               }
-       }
-
-       public static class DebugLog
-       {
-               static Surface surf;
-               static Context ctx;
-
-               static Crow.Rectangle bounds = new Crow.Rectangle(0,0,8182,4096);
-               static double penX = 1.0;
-               static double ySpacing = 10.0;
-               static double xPenStart = 250.0;
-               static double xResolution = 0.001; //per tick
-               public static Stopwatch chrono = Stopwatch.StartNew();
-
-               public static List<DbgEvent> events = new List<DbgEvent>();
-               public static DbgEvent currentEvent = null;
-
-               public static DbgEvent AddEvent (DbgEvtType evtType, object data = null) {
-                       DbgEvent evt = new DbgEvent(chrono.ElapsedTicks, evtType, data);
-                       events.Add (evt);
-                       return evt;
-               }
-
-               static int y, level;
-
-               static void parseTree (GraphicObject go) {
-                       if (go == null)
-                               return;
-
-
-                       go.yIndex = y++;
-                       go.xLevel = level++;
-
-                       Group gr = go as Group;
-                       if (gr != null) {
-                               foreach (GraphicObject g in gr.Children) {
-                                       parseTree (g);
-                               }
-                       } else {
-                               PrivateContainer pc = go as PrivateContainer;
-                               if (pc != null)
-                                       parseTree (pc.getTemplateRoot);                         
-                       }
-                       level--;                
-               }
-
-               public static void save(Interface iface) {
-                       y = 1;
-                       level = 0;
-
-                       foreach (GraphicObject go in iface.GraphicTree) 
-                               parseTree (go);                 
-
-                       using (StreamWriter s = new StreamWriter("debug.log")){
-                               s.WriteLine ("[GraphicObjects]");
-                               lock (GraphicObject.GraphicObjects) {
-                                       GraphicObject.GraphicObjects = GraphicObject.GraphicObjects.OrderBy (o => o.yIndex).ToList();
-                                       for (int i = 0; i < GraphicObject.GraphicObjects.Count; i++) {
-                                               GraphicObject g = GraphicObject.GraphicObjects [i];
-                                               s.WriteLine ("{0};{1};{2};{3}", i, g.GetType ().Name, g.yIndex, g.xLevel);      
-                                       }
-                               }
-                               s.WriteLine ("[Events]");
-
-                               foreach (DbgEvent e in events)
-                                       if (e != null)
-                                               s.WriteLine (e.ToString ());
-                       }
-               }
-       }
-}
-#endif
-
diff --git a/src/rsvg/DimensionData.cs b/src/rsvg/DimensionData.cs
deleted file mode 100644 (file)
index 66aab91..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-//Copyright GPL2
-namespace Rsvg {
-
-       using System;
-       using System.Collections;
-       using System.Runtime.InteropServices;
-
-       [StructLayout(LayoutKind.Sequential)]
-       public struct DimensionData {
-
-               public int Width;
-               public int Height;
-               public double Em;
-               public double Ex;
-
-               public static Rsvg.DimensionData Zero = new Rsvg.DimensionData ();
-
-               public static Rsvg.DimensionData New(IntPtr raw) {
-                       if (raw == IntPtr.Zero)
-                               return Rsvg.DimensionData.Zero;
-                       return (Rsvg.DimensionData) Marshal.PtrToStructure (raw, typeof (Rsvg.DimensionData));
-               }
-       }
-}
diff --git a/src/rsvg/Global.cs b/src/rsvg/Global.cs
deleted file mode 100644 (file)
index 6591701..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-// This file was generated by the Gtk# code generator.
-// Any changes made will be lost if regenerated.
-
-namespace Rsvg {
-
-       using System;
-       using System.Runtime.InteropServices;
-
-#region Autogenerated code
-       public class Global {
-
-               [DllImport("rsvg-2")]
-               static extern void rsvg_set_default_dpi_x_y(double dpi_x, double dpi_y);
-
-               public static void SetDefaultDpiXY(double dpi_x, double dpi_y) {
-                       rsvg_set_default_dpi_x_y(dpi_x, dpi_y);
-               }
-
-               [DllImport("rsvg-2")]
-               static extern int rsvg_error_quark();
-
-               public static int ErrorQuark {
-                       get {
-                               int raw_ret = rsvg_error_quark();
-                               int ret = raw_ret;
-                               return ret;
-                       }
-               }
-
-               [DllImport("rsvg-2")]
-               static extern void rsvg_set_default_dpi(double dpi);
-
-               public static double DefaultDpi {
-                       set {
-                               rsvg_set_default_dpi(value);
-                       }
-               }
-
-#endregion
-       }
-}
diff --git a/src/rsvg/Handle.cs b/src/rsvg/Handle.cs
deleted file mode 100644 (file)
index e13f79a..0000000
+++ /dev/null
@@ -1,125 +0,0 @@
-//Copyright GPL2
-using Cairo;
-
-
-namespace Rsvg {
-
-       using System;
-       using System.Collections;
-       using System.Runtime.InteropServices;
-
-       public class Handle {
-
-               public IntPtr Raw;
-
-               [DllImport("rsvg-2")]
-               static extern IntPtr rsvg_handle_new();
-
-               public Handle ()
-               {
-                       Raw = rsvg_handle_new();
-               }
-
-               [DllImport("rsvg-2")]
-               static extern unsafe IntPtr rsvg_handle_new_from_data(byte[] data, UIntPtr n_data, out IntPtr error);
-
-               public unsafe Handle (byte[] data)
-               {
-                       if (GetType () != typeof (Handle)) {
-                               throw new InvalidOperationException ("Can't override this constructor.");
-                       }
-                       IntPtr error = IntPtr.Zero;
-                       Raw = rsvg_handle_new_from_data(data, new UIntPtr ((ulong) (data == null ? 0 : data.Length)), out error);
-                       if (error != IntPtr.Zero) throw new Exception (error.ToString());
-               }
-
-               [DllImport("rsvg-2")]
-               static extern unsafe IntPtr rsvg_handle_new_from_file(string file_name, out IntPtr error);
-
-               public unsafe Handle (string file_name)
-               {
-                       IntPtr error = IntPtr.Zero;
-                       Raw = rsvg_handle_new_from_file(file_name, out error);
-                       if (error != IntPtr.Zero) throw new Exception (error.ToString());
-               }
-
-               [DllImport("rsvg-2")]
-               static extern IntPtr rsvg_handle_get_base_uri(IntPtr raw);
-
-               [DllImport("rsvg-2")]
-               static extern void rsvg_handle_set_dpi(IntPtr raw, double dpi);
-
-               public double Dpi {
-                       set {
-                               rsvg_handle_set_dpi(Raw, value);
-                       }
-               }
-
-               [DllImport("rsvg-2")]
-               static extern void rsvg_handle_render_cairo(IntPtr raw, IntPtr cr);
-
-               public void RenderCairo(Context cr) {
-                       unsafe{
-                               rsvg_handle_render_cairo (Raw, cr == null ? IntPtr.Zero : cr.Handle);
-                       }
-               }
-
-               [DllImport("rsvg-2")]
-               static extern void rsvg_handle_set_dpi_x_y(IntPtr raw, double dpi_x, double dpi_y);
-
-               public void SetDpiXY(double dpi_x, double dpi_y) {
-                       rsvg_handle_set_dpi_x_y(Raw, dpi_x, dpi_y);
-               }
-
-               [DllImport("rsvg-2")]
-               static extern void rsvg_handle_get_dimensions(IntPtr raw, IntPtr dimension_data);
-
-               public Rsvg.DimensionData Dimensions {
-                       get {
-                               Rsvg.DimensionData dimension_data;
-                               IntPtr native_dimension_data = Marshal.AllocHGlobal (Marshal.SizeOf (typeof (Rsvg.DimensionData)));
-                               rsvg_handle_get_dimensions(Raw, native_dimension_data);
-                               dimension_data = Rsvg.DimensionData.New (native_dimension_data);
-                               Marshal.FreeHGlobal (native_dimension_data);
-                               return dimension_data;
-                       }
-               }
-
-               [DllImport("rsvg-2")]
-               static extern unsafe bool rsvg_handle_close(IntPtr raw, out IntPtr error);
-
-               public unsafe bool Close() {
-                       IntPtr error = IntPtr.Zero;
-                       bool raw_ret = rsvg_handle_close(Raw, out error);
-                       if (error != IntPtr.Zero) throw new Exception (error.ToString());
-                       return raw_ret;
-               }
-
-               [DllImport("rsvg-2")]
-               static extern IntPtr rsvg_handle_get_title(IntPtr raw);
-
-               public string Title {
-                       get {
-                               IntPtr raw_ret = rsvg_handle_get_title(Raw);
-                               return "not supported";
-                       }
-               }
-
-               [DllImport("rsvg-2")]
-               static extern void rsvg_handle_render_cairo_sub(IntPtr raw, IntPtr cr, string id);
-
-               public void RenderCairoSub(Cairo.Context cr, string id) {
-                       rsvg_handle_render_cairo_sub(Raw, cr == null ? IntPtr.Zero : cr.Handle, id);
-               }
-
-               [DllImport("rsvg-2")]
-               static extern IntPtr rsvg_handle_get_metadata(IntPtr raw);
-
-               public string Metadata {
-                       get {
-                               IntPtr raw_ret = rsvg_handle_get_metadata(Raw);
-                               return "not supported";
-                       }
-               }
-       }
-}
diff --git a/src/win32/Win32.cs b/src/win32/Win32.cs
deleted file mode 100644 (file)
index 3249fce..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Runtime.InteropServices;
-using System.Diagnostics;
-
-namespace Crow
-{
-    public static class Win32
-    {
-        [DllImport("user32.dll")]
-        public static extern IntPtr GetDC(IntPtr hWnd);
-        #region  mouse winApi
-
-        [System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential)]
-        public struct Point
-        {
-
-            /// LONG->int
-            public int x;
-
-            /// LONG->int
-            public int y;
-        }
-        [System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential)]
-        public struct HICON__
-        {
-
-            /// int
-            public int unused;
-        }
-
-#if _WIN32 || _WIN64
-        /// Return Type: HCURSOR->HICON->HICON__*
-        ///hCursor: HCURSOR->HICON->HICON__*
-        [System.Runtime.InteropServices.DllImportAttribute("user32.dll", EntryPoint = "SetCursor")]
-        public static extern System.IntPtr SetCursor([System.Runtime.InteropServices.InAttribute()] System.IntPtr hCursor);
-#elif __linux__
-               public static System.IntPtr SetCursor(System.IntPtr hCursor)
-               {
-
-                       return (IntPtr)0;
-               }
-#endif
-
-        /// Return Type: BOOL->int
-        ///lpPoint: LPPOINT->tagPOINT*
-        [System.Runtime.InteropServices.DllImportAttribute("user32.dll", EntryPoint = "GetCursorPos")]
-        [return: System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.Bool)]
-        public static extern bool GetCursorPos([System.Runtime.InteropServices.OutAttribute()] out Point lpPoint);
-
-        /// Return Type: BOOL->int
-        ///X: int
-        ///Y: int
-        [System.Runtime.InteropServices.DllImportAttribute("user32.dll", EntryPoint = "SetCursorPos")]
-        [return: System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.Bool)]
-        public static extern bool SetCursorPos(int X, int Y);
-
-        #endregion
-    }
-}
diff --git a/src/win32/winApi.cs b/src/win32/winApi.cs
deleted file mode 100755 (executable)
index 7ed9f90..0000000
+++ /dev/null
@@ -1,1238 +0,0 @@
-   /// <summary>
-  /// Windows Messages
-  /// Defined in winuser.h from Windows SDK v6.1
-  /// Documentation pulled from MSDN.
-  /// </summary>
-using System;
-
-public enum WM : uint
-  {
-    /// <summary>
-    /// The WM_NULL message performs no operation. An application sends the WM_NULL message if it wants to post a message that the recipient window will ignore.
-    /// </summary>
-    NULL = 0x0000,
-    /// <summary>
-    /// The WM_CREATE message is sent when an application requests that a window be created by calling the CreateWindowEx or CreateWindow function. (The message is sent before the function returns.) The window procedure of the new window receives this message after the window is created, but before the window becomes visible.
-    /// </summary>
-    CREATE = 0x0001,
-    /// <summary>
-    /// The WM_DESTROY message is sent when a window is being destroyed. It is sent to the window procedure of the window being destroyed after the window is removed from the screen.
-    /// This message is sent first to the window being destroyed and then to the child windows (if any) as they are destroyed. During the processing of the message, it can be assumed that all child windows still exist.
-    /// /// </summary>
-    DESTROY = 0x0002,
-    /// <summary>
-    /// The WM_MOVE message is sent after a window has been moved.
-    /// </summary>
-    MOVE = 0x0003,
-    /// <summary>
-    /// The WM_SIZE message is sent to a window after its size has changed.
-    /// </summary>
-    SIZE = 0x0005,
-    /// <summary>
-    /// The WM_ACTIVATE message is sent to both the window being activated and the window being deactivated. If the windows use the same input queue, the message is sent synchronously, first to the window procedure of the top-level window being deactivated, then to the window procedure of the top-level window being activated. If the windows use different input queues, the message is sent asynchronously, so the window is activated immediately.
-    /// </summary>
-    ACTIVATE = 0x0006,
-    /// <summary>
-    /// The WM_SETFOCUS message is sent to a window after it has gained the keyboard focus.
-    /// </summary>
-    SETFOCUS = 0x0007,
-    /// <summary>
-    /// The WM_KILLFOCUS message is sent to a window immediately before it loses the keyboard focus.
-    /// </summary>
-    KILLFOCUS = 0x0008,
-    /// <summary>
-    /// The WM_ENABLE message is sent when an application changes the enabled state of a window. It is sent to the window whose enabled state is changing. This message is sent before the EnableWindow function returns, but after the enabled state (WS_DISABLED style bit) of the window has changed.
-    /// </summary>
-    ENABLE = 0x000A,
-    /// <summary>
-    /// An application sends the WM_SETREDRAW message to a window to allow changes in that window to be redrawn or to prevent changes in that window from being redrawn.
-    /// </summary>
-    SETREDRAW = 0x000B,
-    /// <summary>
-    /// An application sends a WM_SETTEXT message to set the text of a window.
-    /// </summary>
-    SETTEXT = 0x000C,
-    /// <summary>
-    /// An application sends a WM_GETTEXT message to copy the text that corresponds to a window into a buffer provided by the caller.
-    /// </summary>
-    GETTEXT = 0x000D,
-    /// <summary>
-    /// An application sends a WM_GETTEXTLENGTH message to determine the length, in characters, of the text associated with a window.
-    /// </summary>
-    GETTEXTLENGTH = 0x000E,
-    /// <summary>
-    /// The WM_PAINT message is sent when the system or another application makes a request to paint a portion of an application's window. The message is sent when the UpdateWindow or RedrawWindow function is called, or by the DispatchMessage function when the application obtains a WM_PAINT message by using the GetMessage or PeekMessage function.
-    /// </summary>
-    PAINT = 0x000F,
-    /// <summary>
-    /// The WM_CLOSE message is sent as a signal that a window or an application should terminate.
-    /// </summary>
-    CLOSE = 0x0010,
-    /// <summary>
-    /// The WM_QUERYENDSESSION message is sent when the user chooses to end the session or when an application calls one of the system shutdown functions. If any application returns zero, the session is not ended. The system stops sending WM_QUERYENDSESSION messages as soon as one application returns zero.
-    /// After processing this message, the system sends the WM_ENDSESSION message with the wParam parameter set to the results of the WM_QUERYENDSESSION message.
-    /// </summary>
-    QUERYENDSESSION = 0x0011,
-    /// <summary>
-    /// The WM_QUERYOPEN message is sent to an icon when the user requests that the window be restored to its previous size and position.
-    /// </summary>
-    QUERYOPEN = 0x0013,
-    /// <summary>
-    /// The WM_ENDSESSION message is sent to an application after the system processes the results of the WM_QUERYENDSESSION message. The WM_ENDSESSION message informs the application whether the session is ending.
-    /// </summary>
-    ENDSESSION = 0x0016,
-    /// <summary>
-    /// The WM_QUIT message indicates a request to terminate an application and is generated when the application calls the PostQuitMessage function. It causes the GetMessage function to return zero.
-    /// </summary>
-    QUIT = 0x0012,
-    /// <summary>
-    /// The WM_ERASEBKGND message is sent when the window background must be erased (for example, when a window is resized). The message is sent to prepare an invalidated portion of a window for painting.
-    /// </summary>
-    ERASEBKGND = 0x0014,
-    /// <summary>
-    /// This message is sent to all top-level windows when a change is made to a system color setting.
-    /// </summary>
-    SYSCOLORCHANGE = 0x0015,
-    /// <summary>
-    /// The WM_SHOWWINDOW message is sent to a window when the window is about to be hidden or shown.
-    /// </summary>
-    SHOWWINDOW = 0x0018,
-    /// <summary>
-    /// An application sends the WM_WININICHANGE message to all top-level windows after making a change to the WIN.INI file. The SystemParametersInfo function sends this message after an application uses the function to change a setting in WIN.INI.
-    /// Note  The WM_WININICHANGE message is provided only for compatibility with earlier versions of the system. Applications should use the WM_SETTINGCHANGE message.
-    /// </summary>
-    WININICHANGE = 0x001A,
-    /// <summary>
-    /// An application sends the WM_WININICHANGE message to all top-level windows after making a change to the WIN.INI file. The SystemParametersInfo function sends this message after an application uses the function to change a setting in WIN.INI.
-    /// Note  The WM_WININICHANGE message is provided only for compatibility with earlier versions of the system. Applications should use the WM_SETTINGCHANGE message.
-    /// </summary>
-    SETTINGCHANGE = WININICHANGE,
-    /// <summary>
-    /// The WM_DEVMODECHANGE message is sent to all top-level windows whenever the user changes device-mode settings.
-    /// </summary>
-    DEVMODECHANGE = 0x001B,
-    /// <summary>
-    /// The WM_ACTIVATEAPP message is sent when a window belonging to a different application than the active window is about to be activated. The message is sent to the application whose window is being activated and to the application whose window is being deactivated.
-    /// </summary>
-    ACTIVATEAPP = 0x001C,
-    /// <summary>
-    /// An application sends the WM_FONTCHANGE message to all top-level windows in the system after changing the pool of font resources.
-    /// </summary>
-    FONTCHANGE = 0x001D,
-    /// <summary>
-    /// A message that is sent whenever there is a change in the system time.
-    /// </summary>
-    TIMECHANGE = 0x001E,
-    /// <summary>
-    /// The WM_CANCELMODE message is sent to cancel certain modes, such as mouse capture. For example, the system sends this message to the active window when a dialog box or message box is displayed. Certain functions also send this message explicitly to the specified window regardless of whether it is the active window. For example, the EnableWindow function sends this message when disabling the specified window.
-    /// </summary>
-    CANCELMODE = 0x001F,
-    /// <summary>
-    /// The WM_SETCURSOR message is sent to a window if the mouse causes the cursor to move within a window and mouse input is not captured.
-    /// </summary>
-    SETCURSOR = 0x0020,
-    /// <summary>
-    /// The WM_MOUSEACTIVATE message is sent when the cursor is in an inactive window and the user presses a mouse button. The parent window receives this message only if the child window passes it to the DefWindowProc function.
-    /// </summary>
-    MOUSEACTIVATE = 0x0021,
-    /// <summary>
-    /// The WM_CHILDACTIVATE message is sent to a child window when the user clicks the window's title bar or when the window is activated, moved, or sized.
-    /// </summary>
-    CHILDACTIVATE = 0x0022,
-    /// <summary>
-    /// The WM_QUEUESYNC message is sent by a computer-based training (CBT) application to separate user-input messages from other messages sent through the WH_JOURNALPLAYBACK Hook procedure.
-    /// </summary>
-    QUEUESYNC = 0x0023,
-    /// <summary>
-    /// The WM_GETMINMAXINFO message is sent to a window when the size or position of the window is about to change. An application can use this message to override the window's default maximized size and position, or its default minimum or maximum tracking size.
-    /// </summary>
-    GETMINMAXINFO = 0x0024,
-    /// <summary>
-    /// Windows NT 3.51 and earlier: The WM_PAINTICON message is sent to a minimized window when the icon is to be painted. This message is not sent by newer versions of Microsoft Windows, except in unusual circumstances explained in the Remarks.
-    /// </summary>
-    PAINTICON = 0x0026,
-    /// <summary>
-    /// Windows NT 3.51 and earlier: The WM_ICONERASEBKGND message is sent to a minimized window when the background of the icon must be filled before painting the icon. A window receives this message only if a class icon is defined for the window; otherwise, WM_ERASEBKGND is sent. This message is not sent by newer versions of Windows.
-    /// </summary>
-    ICONERASEBKGND = 0x0027,
-    /// <summary>
-    /// The WM_NEXTDLGCTL message is sent to a dialog box procedure to set the keyboard focus to a different control in the dialog box.
-    /// </summary>
-    NEXTDLGCTL = 0x0028,
-    /// <summary>
-    /// The WM_SPOOLERSTATUS message is sent from Print Manager whenever a job is added to or removed from the Print Manager queue.
-    /// </summary>
-    SPOOLERSTATUS = 0x002A,
-    /// <summary>
-    /// The WM_DRAWITEM message is sent to the parent window of an owner-drawn button, combo box, list box, or menu when a visual aspect of the button, combo box, list box, or menu has changed.
-    /// </summary>
-    DRAWITEM = 0x002B,
-    /// <summary>
-    /// The WM_MEASUREITEM message is sent to the owner window of a combo box, list box, list view control, or menu item when the control or menu is created.
-    /// </summary>
-    MEASUREITEM = 0x002C,
-    /// <summary>
-    /// Sent to the owner of a list box or combo box when the list box or combo box is destroyed or when items are removed by the LB_DELETESTRING, LB_RESETCONTENT, CB_DELETESTRING, or CB_RESETCONTENT message. The system sends a WM_DELETEITEM message for each deleted item. The system sends the WM_DELETEITEM message for any deleted list box or combo box item with nonzero item data.
-    /// </summary>
-    DELETEITEM = 0x002D,
-    /// <summary>
-    /// Sent by a list box with the LBS_WANTKEYBOARDINPUT style to its owner in response to a WM_KEYDOWN message.
-    /// </summary>
-    VKEYTOITEM = 0x002E,
-    /// <summary>
-    /// Sent by a list box with the LBS_WANTKEYBOARDINPUT style to its owner in response to a WM_CHAR message.
-    /// </summary>
-    CHARTOITEM = 0x002F,
-    /// <summary>
-    /// An application sends a WM_SETFONT message to specify the font that a control is to use when drawing text.
-    /// </summary>
-    SETFONT = 0x0030,
-    /// <summary>
-    /// An application sends a WM_GETFONT message to a control to retrieve the font with which the control is currently drawing its text.
-    /// </summary>
-    GETFONT = 0x0031,
-    /// <summary>
-    /// An application sends a WM_SETHOTKEY message to a window to associate a hot key with the window. When the user presses the hot key, the system activates the window.
-    /// </summary>
-    SETHOTKEY = 0x0032,
-    /// <summary>
-    /// An application sends a WM_GETHOTKEY message to determine the hot key associated with a window.
-    /// </summary>
-    GETHOTKEY = 0x0033,
-    /// <summary>
-    /// The WM_QUERYDRAGICON message is sent to a minimized (iconic) window. The window is about to be dragged by the user but does not have an icon defined for its class. An application can return a handle to an icon or cursor. The system displays this cursor or icon while the user drags the icon.
-    /// </summary>
-    QUERYDRAGICON = 0x0037,
-    /// <summary>
-    /// The system sends the WM_COMPAREITEM message to determine the relative position of a new item in the sorted list of an owner-drawn combo box or list box. Whenever the application adds a new item, the system sends this message to the owner of a combo box or list box created with the CBS_SORT or LBS_SORT style.
-    /// </summary>
-    COMPAREITEM = 0x0039,
-    /// <summary>
-    /// Active Accessibility sends the WM_GETOBJECT message to obtain information about an accessible object contained in a server application.
-    /// Applications never send this message directly. It is sent only by Active Accessibility in response to calls to AccessibleObjectFromPoint, AccessibleObjectFromEvent, or AccessibleObjectFromWindow. However, server applications handle this message.
-    /// </summary>
-    GETOBJECT = 0x003D,
-    /// <summary>
-    /// The WM_COMPACTING message is sent to all top-level windows when the system detects more than 12.5 percent of system time over a 30- to 60-second interval is being spent compacting memory. This indicates that system memory is low.
-    /// </summary>
-    COMPACTING = 0x0041,
-    /// <summary>
-    /// WM_COMMNOTIFY is Obsolete for Win32-Based Applications
-    /// </summary>
-    [Obsolete]
-    COMMNOTIFY = 0x0044,
-    /// <summary>
-    /// The WM_WINDOWPOSCHANGING message is sent to a window whose size, position, or place in the Z order is about to change as a result of a call to the SetWindowPos function or another window-management function.
-    /// </summary>
-    WINDOWPOSCHANGING = 0x0046,
-    /// <summary>
-    /// The WM_WINDOWPOSCHANGED message is sent to a window whose size, position, or place in the Z order has changed as a result of a call to the SetWindowPos function or another window-management function.
-    /// </summary>
-    WINDOWPOSCHANGED = 0x0047,
-    /// <summary>
-    /// Notifies applications that the system, typically a battery-powered personal computer, is about to enter a suspended mode.
-    /// Use: POWERBROADCAST
-    /// </summary>
-    [Obsolete]
-    POWER = 0x0048,
-    /// <summary>
-    /// An application sends the WM_COPYDATA message to pass data to another application.
-    /// </summary>
-    COPYDATA = 0x004A,
-    /// <summary>
-    /// The WM_CANCELJOURNAL message is posted to an application when a user cancels the application's journaling activities. The message is posted with a NULL window handle.
-    /// </summary>
-    CANCELJOURNAL = 0x004B,
-    /// <summary>
-    /// Sent by a common control to its parent window when an event has occurred or the control requires some information.
-    /// </summary>
-    NOTIFY = 0x004E,
-    /// <summary>
-    /// The WM_INPUTLANGCHANGEREQUEST message is posted to the window with the focus when the user chooses a new input language, either with the hotkey (specified in the Keyboard control panel application) or from the indicator on the system taskbar. An application can accept the change by passing the message to the DefWindowProc function or reject the change (and prevent it from taking place) by returning immediately.
-    /// </summary>
-    INPUTLANGCHANGEREQUEST = 0x0050,
-    /// <summary>
-    /// The WM_INPUTLANGCHANGE message is sent to the topmost affected window after an application's input language has been changed. You should make any application-specific settings and pass the message to the DefWindowProc function, which passes the message to all first-level child windows. These child windows can pass the message to DefWindowProc to have it pass the message to their child windows, and so on.
-    /// </summary>
-    INPUTLANGCHANGE = 0x0051,
-    /// <summary>
-    /// Sent to an application that has initiated a training card with Microsoft Windows Help. The message informs the application when the user clicks an authorable button. An application initiates a training card by specifying the HELP_TCARD command in a call to the WinHelp function.
-    /// </summary>
-    TCARD = 0x0052,
-    /// <summary>
-    /// Indicates that the user pressed the F1 key. If a menu is active when F1 is pressed, WM_HELP is sent to the window associated with the menu; otherwise, WM_HELP is sent to the window that has the keyboard focus. If no window has the keyboard focus, WM_HELP is sent to the currently active window.
-    /// </summary>
-    HELP = 0x0053,
-    /// <summary>
-    /// The WM_USERCHANGED message is sent to all windows after the user has logged on or off. When the user logs on or off, the system updates the user-specific settings. The system sends this message immediately after updating the settings.
-    /// </summary>
-    USERCHANGED = 0x0054,
-    /// <summary>
-    /// Determines if a window accepts ANSI or Unicode structures in the WM_NOTIFY notification message. WM_NOTIFYFORMAT messages are sent from a common control to its parent window and from the parent window to the common control.
-    /// </summary>
-    NOTIFYFORMAT = 0x0055,
-    /// <summary>
-    /// The WM_CONTEXTMENU message notifies a window that the user clicked the right mouse button (right-clicked) in the window.
-    /// </summary>
-    CONTEXTMENU = 0x007B,
-    /// <summary>
-    /// The WM_STYLECHANGING message is sent to a window when the SetWindowLong function is about to change one or more of the window's styles.
-    /// </summary>
-    STYLECHANGING = 0x007C,
-    /// <summary>
-    /// The WM_STYLECHANGED message is sent to a window after the SetWindowLong function has changed one or more of the window's styles
-    /// </summary>
-    STYLECHANGED = 0x007D,
-    /// <summary>
-    /// The WM_DISPLAYCHANGE message is sent to all windows when the display resolution has changed.
-    /// </summary>
-    DISPLAYCHANGE = 0x007E,
-    /// <summary>
-    /// The WM_GETICON message is sent to a window to retrieve a handle to the large or small icon associated with a window. The system displays the large icon in the ALT+TAB dialog, and the small icon in the window caption.
-    /// </summary>
-    GETICON = 0x007F,
-    /// <summary>
-    /// An application sends the WM_SETICON message to associate a new large or small icon with a window. The system displays the large icon in the ALT+TAB dialog box, and the small icon in the window caption.
-    /// </summary>
-    SETICON = 0x0080,
-    /// <summary>
-    /// The WM_NCCREATE message is sent prior to the WM_CREATE message when a window is first created.
-    /// </summary>
-    NCCREATE = 0x0081,
-    /// <summary>
-    /// The WM_NCDESTROY message informs a window that its nonclient area is being destroyed. The DestroyWindow function sends the WM_NCDESTROY message to the window following the WM_DESTROY message. WM_DESTROY is used to free the allocated memory object associated with the window.
-    /// The WM_NCDESTROY message is sent after the child windows have been destroyed. In contrast, WM_DESTROY is sent before the child windows are destroyed.
-    /// </summary>
-    NCDESTROY = 0x0082,
-    /// <summary>
-    /// The WM_NCCALCSIZE message is sent when the size and position of a window's client area must be calculated. By processing this message, an application can control the content of the window's client area when the size or position of the window changes.
-    /// </summary>
-    NCCALCSIZE = 0x0083,
-    /// <summary>
-    /// The WM_NCHITTEST message is sent to a window when the cursor moves, or when a mouse button is pressed or released. If the mouse is not captured, the message is sent to the window beneath the cursor. Otherwise, the message is sent to the window that has captured the mouse.
-    /// </summary>
-    NCHITTEST = 0x0084,
-    /// <summary>
-    /// The WM_NCPAINT message is sent to a window when its frame must be painted.
-    /// </summary>
-    NCPAINT = 0x0085,
-    /// <summary>
-    /// The WM_NCACTIVATE message is sent to a window when its nonclient area needs to be changed to indicate an active or inactive state.
-    /// </summary>
-    NCACTIVATE = 0x0086,
-    /// <summary>
-    /// The WM_GETDLGCODE message is sent to the window procedure associated with a control. By default, the system handles all keyboard input to the control; the system interprets certain types of keyboard input as dialog box navigation keys. To override this default behavior, the control can respond to the WM_GETDLGCODE message to indicate the types of input it wants to process itself.
-    /// </summary>
-    GETDLGCODE = 0x0087,
-    /// <summary>
-    /// The WM_SYNCPAINT message is used to synchronize painting while avoiding linking independent GUI threads.
-    /// </summary>
-    SYNCPAINT = 0x0088,
-    /// <summary>
-    /// The WM_NCMOUSEMOVE message is posted to a window when the cursor is moved within the nonclient area of the window. This message is posted to the window that contains the cursor. If a window has captured the mouse, this message is not posted.
-    /// </summary>
-    NCMOUSEMOVE = 0x00A0,
-    /// <summary>
-    /// The WM_NCLBUTTONDOWN message is posted when the user presses the left mouse button while the cursor is within the nonclient area of a window. This message is posted to the window that contains the cursor. If a window has captured the mouse, this message is not posted.
-    /// </summary>
-    NCLBUTTONDOWN = 0x00A1,
-    /// <summary>
-    /// The WM_NCLBUTTONUP message is posted when the user releases the left mouse button while the cursor is within the nonclient area of a window. This message is posted to the window that contains the cursor. If a window has captured the mouse, this message is not posted.
-    /// </summary>
-    NCLBUTTONUP = 0x00A2,
-    /// <summary>
-    /// The WM_NCLBUTTONDBLCLK message is posted when the user double-clicks the left mouse button while the cursor is within the nonclient area of a window. This message is posted to the window that contains the cursor. If a window has captured the mouse, this message is not posted.
-    /// </summary>
-    NCLBUTTONDBLCLK = 0x00A3,
-    /// <summary>
-    /// The WM_NCRBUTTONDOWN message is posted when the user presses the right mouse button while the cursor is within the nonclient area of a window. This message is posted to the window that contains the cursor. If a window has captured the mouse, this message is not posted.
-    /// </summary>
-    NCRBUTTONDOWN = 0x00A4,
-    /// <summary>
-    /// The WM_NCRBUTTONUP message is posted when the user releases the right mouse button while the cursor is within the nonclient area of a window. This message is posted to the window that contains the cursor. If a window has captured the mouse, this message is not posted.
-    /// </summary>
-    NCRBUTTONUP = 0x00A5,
-    /// <summary>
-    /// The WM_NCRBUTTONDBLCLK message is posted when the user double-clicks the right mouse button while the cursor is within the nonclient area of a window. This message is posted to the window that contains the cursor. If a window has captured the mouse, this message is not posted.
-    /// </summary>
-    NCRBUTTONDBLCLK = 0x00A6,
-    /// <summary>
-    /// The WM_NCMBUTTONDOWN message is posted when the user presses the middle mouse button while the cursor is within the nonclient area of a window. This message is posted to the window that contains the cursor. If a window has captured the mouse, this message is not posted.
-    /// </summary>
-    NCMBUTTONDOWN = 0x00A7,
-    /// <summary>
-    /// The WM_NCMBUTTONUP message is posted when the user releases the middle mouse button while the cursor is within the nonclient area of a window. This message is posted to the window that contains the cursor. If a window has captured the mouse, this message is not posted.
-    /// </summary>
-    NCMBUTTONUP = 0x00A8,
-    /// <summary>
-    /// The WM_NCMBUTTONDBLCLK message is posted when the user double-clicks the middle mouse button while the cursor is within the nonclient area of a window. This message is posted to the window that contains the cursor. If a window has captured the mouse, this message is not posted.
-    /// </summary>
-    NCMBUTTONDBLCLK = 0x00A9,
-    /// <summary>
-    /// The WM_NCXBUTTONDOWN message is posted when the user presses the first or second X button while the cursor is in the nonclient area of a window. This message is posted to the window that contains the cursor. If a window has captured the mouse, this message is not posted.
-    /// </summary>
-    NCXBUTTONDOWN = 0x00AB,
-    /// <summary>
-    /// The WM_NCXBUTTONUP message is posted when the user releases the first or second X button while the cursor is in the nonclient area of a window. This message is posted to the window that contains the cursor. If a window has captured the mouse, this message is not posted.
-    /// </summary>
-    NCXBUTTONUP = 0x00AC,
-    /// <summary>
-    /// The WM_NCXBUTTONDBLCLK message is posted when the user double-clicks the first or second X button while the cursor is in the nonclient area of a window. This message is posted to the window that contains the cursor. If a window has captured the mouse, this message is not posted.
-    /// </summary>
-    NCXBUTTONDBLCLK = 0x00AD,
-    /// <summary>
-    /// The WM_INPUT_DEVICE_CHANGE message is sent to the window that registered to receive raw input. A window receives this message through its WindowProc function.
-    /// </summary>
-    INPUT_DEVICE_CHANGE = 0x00FE,
-    /// <summary>
-    /// The WM_INPUT message is sent to the window that is getting raw input.
-    /// </summary>
-    INPUT = 0x00FF,
-    /// <summary>
-    /// This message filters for keyboard messages.
-    /// </summary>
-    KEYFIRST = 0x0100,
-    /// <summary>
-    /// The WM_KEYDOWN message is posted to the window with the keyboard focus when a nonsystem key is pressed. A nonsystem key is a key that is pressed when the ALT key is not pressed.
-    /// </summary>
-    KEYDOWN = 0x0100,
-    /// <summary>
-    /// The WM_KEYUP message is posted to the window with the keyboard focus when a nonsystem key is released. A nonsystem key is a key that is pressed when the ALT key is not pressed, or a keyboard key that is pressed when a window has the keyboard focus.
-    /// </summary>
-    KEYUP = 0x0101,
-    /// <summary>
-    /// The WM_CHAR message is posted to the window with the keyboard focus when a WM_KEYDOWN message is translated by the TranslateMessage function. The WM_CHAR message contains the character code of the key that was pressed.
-    /// </summary>
-    CHAR = 0x0102,
-    /// <summary>
-    /// The WM_DEADCHAR message is posted to the window with the keyboard focus when a WM_KEYUP message is translated by the TranslateMessage function. WM_DEADCHAR specifies a character code generated by a dead key. A dead key is a key that generates a character, such as the umlaut (double-dot), that is combined with another character to form a composite character. For example, the umlaut-O character (Ö) is generated by typing the dead key for the umlaut character, and then typing the O key.
-    /// </summary>
-    DEADCHAR = 0x0103,
-    /// <summary>
-    /// The WM_SYSKEYDOWN message is posted to the window with the keyboard focus when the user presses the F10 key (which activates the menu bar) or holds down the ALT key and then presses another key. It also occurs when no window currently has the keyboard focus; in this case, the WM_SYSKEYDOWN message is sent to the active window. The window that receives the message can distinguish between these two contexts by checking the context code in the lParam parameter.
-    /// </summary>
-    SYSKEYDOWN = 0x0104,
-    /// <summary>
-    /// The WM_SYSKEYUP message is posted to the window with the keyboard focus when the user releases a key that was pressed while the ALT key was held down. It also occurs when no window currently has the keyboard focus; in this case, the WM_SYSKEYUP message is sent to the active window. The window that receives the message can distinguish between these two contexts by checking the context code in the lParam parameter.
-    /// </summary>
-    SYSKEYUP = 0x0105,
-    /// <summary>
-    /// The WM_SYSCHAR message is posted to the window with the keyboard focus when a WM_SYSKEYDOWN message is translated by the TranslateMessage function. It specifies the character code of a system character key — that is, a character key that is pressed while the ALT key is down.
-    /// </summary>
-    SYSCHAR = 0x0106,
-    /// <summary>
-    /// The WM_SYSDEADCHAR message is sent to the window with the keyboard focus when a WM_SYSKEYDOWN message is translated by the TranslateMessage function. WM_SYSDEADCHAR specifies the character code of a system dead key — that is, a dead key that is pressed while holding down the ALT key.
-    /// </summary>
-    SYSDEADCHAR = 0x0107,
-    /// <summary>
-    /// The WM_UNICHAR message is posted to the window with the keyboard focus when a WM_KEYDOWN message is translated by the TranslateMessage function. The WM_UNICHAR message contains the character code of the key that was pressed.
-    /// The WM_UNICHAR message is equivalent to WM_CHAR, but it uses Unicode Transformation Format (UTF)-32, whereas WM_CHAR uses UTF-16. It is designed to send or post Unicode characters to ANSI windows and it can can handle Unicode Supplementary Plane characters.
-    /// </summary>
-    UNICHAR = 0x0109,
-    /// <summary>
-    /// This message filters for keyboard messages.
-    /// </summary>
-    KEYLAST = 0x0109,
-    /// <summary>
-    /// Sent immediately before the IME generates the composition string as a result of a keystroke. A window receives this message through its WindowProc function.
-    /// </summary>
-    IME_STARTCOMPOSITION = 0x010D,
-    /// <summary>
-    /// Sent to an application when the IME ends composition. A window receives this message through its WindowProc function.
-    /// </summary>
-    IME_ENDCOMPOSITION = 0x010E,
-    /// <summary>
-    /// Sent to an application when the IME changes composition status as a result of a keystroke. A window receives this message through its WindowProc function.
-    /// </summary>
-    IME_COMPOSITION = 0x010F,
-    IME_KEYLAST = 0x010F,
-    /// <summary>
-    /// The WM_INITDIALOG message is sent to the dialog box procedure immediately before a dialog box is displayed. Dialog box procedures typically use this message to initialize controls and carry out any other initialization tasks that affect the appearance of the dialog box.
-    /// </summary>
-    INITDIALOG = 0x0110,
-    /// <summary>
-    /// The WM_COMMAND message is sent when the user selects a command item from a menu, when a control sends a notification message to its parent window, or when an accelerator keystroke is translated.
-    /// </summary>
-    COMMAND = 0x0111,
-    /// <summary>
-    /// A window receives this message when the user chooses a command from the Window menu, clicks the maximize button, minimize button, restore button, close button, or moves the form. You can stop the form from moving by filtering this out.
-    /// </summary>
-    SYSCOMMAND = 0x0112,
-    /// <summary>
-    /// The WM_TIMER message is posted to the installing thread's message queue when a timer expires. The message is posted by the GetMessage or PeekMessage function.
-    /// </summary>
-    TIMER = 0x0113,
-    /// <summary>
-    /// The WM_HSCROLL message is sent to a window when a scroll event occurs in the window's standard horizontal scroll bar. This message is also sent to the owner of a horizontal scroll bar control when a scroll event occurs in the control.
-    /// </summary>
-    HSCROLL = 0x0114,
-    /// <summary>
-    /// The WM_VSCROLL message is sent to a window when a scroll event occurs in the window's standard vertical scroll bar. This message is also sent to the owner of a vertical scroll bar control when a scroll event occurs in the control.
-    /// </summary>
-    VSCROLL = 0x0115,
-    /// <summary>
-    /// The WM_INITMENU message is sent when a menu is about to become active. It occurs when the user clicks an item on the menu bar or presses a menu key. This allows the application to modify the menu before it is displayed.
-    /// </summary>
-    INITMENU = 0x0116,
-    /// <summary>
-    /// The WM_INITMENUPOPUP message is sent when a drop-down menu or submenu is about to become active. This allows an application to modify the menu before it is displayed, without changing the entire menu.
-    /// </summary>
-    INITMENUPOPUP = 0x0117,
-    /// <summary>
-    /// The WM_MENUSELECT message is sent to a menu's owner window when the user selects a menu item.
-    /// </summary>
-    MENUSELECT = 0x011F,
-    /// <summary>
-    /// The WM_MENUCHAR message is sent when a menu is active and the user presses a key that does not correspond to any mnemonic or accelerator key. This message is sent to the window that owns the menu.
-    /// </summary>
-    MENUCHAR = 0x0120,
-    /// <summary>
-    /// The WM_ENTERIDLE message is sent to the owner window of a modal dialog box or menu that is entering an idle state. A modal dialog box or menu enters an idle state when no messages are waiting in its queue after it has processed one or more previous messages.
-    /// </summary>
-    ENTERIDLE = 0x0121,
-    /// <summary>
-    /// The WM_MENURBUTTONUP message is sent when the user releases the right mouse button while the cursor is on a menu item.
-    /// </summary>
-    MENURBUTTONUP = 0x0122,
-    /// <summary>
-    /// The WM_MENUDRAG message is sent to the owner of a drag-and-drop menu when the user drags a menu item.
-    /// </summary>
-    MENUDRAG = 0x0123,
-    /// <summary>
-    /// The WM_MENUGETOBJECT message is sent to the owner of a drag-and-drop menu when the mouse cursor enters a menu item or moves from the center of the item to the top or bottom of the item.
-    /// </summary>
-    MENUGETOBJECT = 0x0124,
-    /// <summary>
-    /// The WM_UNINITMENUPOPUP message is sent when a drop-down menu or submenu has been destroyed.
-    /// </summary>
-    UNINITMENUPOPUP = 0x0125,
-    /// <summary>
-    /// The WM_MENUCOMMAND message is sent when the user makes a selection from a menu.
-    /// </summary>
-    MENUCOMMAND = 0x0126,
-    /// <summary>
-    /// An application sends the WM_CHANGEUISTATE message to indicate that the user interface (UI) state should be changed.
-    /// </summary>
-    CHANGEUISTATE = 0x0127,
-    /// <summary>
-    /// An application sends the WM_UPDATEUISTATE message to change the user interface (UI) state for the specified window and all its child windows.
-    /// </summary>
-    UPDATEUISTATE = 0x0128,
-    /// <summary>
-    /// An application sends the WM_QUERYUISTATE message to retrieve the user interface (UI) state for a window.
-    /// </summary>
-    QUERYUISTATE = 0x0129,
-    /// <summary>
-    /// The WM_CTLCOLORMSGBOX message is sent to the owner window of a message box before Windows draws the message box. By responding to this message, the owner window can set the text and background colors of the message box by using the given display device context handle.
-    /// </summary>
-    CTLCOLORMSGBOX = 0x0132,
-    /// <summary>
-    /// An edit control that is not read-only or disabled sends the WM_CTLCOLOREDIT message to its parent window when the control is about to be drawn. By responding to this message, the parent window can use the specified device context handle to set the text and background colors of the edit control.
-    /// </summary>
-    CTLCOLOREDIT = 0x0133,
-    /// <summary>
-    /// Sent to the parent window of a list box before the system draws the list box. By responding to this message, the parent window can set the text and background colors of the list box by using the specified display device context handle.
-    /// </summary>
-    CTLCOLORLISTBOX = 0x0134,
-    /// <summary>
-    /// The WM_CTLCOLORBTN message is sent to the parent window of a button before drawing the button. The parent window can change the button's text and background colors. However, only owner-drawn buttons respond to the parent window processing this message.
-    /// </summary>
-    CTLCOLORBTN = 0x0135,
-    /// <summary>
-    /// The WM_CTLCOLORDLG message is sent to a dialog box before the system draws the dialog box. By responding to this message, the dialog box can set its text and background colors using the specified display device context handle.
-    /// </summary>
-    CTLCOLORDLG = 0x0136,
-    /// <summary>
-    /// The WM_CTLCOLORSCROLLBAR message is sent to the parent window of a scroll bar control when the control is about to be drawn. By responding to this message, the parent window can use the display context handle to set the background color of the scroll bar control.
-    /// </summary>
-    CTLCOLORSCROLLBAR = 0x0137,
-    /// <summary>
-    /// A static control, or an edit control that is read-only or disabled, sends the WM_CTLCOLORSTATIC message to its parent window when the control is about to be drawn. By responding to this message, the parent window can use the specified device context handle to set the text and background colors of the static control.
-    /// </summary>
-    CTLCOLORSTATIC = 0x0138,
-    /// <summary>
-    /// Use WM_MOUSEFIRST to specify the first mouse message. Use the PeekMessage() Function.
-    /// </summary>
-    MOUSEFIRST = 0x0200,
-    /// <summary>
-    /// The WM_MOUSEMOVE message is posted to a window when the cursor moves. If the mouse is not captured, the message is posted to the window that contains the cursor. Otherwise, the message is posted to the window that has captured the mouse.
-    /// </summary>
-    MOUSEMOVE = 0x0200,
-    /// <summary>
-    /// The WM_LBUTTONDOWN message is posted when the user presses the left mouse button while the cursor is in the client area of a window. If the mouse is not captured, the message is posted to the window beneath the cursor. Otherwise, the message is posted to the window that has captured the mouse.
-    /// </summary>
-    LBUTTONDOWN = 0x0201,
-    /// <summary>
-    /// The WM_LBUTTONUP message is posted when the user releases the left mouse button while the cursor is in the client area of a window. If the mouse is not captured, the message is posted to the window beneath the cursor. Otherwise, the message is posted to the window that has captured the mouse.
-    /// </summary>
-    LBUTTONUP = 0x0202,
-    /// <summary>
-    /// The WM_LBUTTONDBLCLK message is posted when the user double-clicks the left mouse button while the cursor is in the client area of a window. If the mouse is not captured, the message is posted to the window beneath the cursor. Otherwise, the message is posted to the window that has captured the mouse.
-    /// </summary>
-    LBUTTONDBLCLK = 0x0203,
-    /// <summary>
-    /// The WM_RBUTTONDOWN message is posted when the user presses the right mouse button while the cursor is in the client area of a window. If the mouse is not captured, the message is posted to the window beneath the cursor. Otherwise, the message is posted to the window that has captured the mouse.
-    /// </summary>
-    RBUTTONDOWN = 0x0204,
-    /// <summary>
-    /// The WM_RBUTTONUP message is posted when the user releases the right mouse button while the cursor is in the client area of a window. If the mouse is not captured, the message is posted to the window beneath the cursor. Otherwise, the message is posted to the window that has captured the mouse.
-    /// </summary>
-    RBUTTONUP = 0x0205,
-    /// <summary>
-    /// The WM_RBUTTONDBLCLK message is posted when the user double-clicks the right mouse button while the cursor is in the client area of a window. If the mouse is not captured, the message is posted to the window beneath the cursor. Otherwise, the message is posted to the window that has captured the mouse.
-    /// </summary>
-    RBUTTONDBLCLK = 0x0206,
-    /// <summary>
-    /// The WM_MBUTTONDOWN message is posted when the user presses the middle mouse button while the cursor is in the client area of a window. If the mouse is not captured, the message is posted to the window beneath the cursor. Otherwise, the message is posted to the window that has captured the mouse.
-    /// </summary>
-    MBUTTONDOWN = 0x0207,
-    /// <summary>
-    /// The WM_MBUTTONUP message is posted when the user releases the middle mouse button while the cursor is in the client area of a window. If the mouse is not captured, the message is posted to the window beneath the cursor. Otherwise, the message is posted to the window that has captured the mouse.
-    /// </summary>
-    MBUTTONUP = 0x0208,
-    /// <summary>
-    /// The WM_MBUTTONDBLCLK message is posted when the user double-clicks the middle mouse button while the cursor is in the client area of a window. If the mouse is not captured, the message is posted to the window beneath the cursor. Otherwise, the message is posted to the window that has captured the mouse.
-    /// </summary>
-    MBUTTONDBLCLK = 0x0209,
-    /// <summary>
-    /// The WM_MOUSEWHEEL message is sent to the focus window when the mouse wheel is rotated. The DefWindowProc function propagates the message to the window's parent. There should be no internal forwarding of the message, since DefWindowProc propagates it up the parent chain until it finds a window that processes it.
-    /// </summary>
-    MOUSEWHEEL = 0x020A,
-    /// <summary>
-    /// The WM_XBUTTONDOWN message is posted when the user presses the first or second X button while the cursor is in the client area of a window. If the mouse is not captured, the message is posted to the window beneath the cursor. Otherwise, the message is posted to the window that has captured the mouse.
-   /// </summary>
-    XBUTTONDOWN = 0x020B,
-    /// <summary>
-    /// The WM_XBUTTONUP message is posted when the user releases the first or second X button while the cursor is in the client area of a window. If the mouse is not captured, the message is posted to the window beneath the cursor. Otherwise, the message is posted to the window that has captured the mouse.
-    /// </summary>
-    XBUTTONUP = 0x020C,
-    /// <summary>
-    /// The WM_XBUTTONDBLCLK message is posted when the user double-clicks the first or second X button while the cursor is in the client area of a window. If the mouse is not captured, the message is posted to the window beneath the cursor. Otherwise, the message is posted to the window that has captured the mouse.
-    /// </summary>
-    XBUTTONDBLCLK = 0x020D,
-    /// <summary>
-    /// The WM_MOUSEHWHEEL message is sent to the focus window when the mouse's horizontal scroll wheel is tilted or rotated. The DefWindowProc function propagates the message to the window's parent. There should be no internal forwarding of the message, since DefWindowProc propagates it up the parent chain until it finds a window that processes it.
-    /// </summary>
-    MOUSEHWHEEL = 0x020E,
-    /// <summary>
-    /// Use WM_MOUSELAST to specify the last mouse message. Used with PeekMessage() Function.
-    /// </summary>
-    MOUSELAST = 0x020E,
-    /// <summary>
-    /// The WM_PARENTNOTIFY message is sent to the parent of a child window when the child window is created or destroyed, or when the user clicks a mouse button while the cursor is over the child window. When the child window is being created, the system sends WM_PARENTNOTIFY just before the CreateWindow or CreateWindowEx function that creates the window returns. When the child window is being destroyed, the system sends the message before any processing to destroy the window takes place.
-    /// </summary>
-    PARENTNOTIFY = 0x0210,
-    /// <summary>
-    /// The WM_ENTERMENULOOP message informs an application's main window procedure that a menu modal loop has been entered.
-    /// </summary>
-    ENTERMENULOOP = 0x0211,
-    /// <summary>
-    /// The WM_EXITMENULOOP message informs an application's main window procedure that a menu modal loop has been exited.
-    /// </summary>
-    EXITMENULOOP = 0x0212,
-    /// <summary>
-    /// The WM_NEXTMENU message is sent to an application when the right or left arrow key is used to switch between the menu bar and the system menu.
-    /// </summary>
-    NEXTMENU = 0x0213,
-    /// <summary>
-    /// The WM_SIZING message is sent to a window that the user is resizing. By processing this message, an application can monitor the size and position of the drag rectangle and, if needed, change its size or position.
-    /// </summary>
-    SIZING = 0x0214,
-    /// <summary>
-    /// The WM_CAPTURECHANGED message is sent to the window that is losing the mouse capture.
-    /// </summary>
-    CAPTURECHANGED = 0x0215,
-    /// <summary>
-    /// The WM_MOVING message is sent to a window that the user is moving. By processing this message, an application can monitor the position of the drag rectangle and, if needed, change its position.
-    /// </summary>
-    MOVING = 0x0216,
-    /// <summary>
-    /// Notifies applications that a power-management event has occurred.
-    /// </summary>
-    POWERBROADCAST = 0x0218,
-    /// <summary>
-    /// Notifies an application of a change to the hardware configuration of a device or the computer.
-    /// </summary>
-    DEVICECHANGE = 0x0219,
-    /// <summary>
-    /// An application sends the WM_MDICREATE message to a multiple-document interface (MDI) client window to create an MDI child window.
-    /// </summary>
-    MDICREATE = 0x0220,
-    /// <summary>
-    /// An application sends the WM_MDIDESTROY message to a multiple-document interface (MDI) client window to close an MDI child window.
-    /// </summary>
-    MDIDESTROY = 0x0221,
-    /// <summary>
-    /// An application sends the WM_MDIACTIVATE message to a multiple-document interface (MDI) client window to instruct the client window to activate a different MDI child window.
-    /// </summary>
-    MDIACTIVATE = 0x0222,
-    /// <summary>
-    /// An application sends the WM_MDIRESTORE message to a multiple-document interface (MDI) client window to restore an MDI child window from maximized or minimized size.
-    /// </summary>
-    MDIRESTORE = 0x0223,
-    /// <summary>
-    /// An application sends the WM_MDINEXT message to a multiple-document interface (MDI) client window to activate the next or previous child window.
-    /// </summary>
-    MDINEXT = 0x0224,
-    /// <summary>
-    /// An application sends the WM_MDIMAXIMIZE message to a multiple-document interface (MDI) client window to maximize an MDI child window. The system resizes the child window to make its client area fill the client window. The system places the child window's window menu icon in the rightmost position of the frame window's menu bar, and places the child window's restore icon in the leftmost position. The system also appends the title bar text of the child window to that of the frame window.
-    /// </summary>
-    MDIMAXIMIZE = 0x0225,
-    /// <summary>
-    /// An application sends the WM_MDITILE message to a multiple-document interface (MDI) client window to arrange all of its MDI child windows in a tile format.
-    /// </summary>
-    MDITILE = 0x0226,
-    /// <summary>
-    /// An application sends the WM_MDICASCADE message to a multiple-document interface (MDI) client window to arrange all its child windows in a cascade format.
-    /// </summary>
-    MDICASCADE = 0x0227,
-    /// <summary>
-    /// An application sends the WM_MDIICONARRANGE message to a multiple-document interface (MDI) client window to arrange all minimized MDI child windows. It does not affect child windows that are not minimized.
-    /// </summary>
-    MDIICONARRANGE = 0x0228,
-    /// <summary>
-    /// An application sends the WM_MDIGETACTIVE message to a multiple-document interface (MDI) client window to retrieve the handle to the active MDI child window.
-    /// </summary>
-    MDIGETACTIVE = 0x0229,
-    /// <summary>
-    /// An application sends the WM_MDISETMENU message to a multiple-document interface (MDI) client window to replace the entire menu of an MDI frame window, to replace the window menu of the frame window, or both.
-    /// </summary>
-    MDISETMENU = 0x0230,
-    /// <summary>
-    /// The WM_ENTERSIZEMOVE message is sent one time to a window after it enters the moving or sizing modal loop. The window enters the moving or sizing modal loop when the user clicks the window's title bar or sizing border, or when the window passes the WM_SYSCOMMAND message to the DefWindowProc function and the wParam parameter of the message specifies the SC_MOVE or SC_SIZE value. The operation is complete when DefWindowProc returns.
-    /// The system sends the WM_ENTERSIZEMOVE message regardless of whether the dragging of full windows is enabled.
-    /// </summary>
-    ENTERSIZEMOVE = 0x0231,
-    /// <summary>
-    /// The WM_EXITSIZEMOVE message is sent one time to a window, after it has exited the moving or sizing modal loop. The window enters the moving or sizing modal loop when the user clicks the window's title bar or sizing border, or when the window passes the WM_SYSCOMMAND message to the DefWindowProc function and the wParam parameter of the message specifies the SC_MOVE or SC_SIZE value. The operation is complete when DefWindowProc returns.
-    /// </summary>
-    EXITSIZEMOVE = 0x0232,
-    /// <summary>
-    /// Sent when the user drops a file on the window of an application that has registered itself as a recipient of dropped files.
-    /// </summary>
-    DROPFILES = 0x0233,
-    /// <summary>
-    /// An application sends the WM_MDIREFRESHMENU message to a multiple-document interface (MDI) client window to refresh the window menu of the MDI frame window.
-    /// </summary>
-    MDIREFRESHMENU = 0x0234,
-    /// <summary>
-    /// Sent to an application when a window is activated. A window receives this message through its WindowProc function.
-    /// </summary>
-    IME_SETCONTEXT = 0x0281,
-    /// <summary>
-    /// Sent to an application to notify it of changes to the IME window. A window receives this message through its WindowProc function.
-    /// </summary>
-    IME_NOTIFY = 0x0282,
-    /// <summary>
-    /// Sent by an application to direct the IME window to carry out the requested command. The application uses this message to control the IME window that it has created. To send this message, the application calls the SendMessage function with the following parameters.
-    /// </summary>
-    IME_CONTROL = 0x0283,
-    /// <summary>
-    /// Sent to an application when the IME window finds no space to extend the area for the composition window. A window receives this message through its WindowProc function.
-    /// </summary>
-    IME_COMPOSITIONFULL = 0x0284,
-    /// <summary>
-    /// Sent to an application when the operating system is about to change the current IME. A window receives this message through its WindowProc function.
-    /// </summary>
-    IME_SELECT = 0x0285,
-    /// <summary>
-    /// Sent to an application when the IME gets a character of the conversion result. A window receives this message through its WindowProc function.
-    /// </summary>
-    IME_CHAR = 0x0286,
-    /// <summary>
-    /// Sent to an application to provide commands and request information. A window receives this message through its WindowProc function.
-    /// </summary>
-    IME_REQUEST = 0x0288,
-    /// <summary>
-    /// Sent to an application by the IME to notify the application of a key press and to keep message order. A window receives this message through its WindowProc function.
-    /// </summary>
-    IME_KEYDOWN = 0x0290,
-    /// <summary>
-    /// Sent to an application by the IME to notify the application of a key release and to keep message order. A window receives this message through its WindowProc function.
-    /// </summary>
-    IME_KEYUP = 0x0291,
-    /// <summary>
-    /// The WM_MOUSEHOVER message is posted to a window when the cursor hovers over the client area of the window for the period of time specified in a prior call to TrackMouseEvent.
-    /// </summary>
-    MOUSEHOVER = 0x02A1,
-    /// <summary>
-    /// The WM_MOUSELEAVE message is posted to a window when the cursor leaves the client area of the window specified in a prior call to TrackMouseEvent.
-    /// </summary>
-    MOUSELEAVE = 0x02A3,
-    /// <summary>
-    /// The WM_NCMOUSEHOVER message is posted to a window when the cursor hovers over the nonclient area of the window for the period of time specified in a prior call to TrackMouseEvent.
-    /// </summary>
-    NCMOUSEHOVER = 0x02A0,
-    /// <summary>
-    /// The WM_NCMOUSELEAVE message is posted to a window when the cursor leaves the nonclient area of the window specified in a prior call to TrackMouseEvent.
-    /// </summary>
-    NCMOUSELEAVE = 0x02A2,
-    /// <summary>
-    /// The WM_WTSSESSION_CHANGE message notifies applications of changes in session state.
-    /// </summary>
-    WTSSESSION_CHANGE = 0x02B1,
-    TABLET_FIRST = 0x02c0,
-    TABLET_LAST = 0x02df,
-    /// <summary>
-    /// An application sends a WM_CUT message to an edit control or combo box to delete (cut) the current selection, if any, in the edit control and copy the deleted text to the clipboard in CF_TEXT format.
-    /// </summary>
-    CUT = 0x0300,
-    /// <summary>
-    /// An application sends the WM_COPY message to an edit control or combo box to copy the current selection to the clipboard in CF_TEXT format.
-    /// </summary>
-    COPY = 0x0301,
-    /// <summary>
-    /// An application sends a WM_PASTE message to an edit control or combo box to copy the current content of the clipboard to the edit control at the current caret position. Data is inserted only if the clipboard contains data in CF_TEXT format.
-    /// </summary>
-    PASTE = 0x0302,
-    /// <summary>
-    /// An application sends a WM_CLEAR message to an edit control or combo box to delete (clear) the current selection, if any, from the edit control.
-    /// </summary>
-    CLEAR = 0x0303,
-    /// <summary>
-    /// An application sends a WM_UNDO message to an edit control to undo the last operation. When this message is sent to an edit control, the previously deleted text is restored or the previously added text is deleted.
-    /// </summary>
-    UNDO = 0x0304,
-    /// <summary>
-    /// The WM_RENDERFORMAT message is sent to the clipboard owner if it has delayed rendering a specific clipboard format and if an application has requested data in that format. The clipboard owner must render data in the specified format and place it on the clipboard by calling the SetClipboardData function.
-    /// </summary>
-    RENDERFORMAT = 0x0305,
-    /// <summary>
-    /// The WM_RENDERALLFORMATS message is sent to the clipboard owner before it is destroyed, if the clipboard owner has delayed rendering one or more clipboard formats. For the content of the clipboard to remain available to other applications, the clipboard owner must render data in all the formats it is capable of generating, and place the data on the clipboard by calling the SetClipboardData function.
-    /// </summary>
-    RENDERALLFORMATS = 0x0306,
-    /// <summary>
-    /// The WM_DESTROYCLIPBOARD message is sent to the clipboard owner when a call to the EmptyClipboard function empties the clipboard.
-    /// </summary>
-    DESTROYCLIPBOARD = 0x0307,
-    /// <summary>
-    /// The WM_DRAWCLIPBOARD message is sent to the first window in the clipboard viewer chain when the content of the clipboard changes. This enables a clipboard viewer window to display the new content of the clipboard.
-    /// </summary>
-    DRAWCLIPBOARD = 0x0308,
-    /// <summary>
-    /// The WM_PAINTCLIPBOARD message is sent to the clipboard owner by a clipboard viewer window when the clipboard contains data in the CF_OWNERDISPLAY format and the clipboard viewer's client area needs repainting.
-    /// </summary>
-    PAINTCLIPBOARD = 0x0309,
-    /// <summary>
-    /// The WM_VSCROLLCLIPBOARD message is sent to the clipboard owner by a clipboard viewer window when the clipboard contains data in the CF_OWNERDISPLAY format and an event occurs in the clipboard viewer's vertical scroll bar. The owner should scroll the clipboard image and update the scroll bar values.
-    /// </summary>
-    VSCROLLCLIPBOARD = 0x030A,
-    /// <summary>
-    /// The WM_SIZECLIPBOARD message is sent to the clipboard owner by a clipboard viewer window when the clipboard contains data in the CF_OWNERDISPLAY format and the clipboard viewer's client area has changed size.
-    /// </summary>
-    SIZECLIPBOARD = 0x030B,
-    /// <summary>
-    /// The WM_ASKCBFORMATNAME message is sent to the clipboard owner by a clipboard viewer window to request the name of a CF_OWNERDISPLAY clipboard format.
-    /// </summary>
-    ASKCBFORMATNAME = 0x030C,
-    /// <summary>
-    /// The WM_CHANGECBCHAIN message is sent to the first window in the clipboard viewer chain when a window is being removed from the chain.
-    /// </summary>
-    CHANGECBCHAIN = 0x030D,
-    /// <summary>
-    /// The WM_HSCROLLCLIPBOARD message is sent to the clipboard owner by a clipboard viewer window. This occurs when the clipboard contains data in the CF_OWNERDISPLAY format and an event occurs in the clipboard viewer's horizontal scroll bar. The owner should scroll the clipboard image and update the scroll bar values.
-    /// </summary>
-    HSCROLLCLIPBOARD = 0x030E,
-    /// <summary>
-    /// This message informs a window that it is about to receive the keyboard focus, giving the window the opportunity to realize its logical palette when it receives the focus.
-    /// </summary>
-    QUERYNEWPALETTE = 0x030F,
-    /// <summary>
-    /// The WM_PALETTEISCHANGING message informs applications that an application is going to realize its logical palette.
-    /// </summary>
-    PALETTEISCHANGING = 0x0310,
-    /// <summary>
-    /// This message is sent by the OS to all top-level and overlapped windows after the window with the keyboard focus realizes its logical palette.
-    /// This message enables windows that do not have the keyboard focus to realize their logical palettes and update their client areas.
-    /// </summary>
-    PALETTECHANGED = 0x0311,
-    /// <summary>
-    /// The WM_HOTKEY message is posted when the user presses a hot key registered by the RegisterHotKey function. The message is placed at the top of the message queue associated with the thread that registered the hot key.
-    /// </summary>
-    HOTKEY = 0x0312,
-    /// <summary>
-    /// The WM_PRINT message is sent to a window to request that it draw itself in the specified device context, most commonly in a printer device context.
-    /// </summary>
-    PRINT = 0x0317,
-    /// <summary>
-    /// The WM_PRINTCLIENT message is sent to a window to request that it draw its client area in the specified device context, most commonly in a printer device context.
-    /// </summary>
-    PRINTCLIENT = 0x0318,
-    /// <summary>
-    /// The WM_APPCOMMAND message notifies a window that the user generated an application command event, for example, by clicking an application command button using the mouse or typing an application command key on the keyboard.
-    /// </summary>
-    APPCOMMAND = 0x0319,
-    /// <summary>
-    /// The WM_THEMECHANGED message is broadcast to every window following a theme change event. Examples of theme change events are the activation of a theme, the deactivation of a theme, or a transition from one theme to another.
-    /// </summary>
-    THEMECHANGED = 0x031A,
-    /// <summary>
-    /// Sent when the contents of the clipboard have changed.
-    /// </summary>
-    CLIPBOARDUPDATE = 0x031D,
-    /// <summary>
-    /// The system will send a window the WM_DWMCOMPOSITIONCHANGED message to indicate that the availability of desktop composition has changed.
-    /// </summary>
-    DWMCOMPOSITIONCHANGED = 0x031E,
-    /// <summary>
-    /// WM_DWMNCRENDERINGCHANGED is called when the non-client area rendering status of a window has changed. Only windows that have set the flag DWM_BLURBEHIND.fTransitionOnMaximized to true will get this message.
-    /// </summary>
-    DWMNCRENDERINGCHANGED = 0x031F,
-    /// <summary>
-    /// Sent to all top-level windows when the colorization color has changed.
-    /// </summary>
-    DWMCOLORIZATIONCOLORCHANGED = 0x0320,
-    /// <summary>
-    /// WM_DWMWINDOWMAXIMIZEDCHANGE will let you know when a DWM composed window is maximized. You also have to register for this message as well. You'd have other windowd go opaque when this message is sent.
-    /// </summary>
-    DWMWINDOWMAXIMIZEDCHANGE = 0x0321,
-    /// <summary>
-    /// Sent to request extended title bar information. A window receives this message through its WindowProc function.
-    /// </summary>
-    GETTITLEBARINFOEX = 0x033F,
-    HANDHELDFIRST = 0x0358,
-    HANDHELDLAST = 0x035F,
-    AFXFIRST = 0x0360,
-    AFXLAST = 0x037F,
-    PENWINFIRST = 0x0380,
-    PENWINLAST = 0x038F,
-    /// <summary>
-    /// The WM_APP constant is used by applications to help define private messages, usually of the form WM_APP+X, where X is an integer value.
-    /// </summary>
-    APP = 0x8000,
-    /// <summary>
-    /// The WM_USER constant is used by applications to help define private messages for use by private window classes, usually of the form WM_USER+X, where X is an integer value.
-    /// </summary>
-    USER = 0x0400,
-
-    /// <summary>
-    /// An application sends the WM_CPL_LAUNCH message to Windows Control Panel to request that a Control Panel application be started.
-    /// </summary>
-    CPL_LAUNCH = USER+0x1000,
-    /// <summary>
-    /// The WM_CPL_LAUNCHED message is sent when a Control Panel application, started by the WM_CPL_LAUNCH message, has closed. The WM_CPL_LAUNCHED message is sent to the window identified by the wParam parameter of the WM_CPL_LAUNCH message that started the application.
-    /// </summary>
-    CPL_LAUNCHED = USER+0x1001,
-    /// <summary>
-    /// WM_SYSTIMER is a well-known yet still undocumented message. Windows uses WM_SYSTIMER for internal actions like scrolling.
-    /// </summary>
-    SYSTIMER = 0x118,
-
-    /// <summary>
-    /// The accessibility state has changed.
-    /// </summary>
-    HSHELL_ACCESSIBILITYSTATE = 11,
-    /// <summary>
-    /// The shell should activate its main window.
-    /// </summary>
-    HSHELL_ACTIVATESHELLWINDOW = 3,
-    /// <summary>
-    /// The user completed an input event (for example, pressed an application command button on the mouse or an application command key on the keyboard), and the application did not handle the WM_APPCOMMAND message generated by that input.
-    /// If the Shell procedure handles the WM_COMMAND message, it should not call CallNextHookEx. See the Return Value section for more information.
-    /// </summary>
-    HSHELL_APPCOMMAND = 12,
-    /// <summary>
-    /// A window is being minimized or maximized. The system needs the coordinates of the minimized rectangle for the window.
-    /// </summary>
-    HSHELL_GETMINRECT = 5,
-    /// <summary>
-    /// Keyboard language was changed or a new keyboard layout was loaded.
-    /// </summary>
-    HSHELL_LANGUAGE = 8,
-    /// <summary>
-    /// The title of a window in the task bar has been redrawn.
-    /// </summary>
-    HSHELL_REDRAW = 6,
-    /// <summary>
-    /// The user has selected the task list. A shell application that provides a task list should return TRUE to prevent Windows from starting its task list.
-    /// </summary>
-    HSHELL_TASKMAN = 7,
-    /// <summary>
-    /// A top-level, unowned window has been created. The window exists when the system calls this hook.
-    /// </summary>
-    HSHELL_WINDOWCREATED = 1,
-    /// <summary>
-    /// A top-level, unowned window is about to be destroyed. The window still exists when the system calls this hook.
-    /// </summary>
-    HSHELL_WINDOWDESTROYED = 2,
-    /// <summary>
-    /// The activation has changed to a different top-level, unowned window.
-    /// </summary>
-    HSHELL_WINDOWACTIVATED = 4,
-    /// <summary>
-    /// A top-level window is being replaced. The window exists when the system calls this hook.
-    /// </summary>
-    HSHELL_WINDOWREPLACED = 13
-}
-
-/// <summary>
-/// Window Styles.
-/// The following styles can be specified wherever a window style is required. After the control has been created, these styles cannot be modified, except as noted.
-/// </summary>
-[Flags()]
-public enum WindowStyles : uint
-{
-    /// <summary>The window has a thin-line border.</summary>
-    WS_BORDER = 0x800000,
-
-    /// <summary>The window has a title bar (includes the WS_BORDER style).</summary>
-    WS_CAPTION = 0xc00000,
-
-    /// <summary>The window is a child window. A window with this style cannot have a menu bar. This style cannot be used with the WS_POPUP style.</summary>
-    WS_CHILD = 0x40000000,
-
-    /// <summary>Excludes the area occupied by child windows when drawing occurs within the parent window. This style is used when creating the parent window.</summary>
-    WS_CLIPCHILDREN = 0x2000000,
-
-    /// <summary>
-    /// Clips child windows relative to each other; that is, when a particular child window receives a WM_PAINT message, the WS_CLIPSIBLINGS style clips all other overlapping child windows out of the region of the child window to be updated.
-    /// If WS_CLIPSIBLINGS is not specified and child windows overlap, it is possible, when drawing within the client area of a child window, to draw within the client area of a neighboring child window.
-    /// </summary>
-    WS_CLIPSIBLINGS = 0x4000000,
-
-    /// <summary>The window is initially disabled. A disabled window cannot receive input from the user. To change this after a window has been created, use the EnableWindow function.</summary>
-    WS_DISABLED = 0x8000000,
-
-    /// <summary>The window has a border of a style typically used with dialog boxes. A window with this style cannot have a title bar.</summary>
-    WS_DLGFRAME = 0x400000,
-
-    /// <summary>
-    /// The window is the first control of a group of controls. The group consists of this first control and all controls defined after it, up to the next control with the WS_GROUP style.
-    /// The first control in each group usually has the WS_TABSTOP style so that the user can move from group to group. The user can subsequently change the keyboard focus from one control in the group to the next control in the group by using the direction keys.
-    /// You can turn this style on and off to change dialog box navigation. To change this style after a window has been created, use the SetWindowLong function.
-    /// </summary>
-    WS_GROUP = 0x20000,
-
-    /// <summary>The window has a horizontal scroll bar.</summary>
-    WS_HSCROLL = 0x100000,
-
-    /// <summary>The window is initially maximized.</summary>
-    WS_MAXIMIZE = 0x1000000,
-
-    /// <summary>The window has a maximize button. Cannot be combined with the WS_EX_CONTEXTHELP style. The WS_SYSMENU style must also be specified.</summary>
-    WS_MAXIMIZEBOX = 0x10000,
-
-    /// <summary>The window is initially minimized.</summary>
-    WS_MINIMIZE = 0x20000000,
-
-    /// <summary>The window has a minimize button. Cannot be combined with the WS_EX_CONTEXTHELP style. The WS_SYSMENU style must also be specified.</summary>
-    WS_MINIMIZEBOX = 0x20000,
-
-    /// <summary>The window is an overlapped window. An overlapped window has a title bar and a border.</summary>
-    WS_OVERLAPPED = 0x0,
-
-    /// <summary>The window is an overlapped window.</summary>
-    WS_OVERLAPPEDWINDOW = WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_SIZEFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX,
-
-    /// <summary>The window is a pop-up window. This style cannot be used with the WS_CHILD style.</summary>
-    WS_POPUP = 0x80000000u,
-
-    /// <summary>The window is a pop-up window. The WS_CAPTION and WS_POPUPWINDOW styles must be combined to make the window menu visible.</summary>
-    WS_POPUPWINDOW = WS_POPUP | WS_BORDER | WS_SYSMENU,
-
-    /// <summary>The window has a sizing border.</summary>
-    WS_SIZEFRAME = 0x40000,
-
-    /// <summary>The window has a window menu on its title bar. The WS_CAPTION style must also be specified.</summary>
-    WS_SYSMENU = 0x80000,
-
-    /// <summary>
-    /// The window is a control that can receive the keyboard focus when the user presses the TAB key.
-    /// Pressing the TAB key changes the keyboard focus to the next control with the WS_TABSTOP style.  
-    /// You can turn this style on and off to change dialog box navigation. To change this style after a window has been created, use the SetWindowLong function.
-    /// For user-created windows and modeless dialogs to work with tab stops, alter the message loop to call the IsDialogMessage function.
-    /// </summary>
-    WS_TABSTOP = 0x10000,
-
-    /// <summary>The window is initially visible. This style can be turned on and off by using the ShowWindow or SetWindowPos function.</summary>
-    WS_VISIBLE = 0x10000000,
-
-    /// <summary>The window has a vertical scroll bar.</summary>
-    WS_VSCROLL = 0x200000
-}
-
-[Flags]
-public enum WindowStylesEx : uint
-{
-    /// <summary>
-    /// Specifies that a window created with this style accepts drag-drop files.
-    /// </summary>
-    WS_EX_ACCEPTFILES = 0x00000010,
-    /// <summary>
-    /// Forces a top-level window onto the taskbar when the window is visible.
-    /// </summary>
-    WS_EX_APPWINDOW = 0x00040000,
-    /// <summary>
-    /// Specifies that a window has a border with a sunken edge.
-    /// </summary>
-    WS_EX_CLIENTEDGE = 0x00000200,
-    /// <summary>
-    /// Windows XP: Paints all descendants of a window in bottom-to-top painting order using double-buffering. For more information, see Remarks. This cannot be used if the window has a class style of either CS_OWNDC or CS_CLASSDC.
-    /// </summary>
-    WS_EX_COMPOSITED = 0x02000000,
-    /// <summary>
-    /// Includes a question mark in the title bar of the window. When the user clicks the question mark, the cursor changes to a question mark with a pointer. If the user then clicks a child window, the child receives a WM_HELP message. The child window should pass the message to the parent window procedure, which should call the WinHelp function using the HELP_WM_HELP command. The Help application displays a pop-up window that typically contains help for the child window.
-    /// WS_EX_CONTEXTHELP cannot be used with the WS_MAXIMIZEBOX or WS_MINIMIZEBOX styles.
-    /// </summary>
-    WS_EX_CONTEXTHELP = 0x00000400,
-    /// <summary>
-    /// The window itself contains child windows that should take part in dialog box navigation. If this style is specified, the dialog manager recurses into children of this window when performing navigation operations such as handling the TAB key, an arrow key, or a keyboard mnemonic.
-    /// </summary>
-    WS_EX_CONTROLPARENT = 0x00010000,
-    /// <summary>
-    /// Creates a window that has a double border; the window can, optionally, be created with a title bar by specifying the WS_CAPTION style in the dwStyle parameter.
-    /// </summary>
-    WS_EX_DLGMODALFRAME = 0x00000001,
-    /// <summary>
-    /// Windows 2000/XP: Creates a layered window. Note that this cannot be used for child windows. Also, this cannot be used if the window has a class style of either CS_OWNDC or CS_CLASSDC.
-    /// </summary>
-    WS_EX_LAYERED = 0x00080000,
-    /// <summary>
-    /// Arabic and Hebrew versions of Windows 98/Me, Windows 2000/XP: Creates a window whose horizontal origin is on the right edge. Increasing horizontal values advance to the left.
-    /// </summary>
-    WS_EX_LAYOUTRTL = 0x00400000,
-    /// <summary>
-    /// Creates a window that has generic left-aligned properties. This is the default.
-    /// </summary>
-    WS_EX_LEFT = 0x00000000,
-    /// <summary>
-    /// If the shell language is Hebrew, Arabic, or another language that supports reading order alignment, the vertical scroll bar (if present) is to the left of the client area. For other languages, the style is ignored.
-    /// </summary>
-    WS_EX_LEFTSCROLLBAR = 0x00004000,
-    /// <summary>
-    /// The window text is displayed using left-to-right reading-order properties. This is the default.
-    /// </summary>
-    WS_EX_LTRREADING = 0x00000000,
-    /// <summary>
-    /// Creates a multiple-document interface (MDI) child window.
-    /// </summary>
-    WS_EX_MDICHILD = 0x00000040,
-    /// <summary>
-    /// Windows 2000/XP: A top-level window created with this style does not become the foreground window when the user clicks it. The system does not bring this window to the foreground when the user minimizes or closes the foreground window.
-    /// To activate the window, use the SetActiveWindow or SetForegroundWindow function.
-    /// The window does not appear on the taskbar by default. To force the window to appear on the taskbar, use the WS_EX_APPWINDOW style.
-    /// </summary>
-    WS_EX_NOACTIVATE = 0x08000000,
-    /// <summary>
-    /// Windows 2000/XP: A window created with this style does not pass its window layout to its child windows.
-    /// </summary>
-    WS_EX_NOINHERITLAYOUT = 0x00100000,
-    /// <summary>
-    /// Specifies that a child window created with this style does not send the WM_PARENTNOTIFY message to its parent window when it is created or destroyed.
-    /// </summary>
-    WS_EX_NOPARENTNOTIFY = 0x00000004,
-    /// <summary>
-    /// Combines the WS_EX_CLIENTEDGE and WS_EX_WINDOWEDGE styles.
-    /// </summary>
-    WS_EX_OVERLAPPEDWINDOW = WS_EX_WINDOWEDGE | WS_EX_CLIENTEDGE,
-    /// <summary>
-    /// Combines the WS_EX_WINDOWEDGE, WS_EX_TOOLWINDOW, and WS_EX_TOPMOST styles.
-    /// </summary>
-    WS_EX_PALETTEWINDOW = WS_EX_WINDOWEDGE | WS_EX_TOOLWINDOW | WS_EX_TOPMOST,
-    /// <summary>
-    /// The window has generic "right-aligned" properties. This depends on the window class. This style has an effect only if the shell language is Hebrew, Arabic, or another language that supports reading-order alignment; otherwise, the style is ignored.
-    /// Using the WS_EX_RIGHT style for static or edit controls has the same effect as using the SS_RIGHT or ES_RIGHT style, respectively. Using this style with button controls has the same effect as using BS_RIGHT and BS_RIGHTBUTTON styles.
-    /// </summary>
-    WS_EX_RIGHT = 0x00001000,
-    /// <summary>
-    /// Vertical scroll bar (if present) is to the right of the client area. This is the default.
-    /// </summary>
-    WS_EX_RIGHTSCROLLBAR = 0x00000000,
-    /// <summary>
-    /// If the shell language is Hebrew, Arabic, or another language that supports reading-order alignment, the window text is displayed using right-to-left reading-order properties. For other languages, the style is ignored.
-    /// </summary>
-    WS_EX_RTLREADING = 0x00002000,
-    /// <summary>
-    /// Creates a window with a three-dimensional border style intended to be used for items that do not accept user input.
-    /// </summary>
-    WS_EX_STATICEDGE = 0x00020000,
-    /// <summary>
-    /// Creates a tool window; that is, a window intended to be used as a floating toolbar. A tool window has a title bar that is shorter than a normal title bar, and the window title is drawn using a smaller font. A tool window does not appear in the taskbar or in the dialog that appears when the user presses ALT+TAB. If a tool window has a system menu, its icon is not displayed on the title bar. However, you can display the system menu by right-clicking or by typing ALT+SPACE.
-    /// </summary>
-    WS_EX_TOOLWINDOW = 0x00000080,
-    /// <summary>
-    /// Specifies that a window created with this style should be placed above all non-topmost windows and should stay above them, even when the window is deactivated. To add or remove this style, use the SetWindowPos function.
-    /// </summary>
-    WS_EX_TOPMOST = 0x00000008,
-    /// <summary>
-    /// Specifies that a window created with this style should not be painted until siblings beneath the window (that were created by the same thread) have been painted. The window appears transparent because the bits of underlying sibling windows have already been painted.
-    /// To achieve transparency without these restrictions, use the SetWindowRgn function.
-    /// </summary>
-    WS_EX_TRANSPARENT = 0x00000020,
-    /// <summary>
-    /// Specifies that a window has a border with a raised edge.
-    /// </summary>
-    WS_EX_WINDOWEDGE = 0x00000100
-}
-
-public enum ShowWindowCommands
-{
-    /// <summary>
-    /// Hides the window and activates another window.
-    /// </summary>
-    Hide = 0,
-    /// <summary>
-    /// Activates and displays a window. If the window is minimized or
-    /// maximized, the system restores it to its original size and position.
-    /// An application should specify this flag when displaying the window
-    /// for the first time.
-    /// </summary>
-    Normal = 1,
-    /// <summary>
-    /// Activates the window and displays it as a minimized window.
-    /// </summary>
-    ShowMinimized = 2,
-    /// <summary>
-    /// Maximizes the specified window.
-    /// </summary>
-    Maximize = 3, // is this the right value?
-    /// <summary>
-    /// Activates the window and displays it as a maximized window.
-    /// </summary>      
-    ShowMaximized = 3,
-    /// <summary>
-    /// Displays a window in its most recent size and position. This value
-    /// is similar to <see cref="Win32.ShowWindowCommand.Normal"/>, except
-    /// the window is not activated.
-    /// </summary>
-    ShowNoActivate = 4,
-    /// <summary>
-    /// Activates the window and displays it in its current size and position.
-    /// </summary>
-    Show = 5,
-    /// <summary>
-    /// Minimizes the specified window and activates the next top-level
-    /// window in the Z order.
-    /// </summary>
-    Minimize = 6,
-    /// <summary>
-    /// Displays the window as a minimized window. This value is similar to
-    /// <see cref="Win32.ShowWindowCommand.ShowMinimized"/>, except the
-    /// window is not activated.
-    /// </summary>
-    ShowMinNoActive = 7,
-    /// <summary>
-    /// Displays the window in its current size and position. This value is
-    /// similar to <see cref="Win32.ShowWindowCommand.Show"/>, except the
-    /// window is not activated.
-    /// </summary>
-    ShowNA = 8,
-    /// <summary>
-    /// Activates and displays the window. If the window is minimized or
-    /// maximized, the system restores it to its original size and position.
-    /// An application should specify this flag when restoring a minimized window.
-    /// </summary>
-    Restore = 9,
-    /// <summary>
-    /// Sets the show state based on the SW_* value specified in the
-    /// STARTUPINFO structure passed to the CreateProcess function by the
-    /// program that started the application.
-    /// </summary>
-    ShowDefault = 10,
-    /// <summary>
-    ///  <b>Windows 2000/XP:</b> Minimizes a window, even if the thread
-    /// that owns the window is not responding. This flag should only be
-    /// used when minimizing windows from a different thread.
-    /// </summary>
-    ForceMinimize = 11
-}