]> git.ktnx.net Git - mobile-ledger.git/blobdiff - tools/gen-styles
further theme fixes
[mobile-ledger.git] / tools / gen-styles
index 5b958f53b338eb8f907052e5eb6b2a72258632c2..7a22c7e7f1924b8d346d2cfc25a9172f0dad8796 100644 (file)
@@ -5,6 +5,15 @@ use autodie;
 use Math::Trig;
 use File::Basename qw(basename dirname);
 use File::Temp qw(tempfile);
+use Getopt::Long;
+
+my $opt_night;
+
+GetOptions(
+    'night!'    => \$opt_night,
+) or exit 1;
+
+my $DEFAULT_HUE = 261.2245;
 
 sub hexTuple {
        my ($r, $g, $b) = @_;
@@ -84,7 +93,7 @@ sub hexToHSL {
        my $hexTriplet = shift;
 
        my ($r,$g,$b) = hexToRGB($hexTriplet);
-       warn "$hexTriplet -> $r:$g:$b";
+        #warn "$hexTriplet -> $r:$g:$b";
 
        for ($r, $g, $b ) { $_ = $_ / 255.0 }
 
@@ -116,11 +125,11 @@ sub hexToHSL {
        return( $H, $S, $L );
 }
 
-my $baseColorHSV = [ hexToHSL('#935ff2') ];
+my $baseColor = '#935ff2';
+my $baseColorHSV = [ hexToHSL($baseColor) ];
 my $baseColorHue = $baseColorHSV->[0];
-warn sprintf( 'H:%1.4f S:%1.4f V:%1.4f', @$baseColorHSV );
-warn sprintf( 'H:%1.4f S:%1.4f L:%1.4f', hexToHSL('#3e148c') );
-my @target = hexToRGB('#935ff2');
+warn sprintf( '%s → H:%1.4f S:%1.4f V:%1.4f', $baseColor, @$baseColorHSV );
+my @target = hexToRGB($baseColor);
 my ($best, $min_dist);
 for (my $s = 0.50; $s < 0.90; $s += 0.001) {
        for ( my $l = 0.50; $l <= 0.80; $l += 0.001 ) {
@@ -135,7 +144,7 @@ for (my $s = 0.50; $s < 0.90; $s += 0.001) {
                }
        }
 }
-warn sprintf( 's%1.3f, l%1.3f -> %s',
+warn sprintf( 's%1.3f, l%1.3f  %s',
        @$best );
 
 my $baseTheme = "AppTheme";
@@ -165,6 +174,8 @@ use constant STEP_DEGREES => 5;
 sub outputThemes {
        my $out = shift;
        my $baseIndent = shift;
+        $out->print("\n");
+        $out->print(hslStyleForHue($DEFAULT_HUE, $baseTheme, $baseIndent, 'default'));
        for( my $hue = 0; $hue < 360; $hue += STEP_DEGREES ) {
                $out->print("\n");
                $out->print(hslStyleForHue($hue, $baseTheme, $baseIndent));
@@ -175,14 +186,15 @@ sub hslStyleForHue {
        my $hue = shift;
        my $base = shift;
        my $baseIndent = shift // '';
+        my $subTheme = shift // sprintf('%03d', $hue);
 
        my %lQ = (
                0   => 0.450,   # red
                60  => 0.400,   # yellow
                120 => 0.400,   # green
-               180 => 0.400,   # cyan
-               240 => 0.750,   # blue
-               300 => 0.500,   # magenta
+               180 => 0.390,   # cyan
+               240 => 0.745,   # blue
+               300 => 0.505,   # magenta
        );
        $lQ{360} = $lQ{0};
 
@@ -195,16 +207,16 @@ sub hslStyleForHue {
        # linear interpolation
        my $l1 = $y0 + 1.0 * ( $hue - $x0 ) * ( $y1 - $y0 ) / ( $x1 - $x0 );
 
-       my $l2 = $l1 * 0.80;
-       my $l3 = 0.950;
-       my $l4 = 0.980;
+       my $l2 = $l1 * ( $opt_night ? 1.10 : 0.80 );
+       my $l3 = $opt_night ? 0.200 : 0.950;
+       my $l4 = $opt_night ? 0.100 : 0.980;
 
        my $result = "";
        my $indent = "$baseIndent    ";
 
        if ($base) {
-               $result .= sprintf "$baseIndent<style name=\"%s.%03d\" parent=\"%s\">\n",
-                        $baseTheme, $hue, $baseTheme;
+               $result .= sprintf "$baseIndent<style name=\"%s.%s\" parent=\"%s\">\n",
+                        $baseTheme, $subTheme, $baseTheme;
         }
         else {
                 $result .= sprintf "$baseIndent<style name=\"%s\">\n",
@@ -214,18 +226,18 @@ sub hslStyleForHue {
 #                $result .= "$indent<item name=\"textColor\">#757575</item>\n";
         }
         my $S = 0.845;
-        $result .= sprintf "$indent<item name=\"colorPrimary\">#%s</item>\n",
-                hslHex($hue, $S, $l1);
-        $result .= sprintf "$indent<item name=\"colorPrimaryTransparent\">#00%s</item>\n",
-                hslHex($hue, $S, $l1);
-        $result .= sprintf "$indent<item name=\"colorAccent\">#%s</item>\n",
-                hslHex($hue, $S, $l2);
-        $result .= sprintf "$indent<item name=\"colorPrimaryDark\">#%s</item>\n",
-                hslHex($hue, $S, $l2);
-        $result .= sprintf "$indent<item name=\"table_row_dark_bg\">#%s</item>\n",
-                hslHex($hue, $S, $l3);
-        $result .= sprintf "$indent<item name=\"table_row_light_bg\">#%s</item>\n",
-                hslHex($hue, $S, $l4);
+        $result .= sprintf "$indent<item name=\"%s\">#%s</item>\n",
+            'colorPrimary', hslHex( $hue, $S, $l1 );
+        $result .= sprintf "$indent<item name=\"%s\">#00%s</item>\n",
+            'colorPrimaryTransparent', hslHex( $hue, $S, $l1 );
+        $result .= sprintf "$indent<item name=\"%s\">#%s</item>\n",
+            'colorAccent', hslHex( $hue, $S, $l2 );
+        $result .= sprintf "$indent<item name=\"%s\">#%s</item>\n",
+            'colorPrimaryDark', hslHex( $hue, $S, $l2 );
+        $result .= sprintf "$indent<item name=\"%s\">#%s</item>\n",
+            'table_row_dark_bg', hslHex( $hue, $S, $l3 );
+        $result .= sprintf "$indent<item name=\"%s\">#%s</item>\n",
+            'table_row_light_bg', hslHex( $hue, $S, $l4 );
         $result .= "$baseIndent</style>\n";
 
         return $result;