blob: 577b0f066bdfb258455c5c0692c50a0760822eda (
plain) (
tree)
|
|
/* See LICENSE file for copyright and license details. */
#include "common.h"
enum libfonts_subpixel_order_class
libfonts_get_subpixel_order_class(enum libfonts_subpixel_order order,
enum libfonts_subpixel_colour *cell1p,
enum libfonts_subpixel_colour *cell2p,
enum libfonts_subpixel_colour *cell3p)
{
enum libfonts_subpixel_colour c1, c2, c3;
enum libfonts_subpixel_order_class layout;
int i; /* RGB, RBG, GRB, GBR, BRG, BGR */
if (order >= LIBFONTS_SUBPIXEL_ORDER_RGB && order <= LIBFONTS_SUBPIXEL_ORDER_G_R_B) {
layout = ((order - LIBFONTS_SUBPIXEL_ORDER_RGB) & 1) + LIBFONTS_SUBPIXEL_ORDER_CLASS_123;
i = (order - LIBFONTS_SUBPIXEL_ORDER_RGB) / 2;
i = ((int []){0, 5, 3, 1, 4, 2})[i];
} else if (order >= LIBFONTS_SUBPIXEL_ORDER_RR_GB && order <= LIBFONTS_SUBPIXEL_ORDER_BALANCED_BR_BG) {
layout = ((order - LIBFONTS_SUBPIXEL_ORDER_RR_GB) & 3) + LIBFONTS_SUBPIXEL_ORDER_CLASS_11_23;
if (order >= LIBFONTS_SUBPIXEL_ORDER_BALANCED_RR_GB)
layout += 4;
i = (order - LIBFONTS_SUBPIXEL_ORDER_RR_GB) / 4 % 6;
} else {
layout = LIBFONTS_SUBPIXEL_ORDER_CLASS_OTHER;
i = 0;
}
c1 = i / 2;
c2 = (i + 1 + i / 3) % 3;
c3 = 3 - c1 - c2;
if (cell1p)
*cell1p = c1;
if (cell2p)
*cell2p = c2;
if (cell3p)
*cell3p = c3;
return layout;
}
|