Page 2 of 2
Re: Смотрелка скинов под Windows
Posted: Wed Apr 11, 2018 12:42 pm
by Leency
DTP Editor
by
veliant
-
dtp.png (22.03 KiB)
Viewed 11251 times
Re: Смотрелка скинов под Windows
Posted: Wed Apr 11, 2018 9:43 pm
by paulcodeman
Ого!! Классно!)
Re: Смотрелка скинов под Windows
Posted: Tue Apr 17, 2018 1:26 pm
by 0CodErr
Появилась реакция на кнопки закрытия и минимизации.
Теперь название скина выводится в заголовок.
Spoiler:
-
skins_with_caption.PNG (75.84 KiB)
Viewed 11193 times
-
skins_with_caption1.PNG (82.88 KiB)
Viewed 11193 times
Re: Смотрелка скинов под Windows
Posted: Tue Apr 17, 2018 1:54 pm
by Leency
Мм, жир. Идея с названием в заголовке отличная.
Re: Смотрелка скинов под Windows
Posted: Tue Apr 17, 2018 1:57 pm
by Leency
Мне кажется заголовок на пару пикселей выше чем в системе. Я сужу по win 3.11. Или мне кажется?
Re: Смотрелка скинов под Windows
Posted: Tue Apr 17, 2018 2:50 pm
by 0CodErr
Leency, да, так и есть.
Spoiler:
-
1.PNG (21.35 KiB)
Viewed 11179 times
Только странно, что при этом позиция по горизонтали — верная, а не на 2 пикселя левее.
Функция
dtext ожидает координаты в
ebxCode: Select all
; ebx = output coordinates XXXXYYYY h
Вот код из
DrawCaptionCode: Select all
movzx ebx, Skin.Margins.Left
shl ebx, 16
mov bx, Skin.Margins.Top
Я беру ровно значения из
Skin.Margins, ничего от себя не прибавляя.
Для меня это больше похоже на баг с выводом заголовка в самой
KolibriOS.
Ну а скины, возможно, потом стали просто "подгонять" лишь бы работало, не обращая внимания на возможный баг в системе.
Если это действительно баг — нужно править
Margins в скинах или написать в документации, что реальные координаты
Margins.Top на 2 пикселя ниже, первое сделать будет правильнее, хотя и дольше.
Re: Смотрелка скинов под Windows
Posted: Tue Apr 17, 2018 3:33 pm
by Leency
Я понял. Скорее всего это "костыль" в ядре добавленный после увеличения шрифта в заголовке, чтобы не фиксить сами скины.
Я бы этот костыль убрал.
P.S. Любой эмуль должен эмулировать также баги системы)
Re: Смотрелка скинов под Windows
Posted: Tue Apr 17, 2018 4:09 pm
by 0CodErr
Leency wrote:Скорее всего это "костыль" в ядре добавленный после увеличения шрифта в заголовке
Возможно, что так. Или просто проблемы с расчётом координаты
Top.
Смотрим вот тут:
http://websvn.kolibrios.org/blame.php?r ... #line-2234
Фактически, формула примерно такая:
Code: Select all
Top = (_skinh - _skinmargins.bottom - _skinmargins.top) / 2 + _skinmargins.top - 8
Причём, для некоторых скинов работает правильно
Spoiler:
-
1.PNG (11.63 KiB)
Viewed 11171 times
Для окна без скина
http://websvn.kolibrios.org/blame.php?r ... #line-2250
Code: Select all
5926 pathoswith 2250 mov ebx, 80002h
В координату
Top заранее заносится значение 2.
Leency wrote:P.S. Любой эмуль должен эмулировать также баги системы)
Тогда нужно постоянно следить за обновлениями в коде системы — баги могут когда-то и пофиксить.
Re: Смотрелка скинов под Windows
Posted: Tue Apr 17, 2018 8:46 pm
by Leency
0CodErr
Выделение кнопки скошено на углах
http://prntscr.com/j6jawa по 1 пикселю.
В оригинале там прямоугольник.
Re: Смотрелка скинов под Windows
Posted: Tue Apr 17, 2018 9:04 pm
by Leency
Обнови плиз иконку. Там в 16х16 правый верхний угол был не прозрачным
http://prntscr.com/j6jla4
Ну и битность понизил до 256 цветов, иконка стала чуть легче.
Re: Смотрелка скинов под Windows
Posted: Tue Apr 17, 2018 10:25 pm
by 0CodErr
Leency wrote:Обнови плиз иконку.
Обновил
Leency wrote:иконка стала чуть легче
Не так уж и принципиально по сравнению с размером программы
Там, кстати, в этом файле не 1 иконка, а целых 3
Spoiler:
-
2.PNG (3.8 KiB)
Viewed 11148 times
Одна иконка 16x16 весила бы чуть больше 1 Kb.
Re: Смотрелка скинов под Windows
Posted: Wed Apr 18, 2018 1:53 pm
by 0CodErr
Leency wrote:Мне кажется заголовок на пару пикселей выше чем в системе. Я сужу по win 3.11. Или мне кажется?
Кстати, внезапно,
http://websvn.kolibrios.org/filedetails ... asm#line-5
Code: Select all
margins = [5:1:44:1],\ ; margins [left:top:right:bottom]
Ядерная формула, видимо пытается как-то разрешить такую ситуацию, но, имхо, проблема всё же в скине.
Re: Смотрелка скинов под Windows
Posted: Wed Apr 18, 2018 2:01 pm
by 0CodErr
Хотя, если bottom — количество пикселей от нижнего края заголовка(а не от верхнего), то похоже мне просто нужно было учитывать bottom при расчёте, а я учитывал только Top. Тогда в ядре, наверное, правильно сделано.
Re: Смотрелка скинов под Windows
Posted: Wed Apr 18, 2018 2:11 pm
by 0CodErr
Теперь верхняя координата считается вот так:
Code: Select all
CaptionTop := (LongInt(Skin.Height) - Skin.Margins.Bottom - Skin.Margins.Top) Div 2 + Skin.Margins.Top - 8;
Re: Смотрелка скинов под Windows
Posted: Wed Oct 24, 2018 9:27 pm
by 0CodErr
В
skninfo и
sknview есть такие строки:
Code: Select all
Windows.HeapFree(GetProcessHeap, 0, PFileBuffer);
PFileBuffer := Windows.HeapAlloc(GetProcessHeap, 0, PPackedFile(PFileBuffer)^.UnpackedSize);
сначала освобождается
PFileBuffer, а затем происходит чтение оттуда
UnpackedSize. И как оно ещё работает
Хмм.. судя по
https://docs.microsoft.com/en-us/window ... i-heapfree You should not refer in any way to memory that has been freed by HeapFree.
After that memory is freed, any information that may have been in it is gone forever.
If you require information, do not free memory containing the information.
Читать оттуда не запрещается, но информация там уже будет не актуальная.
Проверил, что прочитанное из
PPackedFile(PFileBuffer)^.UnpackedSize значение(более 1 мегабайта) вполне достаточное для работы программы.
Файлы скинов не настолько большие(менее 10 килобайтов), потому и работает.
Но, конечно, всё равно это нужно исправить.