int nxtk_filltoolbar(NXTKWINDOW hfwnd, FAR const struct nxgl_rect_s *rect, nxgl_mxpixel_t color[CONFIG_NX_NPLANES]) { FAR struct nxtk_framedwindow_s *fwnd = (FAR struct nxtk_framedwindow_s *)hfwnd; struct nxgl_rect_s fillrect; #ifdef CONFIG_DEBUG if (!hfwnd || !rect || !color) { set_errno(EINVAL); return ERROR; } #endif /* Clip the rectangle so that it lies within the sub-window bounds * then move the rectangle to that it is relative to the containing * window. */ nxtk_subwindowclip(fwnd, &fillrect, rect, &fwnd->tbrect); /* Then fill it */ return nx_fill((NXWINDOW)hfwnd, &fillrect, color); }
int oled_image_fill_rectangle(uint8_t x, uint8_t y, uint8_t width, uint8_t height, uint8_t color) { int ret = OK; FAR struct nxgl_rect_s rect; if (x >= OLED_IMG_SCREEN_WIDTH || y >= OLED_IMG_SCREEN_HEIGHT || (x + width) > OLED_IMG_SCREEN_WIDTH || (y + height) > OLED_IMG_SCREEN_HEIGHT) { lcd_dbg("Wrong coordinates to start draw image" "or image too big\n"); return ERROR; } rect.pt1.x = x; rect.pt1.y = y; rect.pt2.x = x + width - 1; rect.pt2.y = y + height - 1; ret = nx_fill(g_img.hwnd, &rect, &color); if (ret < 0) { ret = ERROR; lcd_dbg("Cannot fill rectangle\n"); } return ret; }
static void nxtk_drawframeside(FAR struct nxtk_framedwindow_s *fwnd, FAR const struct nxgl_rect_s *side, FAR const struct nxgl_rect_s *bounds, nxgl_mxpixel_t color[CONFIG_NX_NPLANES]) { struct nxgl_rect_s intersection; nxgl_rectintersect(&intersection, side, bounds); if (!nxgl_nullrect(&intersection)) { nx_fill((NXWINDOW)fwnd, &intersection, color); } }
int nx_drawline(NXWINDOW hwnd, FAR struct nxgl_vector_s *vector, nxgl_coord_t width, nxgl_mxpixel_t color[CONFIG_NX_NPLANES]) { struct nxgl_trapezoid_s trap[3]; struct nxgl_rect_s rect; int ret; #ifdef CONFIG_DEBUG if (!hwnd || !vector || width < 1 || !color) { set_errno(EINVAL); return ERROR; } #endif ret = nxgl_splitline(vector, trap, &rect, width); switch (ret) { case 0: ret = nx_filltrapezoid(hwnd, NULL, &trap[0], color); if (ret == OK) { ret = nx_filltrapezoid(hwnd, NULL, &trap[1], color); if (ret == OK) { ret = nx_filltrapezoid(hwnd, NULL, &trap[2], color); } } break; case 1: ret = nx_filltrapezoid(hwnd, NULL, &trap[1], color); break; case 2: ret = nx_fill(hwnd, &rect, color); break; default: set_errno(-ret); return ERROR; } return ret; }
static inline void nxeg_fillwindow(NXEGWINDOW hwnd, FAR const struct nxgl_rect_s *rect, FAR struct nxeg_state_s *st) { int ret; #ifdef CONFIG_EXAMPLES_NX_RAWWINDOWS ret = nx_fill(hwnd, rect, st->color); if (ret < 0) { message("nxeg_fillwindow: nx_fill failed: %d\n", errno); } #else ret = nxtk_fillwindow(hwnd, rect, st->color); if (ret < 0) { message("nxeg_fillwindow: nxtk_fillwindow failed: %d\n", errno); } #endif #ifdef CONFIG_NX_KBD nxeg_filltext(hwnd, rect, st); #endif }
int nx_drawline(NXWINDOW hwnd, FAR struct nxgl_vector_s *vector, nxgl_coord_t width, nxgl_mxpixel_t color[CONFIG_NX_NPLANES], uint8_t caps) { struct nxgl_trapezoid_s trap[3]; struct nxgl_rect_s rect; int ret; #ifdef CONFIG_DEBUG_FEATURES if (!hwnd || !vector || width < 1 || !color) { set_errno(EINVAL); return ERROR; } #endif /* Split the line into trapezoids */ ret = nxgl_splitline(vector, trap, &rect, width); switch (ret) { /* 0: Line successfully broken up into three trapezoids. Values in * traps[0], traps[1], and traps[2] are valid. */ case 0: ret = nx_filltrapezoid(hwnd, NULL, &trap[0], color); if (ret == OK) { ret = nx_filltrapezoid(hwnd, NULL, &trap[1], color); if (ret == OK) { ret = nx_filltrapezoid(hwnd, NULL, &trap[2], color); } } break; /* 1: Line successfully represented by one trapezoid. Value in traps[1] * is valid. */ case 1: ret = nx_filltrapezoid(hwnd, NULL, &trap[1], color); break; /* 2: Line successfully represented by one rectangle. Value in rect is * valid */ case 2: ret = nx_fill(hwnd, &rect, color); break; /* <0: On errors, a negated errno value is returned. */ default: set_errno(-ret); return ERROR; } /* Draw circular caps at each end of the line to support better line joins */ if (caps != NX_LINECAP_NONE && width >= 3) { nxgl_coord_t radius = width >> 1; /* Draw a circle at pt1 */ ret = OK; if ((caps & NX_LINECAP_PT1) != 0) { ret = nx_fillcircle(hwnd, &vector->pt1, radius, color); } /* Draw a circle at pt2 */ if (ret == OK && (caps & NX_LINECAP_PT2) != 0) { ret = nx_fillcircle(hwnd, &vector->pt2, radius, color); } }