void DocumentMap::reloadMap() { if (_pScintillaEditView && _ppEditView) { Document currentDoc = (*_ppEditView)->execute(SCI_GETDOCPOINTER); _pScintillaEditView->execute(SCI_SETDOCPOINTER, 0, (LPARAM)currentDoc); // // sync with the current document // Buffer *editBuf = (*_ppEditView)->getCurrentBuffer(); _pScintillaEditView->setCurrentBuffer(editBuf); // folding std::vector<HeaderLineState> lineStateVector; (*_ppEditView)->getCurrentFoldStates(lineStateVector); _pScintillaEditView->syncFoldStateWith(lineStateVector); // Wrapping if ((*_ppEditView)->isWrap() && needToRecomputeWith()) { wrapMap(); } scrollMap(); } }
void DocumentMap::scrollMap(bool direction, moveMode whichMode) { // Visible line for the code view int firstVisibleDisplayLine = (*_ppEditView)->execute(SCI_GETFIRSTVISIBLELINE); int nbLine = (*_ppEditView)->execute(SCI_LINESONSCREEN, firstVisibleDisplayLine); int nbLine2go = (whichMode == perLine?1:nbLine); (*_ppEditView)->execute(SCI_LINESCROLL, 0, (direction == moveDown)?nbLine2go:-nbLine2go); scrollMap(); }
void moveElf(unsigned char facing) { //erase the old elf image (using blank map tile) TV.bitmap(elf.x, elf.y, map_bitmap); TV.bitmap(elf.x, elf.y + 8, map_bitmap); //if it is a new facing, then reset the step if (facing != elf.facing) { elf.step = 1; } else { elf.step++; if (elf.step > 2) elf.step = 1; } elf.facing = facing; switch (facing) { case FACING_DOWN: if (elf.y < 48) { if (checkMapRoomMove(elf.x, elf.y + 16) == 0) if (checkMapRoomMove(elf.x+4, elf.y + 16) == 0) elf.y += STEP_LENGTH; } else { scrollMap(SCROLL_DOWN); elf.x = 36; elf.y = 8; elf.facing = FACING_DOWN; } break; case FACING_UP: if (elf.y > 4) { if (checkMapRoomMove(elf.x, elf.y - 4) == 0) if (checkMapRoomMove(elf.x + 4, elf.y - 4) == 0) elf.y -= STEP_LENGTH; } else { scrollMap(SCROLL_UP); elf.x = 36; elf.y = 32; elf.facing = FACING_UP; } break; case FACING_LEFT: if (elf.x > 4) { if (checkMapRoomMove(elf.x - 4, elf.y) == 0) if (checkMapRoomMove(elf.x - 4, elf.y + 12) == 0) elf.x -= STEP_LENGTH; } else { scrollMap(SCROLL_LEFT); elf.x = 64; elf.y = 24; elf.facing = FACING_LEFT; } break; case FACING_RIGHT: if (elf.x < 80) { if (checkMapRoomMove(elf.x + 12, elf.y) == 0) if (checkMapRoomMove(elf.x + 12, elf.y + 12) == 0) elf.x += STEP_LENGTH; } else { scrollMap(SCROLL_RIGHT); elf.x = 16; elf.y = 24; elf.facing = FACING_RIGHT; } break; } //draw new elf bitmap overlaybitmap(elf.x, elf.y, elf_bitmap + ( elf.facing * SIZEOF_ELF_RECORD)); overlaybitmap(elf.x, elf.y+8, elf_bitmap + ((elf.facing + elf.step) * SIZEOF_ELF_RECORD)); }
BOOL CALLBACK DocumentMap::run_dlgProc(UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_INITDIALOG : { HWND hwndScintilla = (HWND)::SendMessage(_hParent, NPPM_CREATESCINTILLAHANDLE, 0, (LPARAM)_hSelf); _pScintillaEditView = (ScintillaEditView *)::SendMessage(_hParent, NPPM_INTERNAL_GETSCINTEDTVIEW, 0, (LPARAM)hwndScintilla); _pScintillaEditView->execute(SCI_SETZOOM, (WPARAM)-10, 0); _pScintillaEditView->execute(SCI_SETVSCROLLBAR, FALSE, 0); _pScintillaEditView->execute(SCI_SETHSCROLLBAR, FALSE, 0); _pScintillaEditView->showIndentGuideLine(false); _pScintillaEditView->display(); reloadMap(); _vzDlg.init(::GetModuleHandle(NULL), _hSelf); _vzDlg.doDialog(); (NppParameters::getInstance())->SetTransparent(_vzDlg.getHSelf(), 50); // 0 <= transparancy < 256 setSyntaxLiliting(); _pScintillaEditView->showMargin(0, false); _pScintillaEditView->showMargin(1, false); _pScintillaEditView->showMargin(2, false); _pScintillaEditView->showMargin(3, false); return TRUE; } case WM_SIZE: { if (_pScintillaEditView) { int width = LOWORD(lParam); int height = HIWORD(lParam); if (_vzDlg.isCreated()) { POINT pt = {0,0}; ::ClientToScreen(_hSelf, &pt); if (!_pScintillaEditView->isWrap()) ::MoveWindow(_pScintillaEditView->getHSelf(), 0, 0, width, height, TRUE); ::MoveWindow(_vzDlg.getHSelf(), pt.x, pt.y, width, height, TRUE); } } break; } case WM_NOTIFY: { switch (((LPNMHDR)lParam)->code) { case DMN_CLOSE: { ::SendMessage(_hParent, NPPM_INTERNAL_SETDOCMAPCHECK, 0, FALSE); _vzDlg.display(false); return TRUE; } case DMN_SWITCHIN: { _vzDlg.display(); reloadMap(); return TRUE; } case DMN_SWITCHOFF: { ::SendMessage(_hParent, NPPM_INTERNAL_SETDOCMAPCHECK, 0, FALSE); _vzDlg.display(false); return TRUE; } case DMN_FLOATDROPPED: { RECT rc; getClientRect(rc); int width = rc.right - rc.left; int height = rc.bottom - rc.top; //RECT scinrc; //_pScintillaEditView->getClientRect(scinrc); //int scinrcWidth = scinrc.right - scinrc.left; //::MoveWindow(_pScintillaEditView->getHSelf(), 0, 0, scinrcWidth, height, TRUE); POINT pt = {0,0}; ::ClientToScreen(_hSelf, &pt); ::MoveWindow(_vzDlg.getHSelf(), pt.x, pt.y, width, height, TRUE); scrollMap(); return TRUE; } case NM_DBLCLK: { return TRUE; } default: break; } } return TRUE; case DOCUMENTMAP_SCROLL: { bool dir = (wParam != 0); moveMode mode = (lParam == 0)?perLine:perPage; scrollMap(dir, mode); } return TRUE; case DOCUMENTMAP_MOUSECLICKED: { int newPosY = HIWORD(lParam); int currentCenterPosY = _vzDlg.getCurrentCenterPosY(); int pixelPerLine = _pScintillaEditView->execute(SCI_TEXTHEIGHT, 0); int jumpDistance = newPosY - currentCenterPosY; int nbLine2jump = jumpDistance/pixelPerLine; (*_ppEditView)->execute(SCI_LINESCROLL, 0, nbLine2jump); scrollMap(); } return TRUE; case DOCUMENTMAP_MOUSEWHEEL: { (*_ppEditView)->mouseWheel(wParam, lParam); } return TRUE; default : return DockingDlgInterface::run_dlgProc(message, wParam, lParam); } return DockingDlgInterface::run_dlgProc(message, wParam, lParam); }