diff options
| author | jpbruyere <jp.bruyere@hotmail.com> | 2016-02-12 17:47:36 +0100 |
|---|---|---|
| committer | jpbruyere <jp.bruyere@hotmail.com> | 2016-02-12 17:47:36 +0100 |
| commit | 970a3f7239d5e57eb011295cda9eee015bbe97f4 (patch) | |
| tree | 7d09918825c72a7e0f58b5d8b174f27805cdfcc5 /src/GraphicObjects/Scroller.cs | |
| parent | 44caf51048bde7e9daf78acc779278642c798748 (diff) | |
| parent | d1e33e2f2212e2f9a60caebd3eb839b36357b2c6 (diff) | |
Merge branch 'NewClipping'
Diffstat (limited to 'src/GraphicObjects/Scroller.cs')
| -rw-r--r-- | src/GraphicObjects/Scroller.cs | 53 |
1 files changed, 46 insertions, 7 deletions
diff --git a/src/GraphicObjects/Scroller.cs b/src/GraphicObjects/Scroller.cs index 3ac8d66c..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,22 +182,56 @@ 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); } - - public override void registerClipRect () +// protected override void onDraw (Context gr) +// { +// gr.Save (); +// //gr.ResetClip (); +// +// base.onDraw (gr); +// gr.Restore (); +// } + protected override void onDraw (Context gr) { - HostContainer.redrawClip.AddRectangle (base.ScreenCoordinates(Slot)); + 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)); +// } + } } |