User Tools

Site Tools


script_shape_background

====== Differences ====== This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Last revision Both sides next revision
script_shape_background [2017/06/08 08:32]
tbog LLPreferenceSlider bind missing
script_shape_background [2017/06/20 18:20]
tbog [Script code]
Line 15: Line 15:
 <sxh javascript>​ <sxh javascript>​
  
-// v1.0+// v1.1.test6
 function DrawData() function DrawData()
 { {
Line 26: Line 26:
  OVAL: 2,  OVAL: 2,
  ARC: 3,  ARC: 3,
 + ROUND_RECT:​ 4,
  properties:​ {  properties:​ {
  1: {name: '​Rectangle'​},​  1: {name: '​Rectangle'​},​
  2: {name: '​Oval'​},​  2: {name: '​Oval'​},​
  3: {name: '​Arc'​},​  3: {name: '​Arc'​},​
 + 4: {name: 'Round rectangle'​},​
  },  },
  findByName:​ function( name )  findByName:​ function( name )
Line 36: Line 38:
  {  {
  if ( enumShapeType.properties[key].name == name )  if ( enumShapeType.properties[key].name == name )
- return key;+ return ​parseInt(key);
  }  }
- return enumShapeType.RECTANGLE;​+ return enumShapeType.RECTANGLE; ​// should never happen
  },  },
  getNameArr:​ function()  getNameArr:​ function()
Line 44: Line 46:
  return [  return [
  enumShapeType.properties[enumShapeType.RECTANGLE].name,​  enumShapeType.properties[enumShapeType.RECTANGLE].name,​
 + enumShapeType.properties[enumShapeType.ROUND_RECT].name,​
  enumShapeType.properties[enumShapeType.OVAL].name,​  enumShapeType.properties[enumShapeType.OVAL].name,​
  enumShapeType.properties[enumShapeType.ARC].name  enumShapeType.properties[enumShapeType.ARC].name
Line 50: Line 53:
  getIdx: function( shapeType )  getIdx: function( shapeType )
  {  {
- return shapeType - 1; // TODO: search in getNameArr+ var arr = this.getNameArr();​ 
 + for ( var i = 0; i < arr.length; i+= 
 + if ( shapeType == this.findByName(arr[i]) ) 
 + return i; 
 + return 0; // should never happen
  }  }
 }; };
Line 63: Line 70:
  this.offsetY = 0;  this.offsetY = 0;
  this.fill = true;  this.fill = true;
 + // for arc
 + this.startAngle = 270;
 + this.sweepAngle = 45;
 + // for round corners
 + this.cornerX = 10;
 + this.cornerY = 20;
 +
 + this.validate = function( c )
 + {
 + // if not all properties found, copy them to "​c"​
 + for( var prop in this )
 + {
 + if ( (typeof this[prop] == '​boolean'​) || (typeof this[prop] == '​number'​) || (typeof this[prop] == '​string'​) )
 + {
 + if ( (typeof c[prop] == '​undefined'​) || (typeof c[prop] == '​object'​) )
 + c[prop] = this[prop];
 + }
 + }
 + if ( c.width < 0 )
 + c.width = this.width;
 + if ( c.height < 0 )
 + c.height = this.height;​
 + };
 } }
 function empty( mixedVar ) function empty( mixedVar )
Line 111: Line 141:
  case enumShapeType.RECTANGLE:​  case enumShapeType.RECTANGLE:​
  canvas.drawRect( shapeInfo.offsetX,​ shapeInfo.offsetY,​ shapeInfo.offsetX + shapeWidth, shapeInfo.offsetY + shapeHeight,​ paint );  canvas.drawRect( shapeInfo.offsetX,​ shapeInfo.offsetY,​ shapeInfo.offsetX + shapeWidth, shapeInfo.offsetY + shapeHeight,​ paint );
- break;+ break;
  case enumShapeType.OVAL:​  case enumShapeType.OVAL:​
  canvas.drawOval( shapeInfo.offsetX,​ shapeInfo.offsetY,​ shapeInfo.offsetX + shapeWidth, shapeInfo.offsetY + shapeHeight,​ paint );  canvas.drawOval( shapeInfo.offsetX,​ shapeInfo.offsetY,​ shapeInfo.offsetX + shapeWidth, shapeInfo.offsetY + shapeHeight,​ paint );
- break;+ break;
  case enumShapeType.ARC:​  case enumShapeType.ARC:​
- canvas.drawArc( shapeInfo.offsetX,​ shapeInfo.offsetY,​ shapeInfo.offsetX + shapeWidth, shapeInfo.offsetY + shapeHeight, ​-9045, true, paint ); + canvas.drawArc( shapeInfo.offsetX,​ shapeInfo.offsetY,​ shapeInfo.offsetX + shapeWidth, shapeInfo.offsetY + shapeHeight, ​shapeInfo.startAngleshapeInfo.sweepAngle, true, paint )
- break;+ break
 + case enumShapeType.ROUND_RECT:​ 
 + canvas.drawRoundRect( shapeInfo.offsetX,​ shapeInfo.offsetY,​ shapeInfo.offsetX + shapeWidth, shapeInfo.offsetY + shapeHeight,​ shapeInfo.cornerX,​ shapeInfo.cornerY,​ paint ); 
 + break;
  default:  default:
