ui/qt/graphics.cpp

Sun, 22 Sep 2024 16:39:10 +0200

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Sun, 22 Sep 2024 16:39:10 +0200
branch
newapi
changeset 302
b00cbbfeec7a
parent 115
102fc0b8fe3e
permissions
-rw-r--r--

add libadwaita toolkit option

/*
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
 *
 * Copyright 2015 Olaf Wintermann. All rights reserved.
 *
 * 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 HOLDERS AND 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 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.
 */

#include "graphics.h"
#include "container.h"


DrawingArea::DrawingArea(UiObject *obj, ui_drawfunc cb, void *data) {
    object = obj;
    drawCallback = cb;
    userdata = data;
}

DrawingArea::~DrawingArea() {
    
}

void DrawingArea::paintEvent(QPaintEvent *event) {
    QPainter painter(this);
    
    UiQtGraphics g;
    g.g.width = this->width();
    g.g.height = this->height();
    g.painter = &painter;
    
    UiEvent ev;
    ev.obj = object;
    ev.window = object->window;
    ev.document = object->ctx->document;
    ev.eventdata = NULL;
    ev.intval = 0;
    
    drawCallback(&ev, &g.g, userdata);
}



UIWIDGET ui_drawingarea(UiObject *obj, ui_drawfunc f, void *userdata) {
    DrawingArea *widget = new DrawingArea(obj, f, userdata);
    
    UiContainer *ct = uic_get_current_container(obj);
    ct->add(widget, true);
    
    return widget;
}

void ui_drawingarea_mousehandler(UiObject *obj, UIWIDGET widget, ui_callback f, void *u) {
    
}

void ui_drawingarea_getsize(UIWIDGET drawingarea, int *width, int *height) {
    
}

void ui_drawingarea_redraw(UIWIDGET drawingarea) {
    
}


/* -------------------- text layout functions -------------------- */

UiTextLayout* ui_text(UiGraphics *g) {
    UiTextLayout *textlayout = new UiTextLayout();
    return textlayout;
}

void ui_text_free(UiTextLayout *text) {
    delete text;
}

void ui_text_setstring(UiTextLayout *layout, char *str) {
    layout->text.setText(QString::fromUtf8(str));
}

void ui_text_setstringl(UiTextLayout *layout, char *str, int len) {
    layout->text.setText(QString::fromUtf8(str, len));
}

void ui_text_setfont(UiTextLayout *layout, char *font, int size) {
    layout->font = QFont(QString::fromUtf8(font), size);
}

void ui_text_getsize(UiTextLayout *layout, int *width, int *height) {
    QSizeF size = layout->text.size();
    *width = (int)size.width();
    *height = (int)size.height();
}

void ui_text_setwidth(UiTextLayout *layout, int width) {
    layout->text.setTextWidth((qreal)width);
}


/* -------------------- drawing functions -------------------- */

void ui_graphics_color(UiGraphics *g, int red, int green, int blue) {
    UiQtGraphics *gr = (UiQtGraphics*)g;
    gr->color = QColor(red, green, blue);
    gr->painter->setPen(gr->color);
}

void ui_draw_line(UiGraphics *g, int x1, int y1, int x2, int y2) {
    UiQtGraphics *gr = (UiQtGraphics*)g;
    
    gr->painter->drawLine(x1, y1, x2, y2);
}

void ui_draw_rect(UiGraphics *g, int x, int y, int w, int h, int fill) {
    UiQtGraphics *gr = (UiQtGraphics*)g;
    
    QRect rect(x, y, w, h);
    if(fill) {
        gr->painter->fillRect(rect, gr->color);
        
    } else {
        gr->painter->drawRect(rect);
    }
}

void ui_draw_text(UiGraphics *g, int x, int y, UiTextLayout *text) {
    UiQtGraphics *gr = (UiQtGraphics*)g;
    
    gr->painter->setFont(text->font);
    gr->painter->drawStaticText(x, y, text->text);
}

mercurial