File indexing completed on 2024-04-28 05:47:17
0001 /***************************************************************************** 0002 * Copyright 2013 - 2015 Yichao Yu <yyc1992@gmail.com> * 0003 * * 0004 * This program is free software; you can redistribute it and/or modify * 0005 * it under the terms of the GNU Lesser General Public License as * 0006 * published by the Free Software Foundation; either version 2.1 of the * 0007 * License, or (at your option) version 3, or any later version accepted * 0008 * by the membership of KDE e.V. (or its successor approved by the * 0009 * membership of KDE e.V.), which shall act as a proxy defined in * 0010 * Section 6 of version 3 of the license. * 0011 * * 0012 * This program is distributed in the hope that it will be useful, * 0013 * but WITHOUT ANY WARRANTY; without even the implied warranty of * 0014 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * 0015 * Lesser General Public License for more details. * 0016 * * 0017 * You should have received a copy of the GNU Lesser General Public * 0018 * License along with this library. If not, * 0019 * see <http://www.gnu.org/licenses/>. * 0020 *****************************************************************************/ 0021 0022 #include "argbhelper.h" 0023 #include <qtcurve-utils/qtutils.h> 0024 0025 #include <QWindow> 0026 #include "private/qwidget_p.h" 0027 0028 namespace QtCurve { 0029 __attribute__((hot)) void 0030 addAlphaChannel(QWidget *widget) 0031 { 0032 QTC_RET_IF_FAIL(!qtcGetWid(widget)); 0033 // Set this for better efficiency for now 0034 widget->setAutoFillBackground(false); 0035 QWindow *window = widget->windowHandle(); 0036 QWidgetPrivate *widgetPrivate = 0037 static_cast<QWidgetPrivate*>(QObjectPrivate::get(widget)); 0038 widgetPrivate->updateIsOpaque(); 0039 if (!window) { 0040 widgetPrivate->createTLExtra(); 0041 widgetPrivate->createTLSysExtra(); 0042 window = widget->windowHandle(); 0043 } 0044 if (window) { 0045 // Maybe we can register event filters and/or listen for signals 0046 // like parent change or screen change on the QWidgetWindow 0047 // so that we have a better change to update the alpha info 0048 QSurfaceFormat format = window->format(); 0049 format.setAlphaBufferSize(8); 0050 window->setFormat(format); 0051 } 0052 } 0053 0054 }