public IAddinLocalizer CreateLocalizer (RuntimeAddin addin, NodeElement element) { string pkg = element.GetAttribute ("catalog"); if (pkg.Length == 0) pkg = addin.Id; string dir = element.GetAttribute ("location"); if (dir.Length == 0) dir = "locale"; dir = addin.GetFilePath (dir); domain = new GettextDomain (); domain.Init (pkg, dir); return this; }
static Xwt.Drawing.Image LoadStockIcon (RuntimeAddin addin, string stockId, string resource, string imageFile, string iconId, Gtk.IconSize iconSize, string animation, bool forceWildcard) { try { Gdk.Pixbuf pixbuf = null, pixbuf2x = null; AnimatedIcon animatedIcon = null; Func<Stream[]> imageLoader = null; if (!string.IsNullOrEmpty (resource) || !string.IsNullOrEmpty (imageFile)) { // using the stream directly produces a gdk warning. byte[] buffer; if (resource != null) { imageLoader = delegate { var stream = addin.GetResource (resource); var stream2x = addin.GetResource2x (resource); if (stream2x == null) return new [] { stream }; else return new [] { stream, stream2x }; }; } else { imageLoader = delegate { var file = addin.GetFilePath (imageFile); var stream = File.OpenRead (file); Stream stream2x = null; var file2x = Path.Combine (Path.GetDirectoryName (file), Path.GetFileNameWithoutExtension (file) + "@2x" + Path.GetExtension (file)); if (File.Exists (file2x)) stream2x = File.OpenRead (file2x); else { file2x = file + "@2x"; if (File.Exists (file2x)) stream2x = File.OpenRead (file2x); } if (stream2x == null) return new [] { stream }; else return new [] { stream, stream2x }; }; } var streams = imageLoader (); var st = streams[0]; var st2x = streams.Length > 1 ? streams[1] : null; using (st) { if (st == null || st.Length < 0) { LoggingService.LogError ("Did not find resource '{0}' in addin '{1}' for icon '{2}'", resource, addin.Id, stockId); return null; } buffer = new byte [st.Length]; st.Read (buffer, 0, (int)st.Length); } pixbuf = new Gdk.Pixbuf (buffer); using (st2x) { if (st2x != null && st2x.Length >= 0) { buffer = new byte [st2x.Length]; st2x.Read (buffer, 0, (int)st2x.Length); pixbuf2x = new Gdk.Pixbuf (buffer); } } } else if (!string.IsNullOrEmpty (iconId)) { var id = GetStockIdForImageSpec (addin, iconId, iconSize); pixbuf = GetPixbuf (id, iconSize); pixbuf2x = Get2xIconVariant (pixbuf); // This may be an animation, get it animationFactory.TryGetValue (id, out animatedIcon); } else if (!string.IsNullOrEmpty (animation)) { string id = GetStockIdForImageSpec (addin, "animation:" + animation, iconSize); pixbuf = GetPixbuf (id, iconSize); // This *should* be an animation animationFactory.TryGetValue (id, out animatedIcon); } Gtk.IconSize size = forceWildcard? Gtk.IconSize.Invalid : iconSize; if (pixbuf != null) AddToIconFactory (stockId, pixbuf, pixbuf2x, size); if (animatedIcon != null) AddToAnimatedIconFactory (stockId, animatedIcon); var img = Xwt.Toolkit.CurrentEngine.WrapImage (pixbuf); if (pixbuf2x != null) { var img2x = Xwt.Toolkit.CurrentEngine.WrapImage (pixbuf2x); img = Xwt.Drawing.Image.CreateMultiResolutionImage (new [] { img, img2x }); } if (imageLoader != null) img.SetStreamSource (imageLoader); return img; } catch (Exception ex) { LoggingService.LogError (string.Format ("Error loading icon '{0}'", stockId), ex); return null; } }
static Xwt.Drawing.Image LoadStockIcon (RuntimeAddin addin, string stockId, string resource, string imageFile, string iconId, Gtk.IconSize iconSize, string animation, bool forceWildcard) { try { AnimatedIcon animatedIcon = null; Func<Stream[]> imageLoader = null; Xwt.Drawing.Image img = null; if (!string.IsNullOrEmpty (resource) || !string.IsNullOrEmpty (imageFile)) { if (resource != null) { CustomImageLoader loader; if (!imageLoaders.TryGetValue (addin, out loader)) loader = imageLoaders [addin] = new CustomImageLoader (addin); img = Xwt.Drawing.Image.FromCustomLoader (loader, resource); } else { img = Xwt.Drawing.Image.FromFile (addin.GetFilePath (imageFile)); } } else if (!string.IsNullOrEmpty (iconId)) { var id = GetStockIdForImageSpec (addin, iconId, iconSize); img = GetIcon (id, iconSize); // This may be an animation, get it animationFactory.TryGetValue (id, out animatedIcon); } else if (!string.IsNullOrEmpty (animation)) { string id = GetStockIdForImageSpec (addin, "animation:" + animation, iconSize); img = GetIcon (id, iconSize); // This *should* be an animation animationFactory.TryGetValue (id, out animatedIcon); } if (animatedIcon != null) AddToAnimatedIconFactory (stockId, animatedIcon); if (imageLoader != null) img.SetStreamSource (imageLoader); return img; } catch (Exception ex) { LoggingService.LogError (string.Format ("Error loading icon '{0}'", stockId), ex); return null; } }