/*!
  sets a region to contain only one rect.
  */
BOOL gdi_set_cliprgn(cliprgn_t *p_rgn, const rect_t *p_rc)
{
  cliprc_t *p_nrc = NULL;

  if(is_empty_rect(p_rc))
  {
    return FALSE;
  }

  // empty rgn, at first
  gdi_empty_cliprgn(p_rgn);

  // get a new cliprect
  p_nrc = gdi_alloc_cliprect(p_rgn->p_heap);
  if(p_nrc == NULL)
  {
    return FALSE;
  }

  // set cliprect
  p_nrc->rc = *p_rc;
  p_nrc->p_next = NULL;
  p_nrc->p_prev = NULL;

  p_rgn->p_head = p_rgn->p_tail = p_nrc;
  p_rgn->bound = *p_rc;

  return TRUE;
}
Пример #2
0
tpoint twidget::get_best_size() const
{
	if (is_empty_rect(fix_rect_)) {
		tpoint result = layout_size_;
		if (result == tpoint(0, 0)) {
			result = calculate_best_size();
		}
		return result;

	} else {
		return tpoint(fix_rect_.w, fix_rect_.h);
	}
}
/*!
  subtracts a rectangle from a region.
  */
BOOL gdi_subtract_cliprect(cliprgn_t *p_rgn, const rect_t *p_rc)
{
  cliprgn_t nrgn;
  cliprc_t crc;

  if(is_empty_rect(p_rc))
  {
    return FALSE;
  }

  crc.rc = *p_rc;
  crc.p_next = NULL;
  crc.p_prev = NULL;

  nrgn.bound = *p_rc;
  nrgn.p_head = &crc;
  nrgn.p_tail = &crc;
  nrgn.p_heap = NULL;

  return gdi_subtract_cliprgn(p_rgn, p_rgn, &nrgn);
}