/// LayoutEditImage: MouseMove /// @param sender 使用しない /// @param e Client座標系でのマウス座標(GetPosition(...))の取得が可能 private void LayoutEditImage_MouseMove(object sender, MouseEventArgs e) { // 前処理 var image = (IInputElement)sender; var relativeMousePoint = this.GetRelativeMousePoint(image, e); // 動作中でなければカーソルを変更するだけ if (!this.moveAndSize.IsRunning) { LayoutElement hitElement; HitModes hitMode; HitTest.TryHitTest(App.Profile, relativeMousePoint, out hitElement, out hitMode); this.Cursor = LayoutEdit.HitModesToCursors[hitMode]; return; } // Move or Size this.moveAndSize.MousePoint = relativeMousePoint; var nextLTRB = this.moveAndSize.Do(Keyboard.Modifiers == ModifierKeys.Shift); App.Profile.Current.BoundRelativeLeft = nextLTRB.Left; App.Profile.Current.BoundRelativeTop = nextLTRB.Top; App.Profile.Current.BoundRelativeRight = nextLTRB.Right; App.Profile.Current.BoundRelativeBottom = nextLTRB.Bottom; // 描画自体はCompositionTarget.Renderingで行う }
//------------------------------------------------------------------- /// LayoutEditImage: MouseDown /// @param sender 使用しない /// @param e Client座標系でのマウス座標(GetPosition(...))の取得が可能 private void LayoutEditImage_MouseDown(object sender, MouseButtonEventArgs e) { // マウス操作中にアプリケーションからフォーカスが外れた場合に対応 if (this.moveAndSize.IsRunning) { return; } // 左/右クリック以外はすぐに戻る if (e.ChangedButton != MouseButton.Left && e.ChangedButton != MouseButton.Right) { return; } // 前処理 var image = (IInputElement)sender; var relativeMousePoint = this.GetRelativeMousePoint(image, e); // HitTest LayoutElement hitElement; HitModes hitMode; if (!HitTest.TryHitTest(App.Profile, relativeMousePoint, out hitElement, out hitMode)) { return; } // 現在選択中のIndexではない場合はそれに変更する if (hitElement != App.Profile.Current) { Debug.WriteLine("MouseDown: Changing Current ...", "LayoutEdit"); App.Profile.Current = hitElement; //--------------------------------------------------------------- // Notify self // Notify other controls Commands.ProfileStructureChanged.Execute(null, this); //--------------------------------------------------------------- this.BuildDrawingGroup(); } // 右クリックの場合はCurrentを変えただけで終了(残りはコンテキストメニューに任せる) if (e.ChangedButton == MouseButton.Right) { return; } // マウスを押した場所を記録してマウスキャプチャー開始 var snapGuide = App.Options.LayoutSnap ? new SnapGuide(App.Profile) : null; this.moveAndSize.Start(App.Profile.Current, hitMode, relativeMousePoint, snapGuide); // マウスキャプチャー開始 image.CaptureMouse(); // Profileを更新 App.Profile.Open(); // CompositionTarget.Renderingの実行はコストが高いのでここだけで使う CompositionTarget.Rendering += CompositionTarget_Rendering; }