Skip to content

Instantly share code, notes, and snippets.

@memononen
memononen / hsluv.c
Created August 17, 2025 16:12
hsluv
static const double ref_u = 0.19783000664283680764;
static const double ref_v = 0.46831999493879100370;
static const double kappa = 903.29629629629629629630;
static const double epsilon = 0.00885645167903563082;
static const double xyz_to_rgb[9] = {
3.24096994190452134377, -1.53738317757009345794, -0.49861076029300328366,
-0.96924363628087982613, 1.87596750150772066772, 0.04155505740717561247,
0.05563007969699360846, -0.20397695888897656435, 1.05697151424287856072,
#define MAX_SIZE (64*1024)
static struct my_data data[MAX_SIZE];
static short free_idx[MAX_SIZE];
static short first_free_idx = -1;
// init; populate free items
free_idx[MAX_SIZE-1] = -1;
for (int i = 0; i < MAX_SIZE-1; ++i) {
free_idx[i] = i+1;
}
// Named color names (theme specific)
enum MIcolorNames {
MI_COLOR_NEUTRAL,
MI_COLOR_ACCENT_A,
};
// Tones per name (theme specific)
enum MIcolorTone {
MI_COLORTONE_50,
MI_COLORTONE_75,
#include "milayout.h"
#include <stdlib.h>
#include <stdarg.h>
static float mi__minf(float a, float b) { return a < b ? a : b; }
static float mi__maxf(float a, float b) { return a > b ? a : b; }
static int mi__getGrow(MIbox* box, int main)
{
return box->content.xy[main] > 0 ? box->grow : (box->grow | 1);
@memononen
memononen / diff3.cpp
Created December 7, 2021 19:33
3-way merge based on O(NP) Myers diff and diff3, merging per item
#include <stdio.h>
#include <vector>
#include <span>
#include <algorithm>
// Based on
// "An O(NP) Sequence Comparison Algorithm" by Sun Wu, Udi Manber and Gene Myers
// - https://publications.mpi-cbg.de/Wu_1990_6334.pdf
// - Good article visualizing Myer's older algorithm: https://epxx.co/artigos/diff_en.html
//
@memononen
memononen / merge.cpp
Last active December 4, 2021 19:19
3-way merge based on O(NP) Myers diff and diff3
#include <stdio.h>
#include <vector>
#include <span>
#include <algorithm>
// Based on
// "An O(NP) Sequence Comparison Algorithm" by Sun Wu, Udi Manber and Gene Myers
// - https://publications.mpi-cbg.de/Wu_1990_6334.pdf
// - Good article visualizing Myer's older algorithm: https://epxx.co/artigos/diff_en.html
//
@memononen
memononen / diff.cpp
Last active November 20, 2021 19:01
O(NP) diff with backtracking
#include <stdio.h>
#include <vector>
#include <algorithm>
// Based on "An O(NP) Sequence Comparison Algorithm" by Sun Wu, Udi Manber and Gene Myers
struct Edit {
enum Type { Insert, Delete, Common };
Edit() = default;
Edit(Type _type, int _a, int _b, int _n) : type(_type), a(_a), b(_b), n(_n) {}
@memononen
memononen / biasgaininf.c
Last active February 2, 2022 10:09
bias gain inflection point
float evalCurve(float x, float tx, float ty, float sa, float sb)
{
const float EPS = 1e-6f;
if (x < tx) {
return (ty * x) / (x + sa * (tx - x) + EPS);
} else {
return ((1-ty) * (x-1)) / ((1-x) - sb * (tx - x) + EPS) + 1.0f;
}
}
@memononen
memononen / easing.c
Last active October 7, 2020 21:37
Cheap Fake Cubic Easing Curve
//
// Copyright (c) 2013 Mikko Mononen memon@inside.org
//
// This software is provided 'as-is', without any express or implied
// warranty. In no event will the authors be held liable for any damages
// arising from the use of this software.
// Permission is granted to anyone to use this software for any purpose,
// including commercial applications, and to alter it and redistribute it
// freely, subject to the following restrictions:
// 1. The origin of this software must not be misrepresented; you must not
/*
(0,0)
+..................
: image :
: :
: +----+ :
: |rect| :
: +----+ :
: :
...................