Board.KolibriOS.org

Official KolibriOS board
It is currently Thu Jan 23, 2020 6:06 am

All times are UTC+03:00




Post new topic  Reply to topic  [ 400 posts ]  Go to page Previous 117 18 19 20 2127 Next
Author Message
PostPosted: Sat Oct 19, 2013 9:30 pm 
Offline
User avatar

Joined: Fri Jan 27, 2006 3:06 pm
Posts: 1071
О, спасибо, кое-что начало доходить.


Top
   
PostPosted: Mon Oct 28, 2013 11:42 am 
Offline

Joined: Sun Oct 30, 2011 6:43 pm
Posts: 1499
У меня progressbar_draw получилась не thread-safe из-за
Quote:
; ............................
mov [.last_esp], esp
; ............................
mov esp, [.last_esp]
; ............................
.last_esp dd 0
Я нигде не нашёл таких требований к этой библиотеке, но, думаю, что лучше было бы переделать.


Top
   
PostPosted: Mon Oct 28, 2013 12:16 pm 
Offline
Kernel Developer

Joined: Sun Feb 10, 2013 12:37 pm
Posts: 2329
Ты специально так пишешь? Я опять ни хрена не понял.

_________________
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!


Top
   
PostPosted: Mon Oct 28, 2013 12:47 pm 
Offline

Joined: Sun Oct 30, 2011 6:43 pm
Posts: 1499
Mario_r4, вот полностью подпрограмма полной перерисовки ProgressBar-а:
Spoiler: Show
Code:
progressbar_draw:
        pushad
        mov    ebp, esp       
; draw frame
        push   ebp
        mov    [.last_esp], esp
        mov    eax, pb
        mov    esi, [eax + PB_LEFT]
        mov    edi, [eax + PB_TOP]
        mov    ebp, [eax + PB_WIDTH]
        add    ebp, esi
        dec    ebp
        mov    esp, [eax + PB_HEIGHT]
        add    esp, edi
        dec    esp
        mov    edx, [eax + PB_FRAME_COLOR]
        mov    eax, 38
        mov    ebx, esi
        shl    ebx, 16
        add    ebx, ebp
        mov    ecx, edi
        shl    ecx, 16
        add    ecx, edi
        int    64
        mov    ecx, esp
        shl    ecx, 16
        add    ecx, esp
        int    64   
        mov    bx, si
        mov    ecx, edi
        shl    ecx, 16
        add    ecx, esp
        int    64   
        mov    ebx, ebp
        shl    ebx, 16
        add    ebx, ebp
        int    64     
        mov    esp, [.last_esp]
        pop    ebp
; if min > max then .skip
        mov    eax, pb
        mov    edx, [eax + PB_MAX]
        mov    ecx, [eax + PB_MIN]
        cmp    ecx, edx
        ; jg     .skip
        jne    .min_no_eq_max
        dec    edx
.min_no_eq_max:       
; draw all progress rectangle
        call   get_progress_width
        mov    edi, eax
        mov    eax, pb       
        mov    ebx, [eax + PB_LEFT]
        inc    ebx
        shl    ebx, 16
        add    ebx, edi
        mov    ecx, [eax + PB_TOP]
        inc    ecx
        shl    ecx, 16
        add    ecx, [eax + PB_HEIGHT]
        dec    ecx
        dec    ecx
        mov    edx, [eax + PB_PROGRESS_COLOR]
        mov    eax, 13
        int    64
; draw last part of non-progress rectangle
; edi = pW, esi = W - 2
        sub    esi, edi ; width
        shr    ebx, 16
        add    ebx, edi
        shl    ebx, 16
        add    ebx, esi
        mov    esi, pb
        mov    edx, [esi + PB_BACK_COLOR]
        int    64       
; .skip:
        popad
        ret    4
.last_esp dd 0
Ведь несколько потоков, вызывающих её одновременно, могут неправильно работать? Или если ядро создаст копию страницы, то всё будет нормально?


Top
   
PostPosted: Mon Oct 28, 2013 12:55 pm 
Offline
Kernel Developer

Joined: Sun Feb 10, 2013 12:37 pm
Posts: 2329
0CodErr
Каждый поток должен работать со своим блоком данных. Не нужно создавать самому себе проблемы.

_________________
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!


Top
   
PostPosted: Sun Nov 03, 2013 5:47 pm 
Offline
Kernel Developer

Joined: Sun Feb 10, 2013 12:37 pm
Posts: 2329
SVN r.4154 - FileBrowser проверка данных перед выделением файлов (клавиша Insert или правый клик мыши в OpenDialog).

_________________
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!


Top
   
PostPosted: Sun Nov 03, 2013 6:02 pm 
Offline
Kernel Developer

