You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
164 lines
6.2 KiB
164 lines
6.2 KiB
// Copyright (C) 2020 The Android Open Source Project
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
#include <stdint.h> // for uint32_t
|
|
#include <map> // for map, __ma...
|
|
#include <utility> // for pair
|
|
|
|
#include "host-common/MultiDisplay.h" // for MultiDisp...
|
|
#include "host-common/multi_display_agent.h" // for QAndroidM...
|
|
|
|
std::map<uint32_t, android::MultiDisplayInfo> mMultiDisplay;
|
|
static const QAndroidMultiDisplayAgent sMultiDisplayAgent = {
|
|
.setMultiDisplay = [](uint32_t id,
|
|
int32_t x,
|
|
int32_t y,
|
|
uint32_t w,
|
|
uint32_t h,
|
|
uint32_t dpi,
|
|
uint32_t flag,
|
|
bool add) -> int{
|
|
return 0;
|
|
},
|
|
.getMultiDisplay = [](uint32_t id,
|
|
int32_t* x,
|
|
int32_t* y,
|
|
uint32_t* w,
|
|
uint32_t* h,
|
|
uint32_t* dpi,
|
|
uint32_t* flag,
|
|
bool* enable) -> bool{
|
|
return true;
|
|
},
|
|
.getNextMultiDisplay = [](int32_t start_id,
|
|
uint32_t* id,
|
|
int32_t* x,
|
|
int32_t* y,
|
|
uint32_t* w,
|
|
uint32_t* h,
|
|
uint32_t* dpi,
|
|
uint32_t* flag,
|
|
uint32_t* cb) -> bool {
|
|
uint32_t key;
|
|
std::map<uint32_t, android::MultiDisplayInfo>::iterator i;
|
|
if (start_id < 0) {
|
|
key = 0;
|
|
} else {
|
|
key = start_id + 1;
|
|
}
|
|
i = mMultiDisplay.lower_bound(key);
|
|
if (i == mMultiDisplay.end()) {
|
|
return false;
|
|
} else {
|
|
if (id) {
|
|
*id = i->first;
|
|
}
|
|
if (x) {
|
|
*x = i->second.pos_x;
|
|
}
|
|
if (y) {
|
|
*y = i->second.pos_y;
|
|
}
|
|
if (w) {
|
|
*w = i->second.width;
|
|
}
|
|
if (h) {
|
|
*h = i->second.height;
|
|
}
|
|
if (dpi) {
|
|
*dpi = i->second.dpi;
|
|
}
|
|
if (flag) {
|
|
*flag = i->second.flag;
|
|
}
|
|
if (cb) {
|
|
*cb = i->second.cb;
|
|
}
|
|
return true;
|
|
}
|
|
},
|
|
.isMultiDisplayEnabled = [](void) -> bool {
|
|
return mMultiDisplay.size() > 1;
|
|
},
|
|
.getCombinedDisplaySize = [](uint32_t* width, uint32_t* height) {
|
|
},
|
|
.multiDisplayParamValidate = [](uint32_t id,
|
|
uint32_t w,
|
|
uint32_t h,
|
|
uint32_t dpi,
|
|
uint32_t flag) -> bool {
|
|
return true;
|
|
},
|
|
.translateCoordination = [](uint32_t* x,
|
|
uint32_t*y,
|
|
uint32_t* displayId) -> bool {
|
|
return true;
|
|
},
|
|
.setGpuMode = [](bool isGuestMode, uint32_t w, uint32_t h) { },
|
|
.createDisplay = [](uint32_t* displayId) -> int {
|
|
mMultiDisplay.emplace(*displayId, android::MultiDisplayInfo());
|
|
return 0;
|
|
},
|
|
.destroyDisplay = [](uint32_t displayId) -> int {
|
|
mMultiDisplay.erase(displayId);
|
|
return 0;
|
|
},
|
|
.setDisplayPose = [](uint32_t displayId,
|
|
int32_t x,
|
|
int32_t y,
|
|
uint32_t w,
|
|
uint32_t h,
|
|
uint32_t dpi) -> int {
|
|
mMultiDisplay[displayId].pos_x = x;
|
|
mMultiDisplay[displayId].pos_y = y;
|
|
mMultiDisplay[displayId].width = w;
|
|
mMultiDisplay[displayId].height = h;
|
|
mMultiDisplay[displayId].dpi = dpi;
|
|
return 0;
|
|
},
|
|
.getDisplayPose = [](uint32_t displayId,
|
|
int32_t* x,
|
|
int32_t* y,
|
|
uint32_t* w,
|
|
uint32_t* h) -> int {
|
|
*x = mMultiDisplay[displayId].pos_x;
|
|
*y = mMultiDisplay[displayId].pos_y;
|
|
*w = mMultiDisplay[displayId].width;
|
|
*h = mMultiDisplay[displayId].height;
|
|
return 0;
|
|
},
|
|
.getDisplayColorBuffer = [](uint32_t displayId,
|
|
uint32_t* colorBuffer) -> int {
|
|
*colorBuffer = mMultiDisplay[displayId].cb;
|
|
return 0;
|
|
},
|
|
.getColorBufferDisplay = [](uint32_t colorBuffer,
|
|
uint32_t* displayId) -> int {
|
|
for (const auto& iter : mMultiDisplay) {
|
|
if (iter.second.cb == colorBuffer) {
|
|
*displayId = iter.first;
|
|
return 0;
|
|
}
|
|
}
|
|
return -1;
|
|
},
|
|
.setDisplayColorBuffer = [](uint32_t displayId,
|
|
uint32_t colorBuffer) -> int {
|
|
mMultiDisplay[displayId].cb = colorBuffer;
|
|
return 0;
|
|
}
|
|
};
|
|
extern "C" const QAndroidMultiDisplayAgent* const
|
|
gMockQAndroidMultiDisplayAgent = &sMultiDisplayAgent;
|