prog.
This commit is contained in:
		
							
								
								
									
										83
									
								
								src/dawn/display/Color.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										83
									
								
								src/dawn/display/Color.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,83 @@
 | 
			
		||||
// Copyright (c) 2023 Dominic Masters
 | 
			
		||||
// 
 | 
			
		||||
// This software is released under the MIT License.
 | 
			
		||||
// https://opensource.org/licenses/MIT
 | 
			
		||||
 | 
			
		||||
#include "Color.hpp"
 | 
			
		||||
#include "util/parser/TypeParsers.hpp"
 | 
			
		||||
 | 
			
		||||
using namespace Dawn;
 | 
			
		||||
 | 
			
		||||
struct Color Color::fromString(std::string str) {
 | 
			
		||||
  // Convert to lowercase
 | 
			
		||||
  auto lower = stringToLowercase(str);
 | 
			
		||||
  
 | 
			
		||||
  if(stringIncludes(lower, "cornflower")) {
 | 
			
		||||
    return COLOR_CORNFLOWER_BLUE;
 | 
			
		||||
 | 
			
		||||
  } else if(stringIncludes(lower, "magenta")) {
 | 
			
		||||
    return COLOR_MAGENTA;
 | 
			
		||||
 | 
			
		||||
  } else if(stringIncludes(lower, "white")) {
 | 
			
		||||
    return COLOR_WHITE;
 | 
			
		||||
 | 
			
		||||
  } else if(stringIncludes(lower, "black")) {
 | 
			
		||||
    return COLOR_BLACK;
 | 
			
		||||
 | 
			
		||||
  } else if(stringIncludes(lower, "red")) {
 | 
			
		||||
    return COLOR_RED;
 | 
			
		||||
 | 
			
		||||
  } else if(stringIncludes(lower, "green")) {
 | 
			
		||||
    return COLOR_GREEN;
 | 
			
		||||
 | 
			
		||||
  } else if(stringIncludes(lower, "blue")) {
 | 
			
		||||
    return COLOR_BLUE;
 | 
			
		||||
    
 | 
			
		||||
  } else if(stringIncludes(lower, "transparent")) {
 | 
			
		||||
    return COLOR_TRANSPARENT;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // Hex code?
 | 
			
		||||
  if(lower[0] == '#') {
 | 
			
		||||
    // Remove the hash
 | 
			
		||||
    lower = lower.substr(1);
 | 
			
		||||
 | 
			
		||||
    // Convert to RGB
 | 
			
		||||
    if(lower.length() == 3) {
 | 
			
		||||
      // Convert to 6 digit hex
 | 
			
		||||
      lower = lower[0] + lower[0] + lower[1] + lower[1] + lower[2] + lower[2];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Convert to RGB
 | 
			
		||||
    return {
 | 
			
		||||
      (float_t)std::stoi(lower.substr(0, 2), nullptr, 16) / 255.0f,
 | 
			
		||||
      (float_t)std::stoi(lower.substr(2, 2), nullptr, 16) / 255.0f,
 | 
			
		||||
      (float_t)std::stoi(lower.substr(4, 2), nullptr, 16) / 255.0f,
 | 
			
		||||
      1.0f
 | 
			
		||||
    };
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // Split by comma 
 | 
			
		||||
  auto splitByComma = stringSplit(str, ",");
 | 
			
		||||
  if(splitByComma.size() == 3) {
 | 
			
		||||
    // RGB
 | 
			
		||||
    return {
 | 
			
		||||
      (float_t)std::stof(splitByComma[0]),
 | 
			
		||||
      (float_t)std::stof(splitByComma[1]),
 | 
			
		||||
      (float_t)std::stof(splitByComma[2]),
 | 
			
		||||
      1.0f
 | 
			
		||||
    };
 | 
			
		||||
  } else if(splitByComma.size() == 4) {
 | 
			
		||||
    // RGBA
 | 
			
		||||
    return {
 | 
			
		||||
      (float_t)std::stof(splitByComma[0]),
 | 
			
		||||
      (float_t)std::stof(splitByComma[1]),
 | 
			
		||||
      (float_t)std::stof(splitByComma[2]),
 | 
			
		||||
      (float_t)std::stof(splitByComma[3])
 | 
			
		||||
    };
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // TODO: Parse other kinds of colors
 | 
			
		||||
  assertUnreachable("Failed to find a color match for " + str);
 | 
			
		||||
  return {};
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										90
									
								
								src/dawn/display/Color.hpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										90
									
								
								src/dawn/display/Color.hpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,90 @@
 | 
			
		||||
// Copyright (c) 2022 Dominic Masters
 | 
			
		||||
// 
 | 
			
		||||
// This software is released under the MIT License.
 | 
			
		||||
// https://opensource.org/licenses/MIT
 | 
			
		||||
 | 
			
		||||
#pragma once
 | 
			
		||||
#include "dawnsharedlibs.hpp"
 | 
			
		||||
#include "util/string.hpp"
 | 
			
		||||
 | 
			
		||||
namespace Dawn {
 | 
			
		||||
  struct ColorU8 {
 | 
			
		||||
    uint8_t r, g, b, a;
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  #pragma pack(push, 4)
 | 
			
		||||
  struct Color {
 | 
			
		||||
    /**
 | 
			
		||||
     * Returns a color from a string.
 | 
			
		||||
     * 
 | 
			
		||||
     * @param str String to parse.
 | 
			
		||||
     * @return Color parsed.
 | 
			
		||||
     */
 | 
			
		||||
    static struct Color fromString(std::string str);
 | 
			
		||||
 | 
			
		||||
    float_t r, g, b, a;
 | 
			
		||||
 | 
			
		||||
    const struct Color& operator = (const struct Color &val) {
 | 
			
		||||
      this->r = val.r;
 | 
			
		||||
      this->g = val.g;
 | 
			
		||||
      this->b = val.b;
 | 
			
		||||
      this->a = val.a;
 | 
			
		||||
      return *this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    struct Color operator * (const float_t &x) {
 | 
			
		||||
      return {
 | 
			
		||||
        r * x,
 | 
			
		||||
        g * x,
 | 
			
		||||
        b * x,
 | 
			
		||||
        a * x
 | 
			
		||||
      };
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    struct Color operator - (const struct Color &color) {
 | 
			
		||||
      return {
 | 
			
		||||
        r - color.r,
 | 
			
		||||
        g - color.g,
 | 
			
		||||
        b - color.b,
 | 
			
		||||
        a - color.a
 | 
			
		||||
      };
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    struct Color operator + (const struct Color &color) {
 | 
			
		||||
      return {
 | 
			
		||||
        r + color.r,
 | 
			
		||||
        g + color.g,
 | 
			
		||||
        b + color.b,
 | 
			
		||||
        a + color.a
 | 
			
		||||
      };
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    const bool_t operator == (const struct Color &other) {
 | 
			
		||||
      return r == other.r && g == other.g && b == other.b && a == other.a;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    operator struct ColorU8() const {
 | 
			
		||||
      return {
 | 
			
		||||
        (uint8_t)(r * 255),
 | 
			
		||||
        (uint8_t)(g * 255),
 | 
			
		||||
        (uint8_t)(b * 255),
 | 
			
		||||
        (uint8_t)(a * 255)
 | 
			
		||||
      };
 | 
			
		||||
    }
 | 
			
		||||
  };
 | 
			
		||||
  #pragma pack(pop)
 | 
			
		||||
 | 
			
		||||
  #define COLOR_DEF(r,g,b,a)          { r, g, b, a }
 | 
			
		||||
  #define COLOR_WHITE                 COLOR_DEF(1.0f, 1.0f, 1.0f, 1.0f)
 | 
			
		||||
  #define COLOR_RED                   COLOR_DEF(1.0f, 0, 0, 1.0f)
 | 
			
		||||
  #define COLOR_GREEN                 COLOR_DEF(0, 1.0f, 0, 1.0f)
 | 
			
		||||
  #define COLOR_BLUE                  COLOR_DEF(0, 0, 1.0f, 1.0f)
 | 
			
		||||
  #define COLOR_BLACK                 COLOR_DEF(0, 0, 0, 1.0f)
 | 
			
		||||
  #define COLOR_MAGENTA               COLOR_DEF(1.0f, 0, 1.0f, 1.0f)
 | 
			
		||||
  #define COLOR_DARK_GREY             COLOR_DEF(0.2f, 0.2f, 0.2f, 1.0f)
 | 
			
		||||
  #define COLOR_LIGHT_GREY            COLOR_DEF(0.8f, 0.8f, 0.8f, 1.0f)
 | 
			
		||||
  #define COLOR_CORNFLOWER_BLUE       COLOR_DEF(0.4f, 0.6f, 0.9f, 1.0f)
 | 
			
		||||
  #define COLOR_WHITE_TRANSPARENT     COLOR_DEF(1.0f, 1.0f, 1.0f, 0.0f)
 | 
			
		||||
  #define COLOR_BLACK_TRANSPARENT     COLOR_DEF(0.0f, 0.0f, 0.0f, 0.0f)
 | 
			
		||||
  #define COLOR_TRANSPARENT           COLOR_WHITE_TRANSPARENT
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										16
									
								
								src/dawn/display/font/truetype/TrueTypeShared.hpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								src/dawn/display/font/truetype/TrueTypeShared.hpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,16 @@
 | 
			
		||||
// Copyright (c) 2023 Dominic Masters
 | 
			
		||||
// 
 | 
			
		||||
// This software is released under the MIT License.
 | 
			
		||||
// https://opensource.org/licenses/MIT
 | 
			
		||||
 | 
			
		||||
#pragma once
 | 
			
		||||
#include "util/flag.hpp"
 | 
			
		||||
 | 
			
		||||
#define TRUE_TYPE_CHAR_BEGIN 0x00
 | 
			
		||||
#define TRUE_TYPE_CHAR_END 0xFF
 | 
			
		||||
 | 
			
		||||
#define TRUE_TYPE_VARIANT_BOLD FLAG_DEFINE(0)
 | 
			
		||||
#define TRUE_TYPE_VARIANT_ITALICS FLAG_DEFINE(1)
 | 
			
		||||
 | 
			
		||||
#define TRUE_TYPE_DECORATION_STRIKETHROUGH FLAG_DEFINE(0)
 | 
			
		||||
#define TRUE_TYPE_DECORATION_UNDERLINE FLAG_DEFINE(1)
 | 
			
		||||
		Reference in New Issue
	
	Block a user