Axiom.Samples.SdkTrayManager.AdjustTrays C# (CSharp) Метод

AdjustTrays() публичный Метод

Fits trays to their contents and snaps them to their anchor locations.
public AdjustTrays ( ) : void
Результат void
		public virtual void AdjustTrays()
		{
			for ( int i = 0; i < 9; i++ )   // resizes and hides trays if necessary
			{
				Real trayWidth = 0;
				Real trayHeight = mWidgetPadding;
				List<OverlayElement> labelsAndSeps = new List<OverlayElement>();

				if ( mWidgets[ i ] == null || mWidgets[ i ].Count == 0 )   // hide tray if empty
				{
					mTrays[ i ].Hide();
					continue;
				}
				else
					mTrays[ i ].Show();

				// arrange widgets and calculate final tray size and position
				for ( int j = 0; j < mWidgets[ i ].Count; j++ )
				{
					OverlayElement e = mWidgets[ i ][ j ].OverlayElement;

					if ( j != 0 )
						trayHeight += mWidgetSpacing;   // don't space first widget

					e.VerticalAlignment = VerticalAlignment.Top;
					e.Top = trayHeight;

					switch ( e.HorizontalAlignment )
					{
						case HorizontalAlignment.Left:
							e.Left = mWidgetPadding;
							break;
						case HorizontalAlignment.Right:
							e.Left = -( e.Width + mWidgetPadding );
							break;
						default:
							e.Left = ( -( e.Width / 2 ) );
							break;
					}

					// prevents some weird texture filtering problems (just some)
					e.SetPosition( (int)e.Left, (int)e.Top );
					e.SetDimensions( (int)e.Width, (int)e.Height );

					trayHeight += e.Height;

					Label l = mWidgets[ i ][ j ] as Label;
					if ( l != null && l.IsFitToTray )
					{
						labelsAndSeps.Add( e );
						continue;
					}
					Separator s = mWidgets[ i ][ j ] as Separator;
					if ( s != null && s.IsFitToTray )
					{
						labelsAndSeps.Add( e );
						continue;
					}

					if ( e.Width > trayWidth )
						trayWidth = e.Width;
				}

				// add paddings and resize trays
				mTrays[ i ].Width = trayWidth + 2 * mWidgetPadding;
				mTrays[ i ].Height = trayHeight + mWidgetPadding;

				for ( int k = 0; k < labelsAndSeps.Count; k++ )
				{
					labelsAndSeps[ k ].Width = (int)trayWidth;
					labelsAndSeps[ k ].Left = -(int)( trayWidth / 2 );
				}
			}

			for ( int i = 0; i < 9; i++ )    // snap trays to anchors
			{
				if ( i == (int)TrayLocation.TopLeft || i == (int)TrayLocation.Left || i == (int)TrayLocation.BottomLeft )
					mTrays[ i ].Left = mTrayPadding;
				if ( i == (int)TrayLocation.Top || i == (int)TrayLocation.Center || i == (int)TrayLocation.Bottom )
					mTrays[ i ].Left = -mTrays[ i ].Width / 2;
				if ( i == (int)TrayLocation.TopRight || i == (int)TrayLocation.Right || i == (int)TrayLocation.BottomRight )
					mTrays[ i ].Left = -( mTrays[ i ].Width + mTrayPadding );

				if ( i == (int)TrayLocation.TopLeft || i == (int)TrayLocation.Top || i == (int)TrayLocation.TopRight )
					mTrays[ i ].Top = mTrayPadding;
				if ( i == (int)TrayLocation.Left || i == (int)TrayLocation.Center || i == (int)TrayLocation.Right )
					mTrays[ i ].Top = -mTrays[ i ].Height / 2;
				if ( i == (int)TrayLocation.BottomLeft || i == (int)TrayLocation.Bottom || i == (int)TrayLocation.BottomRight )
					mTrays[ i ].Top = -mTrays[ i ].Height - mTrayPadding;

				// prevents some weird texture filtering problems (just some)
				mTrays[ i ].SetPosition( (int)mTrays[ i ].Left, (int)mTrays[ i ].Top );
				mTrays[ i ].SetDimensions( (int)mTrays[ i ].Width, (int)mTrays[ i ].Height );
			}
		}