diff options
| author | jpbruyere <jp.bruyere@hotmail.com> | 2016-02-12 17:35:02 +0100 |
|---|---|---|
| committer | jpbruyere <jp.bruyere@hotmail.com> | 2016-02-12 17:35:02 +0100 |
| commit | d1e33e2f2212e2f9a60caebd3eb839b36357b2c6 (patch) | |
| tree | f0145de80ff23138f0869aa1f2e40bb44168e6da | |
| parent | 91755561f57c669423539f0336287e2bee36be5e (diff) | |
| parent | d6e894025ca1d21e85da60c39ccf9ed4229a6bba (diff) | |
Merge branch 'ScrollingWithNewClipping' into NewClipping
| -rw-r--r-- | Crow.csproj | 2 | ||||
| -rwxr-xr-x | Tests/Interfaces/clip4.crow | 32 | ||||
| -rw-r--r-- | src/GraphicObjects/GraphicObject.cs | 2 | ||||
| -rw-r--r-- | src/GraphicObjects/Scroller.cs | 47 | ||||
| -rw-r--r-- | src/OpenTKGameWindow.cs | 6 |
5 files changed, 78 insertions, 11 deletions
diff --git a/Crow.csproj b/Crow.csproj index 64eab6c9..9ae27230 100644 --- a/Crow.csproj +++ b/Crow.csproj @@ -46,7 +46,7 @@ </PropertyGroup> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> <OutputPath>bin\Debug</OutputPath> - <DefineConstants>DEBUG_LAYOUTING0;TRACE;DEBUG;__linux__;MEASURE_TIME;DEBUG_LOAD_TIME0;DEBUG_BINDING0;DEBUG_CLIP_RECTANGLE0</DefineConstants> + <DefineConstants>DEBUG_LAYOUTING0;TRACE;DEBUG;__linux__;MEASURE_TIME;DEBUG_LOAD_TIME0;DEBUG_BINDING0;DEBUG_CLIP_RECTANGLE</DefineConstants> </PropertyGroup> <!-- <PropertyGroup Condition=" '$(Platform)' == 'Linux_x86' "> <DefineConstants>__linux__</DefineConstants> diff --git a/Tests/Interfaces/clip4.crow b/Tests/Interfaces/clip4.crow index c38e95ac..6d85a7e1 100755 --- a/Tests/Interfaces/clip4.crow +++ b/Tests/Interfaces/clip4.crow @@ -1,6 +1,34 @@ <?xml version="1.0"?> -<Border Fit="true" Margin="50" Background="DimGray" CornerRadius="20"> - <Label Margin="50" Text="fpsklhlkjh" Background="BlueCrayola"/> +<Border Fit="true" BorderWidth="2"> +<Scroller CornerRadius="2" CacheEnabled="false" VerticalScrolling="true" Height="200" Width="300" Background="DimGray" Margin="2"> + <VerticalStack Margin="10" VerticalAlignment="Top" Fit="true" Background="vgradient|0:BlueCrayola|1:Black"> + <Label MouseEnter="{Background=Gray}" MouseLeave="{Background=hgradient|0:DarkRed|1:Transparent}" Margin="5" Background="hgradient|0:DarkRed|1:Transparent" Font="droid,20" Text="label 1"/> + <Label MouseEnter="{Background=Gray}" MouseLeave="{Background=hgradient|0:DarkRed|1:Transparent}" Margin="5" Background="hgradient|0:DarkRed|1:Transparent" Font="droid,20" Text="label 2"/> + <Label MouseEnter="{Background=Gray}" MouseLeave="{Background=hgradient|0:DarkRed|1:Transparent}" Margin="5" Background="hgradient|0:DarkRed|1:Transparent" Font="droid,20" Text="label 3"/> + <Label MouseEnter="{Background=Gray}" MouseLeave="{Background=hgradient|0:DarkRed|1:Transparent}" Margin="5" Background="hgradient|0:DarkRed|1:Transparent" Font="droid,20" Text="label 4"/> + <Label MouseEnter="{Background=Gray}" MouseLeave="{Background=hgradient|0:DarkRed|1:Transparent}" Margin="5" Background="hgradient|0:DarkRed|1:Transparent" Font="droid,20" Text="label 5"/> + <Label MouseEnter="{Background=Gray}" MouseLeave="{Background=hgradient|0:DarkRed|1:Transparent}" Margin="5" Background="hgradient|0:DarkRed|1:Transparent" Font="droid,20" Text="label 6"/> + <Label MouseEnter="{Background=Gray}" MouseLeave="{Background=hgradient|0:DarkRed|1:Transparent}" Margin="5" Background="hgradient|0:DarkRed|1:Transparent" Font="droid,20" Text="label 7"/> + <Label MouseEnter="{Background=Gray}" MouseLeave="{Background=hgradient|0:DarkRed|1:Transparent}" Margin="5" Background="hgradient|0:DarkRed|1:Transparent" Font="droid,20" Text="label 8"/> + <Label MouseEnter="{Background=Gray}" MouseLeave="{Background=hgradient|0:DarkRed|1:Transparent}" Margin="5" Background="hgradient|0:DarkRed|1:Transparent" Font="droid,20" Text="label 9"/> + <Label MouseEnter="{Background=Gray}" MouseLeave="{Background=hgradient|0:DarkRed|1:Transparent}" Margin="5" Background="hgradient|0:DarkRed|1:Transparent" Font="droid,20" Text="label 10"/> + <Label MouseEnter="{Background=Gray}" MouseLeave="{Background=hgradient|0:DarkRed|1:Transparent}" Margin="5" Background="hgradient|0:DarkRed|1:Transparent" Font="droid,20" Text="label 11"/> + <Label MouseEnter="{Background=Gray}" MouseLeave="{Background=hgradient|0:DarkRed|1:Transparent}" Margin="5" Background="hgradient|0:DarkRed|1:Transparent" Font="droid,20" Text="label 12"/> + <Label MouseEnter="{Background=Gray}" MouseLeave="{Background=hgradient|0:DarkRed|1:Transparent}" Margin="5" Background="hgradient|0:DarkRed|1:Transparent" Font="droid,20" Text="label 13"/> + <Label MouseEnter="{Background=Gray}" MouseLeave="{Background=hgradient|0:DarkRed|1:Transparent}" Margin="5" Background="hgradient|0:DarkRed|1:Transparent" Font="droid,20" Text="label 14"/> + <Label MouseEnter="{Background=Gray}" MouseLeave="{Background=hgradient|0:DarkRed|1:Transparent}" Margin="5" Background="hgradient|0:DarkRed|1:Transparent" Font="droid,20" Text="label 15"/> + <Label MouseEnter="{Background=Gray}" MouseLeave="{Background=hgradient|0:DarkRed|1:Transparent}" Margin="5" Background="hgradient|0:DarkRed|1:Transparent" Font="droid,20" Text="label 16"/> + <Label MouseEnter="{Background=Gray}" MouseLeave="{Background=hgradient|0:DarkRed|1:Transparent}" Margin="5" Background="hgradient|0:DarkRed|1:Transparent" Font="droid,20" Text="label 17"/> + <Label MouseEnter="{Background=Gray}" MouseLeave="{Background=hgradient|0:DarkRed|1:Transparent}" Margin="5" Background="hgradient|0:DarkRed|1:Transparent" Font="droid,20" Text="label 18"/> + <Label MouseEnter="{Background=Gray}" MouseLeave="{Background=hgradient|0:DarkRed|1:Transparent}" Margin="5" Background="hgradient|0:DarkRed|1:Transparent" Font="droid,20" Text="label 19"/> + <Label MouseEnter="{Background=Gray}" MouseLeave="{Background=hgradient|0:DarkRed|1:Transparent}" Margin="5" Background="hgradient|0:DarkRed|1:Transparent" Font="droid,20" Text="label 20"/> + <Label MouseEnter="{Background=Gray}" MouseLeave="{Background=hgradient|0:DarkRed|1:Transparent}" Margin="5" Background="hgradient|0:DarkRed|1:Transparent" Font="droid,20" Text="label 21"/> + <Label MouseEnter="{Background=Gray}" MouseLeave="{Background=hgradient|0:DarkRed|1:Transparent}" Margin="5" Background="hgradient|0:DarkRed|1:Transparent" Font="droid,20" Text="label 22"/> + <Label MouseEnter="{Background=Gray}" MouseLeave="{Background=hgradient|0:DarkRed|1:Transparent}" Margin="5" Background="hgradient|0:DarkRed|1:Transparent" Font="droid,20" Text="label 23"/> + <Label MouseEnter="{Background=Gray}" MouseLeave="{Background=hgradient|0:DarkRed|1:Transparent}" Margin="5" Background="hgradient|0:DarkRed|1:Transparent" Font="droid,20" Text="label 24"/> + <Label MouseEnter="{Background=Gray}" MouseLeave="{Background=hgradient|0:DarkRed|1:Transparent}" Margin="5" Background="hgradient|0:DarkRed|1:Transparent" Font="droid,20" Text="label 25"/> + </VerticalStack> +</Scroller> </Border> <!--<VerticalStack Fit="true" Margin="50" Background="LimeGreen" CacheEnabled="false" HorizontalAlignment="Right" VerticalAlignment="Bottom" diff --git a/src/GraphicObjects/GraphicObject.cs b/src/GraphicObjects/GraphicObject.cs index 7cb4a723..24fd852a 100644 --- a/src/GraphicObjects/GraphicObject.cs +++ b/src/GraphicObjects/GraphicObject.cs @@ -471,7 +471,7 @@ namespace Crow public virtual bool Contains(GraphicObject goToFind){ return false; } - public void RegisterClip(Rectangle clip){ + public virtual void RegisterClip(Rectangle clip){ if (CacheEnabled && bmp != null) Clipping.AddRectangle (clip + ClientRectangle.Position); Parent.RegisterClip (clip + Slot.Position + ClientRectangle.Position); diff --git a/src/GraphicObjects/Scroller.cs b/src/GraphicObjects/Scroller.cs index 599f951f..1924aac0 100644 --- a/src/GraphicObjects/Scroller.cs +++ b/src/GraphicObjects/Scroller.cs @@ -100,6 +100,11 @@ namespace Crow : base(){} #region GraphicObject Overrides + [XmlAttributeAttribute()][DefaultValue(false)] + public override bool CacheEnabled { + get { return base.CacheEnabled; } + set { base.CacheEnabled = value; } + } void OnChildLayoutChanges (object sender, LayoutingEventArgs arg) { int maxScroll = MaximumScroll; @@ -177,17 +182,51 @@ namespace Crow savedMousePos.Y += e.YDelta; base.onMouseMove (sender, new MouseMoveEventArgs(savedMousePos.X,savedMousePos.Y,e.XDelta,e.YDelta)); } - #endregion - - public override Rectangle ContextCoordinates (Rectangle r) + public override void RegisterClip (Rectangle clip) { - return base.ContextCoordinates (r) - new Point((int)ScrollX,(int)ScrollY); + base.RegisterClip (clip - new Point((int)ScrollX,(int)ScrollY)); } + #endregion + public override Rectangle ScreenCoordinates (Rectangle r) { return base.ScreenCoordinates (r) - new Point((int)ScrollX,(int)ScrollY); } +// protected override void onDraw (Context gr) +// { +// gr.Save (); +// //gr.ResetClip (); +// +// base.onDraw (gr); +// gr.Restore (); +// } + 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 (); + //clip to scrolled client zone + CairoHelpers.CairoRectangle (gr, ClientRectangle, CornerRadius);//+ new Point((int)ScrollX,(int)ScrollY) + gr.Clip (); + + gr.Translate (-ScrollX, -ScrollY); + if (child != null) + child.Paint (ref gr); + gr.Restore (); + } +// public override void Paint (ref Context ctx) +// { +// ctx.Save (); +// //ctx.ResetClip (); +// ctx.Translate (-ScrollX, -ScrollY); +// base.Paint (ref ctx); +// ctx.Restore (); +// } // public override void registerClipRect () // { // HostContainer.redrawClip.AddRectangle (base.ScreenCoordinates(Slot)); diff --git a/src/OpenTKGameWindow.cs b/src/OpenTKGameWindow.cs index c46a07f7..00035390 100644 --- a/src/OpenTKGameWindow.cs +++ b/src/OpenTKGameWindow.cs @@ -307,9 +307,9 @@ namespace Crow ctx.Restore (); } -// #if DEBUG_CLIP_RECTANGLE -// clipping.stroke (ctx, Color.Red.AdjustAlpha(0.5)); -// #endif + #if DEBUG_CLIP_RECTANGLE + clipping.stroke (ctx, Color.Red.AdjustAlpha(0.5)); + #endif clipping.Reset (); } |