Menü-Mod v2

CHDK-Skripte, CHDK-Entwicklung, PC-Zusatzprogramme, Informationen für Tüftler

Menü-Mod v2

Beitragvon CHDKLover » 13.02.2008, 22:53

Hallo,
abgeleitet von dem ersten Design Mod (volle Ausnutzung des Displays für das Menü) habe ich eine 2. Version erstellt, die zusätzlich noch ein paar kleine Design Verbesserungen enthält. Dies sind zum Beispiel Wahl der Menüüberschriftsschrift/hintergundfarbe (tolles Wort :D ) bzw. Wahl der Cursorschrift/hintergundfarbe über die Anzeigeeinstellungen. Als weiteres goody wird das Menü nun immer horizontal und vertikal Zentriert dargestellt.
[center]
Bild
Font download
[/center]

Um den Mod zu übernehmen müsst ihn folgende Dateien umändern: (ca. 20min)

1.)
core/conf.c
(Zeile: ca. 249, an das Ende der Konstantendeklaration einfügen. Nummer hier 127 muss gegebenenfalls verändert werden, es muss eine fortlaufende Reihe enstehen)
Code: Alles auswählen
    CONF_INFO(127, conf.menu_title_color,         CONF_DEF_VALUE, cl:MAKE_COLOR(COLOR_WHITE, COLOR_BLACK), NULL),


2.)
core/gui.c
(Zeilen: ca. 381/382)
suchen:
Code: Alles auswählen
    {LANG_MENU_VIS_MENU_BKG,            MENUITEM_COLOR_BG,  (int*)&conf.menu_color },

danach einfügen:
Code: Alles auswählen
    {LANG_MENU_VIS_MENU_TITLE_TEXT,     MENUITEM_COLOR_FG,  (int*)&conf.menu_title_color },
    {LANG_MENU_VIS_MENU_TITLE_BKG,      MENUITEM_COLOR_BG,  (int*)&conf.menu_title_color },

(Zeile: ca. 1059 löschen)
suchen und löschen:
Code: Alles auswählen
            draw_txt_string(20, 14, "<CNF>", MAKE_COLOR(COLOR_ALT_BG, COLOR_FG));

(Zeile: ca. 1676)
suchen:
Code: Alles auswählen
    draw_filled_rect(x, y, x+w, y+h, cl);

ersetzen durch:
Code: Alles auswählen
    draw_filled_round_rect(x, y, x+w, y+h, cl);


3.)
core/gui_draw.h
(Zeile: ca. 37)
suchen:
Code: Alles auswählen
extern void draw_rect(coord x1, coord y1, coord x2, coord y2, color cl);

danach einfügen:
Code: Alles auswählen
extern void draw_round_rect(coord x1, coord y1, coord x2, coord y2, color cl);

(Zeile:ca. 40)
suchen:
Code: Alles auswählen
extern void draw_filled_rect(coord x1, coord y1, coord x2, coord y2, color cl);

danach einfügen:
Code: Alles auswählen
extern void draw_filled_round_rect(coord x1, coord y1, coord x2, coord y2, color cl);


4.)
core/gui_draw.c
(ab ca. Zeile 112 Funktion einfügen)
Code: Alles auswählen
void draw_round_rect(coord x1, coord y1, coord x2, coord y2, color cl) {
    unsigned int xMin, yMin, xMax, yMax, x, y;
    if (x1>x2) {
       xMax=x1; xMin=x2;
    } else {
       xMin=x1; xMax=x2;
    }
    if (y1>y2) {
       yMax=y1; yMin=y2;
    } else {
       yMin=y1; yMax=y2;
    }
    if (xMax>=screen_width) xMax=screen_width-1;
    if (xMin>=screen_width) xMin=screen_width-1;
    if (yMax>=screen_height) yMax=screen_height-1;
    if (yMin>=screen_height) yMin=screen_height-1;

    for (y=yMin+2; y<=yMax-2; ++y) {
      draw_pixel(xMin, y, cl);
      draw_pixel(xMax, y, cl);
    }
    for (x=xMin+2; x<=xMax-2; ++x) {
        draw_pixel(x, yMin, cl);
        draw_pixel(x, yMax, cl);
    }
}
//-------------------------------------------------------------------

