]> O.S.I.I.S - jp/crow.git/commitdiff
* Crow.sln, test.crow, CrowIDE.csproj, CrowIDE.cs, imlEditor.crow, TreeView.cs,...
authorjpbruyere <jp.bruyere@hotmail.com>
Mon, 15 Aug 2016 14:34:17 +0000 (16:34 +0200)
committerjpbruyere <jp.bruyere@hotmail.com>
Thu, 1 Sep 2016 11:24:16 +0000 (13:24 +0200)
  basic IML loading into imlVE interface

* ImlVisualEditor.cs:
  basic IML loading into veIface

* CompilerServices.cs:
  CurrentInterface as public

* GraphicObject.cs:
  RegisterForRedraw as virtual

CrowIDE/src/CrowIDE.cs
CrowIDE/src/ImlVisualEditor.cs
CrowIDE/ui/imlEditor.crow
CrowIDE/ui/test.crow
src/GraphicObjects/DirectoryView.cs
src/GraphicObjects/GraphicObject.cs
src/GraphicObjects/TreeView.cs

index f873ad4c1e09d33dd311f704e0af32156b8bbc15..221de0e5ab195c2cba2dbfe3e2e7d47b87442f69 100644 (file)
@@ -45,9 +45,9 @@ namespace CrowIDE
                        base.OnLoad (e);
 
                        //this.CrowInterface.LoadInterface ("#CrowIDE.ui.imlEditor.crow").DataSource = this;
-                       GraphicObject go = this.CrowInterface.LoadInterface (@"ui/test.crow");
+                       //GraphicObject go = this.CrowInterface.LoadInterface (@"ui/test.crow");
+                       GraphicObject go = this.CrowInterface.LoadInterface (@"#CrowIDE.ui.imlEditor.crow");
                        go.DataSource = this;
-                       Interface i = go.CurrentInterface;
                }
        }
 }
\ No newline at end of file
index 9229d8af01d20d97021e6d8c0d982d1d59933bde..80d325a1540ef1a8418babec3b455ca562bc33e7 100644 (file)
@@ -23,6 +23,7 @@ using Crow;
 using System.Threading;
 using System.Xml.Serialization;
 using System.ComponentModel;
+using System.IO;
 
 namespace CrowIDE
 {
@@ -37,8 +38,12 @@ namespace CrowIDE
                        set {
                                if (imlPath == value)
                                        return;
+                               if (!File.Exists (value))
+                                       return;
                                imlPath = value;
                                NotifyValueChanged ("ImlPath", imlPath);
+                               imlVE.ClearInterface ();
+                               imlVE.LoadInterface (imlPath);
                        }
                }
                bool drawGrid;
@@ -68,7 +73,44 @@ namespace CrowIDE
                public ImlVisualEditor () : base()
                {
                        imlVE = new Interface ();
+                       Thread t = new Thread (interfaceThread);
+                       t.IsBackground = true;
+                       t.Start ();
+               }
+
+               void interfaceThread()
+               {
+                       while (true) {
+                               imlVE.Update ();
+
+                               bool isDirty = false;
 
+                               lock (imlVE.RenderMutex)
+                                       isDirty = imlVE.IsDirty;
+
+                               if (imlVE.IsDirty) {
+                                       lock (CurrentInterface.UpdateMutex)
+                                               RegisterForRedraw ();
+                               }
+
+                               Thread.Sleep (5);
+                       }
+               }
+               public override void OnLayoutChanges (LayoutingType layoutType)
+               {
+                       base.OnLayoutChanges (layoutType);
+                       switch (layoutType) {
+                       case LayoutingType.Width:
+                       case LayoutingType.Height:
+                               imlVE.ProcessResize (this.ClientRectangle.Size);
+                               break;
+                       }
+               }
+               public override void RegisterForRedraw ()
+               {
+                       base.RegisterForRedraw ();
+                       lock(imlVE.UpdateMutex)
+                               imlVE.clipping.AddRectangle (imlVE.ClientRectangle);
                }
                protected override void onDraw (Cairo.Context gr)
                {
@@ -78,17 +120,36 @@ namespace CrowIDE
 
 
                        Rectangle cb = ClientRectangle;
-
+                       const double gridLineWidth = 0.1;
+                       double glhw = gridLineWidth / 2.0;
                        int nbLines = cb.Width / gridSpacing ;
-                       double x = gridSpacing + cb.Center.X - nbLines * gridSpacing;
+                       double d = cb.Left + gridSpacing;
                        for (int i = 0; i < nbLines; i++) {
-                               gr.MoveTo (x-0.5, cb.Y);
-                               gr.LineTo (x-0.5, cb.Y);
+                               gr.MoveTo (d-glhw, cb.Y);
+                               gr.LineTo (d-glhw, cb.Bottom);
+                               d += gridSpacing;
                        }
-
-                       gr.LineWidth = 1.0;
+                       nbLines = cb.Height / gridSpacing;
+                       d = cb.Top + gridSpacing;
+                       for (int i = 0; i < nbLines; i++) {
+                               gr.MoveTo (cb.X, d - glhw);
+                               gr.LineTo (cb.Right, d -glhw);
+                               d += gridSpacing;
+                       }
+                       gr.LineWidth = gridLineWidth;
                        Foreground.SetAsSource (gr, cb);
                        gr.Stroke ();
+
+                       lock (imlVE.RenderMutex) {
+                               if (imlVE.IsDirty) {
+                                       using (Cairo.Surface surf = new Cairo.ImageSurface (imlVE.dirtyBmp, Cairo.Format.Argb32,
+                                               imlVE.DirtyRect.Width, imlVE.DirtyRect.Height, imlVE.DirtyRect.Width * 4)) {
+                                               gr.SetSourceSurface (surf, imlVE.DirtyRect.Left, imlVE.DirtyRect.Top);
+                                               gr.Paint ();
+                                       }
+                                       imlVE.IsDirty = false;
+                               }
+                       }
                }
        }
 }
