Example #1
0
 public void SetFileSource(string file, ImageTagSet tags)
 {
     sources = new [] {
         new NativeImageSource {
             Source = file,
             Tags   = tags
         }
     };
 }
Example #2
0
        public override Image WrapImage(string fileName, ImageTagSet tags, object img, Size reqSize)
        {
            var res = new Image(img, toolkit)
            {
                requestedSize = reqSize
            };

            res.NativeRef.SetCustomLoaderSource(loader, fileName, tags);
            return(res);
        }
Example #3
0
 public void SetResourceSource(Assembly asm, string name, ImageTagSet tags)
 {
     sources = new [] {
         new NativeImageSource {
             Source           = name,
             ResourceAssembly = asm,
             Tags             = tags
         }
     };
 }
Example #4
0
 public void SetCustomLoaderSource(IImageLoader imageLoader, string fileName, ImageTagSet tags)
 {
     sources = new [] {
         new NativeImageSource {
             CustomImageLoader = imageLoader,
             Source            = fileName,
             Tags = tags
         }
     };
 }
Example #5
0
        internal static Image FromCustomLoader(IImageLoader loader, string fileName, ImageTagSet tags)
        {
            var toolkit = Toolkit.CurrentEngine;

            if (toolkit == null)
            {
                throw new ToolkitNotInitializedException();
            }

            var ld = new StreamImageLoader(toolkit, loader);

            return(LoadImage(ld, fileName, tags));
        }
Example #6
0
        internal static Image FromFile(string file, ImageTagSet tagFilter)
        {
            var toolkit = Toolkit.CurrentEngine;

            if (toolkit == null)
            {
                throw new ToolkitNotInitializedException();
            }

            var loader = new FileImageLoader(toolkit);

            return(LoadImage(loader, file, tagFilter));
        }
Example #7
0
        internal static Image FromResource(Assembly assembly, string resource, ImageTagSet tagFilter)
        {
            if (assembly == null)
            {
                throw new ArgumentNullException("assembly");
            }
            if (resource == null)
            {
                throw new ArgumentNullException("resource");
            }

            var toolkit = Toolkit.CurrentEngine;

            if (toolkit == null)
            {
                throw new ToolkitNotInitializedException();
            }

            var loader = new ResourceImageLoader(toolkit, assembly);

            return(LoadImage(loader, resource, tagFilter));
        }
Example #8
0
 public void SetCustomLoaderSource(IImageLoader imageLoader, string fileName, ImageTagSet tags)
 {
     sources = new [] {
         new NativeImageSource {
             CustomImageLoader = imageLoader,
             Source = fileName,
             Tags = tags
         }
     };
 }
Example #9
0
 public override Image WrapImage(string fileName, ImageTagSet tags, object img, Size reqSize)
 {
     var res = new Image (img, toolkit) {
         requestedSize = reqSize
     };
     var ld = loader;
     res.NativeRef.SetCustomLoaderSource (loader, fileName, tags);
     return res;
 }
Example #10
0
 public void SetResourceSource(Assembly asm, string name, ImageTagSet tags)
 {
     sources = new [] {
         new NativeImageSource {
             Source = name,
             ResourceAssembly = asm,
             Tags = tags
         }
     };
 }
Example #11
0
        static bool ParseImageHints(string baseName, string fileName, string ext, out int scale, out ImageTagSet tags)
        {
            scale = 1;
            tags  = ImageTagSet.Empty;

            if (!fileName.StartsWith(baseName, StringComparison.Ordinal) || fileName.Length <= baseName.Length + 1 || (fileName [baseName.Length] != '@' && fileName [baseName.Length] != '~'))
            {
                return(false);
            }

            fileName = fileName.Substring(0, fileName.Length - ext.Length);

            int i = baseName.Length;

            if (fileName [i] == '~')
            {
                // For example: foo~dark@2x
                i++;
                var i2 = fileName.IndexOf('@', i);
                if (i2 != -1)
                {
                    int i3 = fileName.IndexOf('x', i2 + 2);
                    if (i3 == -1 || !int.TryParse(fileName.Substring(i2 + 1, i3 - i2 - 1), out scale))
                    {
                        return(false);
                    }
                }
                else
                {
                    i2 = fileName.Length;
                }
                tags = new ImageTagSet(fileName.Substring(i, i2 - i));
                return(true);
            }
            else
            {
                // For example: foo@2x~dark
                i++;
                var i2 = fileName.IndexOf('~', i + 1);
                if (i2 == -1)
                {
                    i2 = fileName.Length;
                }

                i2--;
                if (i2 < 0 || fileName [i2] != 'x')
                {
                    return(false);
                }

                var s = fileName.Substring(i, i2 - i);
                if (!int.TryParse(s, out scale))
                {
                    tags = null;
                    return(false);
                }
                if (i2 + 2 < fileName.Length)
                {
                    tags = new ImageTagSet(fileName.Substring(i2 + 2));
                }
                return(true);
            }
        }