(ab ca. Zeile 164 Funktion einfügen)
Code: Alles auswählen
 void draw_filled_round_rect(coord x1, coord y1, coord x2, coord y2, color cl) {
    unsigned int xMin, yMin, xMax, yMax, x, y;
    if (x1>x2) {
       xMax=x1; xMin=x2;
    } else {
       xMin=x1; xMax=x2;
    }
    if (y1>y2) {
       yMax=y1; yMin=y2;
    } else {
       yMin=y1; yMax=y2;
    }
    if (xMax>=screen_width) xMax=screen_width-1;
    if (xMin>=screen_width) xMin=screen_width-1;
    if (yMax>=screen_height) yMax=screen_height-1;
    if (yMin>=screen_height) yMin=screen_height-1;

    draw_round_rect(x1, y1, x2, y2, cl>>8);
    for (y=yMin+1; y<=yMax-1; ++y) {
     for (x=xMin+1; x<=xMax-1; ++x) {
       draw_pixel(x, y, cl>>8);
     }
    }
}
//-------------------------------------------------------------------


5.)
core/gui_lang.h
(Zeilen: ca. 361/362), am ende einfügen, Index hochzählen und GUI_LANG_ITEMS um 2 erhöhen (277))
suchen (Zahl 275 ist nur ein Beispiel):
Code: Alles auswählen
#define GUI_LANG_ITEMS                  275

ersetzen durch (Zahl 275 um 2 erhöhen = 277)
Code: Alles auswählen
#define GUI_LANG_ITEMS                  277

und davor einfügen (Achtung auch hier muss eine Fortlaufende liste enstehen, es dürfen keine doppelten Zahlen vorkommen):
Code: Alles auswählen
#define LANG_MENU_VIS_MENU_TITLE_TEXT         276
#define LANG_MENU_VIS_MENU_TITLE_BKG          277


6.)
core/gui_lang.c
(Zeilen: ca. 354/355, hier dieselben Zahlen aus 5.) verwenden)
suchen: Erstes Semikolon (";")
davor einfügen:
Code: Alles auswählen
"276 \"Menu Title & Cursor Text\"\n"
"277 \"Menu Title & Cursor Background\"\n"


Zusatz: Gegebenenfalls noch die Deutsche Sprachdatei ergänzen.

7.)
core/gui_menu.c
(Zeile: ca. 53 ersetzen)
suchen:
Code: Alles auswählen
    num_lines = (screen_height-26-16)/rbf_font_height()-2;

ersetzen durch:
Code: Alles auswählen
    num_lines = screen_height/rbf_font_height()-1;

(Zeile: ca. 56 löschen)
Code: Alles auswählen
    y = ((screen_height-num_lines*rbf_font_height())>>1);

(Funktion ab Zeile ca. 320 ersetzen)
Code: Alles auswählen
void gui_menu_draw_initial() {
    color cl=conf.menu_title_color>>8;
    unsigned char wplus=0;

    for (count=0; curr_menu->menu[count].text; ++count);
    if (count>num_lines) {
        y = ((screen_height-(num_lines-1)*rbf_font_height())>>1);
        wplus=8;
        // scrollbar background
        draw_filled_rect((x+w), y, (x+w)+wplus, y+num_lines*rbf_font_height()-1, MAKE_COLOR((conf.menu_color>>8)&0xFF, (conf.menu_color>>8)&0xFF));
    } else y = (screen_height-(count-1)*rbf_font_height())>>1;

    rbf_draw_string_center_len(x, y-rbf_font_height(), w+wplus, lang_str(curr_menu->title), conf.menu_title_color);
    if (cl!=COLOR_FG)
      draw_line(x,y-1,x+w-1+wplus,y-1,COLOR_FG);
}

(Zeile: ca. 351 ersetzen)
suchen:
Code: Alles auswählen
            cl = (gui_menu_curr_item==imenu)?MAKE_COLOR(COLOR_SELECTED_BG, COLOR_SELECTED_FG):conf.menu_color;

ersetzen durch:
Code: Alles auswählen
            cl = (gui_menu_curr_item==imenu)?conf.menu_title_color:conf.menu_color;

