Page 21 of 29

Re: box_lib.obj - библиотека gui компонентов

Posted: Sun Jun 15, 2014 4:21 pm
by right-hearted
0CodErr wrote:right-hearted, ты привёл не весь код, и не известно, что должно было работать, а что — нет. Пока что не понятно, где именно ты предлагаешь искать ошибки.
Могу предоставить полный код
main.c
Spoiler:

Code: Select all

#include <kos32sys.h>
#include "box_lib.h"


const char *header= "Header";
const char *string= "Super word";
char *screen= "some text";


unsigned int mouse_dd=0;

void drawEditBox(){

		edit_box ed_bx= {250,55,34,0x00ffff,0x94AECE,0xffffff,0xffffff,0,sizeof(screen),screen,mouse_dd,2,19,19};
		edit_box_draw(ed_bx);
	}

void draw_window(void)
{
    BeginDraw();
	DrawWindow(100,100,500,300,header,0x33FFFFFF,1);
	
        drawEditBox();
     
    EndDraw();

}

int main(void)
{
	load_box_lib();
	draw_window();

	for (;;)
	{
		switch (check_os_event())
		{
		case 1:
			draw_window();
			break;
		case 2:
			break;
		case 3:
			// button pressed; we have only one button, close
			board_puts("DUMMY: Button pressed \n");
			return -1;
		}
	}
}
box_lib.c
Spoiler:

Code: Select all

#include <kos32sys.h>
#include "box_lib.h"
struct_import* lib_load(char *name)
{
        struct_import* val;
        asm volatile ("int $0x40":"=a"(val):"a"(68), "b"(19), "c"(name));
        return val;
}

void* lib_procload (struct_import *imp, char *name)
{
        int i;
        for (i=0;;i++)
                if ( NULL == ((imp+i) -> name))
                        break;
                else
                        if ( 0 == strcmp(name, (imp+i)->name) )
                                return (imp+i)->data;
        return NULL;
}



void load_box_lib(){
        struct_import *k;
        k = lib_load("/sys/lib/box_lib.obj");
        if (k==NULL){board_puts("DUMMY: Could not load box_lib \n");}
        else board_puts(" box_lib successfully loaded\n");

        
        if(lib_procload(k, "edit_box") == NULL){board_puts("DUMMY: procload failed \n");}
        else board_puts(" procload success \n");
       
        edit_box_draw = (__stdcall void (*) (edit_box))lib_procload(k, "edit_box");
  
        edit_box_key = (__stdcall void (*) (edit_box))lib_procload(k, "edit_box_key");

        edit_box_mouse = (__stdcall void (*) (edit_box))lib_procload(k, "edit_box_mouse");

 
        if (edit_box_draw == NULL || edit_box_key == NULL || edit_box_mouse == NULL)
                board_puts(" some of functions cannot be loaded! \n");

}
box_lib.h
Spoiler:

Code: Select all

#ifndef __BOX_LIB_H__
#define __BOX_LIB_H__
typedef struct __attribute__((packed))
{
	char	*name __attribute__((packed));
	void	*data __attribute__((packed));
} struct_import;

typedef struct edit_box edit_box;
struct edit_box
{	
	int width;
	int left; 
	int top; 
	int color; 
	int shift_color; 
	int focus_border_color; 
	int blur_border_color;
	int text_color; 
	int max; 
	char *text; 
	int mouse_variable; 
	int flags;
	int size;
	int pos;
	int offset;
	int cl_curs_x;
	int cl_curs_y; 
	int shift;
	int shift_old;
};

struct_import* lib_load(char *name);
void* lib_procload (struct_import *imp, char *name);
void load_box_lib();

void (* __stdcall edit_box_draw)(edit_box bx);
void (* __stdcall edit_box_key)(edit_box bx);
void (* __stdcall edit_box_mouse)(edit_box bx);
#endif

Posted: Tue Nov 25, 2014 10:24 pm
by punk_joker
Какая переменная отвечает за позицию начала выделения в edit?

Re:

Posted: Wed Nov 26, 2014 12:44 am
by Mario_r4
punk_joker wrote:Какая переменная отвечает за позицию начала выделения в edit?
Скорее всего за это отвечает:

Code: Select all

ed_shift_pos    equ [edi+68]            ;положение курсора
ed_shift_pos_old equ [edi+72]           ;старое положение курсора
еще нужно предварительно проверять флаги, вероятно:

Code: Select all

ed_shift_on=                1000b
Однако 100% не ручаюсь, так как не я автор кода. Просто мельком посмотрел код.

Posted: Tue Jan 13, 2015 12:06 am
by ddarias
What field of the optionbox struct store the status (checked / unchecked) of the checkbox? I think maybe the field flags, but I do not know how to set up initial value, and in my test this value never change, always is 0.
Sorry for bad English, my native lenguage is spanish.

Re: box_lib.obj - библиотека gui компонентов

Posted: Tue Jan 13, 2015 6:23 pm
by IgorA
CheckBox:

Code: Select all

ch1 check_box2 (5 shl 16)+12,  (5 shl 16)+12, 6, 0xffffd0, 0x800000, 0, ch_text1, ch_flag_en
;.........

bt dword[ch1.flags],1
jnc @f
   ;......... code if checked .........
@@:
OptionBox:

Code: Select all

