void DiagramEndPoint::mouseDown( BPoint point, uint32 buttons, uint32 clicks) { D_MOUSE(("DiagramEndPoint::mouseDown()\n")); if (clicks == 1) { if (isSelectable()) { BMessage selectMsg(M_SELECTION_CHANGED); if (modifiers() & B_SHIFT_KEY) { selectMsg.AddBool("replace", false); } else { selectMsg.AddBool("replace", true); } selectMsg.AddPointer("item", reinterpret_cast<void *>(this)); DiagramView* v = view(); BMessenger(v).SendMessage(&selectMsg); } if (isDraggable() && (buttons == B_PRIMARY_MOUSE_BUTTON)) { BMessage dragMsg(M_WIRE_DRAGGED); dragMsg.AddPointer("from", static_cast<void *>(this)); view()->DragMessage(&dragMsg, BRect(0.0, 0.0, -1.0, -1.0), view()); view()->messageDragged(point, B_INSIDE_VIEW, &dragMsg); } } }
void DiagramBox::mouseDown( BPoint point, uint32 buttons, uint32 clicks) { D_MOUSE(("DiagramBox::mouseDown()\n")); DiagramItem *item = itemUnder(point); if (item) { item->mouseDown(point, buttons, clicks); } else if (clicks == 1) { if (isSelectable()) { BMessage selectMsg(M_SELECTION_CHANGED); if (modifiers() & B_SHIFT_KEY) { selectMsg.AddBool("replace", false); } else { selectMsg.AddBool("replace", true); } selectMsg.AddPointer("item", reinterpret_cast<void *>(this)); DiagramView* v = view(); BMessenger(v).SendMessage(&selectMsg); } if (isDraggable() && (buttons == B_PRIMARY_MOUSE_BUTTON)) { BMessage dragMsg(M_BOX_DRAGGED); dragMsg.AddPointer("item", static_cast<void *>(this)); dragMsg.AddPoint("offset", point - frame().LeftTop()); view()->DragMessage(&dragMsg, BRect(0.0, 0.0, -1.0, -1.0), view()); } } }
void BasicInteractiveObject::updateMtTransform(){ if(!mtscoperunning) return; if (!isDraggable() && !isRotateable() && !isScaleable()) return; bool matrixNeedsUpdate = false; mttransform = getCurrentMtTransform(); mttransformmatrix.makeIdentityMatrix(); if(getNumActiveTouches() > 1){ mttransformmatrix.translate(-(mttranslatestart+mtpivot)); matrixNeedsUpdate = true; if(isScaleable()){ mtscalespeed = mtscale; float endscale = (float)mttransform.length() / mttransformstart.length(); mtscale += (endscale-mtscale)*scaledamp; mtscalespeed = mtscale-mtscalespeed; mtscaledist += fabs(mtscalespeed); if (isscaling == false) { if(mtscaledist > scalethreshold){ isscaling = true; MultiTouchEvent params(this); ofNotifyEvent(scaleStartEvent,params,this); } } if(isScaleAuto() && isscaling){ mttransformmatrix.scale(mtscale, mtscale, mtscale); } } if(isRotateable()){ mtrotatespeed = mtrotate; ofQuaternion newrotate; newrotate.makeRotate(mttransformstart, mttransform); mtrotate.slerp(rotatedamp, mtrotate, newrotate); mtrotatespeed = mtrotate*mtrotatespeed.inverse(); mtrotatedist += fabs(mtrotatespeed.getEuler().z); if (isrotating == false) { if(mtrotatedist > rotatethreshold){ isrotating = true; MultiTouchEvent params(this); ofNotifyEvent(rotateStartEvent, params, this); } } if(isRotateAuto() && isrotating){ mttransformmatrix.rotate(mtrotate); } } mttransformmatrix.translate(mttranslatestart + mtpivot); } bool stAlsoOk=true; if(getNumActiveTouches() == 1 ){ if(!isStDraggable()){ stAlsoOk = false; } } if(isDraggable() && stAlsoOk){ mttranslatespeed.set(mttranslate); mttranslate.interpolate(getCurrentMtTranslate() - mtpivot - mttranslatestart, dragdamp); mttranslatespeed = mttranslate-mttranslatespeed; mttranslatedist += mttranslatespeed.length(); if (isdragging == false) { if(mttranslatedist > dragthreshold){ isdragging = true; MultiTouchEvent params(this); ofNotifyEvent(dragStartEvent,params,this); } } if(isDragAuto() && isdragging){ mttransformmatrix.translate(mttranslate); matrixNeedsUpdate = true; } } // only affect current matrix if we're actual if (matrixNeedsUpdate && (isDraggable() || isRotateable() || isScaleable())) { ofMatrix4x4 currentmatrix; currentmatrix.set(mttransformmatrixstart); currentmatrix.postMult(mttransformmatrix); mttarget->setTransformMatrix(currentmatrix); } MultiTouchEvent params(this); ofNotifyEvent(updateMultiTouchScopeEvent, params, this); }