Page 1 of 5

[GSoC] Новая таблица системных цветов.

Posted: Wed Jul 03, 2013 7:55 pm
by Akyltist
Тема побудившая к созданию обсуждения: viewtopic.php?f=26&t=2331
О чём идет речь:
Spoiler:

Code: Select all

Подфункция 3 - получить стандартные цвета окон. 

Параметры: 
 eax = 48 - номер функции 
 ebx = 3 - номер подфункции 
 ecx = указатель на буфер размером edx байт, куда будет записана таблица 
 edx = размер таблицы цветов (должен быть 40 байт для будущей совместимости) 

Возвращаемое значение: 
 функция не возвращает значения 

Формат таблицы цветов: каждый элемент - dword-значение цвета 0x00RRGGBB 
 +0: dword: frames - цвет рамки 
 +4: dword: grab - цвет заголовка 
 +8: dword: grab_button - цвет кнопки на полосе заголовка 
 +12 = +0xC: dword: grab_button_text - цвет текста на кнопке на полосе заголовка 
 +16 = +0x10: dword: grab_text - цвет текста на заголовке 
 +20 = +0x14: dword: work - цвет рабочей области 
 +24 = +0x18: dword: work_button - цвет кнопки в рабочей области 
 +28 = +0x1C: dword: work_button_text - цвет текста на кнопке в рабочей области 
 +32 = +0x20: dword: work_text - цвет текста в рабочей области 
 +36 = +0x24: dword: work_graph - цвет графики в рабочей области
Речь идет об изменении размера таблицы цветов функции 48 подфункций 2 и 3.

Доступ к новой спецификации: ЧИТАТЬ ОНЛАЙН
Скачать одним архивом: СКАЧАТЬ

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

Предварительный набросок формата файла скинов.
Spoiler:

Code: Select all

;=============================================================================;
; Спецификация New Skin для операционной системы Kolibri                      ;
;=============================================================================;

; header ---------------------------------------------------------------------;
struct data_header
    header       db 'KSKIN'                                           ; +5    ;
    version      dw ?                                                 ; +7    ;
    null         db 0                                                 ; +8    ;
ends

; data -----------------------------------------------------------------------;
struct SKIN_DATA
    win.face     dd ? ; - Фон обводки активного окна.                 ; +12   ;
    win.inface   dd ? ; - Фон обводки неактивного окна.               ; +16   ;
    win.frame    dd ? ; - Цвет внешней рамки активного окна.          ; +20   ;
    win.inframe  dd ? ; - Цвет внешней рамки неактивного окна.        ; +24   ;
    win.border   dd ? ; - Цвет внутренней рамки активного окна.       ; +28   ;
    win.inborder dd ? ; - Цвет внутренней рамки неактивного окна.     ; +32   ;
    win.body     dd ? ; - Фон клиентской части активного окна.        ; +36   ;
    win.title    dd ? ; - Цвет текста полосы заголовка.               ; +40   ;
    win.text     dd ? ; - Цвет текста в рабочей области окна.         ; +44   ;
    win.graytext dd ? ; - Цвет неактивного текста.                    ; +48   ;
    child.body   dd ? ; - Фон дочерних потоков и меню приложения.     ; +52   ;
    child.text   dd ? ; - Цвет текста дочерних потоков и меню.        ; +56   ;
    panel.body   dd ? ; - Фон панелей приложения.                     ; +60   ;
    panel.text   dd ? ; - Цвет текста панелей приложения.             ; +64   ;
    hint.body    dd ? ; - Фон подсказки.                              ; +68   ;
    hint.text    dd ? ; - Цвет текста подсказки.                      ; +72   ;
    btn.face     dd ? ; - Фон кнопки.                                 ; +76   ;
    btn.inface   dd ? ; - Фон неактивной кнопки.                      ; +80   ;
    btn.fcface   dd ? ; - Фон кнопки при наведении.                   ; +84   ;
    btn.frame    dd ? ; - Цвет рамки кнопки.                          ; +88   ;
    btn.inframe  dd ? ; - Цвет рамки неактивной кнопки.               ; +92   ;
    btn.fcframe  dd ? ; - Цвет рамки кнопки при навдении.             ; +96   ;
    btn.text     dd ? ; - Цвет текста кнопки.                         ; +100  ;
    btn.intext   dd ? ; - Цвет текста неактивной кнопки.              ; +104  ;
    btn.fctext   dd ? ; - Цвет текста кнопки при наведении.           ; +108  ;
    3d.face      dd ? ; - Основной цвет наложения тени (скролл).      ; +112  ;
    3d.dark      dd ? ; - Теневая обводка.                            ; +116  ;
    3d.light     dd ? ; - Световая обводка.                           ; +120  ;
    3d.shadow    dd ? ; - Цвет тени для неактивных элементов.         ; +124  ;
    gui.face     dd ? ; - Фон элементов.                              ; +128  ;
    gui.inface   dd ? ; - Фон неактивных элементов.                   ; +132  ;
    gui.fcface   dd ? ; - Фон элементов при наведении.                ; +136  ;
    gui.frame    dd ? ; - Рамка элемента.                             ; +140  ;
    gui.inframe  dd ? ; - Рамка неактивного элемента.                 ; +144  ;
    gui.fcframe  dd ? ; - Рамка элемента при наведении.               ; +148  ;
    gui.text     dd ? ; - Цвет текста элемента.                       ; +152  ;
    gui.intext   dd ? ; - Цвет текста неактивного элемента.           ; +156  ;
    gui.fctext   dd ? ; - Цвет текста элемента при наведении.         ; +160  ;
    res.a        dd ? ; - Зарезервированно.                           ; +164  ;
    res.b        dd ? ; - Зарезервированно.                           ; +168  ;
    res.c        dd ? ; - Зарезервированно.                           ; +172  ;
    res.d        dd ? ; - Зарезервированно.                           ; +176  ;
    res.e        dd ? ; - Зарезервированно.                           ; +180  ;
