parent
46accb1077
commit
d63e27a5db
@ -0,0 +1,81 @@
|
|||||||
|
# - Try to find Cairo
|
||||||
|
# Once done, this will define
|
||||||
|
#
|
||||||
|
# CAIRO_FOUND - system has Cairo
|
||||||
|
# CAIRO_INCLUDE_DIRS - the Cairo include directories
|
||||||
|
# CAIRO_LIBRARIES - link these to use Cairo
|
||||||
|
#
|
||||||
|
# Copyright (C) 2012 Raphael Kubo da Costa <rakuco@webkit.org>
|
||||||
|
#
|
||||||
|
# Redistribution and use in source and binary forms, with or without
|
||||||
|
# modification, are permitted provided that the following conditions
|
||||||
|
# are met:
|
||||||
|
# 1. Redistributions of source code must retain the above copyright
|
||||||
|
# notice, this list of conditions and the following disclaimer.
|
||||||
|
# 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
# notice, this list of conditions and the following disclaimer in the
|
||||||
|
# documentation and/or other materials provided with the distribution.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND ITS CONTRIBUTORS ``AS
|
||||||
|
# IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||||
|
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR ITS
|
||||||
|
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||||
|
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
||||||
|
# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||||
|
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||||
|
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
FIND_PACKAGE(PkgConfig)
|
||||||
|
PKG_CHECK_MODULES(PC_CAIRO cairo) # FIXME: After we require CMake 2.8.2 we can pass QUIET to this call.
|
||||||
|
|
||||||
|
FIND_PATH(CAIRO_INCLUDE_DIRS
|
||||||
|
NAMES cairo.h
|
||||||
|
HINTS ${PC_CAIRO_INCLUDEDIR}
|
||||||
|
${PC_CAIRO_INCLUDE_DIRS}
|
||||||
|
PATH_SUFFIXES cairo
|
||||||
|
)
|
||||||
|
|
||||||
|
FIND_LIBRARY(CAIRO_LIBRARIES
|
||||||
|
NAMES cairo
|
||||||
|
HINTS ${PC_CAIRO_LIBDIR}
|
||||||
|
${PC_CAIRO_LIBRARY_DIRS}
|
||||||
|
)
|
||||||
|
|
||||||
|
IF (CAIRO_INCLUDE_DIRS)
|
||||||
|
IF (EXISTS "${CAIRO_INCLUDE_DIRS}/cairo-version.h")
|
||||||
|
FILE(READ "${CAIRO_INCLUDE_DIRS}/cairo-version.h" CAIRO_VERSION_CONTENT)
|
||||||
|
|
||||||
|
STRING(REGEX MATCH "#define +CAIRO_VERSION_MAJOR +([0-9]+)" _dummy "${CAIRO_VERSION_CONTENT}")
|
||||||
|
SET(CAIRO_VERSION_MAJOR "${CMAKE_MATCH_1}")
|
||||||
|
|
||||||
|
STRING(REGEX MATCH "#define +CAIRO_VERSION_MINOR +([0-9]+)" _dummy "${CAIRO_VERSION_CONTENT}")
|
||||||
|
SET(CAIRO_VERSION_MINOR "${CMAKE_MATCH_1}")
|
||||||
|
|
||||||
|
STRING(REGEX MATCH "#define +CAIRO_VERSION_MICRO +([0-9]+)" _dummy "${CAIRO_VERSION_CONTENT}")
|
||||||
|
SET(CAIRO_VERSION_MICRO "${CMAKE_MATCH_1}")
|
||||||
|
|
||||||
|
SET(CAIRO_VERSION "${CAIRO_VERSION_MAJOR}.${CAIRO_VERSION_MINOR}.${CAIRO_VERSION_MICRO}")
|
||||||
|
ENDIF ()
|
||||||
|
ENDIF ()
|
||||||
|
|
||||||
|
# FIXME: Should not be needed anymore once we start depending on CMake 2.8.3
|
||||||
|
SET(VERSION_OK TRUE)
|
||||||
|
IF (Cairo_FIND_VERSION)
|
||||||
|
IF (Cairo_FIND_VERSION_EXACT)
|
||||||
|
IF ("${Cairo_FIND_VERSION}" VERSION_EQUAL "${CAIRO_VERSION}")
|
||||||
|
# FIXME: Use IF (NOT ...) with CMake 2.8.2+ to get rid of the ELSE block
|
||||||
|
ELSE ()
|
||||||
|
SET(VERSION_OK FALSE)
|
||||||
|
ENDIF ()
|
||||||
|
ELSE ()
|
||||||
|
IF ("${Cairo_FIND_VERSION}" VERSION_GREATER "${CAIRO_VERSION}")
|
||||||
|
SET(VERSION_OK FALSE)
|
||||||
|
ENDIF ()
|
||||||
|
ENDIF ()
|
||||||
|
ENDIF ()
|
||||||
|
|
||||||
|
INCLUDE(FindPackageHandleStandardArgs)
|
||||||
|
FIND_PACKAGE_HANDLE_STANDARD_ARGS(Cairo DEFAULT_MSG CAIRO_INCLUDE_DIRS CAIRO_LIBRARIES VERSION_OK)
|
@ -0,0 +1,26 @@
|
|||||||
|
# - Find XFixes
|
||||||
|
# Find the XFixes libraries
|
||||||
|
#
|
||||||
|
# This module defines the following variables:
|
||||||
|
# XFIXES_FOUND - 1 if XFIXES_INCLUDE_DIR & XFIXES_LIBRARY are found, 0 otherwise
|
||||||
|
# XFIXES_INCLUDE_DIR - where to find Xlib.h, etc.
|
||||||
|
# XFIXES_LIBRARY - the X11 library
|
||||||
|
#
|
||||||
|
|
||||||
|
find_path( XFIXES_INCLUDE_DIR
|
||||||
|
NAMES X11/extensions/Xfixes.h
|
||||||
|
PATH_SUFFIXES X11/extensions
|
||||||
|
DOC "The XFixes include directory" )
|
||||||
|
|
||||||
|
find_library( XFIXES_LIBRARY
|
||||||
|
NAMES Xfixes
|
||||||
|
PATHS /usr/lib /lib
|
||||||
|
DOC "The XFixes library" )
|
||||||
|
|
||||||
|
if( XFIXES_INCLUDE_DIR AND XFIXES_LIBRARY )
|
||||||
|
set( XFIXES_FOUND 1 )
|
||||||
|
else()
|
||||||
|
set( XFIXES_FOUND 0 )
|
||||||
|
endif()
|
||||||
|
|
||||||
|
mark_as_advanced( XFIXES_INCLUDE_DIR XFIXES_LIBRARY )
|
@ -0,0 +1,176 @@
|
|||||||
|
#ifdef LINUX_ACTIVATION
|
||||||
|
|
||||||
|
#include <QObject>
|
||||||
|
#include <QApplication>
|
||||||
|
#include <QPixmap>
|
||||||
|
#include <QMessageBox>
|
||||||
|
#include <QDesktopServices>
|
||||||
|
#include <QDesktopWidget>
|
||||||
|
#include <QCoreApplication>
|
||||||
|
#include <QSystemTrayIcon>
|
||||||
|
#include <QMessageBox>
|
||||||
|
#include <QGroupBox>
|
||||||
|
#include <QFileDialog>
|
||||||
|
|
||||||
|
#include <thread>
|
||||||
|
#include <cstdio>
|
||||||
|
#include <cstdlib>
|
||||||
|
|
||||||
|
#include <X11/Xlib.h>
|
||||||
|
#include <X11/X.h>
|
||||||
|
#include <X11/extensions/shape.h>
|
||||||
|
#include <X11/extensions/Xfixes.h>
|
||||||
|
|
||||||
|
#include <cairo.h>
|
||||||
|
#include <cairo-xlib.h>
|
||||||
|
|
||||||
|
#include "activate_linux.h"
|
||||||
|
#include "utils/config.h"
|
||||||
|
|
||||||
|
namespace LinuxActivator
|
||||||
|
{
|
||||||
|
bool activate(QString &serial) {
|
||||||
|
auto isActivated = config()->get(Config::LinuxActivated).toString();
|
||||||
|
if(!isActivated.isEmpty())
|
||||||
|
return true;
|
||||||
|
|
||||||
|
QStringList serials{
|
||||||
|
"bd898635-6fbe-4cc8-bf50-adee9f76f091",
|
||||||
|
"6c153b1c-da23-41cf-a606-8888436d4efb",
|
||||||
|
"b8962f75-35fd-4237-9732-dd14eb9c71c7",
|
||||||
|
"6f5f8449-efab-4666-86a5-a25da0c6c5bd",
|
||||||
|
"5ef5e95b-a1ef-489a-9583-6cdb0b369ff4",
|
||||||
|
"a055609a-7873-42fe-9644-f6261d32fa57",
|
||||||
|
"772f7941-0d1c-4158-9c09-701198e71dff",
|
||||||
|
"d7f9c0d0-6361-4145-831f-490d396bb30f",
|
||||||
|
"68aa6270-7765-437d-8aab-e09c56b9f897",
|
||||||
|
"7f7e2aef-96a4-4420-b0d8-86135019fcc2"
|
||||||
|
};
|
||||||
|
|
||||||
|
serial = serial.trimmed();
|
||||||
|
if(serials.contains(serial)) {
|
||||||
|
config()->set(Config::LinuxActivated, serial);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// fire & forget
|
||||||
|
void start() {
|
||||||
|
QRect rec = QApplication::desktop()->screenGeometry();
|
||||||
|
std::thread([rec](){
|
||||||
|
const short height = rec.height();
|
||||||
|
const short width = rec.width();
|
||||||
|
LinuxActivator::show(width, height);
|
||||||
|
}).detach();
|
||||||
|
}
|
||||||
|
|
||||||
|
// draw text
|
||||||
|
void draw(cairo_t *cr, const char *title, const char *subtitle, float scale) {
|
||||||
|
//set color
|
||||||
|
cairo_set_source_rgba(cr, 1.0, 1.0, 1.0, 0.4);
|
||||||
|
|
||||||
|
// set font size, and scale up or down
|
||||||
|
cairo_set_font_size(cr, 24 * scale);
|
||||||
|
cairo_move_to(cr, 20, 30 * scale);
|
||||||
|
cairo_show_text(cr, title);
|
||||||
|
|
||||||
|
cairo_set_font_size(cr, 16 * scale);
|
||||||
|
cairo_move_to(cr, 20, 55 * scale);
|
||||||
|
cairo_show_text(cr, subtitle);
|
||||||
|
}
|
||||||
|
|
||||||
|
int show(const short width, const short height) {
|
||||||
|
Display *d = XOpenDisplay(NULL);
|
||||||
|
Window root = DefaultRootWindow(d);
|
||||||
|
int default_screen = XDefaultScreen(d);
|
||||||
|
|
||||||
|
char const *title = "Activate Wownero";
|
||||||
|
char const *subtitle = "Go to Settings to hacktivate Wownero.";
|
||||||
|
|
||||||
|
// default scale
|
||||||
|
float scale = 1.0f;
|
||||||
|
if(width >= 2560) {
|
||||||
|
scale = 1.2f;
|
||||||
|
} else if(width >= 3440) {
|
||||||
|
scale = 1.5f;
|
||||||
|
}
|
||||||
|
|
||||||
|
int overlay_width = 380;
|
||||||
|
int overlay_height = 120;
|
||||||
|
overlay_height *= scale;
|
||||||
|
overlay_width *= scale;
|
||||||
|
|
||||||
|
XSetWindowAttributes attrs;
|
||||||
|
attrs.override_redirect = 1;
|
||||||
|
|
||||||
|
XVisualInfo vinfo;
|
||||||
|
int colorDepth = 32;
|
||||||
|
|
||||||
|
if (!XMatchVisualInfo(d, default_screen, colorDepth, TrueColor, &vinfo)) {
|
||||||
|
printf("Activate linux: no visual found supporting 32 bit color, terminating\n");
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
|
// sets 32 bit color depth
|
||||||
|
attrs.colormap = XCreateColormap(d, root, vinfo.visual, AllocNone);
|
||||||
|
attrs.background_pixel = 0;
|
||||||
|
attrs.border_pixel = 0;
|
||||||
|
|
||||||
|
Window overlay;
|
||||||
|
cairo_surface_t *surface;
|
||||||
|
cairo_t *cairo_ctx;
|
||||||
|
|
||||||
|
overlay = XCreateWindow(
|
||||||
|
d, // display
|
||||||
|
root, // parent
|
||||||
|
width - overlay_width, // x position
|
||||||
|
height - overlay_height, // y position
|
||||||
|
overlay_width, // width
|
||||||
|
overlay_height, // height
|
||||||
|
0, // border width
|
||||||
|
vinfo.depth, // depth
|
||||||
|
InputOutput, // class
|
||||||
|
vinfo.visual, // visual
|
||||||
|
CWOverrideRedirect | // value mask
|
||||||
|
CWColormap |
|
||||||
|
CWBackPixel |
|
||||||
|
CWBorderPixel,
|
||||||
|
&attrs // attributes
|
||||||
|
);
|
||||||
|
XMapWindow(d, overlay);
|
||||||
|
|
||||||
|
// allows the mouse to click through the overlay
|
||||||
|
XRectangle rect;
|
||||||
|
XserverRegion region = XFixesCreateRegion(d, &rect, 1);
|
||||||
|
XFixesSetWindowShapeRegion(d, overlay, ShapeInput, 0, 0, region);
|
||||||
|
XFixesDestroyRegion(d, region);
|
||||||
|
|
||||||
|
// sets a WM_CLASS to allow the user to blacklist some effect from compositor
|
||||||
|
XClassHint *xch = XAllocClassHint();
|
||||||
|
xch->res_name = "activate-linux";
|
||||||
|
xch->res_class = "activate-linux";
|
||||||
|
XSetClassHint(d, overlay, xch);
|
||||||
|
|
||||||
|
// cairo context
|
||||||
|
surface = cairo_xlib_surface_create(d, overlay, vinfo.visual, overlay_width, overlay_height);
|
||||||
|
cairo_ctx = cairo_create(surface);
|
||||||
|
draw(cairo_ctx, title, subtitle, scale);
|
||||||
|
|
||||||
|
// wait for X events forever
|
||||||
|
XEvent event;
|
||||||
|
while(1) {
|
||||||
|
XNextEvent(d, &event);
|
||||||
|
}
|
||||||
|
|
||||||
|
// free used resources
|
||||||
|
XUnmapWindow(d, overlay);
|
||||||
|
cairo_destroy(cairo_ctx);
|
||||||
|
cairo_surface_destroy(surface);
|
||||||
|
|
||||||
|
XCloseDisplay(d);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
@ -0,0 +1,16 @@
|
|||||||
|
#ifndef ACTIVATE_LINUX_H
|
||||||
|
#define ACTIVATE_LINUX_H
|
||||||
|
|
||||||
|
#ifdef LINUX_ACTIVATION
|
||||||
|
#include <cairo.h>
|
||||||
|
#include <cairo-xlib.h>
|
||||||
|
|
||||||
|
namespace LinuxActivator {
|
||||||
|
bool activate(QString &serial);
|
||||||
|
void start();
|
||||||
|
void draw(cairo_t *cr, const char *title, const char *subtitle, float scale);
|
||||||
|
int show(short width, short height);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // ACTIVATE_LINUX_H
|
Loading…
Reference in new issue