Mon, 10 Nov 2025 21:52:51 +0100
update ucx
/* * 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 <stdio.h> #include <stdlib.h> #include <X11/Intrinsic.h> #include <X11/IntrinsicP.h> #include "graphics.h" #include "container.h" UIWIDGET ui_drawingarea_create(UiObject *obj, UiDrawingAreaArgs *args) { Arg xargs[16]; int n = 0; UiContainerPrivate *ctn = ui_obj_container(obj); UiLayout layout = UI_ARGS2LAYOUT(args); Widget parent = ui_container_prepare(ctn, &layout, xargs, &n); char *name = args->name ? (char*)args->name : "drawingarea"; Widget widget = XmCreateDrawingArea(parent, name, xargs, n); XtManageChild(widget); ui_container_add(ctn, widget); UiDrawingArea *drawingarea = malloc(sizeof(UiDrawingArea)); drawingarea->obj = obj; drawingarea->draw = args->draw; drawingarea->drawdata = args->drawdata; drawingarea->onclick = args->onclick; drawingarea->onclickdata = args->onclickdata; drawingarea->onmotion = args->onmotion; drawingarea->onmotiondata = args->onmotiondata; drawingarea->gc = NULL; XtAddCallback( widget, XmNdestroyCallback, (XtCallbackProc)ui_drawingarea_destroy, drawingarea); XtAddCallback( widget, XmNexposeCallback, (XtCallbackProc)ui_drawingarea_expose, drawingarea); return widget; } void ui_drawingarea_destroy(Widget w, UiDrawingArea *drawingarea, XtPointer d) { if(drawingarea->gc) { XFreeGC(XtDisplay(w), drawingarea->gc); } free(drawingarea); } void ui_drawingarea_expose(Widget w, UiDrawingArea *drawingarea, XtPointer d) { Display *dp = XtDisplay(w); if(!drawingarea->gc) { XGCValues gcvals; gcvals.foreground = BlackPixelOfScreen(XtScreen(w)); drawingarea->gc = XCreateGC(dp, XtWindow(w), (GCForeground), &gcvals); } if(drawingarea->draw) { UiEvent event; event.obj = drawingarea->obj; event.window = event.obj->window; event.document = event.obj->ctx->document; event.eventdata = NULL; event.eventdatatype = 0; event.intval = 0; event.set = 0; UiXlibGraphics g; g.g.width = w->core.width; g.g.height = w->core.height; g.widget = w; g.display = dp; g.colormap = w->core.colormap; g.gc = drawingarea->gc; drawingarea->draw(&event, (UiGraphics*)&g, drawingarea->drawdata); } } void ui_drawingarea_getsize(UIWIDGET drawingarea, int *width, int *height) { } void ui_drawingarea_redraw(UIWIDGET drawingarea) { }