summaryrefslogtreecommitdiff
path: root/desktop/plot_style.h
blob: a3b3f0103370dffa3fcefb9ceecdc0fd9660ef0b (plain)
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
/*
 * Copyright 2004 James Bursa <bursa@users.sourceforge.net>
 *
 * This file is part of NetSurf, http://www.netsurf-browser.org/
 *
 * NetSurf is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; version 2 of the License.
 *
 * NetSurf is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

/** \file
 * Plotter styles.
 */

#ifndef _NETSURF_DESKTOP_PLOT_STYLE_H_
#define _NETSURF_DESKTOP_PLOT_STYLE_H_

#include <stdint.h>

/* html widget colours */
#define WIDGET_BASEC 0xd9d9d9
#define WIDGET_BLOBC 0x000000

/* Darken a colour by taking three quarters of each channel's intensity */
#define darken_colour(c1)				 		\
	((((3 * (c1 >> 16)) >> 2) << 16) |		 		\
	 (((3 * ((c1 >> 8) & 0xff)) >> 2) << 8) |	 		\
	 (((3 * (c1 & 0xff)) >> 2) << 0))

/* Darken a colour by taking nine sixteenths of each channel's intensity */
#define double_darken_colour(c1)			 		\
	((((9 * (c1 >> 16)) >> 4) << 16) |		 		\
	 (((9 * ((c1 >> 8) & 0xff)) >> 4) << 8) |	 		\
	 (((9 * (c1 & 0xff)) >> 4) << 0))

/* Lighten a colour by taking three quarters of each channel's intensity
 * and adding a full quarter
 */
#define lighten_colour(c1)						\
	(((((3 * (c1 >> 16)) >> 2) + 64) << 16) |			\
	 ((((3 * ((c1 >> 8) & 0xff)) >> 2) + 64) << 8) |		\
	 ((((3 * (c1 & 0xff)) >> 2) + 64) << 0))

/* Lighten a colour by taking nine sixteenths of each channel's intensity and
 * adding a full intensity 7/16ths */
#define double_lighten_colour(c1)					\
	(((((9 * (c1 >> 16)) >> 4) + 112) << 16) |			\
	 ((((9 * ((c1 >> 8) & 0xff)) >> 4) + 112) << 8) |		\
	 ((((9 * (c1 & 0xff)) >> 4) + 112) << 0))

/* Blend two colours by taking half the intensity of each channel in the first
 * colour and adding them to half the intensity of each channel in the second
 * colour */
#define blend_colour(c0, c1)						\
	 ((((c0 >> 16) + (c1 >> 16)) >> 1) << 16) |			\
	(((((c0 >> 8) & 0xff) + ((c1 >> 8) & 0xff)) >> 1) << 8) |	\
	 ((((c0 & 0xff) + (c1 & 0xff)) >> 1) << 0)

/**
 * Colour type: XBGR
 */
typedef uint32_t colour;
/**
 * Magical transparent value
 */
#define NS_TRANSPARENT 0x01000000

/**
 * Type of plot operation
 */
typedef enum {
	PLOT_OP_TYPE_NONE = 0, /**< No operation */
	PLOT_OP_TYPE_SOLID, /**< Solid colour */
	PLOT_OP_TYPE_DOT, /**< Dotted plot */
	PLOT_OP_TYPE_DASH, /**< Dashed plot */
} plot_operation_type_t;

/**
 * Plot style for stroke/fill plotters
 */
typedef struct {
	plot_operation_type_t stroke_type; /**< Stroke plot type */
	int stroke_width; /**< Width of stroke, in pixels */
	colour stroke_colour; /**< Colour of stroke */
	plot_operation_type_t fill_type; /**< Fill plot type */
	colour fill_colour; /**< Colour of fill */
} plot_style_t;

/**
 * Generic font family type
 */
typedef enum {
	PLOT_FONT_FAMILY_SANS_SERIF = 0,
	PLOT_FONT_FAMILY_SERIF,
	PLOT_FONT_FAMILY_MONOSPACE,
	PLOT_FONT_FAMILY_CURSIVE,
	PLOT_FONT_FAMILY_FANTASY,
	PLOT_FONT_FAMILY_COUNT /**< Number of generic families */
} plot_font_generic_family_t;

/**
 * Font plot flags
 */
typedef unsigned long plot_font_flags_t;
#define FONTF_NONE 0
#define FONTF_ITALIC 1
#define FONTF_OBLIQUE 2
#define FONTF_SMALLCAPS 4

/**
 * Scaling factor for font sizes
 */
#define FONT_SIZE_SCALE 1024

/**
 * Font style for plotting
 */
typedef struct {
	plot_font_generic_family_t family; /**< Generic family to plot with */
	int size; /**< Font size, in points * FONT_SIZE_SCALE */
	int weight; /**< Font weight: value in range [100,900] as per CSS */
	plot_font_flags_t flags; /**< Font flags */
	colour background; /**< Background colour to blend to, if appropriate */
	colour foreground; /**< Colour of text */
} plot_font_style_t;

/* global fill styles */
extern plot_style_t *plot_style_fill_white;
extern plot_style_t *plot_style_fill_red;
extern plot_style_t *plot_style_fill_black;

/* Box model debug outline styles for content, padding and margin edges */
extern plot_style_t const * const plot_style_content_edge;
extern plot_style_t const * const plot_style_padding_edge;
extern plot_style_t const * const plot_style_margin_edge;

/* other styles */
extern plot_style_t *plot_style_caret;
extern plot_style_t *plot_style_stroke_history;
extern plot_style_t *plot_style_fill_wbasec;
extern plot_style_t *plot_style_fill_darkwbasec;
extern plot_style_t *plot_style_fill_lightwbasec;
extern plot_style_t *plot_style_fill_wblobc;
extern plot_style_t *plot_style_stroke_wblobc;
extern plot_style_t *plot_style_stroke_darkwbasec;
extern plot_style_t *plot_style_stroke_lightwbasec;

/* Default font style */
extern plot_font_style_t const * const plot_style_font;

#endif