mirror of
https://github.com/libretro/Gearboy.git
synced 2026-11-09 11:51:27 -10:00
207 lines
6.7 KiB
C++
207 lines
6.7 KiB
C++
/*
|
|
* Gearboy - Nintendo Game Boy Emulator
|
|
* Copyright (C) 2012 Ignacio Sanchez
|
|
|
|
* This program is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
* any later version.
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program. If not, see http://www.gnu.org/licenses/
|
|
*
|
|
*/
|
|
|
|
#include <QColorDialog>
|
|
#include "VideoSettings.h"
|
|
#include "GLFrame.h"
|
|
#include "Emulator.h"
|
|
#include "MainWindow.h"
|
|
|
|
VideoSettings::VideoSettings(GLFrame* pGLFrame, Emulator* pEmulator)
|
|
{
|
|
widget.setupUi(this);
|
|
m_pEmulator = pEmulator;
|
|
m_pGLFrame = pGLFrame;
|
|
m_iCurrentColor = 0;
|
|
InitPointer(m_pColorDialog);
|
|
}
|
|
|
|
VideoSettings::~VideoSettings()
|
|
{
|
|
SafeDelete(m_pColorDialog);
|
|
}
|
|
|
|
void VideoSettings::ColorDialogFinished(QColor color)
|
|
{
|
|
m_iColors[m_iCurrentColor] = (color.blue() & 0xFF) | ((color.green() & 0xFF) << 8) | ((color.red() & 0xFF) << 16);
|
|
QString qss = QString("background-color: %1").arg(color.name());
|
|
|
|
switch (m_iCurrentColor)
|
|
{
|
|
case 0:
|
|
widget.pushButtonColor1->setStyleSheet(qss);
|
|
break;
|
|
case 1:
|
|
widget.pushButtonColor2->setStyleSheet(qss);
|
|
break;
|
|
case 2:
|
|
widget.pushButtonColor3->setStyleSheet(qss);
|
|
break;
|
|
case 3:
|
|
widget.pushButtonColor4->setStyleSheet(qss);
|
|
break;
|
|
}
|
|
}
|
|
|
|
void VideoSettings::Color1()
|
|
{
|
|
QColor old_color;
|
|
old_color.setBlue(m_iColors[0] & 0xFF);
|
|
old_color.setGreen((m_iColors[0] >> 8) & 0xFF);
|
|
old_color.setRed((m_iColors[0] >> 16) & 0xFF);
|
|
m_iCurrentColor = 0;
|
|
SafeDelete(m_pColorDialog);
|
|
m_pColorDialog = new QColorDialog();
|
|
m_pColorDialog->setCurrentColor(old_color);
|
|
m_pColorDialog->setModal(true);
|
|
connect(m_pColorDialog, SIGNAL(colorSelected(QColor)), this, SLOT(ColorDialogFinished(QColor)));
|
|
m_pColorDialog->show();
|
|
}
|
|
|
|
void VideoSettings::Color2()
|
|
{
|
|
QColor old_color;
|
|
old_color.setBlue(m_iColors[1] & 0xFF);
|
|
old_color.setGreen((m_iColors[1] >> 8) & 0xFF);
|
|
old_color.setRed((m_iColors[1] >> 16) & 0xFF);
|
|
m_iCurrentColor = 1;
|
|
SafeDelete(m_pColorDialog);
|
|
m_pColorDialog = new QColorDialog();
|
|
m_pColorDialog->setCurrentColor(old_color);
|
|
m_pColorDialog->setModal(true);
|
|
connect(m_pColorDialog, SIGNAL(colorSelected(QColor)), this, SLOT(ColorDialogFinished(QColor)));
|
|
m_pColorDialog->show();
|
|
}
|
|
|
|
void VideoSettings::Color3()
|
|
{
|
|
QColor old_color;
|
|
old_color.setBlue(m_iColors[2] & 0xFF);
|
|
old_color.setGreen((m_iColors[2] >> 8) & 0xFF);
|
|
old_color.setRed((m_iColors[2] >> 16) & 0xFF);
|
|
m_iCurrentColor = 2;
|
|
SafeDelete(m_pColorDialog);
|
|
m_pColorDialog = new QColorDialog();
|
|
m_pColorDialog->setCurrentColor(old_color);
|
|
m_pColorDialog->setModal(true);
|
|
connect(m_pColorDialog, SIGNAL(colorSelected(QColor)), this, SLOT(ColorDialogFinished(QColor)));
|
|
m_pColorDialog->show();
|
|
}
|
|
|
|
void VideoSettings::Color4()
|
|
{
|
|
QColor old_color;
|
|
old_color.setBlue(m_iColors[3] & 0xFF);
|
|
old_color.setGreen((m_iColors[3] >> 8) & 0xFF);
|
|
old_color.setRed((m_iColors[3] >> 16) & 0xFF);
|
|
m_iCurrentColor = 3;
|
|
SafeDelete(m_pColorDialog);
|
|
m_pColorDialog = new QColorDialog();
|
|
m_pColorDialog->setCurrentColor(old_color);
|
|
m_pColorDialog->setModal(true);
|
|
connect(m_pColorDialog, SIGNAL(colorSelected(QColor)), this, SLOT(ColorDialogFinished(QColor)));
|
|
m_pColorDialog->show();
|
|
}
|
|
|
|
void VideoSettings::PressedOK()
|
|
{
|
|
m_pGLFrame->SetBilinearFiletering(widget.checkBoxFilter->isChecked());
|
|
m_pGLFrame->SetMixFrames(widget.checkBoxMix->isChecked());
|
|
|
|
GB_Color gb_color[4];
|
|
|
|
for (int i = 0; i < 4; i++)
|
|
{
|
|
gb_color[i].red = (m_iColors[i] >> 16) & 0xFF;
|
|
gb_color[i].green = (m_iColors[i] >> 8) & 0xFF;
|
|
gb_color[i].blue = m_iColors[i] & 0xFF;
|
|
}
|
|
|
|
m_pEmulator->SetDMGPalette(gb_color[0], gb_color[1], gb_color[2], gb_color[3]);
|
|
|
|
m_pGLFrame->ResumeRenderThread();
|
|
this->accept();
|
|
}
|
|
|
|
void VideoSettings::PressedCancel()
|
|
{
|
|
m_pGLFrame->ResumeRenderThread();
|
|
this->reject();
|
|
}
|
|
|
|
void VideoSettings::SaveSettings(QSettings& settings)
|
|
{
|
|
settings.setValue("DMGColor1", m_iColors[0]);
|
|
settings.setValue("DMGColor2", m_iColors[1]);
|
|
settings.setValue("DMGColor3", m_iColors[2]);
|
|
settings.setValue("DMGColor4", m_iColors[3]);
|
|
settings.setValue("BilinearFiltering", widget.checkBoxFilter->isChecked());
|
|
settings.setValue("MixFrames", widget.checkBoxMix->isChecked());
|
|
}
|
|
|
|
void VideoSettings::LoadSettings(QSettings& settings)
|
|
{
|
|
m_iColors[0] = settings.value("DMGColor1", 0xB8C266).toInt();
|
|
m_iColors[1] = settings.value("DMGColor2", 0x7B8A32).toInt();
|
|
m_iColors[2] = settings.value("DMGColor3", 0x43591D).toInt();
|
|
m_iColors[3] = settings.value("DMGColor4", 0x132C13).toInt();
|
|
|
|
widget.checkBoxFilter->setChecked(settings.value("BilinearFiltering", false).toBool());
|
|
widget.checkBoxMix->setChecked(settings.value("MixFrames", true).toBool());
|
|
|
|
QColor color;
|
|
color.setBlue(m_iColors[0] & 0xFF);
|
|
color.setGreen((m_iColors[0] >> 8) & 0xFF);
|
|
color.setRed((m_iColors[0] >> 16) & 0xFF);
|
|
QString qss = QString("background-color: %1").arg(color.name());
|
|
widget.pushButtonColor1->setStyleSheet(qss);
|
|
|
|
color.setBlue(m_iColors[1] & 0xFF);
|
|
color.setGreen((m_iColors[1] >> 8) & 0xFF);
|
|
color.setRed((m_iColors[1] >> 16) & 0xFF);
|
|
qss = QString("background-color: %1").arg(color.name());
|
|
widget.pushButtonColor2->setStyleSheet(qss);
|
|
|
|
color.setBlue(m_iColors[2] & 0xFF);
|
|
color.setGreen((m_iColors[2] >> 8) & 0xFF);
|
|
color.setRed((m_iColors[2] >> 16) & 0xFF);
|
|
qss = QString("background-color: %1").arg(color.name());
|
|
widget.pushButtonColor3->setStyleSheet(qss);
|
|
|
|
color.setBlue(m_iColors[3] & 0xFF);
|
|
color.setGreen((m_iColors[3] >> 8) & 0xFF);
|
|
color.setRed((m_iColors[3] >> 16) & 0xFF);
|
|
qss = QString("background-color: %1").arg(color.name());
|
|
widget.pushButtonColor4->setStyleSheet(qss);
|
|
|
|
m_pGLFrame->SetBilinearFiletering(widget.checkBoxFilter->isChecked());
|
|
m_pGLFrame->SetMixFrames(widget.checkBoxMix->isChecked());
|
|
|
|
GB_Color gb_color[4];
|
|
|
|
for (int i = 0; i < 4; i++)
|
|
{
|
|
gb_color[i].red = (m_iColors[i] >> 16) & 0xFF;
|
|
gb_color[i].green = (m_iColors[i] >> 8) & 0xFF;
|
|
gb_color[i].blue = m_iColors[i] & 0xFF;
|
|
}
|
|
|
|
m_pEmulator->SetDMGPalette(gb_color[0], gb_color[1], gb_color[2], gb_color[3]);
|
|
}
|