| author | Radek Brich <radek.brich@devl.cz> | 
| Sat, 05 Jan 2013 18:56:45 +0100 | |
| changeset 51 | dce7325109c1 | 
| parent 50 | c5b8b9d2da95 | 
| child 52 | 50a1857557da | 
| permissions | -rw-r--r-- | 
| 
47
 
537d7c6b48a2
Add sdlterm prototype: extension module for SDL driver.
 
Radek Brich <radek.brich@devl.cz> 
parents:  
diff
changeset
 | 
1  | 
#include "SDL.h"  | 
| 
 
537d7c6b48a2
Add sdlterm prototype: extension module for SDL driver.
 
Radek Brich <radek.brich@devl.cz> 
parents:  
diff
changeset
 | 
2  | 
#include "SDL_ttf.h"  | 
| 
 
537d7c6b48a2
Add sdlterm prototype: extension module for SDL driver.
 
Radek Brich <radek.brich@devl.cz> 
parents:  
diff
changeset
 | 
3  | 
|
| 
 
537d7c6b48a2
Add sdlterm prototype: extension module for SDL driver.
 
Radek Brich <radek.brich@devl.cz> 
parents:  
diff
changeset
 | 
4  | 
#include <map>  | 
| 
 
537d7c6b48a2
Add sdlterm prototype: extension module for SDL driver.
 
Radek Brich <radek.brich@devl.cz> 
parents:  
diff
changeset
 | 
5  | 
#include <vector>  | 
| 
 
537d7c6b48a2
Add sdlterm prototype: extension module for SDL driver.
 
Radek Brich <radek.brich@devl.cz> 
parents:  
diff
changeset
 | 
6  | 
|
| 
 
537d7c6b48a2
Add sdlterm prototype: extension module for SDL driver.
 
Radek Brich <radek.brich@devl.cz> 
parents:  
diff
changeset
 | 
7  | 
|
| 
50
 
c5b8b9d2da95
DriverSDL: Implement colors.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
49 
diff
changeset
 | 
8  | 
enum class Style: Uint16  | 
| 
 
c5b8b9d2da95
DriverSDL: Implement colors.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
49 
diff
changeset
 | 
9  | 
{
 | 
| 
51
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
10  | 
BOLD = 1 << 0, // bold font  | 
| 
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
11  | 
UNDERLINE = 1 << 1, // underline text  | 
| 
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
12  | 
STANDOUT = 1 << 2, // inverse bg/fg  | 
| 
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
13  | 
BLINK = 1 << 3, // blinking  | 
| 
50
 
c5b8b9d2da95
DriverSDL: Implement colors.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
49 
diff
changeset
 | 
14  | 
};  | 
| 
 
c5b8b9d2da95
DriverSDL: Implement colors.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
49 
diff
changeset
 | 
15  | 
|
| 
 
c5b8b9d2da95
DriverSDL: Implement colors.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
49 
diff
changeset
 | 
16  | 
|
| 
 
c5b8b9d2da95
DriverSDL: Implement colors.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
49 
diff
changeset
 | 
17  | 
class ColorMap  | 
| 
 
c5b8b9d2da95
DriverSDL: Implement colors.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
49 
diff
changeset
 | 
