Commit b48a35bf authored by François Cartegnie's avatar François Cartegnie 🤞

vout: DrawRect/Triangle: pass color as param

parent 2aaca35c
......@@ -39,11 +39,14 @@
#define STYLE_EMPTY 0
#define STYLE_FILLED 1
#define COL_TRANSPARENT 0
#define COL_WHITE 1
/**
* Draws a rectangle at the given position in the region.
* It may be filled (fill == STYLE_FILLED) or empty (fill == STYLE_EMPTY).
*/
static void DrawRect(subpicture_region_t *r, int fill,
static void DrawRect(subpicture_region_t *r, int fill, uint8_t color,
int x1, int y1, int x2, int y2)
{
uint8_t *p = r->p_picture->p->p_pixels;
......@@ -52,16 +55,16 @@ static void DrawRect(subpicture_region_t *r, int fill,
if (fill == STYLE_FILLED) {
for (int y = y1; y <= y2; y++) {
for (int x = x1; x <= x2; x++)
p[x + pitch * y] = 1;
p[x + pitch * y] = color;
}
} else {
for (int y = y1; y <= y2; y++) {
p[x1 + pitch * y] = 1;
p[x2 + pitch * y] = 1;
p[x1 + pitch * y] = color;
p[x2 + pitch * y] = color;
}
for (int x = x1; x <= x2; x++) {
p[x + pitch * y1] = 1;
p[x + pitch * y2] = 1;
p[x + pitch * y1] = color;
p[x + pitch * y2] = color;
}
}
}
......@@ -70,7 +73,7 @@ static void DrawRect(subpicture_region_t *r, int fill,
* Draws a triangle at the given position in the region.
* It may be filled (fill == STYLE_FILLED) or empty (fill == STYLE_EMPTY).
*/
static void DrawTriangle(subpicture_region_t *r, int fill,
static void DrawTriangle(subpicture_region_t *r, int fill, uint8_t color,
int x1, int y1, int x2, int y2)
{
uint8_t *p = r->p_picture->p->p_pixels;
......@@ -83,17 +86,17 @@ static void DrawTriangle(subpicture_region_t *r, int fill,
for (int y = y1; y <= mid; y++) {
int h = y - y1;
for (int x = x1; x <= x1 + h && x <= x2; x++) {
p[x + pitch * y ] = 1;
p[x + pitch * (y2 - h)] = 1;
p[x + pitch * y ] = color;
p[x + pitch * (y2 - h)] = color;
}
}
} else {
for (int y = y1; y <= mid; y++) {
int h = y - y1;
p[x1 + pitch * y ] = 1;
p[x1 + h + pitch * y ] = 1;
p[x1 + pitch * (y2 - h)] = 1;
p[x1 + h + pitch * (y2 - h)] = 1;
p[x1 + pitch * y ] = color;
p[x1 + h + pitch * y ] = color;
p[x1 + pitch * (y2 - h)] = color;
p[x1 + h + pitch * (y2 - h)] = color;
}
}
} else {
......@@ -101,17 +104,17 @@ static void DrawTriangle(subpicture_region_t *r, int fill,
for (int y = y1; y <= mid; y++) {
int h = y - y1;
for (int x = x1; x >= x1 - h && x >= x2; x--) {
p[x + pitch * y ] = 1;
p[x + pitch * (y2 - h)] = 1;
p[x + pitch * y ] = color;
p[x + pitch * (y2 - h)] = color;
}
}
} else {
for (int y = y1; y <= mid; y++) {
int h = y - y1;
p[ x1 + pitch * y ] = 1;
p[ x1 - h + pitch * y ] = 1;
p[ x1 + pitch * (y2 - h)] = 1;
p[ x1 - h + pitch * (y2 - h)] = 1;
p[ x1 + pitch * y ] = color;
p[ x1 - h + pitch * y ] = color;
p[ x1 + pitch * (y2 - h)] = color;
p[ x1 - h + pitch * (y2 - h)] = color;
}
}
}
......@@ -125,8 +128,8 @@ static subpicture_region_t *OSDRegion(int x, int y, int width, int height)
video_palette_t palette = {
.i_entries = 2,
.palette = {
[0] = { 0xff, 0x80, 0x80, 0x00 },
[1] = { 0xff, 0x80, 0x80, 0xff },
[COL_TRANSPARENT] = { 0xff, 0x80, 0x80, 0x00 },
[COL_WHITE] = { 0xff, 0x80, 0x80, 0xff },
},
};
......@@ -180,15 +183,15 @@ static subpicture_region_t *OSDSlider(int type, int position,
if (type == OSD_HOR_SLIDER) {
int pos_x = (width - 2) * position / 100;
DrawRect(r, STYLE_FILLED, pos_x - 1, 2, pos_x + 1, height - 3);
DrawRect(r, STYLE_EMPTY, 0, 0, width - 1, height - 1);
DrawRect(r, STYLE_FILLED, COL_WHITE, pos_x - 1, 2, pos_x + 1, height - 3);
DrawRect(r, STYLE_EMPTY, COL_WHITE, 0, 0, width - 1, height - 1);
} else {
int pos_mid = height / 2;
int pos_y = height - (height - 2) * position / 100;
DrawRect(r, STYLE_FILLED, 2, pos_y, width - 3, height - 3);
DrawRect(r, STYLE_FILLED, 1, pos_mid, 1, pos_mid );
DrawRect(r, STYLE_FILLED, width - 2, pos_mid, width - 2, pos_mid );
DrawRect(r, STYLE_EMPTY, 0, 0, width - 1, height - 1);
DrawRect(r, STYLE_FILLED, COL_WHITE, 2, pos_y, width - 3, height - 3);
DrawRect(r, STYLE_FILLED, COL_WHITE, 1, pos_mid, 1, pos_mid );
DrawRect(r, STYLE_FILLED, COL_WHITE, width - 2, pos_mid, width - 2, pos_mid );
DrawRect(r, STYLE_EMPTY, COL_WHITE, 0, 0, width - 1, height - 1);
}
return r;
}
......@@ -216,19 +219,19 @@ static subpicture_region_t *OSDIcon(int type, const video_format_t *fmt)
if (type == OSD_PAUSE_ICON) {
int bar_width = width / 3;
DrawRect(r, STYLE_FILLED, 0, 0, bar_width - 1, height -1);
DrawRect(r, STYLE_FILLED, width - bar_width, 0, width - 1, height - 1);
DrawRect(r, STYLE_FILLED, COL_WHITE, 0, 0, bar_width - 1, height -1);
DrawRect(r, STYLE_FILLED, COL_WHITE, width - bar_width, 0, width - 1, height - 1);
} else if (type == OSD_PLAY_ICON) {
int mid = height >> 1;
int delta = (width - mid) >> 1;
int y2 = ((height - 1) >> 1) * 2;
DrawTriangle(r, STYLE_FILLED, delta, 0, width - delta, y2);
DrawTriangle(r, STYLE_FILLED, COL_WHITE, delta, 0, width - delta, y2);
} else {
int mid = height >> 1;
int delta = (width - mid) >> 1;
int y2 = ((height - 1) >> 1) * 2;
DrawRect(r, STYLE_FILLED, delta, mid / 2, width - delta, height - 1 - mid / 2);
DrawTriangle(r, STYLE_FILLED, width - delta, 0, delta, y2);
DrawRect(r, STYLE_FILLED, COL_WHITE, delta, mid / 2, width - delta, height - 1 - mid / 2);
DrawTriangle(r, STYLE_FILLED, COL_WHITE, width - delta, 0, delta, y2);
if (type == OSD_MUTE_ICON) {
uint8_t *a = r->p_picture->A_PIXELS;
int pitch = r->p_picture->A_PITCH;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment