frame.cpp
来自「CS架构的多平台的GUI系统」· C++ 代码 · 共 241 行
CPP
241 行
/*************************************************************************** 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 SFrame::frameRectContents (void){ switch (frameStyle & SFrame::MShape) { case SFrame::NoFrame: case SFrame::MenuBarPanel: case SFrame::ToolBarPanel: frameLineWidth = 1; frameMidLineWidth = 0; break; case SFrame::Panel: case SFrame::StyledPanel: frameMidLineWidth = 0; break; case SFrame::WinPanel: case SFrame::PopupPanel: case SFrame::LineEditPanel: case SFrame::TabWidgetPanel: frameLineWidth = 2; frameMidLineWidth = 0; break; case SFrame::Box: case SFrame::HLine: case SFrame::VLine: case SFrame::GroupBoxPanel: if ((frameStyle & SFrame::MShadow) == SFrame::Plain) { frameMidLineWidth = 0; } break; } switch (frameStyle & SFrame::MShape) { case SFrame::NoFrame: objectSetRectContents(objectRectBuffer.rectX, objectRectBuffer.rectY, objectRectBuffer.rectW, objectRectBuffer.rectH); return; case SFrame::Box: case SFrame::HLine: case SFrame::VLine: case SFrame::GroupBoxPanel: switch (frameStyle & SFrame::MShadow) { case SFrame::Plain:sbox_plain: objectSetRectContents(objectRectBuffer.rectX + frameLineWidth, objectRectBuffer.rectY + frameLineWidth, objectRectBuffer.rectW - (frameLineWidth * 2), objectRectBuffer.rectH - (frameLineWidth * 2)); break; case SFrame::Raised: case SFrame::Sunken: objectSetRectContents(objectRectBuffer.rectX + (frameLineWidth * 2) + (frameMidLineWidth), objectRectBuffer.rectY + (frameLineWidth * 2) + (frameMidLineWidth), objectRectBuffer.rectW - (frameLineWidth * 4) - (frameMidLineWidth * 2), objectRectBuffer.rectH - (frameLineWidth * 4) - (frameMidLineWidth * 2)); break; } break; case SFrame::Panel: case SFrame::WinPanel: case SFrame::PopupPanel: case SFrame::StyledPanel: case SFrame::MenuBarPanel: case SFrame::ToolBarPanel: case SFrame::LineEditPanel: case SFrame::TabWidgetPanel: goto sbox_plain; break; }}void SFrame::frameSetLineWidth (int linewidth){ frameLineWidth = linewidth; frameRectContents();}void SFrame::frameSetMidLineWidth (int midlinewidth){ frameMidLineWidth = midlinewidth; frameRectContents();}void SFrame::frameSetStyle (int style){ frameStyle = style & (SFrame::MShape | SFrame::MShadow); frameRectContents();}void SFrame::objectDraw (void){ int i; int j; int c[4]; switch (frameStyle & SFrame::MShape) { case SFrame::NoFrame: return; case SFrame::Box: case SFrame::GroupBoxPanel: switch (frameStyle & SFrame::MShadow) { case SFrame::Plain:sbox_plain: objectFillBox(0, 0, objectRectBuffer.rectW, objectRectBuffer.rectH, objectRGBColor(0, 0, 0)); break; case SFrame::Raised: c[0] = objectRGBColor(96, 96, 96); c[1] = objectRGBColor(128, 128, 128); c[2] = objectRGBColor(255, 255, 255);sbox_raised: for (i = 0; i < frameLineWidth; i++) { objectFillBox(i, i, objectRectBuffer.rectW - (i * 2), objectRectBuffer.rectH - (i * 2), c[2]); objectFillBox(i + 1, i + 1, objectRectBuffer.rectW - (i * 2) - 1, objectRectBuffer.rectH - (i * 2) - 1, c[0]); } objectFillBox(i, i, objectRectBuffer.rectW - (i * 2), objectRectBuffer.rectH - (i * 2), c[1]); for (j = 0; j < frameLineWidth; j++) { objectFillBox(j + i + frameMidLineWidth, j + i + frameMidLineWidth, objectRectBuffer.rectW - ((j + i + frameMidLineWidth) * 2), objectRectBuffer.rectH - ((j + i + frameMidLineWidth) * 2), c[0]); objectFillBox(j + 1 + i + frameMidLineWidth, j + 1 + i + frameMidLineWidth, objectRectBuffer.rectW - ((j + i + frameMidLineWidth) * 2) - 1, objectRectBuffer.rectH - ((j + i + frameMidLineWidth) * 2) - 1, c[2]); } break; case SFrame::Sunken: c[2] = objectRGBColor(96, 96, 96); c[1] = objectRGBColor(128, 128, 128); c[0] = objectRGBColor(255, 255, 255); goto sbox_raised; break; } break; case SFrame::Panel: case SFrame::StyledPanel: switch (frameStyle & SFrame::MShadow) { case SFrame::Plain: goto sbox_plain; break; case SFrame::Raised: c[0] = objectRGBColor(96, 96, 96); c[1] = objectRGBColor(255, 255, 255);spanel_raised: for (i = 0; i < frameLineWidth; i++) { objectFillBox(i, i, objectRectBuffer.rectW - (i * 2), objectRectBuffer.rectH - (i * 2), c[0]); objectFillBox(i, i, objectRectBuffer.rectW - (i * 2) - 1, objectRectBuffer.rectH - (i * 2) - 1, c[1]); } break; case SFrame::Sunken: c[1] = objectRGBColor(96, 96, 96); c[0] = objectRGBColor(255, 255, 255); goto spanel_raised; break; } break; case SFrame::WinPanel: case SFrame::PopupPanel: switch (frameStyle & SFrame::MShadow) { case SFrame::Plain: goto sbox_plain; break; case SFrame::Raised:swinpanel_raised: c[0] = objectRGBColor(0, 0, 0); c[1] = objectRGBColor(96, 96, 96); c[2] = objectRGBColor(220, 220, 220); c[3] = objectRGBColor(255, 255, 255); objectFillBox(0, 0, objectRectBuffer.rectW, objectRectBuffer.rectH, c[0]); objectFillBox(0, 0, objectRectBuffer.rectW - 1, objectRectBuffer.rectH - 1, c[2]); objectFillBox(1, 1, objectRectBuffer.rectW - 2, objectRectBuffer.rectH - 2, c[1]); objectFillBox(1, 1, objectRectBuffer.rectW - 3, objectRectBuffer.rectH - 3, c[3]); break;swinpanel_sunken: case SFrame::Sunken: c[0] = objectRGBColor(0, 0, 0); c[1] = objectRGBColor(96, 96, 96); c[2] = objectRGBColor(220, 220, 220); objectFillBox(0, 0, objectRectBuffer.rectW, objectRectBuffer.rectH, c[1]); objectFillBox(1, 1, objectRectBuffer.rectW - 1, objectRectBuffer.rectH - 1, c[2]); objectFillBox(1, 1, objectRectBuffer.rectW - 2, objectRectBuffer.rectH - 2, c[0]); objectFillBox(2, 2, objectRectBuffer.rectW - 3, objectRectBuffer.rectH - 3, c[2]); break; } break; case SFrame::MenuBarPanel: objectFillBox(0, 0, objectRectBuffer.rectW, objectRectBuffer.rectH, objectRGBColor(220, 220, 220)); break; case SFrame::ToolBarPanel: c[0] = objectRGBColor(96, 96, 96); c[1] = objectRGBColor(255, 255, 255); objectFillBox(0, 0, objectRectBuffer.rectW, objectRectBuffer.rectH, c[0]); objectFillBox(0, 0, objectRectBuffer.rectW - 1, objectRectBuffer.rectH - 1, c[1]); break; case SFrame::LineEditPanel: case SFrame::TabWidgetPanel: switch (frameStyle & SFrame::MShadow) { case SFrame::Plain: case SFrame::Raised: goto swinpanel_raised; break; case SFrame::Sunken: goto swinpanel_sunken; break; } break; case SFrame::HLine: case SFrame::VLine: break; } objectFillBox(objectRectContents.rectX - objectRectBuffer.rectX, objectRectContents.rectY - objectRectBuffer.rectY, objectRectContents.rectW, objectRectContents.rectH, objectRGBColor(220, 220, 220));}void SFrame::objectGeometry (int x, int y, int w, int h){ objectSetRectBuffer(x, y, w, h); frameRectContents();}SFrame::SFrame (SObject *parent, int style) : SObject(parent){ frameStyle = style & (SFrame::MShape | SFrame::MShadow); frameLineWidth = 1; frameMidLineWidth = 0; frameRectContents();}SFrame::~SFrame (void){}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?