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

📄 basic.cpp

📁 wxGTK 是 wxWidgets 的 linux GTK+ (>2.2.3)版本。wxWidgets 是一个跨平台的 GUI 框架
💻 CPP
📖 第 1 页 / 共 5 页
字号:
/////////////////////////////////////////////////////////////////////////////// Name:        basic.cpp// Purpose:     Basic OGL classes// Author:      Julian Smart// Modified by:// Created:     12/07/98// RCS-ID:      $Id: basic.cpp,v 1.29 2006/04/18 22:26:26 PC 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#if wxUSE_PROLOGIO#include "wx/deprecated/wxexpr.h"#endif#ifdef new#undef new#endif#include <stdio.h>#include <ctype.h>#include "wx/ogl/ogl.h"// Control point types// Rectangle and most other shapes#define CONTROL_POINT_VERTICAL   1#define CONTROL_POINT_HORIZONTAL 2#define CONTROL_POINT_DIAGONAL   3// Line#define CONTROL_POINT_ENDPOINT_TO 4#define CONTROL_POINT_ENDPOINT_FROM 5#define CONTROL_POINT_LINE       6IMPLEMENT_DYNAMIC_CLASS(wxShapeTextLine, wxObject)IMPLEMENT_DYNAMIC_CLASS(wxAttachmentPoint, wxObject)wxShapeTextLine::wxShapeTextLine(double the_x, double the_y, const wxString& the_line){  m_x = the_x; m_y = the_y; m_line = the_line;}wxShapeTextLine::~wxShapeTextLine(){}IMPLEMENT_ABSTRACT_CLASS(wxShapeEvtHandler, wxObject)wxShapeEvtHandler::wxShapeEvtHandler(wxShapeEvtHandler *prev, wxShape *shape){  m_previousHandler = prev;  m_handlerShape = shape;}wxShapeEvtHandler::~wxShapeEvtHandler(){}// Creates a copy of this event handler.wxShapeEvtHandler* wxShapeEvtHandler::CreateNewCopy(){  wxShapeEvtHandler* newObject = (wxShapeEvtHandler*) GetClassInfo()->CreateObject();  wxASSERT( (newObject != NULL) );  wxASSERT( (newObject->IsKindOf(CLASSINFO(wxShapeEvtHandler))) );  newObject->m_previousHandler = newObject;  CopyData(*newObject);  return newObject;}void wxShapeEvtHandler::OnDelete(){  if (this != GetShape())    delete this;}void wxShapeEvtHandler::OnDraw(wxDC& dc){  if (m_previousHandler)    m_previousHandler->OnDraw(dc);}void wxShapeEvtHandler::OnMoveLinks(wxDC& dc){  if (m_previousHandler)    m_previousHandler->OnMoveLinks(dc);}void wxShapeEvtHandler::OnMoveLink(wxDC& dc, bool moveControlPoints){  if (m_previousHandler)    m_previousHandler->OnMoveLink(dc, moveControlPoints);}void wxShapeEvtHandler::OnDrawContents(wxDC& dc){  if (m_previousHandler)    m_previousHandler->OnDrawContents(dc);}void wxShapeEvtHandler::OnDrawBranches(wxDC& dc, bool erase){  if (m_previousHandler)    m_previousHandler->OnDrawBranches(dc, erase);}void wxShapeEvtHandler::OnSize(double x, double y){  if (m_previousHandler)    m_previousHandler->OnSize(x, y);}bool wxShapeEvtHandler::OnMovePre(wxDC& dc, double x, double y, double old_x, double old_y, bool display){  if (m_previousHandler)    return m_previousHandler->OnMovePre(dc, x, y, old_x, old_y, display);  else    return true;}void wxShapeEvtHandler::OnMovePost(wxDC& dc, double x, double y, double old_x, double old_y, bool display){  if (m_previousHandler)    m_previousHandler->OnMovePost(dc, x, y, old_x, old_y, display);}void wxShapeEvtHandler::OnErase(wxDC& dc){  if (m_previousHandler)    m_previousHandler->OnErase(dc);}void wxShapeEvtHandler::OnEraseContents(wxDC& dc){  if (m_previousHandler)    m_previousHandler->OnEraseContents(dc);}void wxShapeEvtHandler::OnHighlight(wxDC& dc){  if (m_previousHandler)    m_previousHandler->OnHighlight(dc);}void wxShapeEvtHandler::OnLeftClick(double x, double y, int keys, int attachment){  if (m_previousHandler)    m_previousHandler->OnLeftClick(x, y, keys, attachment);}void wxShapeEvtHandler::OnLeftDoubleClick(double x, double y, int keys, int attachment){  if (m_previousHandler)    m_previousHandler->OnLeftDoubleClick(x, y, keys, attachment);}void wxShapeEvtHandler::OnRightClick(double x, double y, int keys, int attachment){  if (m_previousHandler)    m_previousHandler->OnRightClick(x, y, keys, attachment);}void wxShapeEvtHandler::OnDragLeft(bool draw, double x, double y, int keys, int attachment){  if (m_previousHandler)    m_previousHandler->OnDragLeft(draw, x, y, keys, attachment);}void wxShapeEvtHandler::OnBeginDragLeft(double x, double y, int keys, int attachment){  if (m_previousHandler)    m_previousHandler->OnBeginDragLeft(x, y, keys, attachment);}void wxShapeEvtHandler::OnEndDragLeft(double x, double y, int keys, int attachment){  if (m_previousHandler)    m_previousHandler->OnEndDragLeft(x, y, keys, attachment);}void wxShapeEvtHandler::OnDragRight(bool draw, double x, double y, int keys, int attachment){  if (m_previousHandler)    m_previousHandler->OnDragRight(draw, x, y, keys, attachment);}void wxShapeEvtHandler::OnBeginDragRight(double x, double y, int keys, int attachment){  if (m_previousHandler)    m_previousHandler->OnBeginDragRight(x, y, keys, attachment);}void wxShapeEvtHandler::OnEndDragRight(double x, double y, int keys, int attachment){  if (m_previousHandler)    m_previousHandler->OnEndDragRight(x, y, keys, attachment);}// Control points ('handles') redirect control to the actual shape, to make it easier// to override sizing behaviour.void wxShapeEvtHandler::OnSizingDragLeft(wxControlPoint* pt, bool draw, double x, double y, int keys, int attachment){  if (m_previousHandler)    m_previousHandler->OnSizingDragLeft(pt, draw, x, y, keys, attachment);}void wxShapeEvtHandler::OnSizingBeginDragLeft(wxControlPoint* pt, double x, double y, int keys, int attachment){  if (m_previousHandler)    m_previousHandler->OnSizingBeginDragLeft(pt, x, y, keys, attachment);}void wxShapeEvtHandler::OnSizingEndDragLeft(wxControlPoint* pt, double x, double y, int keys, int attachment){  if (m_previousHandler)    m_previousHandler->OnSizingEndDragLeft(pt, x, y, keys, attachment);}void wxShapeEvtHandler::OnDrawOutline(wxDC& dc, double x, double y, double w, double h){  if (m_previousHandler)    m_previousHandler->OnDrawOutline(dc, x, y, w, h);}void wxShapeEvtHandler::OnDrawControlPoints(wxDC& dc){  if (m_previousHandler)    m_previousHandler->OnDrawControlPoints(dc);}void wxShapeEvtHandler::OnEraseControlPoints(wxDC& dc){  if (m_previousHandler)    m_previousHandler->OnEraseControlPoints(dc);}// Can override this to prevent or intercept line reordering.void wxShapeEvtHandler::OnChangeAttachment(int attachment, wxLineShape* line, wxList& ordering){  if (m_previousHandler)    m_previousHandler->OnChangeAttachment(attachment, line, ordering);}IMPLEMENT_ABSTRACT_CLASS(wxShape, wxShapeEvtHandler)wxShape::wxShape(wxShapeCanvas *can){  m_eventHandler = this;  SetShape(this);  m_id = 0;  m_formatted = false;  m_canvas = can;  m_xpos = 0.0; m_ypos = 0.0;  m_pen = g_oglBlackPen;  m_brush = wxWHITE_BRUSH;  m_font = g_oglNormalFont;  m_textColour = wxT("BLACK");  m_textColourName = wxT("BLACK");  m_visible = false;  m_selected = false;  m_attachmentMode = ATTACHMENT_MODE_NONE;  m_spaceAttachments = true;  m_disableLabel = false;  m_fixedWidth = false;  m_fixedHeight = false;  m_drawHandles = true;  m_sensitivity = OP_ALL;  m_draggable = true;  m_parent = NULL;  m_formatMode = FORMAT_CENTRE_HORIZ | FORMAT_CENTRE_VERT;  m_shadowMode = SHADOW_NONE;  m_shadowOffsetX = 6;  m_shadowOffsetY = 6;  m_shadowBrush = wxBLACK_BRUSH;  m_textMarginX = 5;  m_textMarginY = 5;  m_regionName = wxT("0");  m_centreResize = true;  m_maintainAspectRatio = false;  m_highlighted = false;  m_rotation = 0.0;  m_branchNeckLength = 10;  m_branchStemLength = 10;  m_branchSpacing = 10;  m_branchStyle = BRANCHING_ATTACHMENT_NORMAL;  // Set up a default region. Much of the above will be put into  // the region eventually (the duplication is for compatibility)  wxShapeRegion *region = new wxShapeRegion;  m_regions.Append(region);  region->SetName(wxT("0"));  region->SetFont(g_oglNormalFont);  region->SetFormatMode(FORMAT_CENTRE_HORIZ | FORMAT_CENTRE_VERT);  region->SetColour(wxT("BLACK"));}wxShape::~wxShape(){  if (m_parent)    m_parent->GetChildren().DeleteObject(this);  ClearText();  ClearRegions();  ClearAttachments();  if (m_canvas)    m_canvas->RemoveShape(this);  GetEventHandler()->OnDelete();}void wxShape::SetHighlight(bool hi, bool recurse){  m_highlighted = hi;  if (recurse)  {    wxNode *node = m_children.GetFirst();    while (node)    {      wxShape *child = (wxShape *)node->GetData();      child->SetHighlight(hi, recurse);      node = node->GetNext();    }  }}void wxShape::SetSensitivityFilter(int sens, bool recursive){  if (sens & OP_DRAG_LEFT)    m_draggable = true;  else    m_draggable = false;  m_sensitivity = sens;  if (recursive)  {    wxNode *node = m_children.GetFirst();    while (node)    {      wxShape *obj = (wxShape *)node->GetData();      obj->SetSensitivityFilter(sens, true);      node = node->GetNext();    }  }}void wxShape::SetDraggable(bool drag, bool recursive){  m_draggable = drag;  if (m_draggable)    m_sensitivity |= OP_DRAG_LEFT;  else    if (m_sensitivity & OP_DRAG_LEFT)      m_sensitivity = m_sensitivity - OP_DRAG_LEFT;  if (recursive)  {    wxNode *node = m_children.GetFirst();    while (node)    {      wxShape *obj = (wxShape *)node->GetData();      obj->SetDraggable(drag, true);      node = node->GetNext();    }  }}void wxShape::SetDrawHandles(bool drawH){  m_drawHandles = drawH;  wxNode *node = m_children.GetFirst();  while (node)  {    wxShape *obj = (wxShape *)node->GetData();    obj->SetDrawHandles(drawH);    node = node->GetNext();  }}void wxShape::SetShadowMode(int mode, bool redraw){  if (redraw && GetCanvas())  {    wxClientDC dc(GetCanvas());    GetCanvas()->PrepareDC(dc);    Erase(dc);    m_shadowMode = mode;    Draw(dc);  }  else  {    m_shadowMode = mode;  }}void wxShape::SetCanvas(wxShapeCanvas *theCanvas){  m_canvas = theCanvas;  wxNode *node = m_children.GetFirst();  while (node)  {    wxShape *child = (wxShape *)node->GetData();    child->SetCanvas(theCanvas);    node = node->GetNext();  }}void wxShape::AddToCanvas(wxShapeCanvas *theCanvas, wxShape *addAfter){  theCanvas->AddShape(this, addAfter);  wxNode *node = m_children.GetFirst();  wxShape *lastImage = this;  while (node)  {    wxShape *object = (wxShape *)node->GetData();    object->AddToCanvas(theCanvas, lastImage);    lastImage = object;    node = node->GetNext();  }}// Insert at front of canvasvoid wxShape::InsertInCanvas(wxShapeCanvas *theCanvas){  theCanvas->InsertShape(this);  wxNode *node = m_children.GetFirst();  wxShape *lastImage = this;  while (node)  {    wxShape *object = (wxShape *)node->GetData();    object->AddToCanvas(theCanvas, lastImage);    lastImage = object;    node = node->GetNext();  }}void wxShape::RemoveFromCanvas(wxShapeCanvas *theCanvas){  if (Selected())    Select(false);  theCanvas->RemoveShape(this);  wxNode *node = m_children.GetFirst();  while (node)  {    wxShape *object = (wxShape *)node->GetData();    object->RemoveFromCanvas(theCanvas);    node = node->GetNext();  }}void wxShape::ClearAttachments(){  wxNode *node = m_attachmentPoints.GetFirst();  while (node)  {    wxAttachmentPoint *point = (wxAttachmentPoint *)node->GetData();    delete point;    node = node->GetNext();  }  m_attachmentPoints.Clear();}

⌨️ 快捷键说明

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