mirror of
https://github.com/cyanfish/naps2.git
synced 2024-10-03 19:07:17 +03:00
Mac: Use high-dpi profile icons
This commit is contained in:
parent
35ffe28c7e
commit
1ab56c99f1
@ -138,7 +138,7 @@ public class GtkListView<T> : IListView<T> where T : notnull
|
||||
}
|
||||
else
|
||||
{
|
||||
using var image = _behavior.GetImage(item, ImageSize);
|
||||
using var image = _behavior.GetImage(this, item);
|
||||
var imageWidget = image.ToGdk().ToScaledImage(_flowBox.ScaleFactor);
|
||||
// TODO: Is there a better way to prevent the image from expanding in both dimensions?
|
||||
var hframe = new Box(Orientation.Horizontal, 0);
|
||||
|
@ -29,7 +29,7 @@ public class ListViewDataSource<T> : NSCollectionViewDataSource where T : notnul
|
||||
{
|
||||
var i = (int) indexPath.Item;
|
||||
var item = Items[i];
|
||||
var image = _behavior.Checkboxes ? null : _behavior.GetImage(item, _listView.ImageSize);
|
||||
var image = _behavior.Checkboxes ? null : _behavior.GetImage(_listView, item);
|
||||
var label = _behavior.ShowLabels ? _behavior.GetLabel(item) : null;
|
||||
return new ListViewItem(
|
||||
image, label, _behavior.Checkboxes, _behavior.ColorScheme,
|
||||
|
@ -47,9 +47,12 @@ public class ListViewItem : NSCollectionViewItem
|
||||
}
|
||||
else if (_label != null)
|
||||
{
|
||||
var image = _itemImage.ToNS();
|
||||
// Resize high-dpi images so they render correctly on retina displays
|
||||
image.Size = new CGSize(image.Size.Width / 2, image.Size.Height / 2);
|
||||
_imageView = new NSImageView
|
||||
{
|
||||
Image = _itemImage.ToNS()
|
||||
Image = image
|
||||
};
|
||||
var stack = NSStackView.FromViews(new NSView[]
|
||||
{
|
||||
|
@ -81,7 +81,7 @@ public class MacIconProvider : IIconProvider
|
||||
}
|
||||
}
|
||||
}
|
||||
return _defaultIconProvider.GetIcon(name);
|
||||
return _defaultIconProvider.GetIcon(name, scale);
|
||||
}
|
||||
|
||||
public Icon? GetFormIcon(string name, float scale = 1f) => null;
|
||||
|
@ -285,7 +285,7 @@ public class MacListView<T> : NSCollectionViewDelegateFlowLayout, IListView<T> w
|
||||
var item = _dataSource.Items[(int) indexPath.Item];
|
||||
if (_behavior.ShowLabels)
|
||||
{
|
||||
using var image = _behavior.Checkboxes ? null : _behavior.GetImage(item, ImageSize);
|
||||
using var image = _behavior.Checkboxes ? null : _behavior.GetImage(this, item);
|
||||
using var listItem = new ListViewItem(
|
||||
image, _behavior.GetLabel(item), _behavior.Checkboxes, _behavior.ColorScheme, null, false, () => { });
|
||||
listItem.LoadView();
|
||||
@ -293,7 +293,7 @@ public class MacListView<T> : NSCollectionViewDelegateFlowLayout, IListView<T> w
|
||||
}
|
||||
else
|
||||
{
|
||||
var size = _behavior.GetImage(item, ImageSize).Size;
|
||||
var size = _behavior.GetImage(this, item).Size;
|
||||
var max = (double) Math.Max(size.Width, size.Height);
|
||||
return new CGSize(size.Width * ImageSize.Width / max, size.Height * ImageSize.Width / max);
|
||||
}
|
||||
|
@ -18,7 +18,7 @@ public abstract class WinFormsImageList<T> where T : notnull
|
||||
|
||||
private Image ItemToImage(T item)
|
||||
{
|
||||
return _behavior.GetImage(item, _listView.ImageSize).ToSD();
|
||||
return _behavior.GetImage(_listView, item).ToSD();
|
||||
}
|
||||
|
||||
public abstract void Clear();
|
||||
@ -95,7 +95,7 @@ public abstract class WinFormsImageList<T> where T : notnull
|
||||
|
||||
public override void Append(T item, ListViewItem listViewItem)
|
||||
{
|
||||
_images.Add(_behavior.GetImage(item, _listView.ImageSize).ToSD());
|
||||
_images.Add(_behavior.GetImage(_listView, item).ToSD());
|
||||
listViewItem.ImageIndex = _images.Count - 1;
|
||||
}
|
||||
|
||||
|
@ -107,8 +107,9 @@ public static class C
|
||||
}
|
||||
else if (iconName != null)
|
||||
{
|
||||
bool oversized = imagePosition == ButtonImagePosition.Above && flags.HasFlag(ButtonFlags.LargeIcon);
|
||||
EtoPlatform.Current.AttachDpiDependency(button,
|
||||
scale => button.Image = EtoPlatform.Current.IconProvider.GetIcon(iconName, scale));
|
||||
scale => button.Image = EtoPlatform.Current.IconProvider.GetIcon(iconName, scale, oversized));
|
||||
}
|
||||
button.ImagePosition = imagePosition;
|
||||
if (flags.HasFlag(ButtonFlags.LargeText))
|
||||
|
@ -98,11 +98,8 @@ public class ProfilesForm : EtoDialogBase
|
||||
profilesKsm.Assign("Mod+V", _pasteCommand);
|
||||
EtoPlatform.Current.HandleKeyDown(_listView.Control, profilesKsm.Perform);
|
||||
|
||||
EtoPlatform.Current.AttachDpiDependency(this, scale =>
|
||||
{
|
||||
_listView.ImageSize = Size.Round(new SizeF(48, 48) * scale);
|
||||
_listView.RegenerateImages();
|
||||
});
|
||||
EtoPlatform.Current.AttachDpiDependency(this, _ => _listView.RegenerateImages());
|
||||
_listView.ImageSize = new Size(48, 48);
|
||||
_listView.ItemClicked += ItemClicked;
|
||||
_listView.SelectionChanged += SelectionChanged;
|
||||
_listView.Drop += Drop;
|
||||
|
@ -58,11 +58,8 @@ public class ScannerSharingForm : EtoDialogBase
|
||||
// TODO: Enable
|
||||
// _shareAsService.Checked = _osServiceManager.IsRegistered;
|
||||
// _shareAsService.CheckedChanged += ShareAsServiceCheckedChanged;
|
||||
EtoPlatform.Current.AttachDpiDependency(this, scale =>
|
||||
{
|
||||
_listView.ImageSize = Size.Round(new SizeF(48, 48) * scale);
|
||||
_listView.RegenerateImages();
|
||||
});
|
||||
EtoPlatform.Current.AttachDpiDependency(this, _ => _listView.RegenerateImages());
|
||||
_listView.ImageSize = new Size(48, 48);
|
||||
_listView.SelectionChanged += SelectionChanged;
|
||||
|
||||
_addCommand.Enabled = true;
|
||||
|
@ -18,8 +18,8 @@ public class DeviceListViewBehavior : ListViewBehavior<ScanDevice>
|
||||
|
||||
public override string GetLabel(ScanDevice item) => item.Name;
|
||||
|
||||
public override Image GetImage(ScanDevice item, Size imageSize)
|
||||
public override Image GetImage(IListView<ScanDevice> listView, ScanDevice item)
|
||||
{
|
||||
return (_imageMap.Get(item)?.Clone() ?? Icons.device.ToEtoImage()).PadTo(imageSize);
|
||||
return (_imageMap.Get(item)?.Clone() ?? Icons.device.ToEtoImage()).PadTo(listView.ImageSize);
|
||||
}
|
||||
}
|
@ -25,9 +25,9 @@ public class ImageListViewBehavior : ListViewBehavior<UiImage>
|
||||
|
||||
public override bool ShowPageNumbers => _config.Get(c => c.ShowPageNumbers);
|
||||
|
||||
public override Image GetImage(UiImage item, Size imageSize)
|
||||
public override Image GetImage(IListView<UiImage> listView, UiImage item)
|
||||
{
|
||||
using var thumbnail = _thumbnailProvider.GetThumbnail(item, imageSize.Width);
|
||||
using var thumbnail = _thumbnailProvider.GetThumbnail(item, listView.ImageSize.Width);
|
||||
return thumbnail.ToEtoImage();
|
||||
}
|
||||
|
||||
|
@ -28,7 +28,7 @@ public abstract class ListViewBehavior<T> where T : notnull
|
||||
|
||||
public virtual string GetLabel(T item) => throw new NotSupportedException();
|
||||
|
||||
public virtual Image GetImage(T item, Size imageSize) => throw new NotSupportedException();
|
||||
public virtual Image GetImage(IListView<T> listView, T item) => throw new NotSupportedException();
|
||||
|
||||
public virtual bool AllowDragDrop => false;
|
||||
|
||||
|
@ -20,7 +20,7 @@ public class ProfileListViewBehavior : ListViewBehavior<ScanProfile>
|
||||
|
||||
public override string GetLabel(ScanProfile item) => item.DisplayName ?? "";
|
||||
|
||||
public override Image GetImage(ScanProfile item, Size imageSize)
|
||||
public override Image GetImage(IListView<ScanProfile> listView, ScanProfile item)
|
||||
{
|
||||
var iconName = (item.IsDefault, item.IsLocked) switch
|
||||
{
|
||||
@ -29,7 +29,7 @@ public class ProfileListViewBehavior : ListViewBehavior<ScanProfile>
|
||||
(false, true) => "scanner_lock_48",
|
||||
(false, false) => "scanner_48"
|
||||
};
|
||||
var scale = imageSize.Height / 48f;
|
||||
var scale = EtoPlatform.Current.GetScaleFactor(listView.Control.ParentWindow);
|
||||
return EtoPlatform.Current.IconProvider.GetIcon(iconName, scale)!;
|
||||
}
|
||||
|
||||
|
@ -14,9 +14,9 @@ public class SharedDevicesListViewBehavior : ListViewBehavior<SharedDevice>
|
||||
|
||||
public override string GetLabel(SharedDevice item) => item.Name;
|
||||
|
||||
public override Image GetImage(SharedDevice item, Size imageSize)
|
||||
public override Image GetImage(IListView<SharedDevice> listView, SharedDevice item)
|
||||
{
|
||||
var scale = imageSize.Height / 48f;
|
||||
var scale = EtoPlatform.Current.GetScaleFactor(listView.Control.ParentWindow);
|
||||
return EtoPlatform.Current.IconProvider.GetIcon("scanner_wireless_48", scale)!;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user