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

📄 symbols.cpp

📁 很牛的GUI源码wxWidgets-2.8.0.zip 可在多种平台下运行.
💻 CPP
字号:
/////////////////////////////////////////////////////////////////////////////// Name:        contrib/samples/ogl/studio/symbols.cpp// Purpose:     Implements the Studio symbol database// Author:      Julian Smart// Modified by:// Created:     12/07/98// RCS-ID:      $Id: symbols.cpp,v 1.12 2006/02/10 11:59:49 ABX Exp $// Copyright:   (c) Julian Smart// Licence:     wxWindows licence/////////////////////////////////////////////////////////////////////////////// For compilers that support precompilation, includes "wx.h".#include "wx/wxprec.h"#ifdef __BORLANDC__#pragma hdrstop#endif#ifndef WX_PRECOMP#include "wx/wx.h"#endif#include "wx/ogl/ogl.h" // base header of OGL, includes and adjusts wx/deprecated/setup.h#include "studio.h"#include "doc.h"#include "shapes.h"#include "view.h"#include "symbols.h"/* * csSymbol * Represents information about a symbol. */csSymbol::csSymbol(const wxString& name, wxShape* shape){    m_name = name;    m_shape = shape;    m_toolId = 0;}csSymbol::~csSymbol(){    delete m_shape;}/* * A table of all possible shapes. * We can use this to construct a palette, etc. */csSymbolDatabase::csSymbolDatabase(){    m_currentId = 800;}csSymbolDatabase::~csSymbolDatabase(){    ClearSymbols();}void csSymbolDatabase::AddSymbol(csSymbol* symbol){    symbol->SetToolId(m_currentId);    m_symbols.Append(symbol);    m_currentId ++;}void csSymbolDatabase::ClearSymbols(){    wxObjectList::compatibility_iterator node = m_symbols.GetFirst();    while (node)    {        csSymbol* symbol = (csSymbol*) node->GetData();        delete symbol;        node = node->GetNext();    }    m_symbols.Clear();}csSymbol* csSymbolDatabase::FindSymbol(const wxString& name) const{    wxObjectList::compatibility_iterator node = m_symbols.GetFirst();    while (node)    {        csSymbol* symbol = (csSymbol*) node->GetData();        if (symbol->GetName() == name)            return symbol;        node = node->GetNext();    }    return NULL;}csSymbol* csSymbolDatabase::FindSymbol(int toolId) const{    wxObjectList::compatibility_iterator node = m_symbols.GetFirst();    while (node)    {        csSymbol* symbol = (csSymbol*) node->GetData();        if (symbol->GetToolId() == toolId)            return symbol;        node = node->GetNext();    }    return NULL;}// Add symbols to databasevoid csApp::InitSymbols(){    m_symbolDatabase = new csSymbolDatabase;    wxShape* shape = new csCircleShape();    shape->AssignNewIds();    shape->SetEventHandler(new csEvtHandler(shape, shape, wxEmptyString));    m_symbolDatabase->AddSymbol(new csSymbol(_T("Circle"), shape));    shape = new csCircleShadowShape();    shape->AssignNewIds();    shape->SetEventHandler(new csEvtHandler(shape, shape, wxEmptyString));    m_symbolDatabase->AddSymbol(new csSymbol(_T("Circle shadow"), shape));    shape = new csThinRectangleShape();    shape->AssignNewIds();    shape->SetEventHandler(new csEvtHandler(shape, shape, wxEmptyString));    m_symbolDatabase->AddSymbol(new csSymbol(_T("Thin Rectangle"), shape));    shape = new csWideRectangleShape();    shape->AssignNewIds();    shape->SetEventHandler(new csEvtHandler(shape, shape, wxEmptyString));    m_symbolDatabase->AddSymbol(new csSymbol(_T("Wide Rectangle"), shape));    shape = new csSemiCircleShape();    shape->AssignNewIds();    shape->SetEventHandler(new csEvtHandler(shape, shape, wxEmptyString));    m_symbolDatabase->AddSymbol(new csSymbol(_T("SemiCircle"), shape));    shape = new csTriangleShape();    shape->AssignNewIds();    shape->SetEventHandler(new csEvtHandler(shape, shape, wxEmptyString));    m_symbolDatabase->AddSymbol(new csSymbol(_T("Triangle"), shape));    shape = new csOctagonShape();    shape->AssignNewIds();    shape->SetEventHandler(new csEvtHandler(shape, shape, wxEmptyString));    m_symbolDatabase->AddSymbol(new csSymbol(_T("Octagon"), shape));    shape = new csGroupShape();    shape->AssignNewIds();    shape->SetEventHandler(new csEvtHandler(shape, shape, wxEmptyString));    m_symbolDatabase->AddSymbol(new csSymbol(_T("Group"), shape));}wxBitmap* csSymbolDatabase::CreateToolBitmap(csSymbol* symbol, const wxSize& toolSize){    symbol->GetShape()->Recompute();    wxBitmap *newBitmap = new wxBitmap(toolSize.x, toolSize.y);    // Test code#if 0    wxMemoryDC memDC;    memDC.SelectObject(*newBitmap);    memDC.SetPen(* wxBLACK_PEN);    memDC.SetBrush(* wxWHITE_BRUSH);    memDC.SetBackground(wxBrush(wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE), wxSOLID));    memDC.SetLogicalFunction(wxCOPY);    memDC.Clear();    memDC.DrawLine(0, 0, toolSize.x, toolSize.y);    memDC.DrawLine(0, toolSize.y, toolSize.x, 0);    memDC.SelectObject(wxNullBitmap);#endif#if 1    wxMemoryDC memDC;    double height, width, maxSize;    symbol->GetShape()->GetBoundingBoxMax(&width, &height);    if (height > width)        maxSize = height;    else        maxSize = width;    double borderMargin = 4.0;    double scaleFactor = (double)(toolSize.x / (maxSize + 2*borderMargin));    double centreX = (double)((toolSize.x/scaleFactor)/2.0)-1;    double centreY = centreX;    memDC.SelectObject(*newBitmap);    memDC.SetUserScale(scaleFactor, scaleFactor);    memDC.SetBackground(wxBrush(wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE), wxSOLID));    memDC.Clear();    symbol->GetShape()->Show(true);    symbol->GetShape()->Move(memDC, centreX, centreY);    memDC.SelectObject(wxNullBitmap);#endif    return newBitmap;}

⌨️ 快捷键说明

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