Предыдущие версии
Название | Размер | Обновлено | Версия игры | Загрузок | |
r23-90100 release | 4.70 KB | Jun 29, 2021 | 9.1.0 | 0 | ![]() |
r15-70000 release | 4.66 KB | Jul 19, 2016 | 7.0.3 | 26,868 | ![]() |
r12 release | 4.64 KB | Oct 14, 2014 | 6.0.2 | 17,662 | ![]() |
r11-50200 release | 4.65 KB | Mar 10, 2013 | 5.2.0 | 20,921 | ![]() |
r10-50001 release | 4.64 KB | Sep 11, 2012 | 5.0.4 | 16,597 | ![]() |
r9 release | 4.67 KB | May 26, 2012 | 4.3.4 | 13,411 | ![]() |
r13-60100 beta | 4.69 KB | Feb 24, 2015 | 6.1.0 | 2,820 | ![]() |
r6-40100 beta | 4.70 KB | May 5, 2011 | 4.1.0 | 70,074 | ![]() |
r3 beta | 4.61 KB | Jan 20, 2009 | 3.0.3 | 86,115 | ![]() |
r22-alpha alpha | 4.70 KB | Jun 29, 2021 | 9.1.0 | 0 | ![]() |
r19-alpha alpha | 4.62 KB | Oct 13, 2020 | 9.0.1 | 395 | ![]() |
r18-alpha alpha | 4.60 KB | Sep 7, 2019 | 7.3.5 | 511 | ![]() |
r17-alpha alpha | 4.23 KB | Aug 29, 2017 | 7.3.0 | 1,242 | ![]() |
r15 alpha | 4.61 KB | Jul 19, 2016 | 7.0.3 | 83 | ![]() |
r13 alpha | 4.64 KB | Feb 24, 2015 | 6.1.0 | 58 | ![]() |
r8 alpha | 4.63 KB | May 26, 2012 | 4.1.0 | 79 | ![]() |
r6 alpha | 4.65 KB | May 5, 2011 | 4.1.0 | 138 | ![]() |
r5 alpha | 4.68 KB | Dec 15, 2009 | 3.3.0 | 3,087 | ![]() |
r4 alpha | 4.62 KB | Sep 1, 2009 | 3.2.0 | 223 | ![]() |
r2 alpha | 4.52 KB | Nov 13, 2008 | 3.0.3 | 118 | ![]() |
Скриншоты
Описание
WindowLib-это небольшая библиотека, которая заботится о стандартном «оконном» поведении, используемом в основных фреймах многих дополнений, и пытается сделать это более разумным способом, чем нашел бы время для этого средний автор дополнений.
- Сохранение и восстановление позиций: WindowLib выберет точку подключения в зависимости от того, в каком секторе экрана находится рамка: вверху слева? внизу справа? в центре?
- Перетаскивание окна ручки
- Масштабирование колесика мыши
- Только мышь-включение окна при удержании клавиши Alt
Зачем беспокоиться?
Потому что пользователи меняют масштаб своего пользовательского интерфейса. Потому что пользователям нравится копировать настройки своих дополнений с одного компьютера на другой (например, настольный компьютер или ноутбук?).
Если вы абсолютно не хотите использовать LibWindow, пожалуйста, используйте его стратегию в своем коде:
- Сохраните позицию в шкале родителя, а не в собственной шкале эффективности кадра. Это предотвращает перекрытия и пробелы при изменении масштаба.
- Вычислите ближайший угол экрана и сохраните его относительно ближайшего угла вашего кадра, т. е. снизу вверх, сверху вниз. Это предотвращает исчезновение вещей с экрана.
Пример кода
lwin = LibStub("LibWindow-1.1") myframe = Создатьфрейм ("Фрейм") lwin.RegisterConfig(мойфрейм , self.db.профиль) lwin.Восстановление(myframe) -- также восстанавливает масштаб lwin.возможностьрасширения (мой фрейм) lwin.EnableMouseOnAlt(мой фрейм) lwin.EnableMouseWheelZoom(мой кадр)
Документация по API
.RegisterConfig(фрейм, хранилище[, имена])
локальный lwin = LibStub("LibWindow-1.1") lwin.RegisterConfig(мойфрейм , self.db.профиль)
Этот вызов инициализирует фрейм для использования с LibWindow и сообщает ему, где хранятся данные конфигурации. При необходимости вы можете указать точные имена переменных, которые будут сохранены.
Обратите внимание, что если ваш аддон поддерживает профили (т. Е. изменение данных конфигурации в реальном времени), вам нужно будет создать новый .RegisterConfig (), а затем .RestorePosition() при изменении профиля.
Аргументы
- рамка
- рамка для обеспечения поддержки позиционирования для
- место хранения
- таблица для хранения конфигурации в
- имена
- «(необязательно)» таблица, указывающая, какие имена следует использовать в таблице хранения — см. Ниже
Ручное именование переменных
Необязательным последним аргументом функции является таблица, содержащая сопоставления имен и/или префикс для всех имен переменных.
Пример использования — вручную укажите все имена переменных:
имена = { x = "posx", y = "пози", масштаб = "размер", точка = "Где прикрепить", }
Пример использования — просто префикс большинства имен, но жестко закодированный
имена = { префикс = "myframe", -- имена становятся, например, "myframex", "myframey" точка = "клеевой каркас", }
.Положение сохранения(кадр)
Вычисляет, в каком квадранте находится кадр, и сохраняет его положение относительно правого угла.
мойкадр :SetScript("OnDragStop", lwin.Сохранение)
Вам не нужно вызывать это самостоятельно, если вы использовали :MakeDraggable() в кадре.
.Реставрация(каркас)
Восстанавливает положение и масштаб по данным конфигурации.
lwin.Восстановление(мой кадр)
.setScale(рамка, масштаб)
Устанавливает масштаб кадра ( конечно, не заставляя его двигаться) и сохраняет его.
lwin.setScale(myframe, myscale)
.Поддается растягиванию(рамка)
Добавляет обработчики перетаскивания в рамку и делает ее подвижной. Информация о местоположении автоматически сохраняется в соответствии с :RegisterConfig().
lwin.настраиваемый(мой фрейм)
- Вы, конечно, можете также справиться с перетаскиванием самостоятельно, и в этом случае вы вместо этого звоните .Сохранение положения(кадра) при перетаскивании.
- Если хотите, вы можете позвонить вручную .OnDragStart(рамка) и .OnDragStop(фрейм), который выполняет необходимые вызовы API для вас + вызов .Положение сохранения(кадр).
.EnableMouseOnAlt(мой фрейм)
Только мышь-включает окно, пока удерживается [Alt]. Это позволяет пользователям нормально просматривать окно.
lwin.EnableMouseOnAlt(мой фрейм)
.Включение масштабирования(myframe)
Добавляет обработчики колесика мыши в рамку, автоматически увеличивая/уменьшая масштаб на 10% за такт и вызов колеса .Установите масштаб(myframe) для вас.
lwin.Включениемасштабирования (мой кадр)
Вы также можете позвонить вручную .На колесе(кадр,реж.). Это было бы интересно, если, например, ваш аддон уже использует колесо мыши для чего-то. Я рекомендую использовать ctrl в качестве клавиши — модификатора для масштабирования-он уже используется другими дополнениями.
Записи
О логике позиционирования
WindowLib выберет точку подключения в зависимости от того, в каком квадранте экрана находится рамка: вверху слева? внизу справа? в центре?
- Это означает, что рамки НЕ обязательно остаются точно на месте при изменении размера пользовательского интерфейса
- Это ХОРОШАЯ ВЕЩЬ! Намного лучше, чем статическое позиционирование (т. е. кадр:getLeft() * кадр:GetEffectiveScale() — что не очень хорошо работает!)
- Два кадра, расположенные рядом друг с другом при изменении размера пользовательского интерфейса, будут «продолжать» сидеть рядом друг с другом при таком относительном расположении. (Например: Подумайте о том, как ваши сумки сидят рядом друг с другом, независимо от масштаба пользовательского интерфейса!)
Добавление LibWindow в существующий аддон
Скорее всего, данные о расположении окон будут сохранены в вашей базе данных с тех пор, как это было раньше. Эти данные, скорее всего, потребуется преобразовать, прежде чем LibWindow будет хорошо с ними справляться.
LibWindow запоминает позицию в шкале родителя. НО: большинство дополнений переводятся в глобальный масштаб и сохраняют это. Это несовместимо, если ваш UIParent не имеет масштаба 1.0.
Пример старого кода:
функция MyAddon:сохранение положения(кадра) локальный p = self.db.профиль p.x = кадр:getLeft() / кадр:GetEffectiveScale() p.y = рамка:getTop() / рамка:GetEffectiveScale()
Пример кода для исправления масштаба для использования в LibWindow:
функция MyAddon:OnProfileEnable() локальный p = self.db.профиль если нет p.libwindowed, то p.x = p.x / UIParent:getScale() p.y = p.y / UIParent:getScale() p.libwindowed = истина конец - теперь можно смело звонить .Восстановление()
Добавить комментарий