Example #12
0
        internal static Image FromCustomLoader(IImageLoader loader, string fileName, ImageTagSet tags)
        {
            var toolkit = Toolkit.CurrentEngine;
            if (toolkit == null)
                throw new ToolkitNotInitializedException ();

            var ld = new StreamImageLoader (toolkit, loader);
            return LoadImage (ld, fileName, tags);
        }
Example #13
0
        static Image LoadImage(ImageLoader loader, string fileName, ImageTagSet tagFilter)
        {
            var toolkit = Toolkit.CurrentEngine;
            if (toolkit == null)
                throw new ToolkitNotInitializedException ();

            var img = loader.LoadImage (fileName);
            var reqSize = toolkit.ImageBackendHandler.GetSize (img);

            var ext = GetExtension (fileName);
            var name = fileName.Substring (0, fileName.Length - ext.Length);
            var altImages = new List<Tuple<string,ImageTagSet,bool,object>> ();
            var tags = Context.RegisteredStyles;

            foreach (var r in loader.GetAlternativeFiles (fileName, name, ext)) {
                int scale;
                ImageTagSet fileTags;
                if (ParseImageHints (name, r, ext, out scale, out fileTags) && (tagFilter == null || tagFilter.Equals (fileTags))) {
                    var rim = loader.LoadImage (r);
                    if (rim != null)
                        altImages.Add (new Tuple<string, ImageTagSet, bool, object> (r, fileTags, scale > 1, rim));
                }
            }

            if (altImages.Count > 0) {
                altImages.Insert (0, new Tuple<string, ImageTagSet, bool, object> (fileName, ImageTagSet.Empty, false, img));
                var list = new List<Tuple<Image,string[]>> ();
                foreach (var imageGroup in altImages.GroupBy (t => t.Item2)) {
                    Image altImg;
                    if (ext == ".9.png")
                        altImg = CreateComposedNinePatch (toolkit, imageGroup);
                    else {
                        var ib = toolkit.ImageBackendHandler.CreateMultiResolutionImage (imageGroup.Select (i => i.Item4));
                        altImg = loader.WrapImage (fileName, imageGroup.Key, ib, reqSize);
                    }
                    list.Add (new Tuple<Image,string[]> (altImg, imageGroup.Key.AsArray));
                }
                if (list.Count == 1)
                    return list [0].Item1;
                else {
                    return new ThemedImage (list, reqSize);
                }
            } else {
                var res = loader.WrapImage (fileName, ImageTagSet.Empty, img, reqSize);
                if (ext == ".9.png")
                    res = new NinePatchImage (res.ToBitmap ());
                return res;
            }
        }