- alert('​Unknown shape type "'​ + shapeInfo.type + '"'​);​+ Android.makeNewToast( '​Unknown shape type "'​ + shapeInfo.type + '"'​, true ).show();
  }  }
  }  }
Line 147: Line 180:
  }  }
  g_cache.itemId = item.getId();​  g_cache.itemId = item.getId();​
 +
 + // hack to initialize with item size
  if ( g_cache.data.width <= 0 )  if ( g_cache.data.width <= 0 )
  g_cache.data.width = item.getWidth();​  g_cache.data.width = item.getWidth();​
  if ( g_cache.data.height <= 0 )  if ( g_cache.data.height <= 0 )
  g_cache.data.height = item.getHeight();​  g_cache.data.height = item.getHeight();​
 +
 + // validate shapes
 + var defaultShape = new ShapeInfo();​
 + defaultShape.width = g_cache.data.width;​
 + defaultShape.height = g_cache.data.height;​
 + for ( var i = 0; i < g_cache.data.shapeArr.length;​ i+= 1 )
 + {
 + defaultShape.validate( g_cache.data.shapeArr[i] );
 + }
  return g_cache.data;​  return g_cache.data;​
 } }
Line 172: Line 216:
  bindClass( '​net.pierrox.lightning_launcher.prefs.LLPreferenceColor'​ );  bindClass( '​net.pierrox.lightning_launcher.prefs.LLPreferenceColor'​ );
  bindClass( '​net.pierrox.lightning_launcher.prefs.LLPreferenceSlider'​ );  bindClass( '​net.pierrox.lightning_launcher.prefs.LLPreferenceSlider'​ );
 + bindClass( '​net.pierrox.lightning_launcher.prefs.LLPreferenceCheckBox'​ );
   
  var drawData = getDrawData( item );  var drawData = getDrawData( item );
Line 187: Line 232:
  var prefOffX = new LLPreferenceSlider(0,​ '​Offset X', '​pixel',​ shapeInfo.offsetX,​ 0, '​INT',​ 0, 512, 1, '​px'​);​  var prefOffX = new LLPreferenceSlider(0,​ '​Offset X', '​pixel',​ shapeInfo.offsetX,​ 0, '​INT',​ 0, 512, 1, '​px'​);​
  var prefOffY = new LLPreferenceSlider(0,​ '​Offset Y', '​pixel',​ shapeInfo.offsetY,​ 0, '​INT',​ 0, 512, 1, '​px'​);​  var prefOffY = new LLPreferenceSlider(0,​ '​Offset Y', '​pixel',​ shapeInfo.offsetY,​ 0, '​INT',​ 0, 512, 1, '​px'​);​
 + var prefCornerRadX = new LLPreferenceSlider(0,​ '​Corner radius X', '​pixel',​ shapeInfo.cornerX,​ 0, '​INT',​ 0, 512, 1, '​px'​);​
 + var prefCornerRadY = new LLPreferenceSlider(0,​ '​Corner radius Y', '​pixel',​ shapeInfo.cornerY,​ 0, '​INT',​ 0, 512, 1, '​px'​);​
 + var prefStartAng = new LLPreferenceSlider(0,​ 'Start angle',​ '​degree',​ shapeInfo.startAngle,​ 0, '​INT',​ 0, 360, 1, '​deg'​);​
 + var prefSweepAng = new LLPreferenceSlider(0,​ 'Sweep angle',​ '​degree',​ shapeInfo.sweepAngle,​ 0, '​INT',​ 0, 360, 1, '​deg'​);​
  var prefFill = new LLPreferenceCheckBox( 0, '​Fill',​ null, shapeInfo.fill,​ null );  var prefFill = new LLPreferenceCheckBox( 0, '​Fill',​ null, shapeInfo.fill,​ null );
- +
  var prefList = new LLPreferenceListView( ctxTheme, null );  var prefList = new LLPreferenceListView( ctxTheme, null );
  prefList.setCompactMode(true);​  prefList.setCompactMode(true);​
 + var prefListener =
 + {
 + onLLPreferenceChanged:​ function( pref )
 + {
 + if ( pref == prefType )
 + {
 + var type = enumShapeType.findByName( prefType.getLabels()[prefType.getValueIndex()] );
 + switch ( type )
 + {
 + case enumShapeType.RECTANGLE:​
 + case enumShapeType.OVAL:​
 + prefStartAng.setVisible(false);​
 + prefSweepAng.setVisible(false);​
 +
 + prefCornerRadX.setVisible(false);​
 + prefCornerRadY.setVisible(false);​
 + break;​
 + case enumShapeType.ARC:​
 + prefStartAng.setVisible(true);​
 + prefSweepAng.setVisible(true);​
 +
 + prefCornerRadX.setVisible(false);​
 + prefCornerRadY.setVisible(false);​
 + break;​
 + case enumShapeType.ROUND_RECT:​
 + prefStartAng.setVisible(false);​
 + prefSweepAng.setVisible(false);​
 +
 + prefCornerRadX.setVisible(true);​
 + prefCornerRadY.setVisible(true);​
 + break;​
 + }
 + prefList.refresh();​
 + }
 + },
 + onLLPreferenceClicked:​ function( pref )
 + {
 + },
 + onLLPreferenceLongClicked:​ function( pref )
 + {
 + }
 + };
 + prefList.setListener( prefListener );
 +
  prefList.setPreferences( [  prefList.setPreferences( [
  prefName,  prefName,
Line 199: Line 292:
  prefOffX,  prefOffX,
  prefOffY,  prefOffY,
 + prefCornerRadX,​
 + prefCornerRadY,​
 + prefStartAng,​
 + prefSweepAng,​
  prefFill  prefFill
  ] );  ] );
 + prefListener.onLLPreferenceChanged( prefType );
  
  builder.setView( prefList );  builder.setView( prefList );
