Compare commits
10 Commits
Author | SHA1 | Date |
---|---|---|
|
7c4f99c85d | 1 week ago |
|
c0323ee329 | 3 months ago |
|
40493475ba | 3 months ago |
|
4098e8c0e5 | 11 months ago |
|
ca234008b9 | 11 months ago |
|
2ebb41a371 | 11 months ago |
|
6cf4299f78 | 11 months ago |
|
df0459da69 | 11 months ago |
|
46accb1077 | 11 months ago |
|
7a91ba5a84 | 11 months ago |
@ -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
|
@ -1 +1 @@
|
||||
Subproject commit ff5182f7f2825263e93e88064931597b3c6cf928
|
||||
Subproject commit a21819cc22587e16af00e2c3d8f70156c11310a0
|
Loading…
Reference in new issue