Example #14
0
        static Image LoadImage(ImageLoader loader, string fileName, ImageTagSet tagFilter)
        {
            var toolkit = Toolkit.CurrentEngine;

            if (toolkit == null)
            {
                throw new ToolkitNotInitializedException();
            }

            var img     = loader.LoadImage(fileName);
            var reqSize = toolkit.ImageBackendHandler.GetSize(img);

            var ext       = GetExtension(fileName);
            var name      = fileName.Substring(0, fileName.Length - ext.Length);
            var altImages = new List <Tuple <string, ImageTagSet, bool, object> > ();
            var tags      = Context.RegisteredStyles;

            foreach (var r in loader.GetAlternativeFiles(fileName, name, ext))
            {
                int         scale;
                ImageTagSet fileTags;
                if (ParseImageHints(name, r, ext, out scale, out fileTags) && (tagFilter == null || tagFilter.Equals(fileTags)))
                {
                    var rim = loader.LoadImage(r);
                    if (rim != null)
                    {
                        altImages.Add(new Tuple <string, ImageTagSet, bool, object> (r, fileTags, scale > 1, rim));
                    }
                }
            }

            if (altImages.Count > 0)
            {
                altImages.Insert(0, new Tuple <string, ImageTagSet, bool, object> (fileName, ImageTagSet.Empty, false, img));
                var list = new List <Tuple <Image, string[]> > ();
                foreach (var imageGroup in altImages.GroupBy(t => t.Item2))
                {
                    Image altImg;
                    if (ext == ".9.png")
                    {
                        altImg = CreateComposedNinePatch(toolkit, imageGroup);
                    }
                    else
                    {
                        var ib = toolkit.ImageBackendHandler.CreateMultiResolutionImage(imageGroup.Select(i => i.Item4));
                        altImg = loader.WrapImage(fileName, imageGroup.Key, ib, reqSize);
                    }
                    list.Add(new Tuple <Image, string[]> (altImg, imageGroup.Key.AsArray));
                }
                if (list.Count == 1)
                {
                    return(list [0].Item1);
                }
                else
                {
                    return(new ThemedImage(list, reqSize));
                }
            }
            else
            {
                var res = loader.WrapImage(fileName, ImageTagSet.Empty, img, reqSize);
                if (ext == ".9.png")
                {
                    res = new NinePatchImage(res.ToBitmap());
                }
                return(res);
            }
        }
Example #15
0
 public abstract Image WrapImage(string fileName, ImageTagSet tags, object img, Size reqSize);
Example #16
0
        static bool ParseImageHints(string baseName, string fileName, string ext, out int scale, out ImageTagSet tags)
        {
            scale = 1;
            tags = ImageTagSet.Empty;

            if (!fileName.StartsWith (baseName, StringComparison.Ordinal) || fileName.Length <= baseName.Length + 1 || (fileName [baseName.Length] != '@' && fileName [baseName.Length] != '~'))
                return false;

            fileName = fileName.Substring (0, fileName.Length - ext.Length);

            int i = baseName.Length;
            if (fileName [i] == '~') {
                // For example: foo~dark@2x
                i++;
                var i2 = fileName.IndexOf ('@', i);
                if (i2 != -1) {
                    int i3 = fileName.IndexOf ('x', i2 + 2);
                    if (i3 == -1 || !int.TryParse (fileName.Substring (i2 + 1, i3 - i2 - 1), out scale))
                        return false;
                } else
                    i2 = fileName.Length;
                tags = new ImageTagSet (fileName.Substring (i, i2 - i));
                return true;
            }
            else {
                // For example: foo@2x~dark
                i++;
                var i2 = fileName.IndexOf ('~', i + 1);
                if (i2 == -1)
                    i2 = fileName.Length;

                i2--;
                if (i2 < 0 || fileName [i2] != 'x')
                    return false;

                var s = fileName.Substring (i, i2 - i);
                if (!int.TryParse (s, out scale)) {
                    tags = null;
                    return false;
                }
                if (i2 + 2 < fileName.Length)
                    tags = new ImageTagSet (fileName.Substring (i2 + 2));
                return true;
            }
        }
Example #17
0
 public void SetFileSource(string file, ImageTagSet tags)
 {
     sources = new [] {
         new NativeImageSource {
             Source = file,
             Tags = tags
         }
     };
 }
Example #18
0
 public abstract Image WrapImage(string fileName, ImageTagSet tags, object img, Size reqSize);
Example #19
0
 public override Image WrapImage(string fileName, ImageTagSet tags, object img, Size reqSize)
 {
     var res = new Image (img, toolkit) {
         requestedSize = reqSize
     };
     res.NativeRef.SetFileSource (fileName, tags);
     return res;
 }