Board.KolibriOS.org
http://board.kolibrios.org/

Смотрелка скинов под Windows
http://board.kolibrios.org/viewtopic.php?f=26&t=3689
Page 2 of 2

Author:  Leency [ Wed Apr 11, 2018 12:42 pm ]
Post subject:  Re: Смотрелка скинов под Windows

DTP Editor
by veliant

Attachment:
dtp.png
dtp.png [ 22.03 KiB | Viewed 3218 times ]

Attachment:
DTP_Editor.7z [160.5 KiB]
Downloaded 83 times

Author:  paulcodeman [ Wed Apr 11, 2018 9:43 pm ]
Post subject:  Re: Смотрелка скинов под Windows

Ого!! Классно!)

Author:  0CodErr [ Tue Apr 17, 2018 1:26 pm ]
Post subject:  Re: Смотрелка скинов под Windows

Появилась реакция на кнопки закрытия и минимизации.
Теперь название скина выводится в заголовок.
Spoiler: Show
Attachment:
skins_with_caption.PNG
skins_with_caption.PNG [ 75.84 KiB | Viewed 3160 times ]
Attachment:
skins_with_caption1.PNG
skins_with_caption1.PNG [ 82.88 KiB | Viewed 3160 times ]
Attachment:
sknview.7z [38.1 KiB]
Downloaded 82 times

Author:  Leency [ Tue Apr 17, 2018 1:54 pm ]
Post subject:  Re: Смотрелка скинов под Windows

Мм, жир. Идея с названием в заголовке отличная.

Author:  Leency [ Tue Apr 17, 2018 1:57 pm ]
Post subject:  Re: Смотрелка скинов под Windows

Мне кажется заголовок на пару пикселей выше чем в системе. Я сужу по win 3.11. Или мне кажется?

Author:  0CodErr [ Tue Apr 17, 2018 2:50 pm ]
Post subject:  Re: Смотрелка скинов под Windows

Leency, да, так и есть.
Spoiler: Show
Attachment:
1.PNG
1.PNG [ 21.35 KiB | Viewed 3146 times ]
Только странно, что при этом позиция по горизонтали — верная, а не на 2 пикселя левее.
Функция dtext ожидает координаты в ebx
Code:
; ebx = output coordinates XXXXYYYY h
Вот код из DrawCaption
Code:
    movzx ebx, Skin.Margins.Left
    shl ebx, 16
    mov bx, Skin.Margins.Top
Я беру ровно значения из Skin.Margins, ничего от себя не прибавляя.
Для меня это больше похоже на баг с выводом заголовка в самой KolibriOS.
Ну а скины, возможно, потом стали просто "подгонять" лишь бы работало, не обращая внимания на возможный баг в системе.

Если это действительно баг — нужно править Margins в скинах или написать в документации, что реальные координаты Margins.Top на 2 пикселя ниже, первое сделать будет правильнее, хотя и дольше.

Author:  Leency [ Tue Apr 17, 2018 3:33 pm ]
Post subject:  Re: Смотрелка скинов под Windows

Я понял. Скорее всего это "костыль" в ядре добавленный после увеличения шрифта в заголовке, чтобы не фиксить сами скины.
Я бы этот костыль убрал.

P.S. Любой эмуль должен эмулировать также баги системы)

Author:  0CodErr [ Tue Apr 17, 2018 4:09 pm ]
Post subject:  Re: Смотрелка скинов под Windows

Leency wrote:
Скорее всего это "костыль" в ядре добавленный после увеличения шрифта в заголовке
Возможно, что так. Или просто проблемы с расчётом координаты Top.
Смотрим вот тут: http://websvn.kolibrios.org/blame.php?r ... #line-2234
Фактически, формула примерно такая:
Code:
Top = (_skinh - _skinmargins.bottom - _skinmargins.top) / 2 + _skinmargins.top - 8
Причём, для некоторых скинов работает правильно
Spoiler: Show
Attachment:
1.PNG
1.PNG [ 11.63 KiB | Viewed 3138 times ]
Для окна без скина http://websvn.kolibrios.org/blame.php?r ... #line-2250
Code:
5926    pathoswith    2250   mov     ebx, 80002h
В координату Top заранее заносится значение 2.
Leency wrote:
P.S. Любой эмуль должен эмулировать также баги системы)
Тогда нужно постоянно следить за обновлениями в коде системы — баги могут когда-то и пофиксить.

