Board.KolibriOS.org

Official KolibriOS board
It is currently Mon Oct 14, 2019 9:55 pm

All times are UTC+03:00




Post new topic  Reply to topic  [ 30 posts ]  Go to page Previous 1 2
Author Message
PostPosted: Wed Apr 11, 2018 12:42 pm 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 5062
DTP Editor
by veliant

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

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

_________________
Через тернии к звездам


Top
   
PostPosted: Wed Apr 11, 2018 9:43 pm 
Offline
User avatar

Joined: Wed Apr 15, 2015 11:13 pm
Posts: 253
Ого!! Классно!)


Top
   
PostPosted: Tue Apr 17, 2018 1:26 pm 
Offline

Joined: Sun Oct 30, 2011 6:43 pm
Posts: 1499
Появилась реакция на кнопки закрытия и минимизации.
Теперь название скина выводится в заголовок.
Spoiler: Show
Attachment:
skins_with_caption.PNG
skins_with_caption.PNG [ 75.84 KiB | Viewed 3266 times ]
Attachment:
skins_with_caption1.PNG
skins_with_caption1.PNG [ 82.88 KiB | Viewed 3266 times ]
Attachment:
sknview.7z [38.1 KiB]
Downloaded 84 times


Top
   
PostPosted: Tue Apr 17, 2018 1:54 pm 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 5062
Мм, жир. Идея с названием в заголовке отличная.

_________________
Через тернии к звездам


Top
   
PostPosted: Tue Apr 17, 2018 1:57 pm 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 5062
Мне кажется заголовок на пару пикселей выше чем в системе. Я сужу по win 3.11. Или мне кажется?

_________________
Через тернии к звездам


Top
   
PostPosted: Tue Apr 17, 2018 2:50 pm 
Offline

Joined: Sun Oct 30, 2011 6:43 pm
Posts: 1499
Leency, да, так и есть.
Spoiler: Show
Attachment:
1.PNG
1.PNG [ 21.35 KiB | Viewed 3252 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 пикселя ниже, первое сделать будет правильнее, хотя и дольше.


Top
   
PostPosted: Tue Apr 17, 2018 3:33 pm 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 5062
Я понял. Скорее всего это "костыль" в ядре добавленный после увеличения шрифта в заголовке, чтобы не фиксить сами скины.
Я бы этот костыль убрал.

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

_________________
Через тернии к звездам


Top
   
PostPosted: Tue Apr 17, 2018 4:09 pm 
Offline

Joined: Sun Oct 30, 2011 6:43 pm
Posts: 1499
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 3244 times ]
Для окна без скина http://websvn.kolibrios.org/blame.php?r ... #line-2250
Code:
5926    pathoswith    2250   mov     ebx, 80002h
В координату Top заранее заносится значение 2.
Leency wrote:
P.S. Любой эмуль должен эмулировать также баги системы)
Тогда нужно постоянно следить за обновлениями в коде системы — баги могут когда-то и пофиксить.


Top
   
PostPosted: Tue Apr 17, 2018 8:46 pm 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 5062
0CodErr
Выделение кнопки скошено на углах http://prntscr.com/j6jawa по 1 пикселю.
В оригинале там прямоугольник.

_________________
Через тернии к звездам


Top
   
PostPosted: Tue Apr 17, 2018 9:04 pm 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 5062
Обнови плиз иконку. Там в 16х16 правый верхний угол был не прозрачным http://prntscr.com/j6jla4
Ну и битность понизил до 256 цветов, иконка стала чуть легче.


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

_________________
Через тернии к звездам
Top
   
PostPosted: Tue Apr 17, 2018 10:25 pm 
Offline

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


Top
   
PostPosted: Wed Apr 18, 2018 1:53 pm 
Offline

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


Top
   
PostPosted: Wed Apr 18, 2018 2:01 pm 
Offline

Joined: Sun Oct 30, 2011 6:43 pm
Posts: 1499
Хотя, если bottom — количество пикселей от нижнего края заголовка(а не от верхнего), то похоже мне просто нужно было учитывать bottom при расчёте, а я учитывал только Top. Тогда в ядре, наверное, правильно сделано.


Top
   
PostPosted: Wed Apr 18, 2018 2:11 pm 
Offline

Joined: Sun Oct 30, 2011 6:43 pm
Posts: 1499
Теперь верхняя координата считается вот так:
Code:
CaptionTop := (LongInt(Skin.Height) - Skin.Margins.Bottom - Skin.Margins.Top) Div 2 + Skin.Margins.Top - 8;
Attachment:
sknview.7z [38.01 KiB]
Downloaded 85 times


Top
   
PostPosted: Wed Oct 24, 2018 9:27 pm 
Offline

Joined: Sun Oct 30, 2011 6:43 pm
Posts: 1499
В 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 килобайтов), потому и работает.
Но, конечно, всё равно это нужно исправить.


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 30 posts ]  Go to page Previous 1 2

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 2 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
Powered by phpBB® Forum Software © phpBB Limited