1 --- fbterm-1.2/src/screen.cpp.old 2008-12-15 20:27:32.000000000 +0100
2 +++ fbterm-1.2/src/screen.cpp 2008-12-15 20:31:55.000000000 +0100
3 @@ -184,8 +184,6 @@ void Screen::switchVc(bool enter)
5 void Screen::setupSysPalette(bool restore)
7 - if (vinfo.bits_per_pixel != 8) return;
9 static bool palette_saved = false;
10 static u16 saved_red[NR_COLORS], saved_green[NR_COLORS], saved_blue[NR_COLORS];
12 @@ -212,17 +210,62 @@ void Screen::setupSysPalette(bool restor
13 INIT_CMAP(saved_red, saved_green, saved_blue);
14 ioctl(mFd, FBIOGETCMAP, &cmap);
16 + if (finfo.visual == FB_VISUAL_DIRECTCOLOR && vinfo.bits_per_pixel != 8) {
17 + u16 *red, *green, *blue;
18 + int rcols = 1 << vinfo.red.length;
19 + int gcols = 1 << vinfo.green.length;
20 + int bcols = 1 << vinfo.blue.length;
22 + /* Make our palette the length of the deepest color */
23 + int cols = (rcols > gcols ? rcols : gcols);
24 + cols = (cols > bcols ? cols : bcols);
26 + red = new u16[cols];
29 + for (int i = 0; i < rcols; i++)
30 + red[i] = (65535 / (rcols - 1)) * i;
32 + green = new u16[cols];
37 + for (int i = 0; i < gcols; i++)
38 + green[i] = (65535 / (gcols - 1)) * i;
40 + blue = new u16[cols];
46 + for (int i = 0; i < bcols; i++)
47 + blue[i] = (65535 / (bcols - 1)) * i;
55 + ioctl(mFd, FBIOPUTCMAP, &cmap);
60 - u16 red[NR_COLORS], green[NR_COLORS], blue[NR_COLORS];
62 + u16 red[NR_COLORS], green[NR_COLORS], blue[NR_COLORS];
64 - for (u32 i = 0; i < NR_COLORS; i++) {
65 - red[i] = palette[i].red << 8 | palette[i].red;
66 - green[i] = palette[i].green << 8 | palette[i].green;
67 - blue[i] = palette[i].blue << 8 | palette[i].blue;
69 + for (u32 i = 0; i < NR_COLORS; i++) {
70 + red[i] = palette[i].red << 8 | palette[i].red;
71 + green[i] = palette[i].green << 8 | palette[i].green;
72 + blue[i] = palette[i].blue << 8 | palette[i].blue;
75 - INIT_CMAP(red, green, blue);
76 - ioctl(mFd, FBIOPUTCMAP, &cmap);
77 + INIT_CMAP(red, green, blue);
78 + ioctl(mFd, FBIOPUTCMAP, &cmap);