Весеннее настроение дало повод перерисовать все иконки в моем личном финансовом менеджере
Money Tracker и попутно исправить несколько небольших ошибок.
Рисовал все в бесплатном векторном редакторе LibreOffice Draw. Пока делал иконки, много раз вспомнил CorelDraw, и как все было удобно в нем. LibreOffice Draw это как "Москвич" среди автомобилей - простой, крепкий, вроде едет, а удобства - в "Мерседесе" :).
Но не это главное. Главное, как я все в итоге автоматизировал.
На каждой странице в моем графическом файле ровно одна векторная иконка.
Макрос, находящийся в том же файле, обрабатывает каждую страницу и сохраняет ее в отдельную растровую картинку и присваивает ей такое же имя, какое присвоено странице. Таким образом, через секунду после запуска макроса я получаю набор иконок заданного размера. Остается только закинуть их в ресурсы проекта Money Tracker и пересобрать приложение.
Вот мой исходник иконок:
Что касается ошибок. Краш приложения происходил на Android 6 при попытке бэкапа на карту памяти, т. к. Android 6 и выше мало разрешений при установке, ему нужно дополнительно дать разрешения и после установки. Это разумно, поскольку позволяет как дать разрешения, так и в любую секунду отозвать их. Мне нравится.
От краша я избавился, написав обработчик ситуации. Теперь Money Tracker на старших Android сделает запрос на доступ к карте памяти при необходимости. Если разрешение ему не дадут, функция бэкапа на карту памяти заблокируется, и все будут довольны.
Вторая ошибка это даже не ошибка. На экране, где вводят курс валюты (если делать это вручную), поле масштабировалось как попало, и могло "поехать" на некоторых разрешениях и при повороте экрана. Теперь масштабируется хорошо.
Третья ошибка - черный цвет текста на экране плановых проводок. Вообще, в используемой мной теме оформления обычный текст слегка серый, и смотрится лучше. Теперь и на экране с плановыми проводками такой же серый.
Текст макроса на LibreOffice Basic, если интересно (очень трудно на нем писать, почти нет документации):
Sub ExportPNG
REM Задайте размер иконки
size = 128
sLocation = StarDesktop.CurrentComponent.getLocation()
If (Not GlobalScope.BasicLibraries.isLibraryLoaded("Tools")) Then
GlobalScope.BasicLibraries.LoadLibrary("Tools")
End If
sDirectory = Tools.Strings.DirectoryNameoutofPath(sLocation, "/") + "/"
Dim Page As Object
dim args2(6) as new com.sun.star.beans.PropertyValue
args2(0).Name = "PixelWidth" '
args2(0).Value = size
args2(1).Name = "PixelHeight"
args2(1).Value = size
args2(2).Name = "Compression"
args2(2).Value = 9
args2(3).Name = "Interlaced"
args2(3).Value = 0
logicalSize = int(2540 * size / 96)
args2(4).Name ="LogicalWidth"
args2(4).Value = logicalSize
args2(5).Name ="LogicalHeight"
args2(5).Value = logicalSize
args2(6).Name ="Translucent"
args2(6).Value = true
dim args1(3) as new com.sun.star.beans.PropertyValue
args1(0).Name = "URL"
args1(1).Name = "MediaType"
args1(1).Value = "image/png"
args1(2).Name = "FilterData"
args1(2).Value = args2()
args1(3).Name = "SelectionOnly"
args1(3).Value = false
xExporter = createUnoService("com.sun.star.drawing.GraphicExportFilter")
For i = 1 To StarDesktop.CurrentComponent.drawPages.Count()
Page = StarDesktop.CurrentComponent.drawPages(i - 1)
args1(0).Value = sDirectory + size + "/" + Page.Name + ".png"
xExporter.setSourceDocument(Page)
xExporter.filter(args1())
Next
MsgBox "Экспорт успешно завершен"
End Sub