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(); } }
void RefreshLevel(bool skipLayout) { if (nmmx.type == 0xFF) { return; } if (drawBackground) nmmx.LoadBackground(skipLayout); else nmmx.LoadLevel(true, skipLayout); render.RefreshMapCache(); RepaintAll(); }
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; }
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(); } }
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); } }