/** * Render the event in the bitmap */ void LinkEvent::Render(wxDC & dc, int x, int y, unsigned int width, gd::EventsEditorItemsAreas & areas, gd::EventsEditorSelection & selection, const gd::Platform & platform) { #if !defined(GD_NO_WX_GUI) gd::EventsRenderingHelper * renderingHelper = gd::EventsRenderingHelper::Get(); dc.SetBrush( wxBrush( wxColour( 255, 255, 255 ) ) ); dc.SetPen( wxPen( wxColour( 0, 0, 0 ), 1) ); wxRect rect(x+1, y, width-2, GetRenderedHeight(width, platform)-2); dc.DrawRectangle(rect); dc.DrawBitmap( gd::SkinHelper::GetIcon("events", 24), x+4, y + 1, true); dc.SetTextBackground( wxColour( 255, 255, 255 ) ); if ( !IsDisabled() ) dc.SetTextForeground( wxColour( 0, 0, 0 ) ); else dc.SetTextForeground( wxColour( 160, 160, 160 ) ); dc.SetFont(renderingHelper->GetNiceFont()); dc.DrawText( _("Link to ")+GetTarget(), x+32, y + 3 ); if ( GetIncludeConfig() == INCLUDE_BY_INDEX ) { wxRect textRect = dc.GetTextExtent(_("Link to ")+GetTarget()); dc.DrawText( _("Include only events ")+gd::String::From(GetIncludeStart()+1)+_(" to ")+gd::String::From(GetIncludeEnd()+1), x+textRect.GetWidth()+32+10, y + 5 ); } else if ( GetIncludeConfig() == INCLUDE_EVENTS_GROUP ) { wxRect textRect = dc.GetTextExtent(_("Link to ")+GetTarget()); dc.DrawText( _("Include only the events group named \"")+gd::String::From(GetEventsGroupName())+_("\""), x+textRect.GetWidth()+32+10, y + 5 ); } #endif }
/** * Render the event in the bitmap */ void LinkEvent::Render(wxDC & dc, int x, int y, unsigned int width, gd::EventsEditorItemsAreas & areas, gd::EventsEditorSelection & selection, const gd::Platform & platform) { #if !defined(GD_NO_WX_GUI) dc.SetBrush( wxBrush( wxColour( 255, 255, 255 ) ) ); dc.SetPen( wxPen( wxColour( 0, 0, 0 ), 1) ); wxRect rect(x+1, y, width, GetRenderedHeight(width, platform)-2); dc.DrawRectangle(rect); dc.DrawBitmap( gd::SkinHelper::GetIcon("events", 24), x+4, y + 1, true); dc.SetTextBackground( wxColour( 255, 255, 255 ) ); if ( !IsDisabled() ) dc.SetTextForeground( wxColour( 0, 0, 0 ) ); else dc.SetTextForeground( wxColour( 160, 160, 160 ) ); dc.SetFont( wxFont( 12, wxDEFAULT, wxNORMAL, wxNORMAL ) ); dc.DrawText( _("Link to ")+GetTarget(), x+32, y + 3 ); wxRect lien = dc.GetTextExtent(_("Link to ")+GetTarget()); dc.SetFont( wxFont( 10, wxDEFAULT, wxNORMAL, wxNORMAL ) ); if ( IncludeAllEvents() ) dc.DrawText( _("Include all events"), x+lien.GetWidth()+32+10, y + 5 ); else dc.DrawText( _("Include events ")+ToString(GetIncludeStart()+1)+_(" to ")+ToString(GetIncludeEnd()+1), x+lien.GetWidth()+32+10, y + 5 ); #endif }
static void DefaultDisplayNameFunction(struct MenuEntry* DrawnMenuEntry, struct MenuEntry* ActiveMenuEntry) { uint32_t TextWidth = GetRenderedWidth(DrawnMenuEntry->Name); if (TextWidth <= GCW0_SCREEN_WIDTH - 2) { bool IsActive = (DrawnMenuEntry == ActiveMenuEntry); uint16_t TextColor = IsActive ? COLOR_ACTIVE_TEXT : COLOR_INACTIVE_TEXT; uint16_t OutlineColor = IsActive ? COLOR_ACTIVE_OUTLINE : COLOR_INACTIVE_OUTLINE; print_string_outline(DrawnMenuEntry->Name, TextColor, OutlineColor, 1, GetRenderedHeight(" ") * (DrawnMenuEntry->Position + 2) + 1); } else ReGBA_Trace("W: Hid name '%s' from the menu due to it being too long", DrawnMenuEntry->Name); }
/** * Render the event in the bitmap */ void StandardEvent::Render(wxDC & dc, int x, int y, unsigned int width, gd::EventsEditorItemsAreas & areas, gd::EventsEditorSelection & selection, const gd::Platform & platform) { #if !defined(GD_NO_WX_GUI) gd::EventsRenderingHelper * renderingHelper = gd::EventsRenderingHelper::Get(); int border = renderingHelper->instructionsListBorder; //Draw event rectangle wxRect rect(x, y, renderingHelper->GetConditionsColumnWidth()+border, GetRenderedHeight(width, platform)); renderingHelper->DrawNiceRectangle(dc, rect); renderingHelper->DrawConditionsList(conditions, dc, x+border, y+border, renderingHelper->GetConditionsColumnWidth()-border, this, areas, selection, platform); renderingHelper->DrawActionsList(actions, dc, x+renderingHelper->GetConditionsColumnWidth()+border, y+border, width-renderingHelper->GetConditionsColumnWidth()-border*2, this, areas, selection, platform); //Make sure that Render is rendering an event with the same height as GetRenderedHeight : Use same values for border and similar calls to compute heights #endif }
/** * Render the event in the bitmap */ void GroupEvent::Render(wxDC & dc, int x, int y, unsigned int width, gd::EventsEditorItemsAreas & areas, gd::EventsEditorSelection & selection, const gd::Platform & platform) { #if !defined(GD_NO_WX_GUI) wxString groupTitle = name.empty() ? _("Untitled group") : wxString(name); wxColour backgroundColor = wxColour(colorR, colorG, colorB); wxColour textColor = colorR + colorG + colorB > 200*3 ? *wxBLACK : *wxWHITE; if (IsDisabled()) { backgroundColor.MakeDisabled(); textColor = wxColour(160, 160, 160); } dc.SetBrush(wxBrush(backgroundColor)); dc.SetPen(wxPen(backgroundColor.ChangeLightness(70))); wxRect rect(x+1, y, width-2, GetRenderedHeight(width, platform)-2); dc.DrawRectangle(rect); dc.SetTextBackground(backgroundColor); dc.SetTextForeground(textColor); dc.SetFont( wxFont( 12, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD ) ); dc.DrawText( groupTitle, x+5, y + 5 ); #endif }
static enum OpenDingux_Buttons GrabButtons(struct Menu* ActiveMenu, char* Lines[4]) { enum OpenDingux_Buttons Buttons; // Wait for the buttons that triggered the action to be released. while (GetPressedOpenDinguxButtons() != 0) { DefaultDisplayBackgroundFunction(ActiveMenu); SDL_Flip(OutputSurface); usleep(5000); // for platforms that don't sync their flips } // Wait until a button is pressed. while ((Buttons = GetPressedOpenDinguxButtons()) == 0) { DefaultDisplayBackgroundFunction(ActiveMenu); uint32_t Line; for (Line = 0; Line < 4; Line++) { uint32_t TextWidth = GetRenderedWidth(Lines[Line]); if (TextWidth <= GCW0_SCREEN_WIDTH - 2) print_string_outline(Lines[Line], COLOR_ACTIVE_TEXT, COLOR_ACTIVE_OUTLINE, (GCW0_SCREEN_WIDTH - TextWidth) / 2, (GCW0_SCREEN_HEIGHT - GetRenderedHeight(" ") * 4) / 2 + GetRenderedHeight(" ") * Line); else ReGBA_Trace("E: '%s' doesn't fit the screen! Fix this, Nebuleon!", Lines[Line]); } SDL_Flip(OutputSurface); usleep(5000); // for platforms that don't sync their flips } // Accumulate buttons until they're all released. enum OpenDingux_Buttons ButtonTotal = Buttons; while ((Buttons = GetPressedOpenDinguxButtons()) != 0) { // a) If the old buttons are a strict subset of the new buttons, // add the new buttons. if ((Buttons | ButtonTotal) == Buttons) ButtonTotal |= Buttons; // b) If the new buttons are a strict subset of the old buttons, // do nothing. (The user is releasing the buttons to return.) else if ((Buttons | ButtonTotal) == ButtonTotal) ; // c) If the new buttons are on another path, replace the buttons // completely, for example, R+X turning into R+Y. else ButtonTotal = Buttons; DefaultDisplayBackgroundFunction(ActiveMenu); SDL_Flip(OutputSurface); usleep(5000); // for platforms that don't sync their flips } return ButtonTotal; }
static enum OpenDingux_Buttons GrabButton(struct Menu* ActiveMenu, char* Lines[4]) { enum OpenDingux_Buttons Buttons; // Wait for the buttons that triggered the action to be released. while (GetPressedOpenDinguxButtons() != 0) { DefaultDisplayBackgroundFunction(ActiveMenu); SDL_Flip(OutputSurface); usleep(5000); // for platforms that don't sync their flips } // Wait until a button is pressed. while ((Buttons = GetPressedOpenDinguxButtons()) == 0) { DefaultDisplayBackgroundFunction(ActiveMenu); uint32_t Line; for (Line = 0; Line < 4; Line++) { uint32_t TextWidth = GetRenderedWidth(Lines[Line]); if (TextWidth <= GCW0_SCREEN_WIDTH - 2) print_string_outline(Lines[Line], COLOR_ACTIVE_TEXT, COLOR_ACTIVE_OUTLINE, (GCW0_SCREEN_WIDTH - TextWidth) / 2, (GCW0_SCREEN_HEIGHT - GetRenderedHeight(" ") * 4) / 2 + GetRenderedHeight(" ") * Line); else ReGBA_Trace("E: '%s' doesn't fit the screen! Fix this, Nebuleon!", Lines[Line]); } SDL_Flip(OutputSurface); usleep(5000); // for platforms that don't sync their flips } // Accumulate buttons until they're all released. enum OpenDingux_Buttons ButtonTotal = Buttons; while ((Buttons = GetPressedOpenDinguxButtons()) != 0) { ButtonTotal |= Buttons; DefaultDisplayBackgroundFunction(ActiveMenu); SDL_Flip(OutputSurface); usleep(5000); // for platforms that don't sync their flips } return ButtonTotal; }
static void DisplayHotkeyValue(struct MenuEntry* DrawnMenuEntry, struct MenuEntry* ActiveMenuEntry) { char Value[256]; GetButtonsText(*(uint32_t*) DrawnMenuEntry->Target, Value); uint32_t TextWidth = GetRenderedWidth(Value); if (TextWidth <= GCW0_SCREEN_WIDTH - 2) { bool IsActive = (DrawnMenuEntry == ActiveMenuEntry); uint16_t TextColor = IsActive ? COLOR_ACTIVE_TEXT : COLOR_INACTIVE_TEXT; uint16_t OutlineColor = IsActive ? COLOR_ACTIVE_OUTLINE : COLOR_INACTIVE_OUTLINE; print_string_outline(Value, TextColor, OutlineColor, GCW0_SCREEN_WIDTH - TextWidth - 1, GetRenderedHeight(" ") * (DrawnMenuEntry->Position + 2) + 1); } else ReGBA_Trace("W: Hid value '%s' from the menu due to it being too long", Value); }
static void DefaultDisplayValueFunction(struct MenuEntry* DrawnMenuEntry, struct MenuEntry* ActiveMenuEntry) { if (DrawnMenuEntry->Kind == KIND_OPTION || DrawnMenuEntry->Kind == KIND_DISPLAY) { char* Value; char Temp[21]; bool Error = false; if (DrawnMenuEntry->Kind == KIND_OPTION) { if (*(uint32_t*) DrawnMenuEntry->Target < DrawnMenuEntry->ChoiceCount) Value = DrawnMenuEntry->Choices[*(uint32_t*) DrawnMenuEntry->Target].Pretty; else { Value = "Out of bounds"; Error = true; } } else if (DrawnMenuEntry->Kind == KIND_DISPLAY) { switch (DrawnMenuEntry->DisplayType) { case TYPE_STRING: Value = (char*) DrawnMenuEntry->Target; break; case TYPE_INT32: sprintf(Temp, "%" PRIi32, *(int32_t*) DrawnMenuEntry->Target); Value = Temp; break; case TYPE_UINT32: sprintf(Temp, "%" PRIu32, *(uint32_t*) DrawnMenuEntry->Target); Value = Temp; break; case TYPE_INT64: print_i64(Temp, *(int64_t*) DrawnMenuEntry->Target); Value = Temp; break; case TYPE_UINT64: print_u64(Temp, *(uint64_t*) DrawnMenuEntry->Target); Value = Temp; break; default: Value = "Unknown type"; Error = true; break; } } uint32_t TextWidth = GetRenderedWidth(Value); if (TextWidth <= GCW0_SCREEN_WIDTH - 2) { bool IsActive = (DrawnMenuEntry == ActiveMenuEntry); uint16_t TextColor = Error ? COLOR_ERROR_TEXT : (IsActive ? COLOR_ACTIVE_TEXT : COLOR_INACTIVE_TEXT); uint16_t OutlineColor = Error ? COLOR_ERROR_OUTLINE : (IsActive ? COLOR_ACTIVE_OUTLINE : COLOR_INACTIVE_OUTLINE); print_string_outline(Value, TextColor, OutlineColor, GCW0_SCREEN_WIDTH - TextWidth - 1, GetRenderedHeight(" ") * (DrawnMenuEntry->Position + 2) + 1); } else ReGBA_Trace("W: Hid value '%s' from the menu due to it being too long", Value); } }
/** * Render the event in the bitmap */ void ForEachEvent::Render(wxDC & dc, int x, int y, unsigned int width, gd::EventsEditorItemsAreas & areas, gd::EventsEditorSelection & selection, const gd::Platform & platform) { #if !defined(GD_NO_WX_GUI) gd::EventsRenderingHelper * renderingHelper = gd::EventsRenderingHelper::Get(); int border = renderingHelper->instructionsListBorder; const int forEachTextHeight = 20; //Draw header rectangle wxRect headerRect(x, y, width, forEachTextHeight); renderingHelper->DrawNiceRectangle(dc, headerRect); //For Each text dc.SetFont( renderingHelper->GetNiceFont().Bold() ); dc.SetTextForeground(wxColour(0,0,0)); dc.DrawText( _("For each object") + " " + objectsToPick.GetPlainString() + _(", repeat :"), x + 4, y + 3 ); //Draw conditions rectangle wxRect rect(x, y+forEachTextHeight, renderingHelper->GetConditionsColumnWidth()+border, GetRenderedHeight(width, platform)-forEachTextHeight); renderingHelper->DrawNiceRectangle(dc, rect); //Draw actions and conditions renderingHelper->DrawConditionsList(conditions, dc, x+border, y+forEachTextHeight+border, renderingHelper->GetConditionsColumnWidth()-border, this, areas, selection, platform); renderingHelper->DrawActionsList(actions, dc, x+renderingHelper->GetConditionsColumnWidth()+border, y+forEachTextHeight+border, width-renderingHelper->GetConditionsColumnWidth()-border*2, this, areas, selection, platform); #endif }
/** * Render the event in the bitmap */ void WhileEvent::Render(wxDC & dc, int x, int y, unsigned int width, gd::EventsEditorItemsAreas & areas, gd::EventsEditorSelection & selection, const gd::Platform & platform) { #if !defined(GD_NO_WX_GUI) gd::EventsRenderingHelper * renderingHelper = gd::EventsRenderingHelper::Get(); int border = renderingHelper->instructionsListBorder; const int repeatHeight = 20; //Draw header rectangle int whileConditionsHeight = renderingHelper->GetRenderedConditionsListHeight(whileConditions, width-80-border*2, platform)+border*2; if (!infiniteLoopWarning && whileConditionsHeight < 32 ) whileConditionsHeight = 32; wxRect headerRect(x, y, width, whileConditionsHeight+repeatHeight); renderingHelper->DrawNiceRectangle(dc, headerRect); //While text dc.SetFont( renderingHelper->GetNiceFont().Bold() ); if ( !IsDisabled() ) dc.SetTextForeground( wxColour( 0, 0, 0 ) ); else dc.SetTextForeground( wxColour( 160, 160, 160 ) ); dc.DrawText( _("While :"), x+5, y+5 ); //Draw icon if infinite loop warning is deactivated. if (!infiniteLoopWarning) { if ( gd::CommonBitmapProvider::Get()->noProtection.IsOk() ) dc.DrawBitmap(gd::CommonBitmapProvider::Get()->noProtection, wxPoint(x+5,y+5+18), /*useMask=*/true); } //Draw "while conditions" renderingHelper->DrawConditionsList(whileConditions, dc, x+80+border, y+border, width-80-border*2, this, areas, selection, platform); dc.SetFont( renderingHelper->GetNiceFont().Bold() ); if ( !IsDisabled() ) dc.SetTextForeground( wxColour( 0, 0, 0 ) ); else dc.SetTextForeground( wxColour( 160, 160, 160 ) ); dc.DrawText( _("Repeat :"), x+4, y+whileConditionsHeight+3); whileConditionsHeight += repeatHeight; //Draw conditions rectangle wxRect rect(x, y+whileConditionsHeight, renderingHelper->GetConditionsColumnWidth()+border, GetRenderedHeight(width, platform)-whileConditionsHeight); renderingHelper->DrawNiceRectangle(dc, rect); renderingHelper->DrawConditionsList(conditions, dc, x+border, y+whileConditionsHeight+border, renderingHelper->GetConditionsColumnWidth()-border, this, areas, selection, platform); renderingHelper->DrawActionsList(actions, dc, x+renderingHelper->GetConditionsColumnWidth()+border, y+whileConditionsHeight+border, width-renderingHelper->GetConditionsColumnWidth()-border*2, this, areas, selection, platform); #endif }
void Array3DEvent::Render(wxDC & dc, int x, int y, unsigned int width, gd::EventsEditorItemsAreas & areas, gd::EventsEditorSelection & selection, const gd::Platform & platform) { gd::EventsRenderingHelper * renderingHelper = gd::EventsRenderingHelper::GetInstance(); int border = renderingHelper->instructionsListBorder; const int functionTextHeight = 20; //Draw header rectangle wxRect headerRect(x, y, width, functionTextHeight); renderingHelper->DrawNiceRectangle(dc, headerRect); //Name dc.SetFont( renderingHelper->GetNiceFont().Bold() ); dc.SetTextForeground(wxColour(0,0,0)); wxString caption = _("Iterate through ") + (GetArrayName() != "" ? GetArrayName() : _("(Not defined)")) + _(" on XYZ"); dc.DrawText( caption, x + 4, y + 3 ); //Draw conditions rectangle wxRect rect(x, y+functionTextHeight, renderingHelper->GetConditionsColumnWidth()+border, GetRenderedHeight(width, platform)-functionTextHeight); renderingHelper->DrawNiceRectangle(dc, rect); //Draw actions and conditions renderingHelper->DrawConditionsList(conditions, dc, x+border, y+functionTextHeight+border, renderingHelper->GetConditionsColumnWidth()-border, this, areas, selection, platform); renderingHelper->DrawActionsList(actions, dc, x+renderingHelper->GetConditionsColumnWidth()+border, y+functionTextHeight+border, width-renderingHelper->GetConditionsColumnWidth()-border*2, this, areas, selection, platform); }