window.cpp
来自「CS架构的多平台的GUI系统」· C++ 代码 · 共 147 行
CPP
147 行
/*************************************************************************** begin : Fri Sep 24 2004 copyright : (C) 2004 - 2005 by Alper Akcan email : distchx@yahoo.com ***************************************************************************//*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU Lesser General Public License as * * published by the Free Software Foundation; either version 2.1 of the * * License, or (at your option) any later version. * * * ***************************************************************************/#include "../lib/xynth_.h"#include "widget.h"void SWindow::windowSetTitle (char *fmt, ...){ int n; char *buf; va_list ap; int size = 1; buf = (char *) s_malloc(sizeof(char) * size); while (1) { va_start(ap, fmt); n = vsnprintf(buf, size, fmt, ap); va_end(ap); if ((n > -1) && (n < size)) { break; } if (n > -1) { size = n + 1; } else { size *= 2; } buf = (char *) s_realloc(buf, size); } s_window_set_title(objectWindow, buf); s_free(buf);}void SWindow::windowFormDraw (void){ s_window_form_draw(objectWindow);}void SWindow::windowShow (void){ s_window_show(objectWindow);}void SWindow::windowSetCoor (int x, int y, int w, int h, int with_form){ s_window_set_coor(objectWindow, (with_form & NO_FORM) ? NO_FORM : 0, x, y, w, h);}void SWindow::windowSetResizeable (int resizeable){ s_window_set_resizeable(objectWindow, resizeable);}void SWindow::windowMain (void){ s_client_main(objectWindow);}void SWindow::windowAtExitCallback (s_window_t *window){ SWindow *win; win = (SWindow *) window->client->user_data; win->windowAtExit(window);}void SWindow::windowAtEventCallback (s_window_t *window, s_event_t *event){ SWindow *win; win = (SWindow *) window->client->user_data; win->windowAtEvent(window, event);}void SWindow::windowAtExit (s_window_t *window){ delete objectChild;}void SWindow::windowAtEvent (s_window_t *window, s_event_t *event){ switch (event->type & EVENT_MASK) { case EXPOSE_EVENT: if ((event->expose->change & (EXPOSE_CHNGW | EXPOSE_CHNGH)) || (objectWindow->surface->vbuf == NULL)) { objectWindow->surface->width = objectWindow->surface->buf.w; objectWindow->surface->height = objectWindow->surface->buf.h; objectWindow->surface->vbuf = (char *) s_realloc(objectWindow->surface->vbuf, objectWindow->surface->width * objectWindow->surface->height * objectWindow->surface->bytesperpixel); geometry(0, 0, objectWindow->surface->width, objectWindow->surface->height); objectWindow->surface->mode = SURFACE_VIRTUAL; draw(); objectWindow->surface->mode = (S_SURFACE_MODE) (SURFACE_VIRTUAL | SURFACE_REAL); } break; }}void SWindow::objectDraw (void){ objectFillBox(0, 0, objectWindow->surface->width, objectWindow->surface->height, objectRGBColor(220, 220, 220));}void SWindow::objectGeometry (int x, int y, int w, int h){ objectSetRectBuffer(x, y, w, h); objectSetRectContents(x + 1, y + 1, w - 2, h - 2); if ((w != objectWindow->surface->width) || (h != objectWindow->surface->height)) { windowSetCoor(objectWindow->surface->buf.x, objectWindow->surface->buf.y, w, h); }}SWindow::SWindow (S_WINDOW type, s_window_t *parent) : SObject(){ s_client_init(&objectWindow); s_window_new(objectWindow, type, parent); s_client_atexit(objectWindow, windowAtExitCallback); s_client_atevent(objectWindow, windowAtEventCallback); objectWindow->client->user_data = this; s_free(objectWindow->surface->vbuf); objectWindow->surface->vbuf = NULL;}SWindow::~SWindow (void){}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?