Kleuren van GtkColorChooser wijzigen

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • MartinMeijerink
  • Registratie: Juli 2008
  • Laatst online: 15-09 18:12

MartinMeijerink

Computerrorist

Topicstarter
Zowel thuis op mijn PC als op mijn werk op mijn laptop gebruik ik het programma Cherrytree (een hiërarchisch notitieboek), welke op zijn beurt weer gebruik maakt van de GtkColorChooser, dat is deze:

Afbeeldingslocatie: https://gfx.zutphen.nu/cc1.png
  Debian 10 versie

Afbeeldingslocatie: https://gfx.zutphen.nu/cc2.png
  Debian 11 versie

En mijn vraag gaat dan ook niet over Cherrytree, maar over deze Color Chooser, op mijn PC thuis (met Debian 10) kan ik kiezen uit 27 kleuren, en op mijn laptop op mijn werk (Debian 11) kan ik kiezen uit 45 kleuren. Maar het gaat me niet om het aantal kleuren, het probleem is dat ik al deze standaardkleuren niet mooi vind, als ik bijvoorbeeld blauw wil, dan wil ik echt #0000ff, of #000080 en niet van die vage kleuren zoals #729fcf, #3465a4 of #204a87, welke dus in dit palet op mijn PC staan.
Maar ik kan nergens in mijn filesystem of met gconf-editor iets vinden waar ik deze kleuren kan aanpassen.
Wel heeft deze kleurenkiezer de mogelijkheid om wat custom kleurtjes aan te maken, maar dat zijn er maar 8, dat is wel veel te weinig.

