UNIXworkcode

1 /* 2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. 3 * 4 * Copyright 2015 Olaf Wintermann. All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions are met: 8 * 9 * 1. Redistributions of source code must retain the above copyright 10 * notice, this list of conditions and the following disclaimer. 11 * 12 * 2. Redistributions in binary form must reproduce the above copyright 13 * notice, this list of conditions and the following disclaimer in the 14 * documentation and/or other materials provided with the distribution. 15 * 16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 26 * POSSIBILITY OF SUCH DAMAGE. 27 */ 28 29 #include "graphics.h" 30 #include "container.h" 31 32 33 DrawingArea::DrawingArea(UiObject *obj, ui_drawfunc cb, void *data) { 34 object = obj; 35 drawCallback = cb; 36 userdata = data; 37 } 38 39 DrawingArea::~DrawingArea() { 40 41 } 42 43 void DrawingArea::paintEvent(QPaintEvent *event) { 44 QPainter painter(this); 45 46 UiQtGraphics g; 47 g.g.width = this->width(); 48 g.g.height = this->height(); 49 g.painter = &painter; 50 51 UiEvent ev; 52 ev.obj = object; 53 ev.window = object->window; 54 ev.document = object->ctx->document; 55 ev.eventdata = NULL; 56 ev.intval = 0; 57 58 drawCallback(&ev, &g.g, userdata); 59 } 60 61 62 63 UIWIDGET ui_drawingarea(UiObject *obj, ui_drawfunc f, void *userdata) { 64 DrawingArea *widget = new DrawingArea(obj, f, userdata); 65 66 UiContainer *ct = uic_get_current_container(obj); 67 ct->add(widget, true); 68 69 return widget; 70 } 71 72 void ui_drawingarea_mousehandler(UiObject *obj, UIWIDGET widget, ui_callback f, void *u) { 73 74 } 75 76 void ui_drawingarea_getsize(UIWIDGET drawingarea, int *width, int *height) { 77 78 } 79 80 void ui_drawingarea_redraw(UIWIDGET drawingarea) { 81 82 } 83 84 85 /* -------------------- text layout functions -------------------- */ 86 87 UiTextLayout* ui_text(UiGraphics *g) { 88 UiTextLayout *textlayout = new UiTextLayout(); 89 return textlayout; 90 } 91 92 void ui_text_free(UiTextLayout *text) { 93 delete text; 94 } 95 96 void ui_text_setstring(UiTextLayout *layout, char *str) { 97 layout->text.setText(QString::fromUtf8(str)); 98 } 99 100 void ui_text_setstringl(UiTextLayout *layout, char *str, int len) { 101 layout->text.setText(QString::fromUtf8(str, len)); 102 } 103 104 void ui_text_setfont(UiTextLayout *layout, char *font, int size) { 105 layout->font = QFont(QString::fromUtf8(font), size); 106 } 107 108 void ui_text_getsize(UiTextLayout *layout, int *width, int *height) { 109 QSizeF size = layout->text.size(); 110 *width = (int)size.width(); 111 *height = (int)size.height(); 112 } 113 114 void ui_text_setwidth(UiTextLayout *layout, int width) { 115 layout->text.setTextWidth((qreal)width); 116 } 117 118 119 /* -------------------- drawing functions -------------------- */ 120 121 void ui_graphics_color(UiGraphics *g, int red, int green, int blue) { 122 UiQtGraphics *gr = (UiQtGraphics*)g; 123 gr->color = QColor(red, green, blue); 124 gr->painter->setPen(gr->color); 125 } 126 127 void ui_draw_line(UiGraphics *g, int x1, int y1, int x2, int y2) { 128 UiQtGraphics *gr = (UiQtGraphics*)g; 129 130 gr->painter->drawLine(x1, y1, x2, y2); 131 } 132 133 void ui_draw_rect(UiGraphics *g, int x, int y, int w, int h, int fill) { 134 UiQtGraphics *gr = (UiQtGraphics*)g; 135 136 QRect rect(x, y, w, h); 137 if(fill) { 138 gr->painter->fillRect(rect, gr->color); 139 140 } else { 141 gr->painter->drawRect(rect); 142 } 143 } 144 145 void ui_draw_text(UiGraphics *g, int x, int y, UiTextLayout *text) { 146 UiQtGraphics *gr = (UiQtGraphics*)g; 147 148 gr->painter->setFont(text->font); 149 gr->painter->drawStaticText(x, y, text->text); 150 } 151 152