void ISelect::OnLButtonDown(int x, int y) { m_fDragging = true; m_fMarkedForUndo = false; // So we will be marked when and if we are dragged m_ptLast.x = x; m_ptLast.y = y; SetCapture(GetPTable()->m_hwnd); SetObjectPos(); }
void ISelect::OnMouseMove(int x, int y) { PinTable * const ptable = GetPTable(); const float inv_zoom = 1.0f / ptable->m_zoom; if ((x == m_ptLast.x) && (y == m_ptLast.y)) { return; } if (m_fDragging && !GetIEditable()->GetISelect()->m_fLocked) // For drag points, follow the lock of the parent { if (!m_fMarkedForUndo) { m_fMarkedForUndo = true; GetIEditable()->BeginUndo(); GetIEditable()->MarkForUndo(); } MoveOffset((x - m_ptLast.x)*inv_zoom, (y - m_ptLast.y)*inv_zoom); m_ptLast.x = x; m_ptLast.y = y; SetObjectPos(); } }
void RichEdit::LeftDown(Point p, dword flags) { useraction = true; NextUndo(); SetFocus(); selclick = false; tabmove = GetHotPos(p); if(tabmove.table && tabmove.column >= -2) { SaveTableFormat(tabmove.table); SetCapture(); Move(text.GetCellPos(tabmove.table, 0, max(tabmove.column, 0)).pos); return; } int c = GetHotSpot(p); if(c >= 0 && objectpos >= 0) { int pos = objectpos; RectTracker tracker(*this); RichObject obj = text.GetRichPos(pos).object; tracker.MinSize(Size(16, 16)) .MaxSize(GetZoom() * pagesz) .Animation() .Dashed() .KeepRatio(obj.IsKeepRatio()); int tx, ty; switch(c) { case 1: tracker.SetCursorImage(Image::SizeVert()); tx = ALIGN_CENTER; ty = ALIGN_BOTTOM; break; case 2: tracker.SetCursorImage(Image::SizeHorz()); tx = ALIGN_RIGHT; ty = ALIGN_CENTER; break; default: tracker.SetCursorImage(Image::SizeBottomRight()); tx = ALIGN_RIGHT; ty = ALIGN_RIGHT; break; } double zoom = GetZoom().AsDouble(); Size sz = obj.GetSize(); sz.cx = int(zoom * sz.cx + 0.5); sz.cy = int(zoom * sz.cy + 0.5); sz = tracker.Track(Rect(objectrect.Offseted(GetTextRect().left, -sb).TopLeft(), sz), tx, ty).Size(); sz.cx = int(sz.cx / zoom + 0.5); sz.cy = int(sz.cy / zoom + 0.5); obj.SetSize(sz); ReplaceObject(obj); } else { c = GetMousePos(p); if(c >= 0) { if(InSelection(c)) { selclick = true; return; } Move(c, flags & K_SHIFT); mpos = c; SetCapture(); if(cursorp.object && GetObjectRect(cursor).Offseted(GetTextRect().left, -sb).Contains(p)) SetObjectPos(cursor); } } }