18  | 
{
 | 
| 
 
c5b8b9d2da95
DriverSDL: Implement colors.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
49 
diff
changeset
 | 
19  | 
private:  | 
| 
51
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
20  | 
    Uint8 _map[16][3] = {
 | 
| 
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
21  | 
        {0,0,0},        // 0 - black
 | 
| 
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
22  | 
        {23,23,178},    // 1 - blue
 | 
| 
50
 
c5b8b9d2da95
DriverSDL: Implement colors.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
49 
diff
changeset
 | 
23  | 
        {23,178,23},    // 2 - green
 | 
| 
 
c5b8b9d2da95
DriverSDL: Implement colors.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
49 
diff
changeset
 | 
24  | 
        {23,178,178},   // 3 - cyan
 | 
| 
51
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
25  | 
        {178,23,23},    // 4 - red
 | 
| 
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
26  | 
        {178,23,178},   // 5 - magenta
 | 
| 
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
27  | 
        {178,103,23},   // 6 - brown
 | 
| 
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
28  | 
        {178,178,178},  // 7 - light gray
 | 
| 
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
29  | 
        {104,104,104},  // 8 - gray
 | 
| 
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
30  | 
        {84,84,255},    // 9 - light blue
 | 
| 
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
31  | 
        {84,255,84},    // 10 - light green
 | 
| 
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
32  | 
        {84,255,255},   // 11 - light cyan
 | 
| 
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
33  | 
        {255,84,84},    // 12 - light red
 | 
| 
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
34  | 
        {255,84,255},   // 13 - light magenta
 | 
| 
50
 
c5b8b9d2da95
DriverSDL: Implement colors.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
49 
diff
changeset
 | 
35  | 
        {255,255,84},   // 14 - yellow
 | 
| 
 
c5b8b9d2da95
DriverSDL: Implement colors.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
49 
diff
changeset
 | 
36  | 
        {255,255,255},  // 15 - white
 | 
| 
51
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
37  | 
};  | 
| 
50
 
c5b8b9d2da95
DriverSDL: Implement colors.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
49 
diff
changeset
 | 
38  | 
|
| 
 
c5b8b9d2da95
DriverSDL: Implement colors.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
49 
diff
changeset
 | 
39  | 
public:  | 
| 
 
c5b8b9d2da95
DriverSDL: Implement colors.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
49 
diff
changeset
 | 
40  | 
void index_to_rgb(int index, SDL_Color &color);  | 
| 
 
c5b8b9d2da95
DriverSDL: Implement colors.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
49 
diff
changeset
 | 
41  | 
};  | 
| 
 
c5b8b9d2da95
DriverSDL: Implement colors.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
49 
diff
changeset
 | 
42  | 
|
| 
 
c5b8b9d2da95
DriverSDL: Implement colors.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
49 
diff
changeset
 | 
43  | 
|
| 
48
 
1f00e90fd72a
Add SDL driver prototype. Update sdlterm: Handle keyboard, mouse events. Add glyph cache.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
47 
diff
changeset
 | 
44  | 
class GlyphCache  | 
| 
 
1f00e90fd72a
Add SDL driver prototype. Update sdlterm: Handle keyboard, mouse events. Add glyph cache.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
47 
diff
changeset
 | 
45  | 
{
 | 
| 
 
1f00e90fd72a
Add SDL driver prototype. Update sdlterm: Handle keyboard, mouse events. Add glyph cache.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
47 
diff
changeset
 | 
46  | 
public:  | 
| 
51
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
47  | 
SDL_Surface *lookup_glyph(Uint16 ch);  | 
| 
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
48  | 
void put_glyph(Uint16 ch, SDL_Surface *srf);  | 
| 
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
49  | 
void flush();  | 
| 
48
 
1f00e90fd72a
Add SDL driver prototype. Update sdlterm: Handle keyboard, mouse events. Add glyph cache.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
47 
diff
changeset
 | 
50  | 
|
| 
 
1f00e90fd72a
Add SDL driver prototype. Update sdlterm: Handle keyboard, mouse events. Add glyph cache.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
47 
diff
changeset
 | 
51  | 
private:  | 
| 
51
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
52  | 
std::map<Uint16, SDL_Surface*> _glyph_map;  | 
| 
48
 
1f00e90fd72a
Add SDL driver prototype. Update sdlterm: Handle keyboard, mouse events. Add glyph cache.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
47 
diff
changeset
 | 
53  | 
};  | 
| 
 
1f00e90fd72a
Add SDL driver prototype. Update sdlterm: Handle keyboard, mouse events. Add glyph cache.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
47 
diff
changeset
 | 
54  | 
|
| 
 
1f00e90fd72a
Add SDL driver prototype. Update sdlterm: Handle keyboard, mouse events. Add glyph cache.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
47 
diff
changeset
 | 
55  | 
|
| 
47
 
537d7c6b48a2
Add sdlterm prototype: extension module for SDL driver.
 
Radek Brich <radek.brich@devl.cz> 
parents:  
diff
changeset
 | 
56  | 
class GlyphRenderer  | 
| 
 