Gebruikte software:
• Debian 10 en 11 met als windowmanager Window Maker (https://www.windowmaker.org/)
• Cherrytree 1.0.1 (https://www.giuspen.net/cherrytree/)

Mijn vraag:
Hoe kan ik de 27 standaardkleuren aanpassen?
Al moet ik met een hex-editor bestanden op binair niveau aanpassen, ik vind het prima, als ik het maar ergens kan aanpassen.

Relevante software en hardware die ik gebruik:
PC en laptop met resp. Debian 10 en 11

Wat ik al gevonden of geprobeerd heb:
Gevonden:
• Dat deze kleurenkiezer "GtkColorChooser" of "GTK+ 3.0 Color Picker GtkColorChooser" ofzoiets moet heten.
• Dat de kleuren in het huidige palet bekend zijn als "Tango" colors (https://www.google.com/search?q=729fcf+3465a4+204a87)

Geprobeerd:
In mijn filesystem gezocht naar bestanden met 'colorchooser', 'pallette' of 'tango' in de naam, ook met gconf-editor naar deze termen gezocht, wel heel veel gevonden, maar niet iets waarvan ik denk dat ik het zou kunnen aanpassen, want de kleuren van het huidige palet kan ik daar niet in vinden.

An unbreakable toy is useful to break other toys

Alle reacties


Acties:
  • 0 Henk 'm!

  • Opifex
  • Registratie: September 2013
  • Laatst online: 15-09 22:06
Heb het maar eens heel vluchtig bekeken, maar eventueel kan je de `set_rgba()` calls (bvb in src/ct/ct_pref_dlg_theme.cc) vervangen door een call waarbij je de gewenste kleur hardcoded meegeeft? Zo'n `GdkRGBA` datatype zijn gewoon 4 doubles, waarbij de laatste het alphakanaal is.

[ Voor 15% gewijzigd door Opifex op 08-09-2023 22:29 ]


Acties:
  • 0 Henk 'm!

  • Hero of Time
  • Registratie: Oktober 2004
  • Laatst online: 15-09 22:42

Hero of Time

Moderator LNX

There is only one Legend

Ik ben bang dat je dit in de broncode moet gaan zoeken. Het zou namelijk zo maar kunnen dat dit daar als pre-defined kleuren in staan.

Dat de kleuren overeenkomen met de Tango kleurenset is niet heel 'toevallig', het is een veelgebruikte set. Wellicht wordt er naar verwezen in de broncode waardoor je wellicht iets makkelijker de voorgedefinieerde kleurenset kan vervangen voor een andere set.

Hoeveel kleuren zou je willen hebben? Misschien is het namelijk makkelijker om het aantal custom kleuren te verhogen dan het hele pallet te wijzigen.

Edit:
Zie trouwens ook de site met hoe GtkColorChooser te gebruiken is in programma's: https://docs.gtk.org/gtk3/iface.ColorChooser.html.

[ Voor 11% gewijzigd door Hero of Time op 08-09-2023 22:36 ]

Commandline FTW | Tweakt met mate


Acties:
  • 0 Henk 'm!

  • MartinMeijerink
  • Registratie: Juli 2008
  • Laatst online: 15-09 18:12

MartinMeijerink

Computerrorist

Topicstarter
@Opifex: Ik denk dat ik het niet bij Cherrytree moet zoeken, aangezien ik op mijn PC en laptop dezelfde Cherrytreeversie gebruik, maar wel verschillende Debianversies. En het ziet er op beide systemen anders uit, dus m.i. is die GtkColorChooser onderdeel van het OS, en niet van de applicatie.

@Hero of Time: Een stuk of 20 zou ok zijn, maar die custom kleuren zijn niets meer dan een MRU, ik heb het liever in het hoofdpalet, zodat ze ook niet zomaar verdwijnen als ik een keer wat meer andere kleurtjes gebruik.

Overigens ben ik er net ook achter dat Debian 10 Gtk3 gebruikt, en Debian 11 Gtk4, dat verklaart de verschillen. Ik moet het m.i. dus zoeken in de GTK-bestanden, weet alleen niet precies waar.

An unbreakable toy is useful to break other toys


Acties:
  • 0 Henk 'm!

  • MartinMeijerink
  • Registratie: Juli 2008
  • Laatst online: 15-09 18:12

MartinMeijerink

Computerrorist

Topicstarter
Inmiddels heb ik het gevonden! Ik had nog een vers geïnstalleerde vm staan met Debian 12 erop, zonder GUI, dus behoorlijk minimaal, hier heb ik dus Cherrytree op geïnstalleerd. Daarbij werden ook allerlei dependencies meegeïnstalleerd.

Het moet dus ergens in die meegeïnstalleerde packages zitten. Door vanaf mijn werkstation middels X-forwarding er met ssh op in te loggen kon ik Cherrytree starten, en zag ik een palet van 45 kleuren, waaronder deze kleuren blauw:
#99c1f1 #62a0ea #3584e4 #1c71d8 #1a5fb4

En aangezien deze machine minimaal is (nog maar 2G aan diskruimte in gebruik), heb ik gewoon het hele filesystem afgezocht naar een bestand waar bv. 99c1f1 in voorkomt:

blekinge:~ # find / |while read;do grep 2>/dev/null -i 99c1f1 $REPLY && echo $REPLY;done
/usr/lib/x86_64-linux-gnu/libgtk-3.so.0
/usr/lib/x86_64-linux-gnu/libgtk-3.so.0.2405.32


Gevonden!
In het bestand /usr/lib/x86_64-linux-gnu/libgtk-3.so.0.2405.32 komt de string 99c1f1 voor op positie 0x0045a8b

blekinge:~ # hexdump -C /usr/lib/x86_64-linux-gnu/libgtk-3.so.0.2405.32|grep -C1 99c1f1
blekinge:~ # hexdump -C /usr/lib/x86_64-linux-gnu/libgtk-3.so.0.2405.32|grep -C1 99c1
0045a7f0  6f 73 65 72 00 43 6f 6c  6f 72 20 6e 61 6d 65 00  |oser.Color name.|
0045a800  43 6f 6c 6f 72 3a 20 25  73 00 23 39 39 63 31 66  |Color: %s.#99c1f|
0045a810  31 00 23 36 32 61 30 65  61 00 23 33 35 38 34 65  |1.#62a0ea.#3584e|


Dus even gepatchd op binair niveau, en iets roods van gemaakt (99c1f1 veranderd in f1c199):

blekinge:~ # echo '0045a80b: 66 31 63 31 39 39'|xxd -r - /usr/lib/x86_64-linux-gnu/libgtk-3.so.0.2405.32
blekinge:~ # hexdump -C /usr/lib/x86_64-linux-gnu/libgtk-3.so.0.2405.32|grep -C1 ^0045a800
0045a7f0  6f 73 65 72 00 43 6f 6c  6f 72 20 6e 61 6d 65 00  |oser.Color name.|
0045a800  43 6f 6c 6f 72 3a 20 25  73 00 23 66 31 63 31 39  |Color: %s.#f1c19|
0045a810  39 00 23 36 32 61 30 65  61 00 23 33 35 38 34 65  |9.#62a0ea.#3584e|


Nu starten we meteen cherrytree weer, en checken of het gelukt is (de eerste blauwe die #99c1f1 was, moet nu #f1c199 zijn...

Afbeeldingslocatie: https://gfx.zutphen.nu/cc3.png
  Debian 12 versie, door mij gepatched

En dat is ie ook :)
Nu hetzelfde op mijn werkstation doen, en dan ook voor alle andere kleurtjes.

Conclusie:
Het was dus even een speld in een hooiberg, maar gevonden door op een kale machine het hele filesystem te doorzoeken :)

An unbreakable toy is useful to break other toys


Acties:
  • 0 Henk 'm!

  • Hero of Time
  • Registratie: Oktober 2004
  • Laatst online: 15-09 22:42

Hero of Time

Moderator LNX

There is only one Legend

Je had het wellicht wat sneller kunnen vinden door 'ldd `which cherrytree`' uit te voeren, zodat je de gelinkte libraries van de binary opvraagt. Die lijst kan je dan inkorten door naar de namen te kijken en daaraan zien waar ze mogelijk voor dienen.

Wat je nu wel moet onthouden is dat zodra je een libgtk3 update krijgt, je het bestand weer moet patchen. Maak dus een script van wat je hebt gedaan zodat je die naderhand kan uitvoeren. Zet in het script ook gelijk dat het een backup van het bestand moet maken voor het geval dat.

Commandline FTW | Tweakt met mate


Acties:
  • 0 Henk 'm!

  • MartinMeijerink
  • Registratie: Juli 2008
  • Laatst online: 15-09 18:12

MartinMeijerink

Computerrorist

Topicstarter
Aan ldd had ik even niet gedacht, zo vaak gebruik ik het nl. niet, maar deze geeft idd een lijst met (114) gelinkte libraries, waar libgtk-3.so.0 ook tussen zit. Wat scripts betreft zit het bij mij wel goed, dat is mijn dagelijkse werk. Backups worden hier periodiek al automatisch gemaakt (ook door een eigen script), en als ik iets patch maak ik toch altijd al handmatig een extra backup wanneer dat nodig is. :)
Ik heb net dus even een quick-and-dirty scriptje gemaakt om de kleurtjes te patchen, niet alleen vanwege een libgtk3 update, maar ook om de kleurtjes evt. vaker aan te passen. Bij het testen bleek overigens dat xxd maximaal 256 bytes tegelijk kan patchen, wat ervoor zorgt dat ik het script weer moet aanpassen, nu kan ik dus nl. alleen maar de eerste 32 kleuren patchen, maar dat maakt voor nu weinig uit (hier heb ik er toch maar 27).

Dit is in ieder geval het script:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#!/bin/bash
# Script om colorchooserkleurtjes te patchen
# Pas hieronder de kleurtjes aan (in de string gtk3palette of gtk4palette) en voer als root het script uit met het bestand /usr/lib/x86_64-linux-gnu/libgtk-3.so.0.2404.* als enige argument
# 20230909 Martin Meijerink, gemaakt voor Debian10/11/12, Versie 0.1
# Known bug: xxd kan max 256 colums patchen, dus de 4e bruin en wat daarna komt wordt niet gepatcht

#            rood                 oranje               geel                 groen                blauw                paars                bruin                donkergrijs          lichtgrijs
# origineel: ef2929 cc0000 a40000 fcaf3e f57900 ce5c00 fce94f edd400 c4a000 8ae234 73d216 4e9a06 729fcf 3465a4 204a87 ad7fa8 75507b 5c3566 e9b96e c17d11 8f5902 888a85 555753 2e3436 eeeeec d3d7cf babdb6
gtk3palette="ff0000 c00000 800000 ff8000 c08000 804000 ffff00 c0c000 808000 00ff00 00c000 008000 0000ff 0000c0 000080 ff00ff 8000c0 800080 e9b96e c17d11 8f5902 888a85 555753 2e3436 eeeeec d3d7cf babdb6"

#            blauw                              groen                              geel                               oranje                             rood                        paars                              bruin                                     grijs  grijs  grijs  grijs  grijs  grijs  grijs  grijs
# origineel: 99c1f1 62a0ea 3584e4 1c71d8 1a5fb4 8ff0a4 57e389 33d17a 2ec27e 26a269 f9f06b f8e45c f6d32d f5c211 e5a50a ffbe6f ffa348 ff7800 e66100 c64600 f66151 ed333b e01b24 c01c28 a51d2d dc8add c061cb 9141ac 813d9c 613583 cdab8f b5835a 986a44 865e3c 63452c f6f5f4 deddda c0bfbc 9a9996 77767b 5e5c64 3d3846 241f31
gtk4palette="99c1f1 62a0ea 3584e4 1c71d8 1a5fb4 8ff0a4 57e389 33d17a 2ec27e 26a269 f9f06b f8e45c f6d32d f5c211 e5a50a ffbe6f ffa348 ff7800 e66100 c64600 f66151 ed333b e01b24 c01c28 a51d2d dc8add c061cb 9141ac 813d9c 613583 cdab8f b5835a 986a44 865e3c 63452c f6f5f4 deddda c0bfbc 9a9996 77767b 5e5c64 3d3846 241f31"
#                                                                                                                                                                                                                                            ^-- vanaf hier wordt er niet gepatcht
basename=$(basename "$*")

case $basename in
  libgtk-3.so.0.2404.1)
    offset=3f76d3
    palette="$gtk3palette"
  ;;
  libgtk-3.so.0.2404.20)
    offset=41ba7b
    palette="$gtk4palette"
  ;;
  libgtk-3.so.0.2404.32)
    offset=45a80a
    palette="$gtk4palette"
  ;;
