bool IrisWind::SetActiveScaling (long lZoom) { ObjContainer OC (0, 0, 0, 0); ObjContainer oldOC = DBO().GetExtend(); // alten Ausschnitt merken bool fResult = false; Rectangle rcC (0, 0, 0, 0); for (int i = 0; i < 2; i++) { rcC = CanvasRect(); Rectangle rc; if (NULL != m_pDRO) { rc = ((DragRectangleObject *)m_pDRO) -> GetRect(); // Koordinaten kippen CoOrd tmpC = CoOrd(rc.Bottom() - rc.Top()); rc.Bottom() = CoOrd(rc.Top() - tmpC); } else rc = rcC; fResult = DBO().SetActiveScaling (lZoom, rc, rcC, OC); if (!fResult) break; // neuen Ausschnitt einstellen SetExtend (OC, lZoom); // bei Bedarf ScrollBars einblenden und initialisieren if (!InitWndScrollBars()) break; // einmal reicht, wenn Scrollbars nicht geändert wurden } // wenn Erfolgreich, dann alles neu einstellen if (fResult) { DELETE_OBJ (m_pDRO); // Übersichtsfenster bedienen if (OverViewCFlag && pOverView) pOverView -> SetActVP (CanvasRect()); actClip.Push (oldOC); // neu zeichnen LegendToRepaint = true; m_fRePaintFlag = true; RePaint(); } return fResult; }
void FSceneViewport::OnDrawViewport( const FGeometry& AllottedGeometry, const FSlateRect& MyClippingRect, FSlateWindowElementList& OutDrawElements, int32 LayerId, const FWidgetStyle& InWidgetStyle, bool bParentEnabled ) { // Switch to the viewport clients world before resizing FScopedConditionalWorldSwitcher WorldSwitcher( ViewportClient ); /** Check to see if the viewport should be resized */ FIntPoint DrawSize = FIntPoint( FMath::RoundToInt( AllottedGeometry.GetDrawSize().X ), FMath::RoundToInt( AllottedGeometry.GetDrawSize().Y ) ); if( GetSizeXY() != DrawSize ) { TSharedPtr<SWindow> Window = FSlateApplication::Get().FindWidgetWindow( ViewportWidget.Pin().ToSharedRef() ); check(Window.IsValid()); ResizeViewport(FMath::Max(0, DrawSize.X), FMath::Max(0, DrawSize.Y), Window->GetWindowMode(), 0, 0); } // Cannot pass negative canvas positions float CanvasMinX = FMath::Max(0.0f, AllottedGeometry.AbsolutePosition.X); float CanvasMinY = FMath::Max(0.0f, AllottedGeometry.AbsolutePosition.Y); FIntRect CanvasRect( FMath::RoundToInt( CanvasMinX ), FMath::RoundToInt( CanvasMinY ), FMath::RoundToInt( CanvasMinX + AllottedGeometry.Size.X * AllottedGeometry.Scale ), FMath::RoundToInt( CanvasMinY + AllottedGeometry.Size.Y * AllottedGeometry.Scale ) ); DebugCanvasDrawer->BeginRenderingCanvas( CanvasRect ); // Draw above everything else uint32 MaxLayer = MAX_uint32; FSlateDrawElement::MakeCustom( OutDrawElements, MAX_uint32, DebugCanvasDrawer ); }
// Anzeige des aktuellen Maßstabes -------------------------------------------- bool IrisWind :: SetMasstab (Rectangle R) { // wenn Rechteck entartet ist, dann nichts ändern if (R.Right() == R.Left()) return false; Rectangle CRc = CanvasRect(); if (CRc.Left() == CRc.Right()) return false; // Icon // Koordinaten in DB-Koordinaten umsetzen CoordTrans *pCT = DBO().pCT(); TX_ASSERT(NULL != pCT); if (NULL == pCT) return false; Point ptLO = R.UpperLeft(); Punkt LO = DCtoOC (ptLO); // Device --> Objekt Point ptRU = R.LowerRight(); Punkt RU = DCtoOC (ptRU); #if defined(_KOORD_ISDOUBLE) DoublePair P1 (LO.GetX(), LO.GetY()); DoublePair P2 (RU.GetX(), LO.GetY()); // über X-Koordinate berechnen #else double XLO, XRU, YLO, YRU; pCT() -> UnScale (LO, &XLO, &YLO); pCT() -> UnScale (RU, &XRU, &YRU); DoublePair P1 (XLO, YLO); DoublePair P2 (XRU, YLO); // über X-Koordinate berechnen #endif // _KOORD_ISDOUBLE double dX = 1.0; if (pCT -> hasDistEx()) { double dY = 1.0; pCT -> CoordTransDistanceEx (&P1, &P2, dX, dY); } else dX = pCT -> CoordTransDistance (&P1, &P2); DoublePair dimD; Dimension DotsPerMM (GetDotsPerMM (NULL, &dimD)); long M = (long)((fabs(dX) * 1000.0 * dimD.Width()) / ((double)(CRc.Right()-CRc.Left()))); // Maßstab muß positiv sein if (M < 0L) M = -M; if (0 != m_lFakeZoom) DEXN_ScalingChanged (m_lFakeZoom); else DEXN_ScalingChanged (M); return true; }
void CCheckTreeView::HandleCheckMark(Point point, UINT uiMsg) { Rectangle rc = CanvasRect(); CoOrd dY = rc.Top()-rc.Bottom(); TV_HITTESTINFO ht; ht.pt.x = point.X(); ht.pt.y = dY-point.Y(); HTREEITEM hNewTarget = HitTest (&ht); if (hNewTarget && (ht.flags & TVHT_ONITEMSTATEICON)) { UINT uiState = ChangingCheckState (hNewTarget, uiMsg); if (TV_CHECK_NOCHANGE != uiState) { if (TV_CHECK_NOMARK != uiState) SetCheckState (hNewTarget, uiState); else ToggleCheckMark (hNewTarget); NotifyChecked (hNewTarget, uiMsg, GetCheckState(hNewTarget)); } } }