Page 2 of 2

Re: Смотрелка скинов под Windows

Posted: Wed Apr 11, 2018 12:42 pm
by Leency
DTP Editor
by veliant
dtp.png
dtp.png (22.03 KiB)
Viewed 11251 times
DTP_Editor.7z (160.5 KiB)
Downloaded 317 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
skins_with_caption.PNG (75.84 KiB)
Viewed 11193 times
skins_with_caption1.PNG
skins_with_caption1.PNG (82.88 KiB)
Viewed 11193 times
sknview.7z (38.1 KiB)
Downloaded 319 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
1.PNG (21.35 KiB)
Viewed 11179 times
Только странно, что при этом позиция по горизонтали — верная, а не на 2 пикселя левее.
Функция dtext ожидает координаты в ebx

Code: Select all

; ebx = output coordinates XXXXYYYY h
Вот код из DrawCaption

Code: 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
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:Обнови плиз иконку.
Обновил
sknview.7z (37.95 KiB)
Downloaded 293 times
Leency wrote:иконка стала чуть легче
Не так уж и принципиально по сравнению с размером программы :) Там, кстати, в этом файле не 1 иконка, а целых 3
Spoiler:
2.PNG
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;
sknview.7z (38.01 KiB)
Downloaded 313 times

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 килобайтов), потому и работает.
Но, конечно, всё равно это нужно исправить.