Joined: Sun Feb 10, 2013 12:37 pm
Posts: 2329
SVN r.4155 - FileBrowser проверка данных перед: выделением всех файлов, снятием выделения всех файлов и инвертированием выделения всех файлов.

_________________
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!


Top
   
PostPosted: Sun Nov 17, 2013 4:07 pm 
Offline

Joined: Sun Oct 30, 2011 6:43 pm
Posts: 1499
ProgressBar example:
Attachment:
File comment: pb_test.asm + pb_test.kex + make.bat
compile with fasm or nasm

PB_test.7z [1.56 KiB]
Downloaded 110 times


Top
   
PostPosted: Tue Nov 19, 2013 10:10 pm 
Offline
User avatar

Joined: Sat Oct 05, 2013 9:32 pm
Posts: 386
Не знаю даже, нужно ли это в новую тему...
Slidebox
Структура:
Code:
struct slidebox
    x        dd ?     ; 000        ; Начало блока
    y        dd ?     ; 004        ;
    width    dd ?     ; 008        ; Ширина блока (высота равна 20px)
    text     dd ?     ; 012        ; Текст
    _button  dd ?     ; 016        ; 0x60000000 + ID кнопки, автоматически устанавливается библиотекой, МЕНЯТЬ НЕЛЬЗЯ!!!!
    on_click dd ?     ; 020        ; Адрес процедуры, которая будет вызываться при клике, если 0, то вызывается пустая процедура(определена в библиотеке)
    color    dd ?     ; 024        ; Адрес на структуру system_colors
    value    db ?     ; 028        ; Значение (1/0). Динамически меняется
ends

Блок слайдбокса - область, на которой рисуется слайдбокс, текст и кнопка. Кнопка занимает всю область.
Attachment:
[The extension bmp has been deactivated and can no longer be displayed.]



Процедуры:
1) slidebox.init (_slidebox)
Инициализирует слайдбокс, по сути просто устанавливает ID кнопки и процедуру клика. В качестве параметра нужно передать адрес на структуру _slidebox.
2)slidebox.draw (_slidebox)
Рисует кнопку, текст и сам слайдбокс. В качестве параметра нужно передать адрес на структуру _slidebox.
3) slidebox.update_button (btn, _slidebox)
Проверяет нажатие на слайдбокс. При нажатии меняет значение и вызывает процедуру [_slidebox.on_click]. В качестве параметра нужно передать результат возврата сф 17 и адрес на структуру _slidebox.


Пока что слайдбокс написан в INC файле, но это сделано для упрощения тестинга.


Пример 1: при нажатии на кнопку у окна будет появляться/исчезать заголовок, в зависимости от значения слайдбокса.
Spoiler: Show
Code:
    use32
    org     0x0
;-------------------------------------------------------------------------------
    db       "MENUET01"
    dd       1, @code, @data, @mem, @stack, 0, 0
;-------------------------------------------------------------------------------
    include "macros.inc"
    include "slidebox_flat.inc"
;===============================================================================
@code:
    mcall   48, 3, color, 40
;-------------------------------------------------------------------------------
    mov     [slidebox1.x],     10
    mov     [slidebox1.y],     10
    mov     [slidebox1.width], 226
    mov     [slidebox1.text],  slidebox1_text
    mov     [slidebox1.value], 0
    mov     [slidebox1.color], color

    push    slidebox1
    call    slidebox.init
;-------------------------------------------------------------------------------
main_loop:
    mcall   10
    cmp     eax, EV_REDRAW
    je       event_redraw
    cmp     eax, EV_BUTTON
    je       event_button

    jmp     main_loop
;-------------------------------------------------------------------------------
exit:
    mcall   -1
;-------------------------------------------------------------------------------
event_redraw:
    call    win.draw
    jmp     main_loop
;-------------------------------------------------------------------------------
event_button:
    mcall   17
    cmp     ah, 1
    je       exit
    cmp     ah, 2
    je       .header_apply

    push    slidebox1
    push    eax
    call    slidebox.update_button

    jmp     main_loop

 .header_apply:
    cmp     [slidebox1.value], byte 1
    je       @f
    mcall   71, 1, 0
    jmp     main_loop
  @@:
    mcall   71, 1, win.title
    jmp     main_loop
;-------------------------------------------------------------------------------
win.draw:
    mcall   12, 1

    mov     edx, [color.work]
    or       edx, 0x34000000
    mcall   0, <128, 256>, <128, 96>

    mcall   8, <168, 64>, <42, 20>, 2, [color.work_button]
    mcall   4, <186, 49>, [color.work_button_text], button1_text, 5

    push    slidebox1
    call    slidebox.draw

    mcall   12, 2

    ret
;===============================================================================
slidebox1_text:
    db       "Draw header", 0
button1_text:
    db       "Apply", 0
win.title:
    db       "Slidebox example", 0
@data:
;===============================================================================
    rb       2048
