Esempio n. 1
0
QSize TabButton::sizeHint() const {
    ensurePolished();

    int h = normalHeight();
    int w = normalWidth();

    return QSize(w, h);
}
Esempio n. 2
0
int DirectionGeometryBucketMove::minNormalHeight() const
{
    if (m_minNormalHeight >= 0)
        return m_minNormalHeight;

    if (!input)
        return 0;

    int result = numeric_limits<int>::max();
    for (const Bucket::Item& item: input->items())
    {
        result = min(result, normalHeight(item));
    }
    return m_minNormalHeight = result;
}
Esempio n. 3
0
	Cost BL::calc(const int areaW)
	{
		vector<Id> ids = getImageIds();
		sort(ids.begin(), ids.end(), DecreasingNormalWidthCmp(this));

		typedef vector<S> V;
		typedef V::iterator Itr;

		V v;
		v.push_back(S(Point(0, 0), 0, areaW));

		list<Id> idsList(ids.begin(), ids.end());
		while (!idsList.empty())
		{
			Itr insertItr = v.end();
			int bestY = numeric_limits<int>::max();

			//insertItr
			list<Id>::iterator idsListBestItr = idsList.begin();
			for (list<Id>::iterator idsListItr = idsList.begin(); idsListItr != idsList.end(); ++idsListItr)
			{
				const int w = normalWidth(*idsListItr);
				bool wasBetter = false;
				
				//cache friendly
				for (Itr itr = v.begin(); itr != v.end(); ++itr)
				{
					if (itr->left + itr->right >= w && itr->point.y < bestY)
					{
						insertItr = itr;
						bestY = itr->point.y;
						wasBetter = true;
					}
				}
				if (wasBetter)
					idsListBestItr = idsListItr;

				if (!morePrecisie)
					break;
			}

			const Id item = *idsListBestItr;
			idsList.erase(idsListBestItr);

			//init
			const int itemW = normalWidth(item);
			const int itemH = normalHeight(item);

			Point insertPoint(insertItr->point.x - insertItr->left, insertItr->point.y);
			const int insertY1(insertPoint.y);
			const int insertY2(insertY1 + itemH);
			const int insertX1(insertPoint.x);
			const int insertX2(insertX1 + itemW);

			Itr firstCovered = v.begin();
			Itr firstNotCovered = v.end();

			S s1(Point(insertPoint.x, insertPoint.y + itemH), insertPoint.x, areaW - insertPoint.x);
			S s2(Point(insertPoint.x + itemW, insertPoint.y + itemH), insertPoint.x + itemW, areaW - insertPoint.x - itemW);
			S s3(Point(insertPoint.x + itemW, insertPoint.y), 0, areaW - insertPoint.x - itemW);

			//firstCovered
			firstCovered = insertItr;
			for (Itr itr = v.begin(); itr != v.end(); ++itr)
			{
				if (insertX1 <= itr->point.x && itr->point.x <= insertX2 && itr->point.y <= insertY2)
				{
					firstCovered = itr;
					break;					
				}
			}

			//firstNotCovered
			for (Itr itr = v.begin(); itr != v.end(); ++itr)
			{
				if (insertX2 <= itr->point.x)
				{
					firstNotCovered = itr;
					break;
				}
			}

			//correct existing items
			for (Itr itr = v.begin(); itr != v.end(); ++itr)
			{
			    if (itr->point.y < insertY2) 
				{
					if (itr->point.x <= insertX1)
					{
						int newRight = insertX1 - itr->point.x;
						if (newRight < itr->right)
							itr->right = newRight;
					}
					else if (insertX2 <= itr->point.x)
					{
						int newLeft = itr->point.x - insertX2;
						if (newLeft < itr->left)
							itr->left = newLeft;
					}
				}
			}

			//s1.left
			for (Itr itr = firstCovered; ;)
			{
				if (itr->point.y > s1.point.y)
				{
					s1.left = s1.point.x - itr->point.x;
					break;
				}

				if (itr == v.begin())
					break;

				--itr;
			}

			//s1.right
			for (Itr itr = firstNotCovered; itr != v.end(); ++itr)
			{
				if (itr->point.y > s1.point.y)
				{
					s1.right = itr->point.x - s1.point.x;
					break;
				}
			}

			//s2.left
			s2.left = s1.left + itemW;

			//s2.right
			s2.right = s1.right - itemW;

			//s3.right
			for (Itr itr = firstNotCovered; itr != v.end(); ++itr)
			{
				if (itr->point.y > s3.point.y)
				{
					s3.right = itr->point.x - s3.point.x;
					break;
				}
			}

			//insert item
			result.add(item, normalPoint(insertPoint));

			//reconstruction
			V v2;

			for (Itr itr = v.begin(); itr != firstCovered; ++itr)
				v2.push_back(*itr);

			v2.push_back(s1);
			v2.push_back(s2);
			v2.push_back(s3);

			for (Itr itr = firstNotCovered; itr != v.end(); ++itr)
				v2.push_back(*itr);

			v = v2;
		}

		checkForCollisions();

		return calcResultCost();
	}