537d7c6b48a2
Add sdlterm prototype: extension module for SDL driver.
 
Radek Brich <radek.brich@devl.cz> 
parents:  
diff
changeset
 | 
57  | 
{
 | 
| 
 
537d7c6b48a2
Add sdlterm prototype: extension module for SDL driver.
 
Radek Brich <radek.brich@devl.cz> 
parents:  
diff
changeset
 | 
58  | 
public:  | 
| 
51
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
59  | 
GlyphRenderer();  | 
| 
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
60  | 
~GlyphRenderer();  | 
| 
47
 
537d7c6b48a2
Add sdlterm prototype: extension module for SDL driver.
 
Radek Brich <radek.brich@devl.cz> 
parents:  
diff
changeset
 | 
61  | 
|
| 
51
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
62  | 
void open_font(const char *fname_regular, const char *fname_bold, int ptsize);  | 
| 
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
63  | 
void close_font();  | 
| 
47
 
537d7c6b48a2
Add sdlterm prototype: extension module for SDL driver.
 
Radek Brich <radek.brich@devl.cz> 
parents:  
diff
changeset
 | 
64  | 
|
| 
51
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
65  | 
// do not free surface returned!  | 
| 
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
66  | 
SDL_Surface *render_cell(Uint16 ch, Uint16 attr);  | 
| 
47
 
537d7c6b48a2
Add sdlterm prototype: extension module for SDL driver.
 
Radek Brich <radek.brich@devl.cz> 
parents:  
diff
changeset
 | 
67  | 
|
| 
51
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
68  | 
    int get_cell_width() { return _cell_width; };
 | 
| 
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
69  | 
    int get_cell_height() { return _cell_height; };
 | 
| 
47
 
537d7c6b48a2
Add sdlterm prototype: extension module for SDL driver.
 
Radek Brich <radek.brich@devl.cz> 
parents:  
diff
changeset
 | 
70  | 
|
| 
 
537d7c6b48a2
Add sdlterm prototype: extension module for SDL driver.
 
Radek Brich <radek.brich@devl.cz> 
parents:  
diff
changeset
 | 
71  | 
private:  | 
| 
51
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
72  | 
TTF_Font *_font_regular;  | 
| 
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
73  | 
TTF_Font *_font_bold;  | 
| 
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
74  | 
int _cell_width;  | 
| 
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
75  | 
int _cell_height;  | 
| 
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
76  | 
GlyphCache _cache;  | 
| 
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
77  | 
ColorMap _colormap;  | 
| 
47
 
537d7c6b48a2
Add sdlterm prototype: extension module for SDL driver.
 
Radek Brich <radek.brich@devl.cz> 
parents:  
diff
changeset
 | 
78  | 
};  | 
| 
 
537d7c6b48a2
Add sdlterm prototype: extension module for SDL driver.
 
Radek Brich <radek.brich@devl.cz> 
parents:  
diff
changeset
 | 
79  | 
|
| 
 
537d7c6b48a2
Add sdlterm prototype: extension module for SDL driver.
 
Radek Brich <radek.brich@devl.cz> 
parents:  
diff
changeset
 | 
80  | 
|
| 
 
537d7c6b48a2
Add sdlterm prototype: extension module for SDL driver.
 
Radek Brich <radek.brich@devl.cz> 
parents:  
diff
changeset
 | 
81  | 
struct TerminalCell  | 
| 
 
537d7c6b48a2
Add sdlterm prototype: extension module for SDL driver.
 
Radek Brich <radek.brich@devl.cz> 
parents:  
diff
changeset
 | 
82  | 
{
 | 
| 
51
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
83  | 
Uint16 ch;  | 
| 
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
84  | 
Uint16 attr;  | 
| 
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
85  | 
    bool operator !=(const TerminalCell &rhs) const { return ch != rhs.ch || attr != rhs.attr; };
 | 
| 
47
 
537d7c6b48a2
Add sdlterm prototype: extension module for SDL driver.
 
Radek Brich <radek.brich@devl.cz> 
parents:  
diff
changeset
 | 
86  | 
};  | 
| 
 
537d7c6b48a2
Add sdlterm prototype: extension module for SDL driver.
 
