Board.KolibriOS.org

Официальный форум KolibriOS
Текущее время: Чт июл 19, 2018 2:54 pm

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 372 сообщения ]  На страницу Пред. 117 18 19 20 2125 След.
Автор Сообщение
СообщениеДобавлено: Сб окт 19, 2013 9:30 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Пт янв 27, 2006 3:06 pm
Сообщения: 1069
О, спасибо, кое-что начало доходить.


Вернуться к началу
СообщениеДобавлено: Пн окт 28, 2013 11:42 am 
Не в сети

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


Вернуться к началу
СообщениеДобавлено: Пн окт 28, 2013 12:16 pm 
Не в сети
Kernel Developer

Зарегистрирован: Вс фев 10, 2013 12:37 pm
Сообщения: 2329
Ты специально так пишешь? Я опять ни хрена не понял.

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


Вернуться к началу
СообщениеДобавлено: Пн окт 28, 2013 12:47 pm 
Не в сети

Зарегистрирован: Вс окт 30, 2011 6:43 pm
Сообщения: 1295
Mario_r4, вот полностью подпрограмма полной перерисовки ProgressBar-а:
Спойлер: Показать
Код:
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
Ведь несколько потоков, вызывающих её одновременно, могут неправильно работать? Или если ядро создаст копию страницы, то всё будет нормально?


Вернуться к началу
СообщениеДобавлено: Пн окт 28, 2013 12:55 pm 
Не в сети
Kernel Developer

Зарегистрирован: Вс фев 10, 2013 12:37 pm
Сообщения: 2329
0CodErr
Каждый поток должен работать со своим блоком данных. Не нужно создавать самому себе проблемы.

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


Вернуться к началу
СообщениеДобавлено: Вс ноя 03, 2013 5:47 pm 
Не в сети
Kernel Developer

Зарегистрирован: Вс фев 10, 2013 12:37 pm
Сообщения: 2329
SVN r.4154 - FileBrowser проверка данных перед выделением файлов (клавиша Insert или правый клик мыши в OpenDialog).

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


Вернуться к началу
СообщениеДобавлено: Вс ноя 03, 2013 6:02 pm 
Не в сети
Kernel Developer

Зарегистрирован: Вс фев 10, 2013 12:37 pm
Сообщения: 2329
SVN r.4155 - FileBrowser проверка данных перед: выделением всех файлов, снятием выделения всех файлов и инвертированием выделения всех файлов.

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


Вернуться к началу
СообщениеДобавлено: Вс ноя 17, 2013 4:07 pm 
Не в сети

Зарегистрирован: Вс окт 30, 2011 6:43 pm
Сообщения: 1295
ProgressBar example:
Вложение:
Комментарий к файлу: pb_test.asm + pb_test.kex + make.bat
compile with fasm or nasm

PB_test.7z [1.56 КБ]
84 скачивания


Вернуться к началу
СообщениеДобавлено: Вт ноя 19, 2013 10:10 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Сб окт 05, 2013 9:32 pm
Сообщения: 386
Не знаю даже, нужно ли это в новую тему...
Slidebox
Структура:
Код:
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

Блок слайдбокса - область, на которой рисуется слайдбокс, текст и кнопка. Кнопка занимает всю область.
Вложение:
[Расширение bmp было запрещено, вложение больше недоступно.]



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


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


Пример 1: при нажатии на кнопку у окна будет появляться/исчезать заголовок, в зависимости от значения слайдбокса.
Спойлер: Показать
Код:
    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: при нажатии на слайдбокс у окна будет появляться/исчезать заголовок, в зависимости от значения слайдбокса.
Спойлер: Показать
Код:
    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.
Вложение:
slidebox.7z [1.58 КБ]
76 скачиваний


Вложения:
slidebox.gif
slidebox.gif [ 605 байт | 2929 просмотров ]
Вернуться к началу
СообщениеДобавлено: Пт ноя 22, 2013 1:27 am 
Не в сети
Designer
Аватара пользователя

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

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


Вернуться к началу
СообщениеДобавлено: Вс ноя 24, 2013 1:59 am 
Не в сети
Mentor/Kernel Developer
Аватара пользователя

Зарегистрирован: Пт июн 30, 2006 9:01 am
Сообщения: 1238
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


Вернуться к началу
СообщениеДобавлено: Вс ноя 24, 2013 2:23 am 
Не в сети
Kernel Developer

Зарегистрирован: Вс фев 10, 2013 12:37 pm
Сообщения: 2329
ScrollBar by itself does not work with scrollwheel. So yes, you have to do it yourself.

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


Вернуться к началу
СообщениеДобавлено: Пн янв 06, 2014 4:02 am 
Не в сети

Зарегистрирован: Вт апр 12, 2011 11:19 pm
Сообщения: 1091
По поводу edit'а
Так понимаю:
shift - позиция после начала выделения
shift_old - позиция до выделения

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

_________________
я лишь учусь


Вернуться к началу
СообщениеДобавлено: Пн янв 06, 2014 8:47 am 
Не в сети
Kernel Developer

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

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


Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: Пн янв 06, 2014 8:58 am 
Не в сети

Зарегистрирован: Вт апр 12, 2011 11:19 pm
Сообщения: 1091
Мне гараздо важнее полученный опыт.

_________________
я лишь учусь


Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 372 сообщения ]  На страницу Пред. 117 18 19 20 2125 След.

Часовой пояс: UTC+03:00


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB