void OverlayControl::ActivateElement(HWND hwnd, OverlayElement *element)
{
	if (ActiveOverlay->ActiveElement != element)
	{
		ActiveOverlay->ActiveElement = element;
		RepaintAll(hwnd);								//	Repaint window, if selection changed (block activated or selection cleared).

		ActiveOverlayElementChanged();
	}
}
Example #2
0
void RefreshLevel(bool skipLayout)
{
	if (nmmx.type == 0xFF) { return;  }

	if (drawBackground)
		nmmx.LoadBackground(skipLayout);
	else
		nmmx.LoadLevel(true, skipLayout);
	render.RefreshMapCache();

	RepaintAll();
}
Example #3
0
BOOL AscentAPDlgTabGimbal::DlgProc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	switch (uMsg) {
	case WM_INITDIALOG: {
		RECT rect;
		GetClientRect (GetDlgItem (hWnd, IDC_SSME_L), &rect);
		rad = min (rect.right-rect.left, rect.bottom-rect.top)*0.5;
		} return TRUE;
	case WM_PAINT:
		RepaintAll (hWnd);
		break;
	}
	return FALSE;
}
Example #4
0
void LoadLevel(WORD level)
{
	nmmx.SetLevel(level, 0);
	nmmx.LoadLevel();
	render.RefreshMapCache();
	SetScrollRange(hWID[0], SB_HORZ, 0, (nmmx.levelWidth<<7)-1, true);
	SetScrollRange(hWID[0], SB_VERT, 0, (nmmx.levelHeight<<7)-1, true);

	if (backBuffer != NULL) DeleteObject(backBuffer);
	backBuffer = NULL;

	if (drawNewLevel) {
		for (unsigned i = 1; i < 11; ++i) {
			if (hWID[i]) {
				DestroyWindow(hWID[i]);
				hWID[i] = NULL;
			}
		}
		drawNewLevel = false;
	}

	RepaintAll();
}
void OverlayControl::MouseMove(HWND hwnd, WPARAM wParam, LPARAM lParam)
{
	if (!ActiveOverlay || !ActiveOverlay->ActiveElement)
	{
		ResetCursor();
		return;
	}

	RECT clientRect;
	GetClientRect(hwnd, &clientRect);

	POINT pt;
	GetCursorPosition(hwnd, &pt);

	if (0 != (wParam & MK_LBUTTON))
	{
		RECT elementRect;
		memmove(&elementRect, &elementRectAnchor, sizeof(elementRect));

		int dx = pt.x - clickAnchor.x, dy = pt.y - clickAnchor.y;

		bool updateAnchors = false;

		//	Move/drag element.
		if (0 != (hitTestAnchor & ohtLeftBorder))
		{
			if (ohtInside != hitTestAnchor && dx > 0 && RectWidth(elementRect) - dx < OverlayElement::MinimalSize)
				dx = RectWidth(elementRect) - OverlayElement::MinimalSize;
			elementRect.left += dx;
		}
		if (0 != (hitTestAnchor & ohtRightBorder))
		{
			if (ohtInside != hitTestAnchor && dx < 0 && RectWidth(elementRect) + dx < OverlayElement::MinimalSize)
				dx = OverlayElement::MinimalSize - RectWidth(elementRect);
			elementRect.right += dx;
		}
		if (0 != (hitTestAnchor & ohtTopBorder))
		{
			if (ohtInside != hitTestAnchor && dy > 0 && RectHeight(elementRect) - dy < OverlayElement::MinimalSize)
				dy = RectHeight(elementRect) - OverlayElement::MinimalSize;
			elementRect.top += dy;
		}
		if (0 != (hitTestAnchor & ohtBottomBorder))
		{
			if (ohtInside != hitTestAnchor && dy < 0 && RectHeight(elementRect) + dy < OverlayElement::MinimalSize)
				dy = OverlayElement::MinimalSize - RectHeight(elementRect);
			elementRect.bottom += dy;
		}

		//	Check for sanity.
		if (elementRect.left < clientRect.left)
		{
			updateAnchors = true;
			OffsetRect(&elementRect, clientRect.left - elementRect.left, 0);
		}
		if (elementRect.right > clientRect.right)
		{
			updateAnchors = true;
			OffsetRect(&elementRect, clientRect.right - elementRect.right, 0);
		}
		if (elementRect.top < clientRect.top)
		{
			updateAnchors = true;
			OffsetRect(&elementRect, 0, clientRect.top - elementRect.top);
		}
		if (elementRect.bottom > clientRect.bottom)
		{
			updateAnchors = true;
			OffsetRect(&elementRect, 0, clientRect.bottom - elementRect.bottom);
		}

		if (updateAnchors)
		{
			memmove(&clickAnchor, &pt, sizeof(clickAnchor));
			memmove(&elementRectAnchor, &elementRect, sizeof(elementRectAnchor));
		}

		//	Update element coordinates.
		ActiveOverlay->ActiveElement->SetRect(&clientRect, &elementRect);

		//	Drag object under cursor.
		RepaintAll(hwnd);
	}
	else
	{
		//	No mouse keys pressed -- change cursor accordingly to what's 
		//	visible on the screen.
		OverlayHitTest hitTest = ohtNone;
		OverlayElement *element = ActiveOverlay->ActiveElement;

		if (ActiveOverlay->ActiveElement && 
			!ActiveOverlay->HitTestElement(ActiveOverlay->ActiveElement, &clientRect, &pt, &hitTest))
		{
			element = ActiveOverlay->FindElementFromPoint(&clientRect, &pt, &hitTest);
		}

		if (0 != element && element == ActiveOverlay->ActiveElement && ohtInside != hitTest)
			UpdateCursor(hitTest);
		else
			ResetCursor();
	}
}
Example #6
0
void RepaintEmu(int x, int y, int graphicsNum, int tileNum, int paletteNum, int level) {
	extern short cameraX;
	extern short cameraY;
	extern short winWidth;
	extern short winHeight;

	static int oldGraphicsNum = 0;
	static int oldTileNum = 0;
	static int oldPaletteNum = 0;
	static int oldLevel = 0;

	if ((level != oldLevel) && level < nmmx.numLevels) {
		nmmx.SetLevel(level, 0);

		nmmx.tileLoadOffset = tileNum;
		nmmx.palLoadOffset = paletteNum;
		nmmx.objLoadOffset = graphicsNum;
		oldTileNum = tileNum;
		oldPaletteNum = paletteNum;
		oldGraphicsNum = graphicsNum;
		oldLevel = level;

		drawNewLevel = true;
		if (drawBackground)
			nmmx.LoadBackground();
		else
			nmmx.LoadLevel(false);
		render.RefreshMapCache();

		if (drawNewLevel) {
			for (unsigned i = 1; i < 11; ++i) {
				if (hWID[i]) {
					DestroyWindow(hWID[i]);
					hWID[i] = NULL;
				}
			}
			drawNewLevel = false;
		}

		if (backBuffer != NULL) DeleteObject(backBuffer);
		backBuffer = NULL;

		RepaintAll();
	}
	else if (tileNum != oldTileNum || paletteNum != oldPaletteNum) {
		nmmx.tileLoadOffset = tileNum;
		nmmx.palLoadOffset = paletteNum;
		oldTileNum = tileNum;
		oldPaletteNum = paletteNum;
		RefreshLevel();
	}
	if (graphicsNum != oldGraphicsNum) {
		nmmx.objLoadOffset = graphicsNum;
		oldGraphicsNum = graphicsNum;
		RepaintAll();
	}

	RECT displayRect;
	displayRect.left = 0;
	displayRect.right = winWidth - 1;
	displayRect.top = 28;
	displayRect.bottom = winHeight - 28 - 1;
	InvalidateRect(hWID[0], &displayRect, false);

	RECT rect;
	rect.left = max(0, x - 256 / 4);
	rect.right = min(nmmx.levelWidth * 128 * 2, x + 256 + 24 + 256 / 4);
	rect.top = max(0, y - 256 / 4);
	rect.bottom = min(nmmx.levelHeight * 128 * 2, y + 224 + 24 + 224 / 4);

	if ((rect.left < cameraX)
		|| (rect.right >= cameraX + winWidth)
		|| (rect.top < cameraY)
		|| (rect.bottom >= cameraY + winHeight)) {
		SetWindowScrollPosition(hWID[0], x + 128, y + 112);
	}

}