[mac] SparkleSetup: support @2x images

Since the plugin images come from a manifest
with full paths, to support @2x images we have
to do a little more work by rebuilding the image
path based on NSWindow.BackingScaleFactor.

Theoretically this is forward compatible with
future scalings (e.g. @3x, @9000x).
This commit is contained in:
Aaron Bockover 2012-12-10 11:42:04 -05:00
parent 3bb2cc03f7
commit 70a6cf9062

View file

@ -253,7 +253,7 @@ namespace SparkleShare {
TableView.AddColumn (IconColumn); TableView.AddColumn (IconColumn);
TableView.AddColumn (DescriptionColumn); TableView.AddColumn (DescriptionColumn);
DataSource = new SparkleDataSource (Controller.Plugins); DataSource = new SparkleDataSource (BackingScaleFactor, Controller.Plugins);
TableView.DataSource = DataSource; TableView.DataSource = DataSource;
TableView.ReloadData (); TableView.ReloadData ();
@ -725,13 +725,16 @@ namespace SparkleShare {
public List<object> Items; public List<object> Items;
public NSAttributedString [] Cells, SelectedCells; public NSAttributedString [] Cells, SelectedCells;
int backingScaleFactor;
public SparkleDataSource (List<SparklePlugin> plugins) public SparkleDataSource (float backingScaleFactor, List<SparklePlugin> plugins)
{ {
Items = new List <object> (); Items = new List <object> ();
Cells = new NSAttributedString [plugins.Count]; Cells = new NSAttributedString [plugins.Count];
SelectedCells = new NSAttributedString [plugins.Count]; SelectedCells = new NSAttributedString [plugins.Count];
this.backingScaleFactor = (int)backingScaleFactor;
int i = 0; int i = 0;
foreach (SparklePlugin plugin in plugins) { foreach (SparklePlugin plugin in plugins) {
Items.Add (plugin); Items.Add (plugin);
@ -815,7 +818,22 @@ namespace SparkleShare {
} }
} else { } else {
return new NSImage ((Items [row_index] as SparklePlugin).ImagePath) { var plugin = (SparklePlugin)Items [row_index];
var path = plugin.ImagePath;
if (backingScaleFactor >= 2) {
var hi_path = String.Format ("{0}@{1}x{2}",
Path.Combine (Path.GetDirectoryName (path), Path.GetFileNameWithoutExtension (path)),
backingScaleFactor,
Path.GetExtension (path)
);
if (File.Exists (hi_path)) {
path = hi_path;
}
}
return new NSImage (path) {
Size = new SizeF (24, 24) Size = new SizeF (24, 24)
}; };
} }