SDLFramebuffer.h revision ee992899f6a5e42fa3ad13afbaed447aaed63177
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore/** @file
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore *
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore * VBox frontends: Basic Frontend (BFE):
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore * Declaration of SDLFramebuffer class
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore */
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore/*
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore * Copyright (C) 2006-2007 innotek GmbH
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore *
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore * This file is part of VirtualBox Open Source Edition (OSE), as
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore * available from http://www.virtualbox.org. This file is free software;
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore * you can redistribute it and/or modify it under the terms of the GNU
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore * General Public License as published by the Free Software Foundation,
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore * in version 2 as it comes in the "COPYING" file of the VirtualBox OSE
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore * distribution. VirtualBox OSE is distributed in the hope that it will
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore * be useful, but WITHOUT ANY WARRANTY of any kind.
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore *
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore * If you received this file as part of a commercial VirtualBox
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore * distribution, then only the terms of your commercial VirtualBox
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore * license agreement apply instead of the previous paragraph.
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore */
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#ifndef __H_SDLFRAMEBUFFER
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#define __H_SDLFRAMEBUFFER
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#include "VBoxBFE.h"
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#include "SDLConsole.h"
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#include <iprt/thread.h>
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#include <iprt/critsect.h>
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#ifdef VBOX_SECURELABEL
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#include <SDL_ttf.h>
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#endif
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#include "Framebuffer.h"
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amoreclass SDLFramebuffer : public Framebuffer
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore{
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amorepublic:
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore SDLFramebuffer();
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore virtual ~SDLFramebuffer();
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore virtual HRESULT getWidth(ULONG *width);
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore virtual HRESULT getHeight(ULONG *height);
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore virtual HRESULT Lock();
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore virtual HRESULT Unlock();
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore virtual HRESULT getAddress(uintptr_t *address);
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore virtual HRESULT getColorDepth(ULONG *colorDepth);
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore virtual HRESULT getLineSize(ULONG *lineSize);
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore virtual HRESULT NotifyUpdate(ULONG x, ULONG y,
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore ULONG w, ULONG h, BOOL *finished);
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore virtual HRESULT RequestResize(ULONG w, ULONG h, BOOL *finished);
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore virtual HRESULT SolidFill(ULONG x, ULONG y, ULONG width, ULONG height,
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore ULONG color, BOOL *handled);
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore virtual HRESULT CopyScreenBits(ULONG xDst, ULONG yDst, ULONG xSrc, ULONG ySrc,
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore ULONG width, ULONG height, BOOL *handled);
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore virtual HRESULT GetVisibleRegion(ULONG * aPcRect, BYTE * aPRect);
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore virtual HRESULT SetVisibleRegion(ULONG aCRect, BYTE * aPRect);
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore virtual void repaint();
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore virtual void resize();
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore virtual void update(int x, int y, int w, int h);
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore virtual bool getFullscreen();
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore virtual void setFullscreen(bool fFullscreen);
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore virtual int getYOffset();
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore virtual int getHostXres();
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore virtual int getHostYres();
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore virtual int getHostBitsPerPixel();
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore#ifdef VBOX_SECURELABEL
49ef7e0638c8b771d8a136eae78b1c0f99acc8e0Garrett D'Amore virtual int initSecureLabel(uint32_t height, char *font, uint32_t pointsize);
virtual void setSecureLabelText(const char *text);
virtual void paintSecureLabel(int x, int y, int w, int h, bool fForce);
#endif
private:
/** the sdl thread */
RTNATIVETHREAD mSdlNativeThread;
/** current SDL framebuffer pointer */
SDL_Surface *mScreen;
/** current guest screen width in pixels */
ULONG mWidth;
/** current guest screen height in pixels */
ULONG mHeight;
/** Y offset in pixels, i.e. screen_height - guest_screen_height */
uint32_t mTopOffset;
/** flag whether we're in fullscreen mode */
bool mfFullscreen;
/** framebuffer update semaphore */
RTCRITSECT mUpdateLock;
#ifdef VBOX_SECURELABEL
/** current secure label text */
Utf8Str mSecureLabelText;
/** secure label font handle */
TTF_Font *mLabelFont;
/** secure label height in pixels */
uint32_t mLabelHeight;
#endif
#ifdef __WIN__
long refcnt;
#endif
};
#endif // __H_SDLFRAMEBUFFER