(Funktionsnamen "draw_filled_rect" ersetzten durch "draw_filled_round_rect". In Zeilen (ca. 407, 429, 431, 433)
(Zeile: ca. 407)
suchen:
Code: Alles auswählen
                draw_filled_rect(x+w-1-cl_rect-2-len_space, yy+2, x+w-1-2-len_space, yy+rbf_font_height()-1-2,

Funktionsnamen (draw_filled_rect) ersetzten durch:
Code: Alles auswählen
draw_filled_round_rect

(Zeile: ca. 429)
suchen:
Code: Alles auswählen
            draw_filled_rect((x+w)+2, y+1,

Funktionsnamen (draw_filled_rect) ersetzten durch:
Code: Alles auswählen
draw_filled_round_rect

(Zeile: ca. 431)
suchen:
Code: Alles auswählen
            draw_filled_rect((x+w)+2, y+i+j,

Funktionsnamen (draw_filled_rect) ersetzten durch:
Code: Alles auswählen
draw_filled_round_rect

(Zeile: ca. 433)
suchen:
Code: Alles auswählen
            draw_filled_rect((x+w)+2, y+1+i,

Funktionsnamen (draw_filled_rect) ersetzten durch:
Code: Alles auswählen
draw_filled_round_rect


8.)
include/conf.h
(Zeile: ca. 67)
suchen:
Code: Alles auswählen
    color menu_color;

danach einfügen:
Code: Alles auswählen
    color menu_title_color;


9.)
include/font.h
(Zeile: ca.34 einfügen)
suchen:
Code: Alles auswählen
extern int rbf_draw_string_right_len(int x, int y, int len, const char *str, color cl);

danach einfügen:
Code: Alles auswählen
extern int rbf_draw_string_center_len(int x, int y, int len, const char *str, color cl);


10.)
lib/font/rbf_font.c
(Zeile: ca. 271)
Funktion am Ende einfügen:
Code: Alles auswählen
int rbf_draw_string_center_len(int x, int y, int len, const char *str, color cl) {
    int l=0, strLen=0, i, yy, rund=2;
    const char *s=str;

    while (*s && l+rbf_char_width(*s)<=len)
        l+=rbf_char_width(*s++);
    strLen=l;
    l=(len-strLen)/2;

    for (i=l; i>=0; --i) {
        for (yy=y+rund; yy<y+rbf_font.height; ++yy) {
            draw_pixel(x+l-i, yy, cl>>8);
            draw_pixel(x+i+strLen+l-1, yy, cl>>8);
        }
        if (rund>0) rund--;
    }
    while (*str && l+rbf_char_width(*str)<=len)
        l+=rbf_draw_char(x+l, y, *str++, cl);

    return l;
}
//-------------------------------------------------------------------


So das wär’s gewesen. Ich hoffe es ist verständlich, sonst einfach noch mal nachfragen. Würde mich über weitere Verbesserungsvorschläge freuen. Es ist auch denkbar ein neues Konzept eines grafischen Menüs in Zukunft umzusetzen. Doch ich hab noch keine zündende Idee. Wenn jemand eine Vorstellung hat kann er sie ja mal posten.

Anhang:
Weitere geeignete Cursorhintergrundfarben: 0x34, 0x42, 0x54, 0x74, 0xE8 und viele weitere (einfach was Schönes aussuchen)

Beispielbilder:
[center]
Bild :leer: Bild

Bild :leer: Bild

Bild :leer: Bild

Bild :leer: Bild
[/center]

CHDKLover
Zuletzt geändert von CHDKLover am 07.03.2008, 10:28, insgesamt 11-mal geändert.
Benutzeravatar
CHDKLover
Super-Mod
Super-Mod
 
Beiträge: 878
Bilder: 8
Registriert: 12.09.2007, 18:25
Wohnort: Dresden
Kamera(s): a610 100e

Re: Menü-Mod v2

Beitragvon Riccardo » 24.02.2008, 13:16

CHDKLover hat geschrieben:Hallo,
abgeleitet von dem ersten Design Mod (volle Ausnutzung des Displays für das Menü) habe ich eine 2. Version erstellt, die zusätzlich noch ein paar kleine Design Verbesserungen enthält. Dies sind zum Beispiel Wahl der Menüüberschriftsschrift/hintergundfarbe (tolles Wort :D ) bzw. Wahl der Cursorschrift/hintergundfarbe über die Anzeigeeinstellungen. Als weiteres goody wird das Menü nun immer horizontal und vertikal Zentriert dargestellt.

Um den Mod zu übernehmen müsst ihn folgende Dateien umändern: .... sehr viel Text rausgeschnitten ...

Super, dass Du das Ding so weiterentwickelt hast!
Leider komm ich kaum dazu mich mit dem kompilieren zu befassen; ich habe schon immer Probleme, mit dem Aufspielen einer neuen Version (weil schon wieder vergessen, wie das vorher ging ... :-(

Hast Du vielleicht irgendwo eine Version des "großen" Menüs, bei dem die Farbe der Titelleiste verändert werden kann für mein A630?

Danke

Richard
A630
Riccardo
CHDK-Einsteiger
CHDK-Einsteiger
 
Beiträge: 15
Registriert: 17.01.2008, 09:27

Beitragvon tschenser » 24.02.2008, 13:17

hallo,

irgendwie funzt das bei mir nicht....
was mache ich falsch
Bild
Benutzeravatar
tschenser
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 80
Bilder: 4
Registriert: 14.01.2008, 16:46
Kamera(s): Powershot S2 IS
Powershot A650 IS

Beitragvon CHDKLover » 24.02.2008, 14:59

Hallo tschenser,
ich glaub dien Problem könnte daran liegen, dass du den Compiler unter "Dokumente und Einstellungen" kopiert hast. Da "Dokumente und Einstellungen" Leerzeichen enthält und Parameter durch ein Leerzeichen getrennt werden kommt ein Fehler. Versuch den gcc zum Beispiel in "C:\Programme\gcc" zu kopieren, $PATH neu anpassen.
Viel Glück

CHDKLover
Benutzeravatar
CHDKLover
Super-Mod
Super-Mod
 
Beiträge: 878
Bilder: 8
Registriert: 12.09.2007, 18:25
Wohnort: Dresden
Kamera(s): a610 100e

Beitragvon tschenser » 24.02.2008, 15:33

hi chdklover,

du hast du zeichen richtig gedeutet... ordner verschoben und siehe da funzt!!!

muss man bei allen neuen erscheinenden allbest-versionen diese änderungen erneut vornehmen???
Benutzeravatar
tschenser
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 80
Bilder: 4
Registriert: 14.01.2008, 16:46
Kamera(s): Powershot S2 IS
Powershot A650 IS

Beitragvon CHDKLover » 24.02.2008, 15:40

tschenser hat geschrieben:muss man bei allen neuen erscheinenden allbest-versionen diese änderungen erneut vornehmen???


Ja leider, da meine Veränderungen nicht im aktuellen Quellcode aufgenommen sind. Aber du musst ja nicht immer die neueste Version haben, manchmal sind es ja nur Detailverbesserungen, die nichteinmal dein Kameramodell betreffen. Oder du kopierst die veränderten Dateien immer in das nächste Build rein, wenn in diesen Dateien sonst keine Veränderungen wahren.

CHDKLover
Benutzeravatar
CHDKLover
Super-Mod
Super-Mod
 
Beiträge: 878
Bilder: 8
Registriert: 12.09.2007, 18:25
Wohnort: Dresden
Kamera(s): a610 100e

Letztes AllBest Built mit fabigen Menübalken?

Beitragvon Riccardo » 04.03.2008, 13:55

CHDKLover hat geschrieben:
tschenser hat geschrieben:muss man bei allen neuen erscheinenden allbest-versionen diese änderungen erneut vornehmen???

Ja leider.... Aber du musst ja nicht immer die neueste Version haben.

Ja, da hast Du sicher recht, dass ich nicht immer die neueste Version brauche. Was mir aber gut gefällt ist:
1. das vergrößerte Menü
2. die bunten Balken für die Menüüberschriften
Beides macht des Alternativmenü um einiges besser lesbar und übersichtlicher!
Die ganzen Manipulationen die Du hier aufzeigst traue ich mir nicht zu. Und deshalb die Frage und Bitte: Kansst Du irgendeine Version für meine Canon, die das große Menü & die farbigen Menübalken noch einmal für mich bereitstellen?

Gruß

Richard
A630
Riccardo
CHDK-Einsteiger
CHDK-Einsteiger
 
Beiträge: 15
Registriert: 17.01.2008, 09:27

Beitragvon CHDKLover » 06.03.2008, 12:53

Hallo,
ich habe auf Grundlage des Allbestbuilds 49 (trunk360) das CHDK mit meinem Menü und anderen kleinen Erweiterungen neu kompiliert.

Achtung: Benutzung auf eigene Gefahr!

CHDKLover
Zuletzt geändert von CHDKLover am 01.04.2008, 18:53, insgesamt 3-mal geändert.
A610 100e CHDK-DE: aktuelle Version
Benutzeravatar
CHDKLover
Super-Mod
Super-Mod
 
Beiträge: 878
Bilder: 8
Registriert: 12.09.2007, 18:25
Wohnort: Dresden
Kamera(s): a610 100e

Beitragvon pieps » 06.03.2008, 18:49

Hallo CHDKLover,

super Danke für die Arbeit die Du dir gemacht hast.

Ich kann dank Vista immer noch nicht kompillieren.
Jetzt werde ich ein 2.Betriebssystem installieren und
hoffe unter Linux dann klar zu kommen.

Gruss Pieps
pieps
CHDK-Einsteiger
CHDK-Einsteiger
 
Beiträge: 30
Registriert: 08.01.2008, 17:42
Wohnort: Saarland

Beitragvon Riccardo » 06.03.2008, 18:57

CHDKLover hat geschrieben:ich habe auf Grundlage des Allbestbuilds 40 (trunk319) das CHDK mit meinem Menü neu kompiliert


Vielen Dank für die Arbeit, die Du Dir gemacht hast!

CU Richard
A630
Riccardo
CHDK-Einsteiger
CHDK-Einsteiger
 
Beiträge: 15
Registriert: 17.01.2008, 09:27

Beitragvon msl » 06.03.2008, 19:04

@ CHDKLover

Das finde ich jetzt aber nicht so nett, dass Du die A460 weggelassen hast. :shock:

Ich hätte Deine Version auch gerne mal gestestet. :)

Gruß msl
Benutzeravatar
msl
Super-Mod
Super-Mod
 
Beiträge: 4567
Bilder: 271
Registriert: 22.02.2008, 11:47
Wohnort: Leipzig
Kamera(s): A720 1.00c
SX220 1.01a

Beitragvon Ratburger » 07.03.2008, 09:47

CHDKLover hat geschrieben:Hallo,
ich habe auf Grundlage des Allbestbuilds 40 (trunk319) das CHDK mit meinem Menü neu kompiliert und ...


Vielen Dank für deine Mühe, ich werds für meine A710 auch mal probieren. Aber wieso "auf Grundlage des Allbestbuilds 40", das neueste Build ist doch 37 oder?

Gruß
Ratburger
A710IS und EOS 450D
Ratburger
CHDK-Einsteiger
CHDK-Einsteiger
 
Beiträge: 39
Registriert: 14.01.2008, 15:10

Beitragvon CHDKLover » 07.03.2008, 10:23

Hallo,
sorry msl war keine Absicht, die A460 100d steht jetzt auch zum download bereit.
Ratburger, die aktuellste Version ist das Build 40. Die 37 was das letzte, welches von Allbest kompiliert wurde.

CHDKLover
Benutzeravatar
CHDKLover
Super-Mod
Super-Mod
 
Beiträge: 878
Bilder: 8
Registriert: 12.09.2007, 18:25
Wohnort: Dresden
Kamera(s): a610 100e

Beitragvon msl » 07.03.2008, 12:06

Gute Arbeit, CHDKLover, Danke. :D

Es wäre nur noch zu klären, welche Zeilennummern Du für die Sprachdatei vergeben hast. 276, 277 sind ja mittlerweile schon vergeben. Gegenwärtig liegt das Ende ja bei 302.

Da das Projekt ja doch ganz schön dynamisch ist, müsste das generell geklärt werden, wenn es denn für die Allgemeinheit wichtig wäre.

Gruß msl
Benutzeravatar
msl
Super-Mod
Super-Mod
 
Beiträge: 4567
Bilder: 271
Registriert: 22.02.2008, 11:47
Wohnort: Leipzig
Kamera(s): A720 1.00c
SX220 1.01a

Beitragvon CHDKLover » 07.03.2008, 19:05

Ja richtig msl,
ich habe hier die 303 und 304 verwendet. Aber leider wird sich das in neuen Builds immer wieder verändern, da die 303 wahrscheinlich bald mit etwas anderem belegt sein wird.

CHDKLover
Benutzeravatar
CHDKLover
Super-Mod
Super-Mod
 
Beiträge: 878
Bilder: 8
Registriert: 12.09.2007, 18:25
Wohnort: Dresden
Kamera(s): a610 100e

Nächste

Zurück zu Code-Ecke

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 18 Gäste