/// <summary> /// See interface docs. /// </summary> /// <param name="webSiteAddress"></param> /// <param name="isIPad"></param> /// <param name="pathParts"></param> /// <returns></returns> public IImage CreateIPhoneSplash(string webSiteAddress, bool isIPad, List <string> pathParts) { if (!isIPad && pathParts.Where(pp => pp.Equals("file-ipad", StringComparison.OrdinalIgnoreCase)).Any()) { isIPad = true; } IImage splashImage; float titleSize, addressSize, lineHeight; if (!isIPad) { splashImage = _ImageFile.LoadFromByteArray(Images.IPhoneSplash); titleSize = 24f; addressSize = 12f; lineHeight = 40f; } else { splashImage = _ImageFile.LoadFromByteArray(Images.IPadSplash); titleSize = 36f; addressSize = 14f; lineHeight = 50f; } var titleBounds = new RectangleF(5, (splashImage.Height - 5) - (lineHeight * 2f), splashImage.Width - 10f, lineHeight); var addressBounds = new RectangleF(5, titleBounds.Bottom + 5, splashImage.Width - 10f, lineHeight); const string title = "Virtual Radar Server"; return(_ImageFile.CloneAndDraw(splashImage, drawing => { using (var fontAndText = _FontFactory.GetFontForRectangle( drawing, _SplashFontFamily, _SplashFontStyle, titleSize, 6.0F, titleBounds.Width, titleBounds.Height, title, useCache: true )) { drawing.DrawText( fontAndText.Text, fontAndText.Font, _SplashFillBrush, null, titleBounds.Left + (titleBounds.Width / 2.0F), titleBounds.Top + lineHeight, HorizontalAlignment.Centre, preferSpeedOverQuality: false ); } using (var fontAndText = _FontFactory.GetFontForRectangle( drawing, _SplashFontFamily, _SplashFontStyle, addressSize, 6.0F, addressBounds.Width, addressBounds.Height, webSiteAddress, useCache: true )) { drawing.DrawText( fontAndText.Text, fontAndText.Font, _SplashFillBrush, null, addressBounds.Left + (addressBounds.Width / 2.0F), addressBounds.Top + lineHeight, HorizontalAlignment.Centre, preferSpeedOverQuality: false ); } })); }
/// <summary> /// Fills either of the stock image or temporary image parameters with the initial image to use (before any alterations are made). /// </summary> /// <param name="context"></param> /// <param name="imageRequest"></param> /// <param name="stockImage"></param> /// <param name="tempImage"></param> /// <returns></returns> private bool BuildInitialImage(OwinContext context, ImageRequest imageRequest, ref IImage stockImage, ref IImage tempImage) { var result = true; if (imageRequest.WebSiteFileName != null) { stockImage = _ImageServerConfiguration.ImageFileManager.LoadFromStandardPipeline(imageRequest.WebSiteFileName, !imageRequest.NoCache, context.Environment); } else { switch (imageRequest.ImageName) { case "AIRPLANE": stockImage = _ImageFile.LoadFromByteArray(Images.Marker_Airplane); break; case "AIRPLANESELECTED": stockImage = _ImageFile.LoadFromByteArray(Images.Marker_AirplaneSelected); break; case "BLANK": tempImage = _Graphics.CreateBlankImage(imageRequest.Width.GetValueOrDefault(), imageRequest.Height.GetValueOrDefault()); break; case "CHEVRONBLUECIRCLE": stockImage = _ImageFile.LoadFromByteArray(Images.ChevronBlueCircle); break; case "CHEVRONGREENCIRCLE": stockImage = _ImageFile.LoadFromByteArray(Images.ChevronGreenCircle); break; case "CHEVRONREDCIRCLE": stockImage = _ImageFile.LoadFromByteArray(Images.ChevronRedCircle); break; case "CLOSESLIDER": stockImage = _ImageFile.LoadFromByteArray(Images.CloseSlider); break; case "COMPASS": stockImage = _ImageFile.LoadFromByteArray(Images.Compass); break; case "CORNER-TL": stockImage = _ImageFile.LoadFromByteArray(Images.Corner_TopLeft); break; case "CORNER-TR": stockImage = _ImageFile.LoadFromByteArray(Images.Corner_TopRight); break; case "CORNER-BL": stockImage = _ImageFile.LoadFromByteArray(Images.Corner_BottomLeft); break; case "CORNER-BR": stockImage = _ImageFile.LoadFromByteArray(Images.Corner_BottomRight); break; case "CROSSHAIR": stockImage = _ImageFile.LoadFromByteArray(Images.Crosshair); break; case "GOTOCURRENTLOCATION": stockImage = _ImageFile.LoadFromByteArray(Images.GotoCurrentLocation); break; case "GROUNDVEHICLE": stockImage = _ImageFile.LoadFromByteArray(Images.FollowMe); break; case "GROUNDVEHICLESELECTED": stockImage = _ImageFile.LoadFromByteArray(Images.FollowMe); break; case "HEADING": stockImage = _ImageFile.LoadFromByteArray(Images.SmallPlaneNorth); break; case "HIDELIST": stockImage = _ImageFile.LoadFromByteArray(Images.HideList); break; case "IPHONEBACKBUTTON": stockImage = _ImageFile.LoadFromByteArray(Images.IPhoneBackButton); break; case "IPHONEBLUEBUTTON": stockImage = _ImageFile.LoadFromByteArray(Images.IPhoneBlueButton); break; case "IPHONECHEVRON": stockImage = _ImageFile.LoadFromByteArray(Images.IPhoneChevron); break; case "IPHONEGRAYBUTTON": stockImage = _ImageFile.LoadFromByteArray(Images.IPhoneGrayButton); break; case "IPHONEICON": stockImage = _ImageFile.LoadFromByteArray(Images.IPhoneIcon); break; case "IPHONELISTGROUP": stockImage = _ImageFile.LoadFromByteArray(Images.IPhoneListGroup); break; case "IPHONEONOFF": stockImage = _ImageFile.LoadFromByteArray(Images.IPhoneOnOff); break; case "IPHONEPINSTRIPES": stockImage = _ImageFile.LoadFromByteArray(Images.IPhonePinstripes); break; case "IPHONESELECTEDTICK": stockImage = _ImageFile.LoadFromByteArray(Images.IPhoneSelectedTick); break; case "IPHONESELECTION": stockImage = _ImageFile.LoadFromByteArray(Images.IPhoneSelection); break; case "IPHONESPLASH": var webSiteAddress = new StringBuilder(); webSiteAddress.Append(String.IsNullOrEmpty(context.RequestScheme) ? "http" : context.RequestScheme); webSiteAddress.Append("://"); webSiteAddress.Append(String.IsNullOrEmpty(context.RequestHost) ? "127.0.0.1" : context.RequestHost); webSiteAddress.Append(context.RequestPathBase); tempImage = _Graphics.CreateIPhoneSplash( webSiteAddress.ToString(), context.RequestHeadersDictionary.UserAgentValue.IsTabletUserAgentString, new List <string>(context.RequestPathParts) ); break; case "IPHONETOOLBAR": stockImage = _ImageFile.LoadFromByteArray(Images.IPhoneToolbar); break; case "IPHONETOOLBUTTON": stockImage = _ImageFile.LoadFromByteArray(Images.IPhoneToolButton); break; case "IPHONEWHITEBUTTON": stockImage = _ImageFile.LoadFromByteArray(Images.IPhoneWhiteButton); break; case "MINUS": stockImage = _ImageFile.LoadFromByteArray(Images.Collapse); break; case "MOVINGMAPCHECKED": stockImage = _ImageFile.LoadFromByteArray(Images.MovingMapChecked); break; case "MOVINGMAPUNCHECKED": stockImage = _ImageFile.LoadFromByteArray(Images.MovingMapUnchecked); break; case "OPENSLIDER": stockImage = _ImageFile.LoadFromByteArray(Images.OpenSlider); break; case "OPFLAG": tempImage = CreateLogoImage(imageRequest.File, _ImageServerConfiguration.OperatorFolder); break; case "PICTURE": tempImage = CreateAirplanePicture( imageRequest.File, imageRequest.Size, context.IsInternet, imageRequest.Width, imageRequest.Height ); imageRequest.Width = imageRequest.Height = null; break; case "PLUS": stockImage = _ImageFile.LoadFromByteArray(Images.Expand); break; case "ROWHEADER": stockImage = _ImageFile.LoadFromByteArray(Images.RowHeader); break; case "ROWHEADERSELECTED": stockImage = _ImageFile.LoadFromByteArray(Images.RowHeaderSelected); break; case "SHOWLIST": stockImage = _ImageFile.LoadFromByteArray(Images.ShowList); break; case "TESTSQUARE": stockImage = _ImageFile.LoadFromByteArray(Images.TestSquare); break; case "TOWER": stockImage = _ImageFile.LoadFromByteArray(Images.Tower); break; case "TOWERSELECTED": stockImage = _ImageFile.LoadFromByteArray(Images.Tower); break; case "TRANSPARENT-25": stockImage = _ImageFile.LoadFromByteArray(Images.Transparent_25); break; case "TRANSPARENT-50": stockImage = _ImageFile.LoadFromByteArray(Images.Transparent_50); break; case "TYPE": tempImage = CreateLogoImage(imageRequest.File, _ImageServerConfiguration.SilhouettesFolder); break; case "VOLUME0": stockImage = _ImageFile.LoadFromByteArray(Images.Volume0); break; case "VOLUME25": stockImage = _ImageFile.LoadFromByteArray(Images.Volume25); break; case "VOLUME50": stockImage = _ImageFile.LoadFromByteArray(Images.Volume50); break; case "VOLUME75": stockImage = _ImageFile.LoadFromByteArray(Images.Volume75); break; case "VOLUME100": stockImage = _ImageFile.LoadFromByteArray(Images.Volume100); break; case "VOLUMEDOWN": stockImage = _ImageFile.LoadFromByteArray(Images.VolumeDown); break; case "VOLUMEMUTE": stockImage = _ImageFile.LoadFromByteArray(Images.VolumeMute); break; case "VOLUMEUP": stockImage = _ImageFile.LoadFromByteArray(Images.VolumeUp); break; case "YOUAREHERE": stockImage = _ImageFile.LoadFromByteArray(Images.BlueBall); break; default: result = false; break; } } if (result) { result = stockImage != null || tempImage != null; } return(result); }