BigTed.ProgressHUD.UpdatePosition C# (CSharp) Method

UpdatePosition() public method

public UpdatePosition ( bool textOnly = false ) : void
textOnly bool
return void
        void UpdatePosition(bool textOnly = false)
        {
            nfloat hudWidth = 100f;
            nfloat hudHeight = 100f;
            nfloat stringWidth = 0f;
            nfloat stringHeight = 0f;
            nfloat stringHeightBuffer = 20f;
            nfloat stringAndImageHeightBuffer = 80f;

            CGRect labelRect = new CGRect ();

            string @string = StringLabel.Text;

            // False if it's text-only
            bool imageUsed = (ImageView.Image != null) || (ImageView.Hidden);
            if (textOnly) {
                imageUsed = false;
            }

            if (imageUsed) {
                hudHeight = stringAndImageHeightBuffer + stringHeight;
            } else {
                hudHeight = (textOnly ? stringHeightBuffer : stringHeightBuffer + 40);
            }

            if (!string.IsNullOrEmpty (@string)) {
                int lineCount = Math.Min (10, @string.Split ('\n').Length + 1);

                if (IsIOS7OrNewer) {
                    var stringSize = new NSString (@string).GetBoundingRect (new CGSize (200, 30 * lineCount), NSStringDrawingOptions.UsesLineFragmentOrigin,
                                         new UIStringAttributes{ Font = StringLabel.Font },
                                         null);
                    stringWidth = stringSize.Width;
                    stringHeight = stringSize.Height;
                } else {
                    var stringSize = new NSString (@string).StringSize (StringLabel.Font, new CGSize (200, 30 * lineCount));
                    stringWidth = stringSize.Width;
                    stringHeight = stringSize.Height;
                }

                hudHeight += stringHeight;

                if (stringWidth > hudWidth)
                    hudWidth = (float)Math.Ceiling (stringWidth / 2) * 2;

                float labelRectY = imageUsed ? 66 : 9;

                if (hudHeight > 100) {
                    labelRect = new CGRect (12, labelRectY, hudWidth, stringHeight);
                    hudWidth += 24;
                } else {
                    hudWidth += 24;
                    labelRect = new CGRect (0, labelRectY, hudWidth, stringHeight);
                }
            }

            // Adjust for Cancel Button
            var cancelRect = new CGRect ();
            string @cancelCaption = _cancelHud == null ? null : CancelHudButton.Title (UIControlState.Normal);
            if (!string.IsNullOrEmpty (@cancelCaption)) {
                const int gap = 20;

                if (IsIOS7OrNewer) {
                    var stringSize = new NSString (@cancelCaption).GetBoundingRect (new CGSize (200, 300), NSStringDrawingOptions.UsesLineFragmentOrigin,
                                         new UIStringAttributes{ Font = StringLabel.Font },
                                         null);
                    stringWidth = stringSize.Width;
                    stringHeight = stringSize.Height;
                } else {
                    var stringSize = new NSString (@cancelCaption).StringSize (StringLabel.Font, new CGSize (200, 300));
                    stringWidth = stringSize.Width;
                    stringHeight = stringSize.Height;
                }

                if (stringWidth > hudWidth)
                    hudWidth = (float)Math.Ceiling (stringWidth / 2) * 2;

                // Adjust for label
                nfloat cancelRectY = 0f;
                if (labelRect.Height > 0) {
                    cancelRectY = labelRect.Y + labelRect.Height + (nfloat)gap;
                } else {
                    if (string.IsNullOrEmpty (@string)) {
                        cancelRectY = 76;
                    } else {
                        cancelRectY = (imageUsed ? 66 : 9);
                    }

                }

                if (hudHeight > 100) {
                    cancelRect = new CGRect (12, cancelRectY, hudWidth, stringHeight);
                    labelRect = new CGRect (12, labelRect.Y, hudWidth, labelRect.Height);
                    hudWidth += 24;
                } else {
                    hudWidth += 24;
                    cancelRect = new CGRect (0, cancelRectY, hudWidth, stringHeight);
                    labelRect = new CGRect (0, labelRect.Y, hudWidth, labelRect.Height);
                }
                CancelHudButton.Frame = cancelRect;
                hudHeight += (cancelRect.Height + (string.IsNullOrEmpty (@string) ? 10 : gap));
            }

            HudView.Bounds = new CGRect (0, 0, hudWidth, hudHeight);
            if (!string.IsNullOrEmpty (@string))
                ImageView.Center = new CGPoint (HudView.Bounds.Width / 2, 36);
            else
                ImageView.Center = new CGPoint (HudView.Bounds.Width / 2, HudView.Bounds.Height / 2);

            StringLabel.Hidden = false;
            StringLabel.Frame = labelRect;

            if (!textOnly) {
                if (!string.IsNullOrEmpty (@string) || !string.IsNullOrEmpty(@cancelCaption)) {
                    SpinnerView.Center = new CGPoint ((float)Math.Ceiling (HudView.Bounds.Width / 2.0f) + 0.5f, 40.5f);
                    if (_progress != -1) {
                        BackgroundRingLayer.Position = RingLayer.Position = new CGPoint (HudView.Bounds.Width / 2, 36f);
                    }
                } else {
                    SpinnerView.Center = new CGPoint ((float)Math.Ceiling (HudView.Bounds.Width / 2.0f) + 0.5f, (float)Math.Ceiling (HudView.Bounds.Height / 2.0f) + 0.5f);
                    if (_progress != -1) {
                        BackgroundRingLayer.Position = RingLayer.Position = new CGPoint (HudView.Bounds.Width / 2, HudView.Bounds.Height / 2.0f + 0.5f);
                    }
                }
            }
        }