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);
}
Exemple #2
0
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;
}
Exemple #3
0
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);
    }
}
Exemple #4
0
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;
}
Exemple #5
0
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
}
Exemple #6
0
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);
        }
    }