/** * タッチイベント処理 * リストの末尾(手前に表示されている)から順に処理する * @param vt * @return true:再描画 */ public bool touchEvent(ViewTouch vt, out UDrawable hoverObj) { UDrawManager manager = UDrawManager.getInstance(); bool ret = false; bool isHover; hoverObj = null; // 手前に表示されたものから処理したいのでリストを逆順で処理する list.Reverse(); foreach (UDrawable obj in list) { if (!obj.isShow) { continue; } PointF offset = obj.getDrawOffset(); if (obj.touchEvent(vt, offset, out isHover)) { if (isHover) { hoverObj = obj; } ret = true; break; } } list.Reverse(); // 逆順を元に戻す return(ret); }
/** * Is contain in list * @param obj * @return */ public bool contains(UDrawable obj) { foreach (UDrawable _obj in list) { if (obj == _obj) { return(true); } } return(false); }
/** * タッチイベント処理 * 描画優先度の高い順に処理を行う * @param vt * @return true:再描画 */ public bool touchEvent(ViewTouch vt) { SortedDictionary <int, DrawList> lists = mDrawList; // 1つ前のフレームのホバーオブジェクトを開放する UDrawable oldHoverObj = hoverObj; if (hoverObj != null) { hoverObj.IsHover = false; hoverObj = null; } //if (vt.MEvent == MouseEvent.Down) { UDrawable _hoverObj; foreach (DrawList list in lists.Values) { if (list.touchEvent(vt, out _hoverObj)) { // その他のタッチイベントはtrueが返った時点で打ち切り if (_hoverObj != null) { hoverObj = _hoverObj; hoverObj.IsHover = true; } return(true); } } } if (oldHoverObj != hoverObj) { return(true); } return(false); }
/** * 追加済みのオブジェクトのプライオリティーを変更する * @param obj * @param priority */ public void setPriority(UDrawable obj, int priority) { SortedDictionary <int, DrawList> lists = mDrawList; // 探す foreach (int pri in lists.Keys) { DrawList list = lists[pri]; if (list.contains(obj)) { if (pri == priority) { // すでに同じPriorityにいたら末尾に移動 list.toLast(obj); } else { list.remove(obj); addDrawable(obj); return; } } } }
public DrawList addDrawable(UDrawable obj) { // カレントページのリストを取得 SortedDictionary <int, DrawList> lists = mDrawList; // 挿入するリストを探す int _priority = obj.getDrawPriority(); DrawList list; if (lists.ContainsKey(_priority) == false) { // まだ存在していないのでリストを生成 list = new DrawList(obj.getDrawPriority()); lists.Add(_priority, list); } else { list = lists[_priority]; } list.add(obj); obj.setDrawList(list); return(list); }
public void toLast(UDrawable obj) { list.Remove(obj); list.Add(obj); }
public bool remove(UDrawable obj) { return(list.Remove(obj)); }
/** * リストに追加 * すでにリストにあった場合は末尾に移動 * @param obj */ public void add(UDrawable obj) { list.Remove(obj); list.Add(obj); }
/** * リストに登録済みの描画オブジェクトを削除 * 削除要求をバッファに積んでおき、描画前に削除チェックを行う * @param obj * @return */ public void removeDrawable(UDrawable obj) { removeRequest.AddLast(obj); }
/** * 描画オブジェクトを追加 * @param obj * @return */ public DrawList addWithNewPriority(UDrawable obj, int priority) { obj.drawPriority = priority; return(addDrawable(obj)); }
public void setTouchingObj(UDrawable touchingObj) { this.touchingObj = touchingObj; }