public bool Compare(HitInfo hitInfo) { if(hitInfo == null){ return false; } if(hitInfo.HittedObject == this.HittedObject){ // if(this.HittedObject == HittedObject.DownScrollButton || this.HittedObject == HittedObject.DownScrollButton){ // return true; // } if(hitInfo.HittedObject == HittedObject.Bar){ if(m_HittedBar != null && hitInfo.HittedBar != null && object.ReferenceEquals(hitInfo.HittedBar,this.HittedBar)){ return true; } } if(hitInfo.HittedObject == HittedObject.Item){ if(m_HittedItem != null && hitInfo.HittedItem != null && object.ReferenceEquals(hitInfo.HittedItem,this.HittedItem)){ return true; } } } return false; }
protected override void OnMouseLeave(System.EventArgs e) { base.OnMouseLeave(e); this.Invalidate(); m_LastHitInfo = null; }
protected override void OnMouseMove(System.Windows.Forms.MouseEventArgs e) { base.OnMouseMove(e); HitInfo hitInfo = new HitInfo(new Point(e.X,e.Y),this); if(!hitInfo.Compare(m_LastHitInfo)){ DrawObject(hitInfo,true); m_LastHitInfo = hitInfo; this.Invalidate(); } }
protected override void OnMouseUp(System.Windows.Forms.MouseEventArgs e) { base.OnMouseUp(e); if(e.Button != MouseButtons.Left){ return; } HitInfo hitInfo = new HitInfo(new Point(e.X,e.Y),this); //--- If hitted bar is different than activeBar, set hittedBar as activeBar. if(hitInfo.HittedObject == HittedObject.Bar && hitInfo.HittedBar.Index != m_ActiveBarIndex){ m_ActiveBarIndex = hitInfo.HittedBar.Index; this.UpdateAll(); return; } //--- If button clicked if(hitInfo.HittedObject == HittedObject.Item){ if(hitInfo.HittedItem.AllowStuck){ if(!hitInfo.HittedItem.Equals(m_StuckenItem)){ Item oldItem = m_StuckenItem; m_StuckenItem = hitInfo.HittedItem; //--- Redraw old stucken item if(oldItem != null && oldItem.Bar.IsItemVisible(oldItem)){ using(Graphics g = this.CreateGraphics()){ g.SetClip(this.ActiveBar.BarClientRect); DrawItem(g,oldItem,oldItem.Bar,false,false); } } OnItemClicked(hitInfo.HittedItem); } } else{ OnItemClicked(hitInfo.HittedItem); } } //--- If up scroll button clicked Bar activeBar = this.ActiveBar; if(hitInfo.HittedObject == HittedObject.UpScrollButton){ activeBar.FirstVisibleIndex--; this.UpdateAll(); return; } //--- If down scroll button clicked if(hitInfo.HittedObject == HittedObject.DownScrollButton){ activeBar.FirstVisibleIndex++; this.UpdateAll(); return; } // By default, redraw last hitted object DrawObject(hitInfo,false); }
private void DrawObject(HitInfo hitInfo,bool unDrawOld) { using(Graphics g = this.CreateGraphics()){ //--- Draw old object as normal if(unDrawOld && m_LastHitInfo != null){ if(m_LastHitInfo.HittedObject == HittedObject.Item){ g.SetClip(this.ActiveBar.BarClientRect); DrawItem(g,m_LastHitInfo.HittedItem,this.ActiveBar,false,false); g.ResetClip(); } if(m_LastHitInfo.HittedObject == HittedObject.Bar){ DrawBar(g,m_LastHitInfo.HittedBar,false,false); } } if(hitInfo.HittedObject == HittedObject.Item){ g.SetClip(this.ActiveBar.BarClientRect); DrawItem(g,hitInfo.HittedItem,this.ActiveBar,true,Control.MouseButtons == MouseButtons.Left); g.ResetClip(); } if(hitInfo.HittedObject == HittedObject.Bar){ DrawBar(g,hitInfo.HittedBar,true,Control.MouseButtons == MouseButtons.Left); } DrawScrollButtons(g); } }
/// <summary> /// /// </summary> /// <param name="e"></param> protected override void OnMouseUp(System.Windows.Forms.MouseEventArgs e) { base.OnMouseUp(e); if (e.Button != MouseButtons.Left) { return; } HitInfo hitInfo = new HitInfo(new Point(e.X, e.Y), this); //--- If hitted bar is different than activeBar, set hittedBar as activeBar. if (hitInfo.HittedObject == HittedObject.Bar && hitInfo.HittedBar.Index != m_ActiveBarIndex) { m_ActiveBarIndex = hitInfo.HittedBar.Index; this.UpdateAll(); // Raise bar clicked event OnBarClicked(hitInfo.HittedBar); return; } //--- If item clicked if (hitInfo.HittedObject == HittedObject.Item) { if (!hitInfo.HittedItem.Enabled) { return; } if (hitInfo.HittedItem.AllowStuck) { if (!hitInfo.HittedItem.Equals(m_StuckenItem)) { Item oldItem = m_StuckenItem; m_StuckenItem = hitInfo.HittedItem; //--- Redraw old stucken item if (oldItem != null && oldItem.Bar.IsItemVisible(oldItem)) { using (Graphics g = this.CreateGraphics()){ g.SetClip(this.ActiveBar.BarClientRect); DrawItem(g, oldItem, oldItem.Bar, false, false); } } // Raise item clicked event OnItemClicked(hitInfo.HittedItem); } } else { // Raise item clicked event OnItemClicked(hitInfo.HittedItem); this.Invalidate(); } } //--- If up scroll button clicked Bar activeBar = this.ActiveBar; if (hitInfo.HittedObject == HittedObject.UpScrollButton) { activeBar.FirstVisibleIndex--; this.UpdateAll(); return; } //--- If down scroll button clicked if (hitInfo.HittedObject == HittedObject.DownScrollButton) { activeBar.FirstVisibleIndex++; this.UpdateAll(); return; } // By default, redraw last hitted object DrawObject(hitInfo, false); }