Radek Brich <radek.brich@devl.cz> 
parents:  
diff
changeset
 | 
87  | 
|
| 
 
537d7c6b48a2
Add sdlterm prototype: extension module for SDL driver.
 
Radek Brich <radek.brich@devl.cz> 
parents:  
diff
changeset
 | 
88  | 
|
| 
 
537d7c6b48a2
Add sdlterm prototype: extension module for SDL driver.
 
Radek Brich <radek.brich@devl.cz> 
parents:  
diff
changeset
 | 
89  | 
class TerminalScreen  | 
| 
 
537d7c6b48a2
Add sdlterm prototype: extension module for SDL driver.
 
Radek Brich <radek.brich@devl.cz> 
parents:  
diff
changeset
 | 
90  | 
{
 | 
| 
 
537d7c6b48a2
Add sdlterm prototype: extension module for SDL driver.
 
Radek Brich <radek.brich@devl.cz> 
parents:  
diff
changeset
 | 
91  | 
public:  | 
| 
51
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
92  | 
TerminalScreen():  | 
| 
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
93  | 
_screen_surface(NULL), _cells_front(0), _cells_back(0), _render(),  | 
| 
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
94  | 
_pixel_width(0), _pixel_height(0), _width(0), _height(0),  | 
| 
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
95  | 
        _cell_width(0), _cell_height(0) {};
 | 
| 
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
96  | 
    ~TerminalScreen() {};
 | 
| 
47
 
537d7c6b48a2
Add sdlterm prototype: extension module for SDL driver.
 
Radek Brich <radek.brich@devl.cz> 
parents:  
diff
changeset
 | 
97  | 
|
| 
51
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
98  | 
void select_font(const char *fname_regular, const char *fname_bold, int ptsize);  | 
| 
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
99  | 
void resize(int pxwidth, int pxheight);  | 
| 
47
 
537d7c6b48a2
Add sdlterm prototype: extension module for SDL driver.
 
Radek Brich <radek.brich@devl.cz> 
parents:  
diff
changeset
 | 
100  | 
|
| 
51
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
101  | 
void erase();  | 
| 
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
102  | 
void putch(int x, int y, Uint16 ch, Uint16 attr);  | 
| 
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
103  | 
void commit();  | 
| 
47
 
537d7c6b48a2
Add sdlterm prototype: extension module for SDL driver.
 
Radek Brich <radek.brich@devl.cz> 
parents:  
diff
changeset
 | 
104  | 
|
| 
51
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
105  | 
    int get_width() { return _width; };
 | 
| 
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
106  | 
    int get_height() { return _height; };
 | 
| 
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
107  | 
    int get_cell_width() { return _cell_width; };
 | 
| 
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
108  | 
    int get_cell_height() { return _cell_height; };
 | 
| 
48
 
1f00e90fd72a
Add SDL driver prototype. Update sdlterm: Handle keyboard, mouse events. Add glyph cache.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
47 
diff
changeset
 | 
109  | 
|
| 
47
 
537d7c6b48a2
Add sdlterm prototype: extension module for SDL driver.
 
Radek Brich <radek.brich@devl.cz> 
parents:  
diff
changeset
 | 
110  | 
private:  | 
| 
51
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
111  | 
SDL_Surface *_screen_surface;  | 
| 
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
112  | 
std::vector<TerminalCell> _cells_front;  | 
| 
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
113  | 
std::vector<TerminalCell> _cells_back;  | 
| 
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
114  | 
GlyphRenderer _render;  | 
| 
47
 
537d7c6b48a2
Add sdlterm prototype: extension module for SDL driver.
 
Radek Brich <radek.brich@devl.cz> 
parents:  
diff
changeset
 | 
115  | 
|
| 
51
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
116  | 
int _pixel_width; // terminal window width in pixels  | 
| 
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
117  | 
int _pixel_height;  | 
| 
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
118  | 
int _width; // width in characters  | 
| 
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
119  | 
int _height; // height in characters  | 
| 
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
120  | 
int _cell_width; // character cell width in pixels  | 
| 
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
121  | 
int _cell_height;  | 
| 
47
 
537d7c6b48a2
Add sdlterm prototype: extension module for SDL driver.
 
Radek Brich <radek.brich@devl.cz> 
parents:  
diff
changeset
 | 
122  | 
|
| 
51
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
123  | 
void _reset_cells();  | 
| 
47
 
537d7c6b48a2
Add sdlterm prototype: extension module for SDL driver.
 
Radek Brich <radek.brich@devl.cz> 
parents:  
diff
changeset
 | 
124  | 
};  | 
| 
 
