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

All that makes Kolibri beautiful outside while we are working inside
  • Ого!! Классно!)
    Технологии меняют мир, а я - меняю технологии.
  • Появилась реакция на кнопки закрытия и минимизации.
    Теперь название скина выводится в заголовок.
    Spoiler:
    skins_with_caption.PNG
    skins_with_caption.PNG (75.84 KiB)
    Viewed 11939 times
    skins_with_caption1.PNG
    skins_with_caption1.PNG (82.88 KiB)
    Viewed 11939 times
    sknview.7z (38.1 KiB)
    Downloaded 337 times
  • Мм, жир. Идея с названием в заголовке отличная.
    Из хаоса в космос
  • Мне кажется заголовок на пару пикселей выше чем в системе. Я сужу по win 3.11. Или мне кажется?
    Из хаоса в космос
  • Leency, да, так и есть.
    Spoiler:
    1.PNG
    1.PNG (21.35 KiB)
    Viewed 11925 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 пикселя ниже, первое сделать будет правильнее, хотя и дольше.
  • Я понял. Скорее всего это "костыль" в ядре добавленный после увеличения шрифта в заголовке, чтобы не фиксить сами скины.
    Я бы этот костыль убрал.

    P.S. Любой эмуль должен эмулировать также баги системы)
    Из хаоса в космос
  • 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 11917 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. Любой эмуль должен эмулировать также баги системы)
    Тогда нужно постоянно следить за обновлениями в коде системы — баги могут когда-то и пофиксить.
  • 0CodErr
    Выделение кнопки скошено на углах http://prntscr.com/j6jawa по 1 пикселю.
    В оригинале там прямоугольник.
    Из хаоса в космос
  • Обнови плиз иконку. Там в 16х16 правый верхний угол был не прозрачным http://prntscr.com/j6jla4
    Ну и битность понизил до 256 цветов, иконка стала чуть легче.
    Attachments
    skin.zip (1.19 KiB)
    Downloaded 314 times
    Из хаоса в космос
  • Leency wrote:Обнови плиз иконку.
    Обновил
    sknview.7z (37.95 KiB)
    Downloaded 307 times
    Leency wrote:иконка стала чуть легче
    Не так уж и принципиально по сравнению с размером программы :) Там, кстати, в этом файле не 1 иконка, а целых 3
    Spoiler:
    2.PNG
    2.PNG (3.8 KiB)
    Viewed 11894 times
    Одна иконка 16x16 весила бы чуть больше 1 Kb.
  • 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]
    Ядерная формула, видимо пытается как-то разрешить такую ситуацию, но, имхо, проблема всё же в скине.
  • Хотя, если bottom — количество пикселей от нижнего края заголовка(а не от верхнего), то похоже мне просто нужно было учитывать bottom при расчёте, а я учитывал только Top. Тогда в ядре, наверное, правильно сделано.
  • Теперь верхняя координата считается вот так:

    Code: Select all

    CaptionTop := (LongInt(Skin.Height) - Skin.Margins.Bottom - Skin.Margins.Top) Div 2 + Skin.Margins.Top - 8;