ends

; params ---------------------------------------------------------------------;
struct SKIN_PARAMS
    use.3d       db 0 ; - Использовать тени для элементов. (0 выкл)   ; +181  ;
    use.noangle  db 0 ; - Не рисовать угловые пиксели элементов.      ; +182  ;
    use.winrad   db 0 ; - Использовать скругленные края у окна.       ; +183  ;
                      ;   0 - нет; 1 - псевдо; 2 - альфа              ;       ;
    use.focus    db 0 ; - Отрисовывать наведение на элементы.         ; +184  ;
    use.face     db 1 ; - Использовать ли обводку вокруг окна (1 вкл) ; +185  ;
    face.w       db 3 ; - Ширина обводки                              ; +186  ;
    use.reserv   dw ? ; - Зарезервированно                            ; +188  ;
ends

; title ----------------------------------------------------------------------;
struct SKIN_TITLE
    text.align   db 0 ; 0 - слева, 1 - середина, 2 - справа           ; +189  ; 
    text.x       dw ? ; Смещение относительно положения в пикселях.   ; +191  ;
    text.y       dw ? ; Смещение относительно положения в пикселях.   ; +193  ;
    btn.align    db 1 ; 0 - слева, 1 - справа;                        ; +194  ;
    btn.w        dw ? ; Ширина системных кнопок.                      ; +196  ;
    btn.h        dw ? ; Высота системных кнопок.                      ; +198  ;
    btn.x        dw ? ; Смещение относительно положения в пикселях.   ; +200  ;
    btn.y        dw ? ; Смещение относительно положения в пикселях.   ; +202  ;
    btn.step     db ? ; Расстояние между системными кнопками.         ; +203  ;
    height       db ? ; Высота заголовка.                             ; +204  ;
    alpha        dd ? ; Цвет псевдо прозрачности                      ; +208  ;
    reserved     dd ? ; Зарезервированно.                             ; +212  ;
ends