index d1aa315c10734531513bea4c8774f90ad1f9d1e0..3a8e52046b02d8a83b389ce26cdc634613f9c0c7 100644 (file)
@@ -1,27 +1,33 @@
 <?xml version="1.0"?>
 <Window Height="80%" Width="80%" CornerRadius="20">
-       <HorizontalStack>
-               <DirectoryView Name="dv" Root="./" SelectedItemChanged="Tv_SelectedItemChanged"
-                       Width="20%" Height="100%" Margin="10"/>
-               <Splitter/>
-               <VerticalStack Width="80%" Height="100%">
-                       <Container Height="50%" Margin="10" MinimumSize="10,10"
-                                       Name="crowContainer"/>
-                       <Container/>
-                       <HorizontalStack Height="50%" Margin="10" MinimumSize="10,1">
-                               <Scroller Name="scroller1" Background="White"
-                                               Margin="2" VerticalScrolling="true" ScrollY="{../scrollbar1.Value}"
-                                               ValueChanged="./_scroller_ValueChanged">
-                                       <TextBox Background="White" Height="Fit"
-                                                       VerticalAlignment="Top"
-                                                       TextAlignment="TopLeft" Font="mono, 12"
-                                                       TextChanged="onImlSourceChanged"
-                                                       Text="{CurSources}" Multiline="true"/>
-                               </Scroller>
-                               <ScrollBar Name="scrollbar1" Value="{../scroller1.ScrollY}"
-                                       Maximum="{../scroller1.MaximumScroll}" Orientation="Vertical"
-                                       Width="14" />
-                       </HorizontalStack>
-               </VerticalStack>
-       </HorizontalStack>
+       <VerticalStack>
+               <Border Margin="1" Background="Onyx" Height="Fit">
+                       <Label Width="Stretched" Margin="1" Text="{../../dv.SelectedItem}"/>
+               </Border>
+               <HorizontalStack>
+                       <DirectoryView Name="dv" Root="./" SelectedItemChanged="Tv_SelectedItemChanged"
+                               Width="20%" Height="100%" Margin="10"/>
+                       <Splitter/>
+                       <VerticalStack Width="80%" Height="100%">
+                               <ImlVisualEditor Height="50%" Margin="0" MinimumSize="10,10" Foreground="SkyBlue"
+                                       ImlPath="{../../../dv.SelectedItem}"
+                                       Name="crowContainer" Background="Onyx"/>
+                               <Splitter/>
+                               <HorizontalStack Height="50%" Margin="10" MinimumSize="10,1">
+                                       <Scroller Name="scroller1" Background="White"
+                                                       Margin="2" VerticalScrolling="true" ScrollY="{../scrollbar1.Value}"
+                                                       ValueChanged="./_scroller_ValueChanged">
+                                               <TextBox Background="White" Height="Fit"
+                                                               VerticalAlignment="Top"
+                                                               TextAlignment="TopLeft" Font="mono, 12"
+                                                               TextChanged="onImlSourceChanged"
+                                                               Text="{CurSources}" Multiline="true"/>
+                                       </Scroller>
+                                       <ScrollBar Name="scrollbar1" Value="{../scroller1.ScrollY}"
+                                               Maximum="{../scroller1.MaximumScroll}" Orientation="Vertical"
+                                               Width="14" />
+                               </HorizontalStack>
+                       </VerticalStack>
+               </HorizontalStack>
+       </VerticalStack>
 </Window>
index 4036b7291cb2b2496b4a3909a27573eacad35174..87bc45133c460e13143d72f1d8df6c8629f98b15 100644 (file)
@@ -1,4 +1,4 @@
 <Container Margin="20" Background="Onyx">
-<!--   <ImlVisualEditor Margin="10" MinimumSize="10,10"
-                       Name="crowContainer" Background="Green"/>-->
+       <ImlVisualEditor Width="80%" Height="80%" Margin="0" MinimumSize="10,10" Foreground="SkyBlue"
+                       Name="crowContainer" Background="Onyx"/>
 </Container>
index 586b1b26ce715a1d48dcae43553219f0798c9bc5..dbb0c212a23fb903c33fdeea0a6e182fc8a53584 100644 (file)
@@ -77,6 +77,8 @@ namespace Crow
                        get { return new DirectoryInfo (Root).GetFileSystemInfos (); }
                }
                public void onSelectedItemChanged (object sender, SelectionChangeEventArgs e){
+                       if (e.NewValue == SelectedItem)
+                               return;
                        SelectedItem = e.NewValue;
                        SelectedItemChanged.Raise (this, e);
                }
index 6572ba52b08cd63ca8ceaf40e52f67ff3cbe181d..b82a77cc60a73d77a8d0d8b4066d4e9039852fad 100644 (file)
@@ -727,7 +727,7 @@ namespace Crow
                }
                /// <summary> query an update of the content, a redraw </summary>
                [MethodImpl(MethodImplOptions.AggressiveInlining)]
-               public void RegisterForRedraw ()
+               public virtual void RegisterForRedraw ()
                {
                        bmp = null;
                        if (RegisteredLayoutings == LayoutingType.None)
index ef22826023b72e48d5e2d06380b4dbe366fa0ae0..78786cd7096ca5b20de7a6a930ee56f5f9441aff 100644 (file)
@@ -95,6 +95,8 @@ namespace Crow
                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;