示例#1
0
static BlitList calcBlitsInt(ColumnList &srcCols, ColumnList &dstCols)
{
	BlitList blits;

	while (!srcCols.empty())
	{
		Column srcCol = srcCols.takeFirst();
		Q_ASSERT(srcCol.h > 0);

		while (!dstCols.empty() && srcCol.h > 0)
		{
			Column dstCol = dstCols.takeFirst();

			if (srcCol.h > dstCol.h)
			{
				/* srcCol doesn't fully fit into dstCol */
				blits << Blit(srcCol.x, srcCol.y,
				              dstCol.x, dstCol.y, dstCol.h);

				srcCol.y += dstCol.h;
				srcCol.h -= dstCol.h;
			}
			else if (srcCol.h < dstCol.h)
			{
				/* srcCol fits into dstCol with space remaining */
				blits << Blit(srcCol.x, srcCol.y,
				              dstCol.x, dstCol.y, srcCol.h);

				dstCol.y += srcCol.h;
				dstCol.h -= srcCol.h;
				dstCols.prepend(dstCol);
				srcCol.h = 0;
			}
			else
			{
				/* srcCol fits perfectly into dstCol */
				blits << Blit(srcCol.x, srcCol.y,
				              dstCol.x, dstCol.y, dstCol.h);
			}
		}
	}

	return blits;
}