esac

if test -n "$palette";then
  for i in $palette;do
    string="$string""23$(echo -n $i|xxd -ps)00"
  done
  echo "$offset: $string"|xxd -c256 -r - "$*"
else
  echo Bestand $* is niet bekend
fi


Resultaat van het script is 18 gewijzigde kleurtjes naar mijn eigen smaak (ff snel, dat finetunen doe ik later wel).

Afbeeldingslocatie: https://gfx.zutphen.nu/cc4.png
  Debian 10 versie, 18 kleurtjes gepatcht met bovenstaand script :)

@Opifex en @Hero of Time in ieder geval bedankt voor het meedenken.

An unbreakable toy is useful to break other toys


Acties:
  • 0 Henk 'm!

  • Hero of Time
  • Registratie: Oktober 2004
  • Laatst online: 15-09 22:42

Hero of Time

Moderator LNX

There is only one Legend

Wat ik mij net bedenk, is dat het patchen op deze manier ook invloed kan hebben op de kleuren in andere applicaties die getoond worden. Ze kunnen verwijzingen hebben naar het pallet.

En het feit dat xdd maar 256 bytes kan patchen is toch geen beperking voor je? Je doet dan gewoon meerdere passes met verschillende offsets. ;)

Commandline FTW | Tweakt met mate