@stack:
;-------------------------------------------------------------------------------
color       system_colors
slidebox1   slidebox

@mem:

Пример 2: при нажатии на слайдбокс у окна будет появляться/исчезать заголовок, в зависимости от значения слайдбокса.
Spoiler: Show
Code:
    use32
    org     0x0
;-------------------------------------------------------------------------------
    db       "MENUET01"
    dd       1, @code, @data, @mem, @stack, 0, 0
;-------------------------------------------------------------------------------
    include "macros.inc"
    include "slidebox.inc"
;===============================================================================
@code:
    mcall   48, 3, color, 40
;-------------------------------------------------------------------------------
    mov     [slidebox1.x],     10
    mov     [slidebox1.y],     10
    mov     [slidebox1.width], 226
    mov     [slidebox1.text],  slidebox1_text
    mov     [slidebox1.value], 0
    mov     [slidebox1.color], color
    mov     [slidebox1.on_click], slidebox1.event_click

    push    slidebox1
    call    slidebox.init
;-------------------------------------------------------------------------------
main_loop:
    mcall   10
    cmp     eax, EV_REDRAW
    je       event_redraw
    cmp     eax, EV_BUTTON
    je       event_button

    jmp     main_loop
;-------------------------------------------------------------------------------
exit:
    mcall   -1
;-------------------------------------------------------------------------------
event_redraw:
    call    win.draw
    jmp     main_loop
;-------------------------------------------------------------------------------
event_button:
    mcall   17
    cmp     ah, 0x01
    je       exit

    push    slidebox1
    push    eax
    call    slidebox.update_button

    jmp     main_loop
;-------------------------------------------------------------------------------
win.draw:
    mcall   12, 1

    mov     edx, [color.work]
    or       edx, 0x34000000
    mcall   0, <128, 256>, <128, 64>

    push    slidebox1
    call    slidebox.draw

    mcall   12, 2

    ret
;-------------------------------------------------------------------------------
slidebox1.event_click:
    cmp     [slidebox1.value], byte 1
    je       @f
    mcall   71, 1, 0
    ret
  @@:
    mcall   71, 1, win.title
    ret
;===============================================================================
slidebox1_text:
    db       "Draw header", 0
win.title:
    db       "Slidebox example", 0
@data:
;===============================================================================
    rb       2048
@stack:
;-------------------------------------------------------------------------------
color       system_colors
slidebox1   slidebox

@mem:



В архиве две версии slidebox.
Attachment:
slidebox.7z [1.58 KiB]
Downloaded 104 times


Attachments:
slidebox.gif
slidebox.gif [ 605 Bytes | Viewed 3515 times ]
Top
   
PostPosted: Fri Nov 22, 2013 1:27 am 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 5078
Не поленился собрал. Ну чё, круто :) В Колибри такого user experience'a ещё не было.
Только определись со стилем. Желательно, чтобы был один вариант дизайна.

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


Top
   
PostPosted: Sun Nov 24, 2013 1:59 am 
Offline
Mentor/Kernel Developer
User avatar

Joined: Fri Jun 30, 2006 9:01 am
Posts: 1248
How can one make the scrollbar work with scrollwheel?
I had hoped to set a bit to mark a scrollbar as active, and this scrollbar then accepts the mouse events...

Is it true that I need to manually catch the events, and increase/decrease values in the scrollbar structure?

_________________
"Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius -- and a lot of courage -- to move in the opposite direction." Albert Einstein


Top
   
PostPosted: Sun Nov 24, 2013 2:23 am 
Offline
Kernel Developer

Joined: Sun Feb 10, 2013 12:37 pm
Posts: 2329
ScrollBar by itself does not work with scrollwheel. So yes, you have to do it yourself.

_________________
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!


Top
   
PostPosted: Mon Jan 06, 2014 4:02 am 
Offline

Joined: Tue Apr 12, 2011 11:19 pm
Posts: 1151
По поводу edit'а
Так понимаю:
shift - позиция после начала выделения
shift_old - позиция до выделения

Правильно? И эта позиция в символах?

_________________
я лишь учусь


Top
   
PostPosted: Mon Jan 06, 2014 8:47 am 
Offline
Kernel Developer

Joined: Sun Feb 10, 2013 12:37 pm
Posts: 2329
Если хочешь ускорить результат, то лучше автору в личку скинуть (письмо продублируется на мыло), еще можно в ВК сообщение дать.

_________________
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!


Top
   
 Post subject:
PostPosted: Mon Jan 06, 2014 8:58 am 
Offline

Joined: Tue Apr 12, 2011 11:19 pm
Posts: 1151
Мне гараздо важнее полученный опыт.

_________________
я лишь учусь


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 400 posts ]  Go to page Previous 117 18 19 20 2127 Next

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 1 guest


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