[C++] 141 FLTK : 線の描画 Lineクラスの引数追加

[M1 Mac, Big Sur 11.6.8, clang 13.0.0, FLTK 1.3.8, NO IDE]

[C++] 139の続きです。

前の記事では線の座標と長さを引数で設定しましたが、色や線種・太さを追加しました。

x()関数をヒントにrgb()関数とstyle()関数を作成し、これらの戻り値で設定値を取得できるようにしました。

引数が多いとコードを見てもどの引数が何を設定しているのか分かりにくいので、後ろ5つは省略可能にしました。デフォルトは太さ1の黒い実線になります。

右の縦線はデフォルト設定の黒い実線
#include <FLstd.h>
#include <cppstd.h>
#include <Line.h>

Line::Line(int x,int y, int w,int h, int r, int g, int b, int styletype, int stylewidth):Fl_Widget(x,y,w,h){
	r_ = r, g_ = g, b_ = b;
	styletype_ = styletype, stylewidth_ = stylewidth;
}
Line::~Line(){}
void Line::draw(){
	vector<int> rgb1 = rgb();
	fl_color(fl_rgb_color(rgb1[0], rgb1[1], rgb1[2]));

	vector<int> style1 = style();
	fl_line_style(style1[0],style1[1]);

	int x1 = x(), y1 = y();
	int x2 = x()+ w(), y2 = y()+ h();
	fl_line(x1,y1,x2,y2);
}
#pragma once
#include <FLstd.h>
#include <cppstd.h>

class Line: public Fl_Widget
{
	int r_, g_, b_;
	int styletype_, stylewidth_;
public:
	Line(int x,int y, int w,int h, int r = 0, int g = 0, int b = 0, int styletype = 0, int stylewidth = 1);
	~Line();
	void draw();
	vector<int> rgb() const {return {r_,g_,b_};}
	vector<int> style() const {return {styletype_, stylewidth_};}
};
#include "Line.h"

Line *line1 = new Line(40,171,309,0,211,207,217,0,1);
Line *line2 = new Line(349,10,0,195); // デフォルトの黒い実線
Line *line3 = new Line(278,131,71,0,211,207,217,0,1);
Line *line4 = new Line(278,131,0,41,211,207,217,0,1);