]> O.S.I.I.S - jp/crow.git/commitdiff
draw selected tab last, try mouseIsIn
authorjpbruyere <jp.bruyere@hotmail.com>
Mon, 15 Feb 2016 13:06:13 +0000 (14:06 +0100)
committerjpbruyere <jp.bruyere@hotmail.com>
Mon, 15 Feb 2016 13:06:13 +0000 (14:06 +0100)
Templates/TabItem.crow
Tests/Interfaces/testTabView.crow
src/GraphicObjects/TabItem.cs
src/GraphicObjects/TabView.cs

index 9e3c02b9ebc2d29bee7922476fa475f4827218d4..6f8bfe8e43cd48b75691c5daff3aa96648fb6473 100644 (file)
@@ -7,7 +7,7 @@
                Height="{../../../TabThickness}"
                Left="{../../TabOffset}"
                LayoutChanged="../../../TabTitleLayoutChanged"/>
-       <Container
+       <Container Background="LightGray"
                Name="Content" Width="{../../../WidthPolicy}" Height="{../../../HeightPolicy}"/>
 </GenericStack>
 
index 8f25ffcd32bd180b84eb9646726e2d580d51ea24..0e2d565803b4f9a0993a60f95b125791e9d80100 100644 (file)
@@ -1,9 +1,13 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <TabView Orientation="Horizontal" Spacing="20" Margin="0">
-       <TabItem Caption="tab 1" Width="0" Height="0" Margin="0" Background="Gray">
+       <TabItem Name="TabItem1" Caption="tab 1" Width="0" Height="0" Margin="0" Background="Gray"
+               MouseEnter="{Background=Red}"
+               MouseLeave="{Background=Gray}">
                <Label Text="tab content test 1"/>
        </TabItem>
-       <TabItem Caption="tab 2" Width="0" Height="0" Margin="0" Background="Gray">
+       <TabItem Name="TabItem2" Caption="tab 2" Width="0" Height="0" Margin="0" Background="Gray"
+               MouseEnter="{Background=Red}"
+               MouseLeave="{Background=Gray}">
                <Label Text="tab content test 2"/>
        </TabItem>
 
index 1f0389d390640d717ffb42471b5d666a6d658742..3ecce21744392f80132010f7182215d7e2e41e9c 100644 (file)
 using System;
 using System.Xml.Serialization;
 using System.ComponentModel;
+using System.Diagnostics;
 
 namespace Crow
 {
        [DefaultTemplate("#Crow.Templates.TabItem.crow")]
        public class TabItem : TemplatedContainer
        {
+               #region Private fields
                string caption;
                Container _contentContainer;
                GraphicObject _tabTitle;
+               int tabOffset;
+               #endregion
 
+               #region CTOR
                public TabItem () : base()
                {
                }
+               #endregion
+
+               #region TemplatedControl overrides
                public override GraphicObject Content {
                        get {
                                return _contentContainer == null ? null : _contentContainer.Child;
@@ -56,16 +64,17 @@ namespace Crow
                        _tabTitle = this.child.FindByName ("TabTitle");
                }
                internal GraphicObject TabTitle { get { return _tabTitle; }}
+               #endregion
 
                #region GraphicObject overrides
-               [XmlAttributeAttribute()][DefaultValue(true)]
+               [XmlAttributeAttribute()][DefaultValue(false)]
                public override bool Focusable
                {
                        get { return base.Focusable; }
                        set { base.Focusable = value; }
                }
                #endregion
-               int tabOffset;
+
                [XmlAttributeAttribute()][DefaultValue(0)]
                public virtual int TabOffset {
                        get { return tabOffset; }
@@ -86,6 +95,25 @@ namespace Crow
                                NotifyValueChanged ("Caption", caption);
                        }
                }
+               public override bool MouseIsIn (Point m)
+               {
+                       if (!Visible)
+                               return false;
+
+                       Debug.WriteLine ("Mouse Testing " + this.ToString ());
+
+                       if (TabTitle.MouseIsIn (m)){
+                               Debug.WriteLine ("Mouse is in title of " + this.ToString ());
+                               return true;
+                       }
+                       if (Content.MouseIsIn (m)){
+                               Debug.WriteLine ("Mouse is in content of " + this.ToString ());
+                               return true;
+                       }
+
+                       Debug.WriteLine ("Mouse is not in " + this.ToString ());
+                       return false;
+               }
                protected override void onDraw (Cairo.Context gr)
                {
                        int spacing = (Parent as TabView).Spacing;
index c9017e4958b89117e400d5a504e804cbb13e90f9..ab7806736e604a4ab6519391beefb5563e572235 100644 (file)
@@ -23,6 +23,7 @@ using System.Xml.Serialization;
 using System.ComponentModel;
 using Cairo;
 using System.Diagnostics;
+using OpenTK.Input;
 
 namespace Crow
 {
@@ -128,6 +129,55 @@ namespace Crow
 
                        return base.UpdateLayout(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 ();
+                       //clip to client zone
+                       CairoHelpers.CairoRectangle (gr, ClientRectangle, CornerRadius);
+                       gr.Clip ();
+
+                       for (int i = 0; i < Children.Count; i++) {
+                               if (i == SelectedTab)
+                                       continue;
+                               Children [i].Paint (ref gr);
+                       }
+                       Children [SelectedTab].Paint (ref gr);
+
+                       gr.Restore ();
+               }
+
+               #region Mouse handling
+               public override void checkHoverWidget (MouseMoveEventArgs e)
+               {
+                       Debug.WriteLine ("TabView check Hover");
+
+                       if (HostContainer.hoverWidget != this) {
+                               HostContainer.hoverWidget = this;
+                               onMouseEnter (this, e);
+                       }
+                       if (Children[SelectedTab].MouseIsIn(e.Position))
+                       {
+                               Children[SelectedTab].checkHoverWidget (e);
+                               return;
+                       }
+                       for (int i = Children.Count - 1; i >= 0; i--) {
+                               if (i == SelectedTab)
+                                       continue;
+                               if (Children[i].MouseIsIn(e.Position))
+                               {
+                                       Children[i].checkHoverWidget (e);
+                                       return;
+                               }
+                       }
+                       base.checkHoverWidget (e);
+               }
+               #endregion
 
                void TabTitleLayoutChanged (object sender, LayoutingEventArgs e)
                {
@@ -137,6 +187,7 @@ namespace Crow
                void Ti_MouseDown (object sender, OpenTK.Input.MouseButtonEventArgs e)
                {
                        SelectedTab = Children.IndexOf (sender as GraphicObject);
+                       Debug.WriteLine ("selected tab: " + (selectedTab + 1).ToString ());
                }
        }
 }