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

...
  • В тестовой я сделал 2 буфера. Вот только одно но: считаем размер буфера для перерисовки иконки: 68*68*4=18496, для перерисовки значка в диалоге: 32*32*3 = 3072. Ну, вот. Ну для диалога надо не много, но я вообще сэкономил и всё в один буфер. А сейчас соорудил вроде мьютекса(правильно написал? :) ). Ну есть переменная, которая служит флагом занятости буфера и те кому нужен буфер ждут, когда он освободиться. Задержек не видно даже при стресс-тесте (запускал окно, которое постоянно прыгало и заставляло перерисовываться значки, а я тем временем крутил прокрутку и заставлял перерисовываться диалог. Результат - никаких тормозов. Хотя это всё на реальной машине, конечно, но я с трудом убил это прыгающее окно - мельтешило всё).
    Чем больше сыра, тем больше в нём дыр. Чем больше дыр, тем меньше в нём собственно сыра. Значит, чем больше сыра, тем меньше сыра!
  • GerdtR
    Такой подход изначально порочен. Лучше раздели на отдельные области, много не сэкономишь, зато не будет необъяснимых странных ситуаций в будущем. Не плоди себе и последующим программистам головную боль.
    Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
  • Во время перетаскивания иконок при открытом диалоге свойств на Board появляется "destroy app object". Через некоторое время это привело к вылету:
    Spoiler:
    11.PNG
    11.PNG (7.8 KiB)
    Viewed 4891 times
    В исходнике есть BGRedrawThread. И если одновременно запущено 2 и более потока, то, вероятно, возникнут проблемы. Стек у них будет общий, а там есть такой код:

    Code: Select all

        @@: push    ecx,             <----
            cmp     [IconNoDraw],ebx
            je      .nd
            stdcall DrawIcon,ebx,0   <----
          .nd:
            inc     ebx
            pop     ecx              <----
    
    svn4007
  • Для каждого потока свой стек.

    Code: Select all

                    rb 1024
    stack_dlg:
    align 4
                    rb 1024
    stack_bredraw:
                    rb 1024
    stack_area:
    
    Чем больше сыра, тем больше в нём дыр. Чем больше дыр, тем меньше в нём собственно сыра. Значит, чем больше сыра, тем меньше сыра!
  • GerdtR wrote:Для каждого потока свой стек.
    Если так, то всё нормально. Просто я кроме

    Code: Select all

            mcall   51,1,BGRedrawThread,stack_bredraw
    в @icon.asm больше нигде не нашёл создания потока.
  • 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	
  • Ой :) Понял, исправлю)
    Чем больше сыра, тем больше в нём дыр. Чем больше дыр, тем меньше в нём собственно сыра. Значит, чем больше сыра, тем меньше сыра!
  • GerdtR wrote:Ой :) Понял, исправлю)
    Только вчера смотрел:
    -Это Эврика, сэр! Приоритетная ситуация номер один!
    -Соберите всех в гостиной! Тема совещания "А я вам говорил!"
    Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
  • Дал каждому потоку свой стек и диалог теперь в своём собственном буфере рисует. Вроде теперь толпы багов должны исчезнуть. И осталось сделать красивую менюшку.
    Чем больше сыра, тем больше в нём дыр. Чем больше дыр, тем меньше в нём собственно сыра. Значит, чем больше сыра, тем меньше сыра!
  • Akyltist wrote:3. Понимаю что даже в винде так, но там это визуально сопровождается выделением при наведении, здесь же пока не кликнешь не увидишь) Мож не баг, мож фича собственно это уже так, искуственно - мне не мешает:
    Image
    С этим багом сложно что-то сделать. Можно, конечно, при клике искать не ту иконку, в области какой кликнули, а ту, центр которой ближе к точке клика... вроде даже не сложно, но баг просто менее заметен будет. Не сильно поможет. Пускай будет как есть.
    Чем больше сыра, тем больше в нём дыр. Чем больше дыр, тем меньше в нём собственно сыра. Значит, чем больше сыра, тем меньше сыра!
  • При вызове меню правой кнопкой мыши с открытым диалогом свойств:
    Spoiler:
    1221.PNG
    1221.PNG (97.9 KiB)
    Viewed 4777 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
  • Опять со стеком прошляпил :(
    Чем больше сыра, тем больше в нём дыр. Чем больше дыр, тем меньше в нём собственно сыра. Значит, чем больше сыра, тем меньше сыра!
  • Сделал менюшку как в сишной версии. И стек теперь у каждого свой, за исключением стека для окна при перетаскивании и окна менюшки. Ну одновременно эти два потока никак не запустить.
    Чем больше сыра, тем больше в нём дыр. Чем больше дыр, тем меньше в нём собственно сыра. Значит, чем больше сыра, тем меньше сыра!
  • Уже близко к идеалу. Хочу только попросить добавить ободок и сделать выделенный элемент более контасным (использовать цвета кнопки), как на скрине.
    Attachments
    Screenshot_1.png
    Screenshot_1.png (13.72 KiB)
    Viewed 4748 times
    Из хаоса в космос
  • Who is online

    Users browsing this forum: No registered users and 3 guests