796
StaticSwitchScreen::paintRect (CompRect &box,
798
unsigned short *color,
796
StaticSwitchScreen::paintRect (const GLMatrix &transform,
799
unsigned short *color,
801
glColor4us (color[0], color[1], color[2], color[3] * opacity / 100);
802
glBegin (GL_LINE_LOOP);
803
glVertex2i (box.x1 () + offset, box.y1 () + offset);
804
glVertex2i (box.x2 () - offset, box.y1 () + offset);
805
glVertex2i (box.x2 () - offset, box.y2 () - offset);
806
glVertex2i (box.x1 () + offset, box.y2 () - offset);
802
GLushort colorData[4] = {
806
color[3] * opacity / 100
809
GLfloat vertexData[12] = {
810
box.x1 () + offset, box.y1 () + offset, 0,
811
box.x2 () - offset, box.y1 () + offset, 0,
812
box.x2 () - offset, box.y2 () - offset, 0,
813
box.x1 () + offset, box.y2 () - offset, 0
816
GLVertexBuffer *streamingBuffer = GLVertexBuffer::streamingBuffer ();
817
streamingBuffer->begin (GL_LINE_LOOP);
819
streamingBuffer->addColors (1, colorData);
820
streamingBuffer->addVertices (4, vertexData);
822
streamingBuffer->end ();
823
streamingBuffer->render (transform);
891
904
if (getPaintRectangle (w, box, &opacity))
893
906
unsigned short *color;
907
GLushort colorData[4];
908
GLfloat vertexData[12];
909
GLVertexBuffer *streamingBuffer = GLVertexBuffer::streamingBuffer ();
898
911
/* fill rectangle */
899
r = optionGetHighlightColorRed ();
900
g = optionGetHighlightColorGreen ();
901
b = optionGetHighlightColorBlue ();
902
a = optionGetHighlightColorAlpha ();
903
a = a * opacity / 100;
905
glColor4us (r, g, b, a);
906
glRecti (box.x1 (), box.y2 (), box.x2 (), box.y1 ());
912
colorData[0] = optionGetHighlightColorRed ();
913
colorData[1] = optionGetHighlightColorGreen ();
914
colorData[2] = optionGetHighlightColorBlue ();
915
colorData[3] = optionGetHighlightColorAlpha ();
916
colorData[3] = colorData[3] * opacity / 100;
918
vertexData[0] = box.x1 ();
919
vertexData[1] = box.y2 ();
920
vertexData[2] = 0.0f;
921
vertexData[3] = box.x1 ();
922
vertexData[4] = box.y1 ();
923
vertexData[5] = 0.0f;
924
vertexData[6] = box.x2 ();
925
vertexData[7] = box.y2 ();
926
vertexData[8] = 0.0f;
927
vertexData[9] = box.x2 ();
928
vertexData[10] = box.y1 ();
929
vertexData[11] = 0.0f;
931
streamingBuffer->begin (GL_TRIANGLE_STRIP);
932
streamingBuffer->addColors (1, colorData);
933
streamingBuffer->addVertices (4, vertexData);
934
streamingBuffer->end ();
935
streamingBuffer->render (sTransform);
908
937
/* draw outline */
909
938
glLineWidth (1.0);
910
glDisable (GL_LINE_SMOOTH);
912
940
color = optionGetHighlightBorderColor ();
913
paintRect (box, 0, color, opacity);
914
paintRect (box, 2, color, opacity);
941
paintRect (sTransform, box, 0, color, opacity);
942
paintRect (sTransform, box, 2, color, opacity);
915
943
color = optionGetHighlightBorderInlayColor ();
916
paintRect (box, 1, color, opacity);
919
glColor4usv (defaultColor);
920
glDisable (GL_BLEND);
944
paintRect (sTransform, box, 1, color, opacity);
981
StaticSwitchScreen::paintSelectionRect (int x,
985
unsigned int opacity)
1003
StaticSwitchScreen::paintSelectionRect (const GLMatrix &transform,
1008
unsigned int opacity)
1010
GLVertexBuffer *streamingBuffer = GLVertexBuffer::streamingBuffer ();
1011
GLushort colorData[4];
1012
GLfloat vertexData[18];
1013
GLMatrix sTransform (transform);
989
1016
int count = windows.size ();
991
1018
w = previewWidth + previewBorder;
992
1019
h = previewHeight + previewBorder;
996
1021
if (dx > xCount - 1)
997
1022
op = 1.0 - MIN (1.0, dx - (xCount - 1));
998
1023
else if (dx + (dy * xCount) > count - 1)
1005
1030
for (unsigned int i = 0; i < 4; i++)
1006
color[i] = (float)fgColor[i] * opacity * op / 0xffffffff;
1010
glTranslatef (x + previewBorder / 2 + (dx * w),
1011
y + previewBorder / 2 + (dy * h), 0.0f);
1014
glVertex2i (-1, -1);
1016
glVertex2i (w + 1, 1);
1017
glVertex2i (w + 1, -1);
1018
glVertex2i (-1, h - 1);
1019
glVertex2i (-1, h + 1);
1020
glVertex2i (w + 1, h + 1);
1021
glVertex2i (w + 1, h - 1);
1023
glVertex2i (-1, h - 1);
1024
glVertex2i (1, h - 1);
1026
glVertex2i (w - 1, 1);
1027
glVertex2i (w - 1, h - 1);
1028
glVertex2i (w + 1, h - 1);
1029
glVertex2i (w + 1, 1);
1033
glColor4usv (defaultColor);
1034
glDisable (GL_BLEND);
1031
colorData[i] = (float)fgColor[i] * opacity * op / 0xffffffff;
1033
sTransform.translate (x + previewBorder / 2 + (dx * w),
1034
y + previewBorder / 2 + (dy * h), 0.0f);
1036
streamingBuffer->begin (GL_TRIANGLE_STRIP);
1044
vertexData[6] = w + 1;
1047
vertexData[9] = w + 1;
1051
streamingBuffer->addColors (1, colorData);
1052
streamingBuffer->addVertices (4, vertexData);
1054
streamingBuffer->end ();
1055
streamingBuffer->render (sTransform);
1058
streamingBuffer->begin (GL_TRIANGLE_STRIP);
1061
vertexData[1] = h - 1;
1064
vertexData[4] = h + 1;
1066
vertexData[6] = w + 1;
1067
vertexData[7] = h - 1;
1069
vertexData[9] = w + 1;
1070
vertexData[10] = h + 1;
1073
streamingBuffer->addColors (1, colorData);
1074
streamingBuffer->addVertices (4, vertexData);
1076
streamingBuffer->end ();
1077
streamingBuffer->render (sTransform);
1080
streamingBuffer->begin (GL_TRIANGLE_STRIP);
1086
vertexData[4] = h - 1;
1092
vertexData[10] = h - 1;
1095
streamingBuffer->addColors (1, colorData);
1096
streamingBuffer->addVertices (4, vertexData);
1098
streamingBuffer->end ();
1099
streamingBuffer->render (sTransform);
1102
streamingBuffer->begin (GL_TRIANGLE_STRIP);
1104
vertexData[0] = w - 1;
1107
vertexData[3] = w - 1;
1108
vertexData[4] = h - 1;
1110
vertexData[6] = w + 1;
1113
vertexData[9] = w + 1;
1114
vertexData[10] = h - 1;
1117
streamingBuffer->addColors (1, colorData);
1118
streamingBuffer->addVertices (4, vertexData);
1120
streamingBuffer->end ();
1121
streamingBuffer->render (sTransform);
1181
1266
if (pos > count - 1)
1183
1268
px = fmod (pos - count, sScreen->xCount);
1184
sScreen->paintSelectionRect (g.x (), g.y (), px, 0.0,
1269
sScreen->paintSelectionRect (transform, g.x (), g.y (), px, 0.0,
1185
1270
gWindow->lastPaintAttrib ().opacity);
1187
1272
px = fmod (pos, sScreen->xCount);
1188
sScreen->paintSelectionRect (g.x () + offX, g.y (),
1273
sScreen->paintSelectionRect (transform, g.x () + offX, g.y (),
1190
1275
gWindow->lastPaintAttrib ().opacity);
1192
1277
if (px > sScreen->xCount - 1)
1194
sScreen->paintSelectionRect (g.x (), g.y (), px, py,
1279
sScreen->paintSelectionRect (transform, g.x (), g.y (), px, py,
1195
1280
gWindow->lastPaintAttrib ().opacity);
1197
1282
py = fmod (py + 1, ceil ((double) count / sScreen->xCount));
1198
1283
offX = sScreen->getRowXOffset (py);
1200
sScreen->paintSelectionRect (g.x () + offX, g.y (),
1285
sScreen->paintSelectionRect (transform, g.x () + offX, g.y (),
1201
1286
px - sScreen->xCount, py,
1202
1287
gWindow->lastPaintAttrib ().opacity);
1206
sScreen->paintSelectionRect (g.x () + offX, g.y (),
1291
sScreen->paintSelectionRect (transform, g.x () + offX, g.y (),
1208
1293
gWindow->lastPaintAttrib ().opacity);
1210
1295
glDisable (GL_SCISSOR_TEST);
1213
1297
/* Adjust opacity/brightness/saturation of windows that are