; image ----------------------------------------------------------------------;
struct SKIN_ANGLE
    ltop.w       db ? ; Ширина левого верхнего изображения            ; +213  ;
    ltop.h       db ? ; Высота левого верхнего изображения            ; +214  ;
    lbot.w       db ? ; Ширина левого нижнего изображения             ; +215  ;
    lbot.h       db ? ; Высота левого нижнего изображения             ; +216  ;
    rtop.w       db ? ; Ширина правого верхнего изображения           ; +217  ;
    rtop.h       db ? ; Высота правого верхнего изображения           ; +218  ;
    rbot.w       db ? ; Ширина правого нижнего изображения            ; +219  ;
    rbot.h       db ? ; Высота правого нижнего изображения            ; +220  ;
ends

; buttons --------------------------------------------------------------------;
struct SKIN_BTN
   file 'close.raw'  ; btn.w * btn.h * 3 (BBGGRR) активное                    ;
   file 'iclose.raw' ; btn.w * btn.h * 3 (BBGGRR) неактивное                  ;
   file 'fclose.raw' ; btn.w * btn.h * 3 (BBGGRR) при наведении               ;

   file 'full.raw'   ; btn.w * btn.h * 3 (BBGGRR) активное                    ;
   file 'ifull.raw'  ; btn.w * btn.h * 3 (BBGGRR) неактивное                  ;
   file 'ffull.raw'  ; btn.w * btn.h * 3 (BBGGRR) при наведении               ;

   file 'mini.raw'   ; btn.w * btn.h * 3 (BBGGRR) активное                    ;
   file 'imini.raw'  ; btn.w * btn.h * 3 (BBGGRR) неактивное                  ;
   file 'fmini.raw'  ; btn.w * btn.h * 3 (BBGGRR) при наведении               ;
   ; ЕСЛИ  SKIN_PARAMS.use.winrad = 2 (полноценная альфа)                     ;
   ; ТО    btn.w * btn.h * 4 (RRGGBBAA)                                       ;
ends

; images ---------------------------------------------------------------------;
struct SKIN_IMAGE
   file 'ltop.raw'   ; ltop.w * ltop.h * 3 (BBGGRR) активное                  ;
   file 'lbot.raw'   ; lbot.w * lbot.h * 3 (BBGGRR) активное                  ;
   file 'rtop.raw'   ; rtop.w * rtop.h * 3 (BBGGRR) активное                  ;
   file 'rbot.raw'   ; rbot.w * rbot.h * 3 (BBGGRR) активное                  ;
   file 'iltop.raw'  ; iltop.w * iltop.h * 3 (BBGGRR) неактивное              ;
   file 'ilbot.raw'  ; ilbot.w * ilbot.h * 3 (BBGGRR) неактивное              ;
   file 'irtop.raw'  ; irtop.w * irtop.h * 3 (BBGGRR) неактивное              ;
   file 'irbot.raw'  ; irbot.w * irbot.h * 3 (BBGGRR) неактивное              ;
   ; ЕСЛИ  SKIN_PARAMS.use.winrad = 2 (полноценная альфа)                     ;
   ; ТО    xxxx.w * xxxx.h * 4 (RRGGBBAA)                                     ;
ends
;=============================================================================;

Re: Новая таблица системных цветов.

Posted: Wed Jul 03, 2013 8:34 pm
by Mario_r4
А выложить архивом прикрепленным к посту мешают обстоятельства непреодолимой силы?

Re: Новая таблица системных цветов.

Posted: Wed Jul 03, 2013 8:38 pm
by Akyltist
Mario_r4 wrote:А выложить архивом прикрепленным к посту мешают обстоятельства непреодолимой силы?
да нет, просто там процентов 7 работы, смысл забивать место на хостинге. Однако учел, линк на архив приложил.

Re: Новая таблица системных цветов.

Posted: Fri Jul 05, 2013 9:55 pm
by Alver
Стукнула ностальгия, заглянул на огонёк :D
Akyltist wrote:Речь идет об изменении размера таблицы цветов функции 48 подфункций 2 и 3.
Есть замечание.
Я бы не трогал функции 48.2 и 48.3 , иначе практически все приложения, использующие системную палитру придётся переписывать с увеличением размера буфера. Я бы обозначил этих 10 цветов как основные а прочие как дополнительные и подвесил их на новые подфункции. А лучше на новые подфункции подвесить доступ ко всей расширенной палитре, а 48.2, 48.3 объявить устаревшими :) (Это уже вошло в практику колибри)