537d7c6b48a2
Add sdlterm prototype: extension module for SDL driver.
 
Radek Brich <radek.brich@devl.cz> 
parents:  
diff
changeset
 | 
125  | 
|
| 
 
537d7c6b48a2
Add sdlterm prototype: extension module for SDL driver.
 
Radek Brich <radek.brich@devl.cz> 
parents:  
diff
changeset
 | 
126  | 
|
| 
48
 
1f00e90fd72a
Add SDL driver prototype. Update sdlterm: Handle keyboard, mouse events. Add glyph cache.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
47 
diff
changeset
 | 
127  | 
struct Event  | 
| 
47
 
537d7c6b48a2
Add sdlterm prototype: extension module for SDL driver.
 
Radek Brich <radek.brich@devl.cz> 
parents:  
diff
changeset
 | 
128  | 
{
 | 
| 
51
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
129  | 
    enum { QUIT, RESIZE, KEYPRESS, MOUSEDOWN, MOUSEUP, MOUSEMOVE, MOUSEWHEEL };
 | 
| 
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
130  | 
int type;  | 
| 
47
 
537d7c6b48a2
Add sdlterm prototype: extension module for SDL driver.
 
Radek Brich <radek.brich@devl.cz> 
parents:  
diff
changeset
 | 
131  | 
|
| 
51
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
132  | 
union  | 
| 
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
133  | 
    {
 | 
| 
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
134  | 
struct  | 
| 
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
135  | 
        {
 | 
| 
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
136  | 
char keyname[10];  | 
| 
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
137  | 
Uint16 unicode;  | 
| 
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
138  | 
} key;  | 
| 
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
139  | 
struct  | 
| 
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
140  | 
        {
 | 
| 
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
141  | 
int x, y;  | 
| 
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
142  | 
int button;  | 
| 
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
143  | 
} mouse;  | 
| 
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
144  | 
};  | 
| 
47
 
537d7c6b48a2
Add sdlterm prototype: extension module for SDL driver.
 
Radek Brich <radek.brich@devl.cz> 
parents:  
diff
changeset
 | 
145  | 
};  | 
| 
 
537d7c6b48a2
Add sdlterm prototype: extension module for SDL driver.
 
Radek Brich <radek.brich@devl.cz> 
parents:  
diff
changeset
 | 
146  | 
|
| 
 
537d7c6b48a2
Add sdlterm prototype: extension module for SDL driver.
 
Radek Brich <radek.brich@devl.cz> 
parents:  
diff
changeset
 | 
147  | 
|
| 
 
537d7c6b48a2
Add sdlterm prototype: extension module for SDL driver.
 
Radek Brich <radek.brich@devl.cz> 
parents:  
diff
changeset
 | 
148  | 
class Terminal  | 
| 
 
537d7c6b48a2
Add sdlterm prototype: extension module for SDL driver.
 
Radek Brich <radek.brich@devl.cz> 
parents:  
diff
changeset
 | 
