From cf508277c3951ab163dbacaeb9a5a5dfa3f65702 Mon Sep 17 00:00:00 2001 From: IgorA Date: Thu, 30 Sep 2010 21:07:09 +0000 Subject: [PATCH] 1) 'buf2d.obj' new function 'buf2d_rect_by_size' 2) 'box_lib.obj' fix function 'tl_node_poi_get_data' git-svn-id: svn://kolibrios.org@1634 a494cfbc-eb01-0410-851d-a64ba20cac60 --- .../trunk/doc/tree_list/info_treelist.htm | 111 +++++++++++------- .../libraries/box_lib/trunk/tree_list.mac | 4 +- .../develop/libraries/buf2d/trunk/about.htm | 8 ++ .../develop/libraries/buf2d/trunk/buf2d.asm | 51 ++++++++ 4 files changed, 130 insertions(+), 44 deletions(-) diff --git a/programs/develop/libraries/box_lib/trunk/doc/tree_list/info_treelist.htm b/programs/develop/libraries/box_lib/trunk/doc/tree_list/info_treelist.htm index 203dadb44c..d697ccd6b2 100644 --- a/programs/develop/libraries/box_lib/trunk/doc/tree_list/info_treelist.htm +++ b/programs/develop/libraries/box_lib/trunk/doc/tree_list/info_treelist.htm @@ -30,9 +30,9 @@
  • tl_node_lev_dec
  • tl_node_move_up
  • tl_node_move_down
  • -
  • tl_node_poi_get_info
  • -
  • tl_node_poi_get_next_info
  • -
  • tl_node_poi_get_data
  • +
  • tl_node_poi_get_info
  • +
  • tl_node_poi_get_next_info
  • +
  • tl_node_poi_get_data
  • tl_save_mem
  • tl_load_mem
  • tl_get_mem_size
  • @@ -76,10 +76,10 @@

    tl_node_add

    Добавляет узел, в позицию указанную курсором. Пример добавления узла:

    -
      push dword tree1
    -  push dword 0x10002
    -  push dword data_buffer
    -  call dword[tl_node_add]
    +
    	push dword tree1
    +	push dword 0x10002
    +	push dword data_buffer
    +	call dword[tl_node_add]

    где: tree1 - структура tree_list; 0x10002 - параметры узла (старшие байты 0x0001 - индекс иконки, отображаемой возле узла; меньший байт 0x02 - уровень вложености узла); data_buffer - указатель на дынные, добавляемые в узел.

    @@ -134,36 +134,57 @@ pop edi esi ecx

    tl_node_move_up

    Перемещает вверх узел под курсором. Вместе с узлом двигается также и курсор. Пример использования функции:

    -
      push dword tree1
    -  call dword[tl_node_move_up] ;переместить узел
    +
    	push dword tree1
    +	call dword[tl_node_move_up] ;переместить узел

    где: tree1 - структура tree_list

    tl_node_move_down

    Перемещает вниз узел под курсором. Вместе с узлом двигается также и курсор. Пример использования функции:

    -
      push dword tree1
    -  call dword[tl_node_move_down] ;переместить узел
    +
    	push dword tree1
    +	call dword[tl_node_move_down] ;переместить узел

    где: tree1 - структура tree_list

    -

    tl_node_poi_get_info

    -

    Берет внутренний указатель на структуру описывающую узел.

    -

    tl_node_poi_get_next_info

    -

    Берет указатель на следующий элемент в цепи, без учета открытия/закрытия дочерних узлов.

    -

    tl_node_poi_get_data

    -

    Берет указатель на данные (пользовательские и подпись) из узла указанного в указателе.

    +

    tl_node_poi_get_info

    +

    Берет внутренний указатель на структуру описывающую узел. Пример использования функции:

    +
    	push dword tree1
    +	push dword 0
    +	call dword[tl_node_poi_get_info]
    +	pop esi
    +

    где: tree1 - структура tree_list; +0 - позиция узла, с которого берется указатель; +esi - указатель на структуру описывающую узел.

    -

    Функциями tl_node_poi_get_info, tl_node_poi_get_next_info и tl_node_poi_get_data можно считывать информацию о узлах элемента, при этом не меняя текущего положения курсора. Т. е. можно организовать доступ к даным элемента в "фоновом режиме".

    +

    tl_node_poi_get_next_info

    +

    Берет указатель на следующий элемент в цепи, без учета открытия/закрытия дочерних узлов. Пример использования функции:

    +
    	push tree1
    +	push esi
    +	call dword[tl_node_poi_get_next_info]
    +	pop esi ;переходим к следущему узлу
    +

    где: tree1 - структура tree_list; +esi - до вызова функции указатель на структуру описывающую узел, после вызова указатель на структуру описывающую следущий узел в цепи.

    + +

    tl_node_poi_get_data

    +

    Берет указатель на данные (пользовательские и подпись) из узла указанного в указателе. Пример использования функции:

    +
    	push dword tree1
    +	push dword esi
    +	call dword[tl_node_poi_get_data]
    +	pop eax ;получаем данные узла
    +

    где: tree1 - структура tree_list; +esi - указатель на структуру описывающую узел; +eax - указатель на данные узла, описааного в esi.

    +

    Указатель, возвращаемый функцией tl_node_poi_get_data аналогичен указателю возвращаемому функцией tl_node_get_data. Отличие функций в том, что tl_node_poi_get_data работает без задействования курсора. Функциями tl_node_poi_get_info, tl_node_poi_get_next_info и tl_node_poi_get_data можно считывать информацию о узлах элемента, при этом не меняя текущего положения курсора. Т. е. можно организовать доступ к даным элемента в "фоновом режиме".

    tl_save_mem

    Сохраняет информацию об узлах элемента в память. Пример использования функции:

    -
      MEM_SIZE equ 5000
    -  node_data rb MEM_SIZE
    +
    	MEM_SIZE equ 5000
    +	node_data rb MEM_SIZE
     .........
    -  push dword tree1
    -  push dword 0
    -  push dword node_data
    -  push dword MEM_SIZE
    -  call dword[tl_save_mem]
    -  pop eax
    + push dword tree1 + push dword 0 + push dword node_data + push dword MEM_SIZE + call dword[tl_save_mem] + pop eax

    где: tree1 - структура tree_list; 0 - опция сохранения в начало блока памяти (если = 1, то добавляет элемент после других сохраненных ранее); node_data - указатель на блок памяти; @@ -172,15 +193,15 @@ pop edi esi ecx

    tl_load_mem

    Загружает информацию об узлах элемента из памяти. Пример использования функции:

    -
      MEM_SIZE equ 5000
    -  node_data rb MEM_SIZE
    +
    	MEM_SIZE equ 5000
    +	node_data rb MEM_SIZE
     .........
    -  push dword tree1
    -  push dword 0
    -  push dword node_data
    -  push dword MEM_SIZE
    -  call dword[tl_load_mem]
    -  pop eax
    + push dword tree1 + push dword 0 + push dword node_data + push dword MEM_SIZE + call dword[tl_load_mem] + pop eax

    где: tree1 - структура tree_list; 0 - индекс считываемого элемента; node_data - указатель на блок памяти; @@ -197,8 +218,9 @@ pop edi esi ecx

    Структура tree_list

    struc tree_list info_size,info_max_count,style, img_cx,img_cy,\
    -    col_bkg,col_zag,col_txt, box_l,box_t,box_w,box_h, capt_cy,info_capt_offs,\
    -    info_capt_len,el_focus, p_scrol,on_press {
    +	col_bkg,col_zag,col_txt, box_l,box_t,box_w,box_h, capt_cy,info_capt_offs,\
    +	info_capt_len,el_focus, p_scrol,on_press
    +{
       .data_info  dd 0
       .info_size  dw info_size
       .info_max_count dd info_max_count
    @@ -232,20 +254,25 @@ pop edi esi ecx

    info_max_count - максимальное количество узлов, которые можно добавить в элемент.

    style - стили элемента.

    data_nodes - указатель на внутренние структуры узлов (TreeList).

    -

    data_img - указатель на изображения с иконками узлов.

    -

    data_img_sys - указатель на системные изображения (курсор, плюсики, линии, ... все кроме иконок узлов).

    +

    data_img - указатель на изображения с иконками узлов. Формат изображения такой же как и в сист. ф. 7: BBGGRRBBGGRR....

    +

    img_cx - ширина одной иконки.

    +

    img_cy - высота одной иконки.

    +

    data_img_sys - указатель на системные изображения (курсор, плюсики, линии, ... все кроме иконок узлов). Формат изображения такой же как и в сист. ф. 7: BBGGRRBBGGRR...

    +

    col_bkg - цвет фона.

    +

    col_zag - цвет строки заголовка (если она задана) и кнопок и ползунка вертикальной полосы прокрутки (если она есть).

    +

    col_txt - цвет текста.

    capt_cy - высота строки для подписи вверху элемента, если меньше 9 подпись не выводится.

    info_capt_len - длинна текста для подписи. Если равно 0, то длинна считается так: info_size - info_capt_offs.

    p_scrol - указатель на структуру скроллинга, связанного с данным элементом.

    -

    on_press - указатель на функцию, которая будет вызвана при нажитии [Enter]. Если указатель равен 0 то ничего не будет вызыватся.

    +

    on_press - указатель на функцию, которая будет вызвана при нажатии [Enter]. Если указатель равен 0 то ничего не будет вызываться.

    Рис. 2. Параметры info_size, info_capt_offs и info_capt_len в узле

    Пример создания структуры:

    tree1 tree_list 24,500, tl_draw_par_line+tl_list_box_mode, 16,16,\
    -    0x8080ff,0x0000ff,0xffffff, 10,35,200-16,285, 14,4,0,\
    -    el_focus, wScr,fun_on_enter
    + 0x8080ff,0x0000ff,0xffffff, 10,35,200-16,285, 14,4,0,\ + el_focus, wScr,fun_on_enter

    Стили элемента

    tl_key_no_edit

    @@ -256,6 +283,6 @@ pop edi esi ecx

    Стиль не отображает уровни (как в ListBox все узлы одного уровня).


    -

    Документация обновлялась последний раз 08.09.10.

    +

    Документация обновлялась последний раз 30.09.10.

    \ No newline at end of file diff --git a/programs/develop/libraries/box_lib/trunk/tree_list.mac b/programs/develop/libraries/box_lib/trunk/tree_list.mac index 47164828a7..e41d9e7f3a 100644 --- a/programs/develop/libraries/box_lib/trunk/tree_list.mac +++ b/programs/develop/libraries/box_lib/trunk/tree_list.mac @@ -1535,7 +1535,7 @@ align 4 tl_node_poi_get_data: ;взять указатель на данные узла push ebp mov ebp,esp - push eax ecx edi + push eax ecx edx edi mov edi,dword[ebp+12] mov edx,dword[ebp+8] @@ -1549,7 +1549,7 @@ tl_node_poi_get_data: ; add eax,dword[edi] mov dword[ebp+12],eax ;return node data pointer @@: - pop edi ecx eax + pop edi edx ecx eax pop ebp ret 4 diff --git a/programs/develop/libraries/buf2d/trunk/about.htm b/programs/develop/libraries/buf2d/trunk/about.htm index c2a1fcf723..f78fac59ed 100644 --- a/programs/develop/libraries/buf2d/trunk/about.htm +++ b/programs/develop/libraries/buf2d/trunk/about.htm @@ -113,6 +113,11 @@ buf_0:
    stdcall [buf2d_line], buf_0, 30,10, 110,70, 0xffff00 ;рисуем линию

    где buf_0 - структура буфера в котором будет рисоваться линия; 30, 10, 110, 70 - координаты линии; 0xffff00 - цвет линии.

    +

    buf2d_rect_by_size

    +

    Рисует прямоугольник, по двум координатам, 2-я координата задана по размеру.

    +
    stdcall [buf2d_rect_by_size], buf_0, 10,10,150,100, 0x8080
    +

    где buf_0 - структура буфера в котором будет рисоваться прямоугольник; 10, 10 - координаты левого верхнего угла; 150, 100 - размер прямоугольника; 0x8080 - цвет линии.

    +

    buf2d_circle

    Рисует в буфере окружность с заданным цветом и радиусом. Пример использования:

    stdcall [buf2d_circle], buf_0, 25, 70, 15, 0xff0000
    @@ -196,6 +201,7 @@ import_buf2d_lib: buf2d_draw dd sz_buf2d_draw buf2d_delete dd sz_buf2d_delete buf2d_line dd sz_buf2d_line + buf2d_rect_by_size dd sz_buf2d_rect_by_size buf2d_circle dd sz_buf2d_circle buf2d_img_hdiv2 dd sz_buf2d_img_hdiv2 buf2d_img_wdiv2 dd sz_buf2d_img_wdiv2 @@ -218,6 +224,7 @@ import_buf2d_lib: sz_buf2d_draw db 'buf2d_draw',0 sz_buf2d_delete db 'buf2d_delete',0 sz_buf2d_line db 'buf2d_line',0 + sz_buf2d_rect_by_size db 'buf2d_rect_by_size',0 sz_buf2d_circle db 'buf2d_circle',0 sz_buf2d_img_hdiv2 db 'buf2d_img_hdiv2',0 sz_buf2d_img_wdiv2 db 'buf2d_img_wdiv2',0 @@ -240,5 +247,6 @@ import_buf2d_lib: изменен формат буфера - для ширины и высоты используются 4-х байтные числа вместо 2-х байтных.

    29.07.10 - добавлены функции buf2d_crop_color и buf2d_offset_h; исправления в функции buf2d_delete.

    +

    30.09.10 - добавлена функция buf2d_rect_by_size.

    \ No newline at end of file diff --git a/programs/develop/libraries/buf2d/trunk/buf2d.asm b/programs/develop/libraries/buf2d/trunk/buf2d.asm index b7952be317..5dddf01d25 100644 --- a/programs/develop/libraries/buf2d/trunk/buf2d.asm +++ b/programs/develop/libraries/buf2d/trunk/buf2d.asm @@ -998,6 +998,55 @@ endl ret endp +;аЁб®ў ­ЁҐ Ј®аЁ§®­в «м­®© «Ё­ЁЁ, Ї®в®¬г ­Ґв Ї а ¬Ґва  coord_y0 +align 4 +proc buf_line_h, buf_struc:dword, coord_x0:dword, coord_y0:dword, coord_x1:dword, color:dword + pushad + mov edx,dword[color] + + mov eax,edi + mov edi,[buf_struc] + cmp buf2d_bits,24 + jne @f + + mov ebx,dword[coord_x0] + mov ecx,dword[coord_y0] + mov esi,dword[coord_x1] + + @@: ;for (x=x0 ; x