Acties:
  • 0 Henk 'm!

  • MartinMeijerink
  • Registratie: Juli 2008
  • Laatst online: 15-09 18:12

MartinMeijerink

Computerrorist

Topicstarter
Hero of Time schreef op zondag 10 september 2023 @ 13:01:
Wat ik mij net bedenk, is dat het patchen op deze manier ook invloed kan hebben op de kleuren in andere applicaties die getoond worden. Ze kunnen verwijzingen hebben naar het pallet.
Ik zie nergens in mijn OS het Tango-kleurenpalet verschijnen, dus dat zal wel meevallen (en dat blijkt tot nu toe ook). Wel raar overigens dat deze fletse kleurenpalet als standaard is ingesteld, het zijn wel mooie kleurtjes, maar geen kleurtjes om aan een tekst op een witte achtergrond te geven.
En het feit dat xdd maar 256 bytes kan patchen is toch geen beperking voor je? Je doet dan gewoon meerdere passes met verschillende offsets. ;)
Of xxd aanpassen, zodat ie tot 512 bytes kan patchen :)
De beperking in dit geval was de tijd, het was al laat genoeg.
Maar ik heb hem net even aangepast, en aangezien ik niet elke aanpassing ga posten, staat de laatste versie (met een kleine bugfix) dus gewoon hier: https://files.zutphen.nu/patchcolorchooser.sh
Hij is nu dan ook min of meer af, alleen de kleurtjes mss nog een klein beetje finetunen.

An unbreakable toy is useful to break other toys

Pagina: 1