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
|
/*
* Copyright 2009 Vincent Sanders <vince@simtec.co.uk>
*
* This file is part of libnsfb, http://www.netsurf-browser.org/
* Licenced under the MIT License,
* http://www.opensource.org/licenses/mit-license.php
*/
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include "libnsfb.h"
#include "libnsfb_plot.h"
#include "libnsfb_event.h"
#include "nsfb.h"
#include "surface.h"
#include "plot.h"
#define UNUSED(x) ((x) = (x))
static int ram_defaults(nsfb_t *nsfb)
{
nsfb->width = 0;
nsfb->height = 0;
nsfb->format = NSFB_FMT_ABGR8888;
/* select default sw plotters for bpp */
select_plotters(nsfb);
return 0;
}
static int ram_initialise(nsfb_t *nsfb)
{
size_t size = (nsfb->width * nsfb->height * nsfb->bpp) / 8;
nsfb->ptr = realloc(nsfb->ptr, size);
nsfb->linelen = (nsfb->width * nsfb->bpp) / 8;
return 0;
}
static int ram_set_geometry(nsfb_t *nsfb, int width, int height, enum nsfb_format_e format)
{
int startsize;
int endsize;
startsize = (nsfb->width * nsfb->height * nsfb->bpp) / 8;
if (width > 0) {
nsfb->width = width;
}
if (height > 0) {
nsfb->height = height;
}
if (format != NSFB_FMT_ANY) {
nsfb->format = format;
}
/* select soft plotters appropriate for format */
select_plotters(nsfb);
endsize = (nsfb->width * nsfb->height * nsfb->bpp) / 8;
if ((nsfb->ptr != NULL) && (startsize != endsize)) {
nsfb->ptr = realloc(nsfb->ptr, endsize);
}
nsfb->linelen = (nsfb->width * nsfb->bpp) / 8;
return 0;
}
static int ram_finalise(nsfb_t *nsfb)
{
free(nsfb->ptr);
return 0;
}
static bool ram_input(nsfb_t *nsfb, nsfb_event_t *event, int timeout)
{
UNUSED(nsfb);
UNUSED(event);
UNUSED(timeout);
return false;
}
const nsfb_surface_rtns_t ram_rtns = {
.defaults = ram_defaults,
.initialise = ram_initialise,
.finalise = ram_finalise,
.input = ram_input,
.geometry = ram_set_geometry,
};
NSFB_SURFACE_DEF(ram, NSFB_SURFACE_RAM, &ram_rtns)
/*
* Local variables:
* c-basic-offset: 4
* tab-width: 8
* End:
*/
|