Page 24 of 30

Re: Icon - менеджер иконок рабочего стола

Posted: Fri Oct 11, 2013 3:48 pm
by Mario_r4
GerdtR wrote:Один буфер использовал и диалог, и поток перерисовки иконок для разных целей. И иногда они его юзали одновременно.
O_o

Re: Icon - менеджер иконок рабочего стола

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

Re: Icon - менеджер иконок рабочего стола

Posted: Fri Oct 11, 2013 4:30 pm
by Mario_r4
GerdtR
Такой подход изначально порочен. Лучше раздели на отдельные области, много не сэкономишь, зато не будет необъяснимых странных ситуаций в будущем. Не плоди себе и последующим программистам головную боль.

Re: Icon - менеджер иконок рабочего стола

Posted: Fri Oct 11, 2013 6:12 pm
by 0CodErr
Во время перетаскивания иконок при открытом диалоге свойств на Board появляется "destroy app object". Через некоторое время это привело к вылету:
Spoiler:
11.PNG
11.PNG (7.8 KiB)
Viewed 4923 times
В исходнике есть BGRedrawThread. И если одновременно запущено 2 и более потока, то, вероятно, возникнут проблемы. Стек у них будет общий, а там есть такой код:

Code: Select all

    @@: push    ecx,             <----
        cmp     [IconNoDraw],ebx
        je      .nd
        stdcall DrawIcon,ebx,0   <----
      .nd:
        inc     ebx
        pop     ecx              <----
svn4007

Re: Icon - менеджер иконок рабочего стола

Posted: Fri Oct 11, 2013 6:44 pm
by GerdtR
Для каждого потока свой стек.

Code: Select all

                rb 1024
stack_dlg:
align 4
                rb 1024
stack_bredraw:
                rb 1024
stack_area:

Re: Icon - менеджер иконок рабочего стола

Posted: Fri Oct 11, 2013 7:03 pm
by 0CodErr
GerdtR wrote:Для каждого потока свой стек.
Если так, то всё нормально. Просто я кроме

Code: Select all

        mcall   51,1,BGRedrawThread,stack_bredraw
в @icon.asm больше нигде не нашёл создания потока.

Re: Icon - менеджер иконок рабочего стола

Posted: Fri Oct 11, 2013 8:08 pm
by 0CodErr
GerdtR wrote:Для каждого потока свой стек.

Code: Select all

        mcall   51,1,DlgAdd,stack_dlg           ;CreateThread DlgAdd,stack_dlg
				
        mcall   51,1,MovingWnd,stack_dlg        ;CreateThread MovingWnd,stack_dlg	

Re: Icon - менеджер иконок рабочего стола

Posted: Fri Oct 11, 2013 8:45 pm
by GerdtR
Ой :) Понял, исправлю)

Re: Icon - менеджер иконок рабочего стола

Posted: Fri Oct 11, 2013 9:28 pm
by Mario_r4
GerdtR wrote:Ой :) Понял, исправлю)
Только вчера смотрел:
-Это Эврика, сэр! Приоритетная ситуация номер один!
-Соберите всех в гостиной! Тема совещания "А я вам говорил!"

Re: Icon - менеджер иконок рабочего стола

Posted: Tue Oct 15, 2013 2:10 am
by GerdtR
Дал каждому потоку свой стек и диалог теперь в своём собственном буфере рисует. Вроде теперь толпы багов должны исчезнуть. И осталось сделать красивую менюшку.

Re: Icon - менеджер иконок рабочего стола

Posted: Tue Oct 15, 2013 2:18 am
by GerdtR
Akyltist wrote:3. Понимаю что даже в винде так, но там это визуально сопровождается выделением при наведении, здесь же пока не кликнешь не увидишь) Мож не баг, мож фича собственно это уже так, искуственно - мне не мешает:
Image
С этим багом сложно что-то сделать. Можно, конечно, при клике искать не ту иконку, в области какой кликнули, а ту, центр которой ближе к точке клика... вроде даже не сложно, но баг просто менее заметен будет. Не сильно поможет. Пускай будет как есть.

Re: Icon - менеджер иконок рабочего стола

Posted: Tue Oct 15, 2013 2:00 pm
by 0CodErr
При вызове меню правой кнопкой мыши с открытым диалогом свойств:
Spoiler:
1221.PNG
1221.PNG (97.9 KiB)
Viewed 4809 times
Раньше уже писал про это viewtopic.php?p=52143#p52143, но в этот раз ещё и на иконках что-то появилось. У меня это проявляется не очень часто.
svn4028

@icon.asm:
mcall 51,1,RButtonWin,stack_dlg ;CreateThread RButtonWin,stack_dlg
RButton.inc:
mcall 51,1,DlgAdd,stack_dlg ;CreateThread DlgAdd,stack_dlg

Re: Icon - менеджер иконок рабочего стола

Posted: Tue Oct 15, 2013 2:08 pm
by GerdtR
Опять со стеком прошляпил :(

Re: Icon - менеджер иконок рабочего стола

Posted: Tue Oct 15, 2013 10:23 pm
by GerdtR
Сделал менюшку как в сишной версии. И стек теперь у каждого свой, за исключением стека для окна при перетаскивании и окна менюшки. Ну одновременно эти два потока никак не запустить.

Re: Icon - менеджер иконок рабочего стола

Posted: Tue Oct 15, 2013 10:32 pm
by Leency
Уже близко к идеалу. Хочу только попросить добавить ободок и сделать выделенный элемент более контасным (использовать цвета кнопки), как на скрине.