Line 230: Line 328:
  shapeInfo.offsetY = prefOffY.getValue();​  shapeInfo.offsetY = prefOffY.getValue();​
  shapeInfo.fill = prefFill.isChecked();​  shapeInfo.fill = prefFill.isChecked();​
 + shapeInfo.startAngle = prefStartAng.getValue();​
 + shapeInfo.sweepAngle = prefSweepAng.getValue();​
 + shapeInfo.cornerX = prefCornerRadX.getValue();​
 + shapeInfo.cornerY = prefCornerRadY.getValue();​
   
  setDrawData( item, drawData );  setDrawData( item, drawData );
Line 248: Line 350:
  bindClass( '​android.view.View'​ );  bindClass( '​android.view.View'​ );
  bindClass( '​android.view.ViewGroup'​ );  bindClass( '​android.view.ViewGroup'​ );
- bindClass( '​android.view.ContextThemeWrapper'​ ); 
  bindClass( '​android.view.ViewGroup.LayoutParams'​ );  bindClass( '​android.view.ViewGroup.LayoutParams'​ );
 + bindClass( '​android.view.ContextThemeWrapper'​ );
  bindClass( '​android.widget.ListView'​ );  bindClass( '​android.widget.ListView'​ );
  bindClass( '​android.widget.LinearLayout'​ );  bindClass( '​android.widget.LinearLayout'​ );
Line 382: Line 484:
  editHeight.setInputType( InputType.TYPE_CLASS_NUMBER );  editHeight.setInputType( InputType.TYPE_CLASS_NUMBER );
  
 + linearView.addView( shapeInfoLayout = new LinearLayout( ctxTheme ) );
  var btn;  var btn;
- linearView.addView( btn = new Button( ctxTheme ) );+ shapeInfoLayout.addView( btn = new Button( ctxTheme ) );
  btn.setAllCaps( false );  btn.setAllCaps( false );
- btn.setText( 'Save size' );+ btn.setText( 'Set size' );
  btn.setOnClickListener( new View.OnClickListener()  btn.setOnClickListener( new View.OnClickListener()
  {  {
Line 396: Line 499:
   
  setDrawData( item, drawData );  setDrawData( item, drawData );
 + dialog.dismiss();​
 + var time = setTimeout(function(){clearTimeout(time);​ showShapeMenu(item);​},​ 0);
 + }
 + });
 + shapeInfoLayout.addView( btn = new Button( ctxTheme ) );
 + btn.setAllCaps( false );
 + btn.setText( 'Reset size' );
 + btn.setOnClickListener( new View.OnClickListener()
 + {
 + onClick: function( view )
 + {
 + var drawData = getDrawData( item );
 +
 + drawData.width = item.getWidth();​
 + drawData.height = item.getHeight();​
 +
 + setDrawData( item, drawData );
 + dialog.dismiss();​
  var time = setTimeout(function(){clearTimeout(time);​ showShapeMenu(item);​},​ 0);  var time = setTimeout(function(){clearTimeout(time);​ showShapeMenu(item);​},​ 0);
  }  }
Line 470: Line 591:
  img.update();​  img.update();​
  item.setBoxBackground( img, '​nsf',​ true );  item.setBoxBackground( img, '​nsf',​ true );
 + }
 + });
 +
 + linearView.addView( btn = new Button( ctxTheme ) );
 + btn.setAllCaps( false );
 + btn.setText( '​Export to string'​ );
 + btn.setOnClickListener( new View.OnClickListener()
 + {
 + onClick: function( view )
 + {
 + var drawData = getDrawData( item );
 + var text = JSON.stringify(drawData);​
 + var ctx = getActiveScreen().getContext();​
 + //​bindClass( '​android.content.Context'​ );
 + bindClass( '​android.content.ClipboardManager'​ );
 + bindClass( '​android.content.ClipData'​ );
 + var clipboard = ctx.getSystemService(Context.CLIPBOARD_SERVICE);​
 + var clip = ClipData.newPlainText('​shape export',​ text);
 + clipboard.setPrimaryClip(clip);​
 + Android.makeNewToast('​Shape data exported to clipboard.',​ true).show();​
  }  }
  });  });
script_shape_background.txt · Last modified: 2017/06/20 18:26 by tbog