149  | 
{
 | 
| 
 
537d7c6b48a2
Add sdlterm prototype: extension module for SDL driver.
 
Radek Brich <radek.brich@devl.cz> 
parents:  
diff
changeset
 | 
150  | 
public:  | 
| 
51
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
151  | 
Terminal();  | 
| 
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
152  | 
~Terminal();  | 
| 
47
 
537d7c6b48a2
Add sdlterm prototype: extension module for SDL driver.
 
Radek Brich <radek.brich@devl.cz> 
parents:  
diff
changeset
 | 
153  | 
|
| 
51
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
154  | 
void select_font(const char *fname_regular, const char *fname_bold, int ptsize)  | 
| 
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
155  | 
        { _screen.select_font(fname_regular, fname_bold, ptsize); };
 | 
| 
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
156  | 
    void resize(int pxwidth, int pxheight) { _screen.resize(pxwidth, pxheight); };
 | 
| 
47
 
537d7c6b48a2
Add sdlterm prototype: extension module for SDL driver.
 
Radek Brich <radek.brich@devl.cz> 
parents:  
diff
changeset
 | 
157  | 
|
| 
51
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
158  | 
    void erase() { _screen.erase(); };
 | 
| 
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
159  | 
    void putch(int x, int y, Uint16 ch) { _screen.putch(x, y, ch, _attr); };
 | 
| 
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
160  | 
    void commit() { _screen.commit(); };
 | 
| 
47
 
537d7c6b48a2
Add sdlterm prototype: extension module for SDL driver.
 
Radek Brich <radek.brich@devl.cz> 
parents:  
diff
changeset
 | 
161  | 
|
| 
51
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
162  | 
    Uint16 prepare_attr(Uint8 fg, Uint8 bg, Uint8 style) { return fg | bg << 4 | style << 8; };
 | 
| 
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
163  | 
    void set_attr(Uint16 value) { _attr = value; };
 | 
| 
47
 
537d7c6b48a2
Add sdlterm prototype: extension module for SDL driver.
 
Radek Brich <radek.brich@devl.cz> 
parents:  
diff
changeset
 | 
164  | 
|
| 
51
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
165  | 
    void set_cursor(int x, int y) { _cursor_x = x; _cursor_y = y; };
 | 
| 
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
166  | 
    void show_cursor(bool visible) { _cursor_visible = visible; };
 | 
| 
47
 
537d7c6b48a2
Add sdlterm prototype: extension module for SDL driver.
 
Radek Brich <radek.brich@devl.cz> 
parents:  
diff
changeset
 | 
167  | 
|
| 
51
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
168  | 
void get_next_event(Event &event);  | 
| 
47
 
537d7c6b48a2
Add sdlterm prototype: extension module for SDL driver.
 
Radek Brich <radek.brich@devl.cz> 
parents:  
diff
changeset
 | 
169  | 
|
| 
51
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
170  | 
    int get_width() { return _screen.get_width(); };
 | 
| 
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
171  | 
    int get_height() { return _screen.get_height(); };
 | 
| 
48
 
1f00e90fd72a
Add SDL driver prototype. Update sdlterm: Handle keyboard, mouse events. Add glyph cache.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
47 
diff
changeset
 | 
172  | 
|
| 
47
 
537d7c6b48a2
Add sdlterm prototype: extension module for SDL driver.
 
Radek Brich <radek.brich@devl.cz> 
parents:  
diff
changeset
 | 
173  | 
private:  | 
| 
51
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
174  | 
TerminalScreen _screen;  | 
| 
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
175  | 
Uint16 _attr;  | 
| 
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
176  | 
int _cursor_x;  | 
| 
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
177  | 
int _cursor_y;  | 
| 
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
178  | 
bool _cursor_visible;  | 
| 
48
 
1f00e90fd72a
Add SDL driver prototype. Update sdlterm: Handle keyboard, mouse events. Add glyph cache.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
47 
diff
changeset
 | 
179  | 
|
| 
51
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
180  | 
int _mousemove_last_x;  | 
| 
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
181  | 
int _mousemove_last_y;  | 
| 
49
 
1611c462c3e3
Update sdlterm: Optimize commit() - use two cell buffers, redraw only dirty cells, not everything. Fix keypress event, filter mousemove.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
48 
diff
changeset
 | 
182  | 
|
| 
51
 
dce7325109c1
Clean up: expand unwanted tabs.
 
Radek Brich <radek.brich@devl.cz> 
parents: 
50 
diff
changeset
 | 
183  | 
const char *_translate_keyname(SDLKey sym);  | 
| 
47
 
537d7c6b48a2
Add sdlterm prototype: extension module for SDL driver.
 
Radek Brich <radek.brich@devl.cz> 
parents:  
diff
changeset
 | 
184  | 
};  | 
| 
 
537d7c6b48a2
Add sdlterm prototype: extension module for SDL driver.
 
Radek Brich <radek.brich@devl.cz> 
parents:  
diff
changeset
 | 
185  |