-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathfb-page-descriptor.c
95 lines (74 loc) · 2.56 KB
/
fb-page-descriptor.c
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
/*
* SPDX-FileCopyrightText: 2021 Samuel Cuella <[email protected]>
*
* This file is part of SoFIS - an open source EFIS
*
* SPDX-License-Identifier: GPL-2.0-only
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <SDL2/SDL_image.h>
#include "fb-page-descriptor.h"
#include "generic-layer.h"
LadderPage *fb_ladder_page_init(LadderPage *self);
FBPageDescriptor *fb_page_descriptor_new(const char *filename, ScrollType direction, float page_size, float vstep, float vsubstep)
{
FBPageDescriptor *self;
self = calloc(1, sizeof(FBPageDescriptor));
if(self){
if(!fb_page_descriptor_init(self, filename, direction, page_size, vstep, vsubstep)){
free(self);
return NULL;
}
}
return self;
}
FBPageDescriptor *fb_page_descriptor_init(FBPageDescriptor *self, const char *filename, ScrollType direction, float page_size, float vstep, float vsubstep)
{
ladder_page_descriptor_init(
LADDER_PAGE_DESCRIPTOR(self), direction,
page_size, vstep, vsubstep,
fb_ladder_page_init
);
// self->filename = strdup(filename); //TODO: strdup ?
self->filename = (char*)filename; //TODO: strdup ?
return self;
}
void fb_page_descriptor_dispose(FBPageDescriptor *self)
{
free(self->filename);
}
LadderPage *fb_ladder_page_init(LadderPage *self)
{
VerticalStrip *strip;
GenericLayer *layer;
LadderPageDescriptor *adesc;
FBPageDescriptor *descriptor;
strip = VERTICAL_STRIP(self);
layer = GENERIC_LAYER(self);
descriptor = (FBPageDescriptor *)LADDER_PAGE(self)->descriptor;
adesc = LADDER_PAGE(self)->descriptor;
bool rv;
rv = generic_layer_init_from_file(GENERIC_LAYER(self),descriptor->filename);
if(!rv){
return NULL;
}
strip->ppv = generic_layer_h(layer)/(adesc->page_size*1.0);
// printf("FileBacked on %s ppv is %f\n",descriptor->filename,strip->ppv);
// printf("Page marking range is [%f, %f]\n", strip->start, strip->end);
/* We are just going to offset the interval, size remains the same
* so ppv wont change and can be computed before or afterwards*/
if(isnan(adesc->offset)){
ladder_page_descriptor_compute_offset(adesc, strip->ppv);
}
strip->start += adesc->offset;
strip->end = strip->start + adesc->page_size-1;
// int page_index = ladder_page_get_index(LADDER_PAGE(self));
// printf("Page %d real range is [%f, %f]\n",page_index, strip->start, strip->end);
return self;
}
void fb_ladder_page_dispose(LadderPage *self)
{
vertical_strip_dispose(VERTICAL_STRIP(self));
}