protected override void UpdateSkinDisplayList() { if (null == Thumb || null == Track) { return; } var thumbRange = LayoutUtil.GetLayoutBoundsHeight(Track) - LayoutUtil.GetLayoutBoundsHeight(Thumb); var range = Maximum - Minimum; // calculate new thumb position. var thumbPosTrackY = (range > 0) ? thumbRange - ((PendingValue - Minimum) / range) * thumbRange : 0; // convert to parent's coordinates. var thumbPos = Track.LocalToGlobal(new Point(0, thumbPosTrackY)); var thumbPosParentY = Thumb.Parent.GlobalToLocal(thumbPos).Y; Thumb.SetLayoutBoundsPosition(LayoutUtil.GetLayoutBoundsX(Thumb), Mathf.Round(thumbPosParentY)); }
//--------------------------------- // Utility methods for subclasses //--------------------------------- /** * * * Utility method to calculate a skin part's position relative to our component. * * Param: part The skin part instance to obtain coordinates of. * * Returns: The component relative position of the part. */ /// <summary> /// /// </summary> /// <param name="part"></param> /// <returns></returns> protected Point GetSkinPartPosition(IVisualElement part) { return((null == part || null == part.Parent) ? new Point(0, 0) : GlobalToLocal(part.Parent.LocalToGlobal(new Point(LayoutUtil.GetLayoutBoundsX((InvalidationManagerClient)part), LayoutUtil.GetLayoutBoundsY((InvalidationManagerClient)part))))); }