void hdSimpleTextFigure::recalculateDisplayBox()
{
	int w, h;

	getFontMetrics(w, h);

	hdGeometry g;
	displayBox().width = g.max(w, 10) + padding;
	displayBox().height = g.max(h, 10) + padding;
}
Example #2
0
void displayPopup(const pm_char * pstr)
{
    s_warning = pstr;
    displayBox();
    s_warning = NULL;
    lcdRefresh();
}
Example #3
0
void displayWarning(uint8_t event)
{
    s_warning_result = false;
    displayBox();
    if (s_warning_info)
        lcd_putsnAtt(16, WARNING_LINE_Y+FH, s_warning_info, s_warning_info_len, WARNING_INFO_FLAGS);
    lcd_puts(16, WARNING_LINE_Y+2*FH, s_warning_type == WARNING_TYPE_ASTERISK ? STR_EXIT : STR_POPUPS);
    switch (event) {
#if defined(ROTARY_ENCODER_NAVIGATION)
    case EVT_ROTARY_BREAK:
#endif
    case EVT_KEY_BREAK(KEY_ENTER):
        if (s_warning_type == WARNING_TYPE_ASTERISK)
            break;
        s_warning_result = true;
        // no break
#if defined(ROTARY_ENCODER_NAVIGATION)
    case EVT_ROTARY_LONG:
        killEvents(event);
#endif
    case EVT_KEY_BREAK(KEY_EXIT):
        s_warning = NULL;
        s_warning_type = WARNING_TYPE_ASTERISK;
        break;
#if defined(CPUARM)
    default:
        if (s_warning_type != WARNING_TYPE_INPUT) break;
        s_editMode = EDIT_MODIFY_FIELD;
        s_warning_input_value = checkIncDec(event, s_warning_input_value, s_warning_input_min, s_warning_input_max);
        s_editMode = EDIT_SELECT_FIELD;
        break;
#endif
    }
}
void ddAbstractFigure::basicDrawSelected(wxBufferedDC& context, ddDrawingView *view){
	ddRect copy = displayBox();
	view->CalcScrolledPosition(copy.x,copy.y,&copy.x,&copy.y);
	
	context.SetPen(*wxRED_PEN);
	context.SetBrush(wxBrush (wxColour(133, 133, 133),wxSOLID));
	context.DrawRectangle(copy);
}
void ddTextTableItemFigure::recalculateDisplayBox()
{
	if (ownerColumn && ownerColumn->getOwnerTable())
	{
		hdSimpleTextFigure::recalculateDisplayBox();
		displayBox().width = ownerColumn->getOwnerTable()->getFiguresMaxWidth();
	}
}
Example #6
0
void hdAbstractFigure::basicDraw(wxBufferedDC &context, hdDrawingView *view)
{
	hdRect copy = displayBox().gethdRect(view->getIdx());
	view->CalcScrolledPosition(copy.x, copy.y, &copy.x, &copy.y);

	context.SetPen(*wxGREEN_PEN);
	context.SetBrush(wxBrush (wxColour(208, 208, 208), wxSOLID));
	context.DrawRectangle(copy);
}
Example #7
0
void ddColumnOptionIcon::basicDraw(wxBufferedDC &context, hdDrawingView *view)
{
	if(iconToDraw)
	{
		hdRect copy = displayBox().gethdRect(view->getIdx());
		view->CalcScrolledPosition(copy.x, copy.y, &copy.x, &copy.y);
		context.DrawBitmap(*iconToDraw, copy.GetPosition(), true);
	}
}
Example #8
0
void DMEngine::processEntrance() {
	_eventMan->_primaryMouseInput = _eventMan->_primaryMouseInputEntrance;
	_eventMan->_secondaryMouseInput = nullptr;
	_eventMan->_primaryKeyboardInput = nullptr;
	_eventMan->_secondaryKeyboardInput = nullptr;
	_entranceDoorAnimSteps[0] = new byte[128 * 161 * 12];
	for (uint16 idx = 1; idx < 8; idx++)
		_entranceDoorAnimSteps[idx] = _entranceDoorAnimSteps[idx - 1] + 128 * 161;

	_entranceDoorAnimSteps[8] = _entranceDoorAnimSteps[7] + 128 * 161;
	_entranceDoorAnimSteps[9] = _entranceDoorAnimSteps[8] + 128 * 161 * 2;

	_displayMan->loadIntoBitmap(k3_entranceRightDoorGraphicIndice, _entranceDoorAnimSteps[4]);
	_displayMan->loadIntoBitmap(k2_entranceLeftDoorGraphicIndice, _entranceDoorAnimSteps[0]);
	_interfaceCredits = _displayMan->getNativeBitmapOrGraphic(k5_creditsGraphicIndice);
	_displayMan->_useByteBoxCoordinates = false;
	Box displayBox(0, 100, 0, 160);
	for (uint16 idx = 1; idx < 4; idx++) {
		_displayMan->blitToBitmap(_entranceDoorAnimSteps[0], _entranceDoorAnimSteps[idx], displayBox, idx << 2, 0, k64_byteWidth, k64_byteWidth, kM1_ColorNoTransparency, 161, 161);
		displayBox._x2 -= 4;
	}
	displayBox._x2 = 127;
	for (uint16 idx = 5; idx < 8; idx++) {
		displayBox._x1 += 4;
		_displayMan->blitToBitmap(_entranceDoorAnimSteps[4], _entranceDoorAnimSteps[idx], displayBox, 0, 0, k64_byteWidth, k64_byteWidth, kM1_ColorNoTransparency, 161, 161);
	}

	do {
		drawEntrance();
		_eventMan->showMouse();
		_eventMan->discardAllInput();
		_newGameFl = k99_modeWaitingOnEntrance;
		do {
			_eventMan->processInput();
			if (_engineShouldQuit)
				return;
			_eventMan->processCommandQueue();
			_displayMan->updateScreen();
		} while (_newGameFl == k99_modeWaitingOnEntrance);
	} while (_newGameFl == k202_CommandEntranceDrawCredits);

	//Strangerke: CHECKME: Earlier versions were using G0566_puc_Graphic534_Sound01Switch
	_sound->play(k01_soundSWITCH, 112, 0x40, 0x40);
	delay(20);
	_eventMan->showMouse();
	if (_newGameFl)
		openEntranceDoors();

	delete[] _entranceDoorAnimSteps[0];
	for (uint16 i = 0; i < 10; ++i)
		_entranceDoorAnimSteps[i] = nullptr;
}
Example #9
0
//-----------------------------------------------------------------------------
// computeDualView
//-----------------------------------------------------------------------------
void computeDualView(int a, int b, int c, int d, float tx, float ty, float tz) {
  for (int i=0; i<NSAMPLES; i++)
    for (int j=0; j<NSAMPLES; j++)
      intersection_count[i][j] = 0;
  
  for (int i=0; i<NLINES; i++) 
    if (displayL[i])
      computeDual(lines[i][0], lines[i][1], lines[i][2], lines[i][3], a, b, c, d);

  if (displayV)
    computeDual(v_x[0], v_y[0], v_x[1], v_y[1], a, b, c, d);
  displayDual2();
  displayBox();
}
Example #10
0
void menuMainView(uint8_t event)
{
  STICK_SCROLL_DISABLE();

  uint8_t view = g_eeGeneral.view;
  uint8_t view_base = view & 0x0f;

  switch(event) {

    case EVT_ENTRY:
      killEvents(KEY_EXIT);
      killEvents(KEY_UP);
      killEvents(KEY_DOWN);
      break;

    /* TODO if timer2 is OFF, it's possible to use this timer2 as in er9x...
    case EVT_KEY_BREAK(KEY_MENU):
      if (view_base == VIEW_TIMER2) {
        Timer2_running = !Timer2_running;
        AUDIO_KEYPAD_UP();
      }
    break;
    */

    case EVT_KEY_BREAK(KEY_RIGHT):
    case EVT_KEY_BREAK(KEY_LEFT):
      if (view_base <= VIEW_INPUTS) {
#if defined(PCBSKY9X)
        if (view_base == VIEW_INPUTS)
          g_eeGeneral.view ^= ALTERNATE_VIEW;
        else
          g_eeGeneral.view = (g_eeGeneral.view + (4*ALTERNATE_VIEW) + ((event==EVT_KEY_BREAK(KEY_LEFT)) ? -ALTERNATE_VIEW : ALTERNATE_VIEW)) % (4*ALTERNATE_VIEW);
#else
        g_eeGeneral.view ^= ALTERNATE_VIEW;
#endif
        eeDirty(EE_GENERAL);
        AUDIO_KEYPAD_UP();
      }
      break;

#if defined(NAVIGATION_MENUS)
    case EVT_KEY_CONTEXT_MENU:
      killEvents(event);

#if defined(CPUARM)
      if (modelHasNotes()) {
        MENU_ADD_ITEM(STR_VIEW_NOTES);
      }
#endif

#if defined(CPUARM)
      MENU_ADD_ITEM(STR_RESET_SUBMENU);
#else
      MENU_ADD_ITEM(STR_RESET_TIMER1);
      MENU_ADD_ITEM(STR_RESET_TIMER2);
#if defined(FRSKY)
      MENU_ADD_ITEM(STR_RESET_TELEMETRY);
#endif
      MENU_ADD_ITEM(STR_RESET_FLIGHT);
#endif

      MENU_ADD_ITEM(STR_STATISTICS);
#if defined(CPUARM)
      MENU_ADD_ITEM(STR_ABOUT_US);
#endif
      menuHandler = onMainViewMenu;
      break;
#endif

#if MENUS_LOCK != 2 /*no menus*/
    case EVT_KEY_LONG(KEY_MENU):// go to last menu
      pushMenu(lastPopMenu());
      killEvents(event);
      break;

    CASE_EVT_ROTARY_BREAK
    case EVT_KEY_MODEL_MENU:
      pushMenu(menuModelSelect);
      killEvents(event);
      break;

    CASE_EVT_ROTARY_LONG
    case EVT_KEY_GENERAL_MENU:
      pushMenu(menuGeneralSetup);
      killEvents(event);
      break;
#endif

    case EVT_KEY_BREAK(KEY_UP):
    case EVT_KEY_BREAK(KEY_DOWN):
      g_eeGeneral.view = (event == EVT_KEY_BREAK(KEY_UP) ? (view_base == VIEW_COUNT-1 ? 0 : view_base+1) : (view_base == 0 ? VIEW_COUNT-1 : view_base-1));
      eeDirty(EE_GENERAL);
      AUDIO_KEYPAD_UP();
      break;

    case EVT_KEY_STATISTICS:
      chainMenu(menuStatisticsView);
      killEvents(event);
      break;

    case EVT_KEY_TELEMETRY:
#if defined(FRSKY)
      if (!IS_FAI_ENABLED())
        chainMenu(menuTelemetryFrsky);
#elif defined(JETI)
      JETI_EnableRXD(); // enable JETI-Telemetry reception
      chainMenu(menuTelemetryJeti);
#elif defined(ARDUPILOT)
      ARDUPILOT_EnableRXD(); // enable ArduPilot-Telemetry reception
      chainMenu(menuTelemetryArduPilot);
#elif defined(NMEA)
      NMEA_EnableRXD(); // enable NMEA-Telemetry reception
      chainMenu(menuTelemetryNMEA);
#elif defined(MAVLINK)
      chainMenu(menuTelemetryMavlink);
#else
      chainMenu(menuStatisticsDebug);
#endif
      killEvents(event);
      break;

    case EVT_KEY_FIRST(KEY_EXIT):
#if defined(GVARS) && !defined(PCBSTD)
      if (s_gvar_timer > 0) {
        s_gvar_timer = 0;
      }
#endif
      if (view == VIEW_TIMER2) {
        timerReset(1);
      }
      AUDIO_KEYPAD_UP();
      break;

#if !defined(NAVIGATION_MENUS)
    case EVT_KEY_LONG(KEY_EXIT):
      flightReset();
      AUDIO_KEYPAD_UP();
      break;
#endif
  }

  {
    // Flight Mode Name
    uint8_t mode = mixerCurrentFlightMode;
    lcd_putsnAtt(PHASE_X, PHASE_Y, g_model.flightModeData[mode].name, sizeof(g_model.flightModeData[mode].name), ZCHAR|PHASE_FLAGS);

    // Model Name
    putsModelName(MODELNAME_X, MODELNAME_Y, g_model.header.name, g_eeGeneral.currModel, BIGSIZE);

    // Main Voltage (or alarm if any)
    displayVoltageOrAlarm();

    // Timers
    displayTimers();

    // Trims sliders
    displayTrims(mode);
  }

  if (view_base < VIEW_INPUTS) {
    // scroll bar
    lcd_hlineStip(38, 34, 54, DOTTED);
#if defined(PCBSKY9X)
    lcd_hline(38 + (g_eeGeneral.view / ALTERNATE_VIEW) * 13, 34, 13, SOLID);
#else
    lcd_hline((g_eeGeneral.view & ALTERNATE_VIEW) ? 64 : 38, 34, 26, SOLID);
#endif

    for (uint8_t i=0; i<8; i++) {
      uint8_t x0,y0;
#if defined(PCBSKY9X)
      uint8_t chan = 8*(g_eeGeneral.view / ALTERNATE_VIEW) + i;
#else
      uint8_t chan = (g_eeGeneral.view & ALTERNATE_VIEW) ? 8+i : i;
#endif

      int16_t val = channelOutputs[chan];

      switch(view_base)
      {
        case VIEW_OUTPUTS_VALUES:
          x0 = (i%4*9+3)*FW/2;
          y0 = i/4*FH+40;
#if defined(PPM_UNIT_US)
          lcd_outdezAtt(x0+4*FW , y0, PPM_CH_CENTER(chan)+val/2, 0);
#elif defined(PPM_UNIT_PERCENT_PREC1)
          lcd_outdezAtt(x0+4*FW , y0, calcRESXto1000(val), PREC1);
#else
          lcd_outdezAtt(x0+4*FW , y0, calcRESXto1000(val)/10, 0); // G: Don't like the decimal part*
#endif
          break;

        case VIEW_OUTPUTS_BARS:
#define WBAR2 (50/2)
          x0       = i<4 ? LCD_W/4+2 : LCD_W*3/4-2;
          y0       = 38+(i%4)*5;

          uint16_t lim = g_model.extendedLimits ? 640*2 : 512*2;
          int8_t len = (abs(val) * WBAR2 + lim/2) / lim;

          if(len>WBAR2)  len = WBAR2;  // prevent bars from going over the end - comment for debugging
          lcd_hlineStip(x0-WBAR2, y0, WBAR2*2+1, DOTTED);
          lcd_vline(x0,y0-2,5);
          if (val>0)
            x0+=1;
          else
            x0-=len;
          lcd_hline(x0,y0+1,len);
          lcd_hline(x0,y0-1,len);
          break;
      }
    }
  }
  else if (view_base == VIEW_INPUTS) {
    if (view == VIEW_INPUTS) {
      // Sticks + Pots
      doMainScreenGraphics();

      // Switches
      for (uint8_t i=SWSRC_THR; i<=SWSRC_TRN; i++) {
        int8_t sw = (i == SWSRC_TRN ? (switchState(SW_ID0) ? SWSRC_ID0 : (switchState(SW_ID1) ? SWSRC_ID1 : SWSRC_ID2)) : i);
        uint8_t x = 2*FW-2, y = i*FH+1;
        if (i>=SWSRC_AIL) {
          x = 17*FW-1;
          y -= 3*FH;
        }
        putsSwitches(x, y, sw, getSwitch(i) ? INVERS : 0);
      }
    }
    else {
#if defined(PCBMEGA2560) && defined(ROTARY_ENCODERS)
      for (uint8_t i=0; i<NUM_ROTARY_ENCODERS; i++) {
        int16_t val = getRotaryEncoder(i);
        int8_t len = limit((int16_t)0, (int16_t)(((val+1024) * BAR_HEIGHT) / 2048), (int16_t)BAR_HEIGHT);
#if ROTARY_ENCODERS > 2
#define V_BAR_W 5
        V_BAR(LCD_W/2-8+V_BAR_W*i, LCD_H-8, len);
#else
#define V_BAR_W 5
        V_BAR(LCD_W/2-3+V_BAR_W*i, LCD_H-8, len);
#endif
      }
#endif // PCBGRUVIN9X && ROTARY_ENCODERS

      // Logical Switches
#if defined(PCBSKY9X)
      for (uint8_t i=0; i<NUM_LOGICAL_SWITCH; i++) {
        int8_t len = getSwitch(SWSRC_SW1+i) ? BAR_HEIGHT : 1;
        uint8_t x = VSWITCH_X(i);
        lcd_vline(x-1, VSWITCH_Y-len, len);
        lcd_vline(x,   VSWITCH_Y-len, len);
      }
#elif defined(CPUM2560)
      for (uint8_t i=0; i<NUM_LOGICAL_SWITCH; i++)
        putsSwitches(2*FW-3 + (i/3)*(i/3>2 ? 3*FW+2 : (3*FW-1)) + (i/3>2 ? 2*FW : 0), 4*FH+1 + (i%3)*FH, SWSRC_SW1+i, getSwitch(SWSRC_SW1+i) ? INVERS : 0);
#elif !defined(PCBSTD)
      for (uint8_t i=0; i<NUM_LOGICAL_SWITCH; i++)
        putsSwitches(2*FW-2 + (i/3)*(4*FW-1), 4*FH+1 + (i%3)*FH, SWSRC_SW1+i, getSwitch(SWSRC_SW1+i) ? INVERS : 0);
#else
      for (uint8_t i=0; i<NUM_LOGICAL_SWITCH; i++)
        putsSwitches(2*FW-3 + (i/3)*(4*FW), 4*FH+1 + (i%3)*FH, SWSRC_SW1+i, getSwitch(SWSRC_SW1+i) ? INVERS : 0);
#endif
    }
  }
  else { // timer2
#if defined(TRANSLATIONS_CZ)
  #define TMR2_LBL_COL (20-FW/2+1)
#else
  #define TMR2_LBL_COL (20-FW/2+5)
#endif
    putsTimer(33+FW+2+10*FWNUM-4, FH*5, timersStates[1].val, DBLSIZE, DBLSIZE);
    putsTimerMode(timersStates[1].val >= 0 ? TMR2_LBL_COL : TMR2_LBL_COL-7, FH*6, g_model.timers[1].mode);
    // lcd_outdezNAtt(33+11*FW, FH*6, s_timerVal_10ms[1], LEADING0, 2); // 1/100s
  }

  // And ! in case of unexpected shutdown
  if (unexpectedShutdown) {
    lcd_putcAtt(REBOOT_X, 0*FH, '!', INVERS);
  }

#if defined(GVARS) && !defined(PCBSTD)
  if (s_gvar_timer > 0) {
    s_gvar_timer--;
    s_warning = STR_GLOBAL_VAR;
    displayBox();
    lcd_putsnAtt(16, 5*FH, g_model.gvars[s_gvar_last].name, LEN_GVAR_NAME, ZCHAR);
    lcd_putsAtt(16+7*FW, 5*FH, PSTR("[\010]"), BOLD);
    lcd_outdezAtt(16+7*FW+4*FW+FW/2, 5*FH, GVAR_VALUE(s_gvar_last, getGVarFlightPhase(mixerCurrentFlightMode, s_gvar_last)), BOLD);
    s_warning = NULL;
  }
#endif

#if defined(DSM2)
  if (moduleFlag[0] == MODULE_BIND) {
    // Issue 98
    lcd_putsAtt(15*FW, 0, PSTR("BIND"), 0);
  }
#endif
}
void hdSimpleTextFigure::basicMoveBy(int posIdx, int x, int y)
{
	displayBox().x[posIdx] += x;
	displayBox().y[posIdx] += y;
}
void hdSimpleTextFigure::basicDrawSelected(wxBufferedDC &context, hdDrawingView *view)
{
	hdRect copy = displayBox().gethdRect(view->getIdx());
	view->CalcScrolledPosition(copy.x, copy.y, &copy.x, &copy.y);
	context.DrawText(getText(true), copy.GetPosition());
}
void ddBitmapFigure::basicDraw(wxBufferedDC& context, ddDrawingView *view)
{
	ddRect copy = displayBox();
	view->CalcScrolledPosition(copy.x,copy.y,&copy.x,&copy.y);
	context.DrawBitmap(imageToDraw,copy.GetPosition(),true);
}
Example #14
0
void hdRectangleFigure::basicDrawSelected(wxBufferedDC &context, hdDrawingView *view)
{
	hdRect copy = displayBox().gethdRect(view->getIdx());
	view->CalcScrolledPosition(copy.x, copy.y, &copy.x, &copy.y);
	context.DrawRectangle(copy);
}
Example #15
0
//-----------------------------------------------------------------------------
// display
//-----------------------------------------------------------------------------
void display(void) {
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

#if 0
  glPushMatrix();
  glTranslatef(-0.5, 0.5, 0.0);
  displayScene(0.5f, 0.5f, 0.2f, 0, 1, 2, 3);
  glTranslatef(0, -1.1, 0.0);
  computeDualView(10, 11, 8, 9, 1.1, 0.0, 0.0);
  glPopMatrix();

  glPushMatrix();
  glTranslatef(0.6, 0.5, 0.0);
  displayScene(0.5f, 0.5f, 0.2f, 0, 2, 1, 3);
  glTranslatef(0, -1.1, 0.0);
  computeDualView(4, 6, 5, 7, 1.1, 0.0, 0.0);
  glPopMatrix();
#else
  glPushMatrix();
    glTranslatef(-0.5, 0.5, 0.0);
    displayScene(0.5f, 0.5f, 0.2f, 0, 1, 2, 3);
    glTranslatef(0, -1.1, 0.0);
    computeDualView(0, 1, 2, 3, 1.1, 0.0, 0.0);
  glPopMatrix();

  glPushMatrix();
    glTranslatef(0.6, 0.5, 0.0);
    displayScene(0.5f, 0.5f, 0.2f, 0, 2, 1, 3);
    glTranslatef(0, -1.1, 0.0);
    computeDualView(0, 2, 1, 3, 1.1, 0.0, 0.0);
  glPopMatrix();
#endif

#if 1

#ifdef CURVED
  glPushMatrix();
  glLoadIdentity();
  glTranslatef(1.7, 0.5, 0.0);
  displayScene(0.5f, 0.5f, 0.2f, 0, 1, 0, 2);
  glTranslatef(0, -1.1, 0.0);
  computeDualView(0, 1, 0, 2, 1.1, 0.0, 0.0);
  glPopMatrix();
#else
  glPushMatrix();
  glLoadIdentity();
  glTranslatef(1.7, 0.5, 0.0);
  displayScene(0.5f, 0.5f, 0.2f, 5, 1, 0, 2);
  glTranslatef(0, -1.1, 0.0);
  computeDualView(5, 1, 0, 2, 1.1, 0.0, 0.0);

  glTranslatef(0, -1.1, 0.0);
  displayScene(0.5f, 0.5f, 0.2f, 0, 1, 2, 8);
  glTranslatef(0, -1.1, 0.0);
  computeDualView(0, 1, 2, 8, 1.1, 0.0, 0.0);
  glPopMatrix();
#endif
  
#ifdef CURVED
  glPushMatrix();
  glLoadIdentity();
  glTranslatef(2.8, 0.5, 0.0);
  displayScene(0.5f, 0.5f, 0.2f, 0, 1, 1, 3);
  glTranslatef(0, -1.1, 0.0);
  computeDualView(0, 1, 1, 3, 1.1, 0.0, 0.0);
  glPopMatrix();
#else
  glPushMatrix();
  glLoadIdentity();
  glTranslatef(2.8, 0.5, 0.0);
  displayScene(0.5f, 0.5f, 0.2f, 4, 0, 1, 3);
  glTranslatef(0, -1.1, 0.0);
  computeDualView(4, 0, 1, 3, 1.1, 0.0, 0.0);

  glTranslatef(0, -1.1, 0.0);
  displayScene(0.5f, 0.5f, 0.2f, 0, 1, 3, 9);
  glTranslatef(0, -1.1, 0.0);
  computeDualView(0, 1, 3, 9, 1.1, 0.0, 0.0);
  glPopMatrix();
#endif

#ifdef CURVED
  glPushMatrix();
  glLoadIdentity();
  glTranslatef(3.9, 0.5, 0.0);
  displayScene(0.5f, 0.5f, 0.2f, 0, 2, 2, 3);
  glTranslatef(0, -1.1, 0.0);
  computeDualView(0, 2, 2, 3, 1.1, 0.0, 0.0);
  glPopMatrix();
#else
  glPushMatrix();
  glLoadIdentity();
  glTranslatef(3.9, 0.5, 0.0);
  displayScene(0.5f, 0.5f, 0.2f, 0, 2, 3, 7);
  glTranslatef(0, -1.1, 0.0);
  computeDualView(0, 2, 3, 7, 1.1, 0.0, 0.0);

  glTranslatef(0, -1.1, 0.0);
  displayScene(0.5f, 0.5f, 0.2f, 10, 0, 2, 3);
  glTranslatef(0, -1.1, 0.0);
  computeDualView(10, 0, 2, 3, 1.1, 0.0, 0.0);
  glPopMatrix();
#endif

#ifdef CURVED
  glPushMatrix();
  glLoadIdentity();
  glTranslatef(5.0, 0.5, 0.0);
  displayScene(0.5f, 0.5f, 0.2f, 1, 3, 2, 3);
  glTranslatef(0, -1.1, 0.0);
  computeDualView(1, 3, 2, 3, 1.1, 0.0, 0.0);
  glPopMatrix();
#else
  glPushMatrix();
  glLoadIdentity();
  glTranslatef(5.0, 0.5, 0.0);
  displayScene(0.5f, 0.5f, 0.2f, 1, 3, 2, 6);
  glTranslatef(0, -1.1, 0.0);
  computeDualView(1, 3, 2, 6, 1.1, 0.0, 0.0);

  glTranslatef(0, -1.1, 0.0);
  displayScene(0.5f, 0.5f, 0.2f, 1, 11, 2, 3);
  glTranslatef(0, -1.1, 0.0);
  computeDualView(1, 11, 2, 3, 1.1, 0.0, 0.0);
  glPopMatrix();
#endif
#endif

#if 0
  if (!displayCount) {
    glEnable(GL_BLEND);
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
  
    if (displayV) displayDual(v_x[0], v_y[0], v_x[1], v_y[1], 0.4f, 0.4f, 0.5f);

    for (int i=0; i<NLINES; i++) 
      if (displayL[i])
          displayDual(lines[i][0], lines[i][1], lines[i][2], lines[i][3],
                      colors[i][0], colors[i][1], colors[i][2]);

    displayBox ();

    glDisable(GL_BLEND);
  }
  else {
    computeDualView(0, 1, 2, 3, 1.1, 0.0, 0.0);
    computeDualView(0, 2, 1, 3, 1.1, 0.0, 0.0);
    //computeDualView(4, 1, 5, 2, 1.1, 0.0, 0.0);
    computeDualView(0, 1, 1, 3, 1.1, 0.0, 0.0);
    computeDualView(0, 2, 2, 3, 1.1, 0.0, 0.0);
    computeDualView(1, 3, 2, 3, 1.1, 0.0, 0.0);
  }

  // if (displayL[0]) displayDual(0.0f, 0.25f, 0.5f, 0.25f, 1.0f, 0.0f, 0.0f);
  // if (displayL[1]) displayDual(0.5f, 0.75f, 1.0f, 0.75f, 0.0f, 1.0f, 0.0f);
  // if (displayL[2]) displayDual(0.5f, 0.0f, 0.5f, 1.0f, 0.0f, 0.0f, 1.0f);

  glPopMatrix();
#endif

  glFlush();
  glutSwapBuffers();
  glFinish();
}
void ddRectangleFigure::basicDraw(wxBufferedDC& context, ddDrawingView *view)
{
	ddRect copy = displayBox();
	view->CalcScrolledPosition(copy.x,copy.y,&copy.x,&copy.y);
	context.DrawRectangle(copy);
}