Beispiel #1
0
	bool LockPixels(MCRegionRef p_area, MCGRaster& r_raster)
	{
		if (m_bitmap == nil || m_locked)
			return false;

		MCRectangle t_bounds = MCRegionGetBoundingBox(m_region);
		MCRectangle t_actual_area;
		t_actual_area = MCU_intersect_rect(MCRegionGetBoundingBox(p_area), t_bounds);
		if (MCU_empty_rect(t_actual_area))
			return false;

		/* UNCHECKED */ MCRegionIncludeRect(m_redraw_region, t_actual_area);

		uint8_t *t_bits = (uint8_t*)m_raster.pixels + (t_actual_area.y - t_bounds.y) * m_raster.stride + (t_actual_area.x - t_bounds.x) * sizeof(uint32_t);

		m_locked_area = t_actual_area;

		r_raster . format = kMCGRasterFormat_ARGB;
		r_raster . width = t_actual_area . width;
		r_raster . height = t_actual_area . height;
		r_raster . stride = m_raster.stride;
		r_raster . pixels = t_bits;

		m_locked = true;

		return true;
	}
Beispiel #2
0
bool MCRegionTransformCallback(void *p_context, const MCRectangle &p_rect)
{
	MCRegionTransformContext *t_context;
	t_context = static_cast<MCRegionTransformContext*>(p_context);
	
	MCRectangle t_transformed_rect;
	t_transformed_rect = MCRectangleGetTransformedBounds(p_rect, t_context->transform);
	
	return MCRegionIncludeRect(t_context->region, t_transformed_rect);
}
Beispiel #3
0
	bool LockPixels(MCRegionRef p_area, MCGRaster &r_raster)
	{
		m_locked_bits = m_raster.pixels;
		m_locked_stride = m_raster.stride;

		m_locked_area = MCRegionGetBoundingBox(p_area);
		// restrict locked area to intersection with raster
		m_locked_area = MCU_intersect_rect(m_locked_area, MCU_make_rect(0, 0, m_raster.width, m_raster.height));

		/* UNCHECKED */ MCRegionIncludeRect(m_redraw_region, m_locked_area);

		r_raster.width = m_locked_area.width;
		r_raster.height = m_locked_area.height;
		r_raster.pixels = (uint8_t *)m_locked_bits + m_locked_area . y * m_locked_stride + m_locked_area . x * sizeof(uint32_t);
		r_raster.stride = m_locked_stride;
		r_raster.format = m_raster.format;
		return true;
	}
Beispiel #4
0
// IM-2013-10-14: [[ FullscreenMode ]] Move update region tracking into view abstraction
void MCStack::view_dirty_rect(const MCRectangle &p_rect)
{
    MCRectangle t_visible_rect = MCRectangleGetTransformedBounds(view_getstackvisiblerect(), view_getviewtransform());
    MCRectangle t_dirty_rect = MCU_intersect_rect(p_rect, t_visible_rect);

	if (t_dirty_rect.width == 0 || t_dirty_rect.height == 0)
		return;
	
	// If there is no region yet, make one.
	if (m_view_update_region == nil)
		/* UNCHECKED */ MCRegionCreate(m_view_update_region);
	
	MCRegionIncludeRect(m_view_update_region, t_dirty_rect);
	
	// Mark the stack as needing a redraw and schedule an update.
	m_view_need_redraw = true;

	MCRedrawScheduleUpdateForStack(this);
}