2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync/* $Id$ */
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync/** @file
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync * Presenter API: display composite class implementation.
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync */
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync/*
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync * Copyright (C) 2014 Oracle Corporation
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync *
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync * available from http://www.virtualbox.org. This file is free software;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync * you can redistribute it and/or modify it under the terms of the GNU
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync * General Public License (GPL) as published by the Free Software
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync */
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync#include "server_presenter.h"
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsyncCrFbDisplayComposite::CrFbDisplayComposite() :
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync mcDisplays(0)
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync{
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync RTListInit(&mDisplays);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync}
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsyncbool CrFbDisplayComposite::isComposite()
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync{
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync return true;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync}
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsyncuint32_t CrFbDisplayComposite::getDisplayCount()
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync{
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync return mcDisplays;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync}
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsyncbool CrFbDisplayComposite::add(CrFbDisplayBase *pDisplay)
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync{
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync if (pDisplay->isInList())
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync {
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync WARN(("entry in list already"));
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync return false;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync }
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync RTListAppend(&mDisplays, &pDisplay->mNode);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync pDisplay->mpContainer = this;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync pDisplay->setFramebuffer(getFramebuffer());
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync ++mcDisplays;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync return true;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync}
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsyncbool CrFbDisplayComposite::remove(CrFbDisplayBase *pDisplay, bool fCleanupDisplay)
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync{
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync if (pDisplay->getContainer() != this)
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync {
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync WARN(("invalid entry container"));
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync return false;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync }
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync RTListNodeRemove(&pDisplay->mNode);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync pDisplay->mpContainer = NULL;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync if (fCleanupDisplay)
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync pDisplay->setFramebuffer(NULL);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync --mcDisplays;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync return true;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync}
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsyncCrFbDisplayBase* CrFbDisplayComposite::first()
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync{
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync return RTListGetFirstCpp(&mDisplays, CrFbDisplayBase, mNode);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync}
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsyncCrFbDisplayBase* CrFbDisplayComposite::next(CrFbDisplayBase* pDisplay)
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync{
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync if (pDisplay->getContainer() != this)
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync {
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync WARN(("invalid entry container"));
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync return NULL;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync }
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync return RTListGetNextCpp(&mDisplays, pDisplay, CrFbDisplayBase, mNode);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync}
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsyncint CrFbDisplayComposite::setFramebuffer(struct CR_FRAMEBUFFER *pFb)
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync{
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync CrFbDisplayBase::setFramebuffer(pFb);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync CrFbDisplayBase *pIter;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync RTListForEachCpp(&mDisplays, pIter, CrFbDisplayBase, mNode)
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync {
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync pIter->setFramebuffer(pFb);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync }
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync return VINF_SUCCESS;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync}
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsyncint CrFbDisplayComposite::UpdateBegin(struct CR_FRAMEBUFFER *pFb)
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync{
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync int rc = CrFbDisplayBase::UpdateBegin(pFb);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync if (!RT_SUCCESS(rc))
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync {
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync WARN(("err"));
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync return rc;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync }
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync CrFbDisplayBase *pIter;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync RTListForEachCpp(&mDisplays, pIter, CrFbDisplayBase, mNode)
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync {
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync rc = pIter->UpdateBegin(pFb);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync if (!RT_SUCCESS(rc))
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync {
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync WARN(("err"));
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync return rc;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync }
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync }
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync return VINF_SUCCESS;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync}
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsyncvoid CrFbDisplayComposite::UpdateEnd(struct CR_FRAMEBUFFER *pFb)
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync{
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync CrFbDisplayBase *pIter;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync RTListForEachCpp(&mDisplays, pIter, CrFbDisplayBase, mNode)
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync {
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync pIter->UpdateEnd(pFb);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync }
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync CrFbDisplayBase::UpdateEnd(pFb);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync}
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsyncint CrFbDisplayComposite::EntryAdded(struct CR_FRAMEBUFFER *pFb, HCR_FRAMEBUFFER_ENTRY hEntry)
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync{
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync int rc = CrFbDisplayBase::EntryAdded(pFb, hEntry);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync if (!RT_SUCCESS(rc))
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync {
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync WARN(("err"));
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync return rc;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync }
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync CrFbDisplayBase *pIter;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync RTListForEachCpp(&mDisplays, pIter, CrFbDisplayBase, mNode)
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync {
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync int rc = pIter->EntryAdded(pFb, hEntry);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync if (!RT_SUCCESS(rc))
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync {
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync WARN(("err"));
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync return rc;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync }
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync }
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync return VINF_SUCCESS;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync}
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsyncint CrFbDisplayComposite::EntryCreated(struct CR_FRAMEBUFFER *pFb, HCR_FRAMEBUFFER_ENTRY hEntry)
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync{
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync int rc = CrFbDisplayBase::EntryAdded(pFb, hEntry);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync if (!RT_SUCCESS(rc))
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync {
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync WARN(("err"));
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync return rc;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync }
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync CrFbDisplayBase *pIter;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync RTListForEachCpp(&mDisplays, pIter, CrFbDisplayBase, mNode)
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync {
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync int rc = pIter->EntryCreated(pFb, hEntry);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync if (!RT_SUCCESS(rc))
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync {
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync WARN(("err"));
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync return rc;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync }
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync }
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync return VINF_SUCCESS;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync}
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsyncint CrFbDisplayComposite::EntryReplaced(struct CR_FRAMEBUFFER *pFb, HCR_FRAMEBUFFER_ENTRY hNewEntry, HCR_FRAMEBUFFER_ENTRY hReplacedEntry)
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync{
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync int rc = CrFbDisplayBase::EntryReplaced(pFb, hNewEntry, hReplacedEntry);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync if (!RT_SUCCESS(rc))
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync {
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync WARN(("err"));
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync return rc;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync }
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync CrFbDisplayBase *pIter;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync RTListForEachCpp(&mDisplays, pIter, CrFbDisplayBase, mNode)
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync {
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync int rc = pIter->EntryReplaced(pFb, hNewEntry, hReplacedEntry);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync if (!RT_SUCCESS(rc))
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync {
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync WARN(("err"));
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync return rc;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync }
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync }
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync return VINF_SUCCESS;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync}
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsyncint CrFbDisplayComposite::EntryTexChanged(struct CR_FRAMEBUFFER *pFb, HCR_FRAMEBUFFER_ENTRY hEntry)
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync{
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync int rc = CrFbDisplayBase::EntryTexChanged(pFb, hEntry);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync if (!RT_SUCCESS(rc))
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync {
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync WARN(("err"));
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync return rc;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync }
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync CrFbDisplayBase *pIter;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync RTListForEachCpp(&mDisplays, pIter, CrFbDisplayBase, mNode)
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync {
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync int rc = pIter->EntryTexChanged(pFb, hEntry);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync if (!RT_SUCCESS(rc))
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync {
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync WARN(("err"));
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync return rc;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync }
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync }
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync return VINF_SUCCESS;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync}
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsyncint CrFbDisplayComposite::EntryRemoved(struct CR_FRAMEBUFFER *pFb, HCR_FRAMEBUFFER_ENTRY hEntry)
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync{
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync int rc = CrFbDisplayBase::EntryRemoved(pFb, hEntry);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync if (!RT_SUCCESS(rc))
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync {
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync WARN(("err"));
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync return rc;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync }
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync CrFbDisplayBase *pIter;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync RTListForEachCpp(&mDisplays, pIter, CrFbDisplayBase, mNode)
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync {
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync int rc = pIter->EntryRemoved(pFb, hEntry);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync if (!RT_SUCCESS(rc))
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync {
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync WARN(("err"));
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync return rc;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync }
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync }
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync return VINF_SUCCESS;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync}
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsyncint CrFbDisplayComposite::EntryDestroyed(struct CR_FRAMEBUFFER *pFb, HCR_FRAMEBUFFER_ENTRY hEntry)
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync{
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync int rc = CrFbDisplayBase::EntryDestroyed(pFb, hEntry);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync if (!RT_SUCCESS(rc))
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync {
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync WARN(("err"));
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync return rc;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync }
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync CrFbDisplayBase *pIter;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync RTListForEachCpp(&mDisplays, pIter, CrFbDisplayBase, mNode)
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync {
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync int rc = pIter->EntryDestroyed(pFb, hEntry);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync if (!RT_SUCCESS(rc))
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync {
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync WARN(("err"));
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync return rc;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync }
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync }
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync return VINF_SUCCESS;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync}
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsyncint CrFbDisplayComposite::RegionsChanged(struct CR_FRAMEBUFFER *pFb)
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync{
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync int rc = CrFbDisplayBase::RegionsChanged(pFb);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync if (!RT_SUCCESS(rc))
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync {
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync WARN(("err"));
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync return rc;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync }
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync CrFbDisplayBase *pIter;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync RTListForEachCpp(&mDisplays, pIter, CrFbDisplayBase, mNode)
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync {
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync int rc = pIter->RegionsChanged(pFb);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync if (!RT_SUCCESS(rc))
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync {
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync WARN(("err"));
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync return rc;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync }
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync }
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync return VINF_SUCCESS;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync}
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsyncint CrFbDisplayComposite::FramebufferChanged(struct CR_FRAMEBUFFER *pFb)
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync{
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync int rc = CrFbDisplayBase::FramebufferChanged(pFb);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync if (!RT_SUCCESS(rc))
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync {
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync WARN(("err"));
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync return rc;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync }
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync CrFbDisplayBase *pIter;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync RTListForEachCpp(&mDisplays, pIter, CrFbDisplayBase, mNode)
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync {
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync int rc = pIter->FramebufferChanged(pFb);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync if (!RT_SUCCESS(rc))
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync {
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync WARN(("err"));
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync return rc;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync }
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync }
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync return VINF_SUCCESS;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync}
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsyncCrFbDisplayComposite::~CrFbDisplayComposite()
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync{
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync cleanup();
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync}
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsyncvoid CrFbDisplayComposite::cleanup(bool fCleanupDisplays)
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync{
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync CrFbDisplayBase *pIter, *pIterNext;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync RTListForEachSafeCpp(&mDisplays, pIter, pIterNext, CrFbDisplayBase, mNode)
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync {
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync remove(pIter, fCleanupDisplays);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync }
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync}
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync