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] ;старое положение курсора
еще нужно предварительно проверять флаги, вероятно:
Однако 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:
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) и возможность заливки всего элемента.
Вот пример использования
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, да и часть разработчиков уже разбиралась в деталях, может сформировать общие пожелания ?