Skip to content

Commit

Permalink
Mac: Use high-dpi profile icons
Browse files Browse the repository at this point in the history
  • Loading branch information
cyanfish committed Sep 6, 2024
1 parent 35ffe28 commit 1ab56c9
Show file tree
Hide file tree
Showing 14 changed files with 26 additions and 28 deletions.
2 changes: 1 addition & 1 deletion NAPS2.Lib.Gtk/EtoForms/Gtk/GtkListView.cs
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,7 @@ private Widget GetItemWidget(T item)
}
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);
Expand Down
2 changes: 1 addition & 1 deletion NAPS2.Lib.Mac/EtoForms/Mac/ListViewDataSource.cs
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ public override NSCollectionViewItem GetItem(NSCollectionView collectionView, NS
{
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,
Expand Down
5 changes: 4 additions & 1 deletion NAPS2.Lib.Mac/EtoForms/Mac/ListViewItem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -47,9 +47,12 @@ public override void LoadView()
}
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[]
{
Expand Down
2 changes: 1 addition & 1 deletion NAPS2.Lib.Mac/EtoForms/Mac/MacIconProvider.cs
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ public MacIconProvider(DefaultIconProvider defaultIconProvider)
}
}
}
return _defaultIconProvider.GetIcon(name);
return _defaultIconProvider.GetIcon(name, scale);
}

public Icon? GetFormIcon(string name, float scale = 1f) => null;
Expand Down
4 changes: 2 additions & 2 deletions NAPS2.Lib.Mac/EtoForms/Mac/MacListView.cs
Original file line number Diff line number Diff line change
Expand Up @@ -285,15 +285,15 @@ public override CGSize SizeForItem(NSCollectionView collectionView, NSCollection
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();
return listItem.View.FittingSize;
}
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);
}
Expand Down
4 changes: 2 additions & 2 deletions NAPS2.Lib.WinForms/EtoForms/WinForms/WinFormsImageList.cs
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ private WinFormsImageList(WinFormsListView<T> listView, ListViewBehavior<T> beha

private Image ItemToImage(T item)
{
return _behavior.GetImage(item, _listView.ImageSize).ToSD();
return _behavior.GetImage(_listView, item).ToSD();
}

public abstract void Clear();
Expand Down Expand Up @@ -95,7 +95,7 @@ public override void Clear()

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;
}

Expand Down
3 changes: 2 additions & 1 deletion NAPS2.Lib/EtoForms/Layout/C.cs
Original file line number Diff line number Diff line change
Expand Up @@ -107,8 +107,9 @@ public static Button Button(ActionCommand command, string? iconName, ButtonImage
}
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))
Expand Down
7 changes: 2 additions & 5 deletions NAPS2.Lib/EtoForms/Ui/ProfilesForm.cs
Original file line number Diff line number Diff line change
Expand Up @@ -98,11 +98,8 @@ public ProfilesForm(Naps2Config config, IScanPerformer scanPerformer, ProfileNam
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;
Expand Down
7 changes: 2 additions & 5 deletions NAPS2.Lib/EtoForms/Ui/ScannerSharingForm.cs
Original file line number Diff line number Diff line change
Expand Up @@ -58,11 +58,8 @@ public ScannerSharingForm(Naps2Config config, SharedDevicesListViewBehavior list
// 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;
Expand Down
4 changes: 2 additions & 2 deletions NAPS2.Lib/EtoForms/Widgets/DeviceListViewBehavior.cs
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@ public DeviceListViewBehavior(ColorScheme colorScheme) : base(colorScheme)

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);
}
}
4 changes: 2 additions & 2 deletions NAPS2.Lib/EtoForms/Widgets/ImageListViewBehavior.cs
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,9 @@ public ImageListViewBehavior(UiThumbnailProvider thumbnailProvider,

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();
}

Expand Down
2 changes: 1 addition & 1 deletion NAPS2.Lib/EtoForms/Widgets/ListViewBehavior.cs
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ protected ListViewBehavior(ColorScheme colorScheme)

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;

Expand Down
4 changes: 2 additions & 2 deletions NAPS2.Lib/EtoForms/Widgets/ProfileListViewBehavior.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ public ProfileListViewBehavior(ColorScheme colorScheme) : base(colorScheme)

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
{
Expand All @@ -29,7 +29,7 @@ public override Image GetImage(ScanProfile item, Size imageSize)
(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)!;
}

Expand Down
4 changes: 2 additions & 2 deletions NAPS2.Lib/EtoForms/Widgets/SharedDevicesListViewBehavior.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,9 @@ public SharedDevicesListViewBehavior(ColorScheme colorScheme) : base(colorScheme

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)!;
}
}

0 comments on commit 1ab56c9

Please sign in to comment.