void nxgl_rectunion(FAR struct nxgl_rect_s *dest, FAR const struct nxgl_rect_s *src1, FAR const struct nxgl_rect_s *src2) { dest->pt1.x = ngl_min(src1->pt1.x, src2->pt1.x); dest->pt1.y = ngl_min(src1->pt1.y, src2->pt1.y); dest->pt2.x = ngl_max(src1->pt2.x, src2->pt2.x); dest->pt2.y = ngl_max(src1->pt2.y, src2->pt2.y); }
void nxbe_filltrapezoid(FAR struct nxbe_window_s *wnd, FAR const struct nxgl_rect_s *clip, FAR const struct nxgl_trapezoid_s *trap, nxgl_mxpixel_t color[CONFIG_NX_NPLANES]) { struct nxbe_filltrap_s info; struct nxgl_rect_s remaining; int i; #ifdef CONFIG_DEBUG if (!wnd || !trap) { return; } #endif /* Offset the trapezoid by the window origin to position it within * the framebuffer region */ nxgl_trapoffset(&info.trap, trap, wnd->bounds.pt1.x, wnd->bounds.pt1.y); /* Create a bounding box that contains the trapezoid */ remaining.pt1.x = b16toi(ngl_min(info.trap.top.x1, info.trap.bot.x1)); remaining.pt1.y = info.trap.top.y; remaining.pt2.x = b16toi(ngl_max(info.trap.top.x2, info.trap.bot.x2)); remaining.pt2.y = info.trap.bot.y; /* Clip to any user specified clipping window */ if (clip) { struct nxgl_rect_s tmp; nxgl_rectoffset(&tmp, clip, wnd->bounds.pt1.x, wnd->bounds.pt1.y); nxgl_rectintersect(&remaining, &remaining, &tmp); } /* Clip to the limits of the window and of the background screen */ nxgl_rectintersect(&remaining, &remaining, &wnd->bounds); nxgl_rectintersect(&remaining, &remaining, &wnd->be->bkgd.bounds); if (!nxgl_nullrect(&remaining)) { info.cops.visible = nxbe_clipfilltrapezoid; info.cops.obscured = nxbe_clipnull; /* Then process each color plane */ #if CONFIG_NX_NPLANES > 1 for (i = 0; i < wnd->be->vinfo.nplanes; i++) #else i = 0; #endif { info.color = color[i]; nxbe_clipper(wnd->above, &remaining, NX_CLIPORDER_DEFAULT, &info.cops, &wnd->be->plane[i]); } } }