struc option_box point_gr,left,top,op_text_margin,op_size,color,border_color,text_color,text,op_text_length,flags
{        ;структура параметров для чек бокса
op_flag_en=10b
.option_group   dd point_gr
.left           dw left                 ;+0 ;положение по х
.top            dw top                  ;положение по у
.ch_text_margin dd op_text_margin       ;расстояние от прямоугольника чек бокса до надписи
.ch_size        dd op_size              ;размер квадрата чек бокса, для примера 12
.color          dd color                ;цвет внутри чекбокса
.border_color   dd border_color         ;цвет рамки
.text_color     dd text_color           ;цвет надписи
.text           dd text                 ;адрес в коде программы где расположен текст
.ch_text_length dd op_text_length       ;длинна строки с символами
.flags          dd flags+0              ; флаги
}
If optionbox is checked then point_gr = & ( selected optionbox struct )

Re: box_lib.obj - библиотека gui компонентов

Posted: Tue Jan 13, 2015 7:22 pm
by ddarias
Thanks for your reply IgorA , I'll try to test later, when I have free time.

Re: box_lib.obj - библиотека gui компонентов

Posted: Wed Nov 11, 2015 1:56 pm
by IgorA
rev 5911
Изменил функции в элементе tree_list на формат вызова __stdcall, т. е. сделал правильный порядок вызова аргументов и возвращаемые значения пишутся в eax а не в стек как было раньше.
Исправил 5 программ, которые используют этот элемент, осталось еще исправить 2 малоиспользуемые программы (logik elements, kolibri fasm editor).
Раньше когда создавал элемент, то еще не знал как правильно в __stdcall передавать параметры. Теперь элемент tree_list можно использовать не только в программах на asm, но и на C++.

Re: box_lib.obj - библиотека gui компонентов

Posted: Sat Jan 02, 2016 10:54 pm
by hidnplayr
Is somebody still managing this code?
Does anyone have the ambition to add big font support for editbox?
And what about UTF-8 support?

Re: box_lib.obj - библиотека gui компонентов

Posted: Tue Jan 05, 2016 8:20 am
by Pathoswithin
Вообще, хороший вопрос, как добавить поддержку большого шрифта в editbox? Нужен соответствующий параметр, но куда его воткнуть?

Re: box_lib.obj - библиотека gui компонентов

Posted: Mon Oct 10, 2016 6:14 pm
by 0CodErr
Хочу добавить во Frame некоторые новые возможности(стили рамки, заливка всего элемента). Я использую для флагов поле fr_draw_text_flag, оно у меня теперь называется fr_flags.

Code: Select all

fr_flags = [x][yyy][z]
z    -  Caption
yyy  -  BorderStyle
x    -  BackStyle
Но это всё обратно совместимо.

Только непонятно, что делать с шапкой "Copyright (c) 2013, Marat Zakiyanov...... ", от кода Mario осталось совсем немного. Наверное, просто добавлю ещё сверху текст о том, что я добавил в 2016 году.
Это вот скриншот тут
Spoiler:Image

Re: box_lib.obj - библиотека gui компонентов

Posted: Mon Oct 10, 2016 7:08 pm
by Pathoswithin
Если остался кусок его кода, то копирайт придётся оставить. Если осталось несколько отдельных строк, то можно заменить на стандартную шапку.

Re: box_lib.obj - библиотека gui компонентов

Posted: Mon Oct 10, 2016 10:03 pm
by 0CodErr
Добавил в #6586 стили рамки(raised, sunken, etched, ridged) и возможность заливки всего элемента.
Вот пример использования
frame_test.7z (1.31 KiB)
Downloaded 208 times

Re: box_lib.obj - библиотека gui компонентов

Posted: Fri Oct 14, 2016 5:25 pm
by //DG
Друзья! У меня простой вопрос: как я вижу, вы передаете в библиотеку напрямую структуру данных, без указания ее длины. Как вы собираетесь структуры расширять и наращивать без потери совместимости?

Re: box_lib.obj - библиотека gui компонентов

Posted: Fri Oct 14, 2016 6:11 pm
by Leency
Пора делать версию компонента Edit для большого шрифта.

Re: box_lib.obj - библиотека gui компонентов

Posted: Tue Oct 25, 2016 3:01 pm
by Siemargl
Leency wrote:Пора делать версию компонента Edit для большого шрифта.
Не только editbox, но и остальных.

Заодно отпишу тут пару багов и пожеланий к апгрейду
1. Browser не использует select_text_color, хотя на ходовые качества не влияет, но может была какая то задумка ?
2. Нужна везде поддержка размера шрифта (банально мелко, и худ.дизайн ограничивает), в т.ч
2.1 Tree_list - залочен на 6x8, при попытке задать высоту иконки 0 (так понимаю связано с расчетом положения текста) крашится
2.2 t_edit при рисовании большим шрифтом вылезает квадратиками за границу отведенного ему места
3. Editbox требует чтобы клавиатура была в ASCII mode, а Menu и t_edit в режиме сканкодов
4. t_edit требует минимум одно слово в таблице расцветки, иначе краш
5. tree_list иногда при свертывании/развертывании разных узлов отрабатывает щелчок дважды
6. tree_list при отсутствии иконок рисует квадратик цвета текста, лучше бы совсем не рисовал или уж фоном.
7. d_button срабатывает по нажатию кнопки, но не отпусканию, возможно не только он
8. t_edit всегда рисует поля с номерами строк и верхнее, компоненту это не всегда нужно
9. t_edit не отрабатывает Таб. А как ее отрабатывать? - это с п8 тянет какой то набор настроек редактора

Ну и еще в целом,
А. Компоненты выглядят как то "не стильно" (
Б. Отсутствует защита от некорректных параметров - очень легко "падают"

Я так понимаю, из живых авторов тут IgorA, да и часть разработчиков уже разбиралась в деталях, может сформировать общие пожелания ?