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

📄 basic.cpp

📁 wxGTK 是 wxWidgets 的 linux GTK+ (>2.2.3)版本。wxWidgets 是一个跨平台的 GUI 框架
💻 CPP
📖 第 1 页 / 共 5 页
字号:
void wxShape::ClearText(int regionId){  if (regionId == 0)  {    m_text.DeleteContents(true);    m_text.Clear();    m_text.DeleteContents(false);  }  wxNode *node = m_regions.Item(regionId);  if (!node)    return;  wxShapeRegion *region = (wxShapeRegion *)node->GetData();  region->ClearText();}void wxShape::ClearRegions(){  wxNode *node = m_regions.GetFirst();  while (node)  {    wxShapeRegion *region = (wxShapeRegion *)node->GetData();    wxNode *next = node->GetNext();    delete region;    delete node;    node = next;  }}void wxShape::AddRegion(wxShapeRegion *region){  m_regions.Append(region);}void wxShape::SetDefaultRegionSize(){  wxNode *node = m_regions.GetFirst();  if (!node) return;  wxShapeRegion *region = (wxShapeRegion *)node->GetData();  double w, h;  GetBoundingBoxMin(&w, &h);  region->SetSize(w, h);}bool wxShape::HitTest(double x, double y, int *attachment, double *distance){//  if (!sensitive)//    return false;  double width = 0.0, height = 0.0;  GetBoundingBoxMin(&width, &height);  if (fabs(width) < 4.0) width = 4.0;  if (fabs(height) < 4.0) height = 4.0;  width += (double)4.0; height += (double)4.0; // Allowance for inaccurate mousing  double left = (double)(m_xpos - (width/2.0));  double top = (double)(m_ypos - (height/2.0));  double right = (double)(m_xpos + (width/2.0));  double bottom = (double)(m_ypos + (height/2.0));  int nearest_attachment = 0;  // If within the bounding box, check the attachment points  // within the object.  if (x >= left && x <= right && y >= top && y <= bottom)  {    int n = GetNumberOfAttachments();    double nearest = 999999.0;    // GetAttachmentPosition[Edge] takes a logical attachment position,    // i.e. if it's rotated through 90%, position 0 is East-facing.    for (int i = 0; i < n; i++)    {      double xp, yp;      if (GetAttachmentPositionEdge(i, &xp, &yp))      {        double l = (double)sqrt(((xp - x) * (xp - x)) +                   ((yp - y) * (yp - y)));        if (l < nearest)        {          nearest = l;          nearest_attachment = i;        }      }    }    *attachment = nearest_attachment;    *distance = nearest;    return true;  }  else return false;}// Format a text string according to the region size, adding// strings with positions to region text liststatic bool GraphicsInSizeToContents = false; // Infinite recursion eliminationvoid wxShape::FormatText(wxDC& dc, const wxString& s, int i){  double w, h;  ClearText(i);  if (m_regions.GetCount() < 1)    return;  wxNode *node = m_regions.Item(i);  if (!node)    return;  wxShapeRegion *region = (wxShapeRegion *)node->GetData();  // region->SetText(s);  // don't set the formatted text yet, it will be done below  region->m_regionText = s;  dc.SetFont(* region->GetFont());  region->GetSize(&w, &h);  wxStringList *stringList = oglFormatText(dc, s, (w-2*m_textMarginX), (h-2*m_textMarginY), region->GetFormatMode());  node = (wxNode*)stringList->GetFirst();  while (node)  {    wxChar *s = (wxChar *)node->GetData();    wxShapeTextLine *line = new wxShapeTextLine(0.0, 0.0, s);    region->GetFormattedText().Append((wxObject *)line);    node = node->GetNext();  }  delete stringList;  double actualW = w;  double actualH = h;  // Don't try to resize an object with more than one image (this case should be dealt  // with by overriden handlers)  if ((region->GetFormatMode() & FORMAT_SIZE_TO_CONTENTS) &&      (region->GetFormattedText().GetCount() > 0) &&      (m_regions.GetCount() == 1) && !GraphicsInSizeToContents)  {    oglGetCentredTextExtent(dc, &(region->GetFormattedText()), m_xpos, m_ypos, w, h, &actualW, &actualH);    if ((actualW+2*m_textMarginX != w ) || (actualH+2*m_textMarginY != h))    {      // If we are a descendant of a composite, must make sure the composite gets      // resized properly      wxShape *topAncestor = GetTopAncestor();      if (topAncestor != this)      {        // Make sure we don't recurse infinitely        GraphicsInSizeToContents = true;        wxCompositeShape *composite = (wxCompositeShape *)topAncestor;        composite->Erase(dc);        SetSize(actualW+2*m_textMarginX, actualH+2*m_textMarginY);        Move(dc, m_xpos, m_ypos);        composite->CalculateSize();        if (composite->Selected())        {          composite->DeleteControlPoints(& dc);          composite->MakeControlPoints();          composite->MakeMandatoryControlPoints();        }        // Where infinite recursion might happen if we didn't stop it        composite->Draw(dc);        GraphicsInSizeToContents = false;      }      else      {        Erase(dc);        SetSize(actualW+2*m_textMarginX, actualH+2*m_textMarginY);        Move(dc, m_xpos, m_ypos);      }      SetSize(actualW+2*m_textMarginX, actualH+2*m_textMarginY);      Move(dc, m_xpos, m_ypos);      EraseContents(dc);    }  }  oglCentreText(dc, &(region->GetFormattedText()), m_xpos, m_ypos, actualW-2*m_textMarginX, actualH-2*m_textMarginY, region->GetFormatMode());  m_formatted = true;}void wxShape::Recentre(wxDC& dc){  double w, h;  GetBoundingBoxMin(&w, &h);  int noRegions = m_regions.GetCount();  for (int i = 0; i < noRegions; i++)  {    wxNode *node = m_regions.Item(i);    if (node)    {      wxShapeRegion *region = (wxShapeRegion *)node->GetData();      oglCentreText(dc, &(region->GetFormattedText()), m_xpos, m_ypos, w-2*m_textMarginX, h-2*m_textMarginY, region->GetFormatMode());    }  }}bool wxShape::GetPerimeterPoint(double WXUNUSED(x1), double WXUNUSED(y1),                                     double WXUNUSED(x2), double WXUNUSED(y2),                                     double *WXUNUSED(x3), double *WXUNUSED(y3)){  return false;}void wxShape::SetPen(const wxPen *the_pen){  m_pen = the_pen;}void wxShape::SetBrush(const wxBrush *the_brush){  m_brush = the_brush;}// Get the top-most (non-division) ancestor, or selfwxShape *wxShape::GetTopAncestor(){  if (!GetParent())    return this;  if (GetParent()->IsKindOf(CLASSINFO(wxDivisionShape)))    return this;  else return GetParent()->GetTopAncestor();}/* * Region functions * */void wxShape::SetFont(wxFont *the_font, int regionId){  m_font = the_font;  wxNode *node = m_regions.Item(regionId);  if (!node)    return;  wxShapeRegion *region = (wxShapeRegion *)node->GetData();  region->SetFont(the_font);}wxFont *wxShape::GetFont(int n) const{  wxNode *node = m_regions.Item(n);  if (!node)    return NULL;  wxShapeRegion *region = (wxShapeRegion *)node->GetData();  return region->GetFont();}void wxShape::SetFormatMode(int mode, int regionId){  wxNode *node = m_regions.Item(regionId);  if (!node)    return;  wxShapeRegion *region = (wxShapeRegion *)node->GetData();  region->SetFormatMode(mode);}int wxShape::GetFormatMode(int regionId) const{  wxNode *node = m_regions.Item(regionId);  if (!node)    return 0;  wxShapeRegion *region = (wxShapeRegion *)node->GetData();  return region->GetFormatMode();}void wxShape::SetTextColour(const wxString& the_colour, int regionId){  m_textColour = wxTheColourDatabase->Find(the_colour);  m_textColourName = the_colour;  wxNode *node = m_regions.Item(regionId);  if (!node)    return;  wxShapeRegion *region = (wxShapeRegion *)node->GetData();  region->SetColour(the_colour);}wxString wxShape::GetTextColour(int regionId) const{  wxNode *node = m_regions.Item(regionId);  if (!node)    return wxEmptyString;  wxShapeRegion *region = (wxShapeRegion *)node->GetData();  return region->GetColour();}void wxShape::SetRegionName(const wxString& name, int regionId){  wxNode *node = m_regions.Item(regionId);  if (!node)    return;  wxShapeRegion *region = (wxShapeRegion *)node->GetData();  region->SetName(name);}wxString wxShape::GetRegionName(int regionId){  wxNode *node = m_regions.Item(regionId);  if (!node)    return wxEmptyString;  wxShapeRegion *region = (wxShapeRegion *)node->GetData();  return region->GetName();}int wxShape::GetRegionId(const wxString& name){  wxNode *node = m_regions.GetFirst();  int i = 0;  while (node)  {    wxShapeRegion *region = (wxShapeRegion *)node->GetData();    if (region->GetName() == name)      return i;    node = node->GetNext();    i ++;  }  return -1;}// Name all m_regions in all subimages recursively.void wxShape::NameRegions(const wxString& parentName){  int n = GetNumberOfTextRegions();  wxString buff;  for (int i = 0; i < n; i++)  {    if (parentName.Length() > 0)      buff << parentName << wxT(".") << i;    else      buff << i;    SetRegionName(buff, i);  }  wxNode *node = m_children.GetFirst();  int j = 0;  while (node)  {    buff.Empty();    wxShape *child = (wxShape *)node->GetData();    if (parentName.Length() > 0)      buff << parentName << wxT(".") << j;    else      buff << j;    child->NameRegions(buff);    node = node->GetNext();    j ++;  }}// Get a region by name, possibly looking recursively into composites.wxShape *wxShape::FindRegion(const wxString& name, int *regionId){  int id = GetRegionId(name);  if (id > -1)  {    *regionId = id;    return this;  }  wxNode *node = m_children.GetFirst();  while (node)  {    wxShape *child = (wxShape *)node->GetData();    wxShape *actualImage = child->FindRegion(name, regionId);    if (actualImage)      return actualImage;    node = node->GetNext();  }  return NULL;}// Finds all region names for this image (composite or simple).// Supply empty string list.void wxShape::FindRegionNames(wxStringList& list){  int n = GetNumberOfTextRegions();  for (int i = 0; i < n; i++)  {    wxString name(GetRegionName(i));    list.Add(name);  }  wxNode *node = m_children.GetFirst();  while (node)  {    wxShape *child = (wxShape *)node->GetData();    child->FindRegionNames(list);    node = node->GetNext();  }}void wxShape::AssignNewIds(){//  if (m_id == 0)  m_id = wxNewId();  wxNode *node = m_children.GetFirst();  while (node)  {    wxShape *child = (wxShape *)node->GetData();    child->AssignNewIds();    node = node->GetNext();  }}void wxShape::OnDraw(wxDC& WXUNUSED(dc)){}void wxShape::OnMoveLinks(wxDC& dc){  // Want to set the ends of all attached links  // to point to/from this object  wxNode *current = m_lines.GetFirst();  while (current)  {    wxLineShape *line = (wxLineShape *)current->GetData();    line->GetEventHandler()->OnMoveLink(dc);    current = current->GetNext();  }}void wxShape::OnDrawContents(wxDC& dc){  double bound_x, bound_y;  GetBoundingBoxMin(&bound_x, &bound_y);    if (m_regions.GetCount() < 1) return;    if (m_pen) dc.SetPen(* m_pen);    wxShapeRegion *region = (wxShapeRegion *)m_regions.GetFirst()->GetData();    if (region->GetFont()) dc.SetFont(* region->GetFont());    dc.SetTextForeground(region->GetActualColourObject());    dc.SetBackgroundMode(wxTRANSPARENT);    if (!m_formatted)    {      oglCentreText(dc, &(region->GetFormattedText()), m_xpos, m_ypos, bound_x-2*m_textMarginX, bound_y-2*m_textMarginY, region->GetFormatMode());      m_formatted = true;    }    if (!GetDisableLabel())    {      oglDrawFormattedText(dc, &(region->GetFormattedText()), m_xpos, m_ypos, bound_x-2*m_textMarginX, bound_y-2*m_textMarginY, region->GetFormatMode());    }}void wxShape::DrawContents(wxDC& dc){  GetEventHandler()->OnDrawContents(dc);}void wxShape::OnSize(double WXUNUSED(x), double WXUNUSED(y)){}bool wxShape::OnMovePre(wxDC& WXUNUSED(dc), double WXUNUSED(x), double WXUNUSED(y), double WXUNUSED(old_x), double WXUNUSED(old_y), bool WXUNUSED(display)){  return true;}void wxShape::OnMovePost(wxDC& WXUNUSED(dc), double WXUNUSED(x), double WXUNUSED(y), double WXUNUSED(old_x), double WXUNUSED(old_y), bool WXUNUSED(display)){}void wxShape::OnErase(wxDC& dc){  if (!m_visible)    return;  // Erase links  wxNode *current = m_lines.GetFirst();  while (current)  {    wxLineShape *line = (wxLineShape *)current->GetData();    line->GetEventHandler()->OnErase(dc);    current = current->GetNext();  }  GetEventHandler()->OnEraseContents(dc);}void wxShape::OnEraseContents(wxDC& dc){  if (!m_visible)    return;

⌨️ 快捷键说明

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