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

Icon - менеджер иконок рабочего стола
http://board.kolibrios.org/viewtopic.php?f=48&t=1515
Page 24 of 30

Author:  Mario_r4 [ Fri Oct 11, 2013 3:48 pm ]
Post subject:  Re: Icon - менеджер иконок рабочего стола

GerdtR wrote:
Один буфер использовал и диалог, и поток перерисовки иконок для разных целей. И иногда они его юзали одновременно.

O_o

Author:  GerdtR [ Fri Oct 11, 2013 3:59 pm ]
Post subject:  Re: Icon - менеджер иконок рабочего стола

В тестовой я сделал 2 буфера. Вот только одно но: считаем размер буфера для перерисовки иконки: 68*68*4=18496, для перерисовки значка в диалоге: 32*32*3 = 3072. Ну, вот. Ну для диалога надо не много, но я вообще сэкономил и всё в один буфер. А сейчас соорудил вроде мьютекса(правильно написал? :) ). Ну есть переменная, которая служит флагом занятости буфера и те кому нужен буфер ждут, когда он освободиться. Задержек не видно даже при стресс-тесте (запускал окно, которое постоянно прыгало и заставляло перерисовываться значки, а я тем временем крутил прокрутку и заставлял перерисовываться диалог. Результат - никаких тормозов. Хотя это всё на реальной машине, конечно, но я с трудом убил это прыгающее окно - мельтешило всё).

Author:  Mario_r4 [ Fri Oct 11, 2013 4:30 pm ]
Post subject:  Re: Icon - менеджер иконок рабочего стола

GerdtR
Такой подход изначально порочен. Лучше раздели на отдельные области, много не сэкономишь, зато не будет необъяснимых странных ситуаций в будущем. Не плоди себе и последующим программистам головную боль.

Author:  0CodErr [ Fri Oct 11, 2013 6:12 pm ]
Post subject:  Re: Icon - менеджер иконок рабочего стола

Во время перетаскивания иконок при открытом диалоге свойств на Board появляется "destroy app object". Через некоторое время это привело к вылету:
Spoiler: Show
Attachment:
11.PNG
11.PNG [ 7.8 KiB | Viewed 1788 times ]
В исходнике есть BGRedrawThread. И если одновременно запущено 2 и более потока, то, вероятно, возникнут проблемы. Стек у них будет общий, а там есть такой код:
Code:
    @@: push    ecx,             <----
        cmp     [IconNoDraw],ebx
        je      .nd
        stdcall DrawIcon,ebx,0   <----
      .nd:
        inc     ebx
        pop     ecx              <----
svn4007

Author:  GerdtR [ Fri Oct 11, 2013 6:44 pm ]
Post subject:  Re: Icon - менеджер иконок рабочего стола

Для каждого потока свой стек.
Code:
                rb 1024
stack_dlg:
align 4
                rb 1024
stack_bredraw:
                rb 1024
stack_area:

Author:  0CodErr [ Fri Oct 11, 2013 7:03 pm ]
Post subject:  Re: Icon - менеджер иконок рабочего стола

GerdtR wrote:
Для каждого потока свой стек.
Если так, то всё нормально. Просто я кроме
Code:
        mcall   51,1,BGRedrawThread,stack_bredraw
в @icon.asm больше нигде не нашёл создания потока.

Author:  0CodErr [ Fri Oct 11, 2013 8:08 pm ]
Post subject:  Re: Icon - менеджер иконок рабочего стола

GerdtR wrote:
Для каждого потока свой стек.
Code:
        mcall   51,1,DlgAdd,stack_dlg           ;CreateThread DlgAdd,stack_dlg
            
        mcall   51,1,MovingWnd,stack_dlg        ;CreateThread MovingWnd,stack_dlg   

Author:  GerdtR [ Fri Oct 11, 2013 8:45 pm ]
Post subject:  Re: Icon - менеджер иконок рабочего стола

Ой :) Понял, исправлю)

Author:  Mario_r4 [ Fri Oct 11, 2013 9:28 pm ]
Post subject:  Re: Icon - менеджер иконок рабочего стола

GerdtR wrote:
Ой :) Понял, исправлю)

Только вчера смотрел:
Quote:
-Это Эврика, сэр! Приоритетная ситуация номер один!
-Соберите всех в гостиной! Тема совещания "А я вам говорил!"

Author:  GerdtR [ Tue Oct 15, 2013 2:10 am ]
Post subject:  Re: Icon - менеджер иконок рабочего стола

Дал каждому потоку свой стек и диалог теперь в своём собственном буфере рисует. Вроде теперь толпы багов должны исчезнуть. И осталось сделать красивую менюшку.

Author:  GerdtR [ Tue Oct 15, 2013 2:18 am ]
Post subject:  Re: Icon - менеджер иконок рабочего стола

Akyltist wrote:
3. Понимаю что даже в винде так, но там это визуально сопровождается выделением при наведении, здесь же пока не кликнешь не увидишь) Мож не баг, мож фича собственно это уже так, искуственно - мне не мешает:
Image

С этим багом сложно что-то сделать. Можно, конечно, при клике искать не ту иконку, в области какой кликнули, а ту, центр которой ближе к точке клика... вроде даже не сложно, но баг просто менее заметен будет. Не сильно поможет. Пускай будет как есть.

Author:  0CodErr [ Tue Oct 15, 2013 2:00 pm ]
Post subject:  Re: Icon - менеджер иконок рабочего стола

При вызове меню правой кнопкой мыши с открытым диалогом свойств:
Spoiler: Show
Attachment:
1221.PNG
1221.PNG [ 97.9 KiB | Viewed 1674 times ]
Раньше уже писал про это http://board.kolibrios.org/viewtopic.php?p=52143#p52143, но в этот раз ещё и на иконках что-то появилось. У меня это проявляется не очень часто.
svn4028

@icon.asm:
Quote:
mcall 51,1,RButtonWin,stack_dlg ;CreateThread RButtonWin,stack_dlg

RButton.inc:
Quote:
mcall 51,1,DlgAdd,stack_dlg ;CreateThread DlgAdd,stack_dlg

Author:  GerdtR [ Tue Oct 15, 2013 2:08 pm ]
Post subject:  Re: Icon - менеджер иконок рабочего стола

Опять со стеком прошляпил :(

Author:  GerdtR [ Tue Oct 15, 2013 10:23 pm ]
Post subject:  Re: Icon - менеджер иконок рабочего стола

Сделал менюшку как в сишной версии. И стек теперь у каждого свой, за исключением стека для окна при перетаскивании и окна менюшки. Ну одновременно эти два потока никак не запустить.

Author:  Leency [ Tue Oct 15, 2013 10:32 pm ]
Post subject:  Re: Icon - менеджер иконок рабочего стола

Уже близко к идеалу. Хочу только попросить добавить ободок и сделать выделенный элемент более контасным (использовать цвета кнопки), как на скрине.

Attachments:
Screenshot_1.png
Screenshot_1.png [ 13.72 KiB | Viewed 1645 times ]

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