Replace get_alpha_pict with get_alpha_step
Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
This commit is contained in:
parent
16f202f4a0
commit
3ffc0c77ed
|
@ -214,6 +214,12 @@ static const char *background_props_str[] = {
|
||||||
/// have a pointer to current session passed in.
|
/// have a pointer to current session passed in.
|
||||||
session_t *ps_g = NULL;
|
session_t *ps_g = NULL;
|
||||||
|
|
||||||
|
static inline int
|
||||||
|
get_alpha_step(session_t *ps, opacity_t o) {
|
||||||
|
double d = ((double) o) / OPAQUE;
|
||||||
|
return (int)(round(normalize_d(d) / ps->o.alpha_step));
|
||||||
|
}
|
||||||
|
|
||||||
static inline void
|
static inline void
|
||||||
__attribute__((nonnull(1, 2)))
|
__attribute__((nonnull(1, 2)))
|
||||||
set_tgt_clip(session_t *ps, region_t *reg) {
|
set_tgt_clip(session_t *ps, region_t *reg) {
|
||||||
|
@ -1003,25 +1009,6 @@ find_client_win(session_t *ps, xcb_window_t w) {
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Get alpha <code>Picture</code> for an opacity in <code>double</code>.
|
|
||||||
*/
|
|
||||||
static inline xcb_render_picture_t
|
|
||||||
get_alpha_pict_d(session_t *ps, double o) {
|
|
||||||
assert((round(normalize_d(o) / ps->o.alpha_step)) <= round(1.0 / ps->o.alpha_step));
|
|
||||||
return ps->alpha_picts[(int) (round(normalize_d(o)
|
|
||||||
/ ps->o.alpha_step))];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get alpha <code>Picture</code> for an opacity in
|
|
||||||
* <code>opacity_t</code>.
|
|
||||||
*/
|
|
||||||
static inline xcb_render_picture_t
|
|
||||||
get_alpha_pict_o(session_t *ps, opacity_t o) {
|
|
||||||
return get_alpha_pict_d(ps, (double) o / OPAQUE);
|
|
||||||
}
|
|
||||||
|
|
||||||
static win *
|
static win *
|
||||||
paint_preprocess(session_t *ps, win *list) {
|
paint_preprocess(session_t *ps, win *list) {
|
||||||
win *t = NULL, *next = NULL;
|
win *t = NULL, *next = NULL;
|
||||||
|
@ -1111,7 +1098,7 @@ paint_preprocess(session_t *ps, win *list) {
|
||||||
|| w->g.x + w->g.width < 1 || w->g.y + w->g.height < 1
|
|| w->g.x + w->g.width < 1 || w->g.y + w->g.height < 1
|
||||||
|| w->g.x >= ps->root_width || w->g.y >= ps->root_height
|
|| w->g.x >= ps->root_width || w->g.y >= ps->root_height
|
||||||
|| ((IsUnmapped == w->a.map_state || w->destroyed) && !w->paint.pixmap)
|
|| ((IsUnmapped == w->a.map_state || w->destroyed) && !w->paint.pixmap)
|
||||||
|| get_alpha_pict_o(ps, w->opacity) == ps->alpha_picts[0]
|
|| get_alpha_step(ps, w->opacity) == 0
|
||||||
|| w->paint_excluded)
|
|| w->paint_excluded)
|
||||||
to_paint = false;
|
to_paint = false;
|
||||||
//printf_errf("(): %s %d %d %d", w->name, to_paint, w->opacity, w->paint_excluded);
|
//printf_errf("(): %s %d %d %d", w->name, to_paint, w->opacity, w->paint_excluded);
|
||||||
|
@ -1425,8 +1412,9 @@ render(session_t *ps, int x, int y, int dx, int dy, int wid, int hei,
|
||||||
case BKEND_XRENDER:
|
case BKEND_XRENDER:
|
||||||
case BKEND_XR_GLX_HYBRID:
|
case BKEND_XR_GLX_HYBRID:
|
||||||
{
|
{
|
||||||
xcb_render_picture_t alpha_pict = get_alpha_pict_d(ps, opacity);
|
int alpha_step = get_alpha_step(ps, opacity * OPAQUE);
|
||||||
if (alpha_pict != ps->alpha_picts[0]) {
|
xcb_render_picture_t alpha_pict = ps->alpha_picts[alpha_step];
|
||||||
|
if (alpha_step != 0) {
|
||||||
int op = ((!argb && !alpha_pict) ? XCB_RENDER_PICT_OP_SRC: XCB_RENDER_PICT_OP_OVER);
|
int op = ((!argb && !alpha_pict) ? XCB_RENDER_PICT_OP_SRC: XCB_RENDER_PICT_OP_OVER);
|
||||||
xcb_render_composite(ps->c, op, pict, alpha_pict,
|
xcb_render_composite(ps->c, op, pict, alpha_pict,
|
||||||
ps->tgt_buffer.pict, x, y, 0, 0, dx, dy, wid, hei);
|
ps->tgt_buffer.pict, x, y, 0, 0, dx, dy, wid, hei);
|
||||||
|
|
Loading…
Reference in New Issue