Код в основном слизан с GTK12 Astra Linux
Код |
---|
void uxMapView::DrawContents(QPainter *p, int cx, int cy, int cw, int ch) { if (!hMap) { // Очистить экран QBrush brush( Qt::white); p->setBrush( brush ); p->drawRect( cx, cy, cw, ch ); p->drawText(QRectF(cx, cy, cw, ch),"Карта не открыта",QTextOption(Qt::AlignHCenter | Qt::AlignVCenter)); return; } RectDraw.setLeft(cx); RectDraw.setTop(cy); RectDraw.setRight(cx + cw); RectDraw.setBottom(cy + ch); VScrollBar->setEnabled(false); HScrollBar->setEnabled(false); POINT point1; point1.x = 0; point1.y = 0; RECT rect; rect.left = VarHorzPos; rect.right = VarHorzPos + mapViewPort->width(); rect.top = VarVertPos; rect.bottom = VarVertPos + mapViewPort->height(); // Проверить размеры буфера изображения if (mapGetImageWidth(hScreen) < mapViewPort->width() || mapGetImageHeight(hScreen) < mapViewPort->height()) { mapChangeImageSizeEx(hScreen, 1, mapViewPort->width(), mapViewPort->height()); mapDrawImageMap(hScreen, hMap, &rect, &point1); } /* point1.x = 0; point1.y = 0; rect.left = VarHorzPos; rect.right = VarHorzPos + mapViewPort->width(); rect.top = VarVertPos; rect.bottom = VarVertPos + mapViewPort->height(); mapDrawImageMap(hScreen, hMap, &rect, &point1); */ RECT maprect; maprect.left = RectDraw.left() + HScrollBar->value(); maprect.top = RectDraw.top() + VScrollBar->value(); maprect.right = RectDraw.right() + HScrollBar->value(); maprect.bottom = RectDraw.bottom() + VScrollBar->value(); UpdateScreenImageBuffer(hScreen); // Отобразить принятый буфер p->drawImage(0, 0, ScreenImageBuffer); VScrollBar->setEnabled(true); HScrollBar->setEnabled(true); } void uxMapView::UpdateScreenImageBuffer(HIMAGE hScreen) { long imageWidth = mapGetImageWidth(hScreen); long imageHeight = mapGetImageHeight(hScreen); if (ScreenImageBuffer.width() != imageWidth || ScreenImageBuffer.height() != imageHeight) { // Reallocate image ScreenImageBuffer = QImage(imageWidth, imageHeight, QImage::Format_RGB32); } if (ScreenImageBuffer.isNull() == false) { XIMAGEDESC ximage; ximage.Height = ScreenImageBuffer.height(); ximage.Width = ScreenImageBuffer.width(); ximage.RowSize = ScreenImageBuffer.bytesPerLine(); ximage.Depth = ScreenImageBuffer.depth(); ximage.CellSize = ScreenImageBuffer.bytesPerLine() / ScreenImageBuffer.width(); ximage.Point = (char*)ScreenImageBuffer.bits(); mapViewImageToXImage(hScreen, &ximage, 0, 0); } } |
Код |
---|
mapDrawImageMap(hScreen, hMap, &rect, &point1) |