summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/haiku/qhaikuscreen.cpp
blob: b8c21a030825d0c6bf0c5c3cb00629df7596ea80 (plain)
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
// Copyright (C) 2015 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Tobias Koenig <tobias.koenig@kdab.com>// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only#include"qhaikuscreen.h"#include"qhaikucursor.h"#include"qhaikuutils.h"#include <qpa/qwindowsysteminterface.h>#include <Bitmap.h>#include <Screen.h>#include <Window.h>QHaikuScreen::QHaikuScreen():m_screen(newBScreen(B_MAIN_SCREEN_ID)),m_cursor(new QHaikuCursor){Q_ASSERT(m_screen->IsValid());}QHaikuScreen::~QHaikuScreen(){delete m_cursor; m_cursor =nullptr;delete m_screen; m_screen =nullptr;} QPixmap QHaikuScreen::grabWindow(WId winId,int x,int y,int width,int height)const{if(width ==0|| height ==0)returnQPixmap(); BScreen screen(nullptr); BBitmap *bitmap =nullptr; screen.GetBitmap(&bitmap);const BRect frame = (winId ? ((BWindow*)winId)->Frame() : screen.Frame());const int absoluteX = frame.left + x;const int absoluteY = frame.top + y;if(width <0) width = frame.Width() - x;if(height <0) height = frame.Height() - y;constQImage::Format format =QHaikuUtils::colorSpaceToImageFormat(bitmap->ColorSpace());// get image of complete screen QImage image((uchar*)bitmap->Bits(), screen.Frame().Width() +1, screen.Frame().Height() +1, bitmap->BytesPerRow(), format);// extract the area of the requested window QRect grabRect(absoluteX, absoluteY, width, height); image = image.copy(grabRect);delete bitmap;returnQPixmap::fromImage(image);} QRect QHaikuScreen::geometry()const{const BRect frame = m_screen->Frame();returnQRect(frame.left, frame.top, frame.right - frame.left, frame.bottom - frame.top);}intQHaikuScreen::depth()const{switch(format()) {caseQImage::Format_Invalid:return0;break;caseQImage::Format_MonoLSB:return1;break;caseQImage::Format_Indexed8:return8;break;caseQImage::Format_RGB16:caseQImage::Format_RGB555:return16;break;caseQImage::Format_RGB888:return24;break;caseQImage::Format_RGB32:caseQImage::Format_ARGB32:default:return32;break;}}QImage::Format QHaikuScreen::format()const{returnQHaikuUtils::colorSpaceToImageFormat(m_screen->ColorSpace());} QPlatformCursor *QHaikuScreen::cursor()const{return m_cursor;} QT_END_NAMESPACE 
close