Ещё мысль, стоит ли передавать приложению весь буфер цветовой палитры, (половина ему все равно не нужна) может быть проще будет читать каждый цвет по отдельности (по номеру в палитре), а вот устанавливать уже скопом.

Вообще если ряд системных переменных, то бишь как цвета, позиция мыши, размер экрана, рабочая область экрана, дата/время, и некоторые другие , не представляющие системной тайны :D , скомпоновать на одной странице памяти и монтировать в адресное пространство процессов по фиксированному адресу. Тогда приложения смогут сэкономить на обращении к ядру :wink:

P.S. Ээээ я хотел сказать монтировать в режиме для чтения :oops:

Re: Новая таблица системных цветов.

Posted: Fri Jul 05, 2013 10:11 pm
by Mario_r4
Alver wrote:Ещё мысль, стоит ли передавать приложению весь буфер цветовой палитры, (половина ему все равно не нужна) может быть проще будет читать каждый цвет по отдельности (по номеру в палитре)
Каждое лишнее переключение с Ring3 на Ring0 и обратно - это бесполезная трата ресурсов.

Re: Новая таблица системных цветов.

Posted: Fri Jul 05, 2013 10:18 pm
by Alver
Mario_r4 wrote:Каждое лишнее переключение с Ring3 на Ring0 и обратно - это бесполезная трата ресурсов.
Тогда включать страничку с переменными для чтения процессам, и вообще никакого переключения ringов для целой кучи бывших сисфункций :)

Re: Новая таблица системных цветов.

Posted: Fri Jul 05, 2013 10:48 pm
by Serge
Alver
L4. У меня тоже такие идеи были.

Re: Новая таблица системных цветов.

Posted: Sat Jul 20, 2013 5:22 pm
by Mario_r4
Akyltist
Прогресс 50%? Процесс встал?

Re: Новая таблица системных цветов.

Posted: Mon Jul 22, 2013 9:18 am
by Akyltist
чур тебя))
сдал ин яз и философию, еще спец предмет и месяц "свободных" вечеров)...

PS: надо доделать!

Re: Новая таблица системных цветов.

Posted: Wed Jul 31, 2013 3:06 pm
by Akyltist
сдал все экзамены на отлично!

Обновил архив и онлайн чтение, теперь есть визуальное отображение всех элементов и описание 6 элементов из 16.
Доступ к новой спецификации: ЧИТАТЬ ОНЛАЙН
Скачать одним архивом: СКАЧАТЬ

Надеюсь в ближайшие дни полностью закончу, так как появилась уйма "свободного" времени!

PS: 24 августа женюсь!

Re: Новая таблица системных цветов.

Posted: Wed Jul 31, 2013 3:45 pm
by Mario_r4
Spoiler:Image
Сдал сопромат?Можешь жениться!

Re: Новая таблица системных цветов.

Posted: Sun Aug 11, 2013 5:23 pm
by Leency
В документации указана кодировка charset=windows-1251 по факту там UTF-8.

Re: Новая таблица системных цветов.

Posted: Thu Oct 03, 2013 1:24 pm
by Mario_r4
Видимо медовый месяц затянулся.

Re: Новая таблица системных цветов.

Posted: Thu Oct 03, 2013 7:35 pm
by Akyltist
Mario_r4 wrote:Видимо медовый месяц затянулся.
Прошу прощения, обновил.

Window, Edit, Memo, ListBox, CheckBox, ComboBox, ProgressBar, PopupMenu, Panel, Button, TreeViewer, TabSet, TrackBar, ScrollBar, SelectBox, ValueBox.
В документации указана кодировка charset=windows-1251 по факту там UTF-8.
поправил

Re: Новая таблица системных цветов.

Posted: Thu Oct 03, 2013 9:00 pm
by Mario_r4
Akyltist wrote:Прошу прощения, обновил.
Да, ничего страшного - я просто вслух подумал. :)