1 /* NOTE: this class will _NOT_ handle resolution changes cleanly. You have been warned. :-) */
5 #include "splitscreen.h"
8 SplitScreen::SplitScreen(GenericScreen *s1, GenericScreen *s2, GenericScreen *s3, GenericScreen *s4)
16 for (unsigned i = 0; i < 4; ++i)
20 SplitScreen::~SplitScreen()
24 bool SplitScreen::check_invalidated()
29 for (unsigned i = 0; i < 4; ++i) {
30 if (subscreens[i] && subscreens[i]->check_invalidated())
37 void SplitScreen::draw(unsigned char *buf, unsigned width, unsigned height)
39 for (unsigned i = 0; i < 4; ++i) {
40 if (subbufs[i] == NULL) { // see line 1
41 subbufs[i] = new unsigned char[width/2 * height/2 * 4];
42 memset(subbufs[i], 0, width/2 * height/2 * 4);
44 if (subscreens[i] && subscreens[i]->check_invalidated()) {
45 subscreens[i]->draw(subbufs[i], width/2, height/2);
49 copy_subscreen(buf, subbufs[0], width, height);
50 copy_subscreen(buf + (width/2) * 4, subbufs[1], width, height);
51 copy_subscreen(buf + width * (height/2) * 4, subbufs[2], width, height);
52 copy_subscreen(buf + width * (height/2) * 4 + (width/2) * 4, subbufs[3], width, height);
55 int r = atoi(get_theme_config("divider", "red").c_str());
56 int g = atoi(get_theme_config("divider", "green").c_str());
57 int b = atoi(get_theme_config("divider", "blue").c_str());
59 unsigned char *ptr = buf + (height/2) * width * 4;
60 for (unsigned x = 0; x < width; ++x) {
67 ptr = buf + (width/2) * 4;
68 for (unsigned y = 0; y < height; ++y) {
80 void SplitScreen::copy_subscreen(unsigned char *dst, unsigned char *src, unsigned width, unsigned height)
82 for (unsigned y = 0; y < height/2; ++y) {
83 unsigned char *sptr = src + y * width/2 * 4;
84 unsigned char *dptr = dst + y * width * 4;
86 memcpy(dptr, sptr, width/2 * 4);