Author:  Leency [ Tue Apr 17, 2018 8:46 pm ]
Post subject:  Re: Смотрелка скинов под Windows

0CodErr
Выделение кнопки скошено на углах http://prntscr.com/j6jawa по 1 пикселю.
В оригинале там прямоугольник.

Author:  Leency [ Tue Apr 17, 2018 9:04 pm ]
Post subject:  Re: Смотрелка скинов под Windows

Обнови плиз иконку. Там в 16х16 правый верхний угол был не прозрачным http://prntscr.com/j6jla4
Ну и битность понизил до 256 цветов, иконка стала чуть легче.

Attachments:
skin.zip [1.19 KiB]
Downloaded 77 times

Author:  0CodErr [ Tue Apr 17, 2018 10:25 pm ]
Post subject:  Re: Смотрелка скинов под Windows

Leency wrote:
Обнови плиз иконку.
Обновил
Attachment:
sknview.7z [37.95 KiB]
Downloaded 75 times
Leency wrote:
иконка стала чуть легче
Не так уж и принципиально по сравнению с размером программы :) Там, кстати, в этом файле не 1 иконка, а целых 3
Spoiler: Show
Attachment:
2.PNG
2.PNG [ 3.8 KiB | Viewed 3115 times ]
Одна иконка 16x16 весила бы чуть больше 1 Kb.

Author:  0CodErr [ Wed Apr 18, 2018 1:53 pm ]
Post subject:  Re: Смотрелка скинов под Windows

Leency wrote:
Мне кажется заголовок на пару пикселей выше чем в системе. Я сужу по win 3.11. Или мне кажется?
Кстати, внезапно, http://websvn.kolibrios.org/filedetails ... asm#line-5
Code:
  margins         = [5:1:44:1],\                            ; margins [left:top:right:bottom]
Ядерная формула, видимо пытается как-то разрешить такую ситуацию, но, имхо, проблема всё же в скине.

Author:  0CodErr [ Wed Apr 18, 2018 2:01 pm ]
Post subject:  Re: Смотрелка скинов под Windows

Хотя, если bottom — количество пикселей от нижнего края заголовка(а не от верхнего), то похоже мне просто нужно было учитывать bottom при расчёте, а я учитывал только Top. Тогда в ядре, наверное, правильно сделано.

Author:  0CodErr [ Wed Apr 18, 2018 2:11 pm ]
Post subject:  Re: Смотрелка скинов под Windows

Теперь верхняя координата считается вот так:
Code:
CaptionTop := (LongInt(Skin.Height) - Skin.Margins.Bottom - Skin.Margins.Top) Div 2 + Skin.Margins.Top - 8;
Attachment:
sknview.7z [38.01 KiB]
Downloaded 84 times

Author:  0CodErr [ Wed Oct 24, 2018 9:27 pm ]
Post subject:  Re: Смотрелка скинов под Windows

В skninfo и sknview есть такие строки:
Code:
  Windows.HeapFree(GetProcessHeap, 0, PFileBuffer);
  PFileBuffer := Windows.HeapAlloc(GetProcessHeap, 0, PPackedFile(PFileBuffer)^.UnpackedSize);
сначала освобождается PFileBuffer, а затем происходит чтение оттуда UnpackedSize. И как оно ещё работает :)
Хмм.. судя по https://docs.microsoft.com/en-us/window ... i-heapfree
Quote:
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 килобайтов), потому и работает.
Но, конечно, всё равно это нужно исправить.

Page 2 of 2 All times are UTC+03:00
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/