⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 layout.cpp

📁 CS架构的多平台的GUI系统
💻 CPP
字号:
/***************************************************************************    begin                : Fri Oct 1 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 SLayoutCell::objectDraw (void){	objectFillBox(0, 0, objectRectBuffer.rectW, objectRectBuffer.rectH, objectRGBColor(220, 220, 220));}void SLayoutCell::objectGeometry (int x, int y, int w, int h){	objectSetRectBuffer(x, y, w, h);	objectSetRectContents(x, y, w, h);}SLayoutCell::SLayoutCell (void) : SObject(){}SLayoutCell::~SLayoutCell (void){	delete layoutCellObject;}void SLayout::layoutSetColSpacing (int spacing){	if (spacing >= 0) {		layoutColSpacing = spacing;	}}void SLayout::layoutSetRowSpacing (int spacing){	if (spacing >= 0) {		layoutRowSpacing = spacing;	}}void SLayout::layoutInsertObject (SObject *object, int row, int col){	layoutCells[row][col].layoutCellObject = object;	layoutCells[row][col].layoutCellObject->objectWindow = objectWindow;	layoutCells[row][col].layoutCellObject->objectSetParent(&layoutCells[row][col]);	layoutCells[row][col].layoutCellObject->objectSetObjectWindow(objectWindow);}void SLayout::objectDraw (void){	int lr;	int lc;	S_SURFACE_MODE mode;	mode = objectWindow->surface->mode;	objectWindow->surface->mode = SURFACE_VIRTUAL;	objectFillBox(0, 0, objectRectBuffer.rectW, objectRectBuffer.rectH, objectRGBColor(220, 220, 220));        lr = layoutRows;	while (lr--) {		lc = layoutCols;		while (lc--) {			layoutCells[lr][lc].draw();		}	}	objectWindow->surface->mode = mode;	expose(0, 0, objectRectBuffer.rectW, objectRectBuffer.rectH);}void SLayout::objectGeometry (int x, int y, int w, int h){	int c;	int r;	int w_;	int h_;	int lx;	int ly;	int lw;	int lh;	double lhf;	double lwf;		w_ = w - ((layoutCols - 1) * layoutColSpacing);	h_ = h - ((layoutRows - 1) * layoutRowSpacing);		objectSetRectBuffer(x, y, w, h);	objectSetRectContents(x, y, w, h);	lx = x;	lwf = 0;	for (c = 0; c < layoutCols; c++) {		ly = y;		lhf = 0;		lw = (int) ((double) w_ * layoutColsWeight[c]);		lwf += (((double) w_ * layoutColsWeight[c]) - (double) lw);		if (lwf >= 0.999999) {			lw++;			lwf -= 1.0;		}		for (r = 0; r < layoutRows; r++) {			lh = (int) ((double) h_ * layoutRowsWeight[r]);			lhf += (((double) h_ * layoutRowsWeight[r]) - (double) lh);			if (lhf >= 0.999999) {				lh++;				lhf -= 1.0;			}			layoutCells[r][c].geometry(lx, ly, lw, lh);			if ((layoutCells[r][c].objectRectBuffer.rectW > lw) ||			    (layoutCells[r][c].objectRectBuffer.rectH > lh)) {				w += (layoutCells[r][c].objectRectBuffer.rectW - lw); 				h += (layoutCells[r][c].objectRectBuffer.rectH - lh); 				geometry(x, y, w, h);				return;			}			ly = ly + lh + layoutRowSpacing;		}		lx = lx + lw + layoutColSpacing;	}}void SLayout::objectSetObjectWindow (s_window_t *window){	int rows = layoutRows;	int cols = layoutCols;	while (rows--) {		cols = layoutCols;		while (cols--) {			layoutCells[rows][cols].objectWindow = window;		}	}}SLayout::SLayout (SObject *parent, int rows, int cols) : SObject(parent){	layoutRows = rows;	layoutCols = cols;		layoutRowsWeight = new double[layoutRows];	while (rows--) {		layoutRowsWeight[rows] = 1.0 / layoutRows;	}	layoutColsWeight = new double[layoutCols];	while (cols--) {		layoutColsWeight[cols] = 1.0 / layoutCols;	}		layoutCells = new SLayoutCell*[layoutRows];	rows = layoutRows;	while (rows--) {		layoutCells[rows] = new SLayoutCell[layoutCols];		cols = layoutCols;		while (cols--) {			layoutCells[rows][cols].objectWindow = objectWindow;		}	}}SLayout::~SLayout (void){	delete[] layoutRowsWeight;	delete[] layoutColsWeight;	while (layoutRows--) {		delete[] layoutCells[layoutRows];	}	delete[] layoutCells;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -