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

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

Автор:  Leency [ Ср апр 11, 2018 12:42 pm ]
Заголовок сообщения:  Re: Смотрелка скинов под Windows

DTP Editor
by veliant

Вложение:
dtp.png
dtp.png [ 22.03 КБ | 1804 просмотра ]

Вложение:
DTP_Editor.7z [160.5 КБ]
37 скачиваний

Автор:  pavelyakov [ Ср апр 11, 2018 9:43 pm ]
Заголовок сообщения:  Re: Смотрелка скинов под Windows

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

Автор:  0CodErr [ Вт апр 17, 2018 1:26 pm ]
Заголовок сообщения:  Re: Смотрелка скинов под Windows

Появилась реакция на кнопки закрытия и минимизации.
Теперь название скина выводится в заголовок.
Спойлер: Показать
Вложение:
skins_with_caption.PNG
skins_with_caption.PNG [ 75.84 КБ | 1746 просмотров ]
Вложение:
skins_with_caption1.PNG
skins_with_caption1.PNG [ 82.88 КБ | 1746 просмотров ]
Вложение:
sknview.7z [38.1 КБ]
37 скачиваний

Автор:  Leency [ Вт апр 17, 2018 1:54 pm ]
Заголовок сообщения:  Re: Смотрелка скинов под Windows

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

Автор:  Leency [ Вт апр 17, 2018 1:57 pm ]
Заголовок сообщения:  Re: Смотрелка скинов под Windows

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

Автор:  0CodErr [ Вт апр 17, 2018 2:50 pm ]
Заголовок сообщения:  Re: Смотрелка скинов под Windows

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

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

Автор:  Leency [ Вт апр 17, 2018 3:33 pm ]
Заголовок сообщения:  Re: Смотрелка скинов под Windows

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

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

Автор:  0CodErr [ Вт апр 17, 2018 4:09 pm ]
Заголовок сообщения:  Re: Смотрелка скинов под Windows

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

Автор:  Leency [ Вт апр 17, 2018 8:46 pm ]
Заголовок сообщения:  Re: Смотрелка скинов под Windows

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

Автор:  Leency [ Вт апр 17, 2018 9:04 pm ]
Заголовок сообщения:  Re: Смотрелка скинов под Windows

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

Вложения:
skin.zip [1.19 КБ]
35 скачиваний

Автор:  0CodErr [ Вт апр 17, 2018 10:25 pm ]
Заголовок сообщения:  Re: Смотрелка скинов под Windows

Leency писал(а):
Обнови плиз иконку.
Обновил
Вложение:
sknview.7z [37.95 КБ]
33 скачивания
Leency писал(а):
иконка стала чуть легче
Не так уж и принципиально по сравнению с размером программы :) Там, кстати, в этом файле не 1 иконка, а целых 3
Спойлер: Показать
Вложение:
2.PNG
2.PNG [ 3.8 КБ | 1701 просмотр ]
Одна иконка 16x16 весила бы чуть больше 1 Kb.

Автор:  0CodErr [ Ср апр 18, 2018 1:53 pm ]
Заголовок сообщения:  Re: Смотрелка скинов под Windows

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

Автор:  0CodErr [ Ср апр 18, 2018 2:01 pm ]
Заголовок сообщения:  Re: Смотрелка скинов под Windows

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

Автор:  0CodErr [ Ср апр 18, 2018 2:11 pm ]
Заголовок сообщения:  Re: Смотрелка скинов под Windows

Теперь верхняя координата считается вот так:
Код:
CaptionTop := (LongInt(Skin.Height) - Skin.Margins.Bottom - Skin.Margins.Top) Div 2 + Skin.Margins.Top - 8;
Вложение:
sknview.7z [38.01 КБ]
36 скачиваний

Автор:  0CodErr [ Ср окт 24, 2018 9:27 pm ]
Заголовок сообщения:  Re: Смотрелка скинов под Windows

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

Страница 2 из 2 Часовой пояс: UTC+03:00
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/