/// <summary>
        /// Update the marquee bounds based on the given event data.
        /// </summary>
        /// <param name="e">A PInputEventArgs that contains the event data.</param>
        protected virtual void UpdateMarquee(PInputEventArgs e)
        {
            RectangleF r = RectangleF.Empty;

            if (marqueeParent is PCamera)
            {
                r = PUtil.AddPointToRect(r, canvasPressPt);
                r = PUtil.AddPointToRect(r, e.CanvasPosition);
            }
            else
            {
                r = PUtil.AddPointToRect(r, presspt);
                r = PUtil.AddPointToRect(r, e.Position);
            }

            r = marquee.GlobalToLocal(r);
            marquee.Reset();
            SetSafeMarqueePen(r.Width, r.Height);
            marquee.AddRectangle(r.X, r.Y, r.Width, r.Height);

            r = RectangleF.Empty;
            r = PUtil.AddPointToRect(r, presspt);
            r = PUtil.AddPointToRect(r, e.Position);

            allItems.Clear();
            PNodeFilter filter = CreateNodeFilter(r);

            foreach (PNode parent in selectableParents)
            {
                PNodeList items;
                if (parent is PCamera)
                {
                    items = new PNodeList();
                    PCamera cameraParent = (PCamera)parent;
                    for (int i = 0; i < cameraParent.LayerCount; i++)
                    {
                        cameraParent.GetLayer(i).GetAllNodes(filter, items);
                    }
                }
                else
                {
                    items = parent.GetAllNodes(filter, null);
                }

                foreach (PNode node in items)
                {
                    allItems.Add(node, true);
                }
            }
        }
Esempio n. 2
0
		/// <summary>
		/// Gets a list containing the subset of this node and all of its descendent nodes
		/// that are accepted by the given node filter. 
		/// </summary>
		/// <param name="filter">The filter used to determine the subset.</param>
		/// <param name="results">The list used to collect the subset; can be null.</param>
		/// <returns>
		/// A list containing the subset of this node and all its descendents accepted by
		/// the filter.
		/// </returns>
		/// <remarks>
		/// If the filter is null then all nodes will be accepted. If the results parameter is not
		/// null then it will be used to store this subset instead of creating a new list.
		/// </remarks>
		public virtual PNodeList GetAllNodes(PNodeFilter filter, PNodeList results) {
			if (results == null) {
				results = new PNodeList();
			}
			if (filter == null || filter.Accept(this)) {
				results.Add(this);
			}

			if (filter == null || filter.AcceptChildrenOf(this)) {
				int count = ChildrenCount;
				for (int i = 0; i < count; i++) {
					children[i].GetAllNodes(filter, results);
				}
			}

